Risoluzione e Programmazione Logica (Prolog)

Slides:



Advertisements
Presentazioni simili
LIMITI:DEFINIZIONI E TEOREMI
Advertisements

Algebra Relazionale 3 Università degli Studi del Sannio
Calcolo Relazionale.
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.
Algebra parziale con predicati
Intelligenza Artificiale

Agenti logici: la logica del prim’ordine
Linguaggi di Programmazione (AA 2002/2003)
Deduzione naturale + Logica & Calcolabilità
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Il ragionamento classico
Introduzione alla Logica Modale.
L’ALGEBRA NEI PROGRAMMI
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Intelligenza Artificiale 1 Gestione della conoscenza lezione 7 Prof. M.T. PAZIENZA a.a
Intelligenza Artificiale 1 Gestione della conoscenza lezione 8
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Analisi e sintesi di circuiti combinatori
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 15/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Corso di Informatica (Programmazione)
FUNZIONE: DEFINIZIONE
LOGICA E MODELLI Logica e modelli nel ragionamento deduttivo A cura di Salvatore MENNITI.
Modelli simulativi per le Scienze Cognitive Paolo Bouquet (Università di Trento) Marco Casarotti (Università di Padova)
Semantica di Tarski.
Qualche esempio di tableaux
Semantica per formule di un linguaggio proposizionale p.9 della dispensa.
Corso di Matematica Discreta I Anno
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.
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Logica dei predicati del primo ordine.
Intelligenza Artificiale
Intelligenza Artificiale - AA 2001/2002 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Intelligenza Artificiale
Intelligenza Artificiale - AA 2002/2003 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Introduzione ~ 1850 Boole - De Morgan – Schroeder ALGEBRA BOOLEANA
Università degli studi di Verona Facoltà di Scienze MM. FF. NN. Relazione sullarticolo: Proving Existential Termination of Normal Logic Programs Cordibella.
Logica Matematica Seconda lezione.
Il modello ER Proposto da Peter Chen nel 1976 rappresenta uno standard per la progettazione concettuale (in particolare per le basi di dati) Ha una rappresentazione.
Pierdaniele Giaretta Primi elementi di logica
Agenti logici: sistemi a regole
Agenti logici: calcolo proposizionale Maria Simi a.a. 2008/2009.
Corso di logica matematica
Le Funzioni Prof. Antonelli Roberto Prof. Antonelli R.
La logica è lo studio del ragionamento.
Algebra di Boole.
Teoria dei Circuiti Lez. 1.
Logica Lezioni Lunedì 18 Nov. Annuncio E' possibile che dovrò rinviare delle lezioni della prossima settimana. Tenete d'occhio gli annunci.
Logica F. orilia. Lezz Lunedì 4 Novembre 2013.
La logica Dare un significato preciso alle affermazioni matematiche
Intelligenza Artificiale Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Logica Lezz Nov Reiterazione (RE) P |- P 1 P A 2 P & P 1,1, &I 3 P 2, & E.
Esecuzione di un Programma [P] Una computazione corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue.
1 Linguaggi di Programmazione Cenni di logica proposizionale.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
Query languages per Basi di Dati Relazionali  Algebra Relazionale:  basato sulla teoria degli insiemi  procedurale  usato per l’implementazione di.
Intelligenza Artificiale Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
AOT Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Rappresentazione della Conoscenza e Ragionamento.
Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - alberi SLD.
Agenti logici: calcolo proposizionale Maria Simi a.a. 2006/2007.
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini III. La logica delle proposizioni.
Logica Lezione 8, DISTRIBUIRE COMPITO 1.
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.
Logica Lezione 19, Distribuire compito 3 DATA esame in classe intermedio: Lunedì 20 aprile.
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
INSIEMI E LOGICA PARTE QUARTA.
Transcript della presentazione:

Risoluzione e Programmazione Logica (Prolog)

Risoluzione P v R Q v R P v Q Abraham Robinson [1965] Se è noto che “P è vera o Q è vera” ed anche che “P è falsa o R è vera”, allora deve essere il caso che “Q è vera o è vera R ” “L’idea che sta alla base della risoluzione è piuttosto semplice” Logical Foundations of Artificial Intelligence Michael R. Genesereth Nils J. Nilsson P v Q P v R Q v R

Esempi di equivalenze valide  (a   )  (a   )  ( xa ) x a  (xa ) x a a V  a  a a  F  a

