NDAA08006U Semantics and Types (SaT)
MSc Programme in Computer Science
The aim of the course is to introduce students to the fundamental concepts and tools of modern programming-language theory. This includes the relevant descriptive approaches (formal semantics and type systems), their instantiations and applications to concrete situations, and the mathematical principles for reasoning about them.
The topics covered in the course provide a comprehensive formal
basis for developing reliable programs and programming languages,
but also equip students with a standardized terminology and
conceptual framework for communicating effectively with other
developers and researchers, including in follow-up coursework and
projects within the PLS track of the Computer Science programme.
Students will be introduced to the following:
- Basic principles of deductive systems: judgments and inference rules, structural induction, induction on derivations.
- Operational semantics (big-step and small-step) of simple imperative and functional languages; equivalence of programs; equivalence of semantics.
- Axiomatic semantics of imperative languages (Hoare logic); soundness and completeness of program logics.
- Denotational semantics, including simple domain theory.
- Type systems for functional languages (simple types and selected extensions); type soundness through preservation and progress; type inference.
- Machine-supported reasoning: proof assistants, proof-carrying code.
At course completion, the successful student will have:
- General principles for specifying and reasoning about deductive systems.
- A selection of specific deductive systems, including semantics, type systems, and program logics.
- Techniques for proving properties of individual programs or program fragments, including equivalences of programs, and their correctness with respect to a specification.
- Techniques for proving properties of whole deductive systems, including equivalence of semantics, and soundness of program logics and type systems.
- Machine-verifiable representations of deductive-system theory and metatheory.
- Read and write specifications of deductive systems relating to programming language theory.
- Decide and prove formal properties of programs or program fragments.
- Decide and prove properties of programming languages or particular language features.
- Present the relevant constructions and proofs in writing, using precise terminology and an appropriate level of technical detail.
- Reason reliably about correctness or other properties of both imperative and functional programs.
- Analyze and design (typically domain-specific) programming languages or programming-language features in accordance with best practices
- Communicate effectively about programming-language theory, both for accessing relevant research literature, and convincingly presenting the results of own work.
Course notes; selected book chapters and articles.
Some prior exposure to basic formal logic (propositional and first-order logic, natural deduction) and logic programming (Prolog) is recommended, but not required.
- 7,5 ECTS
- Type of assessment
- Written assignment, 32 hoursIndividual, written take-home exam.
- Exam registration requirements
5 out of 6 assignments must be satisfactorily completed in order to participate in the exam.
- All aids allowed
- Marking scale
- 7-point grading scale
- Censorship form
- No external censorship
Several internal examiners
Written assignment (32 hours) + 30 minutes oral examination without preparation. The part-examinations are not weighted but assessed individually; an overall assessment is then applied.
If student is not qualified then qualification can be achieved by hand-in and approval of equivalent assignments no later than two weeks before the re-exam.
Criteria for exam assesment
See Learning Outcome.
- Theory exercises