L'axiome du tiers-exclus
Attention, un axiome n'est pas un théorème. En ajoutant un axiome on prend
le risque énorme que la théorie devienne incohérente, c'est-à-dire permette
de prouver False.
Dans notre cas, un théorème difficile montre que si Coq est correct
(c'est-à-dire ne permet pas de prouver False), alors il l'est encore avec
le tiers exclu.
Avec cet axiome, on peut prouver, par exemple, que le raisonnement par
l'absurde est correct.
Conséquences en logique propositionnelle
Theorem NNPP : ∀ P : Prop, ¬ ¬ P → P.
Proof.
(* Soit P une proposition quelconque. *)
intros P. unfold not.
(* On suppose (hyp. (H)) que P est non contradictoire. *)
intros H.
(* Par le principe du tiers exclu appliqué à P, on a
(HP) : P
ou
(HnP) : ~ P *)
destruct (classic P) as [HP | HnP].
- (* cas 1 : (HP) *)
exact HP.
- (* cas 2 : (HnP) *)
(* On va ici utiliser le principe d'explosion : ce cas est contradictoire. *)
exfalso.
unfold not in HnP.
apply H.
exact HnP.
Qed.
Remarquer destruct (classic P) as [HP | HnP].. Ici,
classic est un axiome qui prend une proposition en argument et
(classic P) est une preuve de (P ∨ ¬P). Avec destruct, on
peut donc la détruire et faire une preuve par cas.
Exercice :
En utilisant le tiers exclu ou l'une de ses conséquences, prouver le théorème suivant :Theorem de_morgan_not_and : ∀ P Q : Prop, ¬ (P ∧ Q) → (¬ P) ∨ (¬ Q).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Remarque (voir les exercices à faire à la maison) :
En utilisant le tiers exclu ou l'une de ses conséquences, prouver le
théorème suivant :
- les trois autres lois de de Morgan sont prouvables en logique intuitionniste.
- celle-ci ne l'est pas, on a absolument besoin du tiers exclu.
Exercice :
Theorem classical_imp : ∀ P Q : Prop, (P → Q) ↔ (Q ∨ ¬ P).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Peirce_law : ∀ P Q : Prop, ((P → Q) → P) → P.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem contrapose :
∀ P Q : Prop, (¬Q → ¬P) → (P → Q).
Proof.
intros P Q H HP.
apply NNPP.
intros HnQ.
apply H.
- exact HnQ.
- exact HP.
Qed.
Conséquences en calcul des prédicats
On va voir qu'en logique classique (comme dans vos cours de mathématique), la négation d'un "il existe" est un "pour tout" et la négation d'un "pour tout" est un "il existe".
Theorem all_not_not_ex :
∀ (U : Type) (P : U → Prop),
(∀ n : U, ¬ P n) → ¬ (∃ n : U, P n).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem ex_not_not_all :
∀ (U : Type) (P : U → Prop),
(∃ n : U, ¬ P n) → ¬ (∀ n : U, P n).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
∀ (U : Type) (P : U → Prop),
(∀ n : U, ¬ P n) → ¬ (∃ n : U, P n).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem ex_not_not_all :
∀ (U : Type) (P : U → Prop),
(∃ n : U, ¬ P n) → ¬ (∀ n : U, P n).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Mais à partir d'ici, il y en a besoin. Remarquez que ce n'est pas toujours
facile de deviner à quelle proposition il faut l'appliquer.
Ici, il faut destruct (classic (P n)) pour raisonner par cas sur P n.
Theorem not_ex_not_all :
∀ (U : Type) (P : U → Prop),
¬ (∃ n : U, ¬ P n) → ∀ n : U, P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem not_ex_all_not :
∀ {U : Type} (P : U → Prop),
¬ (∃ n : U, P n) → ∀ n : U, ¬ P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem not_all_ex_not :
∀ {U : Type} {P : U → Prop},
¬ (∀ n : U, P n) → ∃ n : U, ¬ P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem not_all_not_ex :
∀ (U : Type) (P : U → Prop),
¬ (∀ n : U, ¬ P n) → ∃ n : U, P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
∀ (U : Type) (P : U → Prop),
¬ (∃ n : U, ¬ P n) → ∀ n : U, P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem not_ex_all_not :
∀ {U : Type} (P : U → Prop),
¬ (∃ n : U, P n) → ∀ n : U, ¬ P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem not_all_ex_not :
∀ {U : Type} {P : U → Prop},
¬ (∀ n : U, P n) → ∃ n : U, ¬ P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem not_all_not_ex :
∀ (U : Type) (P : U → Prop),
¬ (∀ n : U, ¬ P n) → ∃ n : U, P n.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)