Sunteți pe pagina 1din 100

Programare logic a

Curs 1: Introducere
Mircea Marin
October 1, 2013
Marin Programare logic a
Aspecte organizatorice
Curs: Mircea Marin
Laboratoare: Isabela Dr amnesc
pagina web (curs):
http://web.info.uvt.ro/mmarin/lectures/LP
email: mmarin@info.uvt.ro
Materialele de curs vor postate pe pagina web.
Evaluare:
1 examen scris nal (50% din not a)
Probe de laborator (50% din not a). Participarea la probele
de laborator este obligatorie.
Marin Programare logic a
Scopul si planul cursului
Scopul cursului:
R aspunsuri la urm atoarele ntreb ari:
1
Care sunt caracteristicile program arii logice?
2
Ce se poate face cu programarea logic a?
nv atarea practicilor de programare n PROLOG.
Aplicatii specice.
Planul cursului:
Prezentarea limbajului de programare PROLOG
PROLOG si logica cu predicate de ordinul I
Aplicatii: recursivitate, prelucrarea listelor, mecanisme
specice (t aiere, backtracking), etc.
Marin Programare logic a
Ce este programarea logic a
Stil de programare bazat pe specicarea cuno stintelor ca
fapte si reguli, si pe rezolvarea problemelor punnd
ntreb ari al c aror r aspuns se obtine consultnd baza de
fapte si reguli existente.
Faptele sunt armatii despre propriet atile si relatiile
existente ntre entit ati.
Regulile sunt armatii de de tipul "<concluzie> dac a
<ipoteza 1> si . . . si <ipoteza n>."
ntreb arile program arii logice sunt de obicei de forma
"Este adev arat c a <armatie 1> si . . . <armatie n>?", sau
"Pentru ce valori ale necunoscutelor X
1
, . . . , X
m
este
adev arat c a <armatie 1> si . . . si <armatie n>?"
Marin Programare logic a
Exemple de fapte, reguli, si ntreb ari
FAPTE
n limbaj natural (lb. romn a) n PROLOG
Coco este papagal. papagal(coco).
Mihai o iube ste pe Maria iubeste(mihai,maria).
Cubul cade de pe raft pe podea cade(cub,raft, podea).
REGULI
n limbaj natural (lb. romn a) n PROLOG
Dac a X este bun si X cunoa ste pe
Y si Y este frumoas a atunci X o
iube ste pe Y.
iubeste(X, Y):-
bun(X), cunoaste(X, Y),
frumoasa(Y).
Orice papagal este muritor. muritor(X):-papagal(X).
INTREB

ARI
n limbaj natural (lb. romn a) n PROLOG
Este Coco papagal? ?-papagal(coco).
Cine este muritor? ?-muritor(X).
Marin Programare logic a
De la limbaj natural la Prolog
n acest curs vom pune accent pe traducerea corect a a
cuno stintelor dintr-un limbaj natural n limbajul Prolog.
Adesea, vom reformula mai nti armatiile din limbajul
natural, pentru a le traduce mai u sor n PROLOG.
Exemplu
n limbaj natural:
Studentii silitori au note bune. Dac a X este student si X
este silitor atunci X are note bune X are note bune dac a
X este student si X este silitor.
n limbaj articial (PROLOG):
note(X, bune):-student(X), silitor(X).
REMARC

