Vous êtes sur la page 1sur 24

Le paradigme logique

1. Introduction
2. Concepts de base
Terme Prdicat clause
Substitution
Unification
Mcanisme de rsolution
3. Prolog
Introduction
Fondements thoriques
Structures de donnes maintenues pendant l excution
Arbres de recherche
Cut
Fail
Ngation
4. Conclusion

1. Introduction
La programmation logique
est base sur l ide q u un pgm implmente une
relation
est de nature dclarative
rduit l criture d un pgm la formulation des
proprits d un prdicat, et l excution d une
procdure la dmonstration d un thorme
logique
Mais
elle n exploite pas toute la puissance de la
logique mathmatique (rduite aux clauses de
Horn, tout en logique n est pas implmentable)
la logique n est pas suffisante pour rendre
compte de toutes les notions dont a besoin un
langage de programmation (E/S)
on s carte parfois de l idal qu on s est fix au
dpart (l ordre des clauses, l ordre des littraux
dans les clauses intervient dans la rsolution,
rduction de l espace de recherche, )

Relation
Soient S et T, 2 ensembles
R : une relation binaire entre S et T
R est incluse dans S X T
VxS VyT
R(x,y) est soit vraie, soit fausse
R(x,y) peut tre vue comme un prdicat
un programme logique est une implmentation de la
relation logique
Ce programme permet par exemple d rpondre aux
requtes suivantes :

Etant donns a et b, R(a,b) est-elle vraie ?

Etant donn a, pour quelles valeurs de y, R(a,y)


estelle vraie ?
Pour quelles valeurs de x et y, R(x,y) est-elle vraie?

Remarque :
La relation peut tre unaire, ternaire, .
Les rponses sont varies : vrai/faux, plusieurs
rponses, pas de rponses,
Une relation peut tre dfinie en termes d autres
relations : origine (x,y) ssi x=0 et y =0

Concepts de base
Terme : expression dfinie par
une constante
une variable
une fonction de la forme f(t1,t2,,tn) o f est une fonction naire et ti, i=1,n , des termes

Prdicat : expression de la forme p(t1,t2,.tm) o p est un


prdicat m-aire et ti, i=1,m, des termes

Prdicat = fonction logique (s valuant vrai ou

faux)
les prdicats se combinent entre eux par des connecteurs pour
donner des formules

Clause : formule de calcul des prdicats du premier ordre de


la forme
A1, A2,, Ai, ., Am <== B1 B2 B3 ..Bn
Conclusion

Prmisse

Ai et Bj sont des prdicats


Interprtation
V x1, x2,.., xk variables de la clause
A1 ou A2 ou ..ou Am si B1 et B2 et ..et Bn
on peut distinguer plusieurs cas :
------------------------------------------------------------------------------

m<=1 : clause de Horn


------------------------------------------------------------------m = 1 n> 0 : clause dfinie
A <== B1 B2 B3.Bn
V ( x1,X2, ..xk), A est vrai si B1 et B2 et.. et Bn sont vrais
------------------------------------------------------------------------------m =1 n = 0 :
A est un fait
V (x1, x2, ..xk), A est vrai
------------------------------------------------------------------------------m = 0 n >0 : clause ngative
<== B1 B2 B3 .Bn
Existe t-il des valeurs de x1, x2, .xk telles que B1 et B2 et .Bn
soient vraies ?
Dcrit un nonc rsoudre.
------------------------------------------------------------------------------m = 0 n = 0 : clause vide

programme logique = ensemble de clauses de la


forme :
BUT <== B1 B2 B3 ..Bn

Exemples de clauses
Grand-pere (x,y) <== Pere(x,z) Pere (z,y)
V (x,y), Grand-pere (x,y) est vrai, s il existe z / Pere(x,z) est vrai
et Pere (z,y) est vrai
Pere(Mohamed, Ali) <== dcrit l assertion Pere(Mohamed, Ali)
<== Grand-Pere(Omar, salim)permet de formuler la question :
Omar est-il le grand-pre de salim ?

Substitution et unification
l unification de deux termes t et t comportant des variables
x1, x2, .xn consiste trouver une substitution de ces
variables par des termes u1, u2, .un tels que l application
de cette substitution rende les termes t et t gaux
l application d une substitution O = {x1/u1, x2/u2, .xn/un}
un terme t, produit un nouveau terme tO obtenu en
remplaant chaque occurrence de xi par ui dans t.
Deux formules sont unifies, s il existe une substitution O
telle que tO =t O.
O est dit unificateur de t et t
Unification de deux termes
t et t sont deux constantes
si t = t alors les termes sont unifis sinon unification impossible
si t est une variable et t est soit une constante, une variable ou
un terme fonctionnel alors la substitution de t par t entrane
l unification des deux termes
si t est une constante et t un terme fonctionnel alors
l unification est impossible
si t et t sont deux termes fonctionnels alors
si t=f(x1, x2, xp) et
t =g(x1 , x2 , ..xq )
et f=!g ou (f = g et p =! q )
alors l unification est impossible

