Tino CortesiTecniche di Analisi di Programmi 1 Ricorsione Aggiungiamo funzioni ricorsive (in una sola variabile, per semplicità). La funzione semantica associata è del tipo
Tino CortesiTecniche di Analisi di Programmi 2 Semantica concreta rivista Generalizziamo la funzione m, per tener conto delle chiamate di funzione.
Tino CortesiTecniche di Analisi di Programmi 3 Semantica delle funzioni ricorsive
Tino CortesiTecniche di Analisi di Programmi 4 Semantica delle funzioni ricorsive def f = if x=0 then 1 else f(x - 1) f 0 (i) = per ogni i f 1 (i) = if x=0 then 1 else f(x - 1) (f 0 )(i) = 1 (f 0 )(i) se i=0 = 1 f(x - 1) (f 0 )(i) altrimenti = = f 0 ( x - 1 (f 0 )(i)) = f 0 ( x (f 0 )(i)) - f 0 ( 1 (f 0 )(i)) = f 0 (i) - f 0 (1) =
Tino CortesiTecniche di Analisi di Programmi 5 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) = if x=0 then 1 else f(x - 1) (f 1 )(i) = 1 (f 1 )(i) se i=0 = 1 f(x - 1) (f 1 )(i) altrimenti = = f 1 ( x - 1 (f 1 )(i)) = f 1 ( 0 (f 1 )(i)) se i =1 [ 0 (f 1 )(1)=0] = f 1 (0) = 1 = f 1 (j) (j#0) altrimenti =
Tino CortesiTecniche di Analisi di Programmi 6 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) = 1 se i=0,1, altrimenti f 3 (i) = 1 se i=0,1,2, altrimenti f 4 (i) = 1 se i=0,1,2,3, altrimenti (f) = U i>=0 f i
Tino CortesiTecniche di Analisi di Programmi 7 Semantica astratta In modo analogo, dobbiamo estendere la definizione della semantica astratta. Richiediamo che tutte le funzioni siano monotone.
Tino CortesiTecniche di Analisi di Programmi 8 Semantica della ricorsione
Tino CortesiTecniche di Analisi di Programmi 9 Correttezza Elementi corrispondenti nelle due catene sono nella relazione giusta
Tino CortesiTecniche di Analisi di Programmi 10 Correttezza (continua)
Tino CortesiTecniche di Analisi di Programmi 11 Semantica astratta def f = if x=0 then 1 else f(x - 1) f 0 (i) = per ogni i in {0,+,-,…} f 1 (i) = if x=0 then 1 else f(x - 1) (f 0 )(i) = 1 (f 0 )(i) = + f(x - 1) (f 0 )(i) = lub= f 0 ( x - 1 (f 0 )(i)) = f 0 ( x (f 0 )(i)) - f 0 ( 1 (f 0 )(i)) = f 0 (i) - f 0 (+) = = + f 2 (i)= f 1 (i)
Tino CortesiTecniche di Analisi di Programmi 12 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 CortesiTecniche di Analisi di Programmi 13 Abstract Semantics Collecting Semantics Partitioning Concrete Semantics Abstract Domain Abstract Domain Iterative Resolution Algorithms Tuners
Tino CortesiTecniche di Analisi di Programmi 14 Conclusioni Il lavoro in Cousot&Cousot 77 ha generato unenorme 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.