[Agda] Recursive types for free?
Thorsten Altenkirch
txa at Cs.Nott.AC.UK
Mon May 30 14:40:16 CEST 2011
Thank you, Dan for summarizing the issues so well.
One additional remark on a foundational level that it is not clear wether it is a good idea to "explain" e.g. the natural numbers via higher order functions and impredicative quantification.
Cheers,
Thorsten
On 29 May 2011, at 16:25, Dan Doel wrote:
> On Fri, May 27, 2011 at 5:49 PM, Anthony de Almeida Lopes
> <anthony.de.almeida.lopes at falsifiable.net> wrote:
>> Does anyone know why Wadler's "Recursive Types for Free" techniques are not
>> used more widely, for example in Agda? Is it because of the inefficiency of
>> execution?
>
> There are additional issues.
>
> First, the encoding requires impredicativity for it to be useful. If
> you don't have impredicativity, your datatypes end up being one level
> higher than they can eliminate over, so they can't eliminate over
> themselves. This would mean, for instance, that you can't define
> multiplication of naturals by iterated addition, you have to instead
> work with the underlying representation.
>
> Another problem with impredicativity is that it only the lowest level
> of a universe hierarchy may be impredicative without introducing
> inconsistency (at best). So, you cannot use this encoding for any data
> structures you want to use together with types and such, if you want
> them to be able to compute with themselves, as mentioned.
>
> A second problem is that you need to internalize parametricity to get
> strong induction principles for these encoded datatypes. I think this
> corresponds to weakly initial algebras vs. initial algebras, which
> Wadler talks about. However, how to incorporate parametricity into a
> theory is still a research question, and the only person I know making
> headway on it is Jean-Philipe Bernardy (who hangs out here
> occasionally).
>
> A third problem is that there's no obvious way to do large elimination
> for this encoding. If natural numbers are:
>
> (R : Set) -> R -> (R -> R) -> R
>
> then you cannot eliminate into Set. If you choose:
>
> (R : Set1) -> R -> (R -> R) -> R
>
> then you need to have cumulativity for normal functioning, and you
> can't eliminate into Set2. Etc. And if you try:
>
> (i : Level) -> (R : Set i) -> R -> (R -> R) -> R
>
> well, no one knows if it's safe to stick that sort of thing into Set
> impredicatively.
>
> And if you are trying to get large elimination, here's some food for
> thought: strong, impredicative sums are known to be inconsistent. You
> probably can't have all three of the above together without
> introducing partiality.
>
> So, there are a lot of issues before you even get to the fact that
> these encodings are asymptotically slower for a lot of uses.
>
> -- Dan
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
More information about the Agda
mailing list