Licence Informatique

Module Théories et Modèles pour l'Informatique II


Option Programmation logique en Prolog

Solutions


Exercice 1

Q1.

Entités : gb, bm, a, b, c, d, e, sol

 

Q2.

Relations : est_posée_sur, est_posée_dans

 

Q3.

La boite a est_posée_dans la grande boite

La boite b est posée_sur la boite d

La boite c est_posées_sur la boite a

La boite d est_posée dans la boite moyenne

La boite e est_posée_dans la grande boite

La grand boite est_posée_sur le sol

La boite moyenne est posée_sur le sol

 

Q.4

?- est_posee_sur(X , a).

X = c ;

?- est_posee_sur(X , e).

No

?- est_posee_sur(c , X).

X = a ;

?- est_posee_dans(X , gb).

X = a ;

X = e ;

 

Q5.

Une boite (notée X) est prise si il existe une autre boite qui est posée sur elle

 

Q.6

?- est_prise(X).

X = d ;

X = a ;

X = sol ;

X = sol ;

 

boite(a).

boite(b).

boite(c).

boite(d).

boite(e).

boite(gb).

boite(bm).

 

est_prise(X) :- boite(X), est_posee_sur(_,X).

 

La procédure boite/1 définit en extension le concept de boite

La règle est_prise exprime qu’une entité X est prise si c’est une boite et si il existe une entité qui est posée sur X. la virgule doit donc être lue comme et si

 

Q7.

 

a)

est_posee_dans(a , gb).

est_posee_dans(d , bm).

est_posee_dans(e , gb).

est_posee_dans(bm , gb).

 

est_posee_sur(c , a).

est_posee_sur(b , d).

est_posee_sur(gb , sol).

 

b) Poser les questions suivantes en Prolog :

a.       a est-elle une boite ? boite(a).

b.      a est-elle prise ? est_prise(a).

c.       qui est posé sur a ?  est_posee_sur(X,a).

d.      sur qui a est-il posé ? est_posee_sur(a,X).

e.       dans quoi a est-il ? est_posee_dans(a,X).

 

 

Q8.

est_dans(X,Y) :- est_posee_dans(X,Y).

est_dans(X,Y) :- est_posee_sur(X,Z) , est_dans(Z,Y).

est_dans(X,Y) :- est_posee_dans(Z,Y), est_dans(X,Z).


Exercice 2

couple(X, Y) :- sexe(X,h), femme(Y), pere(X, Z), mere(Y, Z).
couple(X, Y) :- sexe(X,f), homme(Y), mere(X, Z), pere(Y, Z).
 
frere_ou_soeur(X, Y) :- pere(Zp, Y), mere(Zm, Y), pere(Zp, X), mere(Zm, X), X \= Y.

X \= Y signifie que X et Y ne sont pas la même personne (Pas identique).
X et Y sont frère et/ou sœur s'il existe Zp et Zm tels que Zp est le père de X et Y et Zm la mère de X et Y.

ascendant(X, Y) :- parent(X,Y).

ascendant(X, Y) :- parent(X,Z), ascendant(Z,Y).