我试图从chapter 7 of "theorem proving in lean"了解归纳类型。证明继承人超越平等的替代财产
我给自己设定了证明自然数的是继任者的任务,拥有平等的一个替代性质:
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
(inductive)类型的完整定义?在VSCode中,我可以看到eq
的类型签名为eq Π {α : Type} α → α → Prop
,但我看不到单独的(归纳)构造函数(zero
和succ
的类似项从natural
开始)。我可以在源代码doesn't look quite right中找到最好的。 - 为什么
eq.subst
高兴地接受(natural.succ a) = (natural.succ a)
的证明来提供(natural.succ a) = (natural.succ b)
的证明? - 什么是higher order unification它是如何适用于这个特殊的例子?
- 什么是错误,当我键入
#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
在https://github.com/leanprover/lean/blob/master/library/init/core.lean – Adam
均衡生活的定义,为什么它接受的证明,据我所知,当你破坏它引起a和b的相等性(毕竟它们是构造函数的相同参数),所以在返回类型中它也被替换,产生一个类型为(natural.suc c)=(natural.succ a)你碰巧有 – Adam
我甚至不明白这个问题的单个句子:-)虽然好运! – Stimul8d