Sunteți pe pagina 1din 53

PROGRAMAREA LOGIC ăă

ŞI
INTELIGEN ăARTIFICIAL

Scopul principal al cursului :

Însusirea ideilor fundamentale despre Ineligenţa


Artificială şi ideilor fundamentale despre
programarea logica, familirizarea cu structurile
avansate limbajului Prolog pentru implementari
practice a sistemelor de Inteligenţă Artificială.
Cursul prevede:
45 de ore de curs si conferinţe
30 de ore luctări de laborator
Examen (intermediar, final ) 1
Introducere in Programarea Logica

In aceasta prelegere vom incerca sa răspundem la


urmatoarele intrebari:

1. Paradigme de programare ?
2. Care sunt caracteristicile programării logice ?
3. Ce se poate face cu programarea logică ?

2
Diversitateaăşiăcomplexitateaătipurilorădeălimbajeăînă
rela iaăOm-Calculator

3
Stiluri şiălimbageăseăprogramare
Majoritatea limbajelor de programare pot fi folosite
pentru mai multe stiluri de programare. Un stil de programare
este caracterizat de anumite concepte şi noţiuni de
programare şi un anumit model de calcul. Exemple:
• Pentru programarea procedurală: Pascal, C, C++
• Pentru OOP: SmallTalk, C++, Java
• Pentru programarea funcţională : Scheme, Lisp, Haskell
• Pentru programarea logică: Planner, Prolog, Etner
• limbaje multi-paradigmă:
Lisp, C++: programare procedurală, OOP
Oz, Mercury,Visual Prolog:programarea logică şi
funcţională,OOP
4
Modele,paradigme ,limbaje

5
Ceăesteăoăparadigm ădeăprogramareă?

• Un set de convenţii care dirigează maniera în care


gîndim programele

• Ea dictează modul ăn care:


 reprezentăm datele
 operaţiile care prelucrează datele respective

6
Limbajele logice
Acestea se concentreaza pe reprezentarea
relatiilor dintre obiecte, si pe desprinderea de
noi relatii, pe baza unor scopuri definite.

Suportul matematic pentru aceasta categorie de


limbaje este asigurat de logica cu predicate de
ordinul I.

7
Logica cu predicate de ordinul I

Logica cu predicate de ordinul I (First Order


Predicate Logic - FOPL) permite definirea de
structuri simbolice, a căror interpretare depinde
de universul problemei de rezolvat.

De exemplu, putem codifica relatia de prietenie


dintre john si bob in forma:
friend( john, bob).
8
Elementele deăbaz ăFOPL
• constante: reprezinta obiecte particulare din
universul problemei (oameni, animale, carti etc.),
fiind codificate, conventional, incepand cu litera
mica. Exemple: john, bob
• variabile: desemneaza obiecte generice, putand fi
substituite cu alte variabile sau constante.
Codificarea incepe cu litera mare. Exemple: X, Y
• functii: desemneaza obiectul obtinut in urma
prelucrarii unor date de intrare. Functiile sunt
simbolice, nefiind asociate unei secvente de
instructiuni. Exemple: father(john) il desemneaza9
pe tatal lui john.
Elementele deăbaz ăFOPL
• predicate: definesc proprietati ale obiectelor sau relatii
intre acestea. Exemple: man(john), friend(john, bob). Spre
deosebire de functii, predicatele nu se refera la realizarea de
calcule. Au asociate valori de adevar (adevarat/fals)
• conectori logici: ¬, , , ⇒, ⇔ etc.
• cuantificatori: ∀ (universal), ∃ (existential). Toate
variabilele trebuie sa fie cuantificate.
• termeni: constante, variabile sau rezultate ale functiilor
• propozitii: predicate sau inlantuiri de alte propozitii,
obtinute prin utilizarea conectorilor logici. Exemple:
∀Y.∃X.(friend(X, Y) ¬(Y = X))
afirma: toata lumea este prietenul altcuiva. 10
Elementele deăbaz ăFOPL
• toate aceste elemente au o natura simbolica, ele
primind o interpretare in conformitate cu realitatea
problemei. De exemplu, intr-o interpretare posibila,
simbolul john ar putea desemna un barbat, pe
nume John. Intr-o alta interpretare, ar putea indica
un motan omonim.
• In functie de aceste interpretari, o propozitie poate
fi:
• satisfiabilă: adevarata in cel putin o interpretare
• validă: adevarata în toate interpretarile
• tautologie: trivial validă, ca in exemplul p ¬p
11
Stiluri şiălimbageăde programare
Una dintre cele mai frumoase metode de programare
este programarea logica, cunoscuta şi sub denumirea de
programare declarativă.
Programarea logica este un stil de programare bazat
pe specificarea cunosti̧telor ca fapte si reguli, si pe
rezolvarea problemelor punând itrebari al caror raspuns se
obtine consultând baza de fapte ̧si reguli existente.
Programarea logica este caracteristica domeniului
inteligentei artificiale si operează cu baza de cunoştinţe,
clauze Horn, inferenţa, backtracking, inlanţuire, unificare,
etc.
12
Stiluri şiălimbageăde programare
În acest curs vom face cunoştinţă cu ideiile principale
ale programării logice în baza limbajului de programare
Prolog (Programming in Logic ).

