Sunteți pe pagina 1din 48

PROGRAMAREA LOGIC

I
INTELIGEN ARTIFICIAL

Scopul principal al cursului :


nsuirea ideilor fundamentale despre Ineligena
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 conferine
30 de ore luctri de laborator
Examen (intermediar, final )

Introducere in Programarea Logica

In aceasta prelegere vom incerca sa rspundem la


urmatoarele intrebari:
1. Care sunt caracteristicile programrii logice ?
2. Ce se poate face cu programarea logic ?

Diversitatea i complexitatea tipurilor de limbaje


n relaia Om-Calculator

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 noiuni de
programare i un anumit model de calcul. Exemple:
Pentru programarea procedural: Pascal, C, C++
Pentru OOP: SmallTalk, C++, Java
Pentru programarea funcional : Scheme, Lisp, Haskell
Pentru programarea logic: Planner, Prolog, Etner
limbaje multi-paradigm:
Lisp, C++: programare procedural, OOP
Oz, Mercury,Visual Prolog:programarea logic i
funcional,OOP

Stiluri i limbage se programare

Avantagele programrii nonprocedurale


Sunt orienate ctre implementri logice
Sunt extrem de potrivite Sistemelor Expert ,
aparennd Inteligenei Artificiale
Sunt uor analizate, modificate,verificate,ntreinute.
Programul este mai degrab ntrebat dect
executat
In general sunt mult mai eficiente i competitive i
domeniul IA n comparaie cu limbajele nondeclarative

Dezavantagele programrii nonprocedurale


Nu sunt uor implementabile i utilizabile pentru
algoritmi matematici de cautare i optimizare din
cadrul inteligenei artificiale
Nu sunt cele mai eficiente pentru calcule
matematice si algoritmi folosii n industrie
Au mecanizme mai puin directe dect cele
nondeclarative

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 cunostintelor ca fapte si reguli, si pe
rezolvarea problemelor punnd itrebari al caror raspuns se
obtine consultnd baza de fapte si reguli existente.
Programarea logica este caracteristica domeniului
inteligentei artificiale si opereaz cu baza de cunotine,
clauze Horn, inferena, backtracking, inlanuire, unificare,
etc.

Stiluri i limbage de programare


n cursul nostru vom face cunotin cu ideiile
principale ale programrii logice n baza limbajului de
programare Prolog (Programming in Logic ).
Prolog a fost elaborat la Universitatea din
Marsili
(AlainCalmaureur) i Scoia n cursul anilor 1970.
De atunci i pn n prezent, limbajul Prolog s-a impus ca
cel mai important limbaj de programare logic i s-au
dezvoltat numeroase implementri, att ale unor interpretoare
ct i ale unor compilatoare ale 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 susinut de
o component procedural pe larg utilizat pentru
rezolvarea problemelor din domeniu Inteligenei
Artificiale

Idei principale a Programrii Logice


Idea principal a programrii logice poate fi cuprins n
urmatoarele doua ecuaii metaforice:
Program = mulime de axiome
Calculare = dovada constructiv a scopului din
program
n programarea logic (declarativ) se precizeaz cea ce
vrem s rezolvm (scopul), nu cum s rezolvm.

Idei principale a Programrii Logice


n loc de a descrie o secven de pai ( instruciuni)
pentru rezolvarea unei probleme se descriu fapte
(obiecte), relaii ntre acestea i se definesc reguli
despre obiecte i relaiile lor.
Aceste fapte, relaii i reguli se folosesc de limbajul
de programare (Prolog) la rezolvarea problemei

Idei principale a Programrii Logice


Exemple:
Obiecte: universitate", "carte", "barbat", "student",
plou, Automobil BMW 524td din anul
1998 de culoare neagr, etc.
Relaii: Student are o carte, Inelul este preios
Reguli: "Dou persoane sunt surori dac ambele
sunt de sex feminin i au aceiai prini."

Exemplu de traducerea corect a cunotinelor


dintr-un limbaj natural n limbajul Prolog.
S formulam nite reguli n limbajul natural:
- Studenii 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 propoziii 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

