Caratteristiche base del Prolog

 

 

 

 

 

 

 

 

 

Stefania Costantini

Corso di Laurea in Informatica

Università degli Studi di L’Aquila

 

 

 

 

 

 

 

 

 

 

 

Testo di riferimento:

I. Bratko, Prolog Programming far Artificial lntelligence, Addison Wesley.

 


 

 

 

 

 

Programma: relazione dati-risultati

 

Relazione calcolabile:

à descrizione finita

àin termini di un insieme finito di relazioni fondamentali

à relazioni fondamentali: effettuabili in modo finito

 

Linguaggi procedurali:

à descrizione passi per calcolare il risultato dai dati

 

Linguaggi non procedurali:

à descrizione relazione da calcolare

 

 


 

 

 

 

 

Linguaggi non procedurali

 

● Linguaggi Funzionali (applicativi)

 

             à lambda-calcolo (Church, 1930)

                                       (Schoenfinlkell, Curry,ecc.)

à notazione LISP (McCarthy, 1950)

à descrizione computazione: funzioni e    composizione

 

● Linguaggi Logici

              à calcolo dei predicati dell’ 1°ordine (Frege, 1900)

                     (Horn, Robinson, ecc. )

            àProlog (PROgramming in LOGic) .

                   (Kowalski e Colmerauer, 1970)

            à descrizione computazione: relazioni

 


Prolog: basato sul linguaggio delle Clausole di Horm

 

Programmi Prolog:

● Fatti 

● Regole  (o clausole)

● Quesiti

 

à Fatti (o regole unitarie)

 

simpatico (carlo).

amica (anna,francesca).

padre (giorgio,carlo).

studente (nome (anna) , cognome (carletti) ).

 

r(t1 ,...,tn).

         r atomo  

 

    t1 ,...,tn termini

 

termine il cui funtore e' un predicato: atomo

 

­

 


Programmi Prolog:

 

Regole

simpatico (alberto ) : - e_di_buon_umore (alberto) . amica(anna,francesca) :- gentile(francesca).

nonno (marco, carlo) :- padre(marco, giorgio),

              padre (giorgio,carlo) .

 

A :- B1,...,Bn

         A, B1,...,Bn  atomi

 

à A se B1 e ... Bn

à se valgono B1  ... Bn allora vale anche A

à e se non valgono B1 ... Bn  ? Non sappiamo se vale A, che potrebbe derivare da altre regole

 

à Quindi, regola del programma considerata come Regola di Inferenza: da B1  ... Bn derivo A

à Non si applica il contropositivo:

se non valgono B1 ... Bn  non derivo Ø A

 

 


Significato di fatti e regole: Relazioni

 

Relazione n-aria R su dominio D:    

 

                                         

 

R si può rappresentare mediante un predicato p dove:

 

                          

  sono termini

 

In Prolog:

 

fatti: asseriscono incondizionatamente l'appartenenza di una n-upla ad una relazione

 

amico (carlo, paolo) .

 

regole:asseriscono l'appartenenza di una n-upla ad una relazione in base a certe condizioni

 

 

amico(gianni,anna):- simpatica(anna).

 


Programmi Prolog:

 

         à Quesiti (o Query)

simpatico (carlo) .

amica (anna, francesca) .

padre (giorgio, carlo) .

studente(nome(anna), cognome(carletti)).

 

?- simpatico(carlo).

yes

 

?-amica (anna, francesca).

yes

 

?-amica (anna, marina).

no

 

Quesito:    ?-G1,...,Gn             con G1 ,...,Gn atomi

 


Programmi Prolog:

 

à Quesiti

simpatico (carlo) .

amica (anna, francesca) .

padre (giorgio, carlo).

studente (nome (anna), cognome (carletti) ) .

 

?- simpatico(carlo), amica(anna,francesca).

yes

 

?-amica (anna, francesca), simpatico(carlo).

 

yes

 

