2nd Semester 2017/18: Functional Programming for Logicians
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:
- Natural Logic
- Sudoku Solving
- Theorem Proving
- Binary Decision Diagrams
- Haskell and Category Theory
- Modular Arithmetic and Public Key Cryptography
At the end of this project you will:
- understand the basics of Haskell: types, type classes, functors and monads
- be able to implement model checking and other logic algorithms in Haskell
- know how to use QuickCheck to test your code and to refute conjectures
- have used Haskell to investigate a research question
- be able to write well-documented literate programs
The first week will consist of daily lectures and exercise sessions. During the remaining time you will work on your own or in pairs. 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.
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 (Linux or MacOS) is preferred. It will be helpful if you are already comfortable with a good text editor, for example vim, emacs, sublime or atom. Similarly, it would be good if you are already familiar with git. We will use the Haskell tool stack.
Oral presentation and written report consisting of code and documentation.
Miran Lipovača: Learn You a Haskell for Great Good! No Starch Press, 2011. Available at learnyouahaskell.com.
Kees Doets & Jan van Eijck: The Haskell Road to Logic, Maths and Programming. College Publications, 2004. See homepages.cwi.nl/~jve/HR.
Malvin Gattinger: New Directions in Model Checking Dynamic Epistemic Logic. PhD thesis, ILLC, 2018. Available soon at malv.in/phdthesis.