Vous êtes sur la page 1sur 4

1 Superman n’existe pas (5 points)

On considère l’énoncé suivant :


(H1) Si Superman était capable et voulait empêcher le mal, il le ferait.
(H2) Si Superman était incapable d’empêcher le mal, il serait impuissant.
(H3) Si Superman ne voulait pas empêcher le mal, il serait malveillant.
(H4) Superman n’empêche pas le mal.
(H5) Si Superman existe, il n’est ni impuissant ni malveillant.
Soient les variables propositionnelles C, V , E, I, M et X définies comme suit :
— C = « Superman est capable d’empêcher le mal »
— V = « Superman veut empêcher le mal »
— E = « Superman empêche le mal »
— I = « Superman est impuissant »
— M = « Superman est malveillant »
— X = « Superman existe »

1. Formaliser les hypothèses H1 à H5 de l’énoncé par des formules de la logique des


propositions utilisant les variables C, V , E, I, M et X.
2. Donner un ensemble de clauses traduisant les hypothèses H1 à H5 (en mettant en CNF les
formules précédentes).
3. Montrer que cet ensemble n’est pas contradictoire en donnant une valuation de C, V , E, I,
M et X qui rend vraie la conjonction de toutes ces clauses.
4. Montrer en appliquant la méthode de résolution de Robinson que cet ensemble
devientcontradictoire si on lui ajoute la clause X (disant que Superman existe).
2 Recherche dans un tableau quelconque (5 points)
Cet exercice montre des relations entre la logique et la programmation en langage C. Il porte sur
la fonction C suivante :

int recherche(int t[], int n, int x) {


int i;

i = 0; while (i < n) {
if (t[i] == x) return(i);
i = i + 1;
} return(-1);
}

Dans toute la suite, on considère qu’on utilise toujours cette fonction avec un tableau d’entiers t
déjà alloué en mémoire et de taille supérieure ou égale à n. Dans ce cas, cette fonction recherche
l’entier x parmi les éléments du tableau t. Si l’entier est dans le tableau, la fonction retourne l’indice
d’une de ses positions dans le tableau. Si l’entier n’est pas dans le tableau, la fonction retourne -1.

1
On désigne par A(t,i,j) le prédicat “la i-ème case du tableau t contient la valeur j”. Ce prédicat
correspond à l’expression C t[i] == j. On considère aussi le prédicat B(i,n) qui formalise que “i est
compris entre 0 et n − 1 inclus”. En C, ce prédicat serait noté 0 <= i && i <= n-1. A l’aide de ces deux
prédicats, on peut formaliser des propriétés du tableau t en logique du premier ordre. Par exemple,
la propriété que tous les éléments du tableau sont nuls peut être formalisée par la formule

∀i.B(i,n) ⇒ A(t,i,0),

qu’on peut aussi écrire ainsi :

∀i.0 <= i && i <= n-1⇒t[i] == 0.

1. Formaliser en logique du premier ordre la propriété que le tableau t ne contient pas l’entier
x.
2. Après exécution de l’instructionint r = recherche(t,n,x);
la propriété suivante est vraie : “L’entier r vaut -1 si et seulement si le tableau t ne contient
pas l’entier x”. Formaliser cette propriété en logique du premier ordre.
3. De même, formaliser en logique du premier ordre la seconde propriété vraie aprèsexécution
de cette instruction, qui concerne le cas où le tableau t contient l’entier x.
4. Durant l’exécution de la boucle de la fonction recherche, l’entier i reste inclus entre 0 et n
et la partie du tableau entre les indices 0 et i−1 ne contient pas la valeur x.
Formaliser ces deux propriétés en logique du premier ordre.
3 Types et calculs inductifs (4 points)
Soit AP = {p1,p2,p3} un ensemble de propositions atomiques. On désigne par PF(AP) le type
inductif des formules propositionnelles sur AP défini par les règles suivantes :

Q ∈ AP Q : PF(AP)

Q : PF(AP) (¬Q) : PF(AP)

Q : PF(AP), R : PF(AP) Q : PF(AP), R : PF(AP)

(Q ∧ R) : PF(AP) (Q ∨ R) : PF(AP)
1. On dit qu’une formule propositionnelle F contient une double négation si au moins l’une des
sous-formules de F est de la forme ¬¬G pour une certaine formule G.
Définir par des règles de déduction le type inductif S(AP) des formules propositionnelles sur
AP qui ne contiennent pas de double négation.
Indication : Définir aussi un type T(AP) des formules dont le symbole principal (à la racine)
n’est pas une négation et dont les sous-formules sont de type S(AP).
2. On désigne par neg2rm la fonction qui applique répétitivement la règle de réécriture