?-simpatico(carlo), amica(anna,marina).
no

 

?-giovane (carlo) .

 

no

 

?-amica (anna, francesca).

 

no


Programmi Prolog:

 

à Regola

        nonno (marco, carlo) :- padre(marco, giorgio),

                                        padre (giorgio,carlo).

 

padre ( alfredo, giovanni).

padre (marco, giorgio).

madre(anna, giorgio).

padre (giorgio, carlo).

 

?-nonno (marco, carlo).

 

----------------------------------->1 padre(marco, giorgio)

----------------------------------->2 padre(giorgio, carlo)

 

·       Dichiarativamente: predicato definito in funzione di altri predicati.

·       Pragmaticamente:

o     Regola: definizione di procedura

o     Quesito: chiamata della procedura

=> chiamata (in ordine) delle procedure

                              nella definizione

 

 


Programmi Prolog:

 

à Quesiti con variabili

         nonno (marco, carlo)  :- padre(marco, giorgio),

                                             padre(giorgio,carlo).

 

padre (alfredo, giovanni).

padre (marco, giorgio).

madre(anna, giorgio).

padre (giorgio, carlo).

 

?-padre:(X,carlo).

X = giorgio

 

?-padre (giorgio, Y).

Y = carlo

?-

        padre(X,Y) .

X = alfredo, Y = giovanni ;

X = marco, Y = giorgio;

X = giorgio, Y = carlo

 


Relazioni con variabili

 

Una variabile prende il posto di un generico termine.

ð              usando variabili, un singolo fatto o regola prende il posto di più asserzioni

 

amico (gianni,X):- simpatico (X) .

*     qualsiasi sia X,

               se X e' simpatico allora X e' amico di giorgio

 

à   la variabile X si intende quantificata universalmente

 

Tutte le istanze di X nella stessa clausola (fatto o regola) si riferiscono allo stesso oggetto

 

Se la variabile X compare in un' altra clausola, va considerata una variabile diversa.

 

Le variabili possono essere legate a termini mediante il meccanismo di unificazione.

 


Relazioni con variabili

 

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

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

padre(john,bill) .

padre (bill,mary) .

 

Lettura

Per tutti i termini X e Z, X e' il nonno di Z se

 

*   esiste un termine Y tale che X è il padre di Y

       e Y è il padre di Z

 

oppure

 

*    esiste un termine Y tale che X e' il padre di Y

       e Y e' la madre di Z

 

 

?-nonno (X, Y) .

 

Lettura

Esistono due termini X e Y tale che X e' il nonno di Y?

 


Quesiti con variabili

 

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

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

padre (john, bill).                                             (1)

padre (bill, mary) .                                           (2)

padre (bill, thom).                                            (3)

padre (thom,chris).                                          (4)                                                                

madre(mary,june).                                           (5)

 

 

?-nonno (X, Y) .

X = john, Y = mary;        /*1+2*/    

X = john, Y = thom;        /*1+3*/    

 X = mary, Y = june;       /*2+5*/      

 X = bill, Y = chris;           /*3+4*/

no (non si trovano latri risultati)

 

 

Nota: Le variabili logiche non possono essere riassegnate! Durante una computazione, se vengono istanziate mantengono lo stesso valore fino al raggiungimento di un risultato.

Se si richiede (col ‘;’) di cercare un’altra soluzione, allora vengono disistanziate e (se possibile) reistanziate a valori diversi.


 

 

 

Caratteristiche base del Prolog:

Unificazione

Risoluzione

Definizioni ricorsive

 

 

 

 

Stefania Costantini

 

 

 

 

 

Stefania Costantini

Corso di Laurea in Informatica

Università degli Studi di L’Aquila

 

 

 

 

 

 

 


Prolog: linguaggio delle clausole di Horn

 

Elementi principali:

 

·       termini

·       atomi

·       fatti e regole

 

Un termine (o atomo) puo' essere:

 

