Types for Programs and Proofs

DAT350 (Chalmers) / DIT235 (GU)

Fall Term 2026 (LP1)

Sources on GitHub

Agda logo

Most course information is on Canvas.

Further course links:
Schedule on TimeEdit / Chalmers studieportal / GU ad (sv) / GU kursplan / GU course description / Course page 2025

Schedule

This schedule is preliminary!

Date Time Teacher Title Reading / Remark
Thu 03/09 10-12 AA 01 Introduction to Agda LN 1 - 3; VFP 1, 3; DTW 1, 2.1 - 2.5
Mon 07/09 13-15 TC 02 Dependent types
Mon 07/09 15-17 AA Getting started with Agda
Thu 10/09 10-12 AA 03 Martin-Löf Type Theory (part 1)
Mon 14/09 13-15 AA 04 Martin-Löf Type Theory (part 2) TPL 1-3
Mon 14/09 15-17 TC More on Agda Homework 1 due
Thu 17/09 10-12 TC 05 Introduction to operational semantics and type systems TPL 3-4
Mon 21/09 13-15 TC 06 Introduction to operational semantics and type systems TPL 5-10
Mon 21/09 15-17 TC More on Agda Homework 2 due
Thu 24/09 10-12 TC 07 Introduction to operational semantics and type systems
Mon 28/09 13-15 AA 08 Bidirectional type-checking
Mon 28/09 15-17 AA More on Agda Homework 3 due
Thu 01/10 10-12 AA 09 More on operational semantics and type systems in Agda
Mon 05/10 13-15 AA 10 More on operational semantics and type systems in Agda
Mon 05/10 15-17 AA Exercises on operational semantics and type systems in Agda Homework 4 due
Thu 08/10 10-12 AA 11 More on operational semantics and type systems in Agda
Mon 12/10 13-15 TC Student presentations
Mon 12/10 15-17 TC Student presentations
Thu 15/10 10-12 TC Student presentations
Mon 19/10 13-15 TC Student presentations
Mon 19/10 15-17 TC Student presentations
Tue 20/10 08- Take home exam Deadline: Fri 23/10 18:00

Teachers: TC = Thierry Coquand, AA = Andreas Abel.
Room: Lecture hall MC.

Literature

Further literature and online access to books via the library can be found on Canvas.

Lectures

Lecture 1

Agda code: live code start, solution, rendered

Lecture 2

Agda code: bb2.agda (rendered) (Turing machines, the Busy Beaver champions, a proof that a machine never stops),
euclidean.agda (rendered) (de Bruijn’s example, the Poincaré principle),
Gentzen.agda (rendered) (natural deduction as programming),
exercises3.agda (rendered) (simple exercises on propositions as types)

Exercise 1

Getting started with Agda.
Help-session where Andreas will help you get started with Agda programming.
Before this session you need to install Agda and try to write your first Agda programs.
We’ll do some simple exercises in Agda.

Lecture 3

Slides: lecture3.pdf

Lecture 4

2025 Lecture 3

2025 Lecture 4

Lecture 5

Lecture 6

Lecture 7

Lecture 8

Agda code (expressions in spine form, superseded by lecture 9): live code start, full, rendered

Lecture 9

Implementation of simply-typed lambda-calculus (STLC), continued.

Agda live code: start, finish, solution, rendered

Lecture 10

Normalization for typed lambda-calculus

Agda live code: start, solution, rendered

Lecture 11

Possible topics:

Software

We recommend Agda version 2.8.0 (recent older versions are also ok).

Installing Agda from binary

  1. Download a suitable binary package from https://github.com/agda/agda/releases/tag/v2.8.0 and put it in your PATH
  2. Run agda --setup

Installing Agda from source

  1. Install latest Haskell (see below)
  2. Install Agda from Stackage nightly: stack install --resolver=nightly Agda
  3. Run agda --setup
  4. Set up the Agda mode (see below)

Installing Haskell

  1. Install GHCup
  2. Install Stack (3.11.1) and GHC (9.12.4) from within ghcup tui
  3. Ensure that the path printed by stack path --local-bin is in your system PATH

Note: if you use GHC 9.14.1 to build Agda, you need Agda 2.8.0.1 rather than 2.8.0.

Setting up the Agda mode (Emacs)

  1. Compile the Emacs lisp files: agda-mode compile
  2. Install the Agda mode: agda-mode setup

Setting up the Agda mode (VSCode)

Get the agda-mode extension (authored by Ting-Gian LUA).

Installing the Agda standard library

To install a library for Agda, it must be downloaded and the path to its .agda-lib file must be mentioned in the file $AGDA_APP_DIR/libraries, where $AGDA_APP_DIR is the directory printed by agda --print-agda-app-dir.
(In case this directory does not exist yet, please create it.)

For instance, to install the Agda standard library, you can follow these steps.

  1. Download the version of the standard library for your Agda version according to https://wiki.portal.chalmers.se/agda/Libraries/StandardLibrary .
    For Agda 2.8.0, this is version 2.4.

  2. Unpack the library into a directory of your choice, for instance (on Linux/MacOS):
    ~/.agda/libraries.d/standard-library

  3. Recommended: in this directory rename agda-stdlib-2.4 to v2.4 (or similar).

  4. Add the following line to your ~/.agda/libraries file (create it if it does not exist):

    ~/.agda/libraries.d/standard-library/v2.4/standard-library.agda-lib

    In this you need to expand ~ manually to your home folder.

On Windows, the libraries file might reside in another directory than ~/.agda.
Check the output of agda --print-agda-app-dir.