Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - alberi SLD.

Slides:



Advertisements
Presentazioni simili
Calcolo Relazionale.
Advertisements

Alberi binari Definizione Sottoalberi Padre, figli
Punti Fissi.
Estendere i linguaggi: i tipi di dato astratti
Sommario Nelle lezioni precedenti abbiamo introdotto tutti gli elementi che formano un particolare tipo di linguaggio logico, denominato linguaggio predicativo.
Sintassi (prima parte)
Linguaggi di programmazione
Intelligenza Artificiale
Agenti logici: la logica del prim’ordine
Linguaggi di Programmazione (AA 2002/2003)
Risoluzione e Programmazione Logica (Prolog)
Alberi binari di ricerca
Il ragionamento classico
Teoria e Implementazione
L’ALGEBRA NEI PROGRAMMI
Intelligenza Artificiale 1 Gestione della conoscenza lezione 8
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Macchine non completamente specificate
1 Le competenze di base dell'asse matematico Utilizzare le tecniche e le procedure del calcolo aritmetico ed algebrico, rappresentandole anche sotto forma.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
SISTEMI LINEARI.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
Intelligenza Artificiale
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Risoluzione di problemi e ricerca.
Programmazione logica
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Conoscenza e ragionamento Logica dei predicati del primo ordine.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
Intelligenza Artificiale - AA 2001/2002 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Intelligenza Artificiale - AA 2002/2003 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Logica Matematica Seconda lezione.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Agenti logici: sistemi a regole
Agenti logici: calcolo proposizionale Maria Simi a.a. 2008/2009.
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Teoria dei Circuiti Lez. 1.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
4 < 12 5 > −3 a < b a > b a ≤ b a ≥ b
Intelligenza Artificiale Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Esecuzione di un Programma [P] Una computazione corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio PROLOG.
1 Linguaggi di Programmazione Cenni di logica proposizionale.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
1/20 NP completezza. 2/20 Problemi astratti Un problema è un’entità astratta (es. il TSP). Una istanza del problema è un suo caso particolare in cui vengono.
Grammatiche non contestuali (1)
Intelligenza Artificiale Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Intelligenza Artificiale Risoluzione di Problemi
AOT Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Rappresentazione della Conoscenza e Ragionamento.
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi Agostino Poggi Stefano Cagnoni.
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
La variabile casuale (v.c.) è un modello matematico in grado di interpretare gli esperimenti casuali. Infatti gli eventi elementari  che compongono lo.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Agenti logici: calcolo proposizionale Maria Simi a.a. 2006/2007.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Basi di conoscenza: cenni di logica Fabio Massimo Zanzotto.
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini III. La logica delle proposizioni.
ASD a.a.2010/2011- Lezione 12 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Backtracking/ Branch and Bound Lezione n°12.
Lezione marzo nota su "a meno che" A meno che (non) = oppure Il dolce lo porto io (I) a meno che (non) lo porti Mario (M) I  M   I  M.
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
INSIEMI E LOGICA PARTE QUARTA.
Transcript della presentazione:

Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - alberi SLD

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 (deducibile) da P i1,…,P im (con i1<i,.., im<i) applicando una regola di inferenza Processo di dimostrazione SF

Regole di Inferenza V V F F V F V F AB V F V V ABAB V V F F V F V F AB V F F F ABAB P  B, P B MP A 1  …  A n AiAi AE And elimination Modus Ponens

Ammettiamo formule del tipo: –A 1  …  A m  B (tipo 1) in Prolog B :- A 1,…,A m. (regole) –B(tipo 2) in Prolog B. (fatti) con A 1,…,A m,B letterali (formule atomiche) Processo di dimostrazione (standardizzazione)

Per dimostrare: In S solo formule di tipo 1 o tipo 2 Partiamo da F=P n (il goal!) P i è deducibile se: –P i  S –Utilizzando le regole di inferenza Modus Ponens (MP) e And Elimination (AE), esiste A 1  …  A m  P i e A 1,…, A m sono deducibili SF

Legami con la logica del primo ordine Clausole di Horn  x 1,…,x n A 1  …  A m  B

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

Prolog e la logica del primo ordine Prolog è un linguaggio di programmazione basato sulle ‘Clausole di Horn’ Le ‘Clausole di Horn’ 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

“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

Esempio Conoscendo il sesso delle persone e se uno è genitore dell’altro, vogliamo sapere – chi è padre di chi – chi è madre di chi

Fatti - esempi maschio(alan). maschio(gary). femmina(margaret). genitore(alan, gary). genitore(alan, margaret).

Regole: esempi madre(X,Y) :- genitore(X,Y), femmina(Y). padre(X,Y) :- genitore (X,Y), maschio(Y). Richiedere la dimostrazione di un teorema ?- madre(alan,M). Ci stiamo chiedendo  M.madre(alan,M) Interrogare il programma

Esecuzione di un Programma L’esecuzione di un programma corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue logicamente da un insieme di formule (programma); cioè, che la formula e’ un teorema. Si deve determinare una sostituzione per le variabili del goal (detto anche “query”) per cui il goal segue logicamente dal programma. Dato un programma P e una query: ?- S (t 1, t 2, …, t m ). se x 1, x 2, …, x n sono le variabili che compaiono in t 1, t 2, …, t m il significato logico della query e’:  x 1  x 2 …  x n S (t 1, t 2, …, t m ) e l’obiettivo e’ quello di trovare una sostituzione  = [ x 1 / a 1, x 2 / a 2, …, x n / a n ] dove a i sono termini tale per cui P [S (t 1, t 2, …, t m )] 

Risoluzione SLD sum (0, X, X). [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z). [CL2] Goal sum (s(0), 0, W). Al primo passo genero una rinomina della clausola [CL2] sum (s(X1), Y1, s(Z1)) :- sum (X1, Y1, Z1). Unificando la testa con il goal, ottengo la sostituzione  1 = [X1/0, Y1/0, W/s(Z1)] Ottengo il nuovo goal [G1] [sum (X1, Y1, Z1)]  1 ossia, sum (0, 0, Z1). Per dimostrare G1 si rinomina [CL1]: sum (0, X2, X2) e poi si unifica mediante la sostituzione 2 = [Z1/0, X2/0]

Risoluzione SLD Risoluzione Lineare per Clausole Definite con funzione di Selezione (completa per le clausole di Horn) Una rinomina per una clausola C e’ la clausola C’ ottenuta da C rinominando le sue variabili. Quello che segue è un esempio di rinomina: p(X) :- q (X, g(Z)). p(X1) :- q (X1, g(Z1)).

Risoluzione SLD La Risoluzione SLD seleziona un atomo A m dal goal G i secondo un determinato criterio, e lo unifica se possibile con la testa della clausola C i attraverso una sostituzione Il nuovo goal e’ ottenuto da G i riscrivendo l’atomo selezionato con la parte destra della clausola C i ed applicando la sostituzione  i. Più in dettaglio: :- A 1, …, A m-1, A m, A m+1, …,A k. Goal, A :- B 1, …, B k. clausola del programma P, e [A m ]  i = [A]  i allora la risoluzione SLD deriva il nuovo goal :- [A 1, …, A m-1, B 1, …, B q, A m+1, …, A k ]  i.

Derivazione SLD Una derivazione SLD per un goal G 0 dall’insieme di clausole definite P e’ una sequenza di clausole goal G 0, …, G n, una sequenza di rinomine di clausole del programma C 1, …, C n, e una sequenza di sostituzioni  1,…,  n tali che G i+1 è derivato da G i e da C i+1 attraverso la sostituzione  n. La sequenza può essere anche infinita. Esistono tre tipi di derivazioni: SUCCESSO, se per n finito G n è uguale alla clausola vuota G n = :-– FALLIMENTO FINITO, se per n finito non è più possibile derivare un nuovo goal da G n e G n non è uguale a :-– FALLIMENTO INFINITO, se è sempre possibile derivare nuovi goal tutti diversi dalla clausola vuota.

