TP 1
TP 1
TP 1
TP 1 - Eléments de logique
Exercice 1 (WIMS)
– Se connecter à l’espace numérique de travail.
– Recherche dans l’espace WIMS le cours Info229.
– Compléter la feuille d’exercices TP1.
Exercice 3 (Quantificateurs)
Nous nous intéressons, dans cet exercice, à la façon de prouver des formules qui contiennent des quantificateurs.
Commençons par délimiter le code correspondant à cet exercice en introduisant la commande Section Exo2.
(il faudra refermer cette section à la fin du code, grâce à la commande End Exo2. Faı̂tes de même pour les
autres exercices de ce tp).
1. Nous allons travailler avec un prédicat quelconque sur les entiers naturels. On peut le définir de la manière
suivante : Variable p : nat -> Prop.
Prouvez le théorème suivant :
Theorem fimpe : (forall x:nat, p x) -> exists y:nat, p y.
L’implication inverse est-elle démontrable ?
2. Considérons maintenant un prédicat à deux arguments (autrement dit une relation) :
Variable rel : nat -> nat -> Prop.
Prouvez le théorème suivant :
Theorem effe : (exists x, forall y, rel x y) -> (forall y, exists x, rel x y).
(Notez que l’on n’a pas précisé les types des variables dans les quantifications de cet exemple, car Coq
peut les deviner (les inférer) tout seul.)
L’implication inverse est-elle démontrable ?
1
3. Nous allons maintenant nous intéresser à la relation “être plus petit que”. Cette relation peut se définir
en Coq sous la forme d’une relation définie par une formule existentielle :
Definition le (x y:nat) : Prop := exists z:nat, y = x + z.
a. Prouvez que l’addition est croissante pour la relation le (“less or equal”) :
Theorem plus_croissante : forall x y:nat, le x (x+y).
Quelle tactique doit-on utiliser pour déplier une définition ?
b. On dispose en Coq d’une tactique permettant de prouver des buts simples d’arithmétique linéaire (sans
multiplication). Cette tactique s’appelle omega. Pour pouvoir l’utiliser, vous devez charger le module qui
la contient :
Require Import Omega.
Prouvez que la relation le est réflexive :
Theorem le_refl : forall x:nat, le x x.
c. Prouvez que la relation le est transitive :
Theorem le_trans : forall (x y z:nat), le x y /\ le y z -> le x z.
A quel moment est-il judicieux de déplier la définition de le ?