Programare logicaCurs 1: Introducere
Mircea Marin
Marin Programare logica
Aspecte organizatorice
B Curs: Mircea MarinLaboratoare: Isabela Dramnesc
pagina web (curs):http://web.info.uvt.ro/˜mmarin/lectures/LPemail: [email protected]
B Materialele de curs vor fi postate pe pagina web.B Evaluare:
1 examen scris final (50% din nota)Probe de laborator (50% din nota). Participarea la probelede laborator este obligatorie.
Marin Programare logica
Scopul si planul cursului
Scopul cursului:Raspunsuri la urmatoarele întrebari:
1 Care sunt caracteristicile programarii logice?2 Ce se poate face cu programarea logica?
Învatarea practicilor de programare în PROLOG.Aplicatii specifice.
Planul cursului:B Prezentarea limbajului de programare PROLOG
B PROLOG si logica cu predicate de ordinul IB Aplicatii: recursivitate, prelucrarea listelor, mecanisme
specifice (taiere, backtracking), etc.
Marin Programare logica
Ce este programarea logica?
Stil de programare în careProgram = colectie de reguli logice si fapte care reprezintabaza de cunostinte a programatorului.Rularea unui program = gasirea de raspunsuri la întrebaripuse de programator, prin rationament logic bazat becunostintele din program.
B Programatorul trebuie sa stie programare logica:codificarea cunostintelor ca reguli si fapte în PROLOGcodificarea întrebarilor în PROLOG
B Interpretorul (sau compilatorul) PROLOG stie sa raspundala întrebarile puse de utilizator.
Marin Programare logica
Ce este programarea logica?
Stil de programare în careProgram = colectie de reguli logice si fapte care reprezintabaza de cunostinte a programatorului.Rularea unui program = gasirea de raspunsuri la întrebaripuse de programator, prin rationament logic bazat becunostintele din program.
B Programatorul trebuie sa stie programare logica:codificarea cunostintelor ca reguli si fapte în PROLOGcodificarea întrebarilor în PROLOG
B Interpretorul (sau compilatorul) PROLOG stie sa raspundala întrebarile puse de utilizator.
Marin Programare logica
Ce este programarea logica?
Stil de programare în careProgram = colectie de reguli logice si fapte care reprezintabaza de cunostinte a programatorului.Rularea unui program = gasirea de raspunsuri la întrebaripuse de programator, prin rationament logic bazat becunostintele din program.
B Programatorul trebuie sa stie programare logica:codificarea cunostintelor ca reguli si fapte în PROLOGcodificarea întrebarilor în PROLOG
B Interpretorul (sau compilatorul) PROLOG stie sa raspundala întrebarile puse de utilizator.
Marin Programare logica
Caracteristici ale programarii logiceComparatie: Programare declarativa contra Programare procedurala
Programarea logica este un stil de programare declarativa:
Programatorul trebuie sa programeze ceea ce stie.Cum se gaseste raspunsul la întrebari cade în sarcinainterpretorului PROLOG.
PROLOG foloseste o strategie de cautare a tuturorraspunsurilor la întrebari, bazat pe rationament logic(rezolutie SLD)
În programarea procedurala:Programatorul trebuie sa programeze cum se gasestesolutia la o problema.
Marin Programare logica
Fapte
Faptele sunt afirmatii despre proprietatile obiectelor si relatiileexistente între ele.
Fapte de tip proprietate(obiect):Coco este papagal: papagal(coco).Oricine (X) este muritor: muritor(X).
Fapte care exprima relatii între obiect:Mihai o iubeste pe Maria: iubeste(mihai,maria).Oricine (X) este egal cu sine însusi: egal(X,X).
Marin Programare logica
Reguli
O regula, în limbaj natural, este o fraza de forma:Daca ipoteza1 si . . . si ipotezan atunci concluzie.
⇔ concluzie daca ipoteza1 si . . . si ipotezan.
regula corespunzatoare în PROLOG este expresia
concluzie :- ipoteza1, . . . , ipotezan.
unde ipoteza1, . . . , ipotezan, concluzie sunt atomi.
Exemplu
În limbaj natural (lb. româna) În PROLOGDaca X este bun si X cunoaste peY si Y este frumoasa atunci X oiubeste pe Y .
iubeste(X ,Y ):-bun(X ), cunoaste(X ,Y ),frumoasa(Y ).
Orice papagal este muritor.(Daca X este papagal atunci X estemuritor.)
muritor(X ):-papagal(X).
Marin Programare logica
Reguli
O regula, în limbaj natural, este o fraza de forma:Daca ipoteza1 si . . . si ipotezan atunci concluzie.
⇔ concluzie daca ipoteza1 si . . . si ipotezan.
regula corespunzatoare în PROLOG este expresia
concluzie :- ipoteza1, . . . , ipotezan.
unde ipoteza1, . . . , ipotezan, concluzie sunt atomi.
Exemplu
În limbaj natural (lb. româna) În PROLOGDaca X este bun si X cunoaste peY si Y este frumoasa atunci X oiubeste pe Y .
iubeste(X ,Y ):-bun(X ), cunoaste(X ,Y ),frumoasa(Y ).
Orice papagal este muritor.(Daca X este papagal atunci X estemuritor.)
muritor(X ):-papagal(X).
Marin Programare logica
Întrebari
În limbaj natural (lb. româna) În PROLOG
Este Coco papagal? ?-papagal(coco).Cine este muritor?(Pentru ce valoare a lui X este Xmuritor?)
?-muritor(X).
În general, rezolvarea unei probleme se face punândîntrebari
"Este adevarat ca ...?""Pentru ce valori ale necunoscutelor ... are loc ...?"
Programatorul nu trebuie sa stie cum se afla raspunsul laîntrebare. Gasirea raspunsurilor cade în sarcinainterpretorului Prolog.
Marin Programare logica
De la limbaj natural la Prolog
În acest curs vom pune accent pe traducerea corecta acunostintelor dintr-un limbaj natural în limbajul Prolog.Adesea, vom reformula mai întâi afirmatiile din limbajulnatural, pentru a le traduce mai usor în PROLOG.
Exemplu
În limbaj natural:Studentii silitori au note bune. ⇔ Daca X este student si Xeste silitor atunci X are note bune ⇔ X are note bune dacaX este student si X este silitor.În limbaj artificial (PROLOG):
note(X ,bune):-student(X ), silitor(X ).
REMARCA: În PROLOG, :- este „daca" iar virgula dintre ipoteze(,) este „si".
Marin Programare logica
Programarea logica: Istoric
Kowalski (anii ’70) observa ca o formula logica
S1 ∧ . . . ∧ Sn → S
poate avea 2 semnificatii:
semnificatie logica: Daca S1 si . . . si Sn sunt fiecare adevarateatunci si S este adevarata.
semnificatie procedurala de forma "S daca S1 si . . . si Sn" carepoate fi interpretata astfel: pentru a afla daca procedura S esteadevarata trebuiesc executate recursiv procedurile S1, . . . , Snpentru a determina daca sunt adevarate.
În PROLOG, formula devine o regula
S:-S1, . . . ,Sn.
cu antetul (sau capul) regulii S, si corpul S1, . . . ,Sn.
Marin Programare logica
Programarea logicaIstoric (continuare)
Universitatea din Marsilia (Colmerauer, anii ’70): aparelimbajul PROLOG("Programmation et Logique".)PROLOG s-a impus ca cel mai important limbaj deprogramare logica⇒ numeroase implementari (interpretoare & compilatoare)
Marin Programare logica
Rezolvarea de probleme cu PROLOG
Se declara fapte despre obiecte si relatiile dintre ele.
Se definesc reguli despre obiecte si relatiile lor.Se pun întrebari despre obiecte si relatiile dintre ele.
Programarea în PROLOG este o conversatie cu interpretorul dePROLOG. Rezolvarea de probleme în acest fel necesitamodelarea problemei folosind notiunile programarii logice:
fapte.reguli.întrebari.
Program = fapte + reguli︸ ︷︷ ︸baza de cunostinte
.
Marin Programare logica
Rezolvarea de probleme cu PROLOG
Se declara fapte despre obiecte si relatiile dintre ele.Se definesc reguli despre obiecte si relatiile lor.
Se pun întrebari despre obiecte si relatiile dintre ele.
Programarea în PROLOG este o conversatie cu interpretorul dePROLOG. Rezolvarea de probleme în acest fel necesitamodelarea problemei folosind notiunile programarii logice:
fapte.reguli.întrebari.
Program = fapte + reguli︸ ︷︷ ︸baza de cunostinte
.
Marin Programare logica
Rezolvarea de probleme cu PROLOG
Se declara fapte despre obiecte si relatiile dintre ele.Se definesc reguli despre obiecte si relatiile lor.Se pun întrebari despre obiecte si relatiile dintre ele.
Programarea în PROLOG este o conversatie cu interpretorul dePROLOG. Rezolvarea de probleme în acest fel necesitamodelarea problemei folosind notiunile programarii logice:
fapte.reguli.întrebari.
Program = fapte + reguli︸ ︷︷ ︸baza de cunostinte
.
Marin Programare logica
Rezolvarea de probleme cu PROLOG
Se declara fapte despre obiecte si relatiile dintre ele.Se definesc reguli despre obiecte si relatiile lor.Se pun întrebari despre obiecte si relatiile dintre ele.
Programarea în PROLOG este o conversatie cu interpretorul dePROLOG. Rezolvarea de probleme în acest fel necesitamodelarea problemei folosind notiunile programarii logice:
fapte.reguli.întrebari.
Program = fapte + reguli︸ ︷︷ ︸baza de cunostinte
.
Marin Programare logica
Fapte
Enuntarea unui fapt în PROLOG
predicat(obiect1, . . . ,obiectn︸ ︷︷ ︸argumente
).
De exempluare(andrei , carte).
Numele relatiilor (predicatelor) încep cu litera mica.PROLOG foloseste mai ales notatia prefix (dar sunt siexceptii).Un fapt se încheie cu “.” (punct).
Programatorul alege numele predicatelor si trebuie sa stiecum le interpreteaza.
De ex., are(andrei , carte). înseamna ca Andrei are o carte.
Marin Programare logica
Exemple de fapte
Aurul este pretios.pretios(aur).
Ioana este femeie.femeie(ioana).
Ion este tatal Mariei.tata(ion, maria).
Andrei are o carte.are(carte, andrei).
ObservatiiProgramatorul trebuie sa stabileasca întelesul numelor deobiecte si predicate folosite în scrierea faptelor.De exemplu: are(X,Y) înseamna X are Y, si nuînseamna Y are X.Ordinea argumentelor conteaza!
Marin Programare logica
Întrebari
Exemplu de întrebare în PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)
PROLOG cauta în baza de cunostinte fapte care sepotrivesc (se unifica) cu întrebarea.
Raspunsul este true dacapredicatul este acelasiargumentele sunt aceleasi
Altfel, raspunsul este false
Numai ce este în baza de cunostinte se considera adevarat.false nu este acelasi lucru cu fals!
false înseamna mai degraba nu stiu.
Marin Programare logica
Întrebari
Exemplu de întrebare în PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)PROLOG cauta în baza de cunostinte fapte care sepotrivesc (se unifica) cu întrebarea.
Raspunsul este true dacapredicatul este acelasiargumentele sunt aceleasi
Altfel, raspunsul este false
Numai ce este în baza de cunostinte se considera adevarat.false nu este acelasi lucru cu fals!
false înseamna mai degraba nu stiu.
Marin Programare logica
Întrebari
Exemplu de întrebare în PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)PROLOG cauta în baza de cunostinte fapte care sepotrivesc (se unifica) cu întrebarea.Raspunsul este true daca
predicatul este acelasiargumentele sunt aceleasi
Altfel, raspunsul este false
Numai ce este în baza de cunostinte se considera adevarat.false nu este acelasi lucru cu fals!
false înseamna mai degraba nu stiu.
Marin Programare logica
Întrebari
Exemplu de întrebare în PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)PROLOG cauta în baza de cunostinte fapte care sepotrivesc (se unifica) cu întrebarea.Raspunsul este true daca
predicatul este acelasiargumentele sunt aceleasi
Altfel, raspunsul este false
Numai ce este în baza de cunostinte se considera adevarat.false nu este acelasi lucru cu fals!
false înseamna mai degraba nu stiu.
Marin Programare logica
Întrebari
Exemplu de întrebare în PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)PROLOG cauta în baza de cunostinte fapte care sepotrivesc (se unifica) cu întrebarea.Raspunsul este true daca
predicatul este acelasiargumentele sunt aceleasi
Altfel, raspunsul este falseNumai ce este în baza de cunostinte se considera adevarat.
false nu este acelasi lucru cu fals!false înseamna mai degraba nu stiu.
Marin Programare logica
Întrebari
Exemplu de întrebare în PROLOG
?- are(andrei, carte).
(Are Andrei o carte?)PROLOG cauta în baza de cunostinte fapte care sepotrivesc (se unifica) cu întrebarea.Raspunsul este true daca
predicatul este acelasiargumentele sunt aceleasi
Altfel, raspunsul este falseNumai ce este în baza de cunostinte se considera adevarat.false nu este acelasi lucru cu fals!
false înseamna mai degraba nu stiu.
Marin Programare logica
Variabile
Variabila = înlocuitor al unui obiect care satisface o relatie.Exemplu de întrebare cu variabila
?- place(ion, X).
se interpreteaza astfel:Care sunt obiectele X care îi plac lui Ion?
PROLOG urmeaza sa determine valorile lui X pentru careîntrebarea este true.Conventie: în PROLOG variabilele încep cu LITERE MARI.În PROLOG o variabila poate fi
instantiata: variabila are un obiect ca valoareneinstantiata: înca nu se stie o valoare pentru variabila.
Marin Programare logica
Exemplu de întrebare cu variabile
Se considera baza de cunostinte cu urmatoarele fapte:place(ion,maria).place(ion,flori).place(paul,maria).
La întrebarea?-place(ion, X).
PROLOG raspundeX = flori
si va astepa instructiuni.
Marin Programare logica
Calculul raspunsului în PROLOG
PROLOG cauta în baza de cunostinte un fapt ce sepotriveste cu întrebareacând se gaseste o potrivire, aceasta este marcatadaca utilizatorul apasa Enter, cautarea se încheiedaca utilizatorul apasa ";" si apoi Enter, PROLOG cauta onoua potrivire, începând cu ultimul loc marcat, si cuvariabilele din întrebare neinstantiate.În exemplul de mai sus, apasând ";" urmat de Enter vadetermina PROLOG sa raspunda:X = maria .false
Când nu mai sunt în baza de cunostinte fapte ce sa sepotriveasca, PROLOG raspunde false
Marin Programare logica
Întrebari mai complexeConjunctii
Se considera programul urmator:
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
si întrebarea
?- place(ion, maria), place(maria, ion).
În general, o întrebare?- fapt1, . . . , faptn.
se citeste fapt1 si . . . si faptn? În acest caz:Îi place lui Ion de Maria si îi place Mariei de Ion?
Marin Programare logica
Întrebari mai complexeConjunctii
Se considera programul urmator:
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
si întrebarea
?- place(ion, maria), place(maria, ion).
În general, o întrebare?- fapt1, . . . , faptn.
se citeste fapt1 si . . . si faptn? În acest caz:Îi place lui Ion de Maria si îi place Mariei de Ion?
Marin Programare logica
Întrebari mai complexe (continuare)Conjunctii
Baza de cunostinte:place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
Întrebare:?- place(ion, maria), place(maria, ion).
PROLOG va raspunde false : cauta toate faptele dinîntrebare, unul dupa altul (toate trebuiesc satisfacute, altfelinterogarea va esua, iar raspunsul va fi false).
Marin Programare logica
Întrebari mai complexe (continuare)Conjunctii
Baza de cunostinte:place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
Întrebare:?- place(maria, X), place(ion, X).
Întrebarea este: Exista un obiect X care îi place si lui Ion siMariei?PROLOG încearca sa satisfaca primul obiectiv (prima partea întrebarii); daca reuseste, pune un marcaj pe el si apoiîncearca sa satisfaca al doilea obiectiv, plasând un marcajîn caz de succes.
Marin Programare logica
Întrebari mai complexe (continuare)Conjunctii
Baza de cunostinte:place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
Întrebare:?- place(maria, X), place(ion, X).
Întrebarea este: Exista un obiect X care îi place si lui Ion siMariei?
PROLOG încearca sa satisfaca primul obiectiv (prima partea întrebarii); daca reuseste, pune un marcaj pe el si apoiîncearca sa satisfaca al doilea obiectiv, plasând un marcajîn caz de succes.
Marin Programare logica
Întrebari mai complexe (continuare)Conjunctii
Baza de cunostinte:place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
Întrebare:?- place(maria, X), place(ion, X).
Întrebarea este: Exista un obiect X care îi place si lui Ion siMariei?PROLOG încearca sa satisfaca primul obiectiv (prima partea întrebarii); daca reuseste, pune un marcaj pe el si apoiîncearca sa satisfaca al doilea obiectiv, plasând un marcajîn caz de succes.
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
XXX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
XXX
Marin Programare logica
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
XXX
X= vin
yes
X = vin
XXX
Marin Programare logica
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
XX
X= vin
yes
X = vin
XXX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XX
X
X
X= vin
yes
X = vin
XXX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXX
X
X= vin
yes
X = vin
XXX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
XXX
Marin Programare logica
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
XXX
X= vin
yes
X = vin
XXX
Marin Programare logica
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
XX
X= vin
yes
X = vin
XXX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
XXX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
X
XX
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
X
X
X
Marin Programare logica
Conjunctii si backracking (revenire)
?- place(maria, X), place(ion, X).
place(maria, mancare).place(maria, vin).place(ion, vin).place(ion, maria).
X= mancare
XXXX
X= vin
yes
X = vin
XX
X
Marin Programare logica
Reguli
Cum putem programa faptul ca "Lui Ion îi plac totioamenii"?
place(ion,alex).place(ion, bogdan).place(ion, clara).place(ion, dan).. . .
Ar trebui enumerate toate persoanele în baza decunostinte → imposibil!
Folosim o variabila:place(ion, X).înseamna "Lui Ion îi place orice obiect X ."Mai trebuie precizat ca lui Ion îi plac toti X care suntpersoane.Regulile sunt un mod de a preciza cum unele fapte depindde alte fapte.
Marin Programare logica
Reguli
Cum putem programa faptul ca "Lui Ion îi plac totioamenii"?
place(ion,alex).place(ion, bogdan).place(ion, clara).place(ion, dan).. . .
Ar trebui enumerate toate persoanele în baza decunostinte → imposibil!Folosim o variabila:place(ion, X).înseamna "Lui Ion îi place orice obiect X ."
Mai trebuie precizat ca lui Ion îi plac toti X care suntpersoane.Regulile sunt un mod de a preciza cum unele fapte depindde alte fapte.
Marin Programare logica
Reguli
Cum putem programa faptul ca "Lui Ion îi plac totioamenii"?
place(ion,alex).place(ion, bogdan).place(ion, clara).place(ion, dan).. . .
Ar trebui enumerate toate persoanele în baza decunostinte → imposibil!Folosim o variabila:place(ion, X).înseamna "Lui Ion îi place orice obiect X ."Mai trebuie precizat ca lui Ion îi plac toti X care suntpersoane.
Regulile sunt un mod de a preciza cum unele fapte depindde alte fapte.
Marin Programare logica
Reguli
Cum putem programa faptul ca "Lui Ion îi plac totioamenii"?
place(ion,alex).place(ion, bogdan).place(ion, clara).place(ion, dan).. . .
Ar trebui enumerate toate persoanele în baza decunostinte → imposibil!Folosim o variabila:place(ion, X).înseamna "Lui Ion îi place orice obiect X ."Mai trebuie precizat ca lui Ion îi plac toti X care suntpersoane.Regulile sunt un mod de a preciza cum unele fapte depindde alte fapte.
Marin Programare logica
Reguli ca definitii
Regulile pot fi folosite pentru a specifica definitii.
Exemple:"X îi place lui Ion daca X este om.""X este pasare daca X este animal si X zboara.""X este sora lui Y daca X este femeie si X si Y au aceiasiparinti."
ATENTIE: Notiunea de definitie de mai sus nu este identica cunotiunea de definitie din logica!
O definitie spune ca ceva are loc dacasi numai dacaaltceva (corpul definitiei) are loc.O regula spune ca un fapt A este adevarat daca altcevaeste adevarat. Însa faptul A ar putea fi adevarat si în altesituatii‘.
“X este om daca X este femeie.”“X este om daca X este barbat.”
Marin Programare logica
Reguli ca definitii
Regulile pot fi folosite pentru a specifica definitii.Exemple:
"X îi place lui Ion daca X este om.""X este pasare daca X este animal si X zboara.""X este sora lui Y daca X este femeie si X si Y au aceiasiparinti."
ATENTIE: Notiunea de definitie de mai sus nu este identica cunotiunea de definitie din logica!
O definitie spune ca ceva are loc dacasi numai dacaaltceva (corpul definitiei) are loc.O regula spune ca un fapt A este adevarat daca altcevaeste adevarat. Însa faptul A ar putea fi adevarat si în altesituatii‘.
“X este om daca X este femeie.”“X este om daca X este barbat.”
Marin Programare logica
Reguli ca definitii
Regulile pot fi folosite pentru a specifica definitii.Exemple:"X îi place lui Ion daca X este om."
"X este pasare daca X este animal si X zboara.""X este sora lui Y daca X este femeie si X si Y au aceiasiparinti."
ATENTIE: Notiunea de definitie de mai sus nu este identica cunotiunea de definitie din logica!
O definitie spune ca ceva are loc dacasi numai dacaaltceva (corpul definitiei) are loc.O regula spune ca un fapt A este adevarat daca altcevaeste adevarat. Însa faptul A ar putea fi adevarat si în altesituatii‘.
“X este om daca X este femeie.”“X este om daca X este barbat.”
Marin Programare logica
Reguli ca definitii
Regulile pot fi folosite pentru a specifica definitii.Exemple:"X îi place lui Ion daca X este om.""X este pasare daca X este animal si X zboara."
"X este sora lui Y daca X este femeie si X si Y au aceiasiparinti."
ATENTIE: Notiunea de definitie de mai sus nu este identica cunotiunea de definitie din logica!
O definitie spune ca ceva are loc dacasi numai dacaaltceva (corpul definitiei) are loc.O regula spune ca un fapt A este adevarat daca altcevaeste adevarat. Însa faptul A ar putea fi adevarat si în altesituatii‘.
“X este om daca X este femeie.”“X este om daca X este barbat.”
Marin Programare logica
Reguli ca definitii
Regulile pot fi folosite pentru a specifica definitii.Exemple:"X îi place lui Ion daca X este om.""X este pasare daca X este animal si X zboara.""X este sora lui Y daca X este femeie si X si Y au aceiasiparinti."
ATENTIE: Notiunea de definitie de mai sus nu este identica cunotiunea de definitie din logica!
O definitie spune ca ceva are loc dacasi numai dacaaltceva (corpul definitiei) are loc.O regula spune ca un fapt A este adevarat daca altcevaeste adevarat. Însa faptul A ar putea fi adevarat si în altesituatii‘.
“X este om daca X este femeie.”“X este om daca X este barbat.”
Marin Programare logica
Reguli ca definitii
Regulile pot fi folosite pentru a specifica definitii.Exemple:"X îi place lui Ion daca X este om.""X este pasare daca X este animal si X zboara.""X este sora lui Y daca X este femeie si X si Y au aceiasiparinti."
ATENTIE: Notiunea de definitie de mai sus nu este identica cunotiunea de definitie din logica!
O definitie spune ca ceva are loc dacasi numai dacaaltceva (corpul definitiei) are loc.O regula spune ca un fapt A este adevarat daca altcevaeste adevarat. Însa faptul A ar putea fi adevarat si în altesituatii‘.
“X este om daca X este femeie.”“X este om daca X este barbat.”
Marin Programare logica
Reguli în PROLOG
Regulile în PROLOG au un cap si un corp.Corpul regulii descrie conditiile ce trebuiesc satisfacutepentru a satisface capul. În program area logica, acesteconditii se mai numesc si obiective.
Exempluplace(ion, X) :-
place(X,vin).place(ion, X) :-
femeie(X), place(X, dans).
ATENTIE! Scopul unei variabile este regula în care aceastaapare (reguli diferite nu au variabile în comun).
Marin Programare logica
Reguli în PROLOG
Sintaxa unei regulicap︷ ︸︸ ︷
predicat(arg1, . . . ,argn) :-
corp︷ ︸︸ ︷fapt1, . . . , faptm .
delimitator de regula (daca)
delimitatori de fapte (si)
Marin Programare logica
ExempluFamilie regala
Predicate folosite:male(X ): "X este barbat."female(Y ): "Y este femeie."parents(X,Y,Z): "parintii lui X sunt Y si Z ."
Baza de cunostinte:male(albert).male(edward).female(alice).female(victoria).parents(edward,victoria,albert).parents(alice,victoria,albert).
Cum poate fi definit predicatulsister(X ,Y ): "X este sora lui Y ."?
Marin Programare logica
ExempluFamilie regala
Predicate folosite:male(X ): "X este barbat."female(Y ): "Y este femeie."parents(X,Y,Z): "parintii lui X sunt Y si Z ."
Baza de cunostinte:male(albert).male(edward).female(alice).female(victoria).parents(edward,victoria,albert).parents(alice,victoria,albert).
Cum poate fi definit predicatulsister(X ,Y ): "X este sora lui Y ."?
Marin Programare logica
ExempluFamilie regala
Predicate folosite:male(X ): "X este barbat."female(Y ): "Y este femeie."parents(X,Y,Z): "parintii lui X sunt Y si Z ."
Baza de cunostinte:male(albert).male(edward).female(alice).female(victoria).parents(edward,victoria,albert).parents(alice,victoria,albert).Cum poate fi definit predicatul
sister(X ,Y ): "X este sora lui Y ."?
Marin Programare logica
Exemplu (continuare)Familie regala
Specificarea predicatului sister/2:sister(X,Y) :-
female(X),parents(X, M, F),
parents(Y, M, F).
Exemple de întrebari?- sister(alice, edward).?- sister(alice, X).?- sister(X, edward).
Marin Programare logica
Întrebari despre surori
Regula:
sister(X,Y) :- female(X),parents(X,M,F),parents(Y,M,F).
Întrebare:
sister(alice,edward).
Întrebarea (obiectivul) se potriveste cu capul regulei, dacase instantiaza 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 logica
Întrebari despre surori
Regula:
sister(X,Y) :- female(X),parents(X,M,F),parents(Y,M,F).
Întrebare:
sister(alice,edward).
Întrebarea (obiectivul) se potriveste cu capul regulei, dacase instantiaza 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 logica
Întrebari despre surori
Regula:
sister(X,Y) :- female(X),parents(X,M,F),parents(Y,M,F).
Întrebare:
sister(alice,edward).
Întrebarea (obiectivul) se potriveste cu capul regulei, dacase instantiaza 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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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 logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).
5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).
5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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=victoriaF0=albert
parents(X,victoria,albert).
5 parents(X,victoria,albert).
X=edward
�
Raspuns: X = edward.
Marin Programare logica
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 ca:1 X ar putea fura Y daca X este hot si lui X îi place Y .2 John e hot.3 Lui Mary îi place mâncarea.4 Lui Mary îi place vinul.5 Lui John îi place X daca lui X îi place vinul.
Întrebare: Ce ar putea fura John?
Marin Programare logica
Exercitiu: hoti (continuare)Programarea problemei în PROLOG
Baza de cunostinte: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 logica
Concluzie
În acest curs au fost prezentate principalele notiuni deprogramare logica
fapte, conjunctii de fapte, variabile logicereguliexemple care ilustreaza
Cum se programeaza în PROLOGCum raspunde PROLOG la întrebarile puse de utilizator.
Marin Programare logica
Bibliografie, exercitii
Cursul presupune familiarizarea cu programarea în SWIPROLOG.Toate detaliile despre SWIProlog pot fi gasite lahttp://www.swi-prolog.org.Instalati SWI-Prolog si încercati exemplele prezentate.Bibliografie: Capitolul 1 + sectiunea de exercitii din[Clocksin and Mellish, 2003].
Marin Programare logica
Top Related