Prolog a fost elaborat la Universitatea din


Marsili(AlainCalmaureur) şi Scoţia în cursul anilor 1970.

De atunci şi până în prezent, limbajul Prolog s-a


impus ca cel mai important limbaj de programare
logică şi s-au dezvoltat numeroase implementări, atât
ale unor interpretoare cât şi ale unor compilatoare ale 13
limbajului.
Stiluri şiălimbageăde programare

Primul compilator Prolog a fost creat în 1972 de


Philippe Roussel la Universitatea din Marsilia.

Limbajul Prolog este un limbaj declarativ susţinut de


o componentă procedurală pe larg utilizat pentru
rezolvarea problemelor din domeniu Inteligenţei
Artificiale
14
Idei principale aăăProgram riiăLogice
Idea principală a programării logice poate fi cuprinsă în

urmatoarele doua ecuaţii metaforice:

• Program = mulţime de axiome

• Calculare = dovada constructivă a scopului din


program

În programarea logică (declarativă) se precizează cea ce


vrem să rezolvăm (scopul), nu cum să rezolvăm.

15
Idei principale aăăProgram riiăLogice

• În loc de a descrie o secvenţă de paşi ( instrucţiuni)


pentru rezolvarea unei probleme se descriu fapte
(obiecte), relaţii între acestea şi se definesc reguli
despre obiecte şi relaţiile lor.

• Aceste fapte, relaţii şi reguli se folosesc de limbajul


de programare (Prolog) la rezolvarea problemei

16
Idei principale aăăProgram riiăLogice
Exemple:
Obiecte: “universitate", "carte", "barbat", "student",
“plouă”, “Automobil BMW 524td din anul
1998 de culoare neagră”, etc.

Relaţii: “Studentul are o carte”, “Inelul este preţios” …

Reguli: "Două persoane sunt surori dacă ambele


sunt de sex feminin şi au aceiaşi părinţi."

17
Exemplu de traducerea corect a cunoştin elor
dintr-un limbaj natural în limbajul Prolog.
Să formulam nişte reguli în limbajul natural:
- Studenţii silitori au note bune.
-Dacă X este student şi X este silitor atunci X are note bune.
-X are note bune dacă X este student şi X este silitor.

Descrierea acestor propoziţii într-un limbaj artificial


(Prolog) poate arata astfel:
note(X, bune) :- student(X) , silitor(X).
În Prolog “:-” este „dacă”,
virgula dintre ipoteze “,” este „şi“ ,
punct şi virgula dintre ipoteze “;” este “sau” 18
Programarea logic ă
Programarea logică constă în scrierea corectă a
cunoştinţelor ca reguli ¸ si fapte şi formularea corectă a
întrebărilor. Rezolvarea unei probleme se face punând
întrebări
"Este adevarat ca ...?"
"Pentru ce valori ale necunoscutelor ... are loc ...?"
În general, programatorul nu trebuie să ştie cum se
află răspunsul la întrebare. Găsirea răspunsurilor cade în
sarcina interpretorului Prolog.

