Fornire una semantica formale di un programma significa
esplicitare che cosa il programma fa (denota) utilizzando opportune
strutture matematiche.
Durante il corso ci occuperemo di fornire una semantica
denotazionale a costrutti di base di linguaggi di programmazione
sia imperativi che funzionali.
La semantica che definiremo consisterà nell'interpretare un
programma nella funzione che esso calcola fra domini di definizione
dei dati. Studieremo poi il legame tra tale semantica tra domini e
la semantica operazionale.
Per comprendere meglio la semantica denotazionale risulterà
utile contestualizzare il linguaggio di programmazione in oggetto
all'interno di una opportuna teoria dei tipi.
A tal scopo richiameremo la nozione di tipo e i suoi collegamenti
con i sistemi logico-deduttivi e la programmazione funzionale, in
particolare come la costruzione di un programma corretto
corrisponda alla dimostrazione di un teorema matematico.
Faremo un ulteriore passo di astrazione procedendo ad enucleare la
struttura essenziale per fornire una semantica denotazionale
tramite lo studio della semantica categoriale.
Tempo permettendo, si accennerrà ad applicazioni della
semantica categoriale alla costruzione di macchine astratte.
Testi di riferimento proposti:
Glynn Winskel, The Formal Semantics of Programming Languages. An Introduction. MIT press, 1993 |
Dispense del docente. |
Per consultazione:
Carl Gunter, Semantics of Programming Languages: Structures and Techniques. MIT press, 1992. |
J.Y. Girard, Proofs and Types, Cambridge University Press, 1998 |
Barr & Wells, Category Theory for Computing Science, Prentice Hall 1989 |