Sunteți pe pagina 1din 9

Inteligen Artificial PROLOG

Lucrarea de laborator nr. 1

INTRODUCERE PROLOG Scurt istoric. Bibliografie. Mod de operare.


Scurt istoric Limbajul PROLOG (PROgrammation en LOGique) a fost elaborat la Universitatea din Marsilia n jurul anului 1970, ca instrument pentru programarea i rezolvarea problemelor ce implicau reprezentri simbolice de obiecte i relaii dintre obiecte. Ca i LISP, PROLOG este un limbaj cu fundament matematic. Spre deosebire de LISP, specializat n definirea de funcii, PROLOG permite definirea i prelucrarea relaiilor. Primul interpretor PROLOG a fos scris n limbajul FORTRAN.

Elemente fundamentale ale limbajului Prolog


Programare logic n Prolog, soluiile se obin prin deducii logice plecnd de la lucruri deja cunoscute. Un program Prolog nu este o niruire de aciuni de ndeplinit, ci o colecie de fapte mpreun cu regulile dup care se pot trage concluzii din aceste fapte. Prolog se bazeaz pe un subset al logicii predicatelor. Ofer o sintax foarte apropiat limbajului natural. O facilitate important a limbajului Prolog este c, n plus fa de gsirea logic a rspunsurilor la ntrebri, poate trata alternativele i s gseasc toate soluiile i nu numai una dintre ele. Iat cteva exemple de afirmaii din limbajul natural i traducerile respective n logica predicatelor: O main rapid este ciudat. O maina mare este util. Lui Bill i place o main dac maina este rapid. Propoziii: fapte i reguli Un programator Prolog va defini obiecte i relaii, apoi va defini reguli despre cnd aceste relaii vor fi adevrate. Fapte: ceea ce se cunoate n Prolog, o relaie ntre obiecte se numete fapt. n limbajul natural o relaie este simbolizat de o propoziie. n Prolog, o relaie este sumarizat printr-o fraz simpl ce const din numele relaiei urmat ntre paranteze de obiectele participante la relaie. Ca i n limbajul natural, un fapt se termin cu punct. 1 --> ciudat(main_rapid). --> util(masin_mare). --> place(bill, Main) if ciudat(Main).

Inteligen Artificial PROLOG

Lucrarea de laborator nr. 1

De exemplu, exist mai multe fapte exprimnd plcerea n limbajul natural: Bill o place pe Cindy. Cindy l place pe Bill. Lui Bill i plac cinii. Iat aceste fapte scrise n Prolog: place(bill, cindy). place(cindy, bill). place(bill, caini). Faptele pot exprima i proprieti. De exemplu, afirmaia "Renault este o main" se scrie n Prolog: main(renault). Reguli: ce se poate deduce din fapte date Regulile permit deducerea de fapte din alte fapte. Altfel spus, o regul este o concluzie care se tie c este adevarat atunci cnd alte concluzii sau fapte sunt adevrate. Iat cteva reguli privind relaia "place": Lui Cindy i place tot ceea ce i place lui Bill. Lui Joan i place orice main. Fiind date aceste reguli, putei deduce din faptele cunoscute deja, c: Lui Cindy ii place de Cindy. Lui Joan ii place Renault-ul. Iat cum se scriu aceste reguli n Prolog: place(cindy, Ceva) if place(bill, Ceva). place(joan, Ceva) if masina(Ceva). ntrebri Odat ca am scris o serie de fapte, putem ncepe s punem ntrebri relativ la aceste fapte. n limbajul natural am intreba: i place la Bill de Cindy ? n sintaxa Prolog, vom scrie: place(bill, cindy). La aceast ntrebare, Prolog va rspunde: Yes 2

Inteligen Artificial PROLOG ntrebarea: Ce i place la Bill ? va fi redactat: place(bill, Ce).

Lucrarea de laborator nr. 1

Notai c sintaxa Prolog nu se schimb atunci cnd punei o ntrebare. Este important de notat c al doilea obiect (Ce) ncepe cu majuscul, n timp ce primul (bill) ncepe cu minuscul. Acest lucru se ntampl deoarece bill este o constant (o valoare cunoscuta) iar Ce este o variabil. n general, constantele ncep cu liter mic, iar variabilele cu liter mare. La ntrebarea de mai sus Prolog va rspunde: Ce = cini Ce = cindy 2 Solutions La ntrebarea: place(cindy, Ce). Prolog va rspunde: Ce = cini Ce = cindy Ce = bill 3 Solutions Punerea faptelor, regulilor i ntrebrilor la un loc S analizm urmtorul program Prolog: predicates place(symbol, symbol) clauses place(ellen, tenis). place(john, fotbal). place(tom, basket). place(eric, not). place(mark, tenis). place(bill, Activitate) if place(tom, Activitate). n seciunea predicates se vor plasa toate faptele definite mpreun cu tipul parametrilor lor. Aici, toi parametrii sunt simboluri. 3

