Astrazione e Concretizzazione

Slides:



Advertisements
Presentazioni simili
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Advertisements

Procedure e funzioni ricorsive
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
General Framework. Tino CortesiTecniche di Analisi di Programmi 2 Framework Nonostante le differenze tra le analisi viste finora (Reaching Definitions,
Interpretazione Astratta
Tino CortesiTecniche di Analisi di Programmi 1 Ricorsione Aggiungiamo funzioni ricorsive (in una sola variabile, per semplicità). La funzione semantica.
Tino CortesiTecniche di Analisi di Programmi 1 Astrazione e Concretizzazione In una Interpretazione Astratta ci aspettiamo che il seguente diagramma commuti:
CORSO DI PROGRAMMAZIONE II
1 Interpretazione astratta: un approccio sistematico all’analisi statica.
© 2015 Giorgio Porcu - Aggiornamennto 01/12/2015 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Rappresentazione dell’ Informazione Sistemi.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
I sistemi di equazioni di I grado Un sistema di equazioni DEFINIZIONE Un sistema di equazioni è un insieme di due o più equazioni, tutte nelle stesse.
Unità di apprendimento 6 Dal problema al programma.
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
INFORMATICA ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
La parabola e la sua equazione
Funzioni crescenti e decrescenti
x : variabile indipendente
Programma Operazioni Straordinarie 1.0
Tutorato Elementi di Informatica 2013
Informatica CdL in Matematica Parte 3 Roberto Zunino
IL CONCETTO DI ALGORITMO
10. Programmazione Ricorsiva Ing. Simona Colucci
Divide et Impera Quicksort Mergesort Charles Antony Richard Hoare
x : variabile indipendente
Unità di apprendimento 7
Equazioni differenziali
Le postcondizioni specificano l’output della funzione.
Lo studio completo di una funzione
Pensi che sia impossibile risolvere un’espressione come questa?
Le trasformazioni nel piano cartesiano
FUNZIONI MATEMATICHE DANIELA MAIOLINO.
Sulla complessità Lezione n°2
Elevamento a potenza di G. CALVI
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
ANALISI DELLE DISTRIBUZIONI STATISTICHE
Programmazione e Laboratorio di Programmazione
IL CONCETTO DI ALGORITMO
Programmazione e Laboratorio di Programmazione
I RADICALI Definizione di radicali Semplificazione di radicali
Linguaggio C++ Selezione.
Strutture di Controllo
32 = 9 x2 = 9 x = 3 32 = 9 √9 = 3 L’estrazione di radice
Semantica denotazionale algebrica di LW
Scrivere programmi corretti
I sistemi di equazioni di I grado in due incognite
Ricorsione 16/01/2019 package.
Algoritmo InsertionSort
Validazione, verifica, debugging e defensing programming
Relazioni dirette e inverse Calcoli percentuali Sopra e sotto cento
Algoritmi e Strutture Dati
I sistemi di equazioni di I grado in due incognite
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Interpretazione Astratta
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione.
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
Esercitazione guidata 1
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
Reti Combinatorie: sintesi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Integrale Definito Integrale Indefinito Integrale Definito
Appunti di analisi matematica: Integrale Definito
La programmazione strutturata
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Semantica delle funzioni ricorsive Tino Cortesi Tecniche di Analisi di Programmi

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

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

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

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

Semantica della ricorsione Tino Cortesi Tecniche di Analisi di Programmi

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

Correttezza (continua) Tino Cortesi Tecniche di Analisi di Programmi

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

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

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

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

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