2e année de la licence MIASHS B. Lemaire Examen de programmation logique
Durée 1h30 — Avril 2022
Une feuille A4 autorisée – Appareils électroniques interdits
Exercice 1 (4 points=1+1+2, environ 18 minutes)
a) En utilisant les termes chasseNeigePassé (cnp), routeDéneigée (rd), neige (n), circulationAutorisée (ca), mettre sous forme logique sans variables les formules suivantes :
1. Soit le chasse-neige n’est pas passé, soit la route n’est pas déneigée, soit la circulation est autorisée 2. S’il n’y a pas de neige, la route est déneigée
3. Le chasse-neige est passé 4. Il n’y a pas de neige
b) Les transformer en clauses
c) Montrer, en utilisant uniquement la preuve par réfutation et le principe de résolution, que ces clauses permettent de déduire que la circulation est autorisée.
1 ¬cnp ∨¬rd∨ca
3 cnp 4 ¬n
2 s’écrit aussi n ∨ rd (1 clause) les autres sont déjà des clauses
c) le but est ca. On ajoute sa négation : 5 ¬ca
De 1 et 5 on obtient : ¬cnp ∨ ¬rd (6) De 6 et 3 on obtient : ¬rd (7)
De 7 et 2 on obtient n (8)
De 8 et 4 on obtient nil (clause vide)
Exercice 2 (4 points, environ 18 minutes)
Complétez la requête ci-dessous pour qu’elle donne la solution indiquée. Pour rappel, le prédicat findall/3 prend pour paramètre une ou plusieurs variables, une requête et un résultat. Le résultat vaut la liste des solutions à la requête. Par exemple, findall(Z,(between(1,5,Z),R) retourne R=[1,2,3,4,5]. Le prédicat between ne peut être utilisé que sur des nombres. Le second exemple indique la solution pour une autre liste L, il n’est pas nécessaire de le compléter.
?-L=[a,b,c],findall([X,Y],(member(X,L),member(Y,L),X\=Y),R). L = [a, b, c],
R = [[a, b], [a, c], [b, a], [b, c], [c, a], [c, b]].
?- L=[miashs,gre],findall([X,Y],(
L = [miashs, gre],
R = [[miashs, gre], [gre, miashs]].
Programming Help
Exercice 3 (4 points, environ 18 minutes)
Soit le programme ci-contre. Quelles sont toutes les solutions, dans l’ordre, pour X, à la requête p(X) ?
Exercice 4 (4 points, environ 18 minutes)
p(A) :- q(A,A).
p(C) :- q(C,D), C