programare logica - curs 1: introducere

105
Programare logic ˘ a Curs 1: Introducere Mircea Marin Marin Programare logic ˘ a

Upload: truongxuyen

Post on 03-Jan-2017

336 views

Category:

Documents


17 download

TRANSCRIPT

Page 1: Programare logica - Curs 1: Introducere

Programare logicaCurs 1: Introducere

Mircea Marin

Marin Programare logica

Page 2: Programare logica - Curs 1: Introducere

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

Page 3: Programare logica - Curs 1: Introducere

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

Page 4: Programare logica - Curs 1: Introducere

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

Page 5: Programare logica - Curs 1: Introducere

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

Page 6: Programare logica - Curs 1: Introducere

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

Page 7: Programare logica - Curs 1: Introducere

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

Page 8: Programare logica - Curs 1: Introducere

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

Page 9: Programare logica - Curs 1: Introducere

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

Page 10: Programare logica - Curs 1: Introducere

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

Page 11: Programare logica - Curs 1: Introducere

Î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

Page 12: Programare logica - Curs 1: Introducere

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

Page 13: Programare logica - Curs 1: Introducere

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

Page 14: Programare logica - Curs 1: Introducere

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

Page 15: Programare logica - Curs 1: Introducere

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

Page 16: Programare logica - Curs 1: Introducere

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

Page 17: Programare logica - Curs 1: Introducere

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

Page 18: Programare logica - Curs 1: Introducere

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

Page 19: Programare logica - Curs 1: Introducere

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

Page 20: Programare logica - Curs 1: Introducere

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

Page 21: Programare logica - Curs 1: Introducere

Î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

Page 22: Programare logica - Curs 1: Introducere

Î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

Page 23: Programare logica - Curs 1: Introducere

Î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

Page 24: Programare logica - Curs 1: Introducere

Î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

Page 25: Programare logica - Curs 1: Introducere

Î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

Page 26: Programare logica - Curs 1: Introducere

Î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

Page 27: Programare logica - Curs 1: Introducere

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

Page 28: Programare logica - Curs 1: Introducere

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

Page 29: Programare logica - Curs 1: Introducere

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

Page 30: Programare logica - Curs 1: Introducere

Î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

Page 31: Programare logica - Curs 1: Introducere

Î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

Page 32: Programare logica - Curs 1: Introducere

Î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

Page 33: Programare logica - Curs 1: Introducere

Î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

Page 34: Programare logica - Curs 1: Introducere

Î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

Page 35: Programare logica - Curs 1: Introducere

Î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

Page 36: Programare logica - Curs 1: Introducere

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

Page 37: Programare logica - Curs 1: Introducere

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

Page 38: Programare logica - Curs 1: Introducere

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

Page 39: Programare logica - Curs 1: Introducere

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

Page 40: Programare logica - Curs 1: Introducere

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

Page 41: Programare logica - Curs 1: Introducere

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

Page 42: Programare logica - Curs 1: Introducere

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

Page 43: Programare logica - Curs 1: Introducere

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

Page 44: Programare logica - Curs 1: Introducere

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

Page 45: Programare logica - Curs 1: Introducere

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

Page 46: Programare logica - Curs 1: Introducere

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

Page 47: Programare logica - Curs 1: Introducere

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

Page 48: Programare logica - Curs 1: Introducere

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

Page 49: Programare logica - Curs 1: Introducere

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

Page 50: Programare logica - Curs 1: Introducere

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

Page 51: Programare logica - Curs 1: Introducere

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

Page 52: Programare logica - Curs 1: Introducere

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

Page 53: Programare logica - Curs 1: Introducere

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

Page 54: Programare logica - Curs 1: Introducere

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

Page 55: Programare logica - Curs 1: Introducere

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

Page 56: Programare logica - Curs 1: Introducere

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

Page 57: Programare logica - Curs 1: Introducere

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

Page 58: Programare logica - Curs 1: Introducere

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

Page 59: Programare logica - Curs 1: Introducere

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

Page 60: Programare logica - Curs 1: Introducere

Reguli în PROLOG

Sintaxa unei regulicap︷ ︸︸ ︷

predicat(arg1, . . . ,argn) :-

corp︷ ︸︸ ︷fapt1, . . . , faptm .

delimitator de regula (daca)

delimitatori de fapte (si)

Marin Programare logica

Page 61: Programare logica - Curs 1: Introducere

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

Page 62: Programare logica - Curs 1: Introducere

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

Page 63: Programare logica - Curs 1: Introducere

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

Page 64: Programare logica - Curs 1: Introducere

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

Page 65: Programare logica - Curs 1: Introducere

Î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

Page 66: Programare logica - Curs 1: Introducere

Î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

Page 67: Programare logica - Curs 1: Introducere

Î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

Page 68: Programare logica - Curs 1: Introducere

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

Page 69: Programare logica - Curs 1: Introducere

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

Page 70: Programare logica - Curs 1: Introducere

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

Page 71: Programare logica - Curs 1: Introducere

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

Page 72: Programare logica - Curs 1: Introducere

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

Page 73: Programare logica - Curs 1: Introducere

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

Page 74: Programare logica - Curs 1: Introducere

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

Page 75: Programare logica - Curs 1: Introducere

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

Page 76: Programare logica - Curs 1: Introducere

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

Page 77: Programare logica - Curs 1: Introducere

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

Page 78: Programare logica - Curs 1: Introducere

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

Page 79: Programare logica - Curs 1: Introducere

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

Page 80: Programare logica - Curs 1: Introducere

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

Page 81: Programare logica - Curs 1: Introducere

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

Page 82: Programare logica - Curs 1: Introducere

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

Page 83: Programare logica - Curs 1: Introducere

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

Page 84: Programare logica - Curs 1: Introducere

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

Page 85: Programare logica - Curs 1: Introducere

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

Page 86: Programare logica - Curs 1: Introducere

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

Page 87: Programare logica - Curs 1: Introducere

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

Page 88: Programare logica - Curs 1: Introducere

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

Page 89: Programare logica - Curs 1: Introducere

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

Page 90: Programare logica - Curs 1: Introducere

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

Page 91: Programare logica - Curs 1: Introducere

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

Page 92: Programare logica - Curs 1: Introducere

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

Page 93: Programare logica - Curs 1: Introducere

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

Page 94: Programare logica - Curs 1: Introducere

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

Page 95: Programare logica - Curs 1: Introducere

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

Page 96: Programare logica - Curs 1: Introducere

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

Page 97: Programare logica - Curs 1: Introducere

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

Page 98: Programare logica - Curs 1: Introducere

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

Page 99: Programare logica - Curs 1: Introducere

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

Page 100: Programare logica - Curs 1: Introducere

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

Page 101: Programare logica - Curs 1: Introducere

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

Page 102: Programare logica - Curs 1: Introducere

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

Page 103: Programare logica - Curs 1: Introducere

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

Page 104: Programare logica - Curs 1: Introducere

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

Page 105: Programare logica - Curs 1: Introducere

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