N. Wirth: Program = data structure + algorithm


R. Kowalski: Algorithm = logic + control 19
Rezolvarea de probleme cu PROLOG
Programarea în Prolog este o conversaţie cu
interpretorul de Prolog.
Rezolvarea de probleme în acest fel necesită
modelarea problemei folosind noţiunile programării
logice:
• fapte
• reguli
• întrebări (interogări sau scopuri).
Program = fapte + reguli

Baza de cuznoştinţe
20
Prolog programăprezint ăoăsecven ădeăfapte,ă
reguli şiăunăscopăinternă(op ional)
• Un fapt descrie o proprietate unui obiect sau o relaţie între
două sau mai multe obiecte. Pentru descrierea faptelor şi
regulilor în Prolog se utilizează predicate de diferită aritate
Ex. parent( jane, alan ).
Can be read as “Jane is the parent of Alan.”
(parent - este un predicat cu două argumente)
• Regulile permit obţinerea unor concluzii logice, bazate pe
precondiţii.
e.g. parent(X,Y) :- mother(X,Y).
= “Person X is the parent of person Y if X is Y’s mother.”
21
Fapte se descriu în mod declarativ
Enunţarea unui fapt în Prolog:
predicat(obiect1, obiect2, … , obiectn).
Ex.
are (alex,carte).

• Numele pedicatelor(relaţiilor) încep cu litera mică


• Un fapt se încheie cu punct
• Numele predicatului şi interpretarea predicatului se alege
de programator
• Programatorul fixează aritatea (numărul de argumente) al
fiecărui predicat.
22
Exemple de fapte în Prolog
Ana este frumoasă. frumoasa(Ana).

Ioana este femeie. femeie(ioana).

Ion este tatal Mariei. tata(ion, maria).

Andrei are o carte. are(carte, andrei).

Ordinea argumentelor contează !

Programatorul trebuie să stabilească înţelesul numelor de obiecte


si predicate folosite în scrierea faptelor.
De exemplu: tata(X,Y). înseamnă că X are Y,
şi nu înseamnă că Y are X.
23
Descrierea predicatelor
Prin descrierea predicatelor se declară toată informaţia
necesară pentru confirmarea adevărului tuturor faptelor
descrise. Declararea faptelor şi regulilor formează
partea principală programului Prolog (clauses):
mother( jane , alan). - Fapt
parent(P1, P2) := mother (P1, P2). - Regulă

head body
O clausă în cazul reprezentării unui fapt nu are corp,
deoarece un fapt este întotdeauna adevărat !
24
Argumente
• Un predicat are nume, dar poate avea şi argumente.
Argumentele se includ în paranteze şi sunt separate cu
virgulă .

• Argumentele pot fi :
- constante;
- variabile;
- termeni compuşi ( structuri).
• Corpul predicatului –regulă poate să conţină apeluri la
mai multe predicate (subscopuri – subgoals)
25
Reguli în Prolog

26
Reguliăcaădefini ii
Corpul regulii descrie condiţiile ce trebuiesc
satisfăcute pentru a satisface Capul. În programarea
logică, aceste condiţii se mai numesc şi obiective.

Exemplu:
place(ion, X) :- place(X, vin).
place(ion, X) :- femeie(X), place(X, dans).

Scopul unei variabile este regula în care aceasta


apare (reguli diferite nu au variabile în comun).
27
Marin Programare logic ˘a
Reguli în PROLOG

28
Reguliăcaădefini ii

Regulile pot fi folosite pentru a spefica definiţii. Exemple:


"X îi place lui Ion dacă X este om."
"X este sora lui Y dacă X este femeie
şi X ¸si Y au aceiaşi părinţi."

O definiţie spune că ceva are loc dac㸠şi numai dacă


