In this first lecture we will look at how we can represent abstract syntax using dependent types. Specifically, we will show how dependent types support embedding of a language’s type-system directly within the term representation itself.

By the end of this lecture you will be able to:

  1. understand that term representation using algebraic datatypes can lead to ill-typed terms being constructed;
  2. explain how intrinsically-typed terms support construction of well-typed terms;
  3. be able to construct intrinsically-typed terms for expressions, statements, and programs;
  4. explain how dependent-types and quantitative type-theory make nameless representations runtime efficient;

The lecture is split into the following sections: