15-312 Foundations of Programming Languages
Lecture 27: Dependent Types

In this lecture we discuss dependent types. They can be used in functional languages in order to make types much more expressive, or in logical frameworks in order to obtain adequate representations of derivations.

Dependent types can be formulated in a very elegant way, but can easily lead to decidability problems because terms are embedded in types. In functional programming this problem is solved by making sure index objects of type families are drawn from a tractable constraint domain, such as linear equalities and inequalities over integers. In logical frameworks we restrict ourselves to pure lambda-calculus in which type-checking remains decidable.

  • Lecture notes: none
  • Reading:
    • Hongwei Xi and Frank Pfenning. Dependent types in practical programming. In A. Aiken, editor, Conference Record of the 26th Symposium on Principles of Programming Languages (POPL'99), pages 214-227. ACM Press, January 1999.
      [PDF] [PS]
    • Frank Pfenning. Logical frameworks. In Alan Robinson and Andrei Voronkov, editors, Handbook of Automated Reasoning, chapter 17, pages 1063-1147. Elsevier Science and MIT Press, 2001.
      [PDF] [PS]
  • Code: Twelf home page
  • Previous lecture: The Pi-Calculus and Concurrent ML
  • This is the final lecture of the course

[ Home | Schedule | Assignments | Software | Resources ]

Frank Pfenning