si f=g et p =q alors l unification est possible si on peut


unifier les termes xi et xi 2 2 pour i=1,p

Unification de deux prdicats


Soient P1(t1, t2, ,tn) et P2(t1 , t2 , tm )
Si (P1 =/ P2) ou (P1=P2 et n=/ m) alors l unification est
impossible
sinon si P1 = P2 et n=m alors l unification sera possible si on
peut unifier les termes ti et ti 2 2
Algorithme d unification
Appliquons les transformations suivantes sur l ensemble des
quations tant que l une d entre elles est applicable :
1. Transformer t =x en x = t si x est une variable et t n est pas
une variable
2. Effacer les oprations de la forme x = x
3. Soit t = t tel que t et t ne soient pas des variables
si les fonctions de t et t ne sont pas identiques alors pas
d unification possible
sinon remplacer l quation f(x1 ,x2 , xn ) = f(x1 , x2 ,
xn ) par les quations x1 =x1
x2 =x2

xn = xn
4. Soit x =t une quation telle x a une autre occurrence dans
l ensemble des quations
si x se trouve dans t alors pas d unification possible
sinon transformer toutes les quations en remplaant tous
les x par t

Thorme
l algorithme d unification termine
s il termine sur un chec alors il n y a pas d unification possible
pour l ensemble des quations
s il termine avec un succs alors l ensemble des quations est
dans une forme rsolue
Exemple :
a) g(y) = x

b) f(x, h(x),y)= f(g(z), w, z)

On applique 1 a) et 3 b)
x= g(y)
x= g(z)
h (x) = w
y=z
On applique 4
x= g(y)
g(y) = g(z)
h(g(y)) = w
y=z

On applique 3
x = g(y)
y=z
h(g(y)) = w
On applique 1 et 4
x =g(z)
y=z
w = h(g(z))
O={x/g(z)
y/z

w/h(g(z))}

Dfinition
Un ensemble d quations est dans une forme rsolue si
1. Toutes les quations sont de la forme xi = ti
2. Chaque variable xi qui apparat dans un membre guauche
d une quation n apparat pas ailleurs dans cet ensemble
3. Un ensemble d quations dans une forme rsolue dfinit une
substitution {x1/t1 x2/t2 .xn/tn}
Dfinition
Un programme logique est un ensemble fini de clauses dfinies
Une excution consiste tester une requte A (clause ngative)
S il est possible d infrer partir des clauses du programme que
A est vraie , on dit qu il y a succs
S il n est pas possible de le faire, on dit qu il y a chec mais
jamais que A est fausse car d autres clauses rajoutes
permettraient peut-tre de l infrer.

Le test de A est implant par une technique que l on appelle


rsolution dont le principe est le suivant
Si le programme contient un fait A0 qui s unifie avec A alors
on conclut qu il y a succs
Si le programme contient une clause A0 <== A1 A2 .An
de telle sorte que A0 s unifie avec A alors on lance la rsolution
de A1 A2 .An de manire individuelle
Pour rsoudre A1 on essaye de l unifier avec une clause de tte
A1. En cas de succs si la clause est de la forme
A1 <== A11 A12 .A1m
alors A1 sera vrai si tous les A1i pour i= 1,m sont vrais.
Si la rsolution de tous les Ai russit, alors on conclut que A est
un succs
S il y a chec au niveau d un Ai alors on fait un retour_arrire
(backtracking) sur le dernier choix fait
Une fois que toutes les clauses du programme qui ont leur tte
qui s unifie avec A ont t utilises et s il n y a pas de
succs entre temps, on conclut un chec

Prolog
Premier langage de programmation logique
a beaucoup volu depuis sa premire version (Prolog
1,2, 3, C Prolog, Prolisp, Epilog, Quintus, Turbo prolog,
Xilog, )
En particulier, il est devenu un outil pratique de
dveloppement de logiciels
Domaine privilgi : Intelligence artificielle
(raisonnement , reprsentation des connaissances)
Rgle de calcul : choix des prdicats de gauche
droite
Rgle de recherche ( stratgie) : choix des clauses de
haut en bas
==> recherche en profondeur d abord qui consiste
rsoudre successivement les prdicats dune clause
dans lordre o ils sont crits
Prolog effectue tous les choix possibles. On obtient
ainsi toutes les substitutions possibles (donc toutes les
solutions)