A: n PROLOG, :- este dac a" iar virgula dintre ipoteze
(,) este si".
Marin Programare logic a
Alte caracteristici ale program arii logice
Programarea const a n
scrierea corect a a cuno stintelor ca reguli si fapte.
formularea corect a a ntreb arilor.
Rezolvarea unei probleme se face punnd ntreb ari
"Este adev arat c a ...?"
"Pentru ce valori ale necunoscutelor ... are loc ...?"
n general, programatorul nu trebuie s a stie cum se a a
r aspunsul la ntrebare. G asirea r aspunsurilor cade n
sarcina interpretorului Prolog.
Tem a: comparati acest stil de programare cu alte stiluri de
programare: imperativ (C), orientat obiect(C++), functional
(Lisp), etc.
Marin Programare logic a
Programarea logic a
Istoric
Kowalski (anii 70) observ a c a o formul a logic a
S
1
. . . S
n
S
poate avea 2 semnicatii:
semnicatie logic a: Dac a S
1
si . . . si S
n
sunt ecare adev arate
atunci si S este adev arat a.
semnicatie procedural a de forma "S dac a S
1
si . . . si S
n
" care
poate interpretat a astfel: pentru a aa dac a procedura S este
adev arat a trebuiesc executate recursiv procedurile S
1
, . . . , S
n
pentru a determina dac a sunt adev arate.
n PROLOG, formula devine o regul a
S:-S
1
, . . . , S
n
.
cu antetul (sau capul) regulii S, si corpul S
1
, . . . , S
n
.
Marin Programare logic a
Programarea logic a
Istoric (continuare)
Universitatea din Marsilia (Colmerauer, anii 70): apare
limbajul PROLOG("Programmation et Logique".)
PROLOG s-a impus ca cel mai important limbaj de
programare logic a
numeroase implement ari (interpretoare & compilatoare)
Marin Programare logic a
Rezolvarea de probleme cu PROLOG
Se declar a fapte despre obiecte si relatiile dintre ele.
Se denesc reguli despre obiecte si relatiile lor.
Se pun ntreb ari despre obiecte si relatiile dintre ele.
Programarea n PROLOG este o conversatie cu interpretorul de
PROLOG. Rezolvarea de probleme n acest fel necesit a
modelarea problemei folosind notiunile program arii logice:
fapte.
reguli.
ntreb ari.
Program = fapte + reguli

baz a de cuno stinte
.
Marin Programare logic a
Rezolvarea de probleme cu PROLOG
Se declar a fapte despre obiecte si relatiile dintre ele.
Se denesc reguli despre obiecte si relatiile lor.
Se pun ntreb ari despre obiecte si relatiile dintre ele.
Programarea n PROLOG este o conversatie cu interpretorul de
PROLOG. Rezolvarea de probleme n acest fel necesit a
modelarea problemei folosind notiunile program arii logice:
fapte.
reguli.
ntreb ari.
Program = fapte + reguli

baz a de cuno stinte
.
Marin Programare logic a
Rezolvarea de probleme cu PROLOG
Se declar a fapte despre obiecte si relatiile dintre ele.
Se denesc reguli despre obiecte si relatiile lor.
Se pun ntreb ari despre obiecte si relatiile dintre ele.
Programarea n PROLOG este o conversatie cu interpretorul de
PROLOG. Rezolvarea de probleme n acest fel necesit a
modelarea problemei folosind notiunile program arii logice:
fapte.
reguli.
ntreb ari.
Program = fapte + reguli

baz a de cuno stinte
.
Marin Programare logic a
Rezolvarea de probleme cu PROLOG
Se declar a fapte despre obiecte si relatiile dintre ele.
Se denesc reguli despre obiecte si relatiile lor.
Se pun ntreb ari despre obiecte si relatiile dintre ele.
Programarea n PROLOG este o conversatie cu interpretorul de
PROLOG. Rezolvarea de probleme n acest fel necesit a
modelarea problemei folosind notiunile program arii logice:
fapte.
reguli.
ntreb ari.
Program = fapte + reguli