altceva (corpul definiţiei) are loc.
O regulă spune că un fapt A este adevărat dacă altceva
este adevărat.
Însă faptul A ar putea fi adevărat şi în alte situaţi‘.
“X este om dacă X este femeie.”
“X este om dacă X este bărbat.” 29
Exemplu de întrebare (goal) în Prolog
Avînd o bază de cunoştinţe (BC) ce conţine şi faptul
are(andrei, carte)., putem genera o întrebare de tip:
?- are(andrei, carte).
(Are Andrei o carte?)
Prologul va caută în baza de cunoştinţe fapte ce se potrivesc
(se unifică) cu întrebarea.
• Răspunsul va fi true (Yes) dacă
o predicatul este acelaşi
o argumentele sunt aceleaşi.
• Altfel, răspunsul va fi false (No).
Numai ce este în baza de cunoştinţe se consideră adevărat.
• false nu este acelaşi lucru cu fals !
• Raspunsul false (No) înseamnă mai degrabă că nu sa
găseşte un răspuns(fapt) sau nu ştiu. 30
Exemplu de întrebare în Prolog cu variabil
Variabilă = înlocuitor al unui obiect care satisface o relaţie.

?- are( andrei, X ).
?- are( X, carte ).
?- place(ion, X).

Aceste întrebări (scopuri)se interpretează astfel:


Ce are Andrei ?
Cine are o carte ?
Care sunt obiectele X care îi plac lui Ion?

Prologul urmează sa determine valorile lui X pentru care


întrebarea este true. 31
Exemplu de întrebare în Prolog cu variabil

În Prolog:
• variabilele încep cu litere MARI,
•nu aparţin unui tip (pot obţine orice valoare) şi
•au un scop “local”

Variabilă poate fi:

• instanţiată: variabila are un obiect ca valoare.

• neinstanţiată: încă nu se ştie o valoare


pentru variabilă. 32
Se consideră baza de cunoştinţe cu următoarele fapte:
place(ion, maria).
place(ion, flori).
place(paul, maria).

La întrebarea place(ion, X).

Prolog va răspunde
Two solutions:
X = maria
X= flori
No
33
Calculul r spunsului în Prolog

PROLOG caută în baza de cunoştinţe un fapt ce se potriveşte


cu întrebarea. Când se găseşte o potrivire, aceasta este
marcată şi căutarea continuă. PROLOG caută o nouă
potrivire, începând cu ultimul loc marcat.

Pentru exemplul discutat, PROLOG va găsi două


răspunsuri
X = maria .
X = flori.
No
Când nu mai sunt în baza de cunoştinţe fapte ce să se
potrivească, Prolog răspunde No(false) 34
Întreb riămaiăcomplexe

35
Întreb ri mai complexe

36
Conjuc iiăşiăbacktracking

37
Reguli

Cum putem programa faptul că


"Lui Ion îi plac toţi oamenii"?

Evident că putem include într-o bază de cunoştinţe un set de


predicate
place(ion, alex).
place(ion, bogdan).
place(ion, clara).
place(ion, dan).
...
Dar enumerarea tutoror persoanelor în baza de cunoştinţe
uneori este imposibilă !!!! 38
Reguli

Atunci folosim o variabilă:


place(ion, X).
Cea ce înseamnă că
"Lui Ion îi place orice obiect X.„

Dar dacă mai trebuie precizat că lui Ion îi plac toţi X care
sunt persoane - avem nevoie de regulă !

Regulile sunt un mod de a preciza cum unele fapte


depind de alte fapte.
39
Consultam o baza de cunostinte

40
Utiliz măpredicateăînăconversa ieăcuăProlog

41
Alte exemple
Putem utiliza în program clause cu diferte argumente:
greet(ion):-
write(‘How are you doing, pal?’).
greet(amelia):-
write(‘Awfully nice to see you!’).

Atunci putem interoga programul cum urmează:


