[PRL] Type question...
Mitchell Wand
wand at ccs.neu.edu
Fri Oct 5 08:24:22 EDT 2007
Just back from ICFP, so I'm only getting to this now.
Of course Y (and its friends) have no simple type, because the simply-typed
lambda calculus is strongly normalizing, and Y has no normal form.
Every pure lambda term is typable with recursive types, since you can give
any pure lambda term the type (mu t)(t -> t). If you add constants, of
course, all bets are off.
I believe there is a theorem that says that all pure lambda terms are
typable using intersection types, but I don't know the details.
--Mitch
On 10/5/07, Felix S Klock II <pnkfelix at ccs.neu.edu> wrote:
>
>
> On Oct 3, 2007, at 11:33 PM, Riccardo Pucella wrote:
>
> >>> (let ((fact (lambda (num)
> >>> ((lambda (f n) (f f n))
> >>> (lambda (g m)
> >>> (if (< m 2) 1
> >>> (* m (g g (- m 1))))) num))))
> >>> (fact 5))
> >
> >> I believe it's the (f f n) and (g g (- m 1)) that shoot you down.
> >> There's no simple type for a function that accepts itself as an
> >> argument.
> >
> > Right; as Carl says, just look at (lambda (f n) (f f n))
> >
> > The best type you could give it is the recursive type:
> > (\mu Z.( Z x a -> b)) x a -> b
>
> Or a (sufficiently large) intersection type could also type the term,
> I believe.
>
> But who wants to go down that road. . .
>
> -Felix
>
>
> _______________________________________________
> PRL mailing list
> PRL at lists.ccs.neu.edu
> https://lists.ccs.neu.edu/bin/listinfo/prl
>
>
-------------- next part --------------
HTML attachment scrubbed and removed
More information about the PRL
mailing list