La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Linguaggi di Programmazione (AA 2002/2003) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - parte 2.

Presentazioni simili


Presentazione sul tema: "Linguaggi di Programmazione (AA 2002/2003) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - parte 2."— Transcript della presentazione:

1 Linguaggi di Programmazione (AA 2002/2003) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - parte 2

2 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 Un PROGRAMMA PROLOG e un insieme di clausole di Horn che rappresentano: FATTI – FATTI riguardanti gli oggetti in esame e le relazioni che intercorrono REGOLE – REGOLE sugli oggetti e sulle relazioni (SE…..ALLORA) GOAL – GOAL (clausole senza testa), sulla base della conoscenza definita Prolog

3 Programmazione logica e Prolog Clausole

4

5 clausole negative: domanda X 1 X n. B 1 B 2 B m ) negazione per applicare la refutazione ~ X 1 X n. B 1 B 2 B m ) X 1 X n. B 1 ~B 2 ~B m ) B 1 B 2 B m. clausole definite: - regoleA B 1 B 2 B m. - fattiA. goal clausole negative: (goal) B 1 B 2 B m. Programmazione logica e Prolog

6 programma logico Un programma logico: sum(0,X,X). sum(s(X),Y,s(Z)) :- sum(X,Y,Z). Possiamo interpretare s(N) come il successore del numero N allora 0, s(0), s(s(0)), s(s(s(0)))… rappresentano 0,1,2,3… Questo programma definisce la somma fra due numeri naturali. Programmazione logica e Prolog

7

8 ESECUZIONE DI UN PROGRAMMA Una computazione corrisponde al tentativo di dimostrare, tramite la risoluzione, che una formula segue logicamente da un programma (eun 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 lobiettivo e quello di trovare una sostituzione = {X1/s1,X2/s2,…,Xn/sn} dove si sono termini tale per cui P |= p(t1,t2,…,tm)]

