> Is there documentation on exactly what the elimination constants are?
> Epigram was happy with an Ackermann function, which surprised me
> slightly.
>

It is also surprising to me. Ackermann function is a nested function and is
not a primitive recursion. The eliminators in conventional type theories are
not powerful enough to define such functions directly. We must be clever
enough to find other functions which are primitive and are "extensionally"
equal to Ackermann function. Of course, other function may not have the
beauty of the original, and most of programmers would feel very
uncomfortable. I don't like the "Ackermann" function defined in Coq. I don't
even like the way we define Fibs in Coq because the programmers are forced
to find another equivalent function. Another similar example is the
following.

f(0)=0
f(1)=1
f(n+2)=2*f(n+1)-f(n)+1

There are many ways to define this function, but we cannot define it as it
is.
(The cleverest programmers can define f as: f(n)=n*(n+1)/2)

I have developed and implemented a type theory which does not care whether a
function is totally defined. In other words, partially defined functions are
acceptable. In my implementation, the Ackermann function and the above
function can be defined just as they are.

Yong

==============================
Dr. Yong Luo
Computing Laboratory
University of Kent

Reply via email to