Guarded Recursive Types in Type Theory
In total functional (co)programming valid programs are guaranteed to always produce (part of) their output in a finite number of steps.
Enforcing this property while not sacrificing expressivity has been
challenging. Traditionally systems like Agda and Coq have relied on a syntactic restriction on (co)recursive calls, but this is inherently
Guarded recursion, first introduced by Nakano, has been recently
applied in the coprogramming case to ensure totality through typing instead. The relationship between the consumption and the production of data is captured by a delay modality, which allows to give a safe type to a general fixpoint combinator.
This thesis consists of two parts. In the first we formalize, using
the proof assistant Agda, a result about strong normalization for a
small language extended with guarded recursive types. In the second we extend guarded recursive types to additionally ensure termination of recursive programs: the main result is a model based on relational parametricity for the dependently typed calculus we designed.