Lý lịch
Tôi đang học hỗ trợ, Coq, một mình. Cho đến nay, tôi đã hoàn thành việc đọc Coq của Yves Bertot trong một vội vàng . Bây giờ, mục tiêu của tôi là chứng minh một số kết quả cơ bản liên quan đến các số tự nhiên, đỉnh cao là thuật toán phân chia. Tuy nhiên, tôi đã gặp phải một số thất bại trên con đường hướng tới mục tiêu đó. Cụ thể, hai kết quả sau đây đã chứng minh (ý định chơi chữ) khó chứng minh ở Coq hơn tôi tưởng tượng ban đầu. Trên thực tế, tôi đã, sau nhiều nỗ lực không có kết quả, đã dùng đến việc chứng minh chúng bằng tay (như hình dưới đây). Điều này rõ ràng không giúp tôi trở nên thành thạo hơn trong việc xử lý Coq; đó là lý do tại sao tôi chuyển sang diễn đàn này Tôi hy vọng rằng ai đó trên trang web này có thể và sẵn sàngđể giúp tôi dịch các bằng chứng của mình dưới đây thành một bằng chứng mà Coq chấp nhận. Tất cả sự giúp đỡ được trân trọng!
Định lý A
Với mọi
Giả sử . Do đó có một z ∈ N với I ( N , x + S ( z ) , S ( y ) ) Do đó bởi (Peano 1b và 3) I ( N , x + z , y )
Xác định một vị
Nó là đủ để hiển thị . Chúng tôi chứng minh điều này bằng cách cảm ứng trên z . Để xem Q ( 0 ) , không phải ethat nếu I ( N , x + 0 , y ) giữ thì I ( N , x , y ) là đúng bởi Peano 1a. Do đó, x < y ∨ tôi ( n , x , y ) . Bây giờ, chúng tôi chứng minh Q ( S ( v ) : Giả sử I ( N , x + S ( v ) , y ) . Từ định nghĩa này, chúng ta có x < y và do đó x < y ∨ tôi ( N , x , y ) cũng trong trường hợp này. Cuối cùng, tiên đề thứ năm Peano của cho Q ( z ) và ( * ) chúng tôi nhận x < y ∨ tôi ( N , x , y .
Định lý B
Đối với tất cả x < y ∨ tôi ( N , x , y ) ∨ y < x Chứng minh:
Nếu thì ¬ I ( N , x , y ) theo định nghĩa, và nếu x > y thì ¬ I ( N , x , y ) cũng theo định nghĩa. Nếu x > y và y > x thì bằng độ xuyên sáng và tính phản xạ, chúng ta có I ( N , x , y ) , đó là một mâu thuẫn. Do đó, không có nhiều hơn một trong những tuyên bố là đúng.
Chúng tôi giữ cố định và quy nạp trên x . Khi tôi ( N , 0 , y ) chúng ta có 0 < y ∨ tôi ( N , 0 , y ) cho tất cả các y , trong đó chứng minh các trường hợp cơ sở. Tiếp theo, giả sử định lý giữ cho x ; bây giờ chúng tôi muốn chứng minh định lý cho S ( x ) . Từ trichotomy cho x , có ba trường hợp: x < y , I ( N , x và x > y . Nếu x > y , thì rõ ràng S ( x ) > y . Nếu I ( N , x , y ) , thì S ( x ) > y (dưới dạng S ( x ) > x với mọi x ∈ N ). Cuối cùng, giả sử x < y Sau đó, theo định lý A ta có S ( x ) hoặc I ( N , S ( x ) , y ) và trong cả hai trường hợp chúng ta đã hoàn thành.
Các định lý mà tôi muốn chứng minh, có thể được trình bày như sau trong Coq.
Bổ đề less_lem (xy: N): less x (succ y) -> hoặc (less xy) (IN xy).
Định lý Ntrichotomy: (forall xy: N, hoặc (less xy) (hoặc (IN xy) (less yx))).
Kết quả hữu ích
Ở đây, tôi đã thu thập một số kết quả mà tôi đã xác định và chứng minh cho đến thời điểm này. Đây là những cái mà tôi đề cập ở trên. * Đây là mã mà tôi đã quản lý để viết cho đến nay, lưu ý rằng hầu hết bao gồm các định nghĩa. *
(* 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))).