Contexte
J'apprends l'aide, Coq, par moi-même. Jusqu'à présent, j'ai terminé la lecture du Coq à la hâte d'Yves Bertot . Maintenant, mon objectif est de prouver quelques résultats de base concernant les nombres naturels, culminant avec l'algorithme dit de division. Cependant, j'ai rencontré quelques revers sur mon chemin vers cet objectif. En particulier, les deux résultats suivants se sont révélés (jeu de mots destinés) être plus difficiles à prouver en Coq que je ne l'avais initialement imaginé. En fait, j'ai, après de nombreuses tentatives infructueuses, recouru à les prouver à la main (comme indiqué ci-dessous). Cela ne m'aide clairement pas à devenir plus compétent dans la gestion du Coq; c'est pourquoi je me tourne vers ce forum. J'espère que quelqu'un sur ce site est capable et désireuxpour m'aider à traduire mes preuves ci-dessous en une preuve que Coq accepte. Toute aide est sincèrement appréciée!
Théorème A
Pour tout Preuve:x < S ( y ) ⊂ x < y ∨ I ( N , x , y )
Supposons que . Il y a donc un avec D'où par (Peano 1b et 3)z ∈ N I ( N , x + S ( z ) , S ( y ) ) I ( N , x + z , y )
Définir un prédicat
Il suffit de montrer . Nous le prouvons par récurrence sur . Pour voir , pas que si est valide alors est vrai par Peano 1a. Ainsi, . Maintenant, nous prouvons : Supposons . De cette définition, nous avons et donc également dans ce cas. Enfin, le cinquième axiome de Peano donne et par nous obtenons . z Q ( 0 ) I ( N , x + 0 , y ) I ( N , x , y x < y ∨x < y ∨ I ( n , x , y ) Q ( I ( N , x , y ) Q ( z ) ( ∗ )I ( N , x + S ( v ) , y ) x <
Théorème B
Pour tout Preuve:x < y ∨ I ( N , x , y ) ∨ y < x
Si alors par définition, et si alors également par définition. Si et alors par transitivité et réflexivité, nous avons , ce qui est une contradiction. Par conséquent, pas plus d'une des affirmations n'est vraie.¬ I ( N , x , y )¬ I ( N , x , y ) x > y I ( N , x , y )
Nous gardons fixe et introduisons sur . Lorsque nous avons pour tout , ce qui prouve le cas de base. Supposons ensuite que le théorème est valable pour ; maintenant, nous voulons prouver le théorème de . De la trichotomie pour , il y a trois cas: et . Si , alors clairement . Si , alors (comme pour tous les ). Enfin, supposons quex I ( N , 0 , y ) 0 < y ∨ I ( N , 0 , y ) y x S ( x ) x x < y , I ( N , x , y ) x > y x > y S ( x ) > y I ( N , x , y )S ( x ) > x x ∈ NEnsuite, par le théorème A, nous avons ou , et dans les deux cas, nous avons terminé.
Les théorèmes que je souhaite prouver peuvent être exprimés comme suit dans Coq.
Lemme less_lem (xy: N): moins x (succ y) -> ou (less xy) (IN xy).
Ntrichotomie du théorème: (pour tout xy: N, ou (moins xy) (ou (IN xy) (moins yx))).
Des résultats utiles
Ici, j'ai rassemblé certains des résultats que j'ai définis et prouvé jusqu'à présent. Ce sont ceux que je mentionne ci-dessus. * C'est le code que j'ai réussi à écrire jusqu'à présent, notez que la plupart se compose de définitions. *
(* 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))).