La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Interpretazione Astratta

Presentazioni simili


Presentazione sul tema: "Interpretazione Astratta"— Transcript della presentazione:

1 Interpretazione Astratta

2 Astrazione: selezionare una proprieta’
Tino Cortesi Tecniche di Analisi di Programmi

3 Astrazione: selezionare una (delle) proprieta’
Tino Cortesi Tecniche di Analisi di Programmi

4 Astrazione e correttezza
Tino Cortesi Tecniche di Analisi di Programmi

5 Astrarre un insiemi di punti nel piano…
Tino Cortesi Tecniche di Analisi di Programmi

6 Interpretazione Astratta
Una tecnica utilizzata da quasi 30 anni (Patrick e Radhia Cousot, 1977) per trattare in modo sistematico astrazioni e approssimazioni Nata per descrivere analisi statiche di programmi imperativi e provarne la correttezza. Sviluppata soprattutto su linguaggi dichiarativi (logici e funzionali) Vista oggi come tecnica generale per ragionare su semantiche a diversi livelli di astrazione Applicata con successo a sistemi distribuiti per verifica di programmi (correttezza – sicurezza) Tino Cortesi Tecniche di Analisi di Programmi

7 Tecniche di Analisi di Programmi
L’idea generale il punto di partenza è la semantica concreta, ovvero una funzione che assegna significati ai comandi di un programma in un dominio fissato di computazione. un dominio astratto, che modella alcune proprietà delle computazione concrete, tralasciando la rimanente informazione (dominio di computazione astratto) derivare una semantica astratta, che permetta di eseguire il programma sul dominio astratto per calcolare la proprietà che il dominio astratto modella. applicando un algoritmo di punto fisso sarà quindi possibile calcolare staticamente una approssimazione corretta della semantica astratta Tino Cortesi Tecniche di Analisi di Programmi

8 Tecniche di Analisi di Programmi
Semantica concreta Consideriamo un linguaggio molto limitato, che permette unicamente di operare su moltiplicazioni di interi. La semantica di questo linguaggio si può descrivere mediante una funzione m definita da: Tino Cortesi Tecniche di Analisi di Programmi

9 Tecniche di Analisi di Programmi
Semantica astratta Possiamo considerare un’astrazione della semantica concreta (semantica astratta) che calcola solo il segno delle espressioni Tino Cortesi Tecniche di Analisi di Programmi

10 Tecniche di Analisi di Programmi
Correttezza Possiamo dimostrare che questa astrazione è corretta, ovvero che predice correttamente il segno delle espressioni. La dimostrazione è per induzione strutturale sull’espressione e, ed utilizza le proprietà della moltiplicazione tra interi (il prodotto di due positivi è positivo, ecc.). Tino Cortesi Tecniche di Analisi di Programmi

11 Una prospettiva diversa
Possiamo associare ad ogni valore astratto l’insieme di valori concreti che esso rappresenta: Tino Cortesi Tecniche di Analisi di Programmi

12 Tecniche di Analisi di Programmi
Concretizzazione La funzione di concretizzazione g mappa un valore astratto in un insieme di valori concreti Indichiamo con D il dominio concreto e con A il dominio astratto Tino Cortesi Tecniche di Analisi di Programmi

13 Interpretazione Astratta
Questa è una Interpretazione Astratta. Una computazione in un dominio astratto In questo caso, il dominio è {+,0,-}. La semantica astratta è corretta è un’approssimazione della semantica concreta La funzione di concretizzazione stabilisce la connessione tra i due domini Tino Cortesi Tecniche di Analisi di Programmi

14 Tecniche di Analisi di Programmi
Aggiungiamo - Aggiungiamo al nostro tiny language l’operatore unario di cambiamento di segno Tino Cortesi Tecniche di Analisi di Programmi