v  una costante

                              (ad es. pippo r2d2 524 mia_cost)

 

v  una variabile ­(V, X, Pippo, JK_234)

 

v  una struttura

 

 

 

Una struttura e' composta da:

 

*  funtore n-ario (simbolo di predicato o funzione)

*  n termini come argomenti

 


Descrizione dei Dati in Prolog

 

              Strutture dati del Prolog: Termini 

*  Atomi

*  Variabili

*  Strutture

 

Costanti: nomi di oggetti, funzioni, relazioni, denotano elementi del dominio di interesse

 

Ø   Sequenza di lettere, cifre e ‘_’

Ø   Primo carattere: lettera maiuscola

 

 

Esempi:

 

giorgio

r2d2

1524

mio_atomo1

 

 

 

Numeri:  atomi particolari con operazioni predefinite


Descrizione dei Dati in Prolog,

 

                    Variabili: identificatori che denotano oggetti

v  sequenza di, lettere, cifre e '-'

v  primo carattere:: lettera maiuscola

 

 

 

 

Esempi:

 

V

L1

Antenato

                  Loc_var

Pippo _ 1

 


Descrizione dei Dati in Prolog

 

● Struttura: oggetto gerarchico

                               à organizzato ad albero, composto da

o       nome (funtore)

o       argomenti

 

compositore (bach)

compositore(nome(berlioz), nazionalita(francese)).

compositore (nome (george,gershwin) , nazionalita (americana) ,

composizione (rapsodia_in _blu) ).

