Documente Academic
Documente Profesional
Documente Cultură
Plia 2 14
Plia 2 14
I
INTELIGEN ARTIFICIAL
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
frumoasa(Ana).
femeie(ioana).
tata(ion, maria).
are(carte, andrei).
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.
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 !
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(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
(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)
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.