Programarea logic
Programarea logic const n scrierea corect a
cunotinelor ca reguli si fapte i formularea corect a
ntrebrilor. Rezolvarea unei probleme se face punnd
ntrebri
"Este adevarat ca ...?"
"Pentru ce valori ale necunoscutelor ... are loc ...?"
n general, programatorul nu trebuie s tie cum se
afl rspunsul la ntrebare. Gsirea rspunsurilor cade n
sarcina interpretorului Prolog.

N. Wirth:
Program = data structure + algorithm
R. Kowalski: Algorithm = logic + control

Rezolvarea de probleme cu PROLOG


Programarea n Prolog este o conversaie cu
interpretorul de Prolog.
Rezolvarea de probleme n acest fel necesit
modelarea problemei folosind noiunile programrii
logice:
fapte
reguli
ntrebri (interogri sau scopuri).
Program = fapte + reguli
Baza de cuznotine

Prolog program prezint o secven de fapte, reguli


i un scop intern (opional)
Un fapt descrie o proprietate unui obiect sau o relaie 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 obinerea unor concluzii logice, bazate pe
precondiii.
e.g. parent(X,Y) :- mother(X,Y).
= Person X is the parent of person Y if X is Ys mother.

Fapte se descriu n mod declarativ


Enunarea unui fapt n Prolog:
predicat(obiect1, obiect2, , obiectn).
Ex.
are (alex,carte).
Numele pedicatelor(relaiilor) ncep cu litera mic
Un fapt se ncheie cu punct
Numele predicatului i interpretarea predicatului se alege
de programator
Programatorul fixeaz aritatea (numrul de argumente) al
fiecrui predicat.

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 nelesul 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.

Descrierea predicatelor
Prin descrierea predicatelor se declar toat informaia
necesar pentru confirmarea adevrului 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 reprezentrii unui fapt nu are corp,
deoarece un fapt este ntotdeauna adevrat !

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 compui ( structuri).
Corpul predicatului regul poate s conin apeluri la
mai multe predicate (subscopuri subgoals)

Reguli n Prolog

Reguli ca definiii
Corpul regulii descrie condiiile ce trebuiesc
satisfcute pentru a satisface Capul. n
programarea logic, aceste condiii 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).

Reguli n PROLOG

Reguli ca definiii
Regulile pot fi folosite pentru a spefica definiii. Exemple:
"X i place lui Ion dac X este om."
"X este sora lui Y dac X este femeie
i X si Y au aceiai prini."
O definiie spune c ceva are loc dac i numai dac
altceva (corpul definiiei) are loc.
O regul spune c un fapt A este adevrat dac altceva
este adevrat.
ns faptul A ar putea fi adevrat i n alte situai.
X este om dac X este femeie.
X este om dac X este brbat.

Exemplu de ntrebare (goal) n Prolog


Avnd o baz de cunotine (BC) ce conine i faptul
are(andrei, carte)., putem genera o ntrebare de tip:
?- are(andrei, carte).
(Are Andrei o carte?)
Prologul va caut n baza de cunotine fapte ce se potrivesc
(se unific) cu ntrebarea.
Rspunsul va fi true (Yes) dac
o predicatul este acelai
o argumentele sunt aceleai.
Altfel, rspunsul va fi false (No).
Numai ce este n baza de cunotine se consider adevrat.
false nu este acelai lucru cu fals !
Raspunsul false (No) nseamn mai degrab c nu sa
gsete un rspuns(fapt) sau nu tiu.

Exemplu de ntrebare n Prolog cu variabil


