Anno accademico 2020-2021

FORMAL METHODS

Docenti:
Marina Lenisa
Totale crediti: 6
Tipologia: Caratterizzante
Periodo didattico: Secondo Periodo
Lingua insegnamento: INGLESE
Prerequisiti. Linguaggi di Programmazione, Logica
Metodi didattici. Lezioni teoriche con correlate esercitazioni in aula ed individuali.
Modalità di verifica. Esame scritto; orale opzionale.

OBIETTIVI FORMATIVI

Il corso di Metodi Formali fornisce allo studente strumenti rigorosi per la verifica formale di correttezza di programmi. In particolare, viene illustrata la Logica di Hoare, basata su invarianti, per la verifica di programmi sequenziali, paralleli e distribuiti. Si discutono formalmente correttezza e terminazione di diversi algoritmi sequenziali classici. Questioni come assenza di deadlock e fairness vengono affrontate formalmente per una serie di problemi paradigmatici di concorrenza, quali produttore-consumatore e trasmissione di dati.

CONTENUTI

– Introduzione alla verifica formale della correttezza di programmi.

– Sintassi e semantica operazionale di programmi deterministici.

– Sistema di regole alla Hoare per la correttezza di programmi deterministici.

– Verifica formale di algoritmi sequenziali classici. Correttezza parziale e terminazione.

– Completezza dei sistemi di regole alla Hoare.

– Sintassi e Semantica Operazionale di programmi paralleli disgiunti.

– Riduzione del parallelismo disgiunto alla sequenzialita`.

– Verifica di programmi paralleli disgiunti.

– Verifica di programmi paralleli con variabili condivise: correttezza parziale.

– Correttezza Forte dei proof outline. Regola per il parallelismo e sua incompletezza. Regola per le variabili ausiliarie.

– Correttezza totale di programmi paralleli con variabili condivise.

– Programmi paralleli con variabili condivise. Comportamento non-composizionale delle componenti.

– Programmi paralleli con sincronizzazione: sintassi, semantica operazionale.

– Verifica di correttezza di programmi paralleli con sincronizzazione: correttezza parziale, terminazione, assenza di deadlock.

– Verifica di correttezza di esempi classici di programmi paralleli con sincronizzazione: produttore e consumatore, lettori e scrittori, implementazione e uso di semafori, etc.

– Programmi non-deterministici: sintassi, semantica operazionale, regole per la verifica di correttezza.

– Utilita` dei programmi non-deterministici. Traduzione di programmi paralleli in programmi non-deterministici.

– Introduzione alla programmazione distribuita. Programmi distribuiti: sintassi, semantica operazionale.

– Esempi classici: il problema della trasmissione nelle sue varianti (con e senza filtraggio di dati, con e senza messaggi di acknowledgment, etc).

– Traduzione di programmi distribuiti in programmi non-deterministici e relazioni tra le semantiche.

– Verifica: correttezza parziale, terminazione, assenza di deadlock.

– Fairness: studio della correttezza di programmi paralleli sotto l’ipotesi di schedulazione fair. La metodologia presentata si basa sull’implementazione di uno scheduler fair all’interno del programma stesso. Tale implementazione e` definita su un linguaggio esteso con assegnamento random. La prova di terminazione richiede l’utilizzo di funzioni di terminazione definite su strutture ben fondate che generalizzano i naturali.

TESTI DI RIFERIMENTO

Apt K., de Boer F., Olderog E-R., “Verification of Sequential and Concurrent Programs”, Springer, 3rd edition, 2009.