The significance of this function is that it can be proved to be a recursive
function of two variables. Thus, in particular, a(x,x) is recursive. But it
can also be shown that a(x,x) is not primitive recursive. (The difference
between recursive and primitive recursive is that computation of a recursive
function may, in general, involve a finite but unbounded search for a solution
to an equation involving recursive functions. In the case of primitive
recursive functions there must be an a priori primitive recursive upper bound
on the number of steps in the search.)
Ackermann's function grows so quickly, especially in the y variable, that it
is completely infeasible to calculate it for more than a few small values of
y. For example, things really begin to blow up in the calculation of a(1,4).
At the outset, it is not even clear that the above equations define a function,
i.e., that the recursions will ever end. Let us begin by proving by induction
that this will indeed occur. We induct on y, and then on x for each fixed y.
(This is typical of arguments involving a.) The case y = 0 is obvious, so
we assume the following outer inductive hypothesis:
(i) The recursive depth calculating a(x,y) is finite, for every x.
(By recursive depth, we mean the total number of times "a" must be written
in successive applications of the 3 rules until a call with y = 0 occurs.)
We wish to show: the recursive depth calculating a(x,y+1) is finite for every
x. This we do by induction on x. If x = 0, then a(x,y+1) = a(1,y), and the
result follows by inductive hypothesis (i). Let us now make inductive
hypothesis (ii):
(ii) The recursive depth calculating a(x,y+1) is finite, for a given x.
There remains to show: the recursive depth calculating a(x+1,y+1) is finite.
Now a(x+1,y+1) = a(a(x,y+1),y). By (ii), a(x,y+1) is computable. Call its value
N. Then a(N,y) is computable by (i), since (i) holds for every x, in particular
for x = N.