4 research outputs found
Efficient Mendler-Style Lambda-Encodings in Cedille
It is common to model inductive datatypes as least fixed points of functors.
We show that within the Cedille type theory we can relax functoriality
constraints and generically derive an induction principle for Mendler-style
lambda-encoded inductive datatypes, which arise as least fixed points of
covariant schemes where the morphism lifting is defined only on identities.
Additionally, we implement a destructor for these lambda-encodings that runs in
constant-time. As a result, we can define lambda-encoded natural numbers with
an induction principle and a constant-time predecessor function so that the
normal form of a numeral requires only linear space. The paper also includes
several more advanced examples
Course-of-Value Induction in Cedille
In the categorical setting, histomorphisms model a course-of-value recursion
scheme that allows functions to be defined using arbitrary previously computed
values. In this paper, we use the Calculus of Dependent Lambda Eliminations
(CDLE) to derive a lambda-encoding of inductive datatypes that admits
course-of-value induction. Similar to course-of-value recursion,
course-of-value induction gives access to inductive hypotheses at arbitrary
depth of the inductive arguments of a function. We show that the derived
course-of-value datatypes are well-behaved by proving Lambek's lemma and
characterizing the computational behavior of the induction principle. Our work
is formalized in the Cedille programming language and also includes several
examples of course-of-value functions
Generic Zero-Cost Reuse for Dependent Types
Dependently typed languages are well known for having a problem with code
reuse. Traditional non-indexed algebraic datatypes (e.g. lists) appear
alongside a plethora of indexed variations (e.g. vectors). Functions are often
rewritten for both non-indexed and indexed versions of essentially the same
datatype, which is a source of code duplication.
We work in a Curry-style dependent type theory, where the same untyped term
may be classified as both the non-indexed and indexed versions of a datatype.
Many solutions have been proposed for the problem of dependently typed reuse,
but we exploit Curry-style type theory in our solution to not only reuse data
and programs, but do so at zero-cost (without a runtime penalty). Our work is
an exercise in dependently typed generic programming, and internalizes the
process of zero-cost reuse as the identity function in a Curry-style theory.Comment: Additional section on Generic Relational Reus
Monotone recursive types and recursive data representations in Cedille
Guided by Tarksi's fixpoint theorem in order theory, we show how to derive
monotone recursive types with constant-time roll and unroll operations within
Cedille, an impredicative, constructive, and logically consistent pure type
theory. As applications, we use monotone recursive types to generically derive
two recursive representations of data in the lambda calculus, the Parigot and
Scott encoding, together with constant-time destructors, a recursion scheme,
and the standard induction principle