baz a de cuno stinte
.
Marin Programare logic a
Fapte
Enuntarea unui fapt n PROLOG
predicat (obiect
1
, . . . , obiect
n

argumente
).
De exemplu
are(andrei , carte).
Numele relatiilor (predicatelor) ncep cu liter a mic a.
PROLOG folose ste mai ales notatia prex (dar sunt si
exceptii).
Un fapt se ncheie cu . (punct).
Programatorul alege numele predicatelor si trebuie s a stie
cum le interpreteaz a.
De ex., are(andrei , carte). nseamn a c a Andrei are o carte.
Programatorul trebuie s a xeze num arul de argumente al
ec arui predicat. De exemplu, are este predicat binar.
Notatie: are/2 indic a un predicat binar.
Marin Programare logic a
Exemple de fapte
Aurul este pretios.
pretios(aur).
Ioana este femeie.
femeie(ioana).
Ion este tat al Mariei.
tata(ion, maria). femeie(ioana).
Andrei are o carte.
are(carte, andrei).
Observatii
Programatorul trebuie s a stabileasc a ntelesul numelor de
obiecte si predicate folosite n scrierea faptelor.
De exemplu: are(X,Y) nseamn a X are Y, si nu
nseamn a Y are X.
Ordinea argumentelor conteaz a!
Marin Programare logic a
ntreb ari
Exemplu de ntrebare n PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG caut a n baza de cuno stinte fapte care se
potrivesc (se unic a) cu ntrebarea.
R aspunsul este true dac a
predicatul este acela si
argumentele sunt acelea si
Altfel, r aspunsul este false
Numai ce este n baza de cuno stinte se consider a adev arat.
false nu este acela si lucru cu fals!
false nseamn a mai degrab a nu stiu.
Marin Programare logic a
ntreb ari
Exemplu de ntrebare n PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG caut a n baza de cuno stinte fapte care se
potrivesc (se unic a) cu ntrebarea.
R aspunsul este true dac a
predicatul este acela si
argumentele sunt acelea si
Altfel, r aspunsul este false
Numai ce este n baza de cuno stinte se consider a adev arat.
false nu este acela si lucru cu fals!
false nseamn a mai degrab a nu stiu.
Marin Programare logic a
ntreb ari
Exemplu de ntrebare n PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG caut a n baza de cuno stinte fapte care se
potrivesc (se unic a) cu ntrebarea.
R aspunsul este true dac a
predicatul este acela si
argumentele sunt acelea si
Altfel, r aspunsul este false
Numai ce este n baza de cuno stinte se consider a adev arat.
false nu este acela si lucru cu fals!
false nseamn a mai degrab a nu stiu.
Marin Programare logic a
ntreb ari
Exemplu de ntrebare n PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG caut a n baza de cuno stinte fapte care se
potrivesc (se unic a) cu ntrebarea.
R aspunsul este true dac a
predicatul este acela si
argumentele sunt acelea si
Altfel, r aspunsul este false
Numai ce este n baza de cuno stinte se consider a adev arat.
false nu este acela si lucru cu fals!
false nseamn a mai degrab a nu stiu.
Marin Programare logic a
ntreb ari
Exemplu de ntrebare n PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG caut a n baza de cuno stinte fapte care se
potrivesc (se unic a) cu ntrebarea.
R aspunsul este true dac a
predicatul este acela si
argumentele sunt acelea si
Altfel, r aspunsul este false
Numai ce este n baza de cuno stinte se consider a adev arat.
false nu este acela si lucru cu fals!
false nseamn a mai degrab a nu stiu.
Marin Programare logic a
ntreb ari
Exemplu de ntrebare n PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG caut a n baza de cuno stinte fapte care se
potrivesc (se unic a) cu ntrebarea.
R aspunsul este true dac a
predicatul este acela si
argumentele sunt acelea si
Altfel, r aspunsul este false
Numai ce este n baza de cuno stinte se consider a adev arat.
false nu este acela si lucru cu fals!
false nseamn a mai degrab a nu stiu.
Marin Programare logic a
Variabile
Variabil a = nlocuitor al unui obiect care satisface o relatie.
Exemplu de ntrebare cu variabil a
?- place(ion, X).
se interpreteaz a astfel:
Care sunt obiectele X care i plac lui Ion?
PROLOG urmeaz a sa determine valorile lui X pentru care
ntrebarea este true.
Conventie: n PROLOG variabilele ncep cu LITERE MARI.
n PROLOG o variabil a poate
instantiat a: variabila are un obiect ca valoare
neinstantiat a: nc a nu se stie o valoare pentru variabil a.
Marin Programare logic a
Exemplu de ntrebare cu variabile
Se consider a baza de cuno stinte cu urm atoarele fapte:
place(ion,maria).
place(ion,ori).
place(paul,maria).
La ntrebarea
?-place(ion, X).
PROLOG r aspunde
X = ori
si va a stepa instructiuni.
Marin Programare logic a
Calculul r aspunsului n PROLOG
PROLOG caut a n baza de cuno stinte un fapt ce se
potrive ste cu ntrebarea
cnd se g ase ste o potrivire, aceasta este marcat a
dac a utilizatorul apas a Enter, c autarea se ncheie
dac a utilizatorul apas a ";" si apoi Enter, PROLOG caut a o
nou a potrivire, ncepnd cu ultimul loc marcat, si cu
variabilele din ntrebare neinstantiate.
n exemplul de mai sus, ap asnd ";" urmat de Enter va
determina PROLOG s a r aspund a:
X = maria .
false
Cnd nu mai sunt n baza de cuno stinte fapte ce s a se
potriveasc a, PROLOG r aspunde false
Marin Programare logic a
ntreb ari mai complexe
Conjunctii
Se consider a programul urm ator:
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
si ntrebarea
?- place(ion, maria), place(maria, ion).
n general, o ntrebare
?- fapt
1
, . . . , fapt
n
.
se cite ste fapt
1
si . . . si fapt
n
? n acest caz:
i place lui Ion de Maria si i place Mariei de Ion?
Marin Programare logic a
ntreb ari mai complexe
Conjunctii
Se consider a programul urm ator:
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
si ntrebarea
?- place(ion, maria), place(maria, ion).
n general, o ntrebare
?- fapt
1
, . . . , fapt
n
.
se cite ste fapt
1
si . . . si fapt
n
? n acest caz:
i place lui Ion de Maria si i place Mariei de Ion?
Marin Programare logic a
ntreb ari mai complexe (continuare)
Conjunctii
Baz a de cuno stinte:
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
ntrebare:
?- place(ion, maria), place(maria, ion).
PROLOG va r aspunde false : caut a toate faptele din
ntrebare, unul dup a altul (toate trebuiesc satisf acute, altfel
interogarea va e sua, iar r aspunsul va false).
Marin Programare logic a
ntreb ari mai complexe (continuare)
Conjunctii
Baz a de cuno stinte:
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
ntrebare:
?- place(maria, X), place(ion, X).
ntrebarea este: Exist a un obiect X care i place si lui Ion si
Mariei?
PROLOG ncearc a s a satisfac a primul obiectiv (prima parte
a ntreb arii); dac a reu se ste, pune un marcaj pe el si apoi
ncearc a s a satisfac a al doilea obiectiv, plasnd un marcaj
n caz de succes.
Marin Programare logic a
ntreb ari mai complexe (continuare)
Conjunctii
Baz a de cuno stinte:
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
ntrebare:
?- place(maria, X), place(ion, X).
ntrebarea este: Exist a un obiect X care i place si lui Ion si
Mariei?
PROLOG ncearc a s a satisfac a primul obiectiv (prima parte
a ntreb arii); dac a reu se ste, pune un marcaj pe el si apoi
ncearc a s a satisfac a al doilea obiectiv, plasnd un marcaj
n caz de succes.
Marin Programare logic a
ntreb ari mai complexe (continuare)
Conjunctii
Baz a de cuno stinte:
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
ntrebare:
?- place(maria, X), place(ion, X).
ntrebarea este: Exist a un obiect X care i place si lui Ion si
Mariei?
PROLOG ncearc a s a satisfac a primul obiectiv (prima parte
a ntreb arii); dac a reu se ste, pune un marcaj pe el si apoi
ncearc a s a satisfac a al doilea obiectiv, plasnd un marcaj
n caz de succes.
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).
place(maria, vin).
place(ion, vin).
place(ion, maria).
X= mancare
X
X
X
X
X= vin
y
e
s
X = vin
X
X
X
Marin Programare logic a
Reguli
Cum putem programa faptul c a "Lui Ion i plac toti
oamenii"?
place(ion,alex).
place(ion, bogdan).
place(ion, clara).
place(ion, dan).
. . .
Ar trebui enumerate toate persoanele n baza de
cuno stinte imposibil!
Folosim o variabil a:
place(ion, X).
nseamn a "Lui Ion i place orice obiect X."
Mai trebuie precizat c a lui Ion i plac toti X care sunt
persoane.
Regulile sunt un mod de a preciza cum unele fapte depind
de alte fapte.
Marin Programare logic a
Reguli
Cum putem programa faptul c a "Lui Ion i plac toti
oamenii"?
place(ion,alex).
place(ion, bogdan).
place(ion, clara).
place(ion, dan).
. . .
Ar trebui enumerate toate persoanele n baza de
cuno stinte imposibil!
Folosim o variabil a:
place(ion, X).
nseamn a "Lui Ion i place orice obiect X."
Mai trebuie precizat c a lui Ion i plac toti X care sunt
persoane.
Regulile sunt un mod de a preciza cum unele fapte depind
de alte fapte.
Marin Programare logic a
Reguli
Cum putem programa faptul c a "Lui Ion i plac toti
oamenii"?
place(ion,alex).
place(ion, bogdan).
place(ion, clara).
place(ion, dan).
. . .
Ar trebui enumerate toate persoanele n baza de
cuno stinte imposibil!
Folosim o variabil a:
place(ion, X).
nseamn a "Lui Ion i place orice obiect X."
Mai trebuie precizat c a lui Ion i plac toti X care sunt
persoane.
Regulile sunt un mod de a preciza cum unele fapte depind
de alte fapte.
Marin Programare logic a
Reguli
Cum putem programa faptul c a "Lui Ion i plac toti
oamenii"?
place(ion,alex).
place(ion, bogdan).
place(ion, clara).
place(ion, dan).
. . .
Ar trebui enumerate toate persoanele n baza de
cuno stinte imposibil!
Folosim o variabil a:
place(ion, X).
nseamn a "Lui Ion i place orice obiect X."
Mai trebuie precizat c a lui Ion i plac toti X care sunt
persoane.
Regulile sunt un mod de a preciza cum unele fapte depind
de alte fapte.
Marin Programare logic a
Reguli ca denitii
Regulile pot folosite pentru a specica denitii.
Exemple:
"X i place lui Ion dac a X este om."
"X este pas are dac a X este animal si X zboar a."
"X este sora lui Y dac a X este femeie si X si Y au aceia si
p arinti."
ATEN TIE: Notiunea de denitie de mai sus nu este identic a cu
notiunea de denitie din logic a!
O denitie spune c a ceva are loc dac a si numai dac a
altceva (corpul denitiei) are loc.
O regul a spune c a un fapt A este adev arat dac a altceva
este adev arat. ns a faptul A ar putea adev arat si n alte
situatii.
X este om dac a X este femeie.
X este om dac a X este b arbat.
Marin Programare logic a
Reguli ca denitii
Regulile pot folosite pentru a specica denitii.
Exemple:
"X i place lui Ion dac a X este om."
"X este pas are dac a X este animal si X zboar a."
"X este sora lui Y dac a X este femeie si X si Y au aceia si
p arinti."
ATEN TIE: Notiunea de denitie de mai sus nu este identic a cu
notiunea de denitie din logic a!
O denitie spune c a ceva are loc dac a si numai dac a
altceva (corpul denitiei) are loc.
O regul a spune c a un fapt A este adev arat dac a altceva
este adev arat. ns a faptul A ar putea adev arat si n alte
situatii.
X este om dac a X este femeie.
X este om dac a X este b arbat.
Marin Programare logic a
Reguli ca denitii
Regulile pot folosite pentru a specica denitii.
Exemple:
"X i place lui Ion dac a X este om."
"X este pas are dac a X este animal si X zboar a."
"X este sora lui Y dac a X este femeie si X si Y au aceia si
p arinti."
ATEN TIE: Notiunea de denitie de mai sus nu este identic a cu
notiunea de denitie din logic a!
O denitie spune c a ceva are loc dac a si numai dac a
altceva (corpul denitiei) are loc.
O regul a spune c a un fapt A este adev arat dac a altceva
este adev arat. ns a faptul A ar putea adev arat si n alte
situatii.
X este om dac a X este femeie.
X este om dac a X este b arbat.
Marin Programare logic a
Reguli ca denitii
Regulile pot folosite pentru a specica denitii.
Exemple:
"X i place lui Ion dac a X este om."
"X este pas are dac a X este animal si X zboar a."
"X este sora lui Y dac a X este femeie si X si Y au aceia si
p arinti."
ATEN TIE: Notiunea de denitie de mai sus nu este identic a cu
notiunea de denitie din logic a!
O denitie spune c a ceva are loc dac a si numai dac a
altceva (corpul denitiei) are loc.
O regul a spune c a un fapt A este adev arat dac a altceva
este adev arat. ns a faptul A ar putea adev arat si n alte
situatii.
X este om dac a X este femeie.
X este om dac a X este b arbat.
Marin Programare logic a
Reguli ca denitii
Regulile pot folosite pentru a specica denitii.
Exemple:
"X i place lui Ion dac a X este om."
"X este pas are dac a X este animal si X zboar a."
"X este sora lui Y dac a X este femeie si X si Y au aceia si
p arinti."
ATEN TIE: Notiunea de denitie de mai sus nu este identic a cu
notiunea de denitie din logic a!
O denitie spune c a ceva are loc dac a si numai dac a
altceva (corpul denitiei) are loc.
O regul a spune c a un fapt A este adev arat dac a altceva
este adev arat. ns a faptul A ar putea adev arat si n alte
situatii.
X este om dac a X este femeie.
X este om dac a X este b arbat.
Marin Programare logic a
Reguli ca denitii
Regulile pot folosite pentru a specica denitii.
Exemple:
"X i place lui Ion dac a X este om."
"X este pas are dac a X este animal si X zboar a."
"X este sora lui Y dac a X este femeie si X si Y au aceia si
p arinti."
ATEN TIE: Notiunea de denitie de mai sus nu este identic a cu
notiunea de denitie din logic a!
O denitie spune c a ceva are loc dac a si numai dac a
altceva (corpul denitiei) are loc.
O regul a spune c a un fapt A este adev arat dac a altceva
este adev arat. ns a faptul A ar putea adev arat si n alte
situatii.
X este om dac a X este femeie.
X este om dac a X este b arbat.
Marin Programare logic a
Reguli n PROLOG
Regulile n PROLOG au un cap si un corp.
Corpul regulii descrie conditiile ce trebuiesc satisf acute
pentru a satisface capul. n program area logic a, aceste
conditii se mai numesc si obiective.
Exemplu
place(ion, X) :-
place(X,vin).
place(ion, X) :-
femeie(X), place(X, dans).
ATEN TIE! Scopul unei variabile este regula n care aceasta
apare (reguli diferite nu au variabile n comun).
Marin Programare logic a
Reguli n PROLOG
Sintaxa unei reguli
cap

