Documente Academic
Documente Profesional
Documente Cultură
2 octombrie 2012
Marin
Programare logica
Aspecte organizatorice
Marin
Programare logica
tarea practicilor de programare n P ROLOG. nva Aplica tii specice. Planul cursului: Prezentarea limbajului de programare P ROLOG P ROLOG s i logica cu predicate de ordinul I Aplica tii: recursivitate, prelucrarea listelor, mecanisme specice (taiere, backtracking), etc.
Marin
Programare logica
Stil de programare bazat pe specicarea cuno stin telor ca fapte s i reguli, s i pe rezolvarea problemelor punnd al caror ntrebari raspuns se ob tine consultnd baza de fapte s i reguli existente. tile s Faptele sunt arma tii despre proprieta i rela tiile ti. existente ntre entita <ipoteza 1> s Regulile sunt arma tii de de tipul "Daca i ...s i <ipoteza n> atunci <concluzie>." logice sunt de obicei de forma ntrebarile programarii
<arma "Este adevarat ca tie 1> s i . . . <arma tie n>?", sau "Pentru ce valori ale necunoscutelor X1 , . . . , Xm este <arma adevarat ca tie 1> s i . . . s i <arma tie n>?"
Marin
Programare logica
R EGULI n limbaj natural (lb. romna) n P ROLOG X este bun s Daca i X cunoa ste pe iubeste(X , Y ): atunci X o Y s i Y este frumoasa bun(X ), cunoaste(X , Y ), iube ste pe Y . frumoasa(Y ). Orice papagal este muritor. muritor(X ):-papagal(X).
I NTREB ARI n limbaj natural (lb. romna) n P ROLOG Este Coco papagal? ?-papagal(coco). Cine este muritor? ?-muritor(X).
Marin
Programare logica
n Programarea consta
a cuno scrierea corecta stin telor ca reguli s i fapte. a ntrebarilor. formularea corecta
stie n general, programatorul nu trebuie sa cum se aa raspunsul la ntrebare. Gasirea raspunsurilor cade n sarcina interpretorului Prolog. compara Tema: ti acest stil de programare cu alte stiluri de programare: imperativ (C), orientat obiect(C++), func tional (Lisp), etc.
Marin
Programare logica
Programarea logica
Istoric
ca o formula logica Kowalski (anii 70) observa S1 . . . Sn S poate avea 2 semnica tii: Daca S1 s semnica tie logica: i . . . s i Sn sunt ecare adevarate a. atunci s i S este adevarat de forma "S daca S1 s semnica tie procedurala i . . . s i Sn " care astfel: pentru a aa daca procedura S este poate interpretata a trebuiesc executate recursiv procedurile S1 , . . . , Sn adevarat sunt adevarate. pentru a determina daca n P ROLOG, formula devine o regula S :-S1 , . . . , Sn . cu antetul (sau capul) regulii S , s i corpul S1 , . . . , Sn .
Marin Programare logica
Programarea logica
Istoric (continuare)
Universitatea din Marsilia (Colmerauer, anii 70): apare limbajul P ROLOG("Programmation et Logique".) P ROLOG s-a impus ca cel mai important limbaj de programare logica
(interpretoare & compilatoare) numeroase implementari
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Fapte
Enun tarea unui fapt n P ROLOG predicat (obiect1 , . . . , obiectn ).
argumente
xeze numarul Programatorul trebuie sa de argumente al ecarui predicat. De exemplu, are este predicat binar. un predicat binar. Nota tie: are/2 indica
Marin Programare logica
Exemple de fapte
Aurul este pre tios. pretios(aur). Ioana este femeie. femeie(ioana). Mariei. Ion este tatal tata(ion, maria). femeie(ioana). Andrei are o carte. are(carte, andrei). Observa tii stabileasca n Programatorul trebuie sa telesul numelor de obiecte s i predicate folosite n scrierea faptelor. X are Y, s De exemplu: are(X,Y) nseamna i nu Y are X. nseamna Ordinea argumentelor conteaza!
Marin Programare logica
ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?)
Marin
Programare logica
ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica)
Marin
Programare logica
ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si
Marin
Programare logica
ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si
Marin
Programare logica
ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si
Marin
Programare logica
ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si
Marin
Programare logica
Variabile
= nlocuitor al unui obiect care satisface o rela Variabila tie. Exemplu de ntrebare cu variabila ?- place(ion, X). astfel: se interpreteaza
Care sunt obiectele X care i plac lui Ion?
sa determine valorile lui X pentru care P ROLOG urmeaza ntrebarea este true. Conven tie: n P ROLOG variabilele ncep cu LITERE MARI. poate n P ROLOG o variabila
variabila are un obiect ca valoare instan tiata: nca nu se s neinstan tiata: tie o valoare pentru variabila.
Marin
Programare logica
La ntrebarea
?-place(ion, X).
P ROLOG raspunde
X = ori
Marin
Programare logica
Marin
Programare logica
s i ntrebarea
?- place(ion, maria), place(maria, ion).
Marin
Programare logica
s i ntrebarea
?- place(ion, maria), place(maria, ion).
n general, o ntrebare
?- fapt1 , . . . , faptn .
se cite ste fapt1 si . . . si faptn ? n acest caz: i place lui Ion de Maria si i place Mariei de Ion?
Marin
Programare logica
de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(ion, maria), place(maria, ion). toate faptele din P ROLOG va raspunde false : cauta altul (toate trebuiesc satisfacute, ntrebare, unul dupa altfel interogarea va e sua, iar raspunsul va false).
Marin
Programare logica
de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(maria, X), place(ion, X).
Marin
Programare logica
de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(maria, X), place(ion, X). un obiect X care i place s ntrebarea este: Exista i lui Ion s i Mariei?
Marin
Programare logica
de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(maria, X), place(ion, X). un obiect X care i place s ntrebarea este: Exista i lui Ion s i Mariei? sa satisfaca primul obiectiv (prima parte P ROLOG ncearca reu a ntrebarii); daca se ste, pune un marcaj pe el s i apoi sa satisfaca al doilea obiectiv, plasnd un marcaj ncearca n caz de succes.
Marin Programare logica
Marin
Programare logica
X= mancare
Marin
Programare logica
X
X= mancare place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).
Marin
Programare logica
X
X= mancare place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).
Marin
Programare logica
X= mancare
Marin
Programare logica
X= mancare
Marin
Programare logica
X= vin
Marin
Programare logica
X
X= vin place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).
Marin
Programare logica
X
X= vin place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).
Marin
Programare logica
s ye
X= vin place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).
X = vin
Marin
Programare logica
X= vin
X = vin
Marin
Programare logica
X X = vin
Marin
Programare logica
X X = vin
Marin
Programare logica
Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...
Marin
Programare logica
Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...
Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil! Folosim o variabila: place(ion, X). "Lui Ion i place orice obiect X ." nseamna
Marin
Programare logica
Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...
Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil! Folosim o variabila: place(ion, X). "Lui Ion i place orice obiect X ." nseamna lui Ion i plac to Mai trebuie precizat ca ti X care sunt persoane.
Marin
Programare logica
Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...
Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil! Folosim o variabila: place(ion, X). "Lui Ion i place orice obiect X ." nseamna lui Ion i plac to Mai trebuie precizat ca ti X care sunt persoane. Regulile sunt un mod de a preciza cum unele fapte depind de alte fapte.
Marin Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Reguli n P ROLOG
Regulile n P ROLOG au un cap s i un corp. Corpul regulii descrie condi tiile ce trebuiesc satisfacute aceste pentru a satisface capul. n program area logica, condi tii se mai numesc s i obiective. Exemplu place(ion, X) :place(X,vin). place(ion, X) :femeie(X), place(X, dans). ATEN TIE ! Scopul unei variabile este regula n care aceasta apare (reguli diferite nu au variabile n comun).
Marin
Programare logica
Reguli n P ROLOG
Marin
Programare logica
Exemplu
Familie regala
Predicate folosite: male(X ): "X este barbat." female(Y ): "Y este femeie." tii lui X sunt Y s parents(X,Y,Z): "parin i Z ."
Marin
Programare logica
Exemplu
Familie regala
Predicate folosite: male(X ): "X este barbat." female(Y ): "Y este femeie." tii lui X sunt Y s parents(X,Y,Z): "parin i Z ." Baza de cuno stin te: male(albert). male(edward). female(alice). female(victoria). parents(edward,victoria,albert). parents(alice,victoria,albert).
Marin
Programare logica
Exemplu
Familie regala
Predicate folosite: male(X ): "X este barbat." female(Y ): "Y este femeie." tii lui X sunt Y s parents(X,Y,Z): "parin i Z ." Baza de cuno stin te: male(albert). male(edward). female(alice). female(victoria). parents(edward,victoria,albert). parents(alice,victoria,albert). Cum poate denit predicatul
sister(X , Y ): "X este sora lui Y ."?
Marin
Programare logica
Exemplu (continuare)
Familie regala
Specicarea 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
ntrebare: sister(alice,edward).
Marin
Programare logica
ntrebare: sister(alice,edward). ntrebarea (obiectivul) se potrive ste cu capul regulei, daca X cu alice s se instan tiaza i Y cu edward.
Marin
Programare logica
ntrebare: sister(alice,edward). ntrebarea (obiectivul) se potrive ste cu capul regulei, daca X cu alice s se instan tiaza i Y cu edward. Instan ta corpului devine noua ntrebare (obiectiv): female(alice), parents(alice,M,F), parents(edward,M,F).
Marin
Programare logica
sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)
Marin
Programare logica
sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)
Marin
Programare logica
sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)
Marin
Programare logica
sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0). (1) (2) (3) (4) (5)
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
parents(alice,M0,F0), parents(edward,M0,F0).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
parents(alice,M0,F0), parents(edward,M0,F0).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
parents(alice,M0,F0), parents(edward,M0,F0).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
parents(alice,M0,F0), parents(X,M0,F0).
Marin
Programare logica
parents(alice,M0,F0), parents(X,M0,F0).
Marin
Programare logica
parents(alice,M0,F0), parents(X,M0,F0).
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Marin
Programare logica
Raspuns: X = edward.
Marin
Programare logica
Exerci tiu: ho ti
Predicate folosite: thief(X ): "X este ho t." likes(X , Y ): "Lui X i place Y ." may_steal(X , Y ): "X ar putea fura Y ." Stim ca:
1 2 3 4 5
X este ho X ar putea fura Y daca ts i lui X i place Y . John e ho t. Lui Mary i place mncarea. Lui Mary i place vinul. lui X i place vinul. Lui John i place X daca
Marin
Programare logica
Baza de cuno stin te: 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 no tiuni de programare logica fapte, conjunc tii de fapte, variabile logice reguli exemple care ilustreaza
n P ROLOG Cum se programeaza Cum raspunde P ROLOG la ntrebarile puse de utilizator.
Marin
Programare logica
Cursul presupune familiarizarea cu programarea n SWI P ROLOG. Toate detaliile despre SWIProlog pot gasite la http://www.swi-prolog.org. Instala ti SWI-Prolog s i ncerca ti exemplele prezentate. Bibliograe: Capitolul 1 + sec tiunea de exerci tii din [Clocksin and Mellish, 2003].
Marin
Programare logica