Part I. Operational semantics and language implementation: natural semantics, structural operational semantics, abstract machines, correctness of language implementation.
Part II. Denotational semantics and program analysis: denotational semantics, fixed point theory, abstract interpretation, program analysis and program transformation.
Part III. Axiomatic semantics and program verification: axiomatic semantics, program specification and verification, weakest preconditions, verification condition generation.
After passing the course, the student should be able to
- construct the state space of a program as a basis for program behaviour analysis
- translate programs to abstract machine code and execute it
- compute the denotation of a program
- extend a programming language with new language features, and extend its semantics and abstract machine implementations accordingly
- suggest and justify program transformations supported by an appropriate program analysis
- specify and verify programs in Hoare logic
- generate verification conditions of a given program and specification
- relate different semantic styles formally
- prove language properties such as determinism and termination formally
- prove the correctness of a given program transformation by showing equivalence between the original program and the transformed program formally
- show properties of a given semantics formally.