Forma normale congiuntiva e clausole Un letterale è una formula atomica o la negazione di una formula atomica. Una clausola è una disgiunzione di letterali: A1  ...  An  B1  ...  Bm [con Ai , Bj atomi] equivalentemente, puo essere rappresentata in forma implicativa: B1  ...  Bm  A1  ...  An Una formula in forma normale congiuntiva è una congiunzione di clausole. Qualsiasi formula proposizionale può essere convertita in una formula proposizionale in forma normale congiuntiva logicamente equivalente. Qualsiasi formula ben formata della logica dei predicati ø può essere convertita in una formula ben formata della logica dei predicati in forma normale congiuntiva ø’. Si osservi che, In generale ø non è logicamente equivalente a ø’, ma ø è insoddisfacibile sse ø’ è insoddisfacibile. Una Base della conoscenza (KB) è un insieme di clausole.

Risoluzione [I]  con    con   ( - { })  (  - { }) Caso proposizionale  con    con   ( - { })  (  - { }) I simboli  e  indicano clausole, mentre  è uno dei letterali che ne fanno parte (può naturalmente non essere l’unico). Esempio 1. {P, Q}  2. {P, R}  3. {Q, R} 1,2 Il simbolo  indica le clausole presenti inizialmente della ase della conoscenza.

Procedura per Risoluzione Prooposizionale Premesse... KB ⊦ φ sse KB ⊧ φ sse KB ∪ {⌝φ} insoddisfacibile sse KB ∪ {⌝φ} incoerente Come dimostriamo KB ⊦ φ ? KB ⊦ φ

Esempio di Risoluzione Proposizionale (Brachman&Levesque) KB KB (clausole) Proving that Girl holds... KB ⊦ Girl ? KB ∪ {⌝Girl} unsatisfiable?

Risoluzione [II]  con    con   Caso predicativo  con    con   (( - { })  (  - {})) dove  ( )= (), è l’unificatore più generale per i due letterali Esempio 1. {P(x), Q(x,y)}  2. {P(a), R(b, z)}  3. {Q(a,y), R(b, z)} 1,2 Il simbolo  indica le clausole presenti inizialmente della base della conoscenza. In questo caso, l’unificatore più generale è  = {x / a}.

Forme Canoniche per la Risoluzione k   m   A1  ...  Am  B1  ...  Bn clausola k = 1 A1  ...  Am  B1 clausola di Horn una calusola con al più un letterale positivo k = 1 m = 1 V  F clausola vuota

Modus Ponens Generalizzato A  B A B Modus Ponens Generalizzato A1  ...  Ai-1  Ai  Ai+1  ...  Am  B Ai A1  ...  Ai-1  Ai+1  ...  Am  B (1) A1  ...  Ai-1  Ai  Ai+1  ...  Am  B C1  ...  Cn  Ai A1  ...  Ai-1  Ai+1  ...  Am  C1  ...  Cn  B (2) A1  A2  ...  Am  B A1’  A2’  ...  Am’ [B] con  (Ai) =  (Am’ ), i 1  i  n (G)

TRASFORMAZIONE IN CLAUSOLE Insieme finito di istruzioni per trasformare una qualunque fbf della logica dei predicati del primo ordine in un insieme di clausole (1) Trasformazione in fbf chiusa: ad esempio, la formula, x (p(y)  (y (q(x,y)  p(y)))) [1] è trasformata in: x y (p(y)  (y (q(x,y)  p(y)))) [2] (2) Applicazione delle equivalenze per i connettivi logici: ad esempio, A  B è sostituito da  A  B, e la si riduce in forma and-or. La formula [2] diventa: x y ( p(y)  (y (q(x, y)  p(y)))) [3] (3) Applicazione della negazione ai soli atomi (e non a formule composte), tenendo presente che, x A equivale a X A X A equivale a x A (A1  A2  ...  An) equivale a A1  A2  ...  An (A1  A2  ...  An) equivale a A1  A2  ...  An [leggi di De Morgan] la [3] si modifica in: x y ( p(y)  (y (q(x, y)   p(y)))) [4]

