Vous êtes sur la page 1sur 25

Prolog

Sémantique opérationnelle des


programmes Prolog

1
Plan

 Les preuves Prolog

 Le retour arrière

 L’arbre de résolution

2
Les preuves Prolog (1)
Essentiellement, un programme Prolog est composé de règles,
qui sont des clauses déclarant un fait qui dépend d'autres
faits. Ces règles ont la forme suivante :

H :- B1,B2,…,Bn

H est la tête de la règle,

B1,B2, …,Bn constituent le corps de la règle.

3
signification d'une règle
pour résoudre un but H, il faut résoudre la conjonction de
buts B1,B2, …,Bn. Un fait peut être considéré comme
une clause sans corps.

Pour satisfaire une requête, l'interpréteur Prolog utilise


l'algorithme de résolution, qui utilise une pile, appelée
résolvante, pour contenir tous les buts qu'il reste à résoudre

4
Résolvante
Si G1=b1,b2,….,bp est un but a résoudre et

C1 = b1:-a1,a2,….,aq) est une clause du programme.

La clause C1 permet de résoudre le but b1 et le nouveau


but a résoudre est G2=a1,a2,…,aq,b2,…,bp.

G2 est dit résolvante du but G1 et de la clause C1.

5
Définition
Chaque étape d’une preuve prolog est le
calcul d’une résolvante d’un but et d’une
clause.

6
Remarque
 La clause C choisit pour réduire un but G ne doit pat avoir de
variable commune avec ce but.
 une variante de la clause C est une clause équivalente C’ obtenue
en renommant les variables de la clause C.
 Une variante de la clause :

Grand_parent(X,Y):-parent(X,Z),parent(Z,Y).
Est
Grand_parent(X1, X2):-parent(X1, X3),parent(X3, X2).

7
Résolution d’un but
Pour résoudre un but, on construit une suite de buts:
G1,G2,…,Gn chaque but (sauf le premier) est la résolvante
du but précédent est d’une variante d’une clause du
programme.

Chaque étape d’une preuve prolog est la réduction du but le


plus a gauche dans le but courant, ce qui correspond au calcul
d’une résolvante.

8
Le retour arrière
Pour résoudre un but donné Prolog essaye toutes les clauses
unifiables à ce but, suivant leur ordre d’apparition dans le
programme en utilisant le mécanisme de retour arrière.

9
Algorithme

10
Suite…
Au départ, il n’y a qu’un seul but: la question qui est posé.
On arrive à un succès si la liste des buts devient vide. La
réponse donnée par Prolog est la composition des
unificateurs successifs.

11
Arbre SLD (sélection linéaire définie)
(1)
Un arbre SLD est utilisé pour représenter un résolution SLD. Chaque

nœud de l’arbre représente la liste des buts courants. La racine de

l’arbre contient la liste des buts initiaux. Pour construire les fils d’un

nœud, on choisi le prédicat le plus à gauche dans la liste des buts

courants. On examine ensuite le programme pour trouver les clauses

définies dont la tête peut être unifiée à ce prédicat. Pour chaque telle

clause définie, on construit un fils dont la liste des buts courants est celle

du nœud père duquel on a éliminé le prédicat unifié.


12
Arbre SLD (sélection linéaire définie)
(2)
On annote la branche avec la clause définie utilisée. Si
aucune clause ne peut être unifiée avec le prédicat choisi,
la branche est un échec. Si dans un nœud, la liste des
buts courants est vide, le nœud est une réussite (la liste
des buts initiaux est vérifiée).

13
Exemple
(1) p(X,X) :-q(X,Y), r(X,Z).
(2) p(X,X) :- s(X).
(3) q(b,a).
(4) q(a,a).
(5) q(X,Y) :- r(a,Y).
(6) r(b,Z).
(7) s(X) :- q(X,a).
14
Suite…
l’arbre SLD du but p(X,X) est le suivant :

15
Ordre des clauses et des buts
Pour la signification déclarative l’ordre des clauses ou
l’ordre des buts n’a pas d’importance. En effet, pour
l’ordre des buts, la conjonction est commutative. Par
contre pour la signification procédurale, l'ordre est
important, car la recherche des solutions se fait
suivant l’ordre des clauses dans le programme et
suivant l’ordre des buts dans le corps des clauses.
16
Exemple (1)
Soit le programme p1:

17
Exemple (2)

18
Exemple (3)

19
Exemple d'exécution
Soit le programme suivant:

homme(paulo). mere(joao,roberta).
homme(joao). mere(francisco,roberta).
homme(francisco). mere(roberta,maria).
femme(maria). parents(X,M,P):-
femme(roberta). mere(X,M),
femme(ana). pere(X,P).
pere(francisco,paulo). frere(X,Y):-
pere(joao,paulo). homme(Y),
pere(ana,francisco). parents(X,M,P),
mere(rita,roberta). parents(Y,M,P).
20
Suite…
On va voir les étapes de de résolution de la
requête suivante :
?- frere(joao,francisco).
Yes

21
Suite…
Au début la résolvante ne contient que la requête, qui sera
unifiée avec la tête de la dernière clause du programme. Ceci
entraînera l'ajout des trois buts suivants dans la résolvante :

homme(francisco)

parents(joao,M,P)

parents(francisco,M,P)

22
Suite…
Le premier but, qui s'unie avec un des faits du programme, est
alors retiré. Le prochain but s'unie avec la tête de l'avant-
dernière clause du programme. En renommant M1 et P1 les
deux variables de la clause, l'unificateur est le suivant :
{M = M1, P = P1}. Les buts du corps de la clause seront alors
ajoutés dans la résolvante :

mere(francisco,M1)
pere(francisco,P1)
parents(francisco,M,P)

23
Arbre SLD de l’exemple
Et ainsi de suite jusqu’à l’obtension de l’arbre suivant:

24
Exercice
 On considère le programme suivant dont on considère

les prédicat t1 et t2 logiquement équivalents:

 Montrer que le but t1(Z) réussit et t2(Z) échoue.


25

Vous aimerez peut-être aussi