Sunteți pe pagina 1din 17

Curs 9

Algoritmul de unificare

Programare logica

Substitutii
O substitutie este o functie de nlocuire a variabilelor cu
termeni. Notatia [X1 7 t1 , . . . , Xn 7 tn ] descrie substitutia
care nlocuieste variabila X1 cu termenul t1 , X2 cu t2 , etc.
Daca este o substitutie s i e este o expresie, atunci e
este termenul obtinut prin nlocuirea variabilelor din e n
felul descris de substitutie.
Exemplu
Daca
e = are(X , masina(Y , Z ))
= [X 7 ion, Y 7 dacia(rosu), Z 7 motor (benzina)]
atunci e = are(ion, masina(dacia(rosu), motor (benzina)))

Programare logica

Compunerea substitutiilor
B Domeniul unei substitutii = [X1 7 t1 , . . . , Xn 7 tn ] este
multimea de variabile dom() = {X1 , . . . , Xn }.
B Daca 1 = [X1 7 s1 , . . . , Xm 7 sm ] s i
2 = [Y1 7 t1 , . . . , Yn 7 tn ] sunt substitutii, atunci
compunerea lui 1 cu 2 este substitutia
1 2 = [ X1 7 s1 2 , . . . , Xm 7 sm 2 ,
Yi1 7 ti1 , . . . , Yip 7 tip ]
unde {Yi1 , . . . , Yip } = {Y1 , . . . , Yn } {X1 , . . . , Xm }.
Exemplu
1 = [X 7 f (Y ), Y 7 g(Z , h(T ))], 2 = [Y 7 r (a, T ), Z 7 b, U 7 c]
1 2 = [X 7 f (r (a, T )), Y 7 g(b, h(T )), Z 7 b, U 7 c]
Programare logica

Unificatori
Definitie
Un unificator al expresiilor e1 s i e2 este o substitutie astfel
nct e1 = e2 .
Exemplu
e1 = f (X , g(a), g(Z )) s i e2 = f (g(Y ), g(Y ), g(g(X ))) au
unificatorul = {X 7 g(a), Y 7 a, Z 7 g(g(a))} deoarece
e1 = f (g(a), g(a), g(g(g(a))))
e2 = f (g(a), g(a), g(g(g(a))))

Programare logica

Unificatori
Definitie
Un unificator al expresiilor e1 s i e2 este o substitutie astfel
nct e1 = e2 .
Exemplu
e1 = f (X , g(a), g(Z )) s i e2 = f (g(Y ), g(Y ), g(g(X ))) au
unificatorul = {X 7 g(a), Y 7 a, Z 7 g(g(a))} deoarece
e1 = f (g(a), g(a), g(g(g(a))))
e2 = f (g(a), g(a), g(g(g(a))))
Problema de unificare
Se dau expresiile s s i t
Sa se determine un unificator al lui s s i t, sau sa se

detecteze daca s s i t nu exista.


Programare logica

Algoritmul de calcul al celui mai general unificator


Se considera date doua expresii s s i t.
Vom descrie un algoritm care
B calculeaza o substitutie = [X1 7 t1 , . . . , Xn 7 tn ] astfel
nct
s = t
Daca Xi apare n ti , atunci ti trebuie sa fie variabila Xi .

nu poate reprezenta un termen diferit


I NTUI TIE
: O variabila
si.
de ea, n care apare ea nsa
B returneaza fail daca s s i t nu au unificator.

Programare logica

Algoritmul de calcul al celui mai general unificator


Se considera date doua expresii s s i t.
Vom descrie un algoritm care
B calculeaza o substitutie = [X1 7 t1 , . . . , Xn 7 tn ] astfel
nct
s = t
Daca Xi apare n ti , atunci ti trebuie sa fie variabila Xi .

nu poate reprezenta un termen diferit


I NTUI TIE
: O variabila
si.
de ea, n care apare ea nsa
B returneaza fail daca s s i t nu au unificator.
Substitutia calculata de acest algoritm se numeste cel mai
general unificator (engl. most general unifier), s i se noteaza cu
mgu(s, t).

Programare logica

Algoritmul de calcul al celui mai general unificator


Se considera date doua expresii s s i t.
Vom descrie un algoritm care
B calculeaza o substitutie = [X1 7 t1 , . . . , Xn 7 tn ] astfel
nct
s = t
Daca Xi apare n ti , atunci ti trebuie sa fie variabila Xi .

nu poate reprezenta un termen diferit


I NTUI TIE
: O variabila
si.
de ea, n care apare ea nsa
B returneaza fail daca s s i t nu au unificator.
Substitutia calculata de acest algoritm se numeste cel mai
general unificator (engl. most general unifier), s i se noteaza cu
mgu(s, t).

[Algoritmul este descris pe slide-ul urmator.]

Programare logica

Calculul celui mai general unificator


= []
1. Seteaza solutia initiala ca fiind lista vida:
2. Se scriu s s i t s i se seteaza cte un indicator la nceputul

fiecarei
expresii.
3. Se deplaseaza simultan cei 2 indicatori de la stnga la dreapta,
pna cnd ambii ajung la sfrsitul
cte un simbol deodata,
expresiilor (succes) sau pna cnd indica simboluri diferite.
1

Daca simbolurile indicate nu sunt variabile, returneaza fail;


altfel, un simbol indicat este o variabila (de exemplu, X ) iar

celalalt
este primul simbol al unui subtermen (de exemplu, t).
I Daca X apare n t, returneaza fail.
I Altfel, nlocuieste X cu t n
toti termenii ce apar n
toate locurile n care apare X n s s i t

s i adauga x 7 t la . Apoi, revin la pasul 2.

Programare logica

Calculul celui mai general unificator


Exemplu

f (X , g(a), g(Z ))

f (g(Y ), g(Y ), g(g(X )))

= []

Programare logica

Calculul celui mai general unificator


Exemplu

f (X , g(a), g(Z ))

f (g(Y ), g(Y ), g(g(X )))

= []

Programare logica

Calculul celui mai general unificator


Exemplu

f (g(Y ), g(a), g(Z ))

f (g(Y ), g(Y ), g(g(g(Y ))))

= [X 7 g(Y )]

Programare logica

Calculul celui mai general unificator


Exemplu

f (g(Y ), g(a), g(Z ))

f (g(Y ), g(Y ), g(g(g(Y ))))

= [X 7 g(Y )]

Programare logica

Calculul celui mai general unificator


Exemplu

f (g(a), g(a), g(Z ))

f (g(Y ), g(a), g(g(g(a))))

= [X 7 g(a), Y 7 a]

Programare logica

Calculul celui mai general unificator


Exemplu

f (g(a), g(a), g(Z ))

f (g(a), g(a), g(g(g(a))))

= [X 7 g(a), Y 7 a]

Programare logica

Calculul celui mai general unificator


Exemplu

f (g(a), g(a), g(g(g(a))))

f (g(a), g(a), g(g(g(a))))

= [X 7 g(a), Y 7 a, Z 7 g(g(a))]

Programare logica

Calculul celui mai general unificator


Exemplu

f (g(a), g(a), g(g(g(a))))

f (g(a), g(a), g(g(g(a))))

success

= [X 7 g(a), Y 7 a, Z 7 g(g(a))]

Programare logica

S-ar putea să vă placă și