predicat (arg
1
, . . . , arg
n
) :-
corp

fapt
1
, . . . , fapt
m
.
delimitator de regul a (dac a)
delimitatori de fapte ( si)
Marin Programare logic a
Exemplu
Familie regal a
Predicate folosite:
male(X): "X este b arbat."
female(Y): "Y este femeie."
parents(X,Y,Z): "p arintii lui X sunt Y si Z."
Baza de cuno stinte:
male(albert).
male(edward).
female(alice).
female(victoria).
parents(edward,victoria,albert).
parents(alice,victoria,albert).
Cum poate denit predicatul
sister(X, Y): "X este sora lui Y."?
Marin Programare logic a
Exemplu
Familie regal a
Predicate folosite:
male(X): "X este b arbat."
female(Y): "Y este femeie."
parents(X,Y,Z): "p arintii lui X sunt Y si Z."
Baza de cuno stinte:
male(albert).
male(edward).
female(alice).
female(victoria).
parents(edward,victoria,albert).
parents(alice,victoria,albert).
Cum poate denit predicatul
sister(X, Y): "X este sora lui Y."?
Marin Programare logic a
Exemplu
Familie regal a
Predicate folosite:
male(X): "X este b arbat."
female(Y): "Y este femeie."
parents(X,Y,Z): "p arintii lui X sunt Y si Z."
Baza de cuno stinte:
male(albert).
male(edward).
female(alice).
female(victoria).
parents(edward,victoria,albert).
parents(alice,victoria,albert).
Cum poate denit predicatul
sister(X, Y): "X este sora lui Y."?
Marin Programare logic a
Exemplu (continuare)
Familie regal a
Specicarea predicatului sister/2:
sister(X,Y) :-
female(X),
parents(X, M, F),
parents(Y, M, F).
Exemple de ntreb ari
?- sister(alice, edward).
?- sister(alice, X).
?- sister(X, edward).
Marin Programare logic a
ntreb ari despre surori
Regul a:
sister(X,Y) :- female(X),
parents(X,M,F),
parents(Y,M,F).
ntrebare:
sister(alice,edward).
ntrebarea (obiectivul) se potrive ste cu capul regulei, dac a
se instantiaz a X cu alice si Y cu edward.
Instanta corpului devine noua ntrebare (obiectiv):
female(alice),
parents(alice,M,F),
parents(edward,M,F).
Marin Programare logic a
ntreb ari despre surori
Regul a:
sister(X,Y) :- female(X),
parents(X,M,F),
parents(Y,M,F).
ntrebare:
sister(alice,edward).
ntrebarea (obiectivul) se potrive ste cu capul regulei, dac a
se instantiaz a X cu alice si Y cu edward.
Instanta corpului devine noua ntrebare (obiectiv):
female(alice),
parents(alice,M,F),
parents(edward,M,F).
Marin Programare logic a
ntreb ari despre surori
Regul a:
sister(X,Y) :- female(X),
parents(X,M,F),
parents(Y,M,F).
ntrebare:
sister(alice,edward).
ntrebarea (obiectivul) se potrive ste cu capul regulei, dac a
se instantiaz a X cu alice si Y cu edward.
Instanta corpului devine noua ntrebare (obiectiv):
female(alice),
parents(alice,M,F),
parents(edward,M,F).
Marin Programare logic a
Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward)
sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward)
sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward)
sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X0,Y0):-
female(X0),
parents(X0,M0,F0),
parents(Y0,M0,F0).
sister(alice,edward)
sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X0,Y0):-
female(X0),
parents(X0,M0,F0),
parents(Y0,M0,F0).
sister(alice,edward)
sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X0,Y0):-
female(X0),
parents(X0,M0,F0),
parents(Y0,M0,F0).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert). 5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert).
5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert).
5 parents(edward,victoria,albert).