Variabil = nlocuitor al unui obiect care satisface o relaie.
?- are( andrei, X ).
?- are( X, carte ).
?- place(ion, X).
Aceste ntrebri (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.

Exemplu de ntrebare n Prolog cu variabil


n Prolog:
variabilele ncep cu litere MARI,
nu aparin unui tip (pot obine orice valoare) i
au un scop local
Variabil poate fi:
instaniat:

variabila are un obiect ca valoare.

neinstaniat: nc nu se tie o valoare


pentru variabil.

Se consider baza de cunotine cu urmtoarele fapte:


place(ion, maria).
place(ion, flori).
place(paul, maria).
La ntrebarea place(ion, X).
Prolog va rspunde
Two solutions:
X = maria
X= flori
No

Calculul rspunsului n Prolog


PROLOG caut n baza de cunotine un fapt ce se potrivete
cu ntrebarea. Cnd se gsete o potrivire, aceasta este
marcat i cutarea continu. PROLOG caut o nou
potrivire, ncepnd cu ultimul loc marcat.
Pentru exemplul discutat, PROLOG va gsi dou
rspunsuri
X = maria .
X = flori.
No
Cnd nu mai sunt n baza de cunotine fapte ce s se
potriveasc, Prolog rspunde No(false)

ntrebri mai complexe

ntrebri mai complexe

Conjucii i backtracking

Reguli
Cum putem programa faptul c
"Lui Ion i plac toi oamenii"?
Evident c putem include ntr-o baz de cunotine un set de
predicate
place(ion, alex).
place(ion, bogdan).
place(ion, clara).
place(ion, dan).
...
Dar enumerarea tutoror persoanelor n baza de cunotine
uneori este imposibil !!!!

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 toi X care
sunt persoane - avem nevoie de regul !

Regulile sunt un mod de a preciza cum unele fapte


depind de alte fapte.

Consultam o baza de cunostinte

Utilizm predicate n conversaie cu Prolog

Alte exemple
Putem utiliza n program clause cu diferte argumente:
greet(hamish):write(How are you doin, pal?).
greet(amelia):write(Awfully nice to see you!).
Atunci putem interoga programul cum urmeaz:
| ?- greet(hamish).
| ?- greet(amelia).
How are you doin, 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).

Alte exemple
Putem apela la predicatul greet i cu o variabil n ntrebare scop
Variabila poate obine orice valoare. n cazul exemplului
nostru:
| ?- greet(Anybody).
How are you doin, pal?
Anybody = hamish
yes
ntrebarea se unific cu prima de la nceputul fiierului surs.
Variabila Anybody se instantiaz cu valoarea hamish.
Valoarea obinut se reproduce pe ecran (Anybody = hamish).

Alte exemple
Dac interogarea va conine greet cu o alt constant diferit de
hamish sau amelia scopul va eua i prolog nu va ntoarce nici o
soluie (return No).
Dar putem crea o regul , care ne va permite obinerea unui
rspuns n orice caz ( default case), utiliznd pentru capul regulei un
argument - variabil.

greet(Anybody):- write(Hullo ), write(Anybody).


----------------------------------------------------------

|?- greet(bob).
Hullo bob.
yes
Atunci orice apel la predicatul greet va fi unificat greet(Anybody).
i orice term utilizat n interogare va instania variabila Anybody

Alte exemple

Unificare

Fie avem o baz de cunotine Prolog


(1)

(2)
(3)
(4)
(5)
(6)
(7)

male(albert).
male(Edward).
female(alice).
female(victoria).
parents(edward, victoria, albert).
parents(alice, victoria, albert).
sister(X,Y) :- female(X), parents(X, M, F) ,
parents(Y, M, F)

Cum va raspunde Prolog la ntrebarea


Sora cui este Alisa ? ( sister(alice,X). )

Exemple de ntrebri
?- sister(alice, edward).
?- sister(X, edward).
?- sister(X, Z).
?- parents(edward, X, Y).
?- parents(edward, X, Z), parents(alice, X, Z).

Concluzii
Un Prolog program este o secven de fapte i
reguli ( predicate) .
Un predicat descrie o proprietate unui obiect sau o
relaie 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).

Concluzii
Corpul este o conjuncie 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 instanierea variabililor cu
valori concrete.
Dac o variabil n primul scop devine instaniat
(obine o valoare), aceasta se ntoarce utilizatorului

Concluzie
n acest prelegere au fost prezentate principalele
noiuni de programare logic, fapte, conjuncii de fapte,
variabile logice , reguli, exemple care ilustreaz cum se
programeaz n PROLOG i cum rspunde PROLOG la
ntrebrile puse de utilizator.
Rmne caracterizm domeniu n care cel mai des
pentru rezolvarea problemelor sunt utilizate limbajele de
programare logic i s studiem posibilitaile limbajului
Prolog pentru elaborarea aplicaiilor din acest domeniu.

S-ar putea să vă placă și