compositore (verdi, opere (aida, traviata, rigoletto).

 

 

 

 

 


Descrizione dei Dati in Prolog

 

Riassumendo:

 

 

 

à Un termine può essere:

 

*  una costante

                 (ad es. pippo  r2d2  524  mio_atomo)

 

*  una variabile

 

*  una struttura

 

 

 

 

 

à Una struttura e' composta da:

 

v        funtore n-ario

 

v        n termini come argomenti

 


Unificazione

 

governa il procedimento di istanziazione delle variabili

 

E' un procedimento che tenta di rendere uguali due termini,eventualmente istanziando le variabili in essi contenute

 

·       due costanti unificano se sono uguali

 

·       due variabililii unificano (condivisione)

 

·       una variabile ed un termine unificano istanziando la      variabile al termine

 

·       due strutture unificano se:

*   hanno lo stesso funtore

*   hanno lo stesso numero di argomenti (arità)

*  gli argomenti corrispondenti unificano

 


Esempi

 

a

a

unificano

f(a)

f(a)

unificano

g(f(a))

g(f(a))

unificano

V

a

unificano con V/a

X

g(s)

unificano con X/g (5)

X

Y

unificano con X/Y (o Y/X)

f(a)

f(R)

unificano con A/a

f(X)

f(Y)

unificano con X/Y (o Y/X)

p(a,X)

p(Y,c)

unificano con X/c e Y la

p(a,X)

p(Y,f(c))

unificano con X/f(c) e V/a

q(f(X),a)

q(f(b),V)

unificano con X/b e V/a

 

 

L'insieme delle sostituzioni Variabile/termine ottenute unificando due strutture si dice unificatore delle strutture


Unificatore più generale

 

L’ Unificatore più generale (Most general Unifier, o mgu) e’ quello che produce il minor numero possibile di istanziazioni, ossia non fa “ipotesi” non strettamente necessarie sul valore delle variabili.

 

p(X,R,V,a) e p(f(b),Y,Z,K)

 

Un unificatore: {X/f(b), R/Y/pippo, V/Z, K/a}

 

 

Un altro unificatore: {X/f(b), R/Y/minnie, V/Z/paperina, K}

 

 

Lo mgu: {X/f(b), K/a}

 

 

Nel linguaggio delle clausole di Horn (e in Prolog) lo mgu esiste sempre ed è unico

 

Applicazione degli unificatori

 

Gli unificatori in genere sono indicati con lettere greche, ad es. δ. L'applicazione di un unificatore δ ad un termine t è indicata con tδ, e produce un nuovo termine t' in cui sono state effettuate tutte le sostituzioni variabile/valore indicate in δ.

 

Nell'esempio precedente, se t1 = p(X,R,V,a) e p(f(b),Y,Z,K),

ed inoltre δ1 =  {X/f(b), R/Y/pippo, V/Z, K/a}

e δ2 = {X/f(b), R/Y/minnie, V/Z/paperina, K}

si ha

 

t1 δ1 = t2 δ1 = p(f(b),pippo,V,a)  

    Indifferentemente, p(f(b),pippo,Z,a) perchè V e Z sono in condivisione.

    Questo vuol dire che se l'unificazione è utilizzata durante il processo

    di dimostrazione di una query, il valore preso dall'una sarà assunto

    anche dall'altra.

 

t1 δ2 = t2 δ2 = p(f(b), minnie, paperina, a)

 

Lo mgu di indica di solito con s.

t1 s = t2 s = p(f(b), R, V, a) = p(f(b), Y, Z, a)



Risoluzione

 

Se A:-B1,...,Bn e B1,...,Bn sono veri allora A e' vero

 

Dalle clausole:

        

Si derivano per risoluzione mediante unificazione

 

amico (gianni, carlo)

amico (gianni, giacomo)

 

 

 

Quesiti (o query)

 

?-amico(Gianni,Y).

Esistono dei valori per cui valga amico(Gianni,Y)?

?-amico(X,Y).

Esistono dei valori per cui valga amico(X,Y)?

 

 

Le variabili nei quesiti sono quantificare esistenzialmente.


Risposte ai quesiti

 

Il quesito, o query, o goal

?-G

e' dimostrato (riceve risposta positiva) se:

 

*  Esiste una clausola A:-B1,…,Bn dove G e A unificano

*  Si riesce a dimostrare B1,…,Bn

 

La risposta al quesito può essere:

 

à "yes" oppure "no'" se G non contiene variabili

 

à la sostituzione ottenuta per le variabili di G

 

           

     ?-amico(gianni, Y) .

ha due risposte:  

>> X/carlo

>> X/giacomo

­

 


Definizioni ricorsive

 

Utilizzano la relazione che si sta definendo nel corpo della definizione stessa

 

Rendono possibile descrivere ogni funzione calcolabile mediante un numero finito di regole

(due regole permettono di generare tutti i numeri naturali...)

 

Struttura di una definizione ricorsiva:

 

Ø   passi base: casi semplici per cui il risultato e' noto

  

Ø   passi ricorsivi: il risultato viene definito come combinazione di risultati parziali calcolati su termini più semplici

 


Definizioni ricorsive: i numeri naturali

 

       Procedura nat(X) <=> X e' un numero naturale

            nat(O).

      nat (suc (X) ) :- nat (X) .

 

In questa rappresentazione:

1       e ' rappresentato come suc(0)

2       e' rappresentato come suc(suc(0))

………

 

       Procedura somma (X, Y, Z) <=> la somma di X e Y è Z

 

         somma(X,O,X):- nat(X).

somma(O,X,X):- nat(X),

somma (suc (X) ,suc (Y) ,suc (suc (Z))) :-­

nat(X) , nat(Y) , somma(X,Y,Z).

 


Strategia depth-first (ricerca in profondità)

 

La strategia depth-first non e' fair, e quindi non e' completa

 

Motivo: seleziona sempre la sottometa più a sinistra, e usa sempre la prima clausola

 

Se questa combinazione causa un loop non riesce a uscirne

 

a(X,Y) :-a(X,Z) ,a(Z,Y).

a(a,b).

a (b,c).

M = {a(a,b) , a(b,c), a(a,c)}

?-a(a,c) ,    /*Loop*/

 

a(a,b).            % passi base della ricorsione

a(b,c).            % sempre per primi

a(X,Y) :-a(X,Z), a(Z,Y).     

 

?-a(a,d) ,   /*Loop* /

 

Nota: si adotta la depth-first per ragioni di efficienza, contando sul programmatore per prevenire i loop

 

Semantica (per grandi linee) del linguaggio delle clausole di Horn

 

Modello di un programma: sottoinsieme della Base dove tutte le clausole del programma sono vere

 

clausole = fatti o regole (quantificati universalmente)

 

A:-B1,...,Bn.

 

C.

 

* Un fatto C e' vero in ogni modello

* Una regola A:-B1,...,Bn e' vera in un modello se

·       Sia A che B 1 , . . . , Bn sono in modello

·       B1,...,Bn non sono nel modello (A può esserci o meno)

Nota: se una proposizione A contiene variabili, dire

                                        "A è nel modello"

significa che il modello contiene tutte le istanze di A ottenute sostituendo le variabili con termini chiusi (o round, ossia privi di variabili)


Modello minimo

 

p(a).

q (b).

q (X) : -p (X)

 

Questo programma ha più di un modello:

 

p(a), q(a), q(b)                  M1

 

p(a), q(a), q(b), p(b)                  M2=Base di P

 

 

M1 è "migliore"', perché è  totalmente determinato da P

 

In generale: i modelli di ogni programma hanno una intersezione, il modello minimo

 

Il modello minimo contiene tutte e sole le conseguenze logiche del programma, ossia le proposizioni la cui verità è determinata dalla verità delle clausole del programma

 

Il modello minimo si può calcolare come funzione del programma


Calcolo del modello

 

*  Inserisci nel modello tutti i fatti

     (o tutte le loro istanze se non sono ground)

 

*  Ripeti fino a che e' possibile:

inserisci nel modello la testa di una regola

quando il corpo è    già presente

 

Esempio: modello finito

 

       Programma

p (a).

q (b) .

q (X) :-p (X).

 

 

Costruzione del Modello

 

ü   p(a) q(b)

ü   q (a)

 

Modello Minimo

 

M = {p(a),q(b),q(a)}


Esempio: modello infinito

 

Programma

 

nat(0).

nat (suc (X) ) : -nat (X) .

 

Costruzione del modello Minimo

 

ü   nat(0)

 

ü   nat(suc(0)

       nat (suc (suc (0))

 nat (suc (suc (suc (0) ) ) )

       nat (suc (suc (suc (suc (0) ) ) ) )

 

 

Modello Minimo

 

M = {nat(0),nat(suc(0)),nat(suc(suc(0))), . . .}

 


Clausole il Logica del Prim’Ordine

(First Order Predicate Logic, FOPL)

 

A:-B1,...,Bn.

 

sta per

 

A Ü  B1,...,Bn      (implicazione logica)

 

ossia

 

A Ú ØB1 ÚÚ ØBn   

dove “Ú” è la disgiunzione e “Ø” la negazione

A,B1,...,Bn sono chiamati “atomi” o “letterali positivi” mentre i “ØBn” sono “letterali negativi”

 

Questa è una clausola di Horn perché contiene un solo letterale positivo.


Risoluzione in FOPL fra clausole di Horn

 

·       Clausole ground

 

  A Ú ØC

ØA Ú ØB

_______

ØC Ú ØB

 

Concetto sottostante: A e ØA sono sempre uno vero e uno falso. Entrambe le disgiunzioni date però si assumono essere vere. Allora, se A è falso ØC  dovrà essere vero. Invece, se A è vero (e quindi ØA è falso) ØC  dovrà essere vero. Non sapendo quale dei due casi si presenterà di volta in volta, si sa però che o ØC o ØB dovrà essere vero, il che formalmente significa che la disgiunzione ØC Ú ØB dovrà essere vera.

 

Analogamente se B e C sono

disgiunzioni di letterali negativi

 

·       Clausole non ground: se s è lo mgu di A1 ed A2, ossia A1s = A2s, allora

 

  A1 Ú ØC

ØA2 Ú ØB

_________

(ØC Ú ØB)s

 

  Risoluzione in FOPL fra clausole di Horn

 

Caso particolare:

  A

ØA

_______

clausola

vuota

contraddizione!

 

Concetto sottostante: A e ØA sono sempre uno vero e uno falso, per cui avere (soltanto)  A e ØA vuol dire essere caduti in contraddizione (che formalmente si esprime con la clausola vuota)

 

Esempio:

      Base di conoscenza (round)

 

ØA                    (1)

A Ú ØB              (2)

B                      (3)

 

Da 1 e 2 si deriva per risoluzione

ØB                    (4)

da 3 e 4 si deriva la clausola vuota (contraddizione!)

 


Risoluzione in Prolog

 

Esempio precedente:

 

A Ú ØB             

B                     

 

in Prolog si scrive

      A :- B.              (2)

      B.                     (3)

 

Inoltre, ØA è una query, indicata con ?-A.    (1)

 

Essa riesce esattamente con i passi mostrati sopra: dalla query (1) e dalla clausola (2) si deriva la nuova query

      ?- B                  (4) che sta per ØB.

Dalla nuova query e dalla clausola (unitaria) (3) si arriva alla clausola vuota, e la query è dimostrata.

 

Formalmente, fare una query vuol dire asserire la negazione della query stessa. Se per risoluzione si arriva alla clausola vuota, ossia ad una contraddizione, allora la query è dimostrata per assurdo.


Proprietà della Risoluzione

Come si comporta la risoluzione, rispetto al Modello Minimo?

Ossia, data la query

?-p (Arg1,.. , Argn)

il successo o fallimento è in relazione con l'appartenenza di p (Arg1,..,Argn) al Modello minimo?

 

Risposta: La risoluzione corretta e completa rispetto al Modello Minimo di un programma

 

*  E' corretta: tutte le proposizioni dimostrabili mediante risoluzione appartengono al modello minimo (sono conseguenze logiche programma)

*  E' completa: tutte le proposizioni che appartengono al modello minimo sono dimostrabili mediante risoluzione (ad una condizione!)

 

Condizione per la completezza: la strategia di risoluzione deve essere "fair"!!!

Cioè: ogni sottometa deve prima o poi essere risolta utilizzando ogni possibile clausola. La depth-first non è fair, sta al programmatore evitare i loop!

 

Descrizione dei Dati in Prolog

 

●Lista: caso particolare di struttura

 

[pippo, pluto, c123, f(a)]

 

● notazione [. . . ]

         àabbreviazione per strutture con funtore ‘.

 

. (pippo, . (pluto, . (c123, . (f(a) , []))))

 

● [] è un atomo speciale che sta per la lista vuota

 

        ● Liste

à primo elemento: testa (head)

à lista elementi rimanenti: coda, o corpo (tail)

 

 

[pippo | [pluto, c123, f(a)]]

 

[pippo, pluto | [c123, f(a)]]

 

[pippo, pluto, c123, f(a) | [] ]


Descrizione dei Dati in Prolog

 

 

*  Liste: simbolo speciale ‘|’

         separa i primi n elementi dalla lista dei rimanenti

          [ E1,…,En | [...] ]

 

 

 

[anna, carla]

=

[anna, carla | [] ]

[anna, carla]

=

[anna | [carla] ]

[anna, carla]

=

[anna | [carla | [] ]

[anna, carla]

=/=

[anna | carla]

[anna, carla]

=/=

[ [anna, carla] ]

[anna, carla]

=/=

[anna, carla, [] ]

 

 

 

*   Uso delle liste nei termini:

      compositori(nazionalità(tedesca),

                                         [bach,mozart,brahms]).