15-819 Computational Type Theory

Course Information

Time: Tue-Thu 12:20-13:40
Instructor: Robert Harper
Zoom: Online Lecture
Slack: Slack


Type theory arose as a codification of Brouwer's program of intuitionism, which sought to develop a foundation for mathematics based on the idea of an effective construction, which we would today call a program. According to Brouwer, mathematics is a human activity in which people communicate ideas about infinite objects in a finite way. This is only possible, it is said, because all humans share an innate understanding of an algorithm, or program. Thus, a proof is a program that transforms evidence for assumptions into evidence for the conclusion. All mathematical objects are to be similarly constructed, with proofs being just a particular case. Thus, according to Brouwer, logic is based on (constructive) mathematics, rather than the other way around.

Brouwer's program was highly controversial, provoking fierce opposition from Hilbert, certainly one of the greatest mathematicians of all time. Infamously Brouwer denied the principle of the excluded middle, that every proposition is either true or false. On the surface this seems preposterous, but read more carefully one can discern quite deep ideas in play. One is that, plainly, an open problem, such as the P/NP conjecture, has neither a proof nor a refutation. The other, equally plainly, is that no proposition can be both true and false. These two perspectives are compatible, so long as one distinguishes them as distinct statements. Constructivism refines, rather than refutes, well-established principles of reasoning, while admitting a computational interpretation of them.


Intuitionistic type theory, as developed principally by Per Martin-Löf, is a codification of Brouwer's constructivism. Computable constructions are classified by types, which specify their abstract properties, rather than their concrete realizations as sets or other mathematical objects. Thus type theory is simultaneously a formulation of constructive mathematics and a comprehensive theory of computation.

Type theory may be presented semantically, with types specifying the behavior of programs, or axiomatically, as a formal system admitting many interpretations. From a computer science perspective, the computational semantics is of the essence, and the role of formalisms is pragmatic, the means for writing programs and building proof checkers. A central tool in either case is the method of logical relations, or Tait's method. Semantically, a wide range of typing constructs can be expressed using logical relations. Formally, logical relations are fundamental to the study of properties of languages, such as decidability of typing or termination properties.

In this course we will study a range of typing concepts using these methods, from simple typing concepts such as functions and data structures found in many programming languages, to polymorphic type theory, which accounts for abstract types, and to dependent type theory, which accounts for mathematical proofs and the theory of program modules. Specific topics will vary according to the needs and interests of the students.


All students are required to attend all lectures, and are required to complete assigned homework. Exercises will be given during lecture, and solutions are to be sent to the instructor by the end of the week in which they are assigned. Lectures will not be recorded, but the contents of the virtual blackboards will be posted after each lecture.

The course will be offered in an online format. Student cameras are required to be turned on during class. Students are encouraged to ask questions, and to discuss course material with other students. No grades will be assigned, and the course cannot be used to satisfy any degree requirements.




Date Topic Reading Boards
Feb 2 Intuitionism Feb 2-4
4 Tait's Method How to (Re)Invent Tait's Method
9 Positive and Inductive Types Tarski's Fixed Point Theorem Feb 9-11
11 Coinductive Types Termination for Natural and Unnatural Numbers
16 Normalization Kripke-Style Logical Relations for Normalization Feb 16-18
18 Normalization
23 (No Class)
25 Relational Action of Type Constructors Candidates and The Relational Action of Type Constructors Feb 25
Mar 2 Normalization Kripke-Style Logical Relations for Normalization Mar 2-4
4 Girard's Method How to (Re)Invent Girard's Method
9 Semantic Equality Mar 9-11
11 Parametricity Reynolds's Theorem, Directly Mar 16-18
16 Formal Equality
18 Deciding Formal Equality Deciding Equivalence
23 Logical Framework Mar 23-25
25 Logical Framework
30 Logical Framework On Equivalence and Canonical Forms in the LF Type Theory Mar 30-Apr 1
Apr 1 Logical Framework Mechanizing Metatheory in a Logical Framework
6 Logical Framework LF in Canonical Form Apr 6-8
8 Logical Framework A Logical Framework for Type Theories
13 Formal Dependent Type Theory Apr 13
15 (No Class)
20 Semantic Dependent Type Theory Apr 20-22
22 Semantic Dependent Type Theory
27 Semantic Dependent Type Theory Apr 27-29
29 Semantic Dependent Type Theory
May 5 May 5-7

Robert Harper
Last modified: Thu Apr 29 12:18:13 EDT 2021