DAT350 (Chalmers) / DIT235 (GU)
Fall Term 2026 (LP1)
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
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 | AA | More on Agda | Homework 1 due |
| Thu 17/09 | 10-12 | TC | 05 The identity type and indexed inductive types | 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 Simply typed lambda calculus and normalization by evaluation | |
| Mon 28/09 | 15-17 | AA | More on Agda | Homework 3 due |
| Thu 01/10 | 10-12 | AA | 09 Confluence and Standardization | |
| Mon 05/10 | 13-15 | AA | 10 Weak and Strong Normalization | |
| 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 Machines: Krivine and CEK | Danielsson: MSc topics |
| 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.
Further literature and online access to books via the library can be found on Canvas.
Agda code: live code start, solution, rendered
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)
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.
Slides: lecture3.pdf
Slides: lecture4.pdf
Slides: lecture5.pdf
Agda code: Id5.agda (rendered) (the identity type: elimination
rules and their motive, J, subst, cong),
deduction.agda (rendered) (indexed inductive types,
derivations as an inductive family, the deduction theorem),
checksize.agda (rendered) (the size of the
derivations built by the deduction theorem)
Slides: lecture6.pdf
Agda code: peirce.agda (rendered) (the truth tables, and
forcing over two stages of knowledge: Peirce’s law is not
derivable),
typetype.agda (rendered) (the rules of the slides,
constructor for constructor, as an indexed inductive family),
minimalrules.agda (rendered) (the same theory with
the redundant premises dropped, the translations both ways, and the
presupposition, weakening and substitution lemmas; it imports selfcontained.agda (rendered)),
xirule.agda (rendered) (the ξ rule derived from β
and function extensionality; this file postulates the two
weakening lemmas, which are theorems in minimalrules.agda)
e => e'e :: T; preservation, canonical
forms and progress, hence type safetye ⇓ v, and how it relates to the
one-step relationSlides: lecture7.pdf
Agda code: arith1.agda (rendered) (the language, small-step
semantics, typing, preservation and progress),
arithexp.agda (rendered) (a variant where progress
is an inductive family, and a well-typed normal form is a value),
operational.agda (rendered) (big-step semantics and
its soundness; it imports arith1.agda),
compiler.agda (rendered) (the stack machine, the
compiler and its correctness, with named intermediate steps),
compiler2.agda (rendered) (the same proof term
without the named steps),
Confluence.agda (rendered) (the Church-Rosser
theorem for β-reduction, following Martin-Löf’s proof by parallel
reduction as given in Appendix II of Barendregt’s
thesis (1971), lemma by lemma; historically, this proof was one of
Plotkin’s motivations for operational semantics. It uses the syntax of
the rules of Type : Type from selfcontained.agda)
Slides: lecture8.pdf
Agda code:
All in one: Lecture8.agda, rendered
Removed Peirce and spines: Lecture8NoPeirce.agda, rendered
Individual modules:
Agda code: entrypoint Lecture9.agda, rendered
Normalization for typed lambda-calculus
Agda code:
Agda code (expressions in spine form, superseded by lecture 9): live code start, full, rendered
Implementation of simply-typed lambda-calculus (STLC), continued.
with vs. case ... of \ where vs. local
functionssubst,
cong)Agda live code: start, finish, solution, rendered
Normalization for typed lambda-calculus
Agda live code: start, solution, rendered
We recommend Agda version 2.8.0 (recent older versions are also ok).
agda --setupstack install --resolver=nightly Agdaagda --setupghcup tuistack path --local-bin
is in your system PATHNote: if you use GHC 9.14.1 to build Agda, you need Agda 2.8.0.1 rather than 2.8.0.
agda-mode compileagda-mode setupGet the agda-mode extension (authored by Ting-Gian
LUA).
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.
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.
Unpack the library into a directory of your choice, for instance
(on Linux/MacOS):
~/.agda/libraries.d/standard-library
Recommended: in this directory rename
agda-stdlib-2.4 to v2.4 (or similar).
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.