deduction_naturelle
On redéfinit la notiation ⊧ pour correspondre à la conséquance
logique entre une ensemble de formule Γ et une formule f.
Dans les développement précédents f1 ⊧ f2 correspondait à la
conséquence logique entre deux formule.
Ce module définit le système de preuve de la déduction naturelle
pour la logique propositionnelle. Il établit les propriétés
suivantes de ce système:
- correction vis-à-vis de la sémantique des propriétés
- complétude vis-à-vis de la sémantique des propriétés. Cette preuve est directement inspirée de celle Michel Levy dans son polycopié de cours "Introduction à la logique" et dans le livre correspondant.
Préliminaires
Lemma not_ex_contradictoire_2:
∀ Γ,
~(∃ n, Var n ∈ Γ ∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
→ ∀ n, (Var n) ∈ Γ → ~((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ).
Lemma not_ex_contradictoire_3:
∀ Γ,
~(∃ n, (Var n) ∈ Γ ∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
→ ∀ n, (¬Var n) ∈ Γ → ¬ (Var n) ∈ Γ.
Lemma not_ex_contradictoire_4:
∀ Γ,
~(∃ n, (Var n) ∈ Γ ∧ ((¬Var n) ∈ Γ ∨(Var n⇒⊥) ∈ Γ))
→ ∀ n, (Var n ⇒ ⊥) ∈ Γ → ¬(Var n) ∈ Γ.
∀ Γ,
~(∃ n, Var n ∈ Γ ∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
→ ∀ n, (Var n) ∈ Γ → ~((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ).
Lemma not_ex_contradictoire_3:
∀ Γ,
~(∃ n, (Var n) ∈ Γ ∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
→ ∀ n, (¬Var n) ∈ Γ → ¬ (Var n) ∈ Γ.
Lemma not_ex_contradictoire_4:
∀ Γ,
~(∃ n, (Var n) ∈ Γ ∧ ((¬Var n) ∈ Γ ∨(Var n⇒⊥) ∈ Γ))
→ ∀ n, (Var n ⇒ ⊥) ∈ Γ → ¬(Var n) ∈ Γ.
Inductive pf : env →formule → Prop :=
ax : ∀ Γ φ, φ ∈ Γ → Γ ⊢ φ
| true_ax : ∀ Γ, Γ ⊢ ⊤
| impe: ∀ Γ φ1 φ2, Γ ⊢ φ1 ⇒ φ2 → Γ ⊢ φ1 → Γ ⊢ φ2
| impi: ∀ Γ φ1 φ2, φ1 :: Γ ⊢ φ2 → Γ ⊢ φ1 ⇒ φ2
| andi: ∀ Γ φ1 φ2, Γ ⊢ φ1 → Γ ⊢ φ2 → Γ ⊢ φ1 ∧ φ2
| ande1: ∀ Γ φ1 φ2, Γ ⊢ φ1 ∧ φ2 → Γ ⊢ φ1
| ande2: ∀ Γ φ1 φ2, Γ ⊢ φ1 ∧ φ2 → Γ ⊢ φ2
| noti: ∀ Γ φ1, φ1 :: Γ ⊢ ⊥ → Γ ⊢ ¬ φ1
| note: ∀ Γ φ1 φ2, Γ ⊢ φ1 → Γ ⊢ ¬ φ1 → Γ ⊢ φ2
| ore: ∀ Γ φ1 φ2 φ3,
Γ ⊢ φ1 ∨ φ2 → φ1::Γ ⊢ φ3 → φ2::Γ ⊢ φ3 → Γ ⊢ φ3
| ori1: ∀ Γ φ1 φ2, Γ ⊢ φ1 → Γ ⊢ φ1 ∨ φ2
| ori2: ∀ Γ φ1 φ2, Γ ⊢ φ2 → Γ ⊢ φ1 ∨ φ2
| fale: ∀ Γ φ1, (¬ φ1) :: Γ ⊢ ⊥ → Γ ⊢ φ1
where " X ⊢ Y" := (pf X Y).
Exemples de preuve en déduction naturelle
Module Exemple_DN.
Lemma ex_DN_1: pf ([X1]) X1.
tax.
Qed.
Lemma ex_DN_2: [X1 , X2] ⊢ X1.
tax.
Qed.
Lemma ex_DN_3: [X2 , X1] ⊢ X1.
tax.
Qed.
Lemma ex_DN_1: pf ([X1]) X1.
tax.
Qed.
Lemma ex_DN_2: [X1 , X2] ⊢ X1.
tax.
Qed.
Lemma ex_DN_3: [X2 , X1] ⊢ X1.
tax.
Qed.
Cette propriété est connue sous le nom « Tiers exclu ». Le tiers
exclu est prouvable en déduction naturelle pour toute formule A.
Lemma a_or_nota : ∀ A Γ, Γ ⊢ A∨¬A.
Proof.
intros A Γ.
apply fale.
apply note with (A∨¬A).
- apply ori2.
apply noti.
apply note with (A∨¬A).
+ apply ori1.
tax.
+ tax.
- tax.
Qed.
End Exemple_DN.
Propriétés remarquables de la déduction naturelles
Compatibilité de la preuve avec la notion d'égalité sur les environnements.
Le morphisme associé
Lemma or_imp: ∀ B C Γ, ((B ⇒ ⊥) ⇒ C) :: Γ ⊢ (B∨C).
Lemma weakening: ∀ Γ φ ψ, Γ ⊢ ψ → φ :: Γ ⊢ ψ.
Lemma impe_impi_add: ∀ Γ φ φ´ ψ, φ :: Γ ⊢ ψ → φ´ :: Γ ⊢ φ → φ´ :: Γ ⊢ ψ.
Lemma impe_impi: ∀ Γ φ ψ, φ :: Γ ⊢ ψ → Γ ⊢ φ → Γ ⊢ ψ.
Lemma impe_impi_add_double: ∀ Γ φ φ´ φ´´ ψ,
φ :: φ´ :: Γ ⊢ ψ →
φ´´ :: Γ ⊢ φ →
φ´´ :: Γ ⊢ φ´ →
φ´´ :: Γ ⊢ ψ.
Plusieurs des ces lemmes sont en exercices dans la preuve de M.
Levy.
Exercie 46 Levy
Lemma and_false_false_or : ∀ B C Γ, ((B∧C)⇒⊥) :: Γ ⊢ (B⇒⊥)∨(C⇒⊥).
Lemma not_not_eq: ∀ Γ A, Γ ⊢ A → Γ ⊢ ¬(¬A).
Lemma not_not_eq´´: ∀ Γ A, (¬(¬A)) :: Γ ⊢ A.
Lemma not_not_eq´´´´: ∀ Γ A, ((¬A)⇒⊥) :: Γ ⊢ A.
Lemma and_false_false_or´ : ∀ B C Γ, (¬(B∧C)) :: Γ ⊢ (¬B)∨(¬C).
Exo 47, partie 1
Exo 47, partie 2
Exo 47, partie 1, avec le not
Exo 47, partie 2
exo 48 Levy (1)
exo 48 Levy (2)
exo 48 Levy (1)
exo 48 Levy (2)
Correction de la déduction naturelle
Function mesure (p :formule){struct p}:nat :=
match p with
⊤ ⇒ 1
| ⊥ ⇒ 0
| Var _ =>1
| ¬ φ2 ⇒ mesure(φ2)+1
| φ2 ⇒ p2 ⇒ mesure(φ2)+mesure(p2)+1
| φ2 ∨ p2 ⇒ mesure(φ2)+mesure(p2)+2
| φ2 ∧ p2 ⇒ mesure(φ2)+mesure(p2)+1
end.
Mesure sur un environnement. On utilisera cette définition sur
φ::Γ pour définir la mesure sur Γ⊢φ. On additionne les mesures de
toutes les formules de Γ.
Definition de la relation d'ordre sur les environnement induite par la mesure.
Cette relation est bien fondée.
⊥ est le minimum pour cette mesure.
Quelques preuve de compatibilité de la mesure
en vue de permettre les opérations de remplacement (rewrite, symmetry etc)}
Lemma add_mesure_comm:
∀ (k k´ : formule) (a : ℕ),
add_mesure k (add_mesure k´ a) = add_mesure k´ (add_mesure k a).
Add Morphism add_mesure
with signature Logic.eq ==> Logic.eq ==> Logic.eq as add_mesure_morphism.
Add Morphism gammaMesure
with signature ENV.eq ==> Logic.eq as gamma_mesure_morphism.
Lemma transp_add_mesure : ENV.transpose_neqkey nat Logic.eq add_mesure.
Lemma gammaMesure_congru:
∀ A Γ, gammaMesure (A :: Γ) = add_mesure A (gammaMesure Γ) .
∀ (k k´ : formule) (a : ℕ),
add_mesure k (add_mesure k´ a) = add_mesure k´ (add_mesure k a).
Add Morphism add_mesure
with signature Logic.eq ==> Logic.eq ==> Logic.eq as add_mesure_morphism.
Add Morphism gammaMesure
with signature ENV.eq ==> Logic.eq as gamma_mesure_morphism.
Lemma transp_add_mesure : ENV.transpose_neqkey nat Logic.eq add_mesure.
Lemma gammaMesure_congru:
∀ A Γ, gammaMesure (A :: Γ) = add_mesure A (gammaMesure Γ) .
Lemma conseqset_andl: ∀ {Γ B C}, Γ ⊧ B∧C → Γ ⊧ B.
Lemma conseqset_andr: ∀ {Γ B C}, Γ ⊧ B∧C → Γ ⊧ C.
Lemma conseqset_impe2: ∀ {Γ B C}, Γ ⊧ B⇒C → B :: Γ ⊧ C.
Lemma conseqset_or_notl: ∀ {Γ B C}, Γ ⊧ B∨C → (B⇒⊥) :: Γ ⊧ C.
Lemma conseqset_lande:
∀ {Γ Γ´ B C D},
Γ´ == (B∧C) :: Γ → Γ´ ⊧ D → (B :: (C :: Γ)) ⊧ D.
Lemma conseqset_neg: ∀ Γ φ, Γ ⊧ ¬φ → (φ :: Γ) ⊧ ⊥.
Lemma conseqset_or_l:
∀ {Γ Γ´ B C D}, Γ´ == (B∨C) :: Γ → Γ´ ⊧ D → B :: Γ ⊧ D.
Lemma conseqset_or_r:
∀ {Γ Γ´ B C D}, Γ´ == (B∨C) :: Γ → Γ´ ⊧ D → C :: Γ ⊧ D.
Lemma conseqset_imp_l:
∀ {Γ Γ´ B C D}, Γ´ == (B⇒C) :: Γ → Γ´ ⊧ D → C :: Γ ⊧ D.
Lemma conseqset_imp_r:
∀ {Γ Γ´ B C D}, Γ´ == (B⇒C) :: Γ → Γ´ ⊧ D → (¬B) :: Γ ⊧ D.
Lemma conseqset_notand_l´:
∀ {Γ Γ´ B C D}, Γ´ == (¬(B∧C)) :: Γ → Γ´ ⊧ D → (¬B) :: Γ ⊧ D.
Lemma conseqset_notand_r´:
∀ {Γ Γ´ B C D}, Γ´ == (¬(B∧C)) :: Γ → Γ´ ⊧ D → (¬C) :: Γ ⊧ D.
Lemma conseqset_notor´:
∀ {Γ Γ´ B C D}, Γ´ == (¬(B∨C)) :: Γ → Γ´ ⊧ D → (¬B) :: (¬C) :: Γ ⊧ D.
Lemma conseqset_notimp´:
∀ {Γ´ B C A}, (¬(B ⇒ C)) :: Γ´ ⊧ A → B :: (¬C) :: Γ´ ⊧ A.
Lemma conseqset_notimp´´:
∀ {Γ´ B C A}, (¬¬B) :: Γ´ ⊧ A → B :: (¬C) :: Γ´ ⊧ A.
Lemma conseqset_notimp´´´:
∀ {Γ´ B C A}, ((¬B) ⇒⊥) :: Γ´ ⊧ A → B :: (¬C) :: Γ´ ⊧ A.
Lemma conseqset_notand_l:
∀ {Γ Γ´ B C D}, Γ´ == ((B∧C)⇒⊥) :: Γ → Γ´ ⊧ D → (B ⇒ ⊥) :: Γ ⊧ D.
Lemma conseqset_notand_r:
∀ {Γ Γ´ B C D}, Γ´ == ((B∧C)⇒⊥) :: Γ → Γ´ ⊧ D → (C ⇒ ⊥) :: Γ ⊧ D.
Lemma conseqset_notor:
∀ {Γ Γ´ B C D},
Γ´ == ((B∨C)⇒⊥) :: Γ
→ Γ´ ⊧ D
→ (B ⇒ ⊥) :: (C ⇒ ⊥) :: Γ ⊧ D.
Lemma conseqset_notimp:
∀ {Γ´ B C A}, ((B ⇒ C) ⇒ ⊥) :: Γ´ ⊧ A → B :: (C ⇒ ⊥) :: Γ´ ⊧ A.
Notion de formule atomique, litéral, etc
Inductive is_atom: formule → Prop :=
| Atom_var: ∀ n, is_atom (Var n)
| Atom_not: ∀ n, is_atom (¬ (Var n))
| Atom_not2: ∀ n, is_atom ((Var n) ⇒ ⊥)
| Atom_true: is_atom ⊤
| Atom_not_true: is_atom (¬⊤)
| Atom_not_false: is_atom (¬⊥)
| Atom_false: is_atom ⊥
| Atom_not_false2: is_atom (⊥ ⇒ ⊥)
| Atom_not_true2: is_atom (⊤ ⇒ ⊥).
Le sous-ensemble des atomes qui ne sont pas des litéraux au sens
de Levy. Il s'agit des trois versions atomiques de false.
Inductive is_atom_non_literal: formule → Prop :=
| Atomnl_not_true: is_atom_non_literal (¬⊤)
| Atomnl_false: is_atom_non_literal ⊥
| Atomnl_not_true2: is_atom_non_literal (⊤ ⇒ ⊥).
Les littéraux au sens de Levy, un sous ensemble des atomes.
Inductive is_literal: formule → Prop :=
| Literal_var: ∀ n, is_literal (Var n)
| Literal_not: ∀ n, is_literal (¬ (Var n))
| Literal_not2: ∀ n, is_literal ((Var n) ⇒ ⊥)
| Literal_true: is_literal ⊤
| Literal_not_false: is_literal (¬⊥)
| Literal_not_false2: is_literal (⊥ ⇒ ⊥).
Lemma literal_in_atom : ∀ φ, is_literal φ → is_atom φ.
Les atomes sont soit des is_literal soit des is_atom_non_literal.
la disjonction correspondant aux formules non atomiques.
Definition disjunction_non_literal_formula φ :=
(∃ ψ, ∃ ψ´,
φ = (ψ ∧ ψ´)
∨ φ = (ψ ∨ ψ´)
∨ (φ = (ψ ⇒ ψ´) ∧ ψ´ ≠ ⊥)
∨ φ = ((ψ ∧ ψ´) ⇒ ⊥)
∨ φ = ((ψ ∨ ψ´) ⇒ ⊥)
∨ φ = ((ψ ⇒ ψ´) ⇒ ⊥)
∨ φ = (¬(ψ ∧ ψ´))
∨ φ = (¬(ψ ∨ ψ´))
∨ φ = (¬(ψ ⇒ ψ´)))
∨ (∃ ψ, φ = (¬ (¬ ψ)) ∨ φ = ((¬ ψ) ⇒ ⊥)).
Preuve que disjunction_non_literal_formula contient bien les
formule non-atomique.
Décision de la propriété is_literal
Différentes disjonctions sur les termes
Definition disjunction_formula φ :=
(∃ ψ, ∃ ψ´, φ = (ψ ∧ ψ´) ∨ φ = (ψ ⇒ ψ´) ∨ φ = (ψ ∨ ψ´))
∨ ((¬ is_literal φ) ∧ (∃ ψ, φ = ¬ ψ))
∨ is_atom_non_literal φ
∨ is_literal φ.
Lemma disjunction_formula_ok : ∀ φ, disjunction_formula φ.
Definition env_disjunction2 Γ :=
(∃ φ, φ ∈ Γ ∧ disjunction_non_literal_formula φ)
∨ (∃ φ, φ ∈ Γ ∧ is_atom_non_literal φ)
∨ (∀ ψ, ψ ∈ Γ → is_literal ψ)
∨ ENV.Empty Γ.
Lemma env_disjunction_stable_add2 :
∀ Γ Γ´ n φ, ENV.Add_multiple φ n Γ Γ´
→ env_disjunction2 Γ
→ env_disjunction2 Γ´.
Lemma disjunction_gamma2 :
∀ Γ:env, env_disjunction2 Γ.
Ceci est plus ou moins la disjonction de Levy utilisé dans la
preuve de complétude. Dans le couple Γ⊢φ, nous avons les cas suivants:
- Soit φ est une formule composée (∨, ∧, ⇒, négation d'un non litéral)
- Soit il existe dans Γ une formule composée (légèrement différente: disjunction_non_literal_formula)
- Soit il existe un litéral faux dans Γ (is_atom_non_literal, trois versions , une seule chez Levy)
- Γ ne contient que des litéraux et la formule est atomique (litéral ou faux).
Lemma disjunction_gamma_formule :
∀ (Γ:env) (φ:formule),
(∃ ψ ψ´, (φ = (ψ ∧ ψ´)) ∨ (φ = (ψ ⇒ ψ´))\/ (φ = (ψ ∨ ψ´)))
∨ ((¬ is_literal φ) ∧ (∃ ψ, φ = ¬ ψ))
∨ (∃ ψ, ψ ∈ Γ ∧ disjunction_non_literal_formula ψ)
∨ (∃ ψ, ψ ∈ Γ ∧ is_atom_non_literal ψ)
∨ ((∀ ψ, ψ ∈ Γ → is_literal ψ) ∧ (is_atom_non_literal φ))
∨ ((∀ ψ, ψ ∈Γ → is_literal ψ) ∧ is_literal φ).
∀ (Γ:env) (φ:formule),
(∃ ψ ψ´, (φ = (ψ ∧ ψ´)) ∨ (φ = (ψ ⇒ ψ´))\/ (φ = (ψ ∨ ψ´)))
∨ ((¬ is_literal φ) ∧ (∃ ψ, φ = ¬ ψ))
∨ (∃ ψ, ψ ∈ Γ ∧ disjunction_non_literal_formula ψ)
∨ (∃ ψ, ψ ∈ Γ ∧ is_atom_non_literal ψ)
∨ ((∀ ψ, ψ ∈ Γ → is_literal ψ) ∧ (is_atom_non_literal φ))
∨ ((∀ ψ, ψ ∈Γ → is_literal ψ) ∧ is_literal φ).
Notion d'interprétation caractéristique d'un environnement
Definition interp_caracteristique (Γ:ENV.t) : nat → bool := fun n⇒ENV.mem (Var n) Γ.
Definition interp_anticaracteristique (Γ:ENV.t) : nat → bool :=
fun n⇒negb(orb(ENV.mem (¬Var n) Γ) (ENV.mem (Var n⇒ ⊥) Γ)).
Lemma interp_caracteristique_1_new :
∀ Γ,
(∀ ψ, ψ ∈ Γ → is_literal ψ)
→ ~(∃ n, (Var n)∈ Γ ∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
→ est_modele_set (interp_caracteristique Γ) Γ.
Lemma interp_caracteristique_6_new :
∀ Γ n, ¬ (Var n) ∈ Γ → interpretation (interp_caracteristique Γ) (Var n) false.
Lemma interp_caracteristique_5_new :
∀ Γ n, ¬ (Var n) ∈ Γ → ¬est_modele (interp_caracteristique Γ) (Var n).
Lemma interp_anticaracteristique_1_new :
∀ Γ,
(∀ ψ, ψ ∈ Γ → is_literal ψ)
→ ~(∃ n, (Var n) ∈ Γ
∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
→ est_modele_set (interp_anticaracteristique Γ) Γ.
Lemma interp_anticaracteristique_6_new :
∀ Γ n, ¬ (¬Var n) ∈ Γ → ¬ (Var n ⇒ ⊥) ∈ Γ
→ ⊧[interp_anticaracteristique Γ] (Var n).
Lemma interp_anticaracteristique_not_negb:
∀ Γ k,
interp_def (interp_anticaracteristique Γ) (¬Var k) =
negb (interp_def (interp_anticaracteristique Γ) (Var k)).
Lemma ex_listeral_contradictoire_dec_new: ∀ Γ,
(∃ n, (Var n) ∈ Γ ∧ ((¬Var n) ∈ Γ ∨ (Var n⇒⊥) ∈ Γ))
∨ ~(∃ n, (Var n) ∈ Γ ∧ ((¬Var n)∈ Γ ∨ (Var n⇒⊥) ∈ Γ)).
Lemma literaux_conseq_false_new:
∀ Γ,
(∀ ψ, ψ ∈ Γ → is_literal ψ)
→ Γ ⊧ ⊥
→ (∃ n, (Var n) ∈ Γ ∧ ((¬ Var n) ∈ Γ ∨ (Var n ⇒⊥) ∈ Γ)).
Lemma literaux_conseq:
∀ Γ k,
(∀ ψ, ψ ∈ Γ → is_literal ψ)
→ Γ ⊧ (Var k)
→ (∃ n, (Var n) ∈ Γ ∧ ((¬ Var n) ∈ Γ ∨ (Var n⇒ ⊥) ∈ Γ))
∨ (Var k) ∈ Γ.
Lemma literaux_conseq_neg:
∀ Γ k,
(∀ ψ, ψ ∈ Γ → is_literal ψ)
→ Γ ⊧ (¬Var k)
→ (∃ n, (Var n) ∈ Γ ∧ ((¬ Var n) ∈ Γ ∨ (Var n⇒ ⊥) ∈ Γ))
∨ (¬Var k) ∈ Γ∨ (Var k ⇒ ⊥) ∈ Γ.
Preuve de complétude de la déduction naturelle.
This page has been generated by coqdoc