Derivazione di FALLIMENTO FINITA sum (0, X, X). [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z). [CL2] Il goal G 0 :- sum (s(0), 0, 0) ha una derivazione di fallimento finito !... semplicemente, perché l’unico atomo del goal non è unificabile con alcuna clausola del programma.

Derivazione di FALLIMENTO INFINITA sum (0, X, X). [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z). [CL2] Il goal G 0 :-sum(A,B,C) ha una derivazione SLD infinita !... ottenuta applicando ripetutamente varianti della seconda clausola di P [C1] rinomina di [CL2] sum (s(X1), Y1, s(Z1)) :- sum (X1, Y1, Z1).  1 = [A/s(X1),B/Y1,C/s(Z1)] [G 1 ] :- sum(X1, Y1, Z1). [C2] rinomina di [CL2] sum (s(X2), Y2, s(Z2)) :- sum (X2, Y2, Z2).  2 = [X1/s(X2),Y1/Y2,Z1/s(Z2)] [G 2 ] :- sum (X2, Y2, Z2)....

Non Determinismo Nella risoluzione SLD, così come è stata enunciata, si hanno due forme di non determinismo. La prima forma di non determinismo è legata alla selezione di un atomo A m del goal da unificare con la testa di una clausola, e viene gestita definendo una particolare regola di calcolo. La seconda forma di non determinismo è legata alla scelta di quale clausola del programma P utilizzare in un passo di risoluzione.

Regola di Calcolo Una regola di calcolo è una funzione che ha come dominio l'insieme dei letterali (atomi) di un goal e come codominio un insieme formato da un solo atomo dello stesso goal, ad esempio A m nel goal seguente :-A 1,...,A m-1, A m, A m+1,..., A k sum (0, X, X). [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z). [CL2] G 0 :- sum (0, s(0), s(0)), sum (s(0),0,s(0)). Se si seleziona l’atomo più a sinistra (LEFT-MOST) al primo passo, unificando l’atomo sum (0, s(0), s(0)) con la testa di [CL1], si otterrà: [G 1 ] :- sum (s(0), 0, s(0)). Se si seleziona l’atomo più a destra (RIGTH-MOST) al primo passo, unificando l’atomo sum (s(0), 0, s(0)) con la testa di [CL2], si avrà: [G 1 ] :- sum (0, s(0), s(0)), sum (0, 0, 0).

Strategia di Ricerca La risoluzione SLD (completezza), deve essere in grado di generare tutte le possibili soluzioni e quindi deve considerare ad ogni passo di risoluzione tutte le possibili alternative. La strategia di ricerca deve garantire questa completezza Una forma grafica utile per rappresentare la risoluzione SLD e questa forma di non determinismo sono gli alberi SLD.

Alberi SLD Dato un programma logico P, un goal G 0 e una regola di calcolo R, un albero SLD per P  { G 0 } via R è definito come segue: 1.ciascun nodo dell'albero è un goal (eventualmente vuoto); 2.la radice dell'albero è il goal G 0 ; 3.dato il nodo :- A 1,..., A m-1, A m, A m+1,..., A k, se A m è l’atomo selezionato dalla regola di calcolo R, allora questo nodo genitore ha un nodo figlio per ciascuna clausola C i = A :- B 1, …, B q di P tale che A e A m sono unificabili attraverso una sostituzione unificatrice più generale . Il nodo figlio è etichettato con la clausola goal: :- [A 1, …, A m-1, B 1, …, B q, A m+1, …, A k ]  e il ramo, dal nodo padre al figlio, è etichettato dalla sostituzione  e dalla clausola selezionata C i ; 4.Il nodo vuoto (indicato con “:-”) non ha figli.

