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 the
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 and coalgebra, 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 out of lectures, complemented with assignments and a research project. In the assignments, you can practise the content of the course for the final examination. During the research project, you will develop both the theory of programming languages and computational models, and put your knowledge into practice. Part of the project will be the study of additional material that allows you to deepen your knowledge in a topic of your choice.
More information can be found on the website of the course.
After completing this course, you will have
learned what computational models are;
learned what operational semantics and denotational semantics are, and how they relate to each other;
understood several concrete computational models: the functional models, order theoretic models (complete lattices and domains), transition system and language models, and probabilistic models;
acquired the ability to give semantics to concrete languages: imperative and functional languages; and
learned how to utilise category theory and coalgebra as abstraction of concrete models, semantics and computational 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.
Time and date on which the course is offered or a link to the website. The administration will complete this
with the link to the website.
Mode of instruction
The course will consist out of lectures complemented with self-study and discussion sessions.
Moreover, students will carry out small research projects in pairs with a presentation session at the end.
The final examination will be oral, which needs be completed at least with a sufficient grade.
Should the number of participants be too high, this may be changed to evaluation solely based on projects and presentations.
At the end of the course, we will have a session, in which each pair presents its research project.
The final grade of the course will be calculated by weighing the research project by 40%, the presentation by 10%, and the oral examination by 50%. Both the presentation and the oral exam can be retaken.
If the final grade is not sufficient, then the oral exam can be retaken and the research project can be replaced by an individual project.
- Roberto Bruni and Ugo Montanari, Models of Computation. Springer, 2017.
This has to be filled out by the key-user of the department.
All information will be available on the website and on Brightspace.
All other information.