66
1 LINGUAGGIO PROLOG PROLOG: PROgramming in LOGic, nato nel 1973 Eil più noto linguaggio di Programmazione Logica ALGORITMO = LOGICA + CONTROLLO Si fonda sulle idee di Programmazione Logica avanzate da R. Kowalski Basato sulla logica dei Predicati del Primo Ordine (prova automatica di teoremi - risoluzione) Manipolatore di SIMBOLI e non di NUMERI Linguaggio ad ALTISSIMO LIVELLO: utilizzabile anche da non programmatori APPLICAZIONI DI AI

Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

1

LINGUAGGIO PROLOG

• PROLOG: PROgramming in LOGic, nato nel 1973

• E’ il più noto linguaggio di Programmazione Logica

ALGORITMO = LOGICA + CONTROLLO

• Si fonda sulle idee di Programmazione Logica avanzate da R. Kowalski

• Basato sulla logica dei Predicati del Primo Ordine (prova automatica di teoremi - risoluzione)

• Manipolatore di SIMBOLI e non di NUMERI

• Linguaggio ad ALTISSIMO LIVELLO: utilizzabile anche da non programmatori

• APPLICAZIONI DI AI

Page 2: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

2

LINGUAGGIO PROLOG

• Lavora su strutture ad ALBERO

– anche i programmi sono strutture dati manipolabili

– utilizzo della ricorsione e non assegnamento

• Metodologia di programmazione:

– concentrarsi sulla specifica del problema rispetto alla strategia di soluzione

• Svantaggi:

– linguaggio relativamente giovane

– efficienza paragonabile a quella del LISP

– non adatto ad applicazioni numeriche o in tempo reale

– mancanza di ambienti di programmazione evoluti

Page 3: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

3

ALGORITMO = LOGICA + CONTROLLO

• Conoscenza sul problema indipendente dal suo utilizzo

– Esprimo COSA e non COME

– Alta modularità e flessibilità

– Schema progettuale alla base di gran parte dei SISTEMI BASATI SULLA CONOSCENZA (Sistemi Esperti)

• LOGICA: conoscenza sul problema

– correttezza ed efficienza

• CONTROLLO: strategia risolutiva

– efficienza

• Algoritmi equivalenti:

– A1 = L + C1

– A2 = L + C2

Page 4: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

4

PROGRAMMA PROLOG• Un PROGRAMMA PROLOG e’ un insieme di clausole di Horn che

rappresentano:

– FATTI riguardanti gli oggetti in esame e le relazioni che intercorrono

– REGOLE sugli oggetti e sulle relazioni (SE…..ALLORA)

– GOAL (clausole senza testa), sulla base della conoscenza definita

• ESEMPIO: due individui sono colleghi se lavorano per la stessa ditta

collega(X,Y):- lavora(X,Z), lavora(Y,Z), diverso(X,Y).

FATTI

GOAL

lavora(emp1,ibm).

lavora(emp2,ibm).

lavora(emp3,txt).

lavora(emp4,olivetti).

lavora(emp5,txt).

:- collega(X,Y).

REGOLA

Testa Body

Page 5: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

5

PROLOG: ELABORATORE DI SIMBOLI

• ESEMPIO: somma di due numeri interi

sum(0,X,X).

sum(s(X),Y,s(Z)):- sum(X,Y,Z).

• Simbolo sum non interpretato.

• Numeri interi interpretati dalla struttura “successore” s(X)

• Si utilizza la ricorsione

• Esistono molte possibili interrogazioni

FATTO

REGOLA

:- sum(s(0),s(s(0)),Y).

:- sum(s(0),Y,s(s(s(0)))).

:- sum(X,Y,s(s(s(0)))).

:- sum(X,Y,Z).

:- sum(X,Y,s(s(s(0)))), sum(X,s(0),Y).

Page 6: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

6

PROVA DI UN GOAL

• Un goal viene provato provando i singoli letterali da sinistra a destra

:- collega(X,Y), persona(X), persona(Y).

• Un goal atomico (ossia formato da un singolo letterale) viene provato confrontandolo e unificandolo con le teste delle clausole contenute nel programma

• Se esiste una sostituzione per cui il confronto ha successo

– se la clausola con cui unifica e’ un fatto, la prova termina;

– se la clausola con cui unifica e’ una regola, ne viene provato il Body

• Se non esiste una sostituzione il goal fallisce

Page 7: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

7

PROVA DI UN GOAL: esempio

append([],X,X).

append([X|Z],Y,[X|T]):- append(Z,Y,T).

:- append([a,b],[c,d],[a,b,c,d]).

• Questo goal atomico viene provato unificandolo con la testa della seconda regola: intuitivamente X unifica con a, Z con la lista [b], Ycon la lista [c,d] T con la lista [b,c,d]

• Viene quindi provato il body dopo aver effettuato le sostituzioni

:- append([b],[c,d],[b,c,d]).

