Latar Belakang
Saya belajar bantuan, Coq, sendiri. Sejauh ini, saya telah selesai membaca Yves Bertot's Coq in a Hurry . Sekarang, tujuan saya adalah untuk membuktikan beberapa hasil dasar mengenai bilangan asli, yang berpuncak dengan algoritma pembagian. Namun, saya telah menemui beberapa kemunduran dalam perjalanan menuju tujuan itu. Secara khusus, dua hasil berikut telah membuktikan (pun intended) lebih sulit untuk dibuktikan dalam Coq daripada yang saya bayangkan sebelumnya. Bahkan, setelah banyak upaya saya sia-sia, saya terpaksa membuktikannya dengan tangan (seperti yang ditunjukkan di bawah). Ini jelas tidak membantu saya menjadi lebih mahir dalam menangani Coq; itulah sebabnya saya beralih ke forum ini. Harapan saya adalah seseorang di situs ini dapat dan maumembantu saya menerjemahkan bukti saya di bawah ini menjadi bukti yang diterima Coq. Semua bantuan dengan tulus dihargai!
Teorema A
Untuk semua x < S ( y ) ⊂ x < y ∨ I ( N , x , y ) Bukti:
Misalkan . Karenanya ada z ∈ N dengan I ( Maka oleh (Peano 1b dan 3)I(N,x+z,y)
Tentukan predikat
Cukup untuk menunjukkan . Kami membuktikan ini dengan induksi pada z . Untuk melihat Q ( 0 ) , bukan ethat jika I ( N , x + 0 , y ) berlaku maka I ( N , x , y ) benar oleh Peano 1a. Jadi, x < y ∨ I ( n , x , y ) . Sekarang, kami membuktikan Q ( S ( v ) : Misalkan I ( N , x + S ( v ) , y ) . Dari definisi ini kita memiliki x < y dan dengan demikian x < y ∨ I ( N , x , y ) juga dalam hal ini. Akhirnya, aksioma kelima Peano memberi Q ( z ) dan dengan ( ∗ ) kita mendapatkan x < y ∨ I ( N , x , y .
Teorema B
Untuk semua x < y ∨ I ( N , x , y ) ∨ y < x Bukti:
Jika maka ¬ I ( N , x , y ) menurut definisi, dan jika x > y maka ¬ I ( N , x , y ) juga menurut definisi. Jika x > y dan y > x maka dengan transitivitas dan refleksivitas, kita memiliki I ( N , x , y ) , yang merupakan kontradiksi. Akibatnya, tidak lebih dari satu pernyataan yang benar.
Kami terus tetap dan melantik pada x . Ketika saya ( N , 0 , y ) yang kita miliki untuk semua y , yang membuktikan kasus dasar. Selanjutnya, anggap teorema berlaku untuk x ; sekarang kita ingin membuktikan teorema untuk S ( x ) . Dari trikotomi untuk x , ada tiga kasus: x < y , I ( N , x , dan x > y . Jika x > y , maka jelas S ( x ) > y . Jika I ( N , x , y ) , maka S ( x ) > y (sebagai S ( x ) > x untuk semua x ∈ N ). Akhirnya, misalkan x < y Kemudian, dengan teorema A kita memiliki S ( x ) atau I ( N , S ( x ) , y ) , dan dalam kedua kasus kita selesai.
Teorema yang ingin saya buktikan, dapat diungkapkan sebagai berikut dalam Coq.
Lemma less_lem (xy: N): less x (succ y) -> atau (less xy) (IN xy).
Teorema Ntrichotomy: (forall xy: N, atau (less xy) (atau (IN xy) (less yx))).
Hasil yang bermanfaat
Di sini, saya telah mengumpulkan beberapa hasil yang telah saya tetapkan, dan terbukti sampai titik ini. Inilah yang saya sebut di atas. * Ini adalah kode yang saya tulis sejauh ini, perhatikan bahwa sebagian besar terdiri dari definisi. *
(* Sigma types *)
Inductive Sigma (A:Set)(B:A -> Set) :Set :=
Spair: forall a:A, forall b : B a,Sigma A B.
Definition E (A:Set)(B:A -> Set)
(C: Sigma A B -> Set)
(c: Sigma A B)
(d: (forall x:A, forall y:B x,
C (Spair A B x y))): C c :=
match c as c0 return (C c0) with
| Spair a b => d a b
end.
(* Binary sum type *)
Inductive sum' (A B:Set):Set :=
inl': A -> sum' A B | inr': B -> sum' A B.
Print sum'_rect.
Definition D (A B : Set)(C: sum' A B -> Set)
(c: sum' A B)
(d: (forall x:A, C (inl' A B x)))
(e: (forall y:B, C (inr' A B y))): C c :=
match c as c0 return C c0 with
| inl' x => d x
| inr' y => e y
end.
(* Three useful finite sets *)
Inductive N_0: Set :=.
Definition R_0
(C:N_0 -> Set)
(c: N_0): C c :=
match c as c0 return (C c0) with
end.
Inductive N_1: Set := zero_1:N_1.
Definition R_1
(C:N_1 -> Set)
(c: N_1)
(d_zero: C zero_1): C c :=
match c as c0 return (C c0) with
| zero_1 => d_zero
end.
Inductive N_2: Set := zero_2:N_2 | one_2:N_2.
Definition R_2
(C:N_2 -> Set)
(c: N_2)
(d_zero: C zero_2)
(d_one: C one_2): C c :=
match c as c0 return (C c0) with
| zero_2 => d_zero
| one_2 => d_one
end.
(* Natural numbers *)
Inductive N:Set :=
zero: N | succ : N -> N.
Print N.
Print N_rect.
Definition R
(C:N -> Set)
(d: C zero)
(e: (forall x:N, C x -> C (succ x))):
(forall n:N, C n) :=
fix F (n: N): C n :=
match n as n0 return (C n0) with
| zero => d
| succ n0 => e n0 (F n0)
end.
(* Boolean to truth-value converter *)
Definition Tr (c:N_2) : Set :=
match c as c0 with
| zero_2 => N_0
| one_2 => N_1
end.
(* Identity type *)
Inductive I (A: Set)(x: A) : A -> Set :=
r : I A x x.
Print I_rect.
Theorem J
(A:Set)
(C: (forall x y:A,
forall z: I A x y, Set))
(d: (forall x:A, C x x (r A x)))
(a:A)(b:A)(c:I A a b): C a b c.
induction c.
apply d.
Defined.
(* functions are extensional wrt
identity types *)
Theorem I_I_extensionality (A B: Set)(f: A -> B):
(forall x y:A, I A x y -> I B (f x) (f y)).
Proof.
intros x y P.
induction P.
apply r.
Defined.
(* addition *)
Definition add (m n:N) : N
:= R (fun z=> N) m (fun x y => succ y) n.
(* multiplication *)
Definition mul (m n:N) : N
:= R (fun z=> N) zero (fun x y => add y m) n.
(* Axioms of Peano verified *)
Theorem P1a: (forall x: N, I N (add x zero) x).
intro x.
(* force use of definitional equality
by applying reflexivity *)
apply r.
Defined.
Theorem P1b: (forall x y: N,
I N (add x (succ y)) (succ (add x y))).
intros.
apply r.
Defined.
Theorem P2a: (forall x: N, I N (mul x zero) zero).
intros.
apply r.
Defined.
Theorem P2b: (forall x y: N,
I N (mul x (succ y)) (add (mul x y) x)).
intros.
apply r.
Defined.
Definition pd (n: N): N :=
R (fun _=> N) zero (fun x y=> x) n.
(* alternatively
Definition pd (x: N): N :=
match x as x0 with
| zero => zero
| succ n0 => n0
end.
*)
Theorem P3: (forall x y:N,
I N (succ x) (succ y) -> I N x y).
intros x y p.
apply (I_I_extensionality N N pd (succ x) (succ y)).
apply p.
Defined.
Definition not (A:Set): Set:= (A -> N_0).
Definition isnonzero (n: N): N_2:=
R (fun _ => N_2) zero_2 (fun x y => one_2) n.
Theorem P4 : (forall x:N,
not (I N (succ x) zero)).
intro x.
intro p.
apply (J N (fun x y z =>
Tr (isnonzero x) -> Tr (isnonzero y))
(fun x => (fun t => t)) (succ x) zero)
.
apply p.
simpl.
apply zero_1.
Defined.
Theorem P5 (P:N -> Set):
P zero -> (forall x:N, P x -> P (succ x))
-> (forall x:N, P x).
intros base step n.
apply R.
apply base.
apply step.
Defined.
(* I(A,-,-) is an equivalence relation *)
Lemma Ireflexive (A:Set): (forall x:A, I A x x).
intro x.
apply r.
Defined.
Lemma Isymmetric (A:Set): (forall x y:A, I A x y -> I A y x).
intros x y P.
induction P.
apply r.
Defined.
Lemma Itransitive (A:Set):
(forall x y z:A, I A x y -> I A y z -> I A x z).
intros x y z P Q.
induction P.
assumption.
Defined.
Lemma succ_cong : (forall m n:N, I N m n -> I N (succ m) (succ n)).
intros m n H.
induction H.
apply r.
Defined.
Lemma zeroadd: (forall n:N, I N (add zero n) n).
intro n.
induction n.
simpl.
apply r.
apply succ_cong.
auto.
Defined.
Lemma succadd: (forall m n:N, I N (add (succ m) n) (succ (add m n))).
intros.
induction n.
simpl.
apply r.
simpl.
apply succ_cong.
auto.
Defined.
Lemma commutative_add: (forall m n:N, I N (add m n) (add n m)).
intros n m; elim n.
apply zeroadd.
intros y H; elim (succadd m y).
simpl.
rewrite succadd.
apply succ_cong.
assumption.
Defined.
Lemma associative_add: (forall m n k:N,
I N (add (add m n) k) (add m (add n k))).
intros m n k.
induction k.
simpl.
apply Ireflexive.
simpl.
apply succ_cong.
assumption.
Defined.
Definition or (A B : Set):= sum' A B.
Definition less (m n: N) :=
Sigma N (fun z => I N (add m (succ z)) n).
Lemma less_lem (x y:N) :
less x (succ y) -> or (less x y) (I N x y).
intro.
destruct H.
right.
(* Here is where I'm working right now *)
Defined.
Theorem Ntrichotomy: (forall x y:N,
or (less x y) (or (I N x y) (less y x))).