Vous êtes sur la page 1sur 4

Université Cadi Ayyad 12 Mars 2020

Faculté des sciences Semlalia


Département Informatique
Contrôle IA (SMI S6) :
1h30
Cours:

- Pourquoi l’utilisation des tables des vérités n’est pas pratique pour le calcul des vérités en logique
propositionnelle ?
Car explosion combinatoire : 2n
- Qu’est ce qu’une forme normale conjonctive ? Expliquer la skolemisation en logique du 1 er ordre.
Conjonction de clauses. Une clause est conjonction de littéraux. Un littéral est un atome positif ou
négatif
Skolémisation est un processus qui transforme une phrase en une forme conjoctive sans
quantificateurs ( élimination de il existe par remplacement de fonction, « quelque » soit reste
implicite

Exercice 1 : Dire (en justifiant) si raisonnement suivant est correct ou pas ?

Certains étudiants ne travaillent pas


Tous les étudiants veulent réussir
Donc : Certaines personnes veulent réussir sans travailler
Non, pas de relation entre étudiant et personne a priori.

Exercice 2 : Etudier l’unification de chacun des problèmes suivants :


1. [ ( f(g(k(x)),y) , f(y,g(x)) ) ] non boucle ( x et k(x))
2. [ ( f(g(x),x) , f(y,g(z)) ) ; ( g(x) , y ) ] oui
3. [ ( f(y,k(y),g(x)) , f(k(x),k(y),y) ) ] non, la variable y ne peut avoir 2 valeurs

Exercice 3 : Soient les formules suivantes :


H1 : x (P(x)  y (D( y)  L(x, y)))
H2 : x (P(x) (y (Q( y)  L(x, y))))
H3 : x (D(x)  Q(x))
1. Mettre les formules H1, H2 et H3 en forme prénexe, skolem puis clausale.
2. Que peut-t-on dire de H3 par rapport à H1 et H2? Justifier.
3. Traduire la forme clausale des formules H1, H2 et H3 en Prolog.

1)
Skolem
P(a)  (D( y)  L(a,y))
P(x)  Q(y)  L(x,y)
D(x) Q(x)
Clauses :
P(a)
D( y)  L(a,y)
P(x)  Q(y)  L(x,y)
D(x) Q(x)
2)
H3 est une conséquence logique de H1 et H2 (car la négation de H3 se traduit par 2 clauses D(b) et Q(b))
Avec la résolution :
P(x)  L(x,b) ( effacement Q(b) et Q(y) {y=b})
L(a,b) (effacement de de D(b) et D(b) {y=b})
P(a) (effacement de de L(a,b) et L(x,b) {x=a})
Vide (effacement de P(a)
3) Prolog
p(a).
l(a,y) :-d(y).
:- p(x),q(y),l(x,y).
:-d(x),q(x).

Exercice 4 :
a) Traduisez les énoncés suivants en logique du premier ordre. Numérotez vos formules.
1. Les fruits sont des aliments périssables (pas éternelles).
2. Une pomme est un fruit.
3. L’objet pom1 est une pomme.
4. Les aliments périssables doivent être mangés avant d’être expirés ou jetés.
5. pom1 est expirée.
b) Convertissez les formules obtenues en (a) sous forme clausale.
c) Prouvez l’affirmation «pom1 doit être jetée».
a)
1. ∀x, fruit(x) → perissable(x)

2. ∀x , pomme(x) → fruit(x)

3. pomme(pom1)

4. ∀x, perissable(x) → (mange(x) ∧ ¬expire(x)) ∨ jette(x)

5. expire(pom1)

b)
1. ¬fruit(x1) ∨ perissable(x1)

2. ¬pomme(x2) ∨ fruit(x2)

3. pomme(pom1)

4. ¬perissable(x3) ∨mange(x3) ∨ jette(x3)

5. ¬perissable(x4) ∨ ¬expire(x4) ∨ jette(x4)

6. expire(pom1)

c)
Commencez par écrire la négation de l’énoncé à prouver. Numérotez cette nouvelle clause en continuant
la numérotation utilisée en (b). Ensuite, utilisez la technique de résolution. À chaque étape, indiquez les
numéros des deux clauses utilisées et l’unificateur (substitution de variables) requis. Rappel : le but est
d’obtenir une clause vide (une contradiction).

7. ¬jette(pom1) – – – –

8. fruit(pom1) // Clauses 2 et 3 avec l’unificateur le plus général (UPG) { x2  pom1 }

9. perissable(pom1) // Clauses 1 et 8 avec l’UPG {x1  pom1 }

10. ¬expire(pom1)∨ jette(pom1)) // Clauses 5 et 9 avec l’UPG {x4  pom1 }

11. jette(pom1)) // Clauses 6 et 10 avec l’UPG {}

12. vide // Clauses 7 et 11 avec l’UPG {} Nous avons montré une contradiction. Donc, pom1 doit être
jetée. 2 sur 7
Exercice 5 : Soit le programme Prolog suivant :
oiseau(pigeon). %fait : F1
oiseau(hirondelle). %fait : F2
carnivore(loup). %fait : F3
carnivore(lion). %fait : F4
animal(lion). %fait : F5
animal(X) :-oiseau(X). %fait : R1
manger(X,Y) :-carnivore(X),animal(Y), X\=Y. %fait : R2

1. Traduire en français le programme (en minimum de phrases)


2. Donner la solution de la requête : manger(lion,Y).
3. Donner l’arbre complet de résolution de but : manger(X,Y).
4. Déduire l’arbre de résolution de la requête : manger(lion,Y).

1)
Les pigeons et les hirondelles sont des oiseaux
Les loups et les lions sont des carnivores
Les lions et les oiseaux sont des animaux
Les carnivores mangent les animaux qui ne sont pas des carnivores
2)
Par unification : manger(lion, Y) = manger(X,Y) / X= lion, Y = ?
On applique R2 : on doit vérifier carnivore(lion) et animal(Y), Y \= lion.
H1  y P(a)  D( y)  L(a, y)
A partir F4 : carnivore(lion) est vrai, il reste à vérifier animal(Y) tel que Y \= lion.
A partir R1 : on doit vérifier oiseau(X).
A partir F1 et F2 X= pigeon et X= hirondelle.
Donc :
Y=pigeon
Y=hirondelle

3)
Arbre de résolution

OK

4)
Très simple, remplacez X par lion dans la réponse précédente. On annule la branche F5 car
Y \= lion.

Exercice 6 : Définir deux prédicats en Prolog: l’un affiche les nombres de 1 à N par ordre croissant, l’autre
par ordre décroissant (utiliser le prédicat write(X) pour afficher X).

/* Afficher les nombres de 1 à N. */


croissant(0).
croissant(N) :- N>0, N1 is N-1, croissant(N1), write(N), nl.
croissant2(0):-!.
croissant2(N) :- N1 is N-1, croissant2(N1), write(N), nl.
/* de N à 1 */
decroissant(0).
decroissant(N) :- N>0, write(N), nl, N1 is N-1, decroissant(N1).
decroissant2(0):-!.
decroissant2(N) :- write(N), nl, N1 is N-1, decroissant2(N1).

Vous aimerez peut-être aussi