Ackermann function is total recursive
In this entry, we give a formal proof that the Ackermann function A(x,y), given by
A(0,y)=y+1,A(x+1,0)=A(x,1),A(x+1,y+1)=A(x,A(x+1,y)) |
is both a total function and a recursive function
. Actually, the fact that A is total is proved in this entry (http://planetmath.org/PropertiesOfAckermannFunction). It remains to show that A is recursive.
Recall that the computation of A(x,y), given x,y, can be thought of as an iterated operation performed on finite sequences
of integers, starting with x,y and ending with z=A(x,y) (see this entry (http://planetmath.org/ComputingTheAckermannFunction)). It is this process we will utilize to prove that A is recursive.
In the proof below, the following notations and definitions are used to simplify matters:
-
•
if s is the sequence r1,…,rm, then E(s) or ⟨r1,…,rm⟩ denote the code number of s given the encoding E;
-
•
lh(n) is the length of the sequence whose code number is n;
-
•
(n)i is the i-th number in the sequence whose code number is n;
-
•
(n)-i is the i-th to the last number in the sequence whose code number is n (so that (n)-1 is the last number in the sequence whose code number is n);
-
•
red(n) is the code number of the sequence obtained by deleting the last number of the sequence whose code number is n;
-
•
ext(n,a) is the code number of the sequence obtained by appending a to the end of the sequence whose code number is n.
If E is a primitive recursive encoding, then each of the above function is primitive recursive. For example, (n)-i=(n)lh(n)˙-i+1.
Theorem 1.
A is recursive.
Proof.
In this proof, the choice of encoding E is the multiplicative encoding, for it is convenient and, more importantly, a primitive recursive encoding. Briefly,
E(r1,…,rm)=pr1+11⋯prm+1m, |
where pi is the i-th prime number (so that p1=2).
We know that computing A(x,y)=z is basically a sequence of computations on finite sequences:
x,y⟶⋯⟶z⟶z⟶⋯ |
Let s(x,y,i) denote the sequence at step i, then the above sequence can be rewritten:
s(x,y,0)⟶s(x,y,1)⟶⋯⟶s(x,y,k)⟶⋯ |
Define f(x,y,i)=E(s(x,y,i)). From this we see that
g(x,y)=μi[f(x,y,i)=f(x,y,i+1)]. |
is the function that computes the smallest number of steps needed so that the code number becomes stationary. When the code number is decoded, we get the resulting value of A(x,y):
A(x,y)=D(f(x,y,g(x,y))), |
where D(m):=, decodes , and returns the last number in the sequence whose code number is .
Now the remaining task to show that is primitive recursive. First, note that
is primitive recursive. Next, we want to express
where is the function that changes the code number of the sequence to the code number of the sequence . Once we obtain and show that is primitive recursive, then is primitive recursive, as it is defined by primitive recursion via primitive recursive functions and .
To find out what is, recall the four rules of constructing the next sequence from the current one givne in this this entry (http://planetmath.org/ComputingTheAckermannFunction). Let and . We rewrite the four rules using the notations and definitions here:
-
1.
if , then ;
-
2.
if , and , then , where
-
3.
if , and and , then , where
or
-
4.
if , and and , then then , where
If we define predicates:
-
1.
,
-
2.
,
-
3.
,
-
4.
.
Then each is primitive recursive, pairwise exclusive, and . Now, define as follows:
Since is defined by cases, and each is primitive recursive, is also primitive recursive. ∎
Title | Ackermann function is total recursive |
---|---|
Canonical name | AckermannFunctionIsTotalRecursive |
Date of creation | 2013-03-22 19:07:53 |
Last modified on | 2013-03-22 19:07:53 |
Owner | CWoo (3771) |
Last modified by | CWoo (3771) |
Numerical id | 15 |
Author | CWoo (3771) |
Entry type | Theorem![]() |
Classification | msc 03D75 |
Related topic | AckermannFunctionIsNotPrimitiveRecursive |