Tôi đang cố gắng hiểu các loại quy nạp từ chapter 7 of "theorem proving in lean".Chứng minh tài sản thay thế của người thừa kế trên sự bình đẳng
tôi đặt ra cho mình một nhiệm vụ chứng minh rằng người kế nhiệm của các số tự nhiên có một tài sản thay thế trên bình đẳng:
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
Sau khi một số phỏng đoán và khá toàn diện tìm kiếm tôi đã có thể đáp ứng các trình biên dịch với một vài khả năng:
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
Tôi không hiểu bất kỳ bằng chứng nào tôi vừa thực sự hoạt động.
- Định nghĩa đầy đủ của loại
eq
(quy nạp) là gì? Trong VSCode tôi có thể thấy chữ ký loạieq
làeq Π {α : Type} α → α → Prop
, nhưng tôi không thể thấy các nhà xây dựng cá nhân (quy nạp) (tương tự củazero
vàsucc
từnatural
). Điều tốt nhất tôi có thể tìm thấy trong mã nguồn doesn't look quite right. - Tại sao
eq.subst
vui lòng chấp nhận bằng chứng là(natural.succ a) = (natural.succ a)
để cung cấp bằng chứng là(natural.succ a) = (natural.succ b)
? - higher order unification là gì và cách áp dụng cho ví dụ cụ thể này?
- ý nghĩa của lỗi tôi nhận được khi tôi gõ
#check (eq.rec_on H (eq.refl (natural.succ a)))
, đó là[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
định nghĩa của cuộc sống eq trong https://github.com/leanprover/lean/blob/master/library/init/core.lean – Adam
là tại sao nó chấp nhận bằng chứng, afaik khi bạn hủy sự bình đẳng nó gây ra a và b để được xem xét giống nhau (sau khi tất cả chúng là cùng một đối số của hàm tạo) vì vậy trong kiểu trả về nó cũng được thay thế, cho ra một đối tượng đích với kiểu (natural.suc c a) = (natural.succ a) mà bạn tình cờ có – Adam
Tôi thậm chí không hiểu một câu duy nhất của câu hỏi này :-) Chúc may mắn! – Stimul8d