variabile y viene rinominata z : (4) Cambiamento di nomi delle variabili: nel caso di conflitti. In [4] la seconda variabile y viene rinominata z : x y ( p(y)  (z (q(x, z)   p(z)))) [5] (5) Spostamento dei quantificatori: in testa alla formula (forma prenessa). x y z ( p(y)  (q(x, z)   p(z))) [6] (6) Forma normale congiuntiva: cioè come congiunzione di disgiunzioni, con quantificazione in testa. x y z (( p(y)  q(x, z))  ( p(y)   p(z))) [7] (7) Skolemizzazione: ogni variabile quantificata esistenzialmente viene sostituita da una funzione delle variabili quantificate universalmente che eventualmente la precedono. Tale funzione è detta funzione di Skolem. Ad esempio, una formula del tipo: x y p(x, y), può essere espressa in modo equivalente come: x p(x, g(x)) . In [7] z è sostituita da f (x, y), perché z si trova nel campo di azione delle quantificazioni x e y: x y (( p(y)  q(x, f (x, y)))  ( p(y)   p(f (x, y)))) [8] Nota Perdita in espressività. Non è la stessa cosa asserire, F: x p(x) oppure F’: p(f). Vale comunque la proprietà che F è inconsistente se e solo se F’ è inconsistente.

