Through the Oregon Programming Languages Summer School videos I became interested in Type Theory over a year ago, and in what little so-called spare time I have these days it has become my primary recreational interest.
I have presented a couple of different talks on the subject over the past few months. A presentation on Homotopy Type Theory which is derived from a prior talk I gave at Tachyus on Type Theory and Practical Application.
A note of caution to anyone diving into Type Theory through anything I have written. I have presented on Type Theory and Hott in particular because there is a lot of interest by programmers in this topic. Preparing and giving both talks was a learning opportunity for me. A lot of questions followed from the perspective of category theory, and fortunately there was usually someone with a background in that area willing to take them. There’s flagrant overreaching in my presentations. Calling path induction “the fundamental theorem of type theory” is way too provocative for a neophyte to attempt, and in introducing the axiom of univalence I did not set up nearly enough introduction for it to make sense. Specifically the equivalence operator needs quite a bit of introduction.
Both my presentations evoked lively discussion and stretched out to two hours. It is really too much to cover in one presentation, even for an introduction. Ideally a follow-up presentation (or two) would be outlined as follows.
- Cover the formation, introduction, elimination, and computation rules for the primary types…and perhaps some of the later specific types introduced in The Hott Book.1
- An in depth look at path induction.
- What is equivalence?
- Only then can function extensionality and univalence have the context necessary for introduction.
- …and cover sets in type theory and mere propositions.
 The HoTT Book, §1.5. This is all math-speak. I will attempt to translate into programmer-speak.
Formation Rule: How one forms a type, the representation syntax.
Introduction Rule: The constructor(s) for forming elements of the type.
Elimination Rule: How to use an element of the type, the usage syntax.
Computation Rule: a.k.a. β-reduction to the theorists. Simply put, using the constructor in an expression.