Semantica dei linguaggi di programmazione
Corso di Laurea Magistrale in Informatica
Docente
Finalità del corso
Scopo del corso è presentare la semantica formale dei linguaggi di programmazione attraverso l'uso di proof assistant. La semantica formale descrive in maniera rigorosa, non ambigua, il comportamento dei programmi. I proof assistant sono strumenti software che supportano la scrittura di prove formali, verificando la correttezza dei passaggi logici e completando autonomamente la parti più semplici delle dimostrazioni.
Il corso fa ampio uso di esempi, e gran parte del corso viene presentato attraverso l'interazione con il proof assistant Coq.
Programma del CORSO
Il corso è diviso in due parti. Una prima parte di introduzione al proof assistant Coq, descrive la logica formale su cui Coq è basato e mostra, attraverso una serie di esempi, come si interagisce con esso.
Nella seconda parte, Coq viene utilizzato per descrivere formalmente la semantica operazionale di alcuni semplici linguaggi di programmazione e quindi per provare la correttezza di alcuni programmi.
Argomenti trattati. Programmazione funzionale in Coq: strutture dati, polimorfismo. Dimostrazioni in Coq: logica, tipi dipendenti, principi di induzione, tattiche di dimostrazione. Dimostrazioni come programmi: corrispondenza di Curry-Howard. Codifica di un linguaggio imperativo: lexer, parser, semantica operazionale. Equivalenze tra programmi, logica di Hoare.
Dimostrazione di correttezza di alcuni algoritmi di ordinamento: insertion sort, merge sort, alberi binari di ricerca.
Libri di testo
Materiale presentato a lezione
Lucidi e codice Coq.
Modalità di svolgimento dell'esame
L'esame è diviso in due parti:
-
presentazione delle soluzioni degli esercizi assegnati durante l'anno;
-
prova orale.