• Questo goal atomico viene provato unificandolo con la testa della seconda regola: X unifica con b, Z con la lista [], Y con la lista [c,d] T con la lista [c,d]

Page 8: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

8

PROVA DI UN GOAL: esempio

append([],X,X).

append([X|Z],Y,[X|T]):- append(X,Y,T).

:- append([a,b],[c,d],[a,b,c,d]).

• Viene quindi provato il body dopo aver effettuato le sostituzioni

:- append([],[c,d],[c,d]).

• Questo goal atomico viene provato unificandolo con la testa della

prima regola che e’ un fatto e quindi la prova termina con successo

Page 9: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

9

PROVA DI UN GOAL: esempio

append([],X,X).

append([X|Z],Y,[X|T]):- append(X,Y,T).

Come vengono dimostrati i successivi goal ?

:- append([a,b],Y,[a,b,c,d]).

:- append(X,[c,d],[a,b,c,d]).

:- append(X,Y,[a,b,c,d]).

:- append(X,Y,Z).

Page 10: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

10

PIU’ FORMALMENTE

• Linguaggio Prolog: caso particolare del paradigma di Programmazione Logica

• SINTASSI: un programma Prolog e’ costituito da un insieme di clausole definite della forma

(cl1) A.

(cl2) A :- B1, B2,…, Bn.

(cl3) :- B1, B2,…, Bn.

• In cui A e Bi sono formule atomiche

• A : testa della clausola

• B1,B2,…,Bn : body della clausola

• Il simbolo “,” indica la congiunzione; il simbolo “:-” l’implicazione logica in cui A e’ il conseguente e B1,B2,…,Bn l’antecedente

FATTO o ASSERZIONE

REGOLA

GOAL

Page 11: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

11

PIU’ FORMALMENTE

• Una formula atomica e’ una formula del tipo

p(t1,t2,…,tn)

in cui p e’ un simbolo predicativo e t1,t2,…,tn sono termini

• Un termine e’ definito ricorsivamente come segue:

– le costanti (numeri interi/floating point, stringhe alfanumeriche aventi

come primo carattere una lettera minuscola) sono termini

– le variabili (stringhe alfanumeriche aventi come primo carattere una lettera

maiuscola oppure il carattere “_” ) sono termini.

– f(t1,t2,…,tk) e’ un termine se “f” e’ un simbolo di funzione (operatore) a k argomenti e t1,t2,…,tk sono termini. f(t1,t2,…,tk)

viene detta struttura

NOTA: le costanti possono essere viste come simboli funzionali a zero argomenti.

Page 12: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

12

ESEMPI

• COSTANTI: a, pippo, aB, 9,135,a92

• VARIABILI: X, X1, Pippo, _pippo, _x, _

– la variabile _ prende il nome di variabile anonima

• TERMINI COMPOSTI: f(a), f(g(1)), f(g(1),b(a),27)

• FORMULE ATOMICHE: p, p(a,f(X)), p(Y), q(1)

• CLAUSOLE DEFINITE:

q.

p:-q,r.

r(Z).

p(X):- q(X,g(a)).

• GOAL:

:-q,r.

• Non c’e’ distinzione tra costanti, simboli funzionali e predicativi.

Page 13: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

13

INTERPRETAZIONE DICHIARATIVA

• Le variabili all’interno di una clausola sono quantificate universalmente

• per ogni asserzione (fatto)

p(t1,t2,…,tm).

se X1,X2,…,Xn sono le variabili che compaiono in t1,t2,…,tm il

significato e’: ∀X1,∀X2,…,∀Xn (p(t1,t2,…,tm))

• per ogni regola del tipo

A:- B1,B2,…,Bk.

se Y1,Y2,…,Yn sono le variabili che compaiono solo nel body della regola e X1,X2,…,Xn sono le variabili che compaiono nella testa e nel

corpo, il significato e’:

∀X1,∀X2,…,∀Xn,∀Y1,∀Y2,…,∀Yn ((B1,B2,…,Bk) →→→→ A)

∀X1,∀X2,…,∀Xn ( (∃∃∃∃Y1,∃∃∃∃Y2,…,∃∃∃∃Yn(B1,B2,…,Bk)) →→→→ A)

Page 14: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

14

INTERPRETAZIONE DICHIARATIVA

• ESEMPI

padre(X,Y) “X e’ il padre di Y”

madre(X,Y) “X e’ la madre di Y”

nonno(X,Y):- padre(X,Z), padre(Z,Y).

“per ogni X e Y, X e’ il nonno di Y se esiste Z tale che X e’ padre di Ze Z e’ il padre di Y”

nonno(X,Y):- padre(X,Z), madre(Z,Y).

“per ogni X e Y, X e’ il nonno di Y se esiste Z tale che X e’ padre di Ze Z e’ la madre di Y”

Page 15: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

15

ESECUZIONE DI UN PROGRAMMA

• Una computazione corrisponde al tentativo di dimostrare, tramite la

