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:
- understand that term representation using algebraic datatypes can lead to ill-typed terms being constructed;
- explain how intrinsically-typed terms support construction of well-typed terms;
- be able to construct intrinsically-typed terms for expressions, statements, and programs;
- explain how dependent-types and quantitative type-theory make nameless representations runtime efficient;
The lecture is split into the following sections: