12
Inteligenţă Artificială – PROLOG Lucrarea de laborator nr. 2 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 reprezentări simbolice de obiecte şi relaţii dintre obiecte. - Ca şi LISP, PROLOG este un limbaj cu fundament matematic. - Spre deosebire de LISP, specializat în definirea de funcţii, PROLOG permite definirea şi prelucrarea relaţiilor. - Primul interpretor PROLOG a fos scris în limbajul FORTRAN. Elemente fundamentale ale limbajului Prolog Programare logică În Prolog, soluţiile se obţin prin deducţii logice plecând de la lucruri deja cunoscute. Un program Prolog nu este o înşiruire de acţiuni de îndeplinit, ci o colecţie 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 găsirea logică a răspunsurilor la întrebări, poate trata alternativele şi să găsească toate soluţiile şi nu numai una dintre ele. Iată câteva exemple de afirmaţii din limbajul natural şi ’traducerile’ respective în logica predicatelor: O maşină rapidă este ciudată. --> ciudat(maşină_rapidă). O maşina mare este utilă. --> util(masină_mare). 1

Lab 2 Prolog

Embed Size (px)

DESCRIPTION

Laborator Prolog Facultatea de Informatica Economica

Citation preview

INTRODUCERE -- PROLOG -- Scurt istoric, Bibliografie, Mod de operare

Inteligen Artificial PROLOG Lucrarea de laborator nr. 2

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 logicn 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 itraducerile respective n logica predicatelor:

O main rapid este ciudat. --> ciudat(main_rapid).

O maina mare este util. --> util(masin_mare).

Lui Bill i place o main dac --> place(bill, Main) if

maina este rapid. ciudat(Main).Propoziii: fapte i reguliUn programator Prolog va defini obiecte i relaii, apoi va defini reguli despre cnd aceste relaii vor fi adevrate. Fapte: ceea ce se cunoaten 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.

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 dateRegulile 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).

ntrebriOdat 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

ntrebarea: Ce i place la Bill ?

va fi redactat: place(bill, Ce).

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

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

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

ReguliConstructorul 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

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

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, ntrebareaplace(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 variabileleAi 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

1 Solution

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

ObservaieAceast 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 anonimeDac 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.

ComentariiComentariile se includ intre /* i */. Alternativ, tot ceea ce apare pe o linie dup caracterul % este comentariu:

/* comentariu */

% comentariu

/**************/

/* comentariu */

/**************/

Tema:

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 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 operareTurbo 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:

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. PAGE 1