Fondements thoriques
Dmonstration par rfutation
Tout systme de programmation logique ramne lexcution d un
programme la dmonstration d un thorme
Programme = ensemble de clauses C1, C2, ...Cn.
Enonce rsoudre = conjonction de q prdicats
lexcution du programme est quivalente la dmonstration de
la conjonction (P1 et P2 et .. Pq lorsque C1, C2, .. Cn sont
des axiomes)
Pour dmontrer ce thorme, un systme de programmation
logique procde par rfutation ( raisonnement par
labsurde)
C1, C2, ., Cn ==> P1 et P2 et ..Pq
revient en fait montrer que
[C1, C2, , Cn, non(P1 et P2 et.et Pq)] est
insatisfiable
Pour montrer l insatisfiabilit d un ensemble de clauses, on
dmontre qu une contradiction drive de cet ensemble. Cela
s appelle rfutation
La rsolution
On dmontre que lorsqu un ensemble est insatisfiable, l emploi
ritr de la rgle de rsolution engendre la clause vide

Rgle de rsolution
soient deux clauses C1 et C2
C1 = P11, P12,, P1q <== N11 et N12 et . et N1p
C2 = P21, P22, ., P2s <== N21 et N22 et ..et N2m
telles qu un littral positif de C1 s unifie avec un littral ngatif
de C2 ==> C : nouvelle clause drive de C1 et C2
L emploi ritr de cette rgle doit donner tt ou tard la clause
vide
C s appelle rsolvante de C1 et C2
Cas de Prolog
On procde par rfutation
S = {C1,C2, .., Cn, non (P1 et P2 et .Pq)} est insatisfiable
En combinant l implication logique
A et B ==> D <==>
non(A et B) ou D
et l criture Prolog D <== A et B
non (P1 et P2 et . Pq) deviendra
<== P1 et P2 et Pq
Donc cela revient montrer que
(C1, C2, , Cn, <== P1 et P2 et et Pq) est insatifiable
A chaque tape, on applique la rgle de rsolution sur la
rsolvante de l tape prcdente

Il faut donc choisir un littral ngatif dans (<== P1 et P2 et


et Pq) et essayer de l unifier avec une tte des clauses C1,
C2, , Cn (q*n choix)
Pour viter l explosion combinatoire, Prolog choisit une
stratgie linaire ordonne
Il choisit le premier littral gauche dans la clause ngative (P1
par exemple)
Puis la premire clause dont le littral positif s unifie avec P1
L exploration qui en rsulte est exhaustive (on a toutes les
solutions)

Exemple :
add(0,x,x) <===
add(s(x),y,z) <== add(x,s(y),z)

programme

<=== add(s(s(0)) , s(s(s(0))), z)


C1

question
C2

S=(add(0,x,x) <== , add(s(x1), y1, z1) <== add(x1, s(y1), z1),


<== add(s(s(0)), s(s(s(0))), z) )
Unifier P1 avec la tte de la clause C2
x1 /s(0)
y1 / s(s(s(0)))
Nouvelle rsolvante :
<=== add(s(0), s(s(s(s(0)))), z)

z1/z

Unifier cette rsolvante avec la tte de la clause C2


x1/0 y1/s(s(s(s(0)))) z1/z
Nouvelle rsolvante
<=== add(0, s(s(s(s(s(0))))), z)
Unifier cette rsolvante avec la tte de la clause C1
x/ s(s(s(s(s(0)))))
z/x
Nouvelle rsolvante
clause vide
et on obtient le rsultat escompt z = s(s(s(s(s(0)))))

Structures de donnes maintenues pendant


l excution
un pointeur sur le littral reprsentant le but courant
un pointeur sur la clause courante dont la tte s unifie avec le
littral courant
l ensemble courant des substitutions
liste des points de reprise (en cas de retour-arrire)

Reprsentation interne du contrle lors de l excution


(espace de recherche)
Reprsent par un arbre o chaque nud dcrit un prdicat et la
prochaine clause utiliser pour le rsoudre
Schmatiquement, la notation * indiquera qu il n y a plus de
clauses considrer pour le prdicat rsoudre
Le processus opre sur le nud courant de la faon suivante :
si la clause est * alors retour-arrire
sinon on cherche unifier le prdicat avec la tte de la clause
En cas de succs, on indique la clause suivante dans le nud
courant et on progresse (soit par le fils s il existe, soit par le
frre) celui-ci devient le nud courant
En cas d chec, on n indique que le passage la clause
suivante, le nud courant reste le mme
Exemple
Pere(Ali, Mohamed) <== (a)
Grand-pere(x,y) <== Pere(x,z) Pere(z,y)
<== Grand-pere(x,y)

