Documente Academic
Documente Profesional
Documente Cultură
Unificare i Backtracking
Procesul de unificare const n asocierea (matching) unei ntrebri (goal) cu o anumit
clauz, cu scopul de a gsi o soluie la ntrebare. Dar pentru un set de clauze date i pentru o
singur ntrebare pot exista mai multe clauze care se pot asocia respectivei ntrebri; deci se pot
gsi mai multe soluii pentru aceeai ntrebare. Cutarea soluiilor alternative este posibil
datorit procesului de backtracking.
1. Unificarea
Unificarea se definete ca fiind procesul de asociere ntre o ntrebare i o clauz.
1.1. Asocierea (matching)
Termenul de asociere se poate folosi cu diverse semnificaii, de exemplu : asocierea unei
ntrebri cu o clauz, asocierea unei variabile cu o constant, asocierea a dou variabile, etc. n
general, exist trei cazuri distincte de asociere, considernd nivelul cel mai de jos al acestui
proces:
(1) Structurile identice se asociaz evident ntre ele. Astfel, avnd o clauz (axioma) de forma :
printe(mircea, ioana).
(f)
i o ntrebare :
goal : printe(mircea, ioana) (g)
evident structurile clauzei i a ntrebrii sunt identice.
n consecin, se asociaz :
-- predicatul din ntrebarea (g) cu predicatul din clauza (f) -axioma
-- primul argument din ntrebarea (g) cu primul argument din clauza (f)
-- al doilea argument din ntrebarea (g) cu al doilea argument din clauza (f)
Ca urmare, se poate spune c ntrebarea (g) se asociaz cu clauza (f), mai exact (g) se
unific cu (f).
(2) O asociere se poate face i cnd apar una sau mai multe variabile libere.
--Fie clauza (axioma) :
printe (mircea, ioana).
(a)
i ntrebarea :
goal : printe(mircea, X).
(g)
care se traduce prin : ''Al cui printe este Mircea?''
n cadrul procesului de asociere (matching) dintre (g) i (a), are loc :
-- asocierea ntre predicatele ntrebrii (g) i a clauzei (a)
-- asocierea ntre primul argument din ntrebare i clauza (a)
-- asocierea ntre variabila X din ntrebare i argumentul ''ioana'' din clauz; aceasta este posibil
doar dac variabila X este liber, iar n urma procesului de asociere, variabila X se leag de
valoarea ''ioana''.
Obs : Dac n momentul n care se ncearc asocierea, variabila X ar fi ''legat'', asocierea
reuete doar dac X ar fi legat de valoarea ''ioana''. Aceast situaie este de fapt o variant a
cazului (1).
Variabilele rmn ''legate'' pn n momentul obinerii unei soluii pentru acea instaniere
a lor, dup care devin ''libere'' i, dac este cazul, se caut alte soluii.
Astfel, singura posibilitate ca o variabil dintr-o ntrebare s fie ''legat'' n momentul
ncercrii unei asocieri este ca ntrebarea s fie compus, s implice mai muli pai; variabila
poate deveni ''legat'' ntr-un pas anterior.
Exemplu :
Goal : printe(mircea, X) and printe(X, anca).
adic : ''Gsete pe cineva care este copilul lui Mircea i este printele lui Anca.''
ntrebarea este compus de fapt din dou sub-ntrebri, i ntotdeauna cnd se ajunge la a
doua sub-ntrebare, variabila X este ''legat'' de o valoare. Prima sub-ntrebare se asociaz
conform cazului (2), a doua sub-ntrebare conform cazului (1).
(3) Dou variabile libere se asociaz ntre ele.
--Fie clauzele :
tata (mircea, ioana).
printe(mircea, X) if tata(mircea, X).
i ntrebarea :
Goal : printe (mircea, Y)
(g)
(a)
(r)
Referitor la setul de clauze de mai sus, se pot formula urmtoarele tipuri de ntrebri:
1) --Este Vali printele lui Gelu ?
ntrebare:
printe (vali, gelu).
rspuns:
Yes
--Este Mia printele lui Roco ?
ntrebare:
printe (mia, roco).
rspuns:
No
--Este Gelu printele lui Nick ?
ntrebare:
printe (gelu, nick).
rspuns:
No
2) --Cine este printele lui Lina ?
ntrebare:
printe (Cine, lina).
rspuns:
Cine = gelu
--Cine este printele lui Gelu ?
ntrebare:
printe (X, gelu).
rspuns:
X = vali
X = ada
3)-- Cine este copilul lui Gelu ?
ntrebare:
printe (gelu, X).
rspuns:
X = lina
X = miu
4) --Cine este printele cui ?
O alt formulare a acestei ntrebri este:
--Gsete X i Y, astfel nct X s fie printele lui Y.
ntrebare:
printele (X, Y).
rspuns:
X = vali, Y = gelu
X = ada, Y = gelu
X = ada, Y = mia
X = gelu, Y = lina
X = gelu, Y = miu
X = miu, Y = roco
Se vor extinde ntrebrile, astfel:
5) -- Cine este bunicul lui Roco?
Relaia care se observ n aceast ntrebare este bunic, relaie care nu este definit n setul
de clauze, deci nu poate fi folosit n ntrebare. Se poate rspunde la ntrebarea de mai sus
formulnd alte dou ntrebri:
a) Cine este printele lui Roco ? Se presupune c este un Y.
b) Cine este printele lui Y ? Se presupune c este un X.
ntrebare:
printe(Y, roco) and printe(X, Y).
rspuns:
X = gelu, Y = miu
descendent(X, gelu)
X = lina
X = miu
ntrebare:
rspuns:
descendent(gelu, X)
X = vali
X = ada
Tema
1. Traducei n limbaj natural urmtoarea ntrebare VISUAL PROLOG i precizai
rspunsul posibil:
printe(vali, X), printe(X, Y), printe(Y, roco).
2. Formulai n Visual Prolog urmtoarea ntrebare:
''Care sunt nepoii care au acelai bunic ?''
3. Completai arborele genealogic de mai sus astfel nct s se obin cel puin o soluie i
la ntrebarea:
"Care sunt nepoii care au acelai bunic, dar prini diferii ?"
4. Se vor completa setul de axiome cu dou relaii care definesc sexul fiecrei persoane:
feminin(ada).
feminin(mia).
feminin(lina).
masculin(miu).
masculin(vali).
masculin(gelu).
masculin(roco).
Scriei n limbaj natural i n VISUAL PROLOG regulile care definesc relaiile: mama,
tata, bunic, sora, frate, nepot, mtua, unchi.
Pornind de la exemplul anterior, se consider programul care definete relaiile de printe i
strmo existente ntre membrii unei familii. Se dau patru definiii posibile ale relaiei de
strmo, str1, str2, str3 i str4, toate fiind perfect corecte din punct de vedere logic, deci din
punct de vedere a semnificaiei declarative a limbajului.
% parinte(IndividX, IndividY)
% stramos(IndividX, IndividZ)
parinte(vali, gelu).
parinte(ada, gelu).
parinte(ada, mia).
parinte(gelu, lina).
parinte(gelu, misu).
parinte(misu, roco).
str1(X, Z) :- parinte(X, Z).
str1(X, Z) :- parinte(X, Y), str1(Y, Z).
% Se schimb ordinea regulilor:
str2(X, Z) :- parinte(X, Y), str2(Y, Z).
str2(X, Z) :- parinte(X, Z).
% Se schimb ordinea scopurilor n prima variant:
str3(X, Z) :- parinte(X, Z).
str3(X, Z) :- str3(X, Y), parinte(Y, Z).
% Se schimb att ordinea regulilor, ct i ordinea scopurilor:
str4(X, Z) :- str4(X, Y), parinte(Y, Z).
str4(X, Z) :- parinte(X,Z).
?- str1(ada, misu).
yes
Pentru acest scop, arborele de deducie este prezentat n figura urmtoare.
str1(ada, misu)
parinte(ada, misu)
INSUCCES
str1(gelu, misu)
parinte(ada, gelu)
parinte(gelu, misu)
SUCCES
SUCCES
parinte(ada, misu)
INSUCCES
parinte(gelu, misu)
parinte(ada, Y')
SUCCES
Y'=gelu
parinte(ada, gelu)
SUCCES
str4(ada, misu)
...
arbore infinit
?- str1(mia, roco).
no
?- str2(mia, roco).
no
?- str3(mia, roco).
% bucl infinit; eventual mesaj de depire a stivei
n acest caz, arborele de deducie al scopului str3(mia, roco) este prezentat n figura de
mai jos. Datorit semnificaiei procedurale a limbajului Visual Prolog trebuie urmrit cu atenie
modul de definire a unui predicat att din punctul de vedere al ordinii clauzelor, ct i din punctul
de vedere al ordinii scopurilor n corpul regulilor.
str3(mia, roco)
parinte(mia, roco)
INSUCCES
parinte(mia, Y)
INSUCCES
parinte(mia, Y')
INSUCCES
parinte(mia, Y")
...
arbore infinit
INSUCCES
Tem
1. Realizai arborele de deducie corespunztor.