Strategia di Ricerca La realizzazione effettiva di un dimostratore basato sulla risoluzione SLD richiede la definizione non solo di una regola di calcolo, ma anche di una strategia di ricerca che stabilisca una particolare modalità di esplorazione dell’albero SLD alla ricerca dei rami di successo. Le modalità di esplorazione dell’albero piu’ comuni sono: depth first [PRIMA IN PROFONDITA’] breadth first [PRIMA IN AMPIEZZA] Entrambe le modalità implicano l’esistenza di un meccanismo di backtracking per esplorare tutte le strade alternative che corrispondono ai diversi nodi dell’albero.

(cl1)p :- q,r.(cl5)s:- w. (cl2)p :- s,t.(cl6)t. (cl3)q :- u.(cl7)w. (cl4)q :- v. :- p. (1) (cl1)(cl2) :- q,r. (2) :- u,r. (3):- v,r. (4) :- w,t. (6) :- t. (7) :- s,t. (5) (cl3) (cl5) (cl7) (cl6) :-clausola vuota - successo goal :- p. Albero di risoluzione fallimento (cl4) Strategia di risoluzione in profondità con backtracking Programmazione logica e Prolog

Ad ogni ramo di un albero SLD corrisponde una derivazione SLD. – Ogni ramo che termina con il nodo vuoto (“ :- ”) rappresenta una derivazione SLD di successo. La regola di calcolo influisce sulla struttura dell’albero per quanto riguarda sia l’ampiezza sia la profondità. Tuttavia non influisce su correttezza e completezza. Quindi, qualunque sia R, il numero di cammini di successo (se in numero finito) è lo stesso in tutti gli alberi SLD costruibili per P  {G0}. R influenza solo il numero di cammini di fallimento (finiti ed infiniti). Programmazione logica e Prolog

sum(0,X,X). (CL1) sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2) G0= :- sum(W,0,0),sum(W,0,K). Albero SLD con regola di calcolo “left-most” Programmazione logica e Prolog s1 = {W/0, X/0} s2 = {K/0, X/0}

sum(0,X,X). (CL1) sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2) G0= :- sum(W,0,0),sum(W,0,K). Albero SLD con regola di calcolo “right-most” Programmazione logica e Prolog

(cl1)p:- q,r. (cl2)p. (cl3)q:- q,t. :- p. (1) (cl1)(cl2) :- q,r. (2) :- q,t,r. (3) :- q,t,t,r. (4) :- (cl3) La clausola vuota può essere generata ma il Prolog non è in grado di trovare questa soluzione Albero di risoluzione per il goal :- p. Ramo di fallimento infinito (cl3) Strategia di risoluzione in profondità con backtracking (cl3) :- q,t,t,t,r. (5) Programmazione logica e Prolog

programma logico Dal programma logico: sum(0,X,X). (c1) sum(s(X),Y,s(Z)) :- sum(X,Y,Z). (c2) Programmazione logica e Prolog La risposta si ottiene dalla sequenza di sostituzioni W=s(Z1) Z1=s(Z2) Z2=s(0) quindi W=s(s(s(0))) cioè 2+1=3 goal E dal goal sum(s(s(0)),s(0),W) (g0) risolvendo il goal g0 con c2 con {X/s(0),Y/s(0),W/s(Z1)} :- sum(s(0),s(0),Z1) (g1) risolvendo il goal g1con c1 con {X/0,Y/s(0),Z2/s(0)} :- clausola vuota risolvendo il goal g1con c2 con {X/0,Y/s(0),Z1/s(Z2)} :- sum(0,s(0),Z2) (g2)

:- collega(a,c). (cl1) collega(a,b). (cl2) collega(c,b). (cl3) collega(X,Z):- collega(X,Y),collega(Y,Z). (cl4) collega(X,Y):-collega(Y,X). :- collega(a,Y1), collega(Y1,c). collega(b,c) :- collega(b,Y2), collega(Y2,c). :- collega(b,Y3),collega(Y3,Z3), collega(Z3,c). :- collega(c,a). :- collega(a,c). cl3 cl4 cl3 cl4 ramo infinito ramo infinito collega(c,b) cl4 cl1 cl3 cl4 cl3cl4 Programmazione logica e Prolog