Parte 1
Transcript
Parte 1
Linguaggi di Programmazione Prolog (1) FMZ Prolog • Linguaggio: – basato su una restrizione della logica del primo ordine – “dichiarativo” • Utile per: – Prototipizzazione radipa (di alcuni problemi) – Applicazioni di Intelligenza Artificiale basate sulla logica FMZ Processo di dimostrazione (limiti) S F Una dimostrazione per F è conseguenza di S è una sequenza DIM=P1,P2,…,Pn dove • Pn=F • Pi∈S oppure Pi è ottenibile da Pi1,…,Pim (con i1<i,.., im<i) applicando una regola di inferenza FMZ 1 Processo di dimostrazione (limiti) S F DIM=P1,P2,…,Pn Come scegliamo: • Il percorso da fare? • Quale formule Pi1,…,Pim attivano una regola di inferenza? E’ possibile standardizzare il processo? FMZ Processo di dimostrazione (standardizzazione) Tentativo (In logica proposizionale): • Ammettiamo formule del tipo: – A1∧…∧ Am B (tipo 1) –B (tipo 2) con A1,…,Am,B letterali FMZ Processo di dimostrazione (standardizzazione) S F Per dimostrare: • In S solo regole di tipo 1 o tipo 2 • Partiamo da F=Pn • Pi è deducibile se: – Pi ∈S – Utilizzando MP e AE, esiste A1∧…∧ Am Pi e A1,…, Am sono deducibili FMZ 2 Legami con la logica del primo ordine Clausole di Horn ∀x1,…,xn A1∧…∧ Am B FMZ Prolog e la logica del primo ordine • Prolog è un linguaggio di programmazione basato sulle ‘Horn Clauses’ • Le ‘Horn Clauses’ sono un sottoinsieme dei predicati esprimibili in logica dei predicati – Esiste un algoritmo per cui la dimostrazione di un teorema scritto in clausole di Horn è computabile in tempo polinomiale FMZ Prolog e la logica del primo ordine ∀x1,…,xn A1∧…∧ Am B Clausola di Horn B:- A1,…,Am Sintassi in Prolog :- si pronuncia se FMZ 3 Sintassi del prolog Sintassi legata alla logica del primo ordine • Costanti costanti individuali • Variabili variabili individuali • Funtori lettere funzionali, predicative FMZ Sintassi del linguaggio Atomi: Costanti, funtori • Il simbolo :- è considerato atomo. • Sequenza di caratteri (lettere o numeri o underscore) che comincia con una lettera minuscola • Oppure qualsiasi cosa contenuto tra ‘ ’. FMZ Sintassi del linguaggio Variabili: • qualsasi stringa che cominici con una lettera maiuscola o con un underscore • Il singolo underscore ‘_’ è cosiderata una variabile anonima, cioè non importante. • Le variabili vengono istanziate (legate ad un valore) al procedere del programma (nella risoluzione del teorema) FMZ 4 Esempi di atomi e variabili: • Atomi: a_boy, peanut, ‘Jack-Smith’, i12345 • Non Atomi: 231as, Jack-Smith, _crack • Varuabili: Answer, X, I_like, _Marbles • Non varibili: mother, 3blind_mice FMZ Costruzione dei predicati Se t1,…,tn e P sono atomi o variabili allora P(t1,…,tn) è un predicato Esempi: • parent(X,Y) • parent(paolo,X) FMZ Clausole: come fatti e regole • I fatti sono predicati seguiti da ‘.’ (punto) • Le regole sono della forma vista in precedenza per le clausole di Horn FMZ 5 “Programmare” in prolog • Dato un problema costruire S che permetta di dimostrare F (o un insieme di formule) • Costruire S: – Definire fatti – Definire regole • Costruito S abbiamo programmato in Prolog J FMZ Esempio • Conoscendo il sesso delle persone e se uno è genitore dell’altro, vogliamo sapere – chi è padre di chi – chi è madre di chi FMZ Fatti - esempi male(alan). male(gary). female(margaret). parent(alan, gary). parent(alan, margaret). FMZ 6 Regole – esempi mother(X,Y) :parent(X,Y), female(Y). father(X,Y) :parent(X,Y), male(Y). FMZ Interrogare il programma • Richidere la dimostrazione di un teorema ?- mother(alan,Mom). FMZ Regola di inferenza Teorema che si vuole dimostrare ∃xB(…x…) Introduzione del quantificatore esistenziale F(…a…) ∃xF(…x…) FMZ 7 Unificazione: regola di inferenza ∀x1,…,xn A1∧…∧ Am B Eliminazione del quantificatore universale ∀x.F(…x…) F(…a…) Modus ponens P B,P B MP FMZ Interrogare il programma ?- mother(alan,Mom). Ci stiamo chiedendo ∃Mom.mother(alan,Mom) FMZ L’algoritmo di risoluzione • in profondità male(alan). male(gary). female(margaret). parent(alan, gary). parent(alan, margaret). mother(X,Y) :- parent(X,Y), female(Y). father(X,Y) :- parent(X,Y), male(Y). Goal: ?- mother(alan,Mom). FMZ 8 L’interprete prolog for dummies • come si lancia? • come si esce? • quale interprete usiamo (dove si trova e dove si trovano i manuali) • come scrivo un programma? • come uso un programma all’interno dell’interprete? FMZ L’interprete prolog for dummies • come si lancia? swipl e’ sempre in modalità ?prompt ovvero voglio soddisfare un goal • come si esce? ?- halt. FMZ L’interprete prolog for dummies • quale interprete usiamo SWI Prolog http://www.swi.psy.uva.nl/projects/SWI-Prolog/download.html – interprete – manuale • come scrivo un programma? – Con l’editor di testo preferito • come uso un programma all’interno dell’interprete? ?- consult(‘NomeProgramma’). oppure ?- [‘NomeProgramma’]. FMZ 9 Le trappole dell’algoritmo di risoluzione • Scriviamo ancestor(X,Y) ancestor(X,Y):ancestor(X,Z), parent(Z,Y). ancestor(X,Y):parent(X,Y). FMZ L’algoritmo di risoluzione • in profondità male(alan). male(gary). female(margaret). parent(alan, gary). parent(alan, margaret). ancestor(X,Y):ancestor(X,Z),parent(Z,Y). ancestor(X,Y):-parent(X,Y). Goal: ?- ancestor(alan,Mom). FMZ Costruzione delle funzioni (Apparente dimenticanza) Se t1,…,tn e f sono atomi o variabili allora f(t1,…,tn) è un funzione Esempi: • parent(X,Y) • parent(paolo,X) FMZ 10 Esercizi Dati fatti del tipo: male(pippo). female(pippo). father(pippo,pluto). pippo è padre di pluto mother(pippo,pluto). pippo è madre di pluto Definire le regole per : (a) part_of_parent(X,Y). X è uno dei genitori di Y (b) cousin(X,Y). X è cugino di Y FMZ 11