Inteligen Artificial PROLOG

Lucrarea de laborator nr. 1

n seciunea clauses se trec toate definiiile despre aceste fapte precum i regulile de deducie. Dup ce ai scris acest program, apasai Alt-R pentru a-l rula. Sistemul va raspunde cu Goal: n fereastra Dialog. La acest prompter, vei cere, de exemplu: place(bill, basket). iar Prolog va raspunde cu Yes goal: Variabile: propoziii generale n Prolog, variabilele v ajut s scriei fapte generale i reguli, i s cereti Rspuns la ntrebri. Afirmaii generale tipice ar putea fi: Lui Bill i plac aceleai lucruri ca lui Kim. Temperatura curent este o temperatur oarecare, i aceast temperatur oarecare este cald. Iat aceste lucruri scrise n Prolog: place(bill, Lucruri) and place(kim, Lucruri). temperatur(TempCrt) and cald(TempCrt).

De la limbajul natural la programele Prolog


Clauze (fapte i reguli) Principial, n Prolog exist doar dou tipuri de fraze: fapte i reguli. Aceste fraze sunt cunoscute n Prolog sub numele de clauze. Fapte Un fapt reprezint o singur apariie fie a unei proprieti a unui obiect, fie a unei relaii ntre obiecte. Un fapt este de sine stttor; Prolog nu are nevoie s caute altceva pentru confirmarea unui fapt, si faptul poate fi folosit ca baz pentru inferene. Reguli Constructorul din Prolog care descrie ceea ce se poate deduce din alte informaii este regula. O regul este o proprietate sau o relaie care se tie c este adevrat atunci cnd alte relaii sunt adevrate. Exemple: 1. diana_poate_mnca(Mncare_de_pe_meniu) if 4

Inteligen Artificial PROLOG vegetal(Mncare_de_pe_meniu) and pe_lista_doctorului(Mncare_de_pe_meniu). 2. printe(Persoana1, Persoana2) if tata(Persoana1, Persoana2). printe(Persoana1, Persoana2) if mama(Persoana1, Persoana2).

Lucrarea de laborator nr. 1

Se observ c sau din limbajul natural se traduce n Prolog prin dou reguli separate: Persoana1 este parintele lui Persoana2 daca Persoana1 este tatal lui Persoana2. Persoana1 este parintele lui Persoana2 daca Persoana1 este mama lui Persoana2. 3. poate_cumpra(Nume, Model) if persoana(Nume) and main(Model) and place(Nume, Model) and de_vnzare(Model). Predicate (relaii) Numele simbolic al unei relaii se numete numele predicatului. Obiectele la care se refer se numesc argumentele sale. Iat cteva exemple de predicate Prolog cu zero sau mai multe argumente: pred(integer, symbol) person(last, first, gender) run insert_mode birthday(firstName, lastName, date) Variabile (clauze generale) ntr-o ntrebare simpl, putei utiliza variabile pentru a cere sistemului Prolog s gseasc informaii. De exemplu, ntrebarea place(X, tenis). folosete litera X ca variabil, pentru a indica o persoan necunoscut. Numele de variabile trebuie s nceap cu liter mare, dupa care pot urma litere, cifre i caractere underline (_). Cum i primesc valori variabilele

Inteligen Artificial PROLOG

Lucrarea de laborator nr. 1

Ai observat c Prolog nu are instruciuni de atribuire. Variabilele n Prolog i primesc valorile prin potrivire cu constante din fapte sau reguli. Pan cnd o variabil primete o valoare, ea este liber (free); cnd ea primete o valoare, ea este legat (bound). Dar ea sta legat atta timp ct este necesar pentru a obine o soluie a problemei. Apoi, Prolog o dezleag, face backtracking i caut soluii alternative. Important: nu se pot stoca informaii prin atribuire de valori unor variabile. Variabilele sunt folosite ca parte a unui proces de potrivire, nu ca un tip de stocare de informaii. De exemplu, fie programul: predicates place(symbol, symbol) clauses place(ellen, citit). place(john, calculatoare). place(john, badminton). place(leonard, badminton). place(eric, not). place(eric, citit). Fie ntrebarea: place(Persoana, citit) and place(Persoana, not). Prolog va rezolva cele dou pri ale ntrebrii separat, cutnd n clauzele programului de sus n jos. n prima parte, place(Persoana, citit). variabila Persoana este liber. Prolog caut un fapt care s se potriveasc cu aceasta prim parte: place(ellen, citit). Deci, Prolog leag variabila liber Persoana de constanta ellen. Acum, Prolog verific a doua parte a ntrebrii. Deoarece Persoana este legat de ellen, trebuie verificat c: place(ellen, not). Prolog caut o potrivire a acestui fapt, dar nu gasete. Deci, a doua parte a ntrebrii nu este adevarat cnd Persoana este ellen. Prolog dezleag Persoana, i ncearc s gseasc o alt soluie a primei pri a ntrebrii, cu Persoana ca variabil liber. Mergnd n continuare cu verificrile, Prolog va lega Persoana de constanta eric. De aceast dat i partea a doua va fi satisfacut, deci Prolog va returna: Persoana=eric 6