Marin Programare logic a


Este Alice sora lui Edward?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,edward) sister(alice,edward)
X0=alice,
Y0=edward
7 sister(alice,edward)
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
parents(alice,M0,F0),
parents(edward,M0,F0).
6 parents(alice,M0,F0),
parents(edward,M0,F0).
parents(edward,victoria,albert).
M0=victoria,
F0=albert
parents(edward,victoria,albert).
5 parents(edward,victoria,albert).

Marin Programare logic a


Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X)
sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X)
sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X)
sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X0,Y0):-
female(X0),
parents(X0,M0,F0),
parents(Y0,M0,F0).
sister(alice,X)
sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X0,Y0):-
female(X0),
parents(X0,M0,F0),
parents(Y0,M0,F0).
sister(alice,X)
sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X0,Y0):-
female(X0),
parents(X0,M0,F0),
parents(Y0,M0,F0).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert). 5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert).
5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert).
5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Sora cui este Alice?
(1) male(albert).
(2) male(edward).
(3) female(alice).
(4) female(victoria).
(5) parents(edward,
victoria,
albert).
(6) parents(alice,
victoria,
albert).
(7) sister(X,Y):-
female(X),
parents(X,M,F),
parents(Y,M,F).
sister(alice,X) sister(alice,X)
X0=alice,
Y0=X
7 sister(alice,X)
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
3 female(alice),
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
parents(alice,M0,F0),
parents(X,M0,F0).
6 parents(alice,M0,F0),
parents(X,M0,F0).
parents(X,victoria,albert).
M0=victoria
F0=albert
parents(X,victoria,albert).
5 parents(X,victoria,albert).
X=edward

