我試圖從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