risoluzione, che una formula segue logicamente da un programma (e’un teorema).

• Inoltre, si deve determinare una sostituzione per le variabili del goal

(detto anche “query”) per cui la query segue logicamente dal programma.

• Dato un programma P e la query:

:- p(t1,t2,…,tm).

se X1,X2,…,Xn sono le variabili che compaiono in t1,t2,…,tm il

significato della query e’: ∃∃∃∃X1, ∃∃∃∃X2,…, ∃∃∃∃Xn p(t1,t2,…,tm)

e l’obiettivo e’ quello di trovare una sostituzione

σσσσ = {X1/s1,X2/s2,…,Xn/sn}

dove si sono termini tale per cui P |= [p(t1,t2,…,tm)]σσσσ

Page 16: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

16

SCHEMA RIASSUNTIVO

Logica dei predicati del primo ordine

Sintassi Semantica

Dimostrazione di teoremi

Concetto di conseguenza logica

Risoluzione (clausole generali)

Programmazione Logica (clausole di Horn)

InterpretazioneSimboli non interpretati

Teorie assiomatico deduttive

Prova automatica di teoremi

Correttezza

Completezza

Page 17: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

17

PROGRAMMAZIONE LOGICA

• Dalla Logica dei predicati del primo ordine verso un linguaggio di programmazione;

– requisito efficienza

• Si considerano solo clausole di Horn (al più un letterale positivo)

– il letterale positivo corrisponde alla testa della clausola

• Si adotta una strategia risolutiva particolarmente efficiente

– RISOLUZIONE SLD (corrisponde al Backward chianing per clausole di

Horn).

– Non completa per la logica a clausole, ma completa per il sottoinsieme

delle clausole di Horn.

Page 18: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

18

RISOLUZIONE SLD

• Risoluzione Lineare per Clausole Definite con funzione di Selezione (backward chaining)

– 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 variante di una clausola appartenente a P

• Una variante per una clausola C e’ la clausola C’ ottenuta da C rinominando le sue variabili (renaming)

– Esempio:

p(X):- q(X,g(Z)).

p(X1):- q(X1,g(Z1)).

Page 19: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

19

RISOLUZIONE SLD –backward chaining

(continua)

• 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) θi

• 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,…,Bq. 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.

Page 20: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

20

UNIFICAZIONE

• L’unificazione è un meccanismo che permette di calcolare una sostituzione al fine di rendere uguali due espressioni. Per espressione intendiamo un termine, un letterale o una congiunzione o disgiunzione di letterali.

• SOSTITUZIONE: θ = [X1/T1, X2/T2,…, Xn/Tn] insieme di legami di termini Ti a variabili Xi che rendono uguali due espressioni.

L’applicazione di una sostituzione a un’espressione E, [E]θ produce una nuova espressione in cui vengono sostituite tutte le variabili di E con i corrispondenti termini.

• Esempio: Espressione 1: c(X,Y) Espressione 2: c(a,K) sostituzione unificatrice: θ = [X/a, Y/K]

Page 21: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

21

UNIFICAZIONE

• COMPOSIZIONE DI SOSTITUZIONI: θ1θ2 θ1 = [X1/T1, X2/T2,…, Xn/Tn] θ2 = [Y1/Q1, Y2/Q2,…, Yn/Qn]

θ1θ2 = [X1/[T1]θ2,…, Xn/[Tn]θ2,Y1/Q1,Y2/Q2,…,Yn/Qn]

equivale quindi ad applicare prima θ1 e poi θ2.

• Esempio: θ1 = [X/f(Z),W/R,S/c] θ2 = [Y/X,R/W,Z/b]

θ1θ2 = [X/f(b),S/c,Y/X,R/W,Z/b]

• Due atomi : A1 e A2 sono unificabili se esiste una sostituzione θ tale

che [A1]θ =[A2]θ

Page 22: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

22

UNIFICAZIONE

• Una sostituzione θ1 è più generale di un’altra θ2 se esiste una terza

sostituzione θ3 tale che θ2 = θ1θ3

• Esistono in generale più sostituzioni unificatrici. Noi siamo interessati

nell’unificazione più generale: MOST GENERAL UNIFIER

• Esiste un algoritmo che calcola l’unificazione più generale se dueatomi sono unificabili, altrimenti termina in tempo finito nel caso in cui idue atomi non sono unificabili.

Page 23: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

23

UNIFICAZIONE

T1T2 costante

c2

variabile

X2

termine

composto

S2

termine

composto

S1

variabile

X1

costante

c1

unificano

se c1=c2

unificano

X2=c1

unificano

X1=c2

unificano

X1=X2

non

unificano

non

unificano

unificano

X1=S2

unificano

X2=S1

Unificano se

uguale funtore

e parametri

unificabili

Page 24: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

24

OCCUR CHECK

• L’unificazione tra una variabile X e un termine composto S è moltodelicata: infatti è importante controllare che il termine composto S noncontenga la variabile da unificare X.

• Questo inficerebbe sia la terminazione, sia la correttezza dell’algoritmodi unificazione.

• Esempio: si consideri l’unificazione tra p(X,X) e p(Y,f(Y)).

La sostituzione è [X/Y,X/f(X)]

Chiaramente, due termini unificati con lo stesso termine, sono uguali traloro. Quindi, Y/f(Y) ma questo implica Y=f(f(f(f(…)))) e il

procedimento non termina

Page 25: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

25

RISOLUZIONE SLD: ESEMPIO

sum(0,X,X). (C1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (C2)

• Goal sum(s(0),0,W).

• Al primo passo genero una variante 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,W/s(Z1)]

Ottengo il nuovo risolvente G1: :- [sum(X1,Y1,Z1)] θ1

ossia

:-sum(0,0,Z1).

Page 26: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

26

DERIVAZIONE SLD (backward chaining)

• Una derivazione SLD per un goal G0 dall’insieme di clausole definite P e’ una sequenza di clausole goal G0,…Gn, una sequenza di varianti 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.

Page 27: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

27

DERIVAZIONE DI SUCCESSO

sum(0,X,X). (CL1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2)

• Goal G0 :-sum(s(0),0,W) ha una derivazione di successo

C1: variante di CL2 sum(s(X1),Y1,s(Z1)):- sum(X1,Y1,Z1).

θ1

= [X1/0,Y1/0,W/s(Z1)]

G1: :-sum(0,0,Z1).

C2: variante di CL1 sum(0,X2,X2).

θ2

= [Z1/0,X2/0]

G2: :-

Page 28: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

28

DERIVAZIONE DI FALLIMENTO FINITA

sum(0,X,X). (CL1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2)

• Goal G0 :-sum(s(0),0,0) ha una derivazione di fallimento finito

perché l’unico atomo del goal non e’ unificabile con alcuna clausola del programma

Page 29: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

29

DERIVAZIONE DI FALLIMENTO INFINITA

sum(0,X,X). (CL1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2)

• Goal G0 :-sum(A,B,C) ha una derivazione SLD infinita, ottenuta

applicando ripetutamente varianti della seconda clausola di P

C1: variante 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: variante 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).

...

Page 30: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

30

LEGAMI PER LE VARIABILI IN USCITA

• Risultato della computazione:

– eventuale successo

– legami per le variabili del goal G0, ottenuti componendo le sostituzioni

MGU applicate

Se il goal G0 è del tipo:

– ¬ A1(t1,...,tk), A2(tk+1,...,th), ..., An(tj+1,...,tm)

– i termini ti“ground” rappresentano i valori di ingresso al programma,

mentre i termini variabili sono i destinatari dei valori di uscita del

programma.

• Dato un programma logico P e un goal G0, una risposta per P∪{G0} èuna sostituzione per le variabili di G0.

Page 31: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

31

LEGAMI PER LE VARIABILI IN USCITA

• Si consideri una refutazione SLD per P ∪ {G0}. Una risposta calcolata qper P ∪ {G0} è la sostituzione ottenuta restringendo la composizionedelle sostituzioni mgu q1,...,qn utilizzate nella refutazione SLD di P ∪ {G0}alle variabili di G0.

• La risposta calcolata o sostituzione di risposta calcolata è il “testimone”del fatto che esiste una dimostrazione costruttiva di una formulaquantificata esistenzialmente (la formula goal iniziale).

sum(0,X,X). (CL1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2)

G= :-sum(s(0),0,W) la sostituzione θ ={W/s(0)} è la risposta calcolata,

ottenuta componendo θ 1 con θ 2 e considerando solo la sostituzione per la variabile W di G.

Page 32: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

32

NON DETERMINISMO

• Nella risoluzione SLD così come è stata enunciata si hanno due formedi non determinismo

• La prima forma di non determinismo è legata alla selezione di un atomoAm del goal da unificare con la testa di una clausola, e viene risoltadefinendo una particolare regola di calcolo.

• La seconda forma di non determinismo è legata alla scelta di qualeclausola del programma P utilizzare in un passo di risoluzione, e vienerisolta definendo una strategia di ricerca.

Page 33: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

33

REGOLA DI CALCOLO

• Una regola di calcolo è una funzione che ha come dominio l'insieme deigoal e che seleziona un suo atomo Am dal goal

:-A1,...,Am-1,Am,Am+1,...,Ak, (Am :atomo selezionato).

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 al primo passo, unificando l’atomosum(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 al primo passo, unificando l’atomosum(s(0),0,s(0)) con la testa di CL2, si avrà:

G1 = :- sum(0,s(0),s(0)),sum(0,0,0).

Page 34: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

34

INDIPENDENZA DALLA REGOLA DI CALCOLO

• La regola di calcolo influenza solo l'efficienza

• Non influenza né la correttezza né la completezza del dimostratore.

• Proprietà (Indipendenza dalla regola di calcolo)

– Dato un programma logico P, l'insieme di successo di P non dipende

dalla regola di calcolo utilizzata dalla risoluzione SLD.

Page 35: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

35

STRATEGIA DI RICERCA

• Definita una regola di calcolo, nella risoluzione SLD resta un ulterioregrado di non determinismo poiché possono esistere più teste diclausole unificabili con l'atomo selezionato.

sum(0,X,X). (CL1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2)

G0 = :-sum(W,0,K).

– Se si sceglie la clausola CL1 si ottiene il risolvente

G1 = :-

– Se si sceglie la clausola CL2 si ottiene il risolvente

G1 = :- sum(X1,0,Z1)

Page 36: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

36

STRATEGIA DI RICERCA

• Questa forma di non determinismo implica che possano esistere più soluzioni alternative per uno stesso goal.

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

Page 37: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

37

ALBERI SLD

• Dato un programma logico P, un goal G0 e una regola di calcolo R, unalbero 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 figlioper 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.

Page 38: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

38

ALBERI SLD

• A ciascun nodo dell'albero può essere associata una profondità.

– La radice dell'albero ha profondità 0, mentre la profondità di ogni altro

nodo è quella del suo genitore più 1.

• 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 quantoriguarda sia l’ampiezza sia la profondità. Tuttavia non influisce sucorrettezza e completezza. Quindi, qualunque sia R, il numero dicammini di successo (se in numero finito) è lo stesso in tutti gli alberiSLD costruibili per P ∪ {G0} .

• R influenza solo il numero di cammini di fallimento (finiti ed infiniti).

Page 39: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

39

ALBERI SLD: ESEMPIO

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”

:-sum(W,0,0),sum(W,0,K)

CL1 s1= {W/0}

:-sum(0,0,K)

CL1 s1= {K/0}

:-

Page 40: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

40

ALBERI SLD: ESEMPIO

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”

:-sum(W,0,0),sum(W,0,K)

CL1s1= {W/0,K/0}

CL1s2= {X1/0}

:-

CL1 CL2s4={X1/0,Z1/0} s5={X1/s(X2),K1/s(Z2)}

:-sum(s(0),0,0) :-sum(s(s(X2)),0,0),sum(X2,0,Z2)

fail

.....

:-sum(0,0,0)

CL2 s3={W/s(X1),K/s(Z1)}

:-sum(s(X1),0,0),sum(X1,0,Z1)

Page 41: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

41

ALBERI SLD: ESEMPIO

• Confronto albero SLD con regola di calcolo left most e right most:

– In entrambi gli alberi esiste una refutazione SLD, cioè un cammino (ramo) di successo il cui nodo finale è etichettato con ”:-".

• La composizione delle sostituzioni applicate lungo tale camminogenera la sostituzione di risposta calcolata {W/0,K/0}.

• SI noti la differenza di struttura dei due alberi. In particolare cambianoi rami di fallimento (finito e infinito).

Page 42: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

42

ALBERI SLD LEFT MOST: ESEMPIO (2)

genitore(a,b). (R1)

genitore(b,c). (R2)

antenato(X,Z):-genitore(X,Z) (R3)

antenato(X,Z):-genitore(X,Y),antenato(Y,Z) (R4)

G0 :- antenato(a,c)

:- antenato(a,c)

R3 s={X2/a,Z2/c}R4 s1={X1/a,Z1/c}

:-genitore(a,c) :-genitore(a,Y1),antenato(Y1,c)

failR1 s2={Y1/b}

:-antenato(b,c)

R3 R4 s3={X3/b,Z3/c}

:-genitore(b,c) :-genitore(b,Y3),antenato(Y3,c)

R2 R2 s4={Y3/c}

:- :-antenato(c,c)

fail

Page 43: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

43

ALBERI SLD LEFT MOST: ESEMPIO (2)sum(0,X,X). (CL1)

sum(s(X),Y,s(Z)):- sum(X,Y,Z). (CL2)

G0= :- sum(A,B,s(0)),sum(A,s(0),B).

– La query rappresenta il sistema di equazioni

– Per l’unica derivazione di successo, la composizione delle sostituzioniapplicate (cioè {A/0,B/s(0),X1/s(0)}{X2/s(0)}), ristretta alle

variabili del goal G0, produce la risposta calcolata: {A/0,B/s(0)}

A+B=1

B-A=1

:- sum(A,B,s(0)),sum(A,s(0),B)

CL1 CL2

{X2/s(0)}

{A/0,B/s(0),X1/s(0)} {A/s(X3),B/Y3,Z3/0}

:- sum(0,s(0),s(0)) :-sum(X3,Y3,0),sum(s(X3),s(0),Y3)

CL1 CL1 {X3/0,Y3/0,X4/0}

:-

:-sum(s(0),s(0),0)successo

fail

Page 44: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

44

STRATEGIA DI RICERCA

• La realizzazione effettiva di un dimostratore basato sulla risoluzioneSLD richiede la definizione non solo di una regola di calcolo, ma anchedi una strategia di ricerca che stabilisce una particolare modalità diesplorazione dell'albero SLD alla ricerca dei rami di successo.

• Le modalità di esplorazione dell’albero piu’ comuni sono:

– depth first

– breadth first

• Entrambe le modalità implicano l’esistenza di un meccanismo dibacktracking per esplorare tutte le strade alternative che corrispondono

ai diversi nodi dell’albero.

Page 45: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

45

STRATEGIA DEPTH-FIRST

– Ricerca in profondità: vengono prima esplorati i nodi a profonditàmaggiore. NON COMPLETA

N1

N2 N5

N3 N4 N6 N7

N9 N8

1

2

3

4

5

6

7 8

9

Profondità 0

Profondità 1

Profondità 2

Profondità 3

Page 46: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

46

STRATEGIA BREADTH-FIRST

– Ricerca in ampiezza: vengono prima esplorati i nodi a profonditàminore. COMPLETA

N1

N2 N5

N3 N4 N6 N7

N9 N8

1

2 3

4 5 6 7

8 9

Profondità 0

Profondità 1

Profondità 2

Profondità 3

Page 47: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

47

STRATEGIE DI RICERCA E ALBERI SLD

• Nel caso degli alberi SLD, lo spazio di ricerca non è esplicito, maresta definito implicitamente dal programma P e dal goal G0.

– I nodi corrispondono ai risolventi generati durante i passi di risoluzione.

– I figli di un risolvente Gi sono tutti i possibili risolventi ottenuti unificando

un atomo A di Gi, selezionato secondo una opportuna regola di calcolo,

con le clausole del programma P.

– Il numero di figli generati corrisponde al numero di clausole alternative

del programma P che possono unificare con A.

• Agli alberi SLD possono essere applicate entrambe le strategiediscusse in precedenza.

– Nel caso di alberi SLD, attivare il “backtracking” implica che tutti i legami

per le variabili determinati dal punto di “backtracking” in poi non devonoessere più considerati.

Page 48: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

48

PROLOG E STRATEGIE DI RICERCA

• Il linguaggio Prolog, adotta la strategia in profondità con"backtracking" perché può essere realizzata in modo efficienteattraverso un unico stack di goal.

– tale stack rappresenta il ramo che si sta esplorando e contiene opportuni

riferimenti a rami alternativi da esplorare in caso di fallimento.

• Per quello che riguarda la scelta fra nodi fratelli, la strategia Prolog liordina seguendo l'ordine testuale delle clausole che li hannogenerati.

• La strategia di ricerca adottata in Prolog è dunque non completa.

Page 49: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

49

PROLOG E STRATEGIE DI RICERCA

collega(a,b). (R1)

collega(c,b). (R2)

collega(X,Z):-collega(X,Y),collega(Y,Z).(R3)

collega(X,Y):-collega(Y,X). (R4)

Goal: :-collega(a,c) (G0)

• La formula collega(a,c) segue logicamente dagli assiomi, ma la

procedura di dimostrazione non completa come quella che adotta la

strategia in profondità non è in grado di dimostrarlo.

Page 50: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

50

ALBERO SLD CON RAMO INFINITO:-collega(a,c)

R3 R4

:-collega(a,Y1),collega(Y1,c) :-collega(a,c)

R1 {Y1/b}R2 R3 R3 R4

:-collega(b,c)

R3R4

:-collega(b,Y2),collega(Y2,c) :-collega(c,b)

R3 R1R2 R3

:-collega(b,Y3),collega(Y3,Y2),collega(Y2,c)

:-

R4

Ramo infinito

R3

Page 51: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

51

RIASSUMENDO…

• La forma di risoluzione utilizzata dai linguaggi di programmazionelogica è la risoluzione SLD, che in generale, presenta due forme dinon determinismo:

– la regola di computazione

– la strategia di ricerca

• Il linguaggio Prolog utilizza la risoluzione SLD con le seguenti scelte

– Regola di computazione

• Regola "left-most"; data una "query":

?- G1, G2, ..., Gn.

viene sempre selezionato il letterale più a sinistra G1.

– Strategia di ricerca

• In profondità (depth-first) con backtracking cronologico.

Page 52: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

52

RISOLUZIONE IN PROLOG

• Dato un letterale G1 da risolvere, viene selezionata la prima clausola

(secondo l’ordine delle clausole nel programma P) la cui testa èunificabile con G1.

• Nel caso vi siano più clausole la cui testa è unificabile con G1, larisoluzione di G1 viene considerata come un punto di scelta (choicepoint) nella dimostrazione.

• In caso di fallimento in un passo di dimostrazione, Prolog ritorna in

backtracking all’ultimo punto di scelta in senso cronologico (il piùrecente), e seleziona la clausola successiva utilizzabile in quel puntoper la dimostrazione.

Ricerca in profondità con backtracking cronologico dell'albero di dimostrazione SLD.

Page 53: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

53

RISOLUZIONE IN PROLOG: ESEMPIO

P1 (cl1) p :- q,r.

(cl2) p :- s,t

(cl3) q.

(cl4) s :- u.

(cl5) s :- v.

(cl6) t.

(cl7) v.

:- p.

fail

:- p (1)

:- q,r (2) :- s,t (4)

:- r (3)

(cl1) (cl2)

(cl3)

:- u,t (5)

(cl4) (cl5)

:- v,t

:- t (7)

(6)

(cl6)

(cl7)

fail

Page 54: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

54

RISOLUZIONE IN PROLOG: INCOMPLETEZZA

• Un problema della strategia in profondità utilizzata da Prolog e’ la sua incompletezza.

P2 (cl1) p :- q,r.

(cl2) p.

(cl3) q :- q,t.

:- p.

:- p (1)

:- q,r (2)

:- q,t,r (3)

(cl1)

(cl3)

:- q,t,t,r

………ramo

infinito

(4)

(cl3)

(cl2)

Cammino

esplorato da Prolog

Page 55: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

55

ORDINE DELLE CLAUSOLE • L’ordine delle clausole in un programma Prolog è rilevante.

P2 P3

(cl1) p :- q,r. (cl1’’’’) p.

(cl2) p. (cl2’’’’) p :- q,r.

(cl3) q :- q,t. (cl3’’’’) q :- q,t.

• I due programmi P2 e P3 non sono due programmi Prolog equivalenti.Infatti, data la "query": :-p. si ha che

– la dimostrazione con il programma P2 non termina;

– la dimostrazione con il programma P3 ha immediatamente successo.

• Una strategia di ricerca in profondità può essere realizzata in modoefficiente utilizzando tecniche non troppo differenti da quelle utilizzatenella realizzazione dei linguaggi imperativi tradizionali.

Page 56: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

56

ORDINE DELLE CLAUSOLE: ESEMPIO P4 (cl1) femmina(carla).

(cl2) femmina(maria).

(cl3) femmina(anna).

(cl4) madre(carla,maria).

(cl5) madre(carla,giovanni).

(cl6) madre(carla,anna).

(cl7) padre(luigi,maria).

(cl8) sorella(X,Y):- femmina(X),

padre(Z,X),

padre(Z,Y),

div(X,Y).

(cl9) sorella(X,Y):- femmina(X),

madre(Z,X),

madre(Z,Y),

div(X,Y).

(cl10) div(carla,maria).

(cl11) div(maria,carla).

..... div(A,B). per tutte le coppie (A,B) con A≠≠≠≠B

E la “query”: :- sorella(maria,W).

Page 57: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

57

ORDINE DELLE CLAUSOLE: ESEMPIO

(1) :- sorella(maria,W)

:- femmina(maria),padre(Z,maria),

padre(Z,W), div(maria,W) (2)

{X/maria,Y/W}(cl8)

:- padre(Z,maria),padre(Z,W),div(maria,W)

(cl2)

{Z/luigi} (cl7)

:- padre(luigi,W),div(maria,W)

:- div(maria,maria)

(4)

:- femmina(maria),madre(Z,maria),

madre(Z,W),div(maria,W)

(cl2)

(6)

(cl9) {X/maria,Y/W}

{W/maria} (cl7)

fail

?- madre(Z,maria),madre(Z,W),

div(maria,W)

{Z/carla} (cl4)

:- madre(carla,W),div(maria,W)

:- div(maria,maria)

fail

:-div(maria,giovanni) :-div(maria,anna)

{W/giovanni}

{W/maria}{W/anna}

(cl6)

(5)

(3)(7)

(cl5)

(cl4)

(8)

(9) (10) (11)Successo con

risposta

calcolata

W/giovanni

Successo con

risposta

calcolata

W/anna

Page 58: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

58

SOLUZIONI MULTIPLE E DISGIUNZIONE

• Possono esistere più sostituzioni di risposta per una “query”.

– Per richiedere ulteriori soluzioni è sufficiente forzare un fallimento nel

punto in cui si è determinata la soluzione che innesca il backtracking.

– Tale meccanismo porta ad espandere ulteriormente l ’ albero didimostrazione SLD alla ricerca del prossimo cammino di successo.

• In Prolog standard tali soluzioni possono essere richieste mediantel'operatore “; “.:- sorella(maria,W).

yes W=giovanni;

W=anna;

no

• Il carattere ";" può essere interpretato come

– un operatore di disgiunzione che separa soluzioni alternative.

– all'interno di un programma Prolog per esprimere la disgiunzione.

Page 59: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

59

INTERPRETAZIONE PROCEDURALE

• Prolog può avere un’interpretazione procedurale. Una procedura èun insieme di clausole di P le cui teste hanno lo stesso simbolopredicativo e lo stesso numero di argomenti (arità).

– Gli argomenti che compaiono nella testa della procedura possono essere

visti come i parametri formali.

Una “query” del tipo: :- p(t1,t2,...,tn).

è la chiamata della procedura p. Gli argomenti di p (ossia i termini

t1,t2,...,tn) sono i parametri attuali.

– L’unificazione è il meccanismo di passaggio dei parametri.

• Non vi è alcuna distinzione a priori tra i parametri di ingresso e iparametri di uscita (reversibilità).

Page 60: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

60

INTERPRETAZIONE PROCEDURALE (2)

• Il corpo di una clausola può a sua volta essere visto come una sequenza di chiamate di procedure.

• Due clausole con le stesse teste corrispondono a due definizioni alternative del corpo di una procedura.

• Tutte le variabili sono a singolo assegnamento. Il loro valore è unico durante tutta la computazione e slegato solo quando si cerca una

soluzione alternativa (“backtracking”).

Page 61: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

61

ESEMPIO

pratica_sport(mario,calcio).

pratica_sport(giovanni,calcio).

pratica_sport(alberto,calcio).

pratica_sport(marco,basket).

abita(mario,torino).

abita(giovanni,genova).

abita(alberto,genova).

abita(marco,torino).

:- pratica_sport(X,calcio).

"esiste X tale per cui X pratica il calcio?"

yes X=mario;

X=giovanni;

X=alberto;

no

:- pratica_sport(giovanni,Y).

"esiste uno sport Y praticato da giovanni?"

yes Y=calcio;

no

Page 62: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

62

ESEMPIO (2)

:- pratica_sport(X,Y).

"esistono X e Y tali per cui X pratica lo sport Y"

yes X=mario Y=calcio;

X=giovanni Y=calcio;

X=alberto Y=calcio;

X=marco Y=basket;

no

:- pratica_sport(X,calcio), abita(X,genova).

"esiste una persona X che pratica il calcio e abita a Genova?””””

yes X=giovanni;

X=alberto;

no

Page 63: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

63

ESEMPIO (3)

• A partire da tali relazioni, si potrebbe definire una relazioneamico(X,Y) “X è amico di Y” a partire dalla seguente specifica: “X èamico di Y se X e Y praticano lo stesso sport e abitano nella stessa

città”.amico(X,Y):- abita(X,Z)

abita(Y,Z),

pratica_sport(X,S),

pratica_sport(Y,S).

:- amico(giovanni,Y).

““““esiste Y tale per cui Giovanni e amico di Y?””””

yes Y = giovanni;

Y=alberto;

no

• si noti che secondo tale relazione ogni persona è amica di se stessa.

Page 64: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

64

ESEMPIO (4)

padre(X,Y) "X è il padre di Y"

madre(X,Y) "X è la madre di Y"

zia(X,Y) "X è la zia di Y"

zia(X,Y) :-sorella(X,Z),padre(Z,Y).

zia(X,Y) :-sorella(X,Z),madre(Z,Y).

(la relazione "sorella" è stata definita in precedenza).

• Definizione della relazione "antenato" in modo ricorsivo:

"X è un antenato di Y se X è il padre (madre) di Y"

"X è un antenato di Y se X è un antenato del padre (o

della madre) di Y"