R aspuns: X = edward.
Marin Programare logic a
Exercitiu: hoti
Predicate folosite:
thief(X): "X este hot."
likes(X, Y): "Lui X i place Y."
may_steal(X, Y): "X ar putea fura Y."
Stim c a:
1
X ar putea fura Y dac a X este hot si lui X i place Y.
2
John e hot.
3
Lui Mary i place mncarea.
4
Lui Mary i place vinul.
5
Lui John i place X dac a lui X i place vinul.
ntrebare: Ce ar putea fura John?
Marin Programare logic a
Exercitiu: hoti (continuare)
Programarea problemei n PROLOG
Baza de cuno stinte:
thief(john).
likes(mary, food).
likes(mary, wine).
likes(john, X) :- likes(X, wine).
may_steal (X, Y):-
thief(X), likes(X, Y).
ntrebare:
?- may_steal(john,X).
Marin Programare logic a
Concluzie
n acest curs au fost prezentate principalele notiuni de
programare logic a
fapte, conjunctii de fapte, variabile logice
reguli
exemple care ilustreaz a
Cum se programeaz a n PROLOG
Cum r aspunde PROLOG la ntreb arile puse de utilizator.
Marin Programare logic a
Bibliograe, exercitii
Cursul presupune familiarizarea cu programarea n SWI
PROLOG.
Toate detaliile despre SWIProlog pot g asite la
http://www.swi-prolog.org.
Instalati SWI-Prolog si ncercati exemplele prezentate.
Bibliograe: Capitolul 1 + sectiunea de exercitii din
[Clocksin and Mellish, 2003].
Marin Programare logic a

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