Inductive, coinductive, and pointed types (original) (raw)

Principles of Alpha-Induction and Recursion for the Lambda Calculus in Constructive Type Theory

We formulate principles of induction and recursion for a variant of lambda calculus in its original syntax (i.e., with only one sort of names for both bound and free variables) in which -conversion is based upon name swapping as in nominal abstract syntax. The principles allow to work modulo -conversion and implement the Barendregt variable convention. We derive them from the simple structural induction principle on concrete terms and work out applications to some fundamental meta-theoretical results, such as the substitution lemma for -conversion and the lemma on substitution composition. The whole work is implemented in Agda.

Syntactic Considerations on Recursive Types

1996

We study recursive types from a syntactic perspective. In particular, we compare the formulations of recursive types that are used in programming languages and formal systems. Our main tool is a new syntactic explanation of type expressions as functors. We also introduce a simple logic for programs with recursive types in which we carry out our proofs. 1 Introduction Recursive types are common in both programming languages and formal systems. By now, there is a deep and well-developed semantic theory of recursive types. The syntactic aspects of recursive types are also well understood in some special cases. In particular, there is an important body of knowledge about covariant recursive types, which include datatypes like natural numbers, lists, and trees. Beyond the covariant case, however, the syntactic understanding of recursive types becomes rather spotty. Consequently, the relations between various alternative formulations of recursive types are generally unclear. Furthermore, ...