La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Astrazione e Concretizzazione

Presentazioni simili


Presentazione sul tema: "Astrazione e Concretizzazione"— Transcript della presentazione:

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

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

3 Tecniche di Analisi di Programmi
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

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

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

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

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

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

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

10 Tecniche di Analisi di Programmi
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

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

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

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

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

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

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

17 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

18 Tecniche di Analisi di Programmi
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

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

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

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

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

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

24 Tecniche di Analisi di Programmi
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

25 Semantica della ricorsione
Tino Cortesi Tecniche di Analisi di Programmi

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

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

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

29 Tecniche di Analisi di Programmi
Tino Cortesi Tecniche di Analisi di Programmi

30 Tecniche di Analisi di Programmi
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

31 Tecniche di Analisi di Programmi
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

32 Tecniche di Analisi di Programmi
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


Scaricare ppt "Astrazione e Concretizzazione"

Presentazioni simili


Annunci Google