antenato(X,Y) "X è un antenato di Y"

antenato(X,Y) :- padre(X,Y).

antenato(X,Y) :- madre(X,Y).

antenato(X,Y) :- padre(Z,Y),antenato(X,Z).

antenato(X,Y) :- madre(Z,Y),antenato(X,Z).

Page 65: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

65

VERSO UN VERO LINGUAGGIO DI

PROGRAMMAZIONE

• Al Prolog puro devono, tuttavia, essere aggiunte alcunecaratteristiche per poter ottenere un linguaggio di programmazioneutilizzabile nella pratica.

• In particolare:

– Strutture dati e operazioni per la loro manipolazione.

– Meccanismi per la definizione e valutazione di espressioni e funzioni.

– Meccanismi di input/output.

– Meccanismi di controllo della ricorsione e del backtracking.

– Negazione

• Tali caratteristiche sono state aggiunte al Prolog puro attraverso ladefinizione di alcuni predicati speciali (predicati built-in) predefiniti

nel linguaggio e trattati in modo speciale dall’interprete.

Page 66: Prolog01-risoluzione.ppt - Compatibility Modelia.disi.unibo.it/Courses/AI/fundamentalsAI2018-19/... · 6 PROVA DI UN GOAL • Un goal viene provato provando i singoli letterali da

66

Per utilizzare Prolog: software

SWI Prolog: un Prolog molto usato e

particolarmente ben integrato per il Semantic

Web

tuProlog: un Prolog basato su Java usato

anche per applicazioni internet.

Liberamente scaricabili da:

http://www.swi-prolog.org

http://apice.unibo.it/xwiki/bin/view/Tuprolog/