(b)

grand-pere(x,y)
(b)

grand-pere(x,y)
*
pere(x,z)
(a)

pere(z,y)
(a)

grand-pere(x,y)
*
pere(Ali, Mohamed)
*

pere(Mohamed, y)
(a)

grand-pere
*

pere(Mohamed, Ali)
*

pere(mohamed,y)
*
echec

Le cut
pour rsoudre un prdicat P, Prolog considre toutes les clauses
de tte P(..,..,..). Ceci peut tre contrl en utilisant le cut
(!)
==> permet dviter les retour-arrire trop coteux en espace et
en temps
==> permet aussi d viter les boucles infinies
Lors de la rsolution d une clause, la rencontre du ! , supprime
tous les choix restant faire pour tous les prdicats
antrieurs !, dans l arbre actuel de rsolution
Les prdicats situs aprs !, et non encore examins ne sont pas
concerns

Exemple
1. Fact(0,1) <==
2. Fact(N,F) <== N1 is N-1 fact(N1,F1) F is N*F1
3. Callfact(N) <== Fact(N,F) Write(F)
<== Callfact(0)
Appel de callfact avec N=0
Unification avec la clause 1

==> fact(0,F) ==> F=1


==> appel de write(1)

Unification avec la clause 2


fact(0,F)<== N1 is 0-1 fact(-1, F1) F is 0*F1
L appel rcursif fact (-1,F) ne termine jamais, ce qui n est pas
souhait

L appel Fact avec l argument 0 ne devrait donner qu une seule


possibilit et si on laisse l excution se poursuivre, le but va
chouer
Solution : introduire ! au niveau de la premire clause de Fact
Fact(0,1) <== !
Ceci empche le backtracking en supprimant une partie
de l arbre de contrle

Forage de l chec (Fail)


Fail est un prdicat spcial. Son apparition provoque un chec
==> permet par exemple de provoquer le backtracking pour
obtenir d autres solutions
Son rle est double
==> fabriquer des boucles
==> fabriquer une ngation
Les boucles
1. Infinies : excution infinie d une procdure P
1. RepeatP <==
2. RepeatP <== RepeatP P fail
<== RepeatP
fail provoque un chec, comme RepeatP est toujours satisfait, P
sera excute indfiniment
2. P sera excut pendant un certain nombre de fois (tant qu elle
est vrifie)
1. RepeatP <== P fail
<== RepeatP

La ngation de Prolog
ngation par l chec l aide de cut + fail
1. Not(x) <== x ! Fail
2. Not(x) <==
1. Si x est vrai, le fail le met en chec, il force le retour-arrire
mais ! empche ce retour, l appel not(x) renverra faux
2. si x est faux , on n atteint pas !, On passe 2 qui est toujours
vraie
L appel not(x) renverra alors vrai
E/S
Pour le rendre praticable, Prolog a t tendu avec des interfaces
d entre/sortie
Prdicats spciaux : put get
usage confin dans des zones bien dfinies du programme
==> pas d interfrence notable avec la structure dclarative
du programme
Variable anonyme
P(-,-,-)
les variables anonymes s unifient avec n importe quel terme
sans que les liens rsultants soient mmoriss ==> allge la
tche de l interprteur en vitant les substitutions qui ne sont
pas propages

membre (x, [x,y])


membre(x,[z,y])<=membre(x,y)
membre(x,[x,-])
membre(x,[-,y])<= membre(x,y)

En conclusion
Quoiqu il repose sur la logique mathmatique, l assimilation de
Prolog dcoule plutt de la logique lmentaire que possde
chaque personne
==> certains ont propos d en faire un langage d initiation
l informatique
Quelques exemples lmentaires de son utilisation
Base de donnes
tlphone (Mohamed, 031926060)
tlephone (Nadia, 061661310)

?tlphone (Nadia, x)
x= O61661310
Aspects dductifs dans les systmes experts
1. Mammifre(x) <== possede-poils(x) donne-lait(x)
2. Oiseau(x)<== possede-plumes(x) pond-ufs(x)
3. Possede-poils(tigre)
4. Donne-lait(tigre)
?Mammifere(Tigre)
= vrai