nl en

Computational Models and Semantics


Admission requirements

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 stochastic modelling 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 introduce concepts 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. You will also study a complementary topic by reading relevant literature, summarising the literature in an essay and giving a short presentation.

Course objectives

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 type systems can be used to ensure correctness-by-construction of programs;

  • learn how to utilise category theory to reason compositionally, to organise terminology, and to abstractly obtain results about models and semantics;

  • understand how properties of programs can be formally proven;

  • learn to study and present literature in the area of semantics on your own; 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, exercise classes, programming assignments in pairs and an essay with a presentation session at the end.

Course load

Total hours of study: 168h
Lectures: 20h
Workgroups: 20h
Practicum: 60h
Self-study: 68h

Assessment method

The final grade is calculated as follows:

  1. Programming exercises: 30% (group grade)
  2. Written essay: 50% (individual)
  3. Presentation: 10% (individual)

To pass the course, each individual grade has to be at least 5.5. Each part can be improved to obtain a passing grade with the feedback that is provided.

Reading list


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.