15 Tecniche di Analisi di Programmi
Aggiungiamo + Aggiungere l’addizione è più complesso, in quanto il dominio astratto non è chiuso rispetto a questa operazione A quale valore astratto corrisponde il risultato della somma di due numeri interi con segno opposto? Tino Cortesi Tecniche di Analisi di Programmi

16 Tecniche di Analisi di Programmi
Soluzione Aggiungiamo un nuovo elemento astratto che rappresenta un qualsiasi numero intero Tino Cortesi Tecniche di Analisi di Programmi

17 Estendere le altre operazioni
Avendo aggiunto un elemento al dominio astratto, è necessario estendere le operazioni astratte già definite Tino Cortesi Tecniche di Analisi di Programmi

18 Tecniche di Analisi di Programmi
Esempi In alcuni casi c’è perdita di informazione dovuta alle operazioni In altri casi non c’è perdita di informazione Tino Cortesi Tecniche di Analisi di Programmi

19 Tecniche di Analisi di Programmi
Aggiungiamo / Aggiungere la divisione intera (con resto) / non da problemi, eccetto il caso della divisione per 0. Se dividiamo gli intero di un insieme di interi per 0 che risultato otteniamo? L’insieme vuoto. Questo è rappresentato da un nuovo elemento, ^, rispetto al quale si devono estendere le altre operazioni Tino Cortesi Tecniche di Analisi di Programmi

20 Tecniche di Analisi di Programmi
Il dominio astratto Il dominio astratto è un reticolo completo L’ordine parziale è coerente con la funzione di concretizzazione: Ogni sottoinsieme ha un least upper bound (lub) ed un greatest lower bound (glb): è un reticolo completo Tino Cortesi Tecniche di Analisi di Programmi

21 La funzione di astrazione
Alla funzione di concretizzazione g corrisponde una funzione di astrazione a. La funzione a mappa insiemi di valori concreti in un valore astratto (il più piccolo che li rappresenta tutti). Nel nostro esempio, Tino Cortesi Tecniche di Analisi di Programmi

22 Tecniche di Analisi di Programmi
Definizione Generale Una Interpretazione Astratta consiste in: Un dominio astratto A ed un dominio concreto D A e D reticoli completi. L’ordine riflette la precisione (più piccolo = più preciso) Funzioni di concretizzazione e di astrazione monotone, che formino una inserzione di Galois. Una funzione che astrae correttamente la semantica (operazioni astratte). Inserzione di Galois: Tino Cortesi Tecniche di Analisi di Programmi

23 Tecniche di Analisi di Programmi
Un altro esempio sign (x) , if x= bot {y|y>0}, if x= + {y|y0}, if x= 0+ {0}, if x= 0 {y|y0}, if x= 0- {y|y<0}, if x= - Z, if x= top sign (y) = glb di bot , if y=  - , if y  {z| z < 0} 0- , if y  {z | z  0} 0 , if y = {0} 0+ , if y  {z | z  0} + , if y  {z | z > 0} top , if y  Z sign({0,1,3})= 0+ sign(0+) Ê {0,1,3}, {3,34,2}, ... sign(sign({0,1,3})) Ê {0,1,3} sign(sign(0+)) = 0+ Tino Cortesi Tecniche di Analisi di Programmi

24 Tecniche di Analisi di Programmi
Inserzioni di Galois (C, ), (A, ) : A  C (concretizzazione) : C  A (astrazione)  ,  monotone xC. x  ((x)) yA. ((y)) = y  ,  si determinano a vicenda Tino Cortesi Tecniche di Analisi di Programmi

25 Astrazioni come chiusure
Il dominio astratto può essere ottenuto dividendo il dominio concreto in sottoinsiemi (non disgiunti) ai. La funzione di astrazione mappa un sottoinsieme del dominio nel più piccolo di questi ai che lo contiene. Tino Cortesi Tecniche di Analisi di Programmi


Scaricare ppt "Interpretazione Astratta"

Presentazioni simili


Annunci Google