Inteligen Artificial PROLOG 1 Solution

Lucrarea de laborator nr. 1

Not Mecanismul prin care Prolog ncearc s potriveasc partea din ntrebare pe care dorete s o rezolve cu un anumit predicat se numete unificare. Ca rezultat al unificrii, Prolog a legat variabila Persoana ntr-o prim faz de constanta ellen, i mai apoi de constanta eric. Observaie Aceast ntrebare este o ntrebare compus. O ntrebare compus poate s conin i operatorul or. n acest caz, and este mai prioritar dect or, iar prile de verificat vor fi identificate n acord cu acest lucru. Variabile anonime Dac dorii doar anumite informaii de la o ntrebare, putei s utilizai variabilele anonime pentru a neglija acele pri care nu v intereseaz. n Prolog, variabila anonim este reprezentat de caracterul underscore (_). De exemplu, dac doresc s tiu dac i place cuiva s noate, dar nu vreau s tiu cine anume, voi ntreba: place(_, inot). Deasemenea, variabilele anonime pot fi folosite n reprezentarea faptelor: are(_, pantofi). reprezinta: Toat lumea are pantofi. Comentarii Comentariile se includ intre /* i */. Alternativ, tot ceea ce apare pe o linie dup caracterul % este comentariu: /* comentariu */ % comentariu /**************/ /* comentariu */ /**************/ Tema :

Inteligen Artificial PROLOG

Lucrarea de laborator nr. 1

1. Scriei acest program n TurboProlog i apsai Alt-R pentru a-l rula. Sistemul va rspunde cu Goal: n fereastra Dialog. La acest prompter, vei cere, de exemplu: place(bill, tenis). place (bill, basket). 2. Modificai acest program astfel nct lui mary s-i plac tot ceea ce i place lui bill. 3. Realizai o trasare pas cu pas a programului punnd nainte de predicates cuvntul trace care permite o trasare pas cu pas utiliznd tasta <F10> pentru trecerea de la un pas la altul. 4. Alegei un predicat (un verb din viaa de toate zilele) i construii cu el 10 propoziii care apoi s le transcriei ntr-un program Prolog explicnd soluiile obinute n diferite cazuri (ca i la problema de mai sus ).

PROLOG a fost inclus de Japonia ca limbaj de baz n planul de dezvoltare a sistemelor de generaia a cincea. Limbajul PROLOG are un pronunat caracter descriptiv: un program PROLOG este o colecie de definiii ce descriu relaii sau funcii de calculat. Execuia programului const n utilizarea definiiilor pentru a gsi o relaie sau un obiect corespunztor unor specificaii date. Soluia problemelor nu se mai vede ca o execuie pas cu pas a unei secvene de instruciuni. PROLOG are un cmp de aplicaii foarte larg: baze de date relaionale, inteligena artificial, logica matematic, demonstrarea de teoreme, sisteme expert, rezolvarea de probleme abstracte sau ecuaii simbolice etc.

Bibliografie 1. Turbo PROLOG 2.0 - User's Guide 2. Turbo PROLOG 2.0 - Reference Guide 3. Marcel POPESCU, Ion FLORICA, Mihai JITARU - Metode avansate de utilizare a tehnicii de calcul, Ed. Militar, Bucureti, 1989 Mod de operare Turbo Prolog 2.0 este un mediu integrat de programare cu faciliti de editare, compilare i execuie a programelor. Mediul Turbo Prolog se apeleaz cu comanda PROLOG. Asemntor cu mediul Turbo Pascal, sunt disponibile urmtoarele opiuni: 8

Inteligen Artificial PROLOG

Lucrarea de laborator nr. 1

ncrcarea unui fiier: se selecteaz submeniul File (se apas Alt-F) i apoi se selecteaz opiunea Load crearea unui fiier nou: se selecteaz submeniul File (se apas Alt-F) i apoi se selecteaz opiunea New-file salvarea unui fiier: se selecteaz submeniul File (se apas Alt-F) si apoi se selecteaz opiunea Save salvarea unui fiier cu nume schimbat: se selecteaz submeniul File (se apas Alt-F) i apoi se selecteaz opiunea Write-to editarea fiierului curent: se selecteaz submeniul Edit (se apas Alt-E) execuia programului din fiierul curent: se selecteaz submeniul Run (se apas Alt-R) apoi, n fereastra Dialog se introduce predicatul de verificat producerea de fiier executabil: se selecteaz submeniul Compile (se apas Alt-C) i apoi se selecteaz opiunea Exe ieirea din mediu i revenirea n sistemul de operare: se apas Alt-X

Editorul de texte cu care este dotat acest mediu este compatibil Word Star i foarte asemntor cu editorul de texte din Turbo Pascal. Tema: S se realizeze un index al comenzilor de editare n acest mediu.