我试图从“精益定理证明”的第 7 章中理解归纳类型。
我为自己设定了一项任务,即证明自然数的后继具有替代等式的属性:
inductive natural : Type
| zero : natural
| succ : natural -> natural
lemma succ_over_equality (a b : natural) (H : a = b) :
(natural.succ a) = (natural.succ b) := sorry
经过一些猜测和相当详尽的搜索后,我能够满足编译器的几种可能性:
lemma succ_over_equality (a b : natural) (H : a = b) :
(natural.succ a) = (natural.succ b) :=
eq.rec_on H (eq.refl (natural.succ a))
--eq.rec_on H rfl
--eq.subst H rfl
--eq.subst H (eq.refl (natural.succ a))
--congr_arg (λ (n : natural), (natural.succ n)) H
我不明白我刚刚给出的任何证明实际上是如何工作的。
eq
(归纳)类型的完整定义是什么?在 VSCode 中,我可以看到eq
as的类型签名eq Π {α : Type} α → α → Prop
,但看不到单个(归纳)构造函数(zero
和succ
from的类似物natural
)。我能在源代码中找到的最好的看起来不太正确。- 为什么
eq.subst
乐于接受一个证明(natural.succ a) = (natural.succ a)
提供一个证明(natural.succ a) = (natural.succ b)
? - 什么是高阶统一,它如何应用于这个特定的例子?
- 我输入时收到的错误是什么意思
#check (eq.rec_on H (eq.refl (natural.succ a)))
,即[Lean] invalid 'eq.rec_on' application, elaborator has special support for this kind of application (it is handled as an "eliminator"), but the expected type must be known eq.rec_on : Π {α : Sort u} {a : α} {C : α → Sort l} {a_1 : α}, a = a_1 → C a → C a_1