| ?- greet(ion). | ?- greet(amelia).
How are you doing, pal? Awfully nice to see you!
yes yes
• Clausele se parcurg de la început.
• Raspunsul care se întoarce va fi primul care se unifică cu
întrebarea (= yes). 42
Alte exemple
• Putem apela la predicatul greet şi cu o variabilă în întrebare -
scop
• Variabila poate obţine orice valoare. În cazul exemplului
nostru:
| ?- greet(Anybody).
How are you doin, pal?
Anybody = ion
yes

• Întrebarea se unifică cu prima de la începutul fişierului sursă.


• Variabila Anybody se instantiază cu valoarea ‘ion’.
• Valoarea obţinută se reproduce pe ecran (Anybody = ion). 43
Alte exemple
• Dacă interogarea va conţine greet cu o altă constantă diferită de ion
sau amelia scopul va eşua şi prolog nu va întoarce nici o soluţie
(return No).
• Dar putem crea o regulă , care ne va permite obţinerea unui
răspuns în orice caz ( default case), utilizînd pentru capul regulei un
argument - variabilă.

greet(Anybody):- write(‘Hello ‘), write(Anybody).


----------------------------------------------------------
|?- greet(bob).
Hello bob.
yes
• Atunci orice apel la predicatul greet va fi unificat greet(Anybody).
şi orice term utilizat în interogare va instanţia variabila Anybody
44
Unificare

45
Fie avem o baz ădeăcunoştin eăProlog

(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) 46
Cum va raspunde Prolog la întrebarea
“ăSora cui este Alisaă?”ă(ăsister(alice,X). )

47
Exempleădeăîntreb ri

?- sister(alice, edward).

?- sister(X, edward).

?- sister(X, Z).

?- parents(edward, X, Y).

?- parents(edward, X, Z), parents(alice, X, Z).


… 48
Concluzii
• Un Prolog program este o secvenţă de fapte şi
reguli ( predicate) .
• Un predicat descrie o proprietate unui obiect sau o
relaţie dintre obiecte.
• Aceste descrieri formează partea
programului,numită clauses.
• O clausă reprezintă o regulă (Cap, corp), sau un
simplu fapt (Cap).
• Capul are un nume (predicate name) şi argumente
(arguments).
49
Concluzii
• Corpul este o conjuncţie de termeni (terms).
• Termenii pot fi constante, variabile, sau structuri.
• Comunicarea utilizatorului cu program se
realizează prin crearea diferitor scopuri (interogari
– goals) - comenzi ce se unifică cu capul clauselor.
• Un scop se unifică cu clause în ordine top down.
• Unificarea permite instanţierea variabililor cu
valori concrete.
• Dacă o variabilă în primul scop devine instanţiată
(obţine o valoare), aceasta se întoarce utilizatorului
50
Avantageleăprogram riiănonprocedurale

• Sunt orienate către implementări logice


• Sunt extrem de potrivite Sistemelor Expert ,
aparţenînd Inteligenţei Artificiale
• Sunt uşor analizate, modificate,verificate,întreţinute.
• Programul este mai degrabă “întrebat” decît
executat
• In general sunt mult mai eficiente şi competitive ţi
domeniul IA în comparaţie cu limbajele nondeclarative
51
Dezavantageleăprogram riiănonprocedurale
• Nu sunt uşor implementabile şi utilizabile pentru
algoritmi matematici de cautare şi optimizare din
cadrul inteligenţei artificiale

• Nu sunt cele mai eficiente pentru calcule


matematice si algoritmi folosiţi în industrie

• Au mecanizme mai puţin directe decît cele


nondeclarative
52
Concluzie
În acestă prelegere au fost prezentate principalele
noţiuni de programare logică, fapte, conjuncţii de fapte,
variabile logice , reguli, exemple care ilustrează cum se
programează în PROLOG şi cum răspunde PROLOG la
întrebările puse de utilizator.
Rămîne caracterizăm domeniu în care cel mai des
pentru rezolvarea problemelor sunt utilizate limbajele de
programare logică şi să studiem posibilitaţile limbajului
Prolog pentru elaborarea aplicaţiilor din acest domeniu. 53