Proofs and Programs Course, LMFI M2, Academic Year 2023-2024

Current version of the lecture notes.

Here (13/03/2024).

Week 1.
Lecture 1 (27/02/2024):
  • Introduction.
  • Review of the lambda-calculus (beta-reduction, head reduction, head normal forms).
  • Simple types and their set-theoretic semantics.
  • The strict intersection type system.
  • Subject reduction.
  • Subject expansion.
Lecture 2 (28/02/2024):
  • Typability of head normal forms.
  • Completeness of intersection types w.r.t. termination.
  • Soundness of intersection types w.r.t. termination (via reducibility).
Homeworks:
  • Read Chapters Naturals and Induction.
  • Exercise *-distrib-+ (PLFA - Induction), with and without rewrite.
  • Prove formally the lambda-abstraction case (correctly handling all the substitutions) of the fundamental lemma.
  • Optional. Prove that: HN(tu) implies HN(t).
  • Optional. Exercise +*^ (PLFA - Induction).
Bibliography:
Week 2.
Lecture 3 (05/03/2024):
  • Hindley-Longo axioms of λ-models.
  • The term model.
  • Properties of λ-models.
  • Engeler’s model (definition).
Lecture 4 (06/03/2024):
  • Engeler’s model is a λ-model.
  • Non-idempotent intersection types.
  • Completeness of multi types w.r.t. head reduction.
Homeworks:
  • Read Chapter Relations.
  • Exercise <-trans (PLFA - Relation).
  • Prove that both the term model and Engeler’s model satisfy axiom 5.
  • Optional. Exercise o+o≡e (PLFA - Relation).
Bibliography:
  • Models of the λ-calculus. Hindley and Seldin, Lambda-calculus and combinators: an introduction (Chapter 15).
  • If you want some more category theory: Manzonetto’s PhD Thesis (Chapter 1).
Week 3.
Lecture 5 (12/03/2024):
  • Soundness of multi types w.r.t. head reduction.
  • Multi types for weak head reduction and closed terms.
  • Quantitative characterization theorem (statement only).
  • Reasonable models and the size explosion problem.
Lecture 6 (13/03/2024):
  • Krivine’s Abstract Machine: its correctness and complexity.
  • The KAM and multi types in Agda (first part): Bob Atkey’s code.
Homeworks:
  • Prove the quantitative characterization theorem: ⊢^n t:★ iff t->^n_{wh} λx.u. Consider t closed, this will simplify a lot the substitution lemma, and consider the subject expansion for granted. ⊢^n t:A means that t is typed with A using a type derivation containing exaclty n abstraction (not abstraction-★) rules. For those who were not in class: the type system is the one in Beniamino’s notes for head reduction + the axiom ⊢ λx.t:★. ★ is the only base type.
Bibliography:
Week 4.
Lecture 7 (19/03/2024):
  • The KAM and multi types in Agda (second part): Bob Atkey’s code.
  • The optimized KAM and its correctness.
Lecture 8 (20/03/2024):
  • The complexity of the optimized KAM.
  • Multi types and the optimized KAM.
  • λ-theories: sensibility, consistency, =ᵦ, 𝓗, 𝓗*, solvability.
Homeworks:
  • Prove that =ᵦ ⊆ 𝓗*.
  • Do multi types satisfy subject reduction/expansion w.r.t. to the η-law? Remember that t =_η λx.tx when x is not free in t.
Bibliography:
Week 5.
Lecture 9 (26/03/2024):
  • Genericity lemma, and sensibility of 𝓗*.
  • 𝓗* is the maximal consistent and sensible λ-theory.
Lecture 10 (27/03/2024):
  • Böhm trees, and their order.
  • Syntactic approximation theorem (sketch).
  • Semantic approximation theorem.
  • Barendregt’s Kite of λ-theories.
Homeworks:
Bibliography:
Week 6.
Lecture 11 (02/04/2024):
  • Inhabitation in non-idempotent intersection types (by Victor Arrial)
Lecture 12 (03/04/2024):
  • Imperative programs and their operational semantics.
  • Hoare logic.
  • Soundness (with proof) and completeness (without proof).
  • Proving termination.
Bibliography:

If you need other references, please email me!

Old Things.

Presentation

  • We will use Agda during the course. You should have Agda 2.6.4 installed with the agda-stdlib 1.7.3. Beware, the 2.0 version does not work with the book.
  • Installation instructions are Here.
  • Installing the book: link. You can use the simpler
git clone --depth 1 https://github.com/plfa/plfa.github.io plfa

to avoid cloning the stdlib you have already insalled.