Astrazione e Concretizzazione In una Interpretazione Astratta ci

  • Slides: 32
Download presentation
Astrazione e Concretizzazione In una Interpretazione Astratta ci aspettiamo che il seguente diagramma commuti

Astrazione e Concretizzazione In una Interpretazione Astratta ci aspettiamo che il seguente diagramma commuti (correttezza): Tino Cortesi Tecniche di Analisi di Programmi 1

Correttezza Per la correttezza dell’analisi sono sufficienti le seguenti condizioni: Tino Cortesi Tecniche di

Correttezza Per la correttezza dell’analisi sono sufficienti le seguenti condizioni: Tino Cortesi Tecniche di Analisi di Programmi 2

Correttezza locale La condizione di correttezza locale garantisce che il risultato dell’applicazione dell’operazione agli

Correttezza locale La condizione di correttezza locale garantisce che il risultato dell’applicazione dell’operazione agli elementi astratti si sia una corretta approssimazione di tutte le operazioni concrete (sugli elementi rappresentati dagli si ). Per ogni operazione concreta, una operazione astratta corretta c’e’ sempre (quella che restituisce sempre l’elemento massimo del dominio astratto) Tino Cortesi Tecniche di Analisi di Programmi 3

Correttezza locale op A g g 2 Tino Cortesi D op Tecniche di Analisi

Correttezza locale op A g g 2 Tino Cortesi D op Tecniche di Analisi di Programmi 2 D Í A 4

Inserzione di Galois {-1, 0, 1} {-1, 0} {-1, 1} {0, 1} {-1} {0}

Inserzione di Galois {-1, 0, 1} {-1, 0} {-1, 1} {0, 1} {-1} {0} {1} Æ Tino Cortesi Tecniche di Analisi di Programmi 5

Prova di correttezza Proviamo per induzione sulla struttura di e che Passo base: Tino

Prova di correttezza Proviamo per induzione sulla struttura di e che Passo base: Tino Cortesi Tecniche di Analisi di Programmi 6

Prova di correttezza Proviamo per induzione sulla struttura di e che Step Tino Cortesi

Prova di correttezza Proviamo per induzione sulla struttura di e che Step Tino Cortesi Tecniche di Analisi di Programmi 7

Correttezza Possiamo definire la correttezza utilizzando l’astrazione al posto della concretizzazione: Tino Cortesi Tecniche

Correttezza Possiamo definire la correttezza utilizzando l’astrazione al posto della concretizzazione: Tino Cortesi Tecniche di Analisi di Programmi 8

Correttezza L’altra direzione Tino Cortesi Tecniche di Analisi di Programmi 9

Correttezza L’altra direzione Tino Cortesi Tecniche di Analisi di Programmi 9

Aggiungere input Il prossimo passo consiste nell’estendere il nostro “tiny language” aggiungendo input. Questo

Aggiungere input Il prossimo passo consiste nell’estendere il nostro “tiny language” aggiungendo input. Questo può essere modellato con la presenza di variabili libere nelle espressioni Tino Cortesi Tecniche di Analisi di Programmi 10

Semantica concreta La firma della funzione semantica m diventa quindi Un modo per scrivere

Semantica concreta La firma della funzione semantica m diventa quindi Un modo per scrivere questa funzione è pensarla come un insieme di funzioni da Int indicizzate con espressioni Tino Cortesi Tecniche di Analisi di Programmi 11

Semantica Astratta La semantica astratta è data dalla funzione s Come per la semantica

Semantica Astratta La semantica astratta è data dalla funzione s Come per la semantica concreta, possiamo indicizzare s Tino Cortesi Tecniche di Analisi di Programmi 12

Correttezza Bisogna generalizzare le condizioni di correttezza Le seguenti condizioni sono equivalenti Tino Cortesi

Correttezza Bisogna generalizzare le condizioni di correttezza Le seguenti condizioni sono equivalenti Tino Cortesi Tecniche di Analisi di Programmi 13

Correttezza locale La correttezza locale la possiamo esprimere mediante la seguenta regola: Tino Cortesi

Correttezza locale La correttezza locale la possiamo esprimere mediante la seguenta regola: Tino Cortesi Tecniche di Analisi di Programmi 14

La correttezza locale è sufficiente Tino Cortesi Tecniche di Analisi di Programmi 15

La correttezza locale è sufficiente Tino Cortesi Tecniche di Analisi di Programmi 15

Comando condizionale semantica concreta semantica astratta Si osservi l’utilizzo del least upper bound nel

Comando condizionale semantica concreta semantica astratta Si osservi l’utilizzo del least upper bound nel dominio astratto Tino Cortesi Tecniche di Analisi di Programmi 16

Comando condizionale : correttezza Assumiamo che sia vero il primo ramo del comando condizionale

Comando condizionale : correttezza Assumiamo che sia vero il primo ramo del comando condizionale (l’altro caso si dimostra allo stesso modo). Tino Cortesi Tecniche di Analisi di Programmi 17

Ricorsione Aggiungiamo funzioni ricorsive (in una sola variabile, per semplicità). Le funzioni possono essere