2
(¬(¬P)) → P

pour éliminer toutes les doubles négations dans toutes les formules propositionnelles de
PF(AP). Par exemple, neg2rm((¬(¬p1)) ∧ ((¬(¬(¬p2))))) = p1 ∧ (¬p2).
Proposer un type pour la fonction neg2rm.
3. La fonction racine de type PF(AP) → AP ∪{¬,∧,∨} retourne le symbole principal de toute
formule propositionnelle. Elle est définie par les égalités suivantes :
racine(Q) = Q si Q ∈ AP
racine(¬Q) = ¬
racine(Q ∧ R) = ∧
racine(Q ∨ R) = ∨
Reproduire la définition suivante de la fonction neg2rm et compléter les pointillés :
neg2rm(Q) = ... si Q ∈ AP
neg2rm(¬¬u) = ...

neg2rm(¬u) = ... si racine(u) 6= ¬


neg2rm(...) = ...

neg2rm(...) = ....

4 Prédicats et preuve par récurrence (6 points)


Dans cet exercice, on considère la logique propositionnelle avec les connecteurs logiques ¬, ∨,
∧ et ⇒, et les constantes > pour “vrai” et ⊥ pour “faux”. La taille d’une formule propositionnelle est
le nombre de connecteurs logiques qu’elle contient.
Pour tout entier naturel n, la formule atomique Pn(F) formalise que “F est une formule de taille
n”. Le prédicat Pn est défini par les axiomes
P0(>) (1)
P0(⊥) (2)
qui admettent que > et ⊥ sont des formules de taille 0, et les schémas d’axiomes suivants :
Pn(F) ⇒ Pn+1(¬F) (3)
Pn1(F1) ∧ Pn2(F2) ⇒ Pn1+n2+1(F1 ∨ F2) (4)
Pn1(F1) ∧ Pn2(F2) ⇒ Pn1+n2+1(F1 ∧ F2) (5)
Pn1(F1) ∧ Pn2(F2) ⇒ Pn1+n2+1(F1 ⇒ F2) (6)
On parle de “schéma d’axiomes” au lieu d’“axiome” car chaque schéma décrit une infinité
d’axiomes : un axiome par entier n pour le premier schéma, un axiome par couple d’entiers (n1,n2)
pour les schémas suivants. On peut obtenir chaque axiome en choisissant des valeurs pour ces
entiers. Par exemple, le schéma (4) décrit, entre autres, les axiomes
P0(F1) ∧ P2(F2) ⇒ P3(F1 ∨ F2)
P3(F1) ∧ P0(F2) ⇒ P4(F1 ∨ F2)
P1(F1) ∧ P7(F2) ⇒ P9(F1 ∨ F2).
Par exemple, le schéma (4) concerne le connecteur logique ∨. Il se lit comme suit : “Si F1 est une
formule de taille n1 et F2 est une formule de taille n2, alors F1∨F2 est une formule de taille n1 + n2 +

3
1”, ce qui est exact, puisque le nombre de connecteurs logiques dans F1 ∨ F2 est la somme du
nombre de connecteurs logiques dans F1, du nombre de connecteurs logiques dans F2, et de 1 pour
le connecteur ajouté ∨.
Ces axiomes sont des formules de la logique du premier ordre, chaque Pn est un symbole
relationnel, chaque connecteur logique et constante est un symbole fonctionnel. Dans ces schémas,
F, F1 et F2 sont des variables, implicitement quantifiées universellement, c’est-à-dire que ces
schémas sont admis pour toutes les expressions F, F1 et F2.
On désigne par P le système déductif composé de ces axiomes et de deux règles : le modus
ponens et la règle d’introduction du ∧ :

.
Dans ce système déductif, on peut démontrer qu’une certaine expression est une formule d’une
certaine taille. Par exemple, démontrons formellement dans ce système déductif que >∧(¬>) est
une formule de taille 2 :

Dans cette preuve, (3) (0/n) désigne l’axiome obtenu en remplaçant n par 0 dans le schéma (3).
De même, (5) (0/n1,1/n2) désigne l’axiome obtenu en remplaçant n1 par 0 et n2 par 1 dans le
schéma d’axiomes (5).
1. De même, démontrer formellement P3(⊥∨ (¬(>∧⊥))) dans le système déductif P.
2. Démontrer par récurrence sur n que toute formule de taille n contient au moins une
constante.
3. Démontrer par récurrence sur n qu’il existe au moins une formule de taille n qui n’est pas
une tautologie.