FMZ Sistemi basati su conoscenza Prolog (1) Dott. Fabio Zanzotto a.a
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 Una dimostrazione per F è conseguenza di S è una sequenza DIM=P 1,P 2,…,P n dove P n =F P i S oppure P i è ottenibile da P i1,…,P im (con i1<i,.., im<i) applicando una regola di inferenza Processo di dimostrazione (limiti) SF
FMZ DIM=P 1,P 2,…,P n Come scegliamo: Il percorso da fare? Quale formule P i1,…,P im attivano una regola di inferenza? E’ possibile standardizzare il processo? Processo di dimostrazione (limiti) SF
FMZ Tentativo (In logica proposizionale): Ammettiamo formule del tipo: –A 1 … A m B(tipo 1) –B(tipo 2) con A 1,…,A m,B letterali Processo di dimostrazione (standardizzazione)
FMZ Processo di dimostrazione (standardizzazione) Per dimostrare: In S solo regole di tipo 1 o tipo 2 Partiamo da F=P n P i è deducibile se: –P i S –Utilizzando MP e AE, esiste A 1 … A m P i e A 1,…, A m sono deducibili SF
FMZ Legami con la logica del primo ordine Clausole di Horn x 1,…,x n A 1 … A m 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 x 1,…,x n A 1 … A m B B:- A 1,…,A m :- si pronuncia se Sintassi in Prolog Clausola di Horn
FMZ 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 Esempi di atomi e variabili: Atomi: a_boy, peanut, ‘Jack-Smith’, i12345 Non Atomi: 231as, Jack-Smith, _crack Variabili: Answer, X, I_like, _Marbles Non variabili: mother, 3blind_mice
FMZ Costruzione dei predicati Se t 1,…,t n e P sono atomi o variabili allora P(t 1,…,t n ) è 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 “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
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 Regole – esempi mother(X,Y) :- parent(X,Y), female(Y). father(X,Y) :- parent(X,Y), male(Y).
FMZ Interrogare il programma Richiedere la dimostrazione di un teorema ?- mother(alan,Mom).
FMZ Regola di inferenza Introduzione del quantificatore esistenziale F(…a…) x F(…x…) xB(…x…) Teorema che si vuole dimostrare
FMZ Unificazione: regola di inferenza x.F(…x…) F(…a…) x 1,…,x n A 1 … A m B Eliminazione del quantificatore universale P B, P B MP Modus ponens
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 L’algoritmo di risoluzione Criteri: Dato un goal, ricercare dall’alto verso il basso: Un fatto che sia una generalizzazione Una regola che abbia come ipotesi l’obiettivo Istanziare le variabili Cercare un percorso che porti ad una soluzione
FMZ Una puntatina all’interprete prolog 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 Una puntatina all’interprete prolog come si lancia? swipl e’ sempre in modalità ?- prompt ovvero voglio soddisfare un goal come si esce? ?- halt.
FMZ Una puntatina all’interprete prolog quale interprete usiamo SWI Prolog –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 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 t 1,…,t n e f sono atomi o variabili allora f(t 1,…,t n ) è un funzione Esempi: parent(X,Y) parent(paolo,X)
FMZ 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