Ricorsione Aggiungiamo funzioni ricorsive (in una sola variabile, per semplicità). Le funzioni possono essere dichiarate e chiamate La funzione semantica che abbiamo considerato finora è del tipo Tino Cortesi Tecniche di Analisi di Programmi 18

Semantica concreta rivista Generalizziamo la funzione m, per tener conto delle chiamate di funzione.

Semantica concreta rivista Generalizziamo la funzione m, per tener conto delle chiamate di funzione. Tino Cortesi Tecniche di Analisi di Programmi 19

Semantica delle funzioni ricorsive Tino Cortesi Tecniche di Analisi di Programmi 20

Semantica delle funzioni ricorsive Tino Cortesi Tecniche di Analisi di Programmi 20

Semantica delle funzioni ricorsive def f = if x=0 then 1 else f(x -

Semantica delle funzioni ricorsive def f = if x=0 then 1 else f(x - 1) f 0(i) = ^ per ogni i f 1(i) = m’if x=0 then 1 else f(x - 1)(f 0)(i) = m’ 1(f 0)(i) se i=0 1 m’f(x - 1)(f 0)(i) altrimenti = f 0 (m’x - 1(f 0)(i)) = f 0 (m’x (f 0)(i)) - f 0 (m’ 1 (f 0)(i)) = f 0 (i) - f 0 (1) =^ = = Tino Cortesi Tecniche di Analisi di Programmi 21

def f = if x=0 then 1 else f(x - 1) f 0(i) =

def f = if x=0 then 1 else f(x - 1) f 0(i) = ^ per ogni i f 1(i) = 1 se i=0, ^ altrimenti f 2(i) = m’if x=0 then 1 else f(x - 1)(f 1)(i) = m’ 1(f 1)(i) se i=0 1 m’f(x - 1)(f 1)(i) altrimenti = f 1 (m’x - 1(f 1)(i)) = f 1 (m’ 0 (f 1)(i)) se x=1 [m’ 0 (f 1)(i)=0] = f 1(0) = 1 = f 1 (j) (j#0) altrimenti =^ = = Tino Cortesi Tecniche di Analisi di Programmi 22

def f = if x=0 then 1 else f(x - 1) f 0(i) f

def f = if x=0 then 1 else f(x - 1) f 0(i) f 1(i) f 2(i) f 3(i) f 4(i). . . = = = m(f) = Tino Cortesi ^ 1 1 per ogni i se i=0, ^ altrimenti se i=0, 1, 2, 3, ^ altrimenti Ui>=0 fi Tecniche di Analisi di Programmi 23

Semantica astratta In modo analogo, dobbiamo estendere la definizione della semantica astratta s. Richiediamo

Semantica astratta In modo analogo, dobbiamo estendere la definizione della semantica astratta s. Richiediamo che tutte le funzioni siano monotone. Tino Cortesi Tecniche di Analisi di Programmi 24

Semantica della ricorsione Tino Cortesi Tecniche di Analisi di Programmi 25

Semantica della ricorsione Tino Cortesi Tecniche di Analisi di Programmi 25

Correttezza Elementi corrispondenti nelle due catene sono nella relazione giusta Tino Cortesi Tecniche di

Correttezza Elementi corrispondenti nelle due catene sono nella relazione giusta Tino Cortesi Tecniche di Analisi di Programmi 26

Correttezza (continua) Tino Cortesi Tecniche di Analisi di Programmi 27

Correttezza (continua) Tino Cortesi Tecniche di Analisi di Programmi 27

Esempio Consideriamo una funzione ricorsiva Astrazione Semplificando Tino Cortesi Tecniche di Analisi di Programmi

Esempio Consideriamo una funzione ricorsiva Astrazione Semplificando Tino Cortesi Tecniche di Analisi di Programmi 28

Tino Cortesi Tecniche di Analisi di Programmi 29

Tino Cortesi Tecniche di Analisi di Programmi 29

Esempio (ctd) Osserviamo che in questo caso l’astrazione non porta a nessuna informazione utile

Esempio (ctd) Osserviamo che in questo caso l’astrazione non porta a nessuna informazione utile Le catene ascendenti sono strettamente crescente, fino a che non convergono Ma non è detto che considerando un un singolo valore la catena ascendente concreta sia strettamente crescente Tino Cortesi Tecniche di Analisi di Programmi 30

Riassumendo… Applicare le tecniche di Interpretazione astratta significa Definire semantica concreta ed astratta del

Riassumendo… Applicare le tecniche di Interpretazione astratta significa Definire semantica concreta ed astratta del programma: domini ed operazioni Applicare un algoritmo di punto fisso Tino Cortesi Tecniche di Analisi di Programmi 31

Conclusioni Il lavoro in Cousot&Cousot ‘ 77 ha generato un’enorme quantità di lavori scientifici

Conclusioni Il lavoro in Cousot&Cousot ‘ 77 ha generato un’enorme quantità di lavori scientifici Uno slogan riassuntivo: Analisi Statica = Reticoli + Funzioni monotone E’ una teoria unificante. Ad es. le tecniche dataflow e di model checking si possono esprimere in termini di Interpretazione Astratta. Tino Cortesi Tecniche di Analisi di Programmi 32