There are no requirements.
Computing systems become increasingly more complex and handle a variety of different tasks. As our society relies on these systems working correctly, we need formal descriptions of computational models and semantics of programming languages to be able to verify the correctness of computing systems. The computational models that we will study in this course range from the simplest functional model to probabilistic models that underpin statistical phenomena in optimisation and machine learning.
During the course, we will introduce several programming language, all coming with specific kinds of computational models that allow us to give semantics to these languages. This approach allows us to concretely understand the purpose of the corresponding computational model, while we can use the languages to write and run concrete programs. We will find that this variety of computational models and the resulting semantics have recurring patterns. Moreover, with increasing complexity of the models, we will need some framework that helps us organising our work. For that reason, we will also study bits of category theory, which will greatly ease our work with the various computational models. Category theory has become indispensable in the research of language semantics and many other areas of computer science. This means that this course will prepare you for working with modern tools of language theory and beyond.
The course will consist of lectures, complemented programming assignments and a research project.
Through the assignments, you will deepen your knowledge about the semantics, learn how they can lead
directly to an implementation, and you can get familiar with Haskell.
In the research project, you will study a complementary topic by reading relevant literature, and
summarising the literature in an essay and a short presentation.
In this course, you will
learn what computational models are;
learn what operational semantics and denotational semantics are, and how they relate to each other;
understand several concrete computational models: the functional models, order theoretic models (complete lattices and domains), syntactic models, and probabilistic models;
acquire the ability to give semantics to concrete languages: imperative, functional and probabilistic languages;
learn how to utilise category theory as abstraction of concrete models, semantics and computational effects;
understand how properties of programs can be formally proven;
learn to create your own research project in the semantics of programming languages; and
learn to use Haskell for complex tasks that involve recursive data types and programs with side effects.
This gained knowledge will enable you to better understand and structure programs, reason about the behaviour of programs and design your own programming language with semantics.
You will find the timetables for all courses and degree programmes of Leiden University in the tool MyTimetable (login). Any teaching activities that you have sucessfully registered for in MyStudyMap will automatically be displayed in MyTimeTable. Any timetables that you add manually, will be saved and automatically displayed the next time you sign in.
MyTimetable allows you to integrate your timetable with your calendar apps such as Outlook, Google Calendar, Apple Calendar and other calendar apps on your smartphone. Any timetable changes will be automatically synced with your calendar. If you wish, you can also receive an email notification of the change. You can turn notifications on in ‘Settings’ (after login).
For more information, watch the video or go the the 'help-page' in MyTimetable. Please note: Joint Degree students Leiden/Delft have to merge their two different timetables into one. This video explains how to do this.
Mode of instruction
The course will consist of lectures, programming assignments in pairs and a research project with a presentation session at the end.
Total hours of study: 168h
The final grade is calculated as follows:
- Programming exercises: 30% (group grade)
- Written essay: 50% (individual)
- Presentation: 10% (individual)
To pass the course, each individual grade has to be at least 5.5. Each part can be improved with the feedback that is provided.
Roberto Bruni and Ugo Montanari, Models of Computation. Springer, 2017.
Jan van Eijck and Christina Unger, Computational Semantics with Functional Programming. Cambridge University Press, 2010.
Glynn Winskel, The Formal Semantics of Programming Languages. MIT Press, 1994.
From the academic year 2022-2023 on every student has to register for courses with the new enrollment tool MyStudyMap. There are two registration periods per year: registration for the fall semester opens in July and registration for the spring semester opens in December. Please see this page for more information.
Please note that it is compulsory to both preregister and confirm your participation for every exam and retake. Not being registered for a course means that you are not allowed to participate in the final exam of the course. Confirming your exam participation is possible until ten days before the exam.
Extensive FAQ's on MyStudymap can be found here.
All information will be available on Brightspace and on the website.