Prolog

Pages: 7 (1566 mots) Publié le: 27 avril 2012
Un peu de programmation logique — Unification

Programmation logique

origines: ann´es 70, ´tude des preuves constructives en logique e e
une fonction peut ˆtre vue comme une preuve d’une propri´t´ e ee de la forme ∀x.∃y .P(x, y )

Prolog est un d´monstrateur de th´or`mes e e e

(= Coq)

un programme ≡ des axiomes et des r`gles (clauses) e
addright(nil,X,cons(X,nil)).addright(cons(A,B),X,cons(A,Z)) :- addright(B,X,Z) rev(nil,nil). rev(cons(X,Y),Z) :- rev(Y,W), addright(W,X,Z) le :- se lit ⇐

Prolog, “ex´cutions” d’un programme e
addright(nil,X,cons(X,nil)). addright(cons(A,B),X,cons(A,Z)) :- addright(B,X,Z) rev(nil,nil). rev(cons(X,Y),Z) :- rev(Y,W), addright(W,X,Z)

on saisit une requˆte e
rev([1,2,3],[3,2,1]) rev([9,1,1],Y) rev(X,[32,52]) rev([1,2,A],[3,2,B])rev([1,2,C],[3,3,D]) → → → → → true Y=[1,1,9] X=[52,32] A=3, B=1 ∅

pas vraiment de notion d’entr´es/sorties e programmation tr`s d´clarative e e
pas trop de notion de flot du calcul

r´sultat d’un programme: ensemble de solutions de la requ`te e e
plus petit ensemble de faits satisfaisant axiomes et r`gles e

Prolog – hello world

famille
pere(X,Z) :- pere(X,Y), frere(Y,Z). grandpere(X,Z) :-pere(X,Y), pere(Y,Z). fils(X,Y) :- pere(Y,X). pere(X,Y) :- fils(Y,X). cousin(X,Y) :- pere(T,X), frere(T,U), pere(U,Y). pere(jacques, arthur). fils(mathieu, louis). frere(louis, roger). pere(maurice,roger). grandpere(X,mathieu). frere(jacques,Y).

comment ¸a marche? c

Un programme Prolog, formellement
des axiomes et des r`gles: e c(t1 , . . . , tk ). c(t1 , . . . , tk ) : − p1 (u11 , . . . ,u1k1 ), . . . , pn (un1 , . . . , unkn ).
les c, p1 , . . . , pn sont des pr´dicats e
(penser aux constructeurs de Caml)

les ti , uij sont des termes un terme est:
soit une variable (majuscule) soit construit en appliquant un pr´dicat ` un certain nombre e a (´ventuellement nul) de (sous-)termes e

exemples:

nil

Y

rev(nil,nil)

rev(cons(a,nil),X)

un pr´dicat a une arit´:nombre d’arguments attendus e e
pas de nil(rev,X), rev(X,Y,Z), cons(nil), g(f(a,b), f(X))

Ex´cution d’un programme Prolog e
source du programme: axiomes et r`gles e c(t1 , . . . , tk ). c(t1 , . . . , tk ) : − p1 (u11 , . . . , u1k1 ), . . . , pn (un1 , . . . , unkn ). lancer un programme Prolog: requ`te e q(v1 , . . . , vm ).
on cherche si un axiome convientconvient on cherche si une r`glepeut ˆtre appliqu´e e e e (i.e. si sa conclusion convient)convient) on met face ` face a c(t1 , . . . , tk ) et q(v1 , . . . , vm ) on unifie les deux termes

unification: Robinson 1965, preuve de th´or`mes e e
“si on a montr´ K ∨ p et K ∨ ¬p, e alors on peut d´duire K ∨ K ” e unifier pour apparier via p et ¬p

Unification – exemples
unifier, c’est trouver un deal
conclusion c(X , Y ) c(f (a), g(a, b)) f (T , c(e), d) f (a, b, X ) c(X , Y ) c(X , a, b) f (a) p(X , c, X ) f (X , g (X )) requ`te e c(f (a), g (a, b)) c(X , Y ) f (a, X , d) f (Y , c, d) c(Z , T ) c(c, X , b) f (a) p(a, Y , a) f (Z , Z ) solution X ← f (a), Y ← g (a, b) X ← f (a), Y ← g (a, b) T ← a, X ← c(e) ´chec e X ← Z , Y ← T (ou T ← Y , ou Z probl`me mal pos´ e e oui X ← a, Y ← c ´chec e

← X. . . )

on fait de la“r´solution d’´quations symboliques” e e
le principe: “coller” deux termes l’un en face de l’autre en attrapant le dur (pr´dicats) avec le mou (variables) e exploration des deux arbres en parall`le, en engendrant une e substitution
fonction partielle des variables vers les termes souvent repr´sent´e comme une liste de couples e e

f (X , g (a, d)) et f (h(c, Z ), g (a, Y )): f (g (X )) et f (h(Y)): ∅

[(X , h(c, Z )); (Y , d)]

Programmation logique, rappels

un programme est un ensemble de r`gles (dont des axiomes) e
addright(nil,X,cons(X,nil)). addright(cons(A,B),X,cons(A,Z)) :- addright(B,X,Z)

on ex´cute un programme en soumettant une requ`te e e Prolog essaie de “marier” la requ`te avec la conclusion d’une e r`gle: algorithme d’unification e
on manipule des ´galit´s...
Lire le document complet

Veuillez vous inscrire pour avoir accès au document.

Vous pouvez également trouver ces documents utiles

  • prolog: gestion tram

Devenez membre d'Etudier

Inscrivez-vous
c'est gratuit !