9 Dato un insieme di clausole di Horn è possibile derivare la clausola vuota solo se c`è una sola clausola senza testa e tutte le altre clausole hanno la testa. la clausola goal G 0. non avrà testa Quindi in un programma logico P tutte le clausole debbono avere la testa mentre la clausola goal G 0. non avrà testa. Si deve dimostrare che da è possibile derivare la clausola vuota. Come? Se si tentassero ad ogni passo tutte le risoluzioni possibili e si aggiungessero le clausole inferite all insieme di partenza si avrebbe una esplosione combinatoria. Si deve adottare una strategia di soluzione opportuna. Programmazione logica e Prolog

10 Risoluzione ad input lineare La risoluzione avviene sempre fra lultimo goal derivato in ciascun passo e una clausola di programma, mai fra due clausole di programma o fra una clausola di programma ed un goal derivato in precedenza. Sia dato un programma logico P e un goal G 0. Si deve dimostrare che da è possibile derivare la clausola vuota. Programmazione logica e Prolog

11 La risoluzione avviene sempre fra lultimo goal e una clausola di programma. successo Si puo avere: successo (viene generata la clausola vuota) insuccesso finito insuccesso infinito La sostituzione di risposta è la sequenza di unificatori usati. Applicati alle variabili del goal iniziale danno la risposta. Programmazione logica e Prolog Risoluzione ad input lineare (SLD)

12 Risoluzione Lineare per Clausole Definite con funzione di Selezione (RISOLUZIONE SLD) 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)). Programmazione logica e Prolog

13 Lunificazione è 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. Lapplicazione di una sostituzione a unespressione 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]

14 Strategia di risoluzione in profondità con backtracking Possono esserci più clausole di programma utilizzabili per applicare la risoluzione con il goal corrente. Si possono adottare diverse strategie di ricerca: Programmazione logica e Prolog Il prolog adotta una strategia di risoluzione in profondità con backtracking. Permette di risparmiare memoria. Non è completa per le clausole di Horn. in ampiezza in ampiezza: si considerano in parallelo tutte le possibili alternative. in profondità in profondità : si sceglie una clausola e si mantiene fissa questa scelta, finchè non si arriva alla clausola vuota o alla impossibilità di fare nuove risoluzioni. In questo ultimo caso si riconsiderano le scelte fatte precedentemente.

15 Programmazione logica e Prolog Una derivazione SLD per un goal G0 dallinsieme 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 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.

16 Programmazione logica e Prolog ALBERI DI DERIVAZIONE 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 è latomo 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.

17 (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

18 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 dellalbero per quanto riguarda sia lampiezza 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). REGOLA DI CALCOLO Programmazione logica e Prolog

19 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

20 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

21 (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. fallimento Ramo di fallimento infinito (cl3) Strategia di risoluzione in profondità con backtracking (cl3) :- q,t,t,t,r. (5) Programmazione logica e Prolog

22 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)

23 1. p(x,z) p(y,z), q(x,y) 2. p(x,x) 3. q(a,b) La query 4. p(x,b) Albero di ricerca Programmazione logica e Prolog

24

25 , marco).

26 fallimento Programmazione logica e Prolog

27 :- 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

28 P :- Q,R. Interpretazione dichiarativa: P è vero se sono veri Q e R. Interpretazione procedurale: Il problema P può essere scomposto nei sottoproblemi P e Q. Modello di esecuzione: execute Programma Indicatore successo/fallimento Istanza delle variabili Lista di goal Un goal può essere visto come una chiamata ad una procedura. Una regola può essere vista come la definizione di una procedura in cui la testa è lintestazione mentre la parte destra è il corpo. Programmazione logica e Prolog

29 Per rendere il Prolog un linguaggio effettivamente utilizzabile vengono aggiunti: Notazione per le liste. Possibilità di manipolare strutture dati. Operazioni aritmetiche. Meccanismi di controllo del backtracking.Meccanismi di controllo del backtracking. Trattamento della negazione. Predicati di input/output. Meccanismi per modificare/accedere alla base di conoscenza. Meccanismi per il caricamento del codice prolog. Programmazione logica e Prolog

30 CUT e controllo del backtracking Programmazione logica e Prolog Predicati di controllo di un programma Predicati predefiniti che consentono di influenzare e controllare il processo di esecuzione (dimostrazione) di un goal. PREDICATO CUT PREDICATO CUT ( ! ) – E denotato dal simbolo ! – E uno dei più importanti e complessi predicati di controllo forniti da Prolog Per capire come funziona il predicato cut e necessario vedere il modello run time di Prolog

31 Programmazione logica e Prolog

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47 Si consideri la clausola: p :- q1, q2,…, qi, !, qi+1, qi+2,…, qn. leffetto della valutazione del goal ! (cut) durante la dimostrazione del goal "p" è il seguente: – la valutazione di ! ha successo (come quasi tutti i predicati predefiniti) e ! viene ignorato in fase di backtracking; – tutte le scelte fatte nella valutazione dei goal q1, q2,..., qi e in quella del goal p vengono rese definitive; in altri termini, tutti i punti di scelta per tali goal (per le istanze di tali goal utilizzate) vengono rimossi dallo stack di backtracking. – Le alternative riguardanti i goal seguenti al cut non vengono modificate EFFETTO DEL CUT Programmazione logica e Prolog

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63 Linguaggi imperativi (C, Pascal etc.) Si specifica come risolvere un problema Linguaggi dichiarativi Funzionali (Lisp puro) Usa il concetto di funzione e di composizione di funzioni Logici (Prolog) Si descrivono le relazioni che intercorrono fra i dati. Non ci sono assegnamenti. Non determinismo. Programmazione logica e Prolog


Scaricare ppt "Linguaggi di Programmazione (AA 2002/2003) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - parte 2."

Presentazioni simili


Annunci Google