Master INFO M1 UE Programmation Logique 10 juin 2011

Transcription

Master INFO M1 UE Programmation Logique 10 juin 2011
Master INFO M1
UE Programmation Logique
10 juin 2011
Enseignants : P. Moraitis / E. Bonzon
Aucun document autorisé
Année 2010-2011
Question 1 (3.5 points) : Soit les deux versions suivantes du programme ancetre:
ancetre(X, Z) :- parent(X,Z).
ancetre(X, Z) :- parent(X,Y), ancetre(Y,Z).
ancetre2(X, Z) :- ancetre2(X,Y), parent(Y,Z).
ancetre2(X, Z) :- parent(X,Z).
Comparez ces deux programmes. Permettront-ils d'obtenir le même résultat?
Expliquez.
Question 2 (5 points) : Ecrire les fonctions suivantes~:
 rang_impair(L1,L2), qui étant donnés une liste L1, renvoit la liste L2
qui ne contient que les éléments de rang impair de la liste L1.
Par exemple, rang_impair([a,b,c,d],L2) retourne L2=[a,c]
 mentionTB(L,L1,L2), qui étant donnés une liste de nombres L, calcule
la liste L1 des nombres de L strictement inférieurs à 16, et la liste L2 des
nombres de L supérieurs ou égaux à 16.
Par
exemple,
mentionTB([8,16,12,15,18,5],L1,L2)
retourne
L1=[8,12,15,5] et L2=[16,18]
Question 3 (6 points)
Trouver les « answer sets » des programmes suivants :
a)
pnot q
qnot p
rp
rq
b)
pnot q
qnot p
rnot r
rp
Question 4 (5.5 points)
Considérer le programme suivant Π1:
p  not r, not q,
q
Utiliser le SLDNF calculus pour trouver si {p} est une conséquence de ce programme.
Décrire en détail les différentes étapes.