CSCI B629 Mechanized Proofs for PL Metatheory

Indiana University, Spring 2026

In this course we learn how to write mechanized proofs in Agda of theorems about programming languages. The course will use the online textbook Programming Language Foundations in Agda (PLFA).

Agda is a proof assistant and a dependently typed language. No prior knowledge of Agda is assumed; it will be taught from scratch. Prior knowledge of another proof assistant or dependently typed language is helpful but not necessary.

Instructor

Prof. Jeremy Siek, Luddy 3016, jsiek@iu.edu

Lectures

Tuesday and Thursday at 2:20-3:35pm in Wylie Hall (WY) Room 101.

Office Hours (in Luddy Hall 3016 or the neighboring 3014)

Assignments (tentative)

Project

Choose a language feature that is not spelled out in PLFA to formalize and prove type safe in Agda. (If you have a different kind of project in mind, I’m happy to consider alternatives, so long as it includes proving some non-trivial property of a programming language.) Your formalization should include both a static semantics (aka. type system), a dynamic semantics, and a proof of type safety. For the dynamic semantics you must use a different style than the approach used in PLFA, that is, do not use a reduction semantics. Examples of other styles you can use are

Resources:

Ideas for project language features:

Schedule

Month Day Topic Notes
January 13 Naturals & Induction link
  15 Relations link
  20 Equality & Isomorphism link
  22 Connectives & Negation link
  27 Quantifiers & Decidable link
  29 Lists and higher-order functions link
February 3 Lambda the Simply Typed Lambda Calculus link
  5 Properties such as type safety link
  10 DeBruijn representation of variables link
  12 Substitution Theorems link
  17 STLC Termination via Logical Relations link
  19 More constructs: numbers, let, products (pairs), sums, unit, empty, lists link
  24 Inference bidirectional type inference link
  26 Subtyping and Records link
March 3 Bisimulation  
  5 Untyped Lambda Calculus  
  10 Confluence of the Lambda Calculus  
  12 Spring Break, no class  
  17 Spring Break, no class  
  19 BigStep Call-by-name Evaluation of the Lambda Calculus  
  24 Denotational semantics of the Lambda Calculus  
  26 Denotational continued, Recording  
  31 Compositional  
April 2 Soundness, Recording  
  7 Adequacy, Recording  
  9 ContextualEquivalence and ScottNumeralsPlus, Recording  
  14 Unification, Recording  
  16 Unification continued, Recording  
  21 TypeInference, Recording  
  23 Gradual Typing, Recording  
  28 SystemF Universal Types (aka. parametric polymorphism), Recording  
  30 TBD