Archive: Functional Programming for Logicians (2018)

June 2018, coordinated project in the Master of Logic at ILLC, University of Amsterdam.

Instructors: Malvin Gattinger and Jana Wagemaker.


DayTimeRoomWhatPlanned Topics
Mo 410:00-12:00F3.20Lect. Functions, Lists, Types
L1: .pdf .lhs
Mo 414:00-16:00F1.15Ex. E1: .pdf .lhs
Tu 510:00-12:00F3.20Lect. Type classes, QuickCheck, Modal Logic
L2: .pdf .lhs
Tu 513:00-15:00F3.20Ex. E2: .pdf .lhs
We 610:00-12:00F1.15Lect. Functors, Monads, IO
L3: .pdf .lhs
Th 710:00-12:00F1.15Lect. IO, Randomness, Trees, Practical Stuff
L4: .pdf .lhs
Th 714:00-15:30F1.15Ex. E3: .pdf .lhs
Fr 810:00-12:00F1.15Lect. (Symbolic) Model Checking for (Dynamic) Epistemic Logic(s)
L5: .pdf
Fr 814:00-16:00F1.15Ex. E4: .pdf .lhs
Fr 1509:00-11:00F1.15 Your Presentations
Fr 2218:00 Optional Work-In-Progress Deadline
Fr 2915:00 Report Deadline

The first week will consist of daily lectures and exercise sessions. During the remaining time you will work on your own or in pairs, on a specific research topic.

Here you can find a list of topics, but you can also come up with your own. Please send us an email by Sunday 10th of June what you would like to work on.

At the end of the second week you will give a short presentation about your project and at the end of the month you will submit a report in literate programming style for which you can use this template.

For grading criteria, see the last slide of L5.pdf. It is not mandatory, but a good idea to send us a work-in-progress version of your report to get some feedback, around June 18–22.

Links and References

Useful links and tools: Haskell Books: Hints and Tutorials: Other references mentioned during lectures:


Functional Programming is a paradigm that focuses on mathematical definitions instead of objects and states. Functional programs consist of definitions instead of instructions: We tell the compiler what we want to compute and not how to compute it.

Haskell is a lazy, strongly typed and purely functional programming language that is getting more and more popular in academia and different industries. Based on lambda calculus and borrowing some ideas from category theory, Haskell is an excellent tool for the mathematically inclined programmer. From a logician's point of view, its data types make it very natural to work with formal languages.

Depending on the background of the participants, this project will start with a fast introduction to Haskell and then focus on how it can be used as a research tool. We will focus on implementations of explicit and symbolic model checking for modal logics, but other topics from the whole Master of Logic spectrum are welcome, including for example:

At the end of this project you will:


Basic knowledge of modal logic and set theory is expected. Courses on lambda calculus or category theory are a plus, but not necessary.

No programming experience is expected. On the contrary: If you have coded in imperative languages before, you should be prepared to unlearn a few things.

You should have a laptop for the exercise classes. A UNIX operating system (GNU/Linux or MacOS) is preferred. You should use a good text editor, for example vim, emacs, atom or sublime. Similarly, it would be good if you are already familiar with git. We use the Haskell tool stack.