Foundations of software
CS-452
Media
Introduction
Software foundations (or theory of programming languages) is the mathematical study of the meaning of programs. Students will learn ways to describe program behaviors, and mathematical tools to formalize and check interesting properties of programs. This course concentrates on lambda calculus, operational techniques and type systems.
Teaching team
Lecturers
Martin Odersky martin.odersky@epfl.ch
Thomas Bourgeat thomas.bourgeat@epfl.ch
Assistants
Martina Camaioni martina.camaioni@epfl.ch
Yichen Xu yichen.xu@epfl.ch
Cao Nguyen Pham nguyen.pham@epfl.ch
Grading rubric
Final course grade will be computed as follows:
- Homework: 20%
- Projects: 20%
- Final exam: 60%
Over the course of the semester, we will post five assignments that will require you to code up or do proofs about five moderately complex Lean4 applications (one per each assignment) that highlight certain theoretical aspects of the course.
Every assignment will become available on Moodle at due time (usually after the deadline of the previous assignment). The procedure to submit assignments will be specified later.
Class Material
Continuous Evaluation
There will be one paper homework, serving a similar purpose to a midterm: train the students for the final exam. This homework will be on paper (not on machine), and will be similar in content as for the final exam.
Office Hour
Wednesdays 5-7pm in BC145 (Except Wednesday 30th of April cancelled and moved to Tuesday 29th 5-7pm).Final Exam
Resources about Lean4
https://leanprover-community.github.io/learn.html
Useful resources to find theorems and lemmas:https://loogle.lean-lang.org/
https://leanprover-community.github.io/mathlib4_docs/index.html
- Announcements (Forum)
- Lecture 1: Logistic, Proof Principles, Abstract Syntax and Abstract Machine (File)
- Live Coding session 1 (Page)
- Exercise and project - week 1 (Page)
- Lecture 2: Induction on derivation and handling variables - the untyped lambda calculus (File)
- Lecture 3: Programming in the untyped lambda calculus and recursion (File)
- Recommended exercises per module of the class: (Page)
- Project 1 Progress Check (Feedback)
- Lecture 4 - Equivalence of Lambda terms (File)
- Lecture 5 - Introduction to Types (File)
- Livecoding Progress and Preservation Arith (Page)
- Lecture 6 - More types (File)
- Lecture 7 (File)
- Project slide (File)
- Project template (Page)
- Lecture on state (File)
- Progress and Preservation of STLC in Lean (Page)
- Lecture on polymorphis (File)
- Lecture week 9 supplement: Type Checking, Type Reconstruction, Unification, Hindley-Miller (File)
- Week 10 supplement: recursive types (File)
- Lecture week 10: subtyping (File)
- Lecture week 11: objects (File)
- Lecture Week 12: Calculus of Constructions (File)
- Slides for Week 14: Dependent Object Types (File)
- Week 14 - Calculus of Inductive Construction (File)