28.10.2014 Views

1 2. LOGIQUE DU PREMIER ORDRE 2.1 Unification (3 points) Pour ...

1 2. LOGIQUE DU PREMIER ORDRE 2.1 Unification (3 points) Pour ...

1 2. LOGIQUE DU PREMIER ORDRE 2.1 Unification (3 points) Pour ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>2.</strong> <strong>LOGIQUE</strong> <strong>DU</strong> <strong>PREMIER</strong> <strong>ORDRE</strong><br />

<strong>2.</strong>1 <strong>Unification</strong> (3 <strong>points</strong>)<br />

<strong>Pour</strong> chaque couple d’expressions ci-dessous, dire s'il est unifiable, et si oui donner un<br />

unificateur. Vous détaillerez soigneusement les différentes étapes de l'unification.<br />

a. p(X, X) et p(g(a,Z) , g(Y,b) )<br />

{X/g(a,b), Z/b, Y/a}<br />

b. p( X, X ) et p( Z , h(Z))<br />

non unifiable par test d’occurrence : Z et h(Z)<br />

c. p(X, X) et p( c , g(a,b) )<br />

non unifiable par clash de symboles : c et g(a,b)<br />

où: X,Y,Z sont des variables et a, b, c des constantes.<br />

NB. Qq erreurs « typiques » :<br />

- ne pas avoir opéré la composition des unificateurs « partiels » dans le a. Avoir fait à la<br />

place de simples unions.<br />

- proposer comme solution du c : {c/g(a,b)} qui n’est pas une substitution puisque c est<br />

une constante.<br />

<strong>2.</strong>2 Formalisation et Résolution (5 <strong>points</strong>)<br />

On donne les informations suivantes :<br />

Tout membre du club alpin est un skieur ou un grimpeur. Les grimpeurs n’aiment pas la<br />

pluie et les skieurs aiment la neige. Jean, Paul et Henri sont membres du club alpin. Jean<br />

n’aime ni la pluie ni la neige.<br />

a) Formalisez ces informations en logique du premier ordre<br />

b) En utilisant la Résolution, établir qu’il existe un membre du club alpin qui est un<br />

grimpeur.<br />

c) Donner un raisonnement intuitif, formulé en français, établissant ce même fait.<br />

Formalisation :<br />

CA(x) : x appartient au club alpin.<br />

Sk(x) : x est un skieur<br />

Gr(x) : x est un grimpeur<br />

aime(x,y) : x aime y<br />

∀x (AC(x) → Sk(x) ∨ Gr(x))<br />

∀x (Gr(x) → ¬ like(x, pluie)<br />

∀x (Sk(x) → like(x, neige)<br />

CA(jean) CA(paul) CA(henri)<br />

¬aime(jean, neige)<br />

¬aime(jean, pluie)<br />

1


Question : ∃x (AC(x) ∧ Gr(x))<br />

Forme clausale<br />

(1) ¬AC(x) ∨ Sk(x) ∨ Gr(x)<br />

(2) ¬Gr(x) ∨ ¬aime(x,pluie)<br />

(3) ¬Sk(x) ∨ aime(x,neige)<br />

(4) CA(jean)<br />

(5) CA(paul)<br />

(6) CA(henri)<br />

(7) ¬aime(jean, neige)<br />

(8) ¬aime(jean, pluie)<br />

Négation de la question :<br />

(9) ¬ AC(x) ∨ ¬Gr(x)<br />

Réfutation<br />

¬aime(jean, neige) ¬Sk(x) ∨ aime(x,neige) CA(jean) ¬AC(x)∨ Sk(x)∨ Gr(x)<br />

¬Sk(jean)<br />

Sk(jean) ∨ Gr(jean)<br />

Gr(jean)<br />

CA(jean) ¬ AC(x) ∨ ¬Gr(x))<br />

¬Gr(jean)<br />

[]<br />

Raisonnement intuitif<br />

Comme les skieurs aiment la neige et que Jean n’aime pas la neige, il n’est pas skieur. Or<br />

il est membre du club, et en tant que tel grimpeur ou skieur. N’étant pas skieur, il est<br />

nécessairement grimpeur. Il existe donc bien un membre du club qui est grimpeur : Jean.<br />

3. PROLOG (3 <strong>points</strong>)<br />

On considère des formules logiques écrites avec le connecteurs et, ou, non (comme dans<br />

le cours) plus les deux constantes vrai et faux.<br />

a. Ecrire un prédicat simplif(A,B) qui simplifie une formule donnée A, résultat dans B, en<br />

appliquant les règles de simplifications bien connues :<br />

(A ∧ vrai) ↔A (A ∨ faux) ↔A ¬ vrai ↔ faux etc.<br />

(A ∧ ¬A) ↔ faux (A ∨ ¬A) ↔ vrai<br />

Exemples :<br />

?- simplif( et(non(faux), p),B).<br />

2


B = p ;<br />

?- simplif(ou(non(et(vrai, p)), ou(non(vrai), p)),B).<br />

B = vrai.<br />

b. Dessinez l’arbre d’évaluation du but :<br />

?- simplif( et(non(faux), p),B).<br />

Remarques :<br />

1) Il ne fallait pas oublier la récursion p ex dans les clause 3 et 4<br />

2) il faut d’une manière ou d’une autre « itérer » le processus de simplification (et<br />

pas seulement opérer une descente récursive) : car une simplification d’une sous<br />

formule peut créer une simplification possible de la formule englobante. Exemple<br />

= ou(et(faux,p),q). Pas de simplification apparente, mais après avoir simplifié le<br />

« et » on a : ou(faux,q) qui donne q.<br />

%%%% Formule logiques<br />

variable(P) :- atom(P), not(member(P,[et,ou, non, vrai, faux])).<br />

simplif(et(faux,_),faux):-!.<br />

simplif(et(_,faux),faux):-!.<br />

simplif(et(vrai,A),A1) :- !,simplif(A,A1).<br />

simplif(et(A,vrai),A1) :- !,simplif(A,A1).<br />

simplif(ou(vrai,_),vrai):-!.<br />

simplif(ou(_,vrai),vrai):-!.<br />

simplif(ou(faux,A),A1) :- !,simplif(A,A1).<br />

simplif(ou(A,faux),A1) :- !,simplif(A,A1).<br />

simplif(non(vrai),faux) :- !.<br />

simplif(non(faux),vrai) :- !.<br />

simplif(et(non(A),B),faux) :- simplif(A,C),simplif(B,C),!.<br />

simplif(et(A,non(B)),faux):- simplif(A,C),simplif(B,C),!.<br />

simplif(ou(non(A),B),vrai):- simplif(A,C),simplif(B,C),!.<br />

simplif(ou(A,non(B)),vrai):- simplif(A,C),simplif(B,C),!.<br />

simplif(vrai,vrai) :- !.<br />

simplif(faux,faux) :- !.<br />

% « l’itération » est ici !<br />

simplif(et(A,B),C):-simplif(A,A1), simplif(B,B1), et(A,B) \== et(A1,B1), !,<br />

simplif(et(A1,B1),C).<br />

simplif(ou(A,B),C):-simplif(A,A1), simplif(B,B1), ou(A,B) \== ou(A1,B1), !,<br />

simplif(ou(A1,B1),C).<br />

3


simplif(non(A),C) :- simplif(A,A1), A\==A1, !, simplif(non(A1),C).<br />

simplif(A,A).<br />

exemple(f1,non(et(vrai,faux))).<br />

exemple(f2,ou(non(et(vrai,p)),ou(non(vrai),p))).<br />

4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!