Programare logica - Curs 1: Introducere

Post on 03-Jan-2017

324 views 17 download

transcript

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: mmarin@info.uvt.ro

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