(( p(y)  q(x, f (x, y)))  ( p(y)   p(f (x, y)))) [9] (8) Eliminazione dei quantificatori universali: si ottiene una formula detta universale (tutte le sue variabili sono quantificate universalmente) in forma normale congiuntiva. (( p(y)  q(x, f (x, y)))  ( p(y)   p(f (x, y)))) [9] Una formula di questo tipo rappresenta un insieme di clausole. La forma normale a clausole che si ottiene è la seguente: { p(y), q(x, f (x, y))} [10] { p(y),  p(f (x, y))} [11] I letterali della seconda clausola possono essere riscritti rinominando le variabili (sostituendo cioè le formule con le loro varianti). { p(y), q(x, f (x, y))} [12] { p(z),  p(f (w, z))} [13] Qualunque teoria del primo ordine T può essere trasformata in una teoria T’ in forma a clausole. Anche se T non è logicamente equivalente a T’ (a causa dell'introduzione delle funzioni di Skolem), vale comunque la seguente proprietà: Proprietà Sia T una teoria del primo ordine e T’ una sua trasformazione in clausole, allora T è insoddisfacibile se e solo se T’ è insoddisfacibile. Il Principio di Risoluzione è una procedura di dimostrazione che opera per contraddizione e si fonda sul concetto di insoddisfacibilità.

 = {x1/t1, x2/t2,..., xn/tn}, dove x1, x2,..., xn sono distinte. UNIFICAZIONE L’unificazione è una nozione fondamentale, sulla quale sono basati molti metodi per la risoluzione e la deduzione automatica di teoremi. Per applicare il principio di risoluzione alle clausole non-ground della logica del primo ordine è necessario introdurre il concetto di unificazione [J.A. Robinson, 1965], e lo stesso vale per l’applicazione della regola di Modus Ponens Generalizzato, appena visto. Per unificazione si intende il procedimento di manipolazione formale utilizzato per stabilire quando due espressioni possono essere identificate procedendo a opportune sostituzioni delle loro sotto-espressioni con altre espressioni. Una sostituzione  è un insieme finito di legami fra simboli di variabili xi ( i = 1, .., n) ed espressioni (termini) ti.  = {x1/t1, x2/t2,..., xn/tn}, dove x1, x2,..., xn sono distinte. L’applicazione della sostituzione  a un’espressione E, [E], produce una nuova espressione ottenuta sostituendo simultaneamente ciascuna variabile xi dell’espressione con il corrispondente termine ti . [E] è detta in questo caso istanza di E. Per renaming si intendono sostituzioni che cambiano semplicemente il nome ad alcune delle variabili di E. [E] è una variante di E.

Esempio Analogamente, [C(y, z)]{y/t, z/neri} = C(t, neri) [e1] L’applicazione della sostituzione  = {x/c, y/a, z/w} all’espressione p (x, f (y), b, z) produce l'istanza p(c, f (a), b, w). Analogamente, [C(y, z)]{y/t, z/neri} = C(t, neri) [e1] [C(t, neri)]{y/t, z/neri} = C(t, neri) [e2] [C(y, z)]{y /bianchi, t/bianchi, z/neri} = C(bianchi, neri) [e3] [C(t, neri)]{y /bianchi, t/bianchi, z/neri} = C(bianchi, neri) [e4] [C(y, z)]{y/t, z/bianchi} = C(t, bianchi) [e5] [C(t, neri)]{y/t, z/bianchi} = C(t, neri) [e6] [T(s(a), f(s(b), s(c)))]{c/s(a), y /s(b), z/s(s(a))} = T(s(a), f(s(b), s(s(a))) [e7] [T(q, h(y, z))]{q/p, y /x, z/w} = T(p, h(x, w)) [e8], variante della partenza. [c (t, neri)] e = c (t, neri) [e9] [p (x, y)]{x/a, y/x} = p (a, x) [e10]

Combinazioni di sostituzioni Date due sostituzioni 1 e 2 1 ={x1/t1, x2/t2, ..., xn/tn} 2 ={y1/q1, y2/q2, ..., ym/qm} La composizione 1 ° 2 di 1 e 2 è la sostituzione {x1/[t1]2,..., xn/[tn]2, y1/q1 , y2/q1, ..., ym/qm} ottenuta cancellando le coppie xi/[ti]2 per le quali si ha xn=[tn]2 e le coppie yj/qj per le quali yj appartiene all’insieme {x1, x2,..., xn}. Se consideriamo, ad esempio, le sostituzioni 1 = {x/f (z), w/r, s/c} 2 = {y/x, r/w, z/b} la loro composizione produce, 3 = 1 ° 2 = {x/f (b), s/c, y/x, r/w, z/b}.

Sostituzioni più generali Una sostituzione  è più generale di una sostituzione  se esiste una sostituzione  tale che  = . Ad esempio, la sostituzione  = {y/t, z/neri} è più generale della sostituzione  = {y/bianchi, t/bianchi, z/neri} in quanto  si può ottenere attraverso la composizione {y/t, z/neri}°{t/bianchi}, ovvero,  = , e  = {t/bianchi}. Come abbiamo detto, l’unificazione rende identici due o più atomi (o termini) (o meglio le loro istanze) attraverso la scelta e l’applicazione di una opportuna sostituzione. Un insieme di atomi (o termini) A1, A2,..., An è unificabile se esiste una sostituzione  tale che: [A1] = [A2] = .... = [An]. La sostituzione  è detta sostituzione unificatrice (o, più semplicemente, unificatore) Nota Se si considerano solo due atomi (o termini), uno dei quali senza alcuna variabile, si ricade in un caso particolare di unificazione, detto pattern-matching.

 = {y/bianchi, t/bianchi, z/neri} Esempio[1] Se si considerano gli atomi: A1 = C(y, z) e A2 = C(t, neri) possibili sostituzioni unificatrici sono:  = {y/t, z/neri}  = {y/bianchi, t/bianchi, z/neri} la loro applicazione produce la stessa istanza: [C(y, z)] = [C(t, neri)] = C(t, neri) [C(y, z)] = [C(t, neri)] = C(bianchi, neri) La sostituzione:  = {y/t, z/bianchi} è un unificatore ? Esempio[2] Per gli atomi: A3 = P(x, x, f (a,z)) e A4 = P(y, w, f (y,j))  = {x/a, y/a, w/a, j/z}  = {x/a, y/a, w/a, j/c, z/c} la loro applicazione ad A3 e A4 produce la stessa istanza: P(a, a, f (a,z)) nel caso della sostituzione  P(a, a, f (a,c)) nel caso della sostituzione . Possono esistere più sostituzioni unificatrici, si vuole individuare quella più generale (mgu, most general unifier). Nota:  MGU:  si ottiene da  componendola con:  = {z/c}.

Risoluzione P v R Q v R P v Q Abraham Robinson [1965] Se è noto che “P è vera o Q è vera” ed anche che “P è falsa o R è vera”, allora deve essere il caso che “Q è vera o è vera R ” “L’idea che sta alla base della risoluzione è piuttosto semplice” Logical Foundations of Artificial Intelligence Michael R. Genesereth Nils J. Nilsson P v Q P v R Q v R

Risoluzione [I]  con    con   ( - { })  (  - { }) Caso proposizionale  con    con   ( - { })  (  - { }) I simboli  e  indicano clausole, mentre  è uno dei letterali che ne fanno parte (può naturalmente non essere l’unico). Esempio 1. {P, Q}  2. {P, R}  3. {Q, R} 1,2 Il simbolo  indica le clausole presenti inizialmente della ase della conoscenza.

Risoluzione [II]  con    con   Caso predicativo  con    con   (( - { })  (  - {})) dove  ( )= (), è l’unificatore più generale per i due letterali Esempio 1. {P(x), Q(x,y)}  2. {P(a), R(b, z)}  3. {Q(a,y), R(b, z)} 1,2 Il simbolo  indica le clausole presenti inizialmente della base della conoscenza. In questo caso, l’unificatore più generale è  = {x / a}.

Risoluzione [III]  con  ’  con  ’ La nozione di fattore Se un sottoinsieme di letterali in una clausola  possiede un unificatore più generale , allora la clausola ’ ottenuta applicando la sostituzione  alla clausola  è detta fattore di . Ovviamente ogni clausola è banalmente fattore di se stessa. Nota In genere, la fattorizzazione s’intende come un’operazione di eliminazione delle ridondanze all’interno delle clausole. Caso fattorizzato  con  ’  con  ’ ((’ - { })  ( ’ - {})) dove  ( )= (), è l’unificatore più generale per i due letterali

Risoluzione Esempio (Brachman&Levesque) KB KB ⊦ HardWorker(sue) ?

Risoluzione Esempio KB (Brachman&Levesque) KB ⊦ HardWorker(x) ? X X X

Programmazione Logica Risoluzione SLD e Programmazione Logica

Esecuzione di un Programma [P] Una computazione 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 (t1, t2, …, tm) . se x1, x2, …, xn sono le variabili che compaiono in t1, t2, …, tm il significato logico della query e’: x1 x2 … xn S (t1, t2, …, tm) e l’obiettivo e’ quello di trovare una sostituzione  = [x1 / a1, x2 / a2 , …, xn/an] dove ai sono termini tale per cui P [S (t1, t2, …, tm)] 

Risoluzione SLD Risoluzione Lineare per Clausole Definite con funzione di Selezione (completa per le clausole di Horn) Dato un programma logico P e una clausola goal G0 , ad ogni passo di risoluzione si ricava un nuovo risolvente Gi+1 , se esiste, dalla clausola goal ottenuta al passo precedente Gi e da una rinomina di una clausola appartenente a P 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)) .

MOST GENERAL UNIFIER (MGU) Risoluzione SLD Operativamente... La Risoluzione SLD seleziona un atomo Am dal goal Gi secondo un determinato criterio, e lo unifica se possibile con la testa della clausola Ci attraverso la sostituzione più generale: MOST GENERAL UNIFIER (MGU) Il nuovo risolvente e’ ottenuto da Gi riscrivendo l’atomo selezionato con la parte destra della clausola Ci ed applicando la sostituzione i. Più in dettaglio: :- A1, …, Am-1, Am, Am+1, …,Ak . Risolvente, A :- B1, …, Bk . clausola del programma P, e [Am] i = [A] i allora la risoluzione SLD deriva il nuovo risolvente :- [A1, …, Am-1, B1, …, Bq , Am+1, …, Ak] i .

sum (s(X1), Y1, s(Z1)) :- sum (X1, Y1, Z1) . 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 [C2] sum (s(X1), Y1, s(Z1)) :- sum (X1, Y1, Z1) . Unificando la testa con il goal, ottengo la sostituzione MGU 1 = [X1/0, Y1/0, s(Z1)/W] Ottengo il nuovo risolvente [G1] :- [sum (X1, Y1, Z1)] 1 ossia, :- sum (0, 0, Z1) . .

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

Derivazione di SUCCESSO sum (0, X, X) . [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z) . [CL2] Il goal G0 :- sum (s(0), 0, W) ha una derivazione di successo ! [C1] rinomina di [CL2] sum (s(X1), Y1, s(Z1)) :- sum (X1, Y1, Z1) . 1 = [X1/0, Y1/0, s(Z1)/W] [G1] :- sum (0, 0, Z1) . [C2] rinomina di [CL1] sum (0, X2, X2) . 2 = [Z1/0, X2/0] [G2] :-

Derivazione di FALLIMENTO FINITA sum (0, X, X) . [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z) . [CL2] Il goal G0 :- 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 G0 :-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)] [G1] :- 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)] [G2] :- 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 Am 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, e viene gestita definendo una strategia di ricerca.

Regola di Calcolo G0 :- sum (0, s(0), s(0)) , sum (s(0) ,0 ,s(0)) . 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 Am nel goal seguente :-A1 ,...,Am-1, Am , Am+1 , ..., Ak sum (0, X, X) . [CL1] sum (s(X), Y, s(Z)) :- sum (X, Y, Z) . [CL2] G0 :- 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à: [G1] :- 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à: [G1] :- sum (0, s(0), s(0)) , sum (0, 0, 0) .

Strategia di Ricerca Questa forma di non determinismo implica che possano esistere più soluzioni alternative per uno stesso goal, corrispondenti alle diverse scelte delle clausole con cui tentare l’unificazione. 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.

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

[PRIMA IN PROFONDITA’] 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.