History of the Ackermann and Péter functions
Textbook presentations sometimes suggest that the functions which now
bear the names of Wilhelm Ackermann and Rózsa Péter were
directly presented as examples of intuitively computable functions
which are not primitive
recursive.[34]
Such an understanding overlooks the context of the papers Ackermann
1928b and Péter 1935 in which these functions were introduced
as well as the subsequent work on forms of recursion which they
inspired. The goal of this supplement is to provide a brief account of
these developments which, while significant in their own right, lie
off the main branch of computability theory after the 1930s.
The first published presentation of a function similar to what we
called the Péter function in the main text appears to
have been given by Hilbert in his well-known address “On the
infinite” (1926). This corresponds to the text of a lecture he
delivered in Münster in 1925 which in turn draws on a lecture course
(1925) of the same name he delivered in Göttingen in
1924–1925. The published address is often cited as an
overview of Hilbert’s finitary standpoint and goal of proving
the consistency of infinitary mathematics by finite means. A more extensive treatment was later provided in Grundlagen der Mathematik (1934:
§2), where Hilbert and Bernay stress the finitary character of primitive recursive definitions.
Recursion is also an important topic in (1926) and
Hilbert’s treatment makes clear that he and his collaborators
had taken substantial steps towards developing a general theory of
recursive definability. But in neither this address nor the lectures
on which it is based does he directly suggest that primitive recursion
can be used to characterize finitary mathematics. Rather, Hilbert
simply assumes that functions defined by primitive recursion will be
regarded as finitary in the course of suggesting that such definitions may play a
role in addressing questions from transfinite set theory. In
particular, Hilbert’s original introduction (under a different
description) of what is now called “the Ackermann
function” occurs within the context of his attempted proof of
the Continuum Hypothesis
(CH).[35]
In this setting Hilbert begins by distinguishing what he calls
ordinary recursion from transfinite recursion. Ordinary
recursion is characterized informally as the means by which
a function of a number-theoretic variable is defined when we
indicate what value it has for and how the value for is obtained from that for . (1926 [1967: 386])
As the examples he provides make clear, this form subsumes what we now
call primitive
recursion.[36]
Hilbert then characterizes transfinite recursion as generalizing the
principle “that the value of the function for a value of the
variable is determined by the preceding values of the function”
from recursion on the natural numbers to ordinals in Cantor’s
second number class.
Hilbert next discusses recursion at higher types and it is within this
context that a description of the
Ackermann function first appears. Hilbert begins by introduces a hierarchy
of what Ackermann would later call function types: type 0 is
taken to be that of natural numbers, type 1 that of functions from
natural numbers to natural numbers, type 2 is that of functions from
type 1 functions to type 1 functions, etc. Hilbert next reprises the
definitions of type 1 functions denoted in the main text by
(addition), (multiplication),
(exponentiation), and observes that they
may all be defined by ordinary recursion. He next notes that the
uniformly defined function —wherein the
position in the sequence is now itself understood as a
variable—cannot be defined by in this manner. On the other hand,
he also provides a definition similar to () below which
shows how this function can be defined by recursion on a type 1
variable. Part of Hilbert’s approach to proving CH relied on his
characterization of the continuum as class of functions of type
obtainable by recursion at
higher types. Since can be regarded as a function of
a single numerical variable , the original role of this example
was thus to illustrate that this class is not exhausted by functions
definable by ordinary recursion.
Already at this time Hilbert attributed this result to
Ackermann.[37]
However a precise statement and proof would only appear three years
later in Ackermann’s paper “On Hilbert’s
construction of the real numbers” (1928b). Ackermann (1928b
[1967: 495]) begins by presenting a notational variant of
Hilbert’s example which takes the following form:
where
and
The equations () define by primitive
recursion relative to the auxiliary function . Note,
however, that () defines not by primitive
ordinary recursion but rather by recursion on a type 1 function. In
particular, denotes the n-fold
iteration of the function in which the variable is
replaced with the argument , i.e.,
In Ackermann’s notation, the subscript in
thus plays the role of an abstraction operator so that its first
argument would now be more conventionally denoted by . is thus itself a type 2 function—i.e., it
has type .
Ackermann next notes that the functions defined by do indeed give the sequence
described by
Hilbert—e.g.,
The goal of Ackermann’s paper was to demonstrate that the
function —i.e., that obtained by taking in () which is itself of type 1—cannot be
defined by ordinary recursion. This is accomplished by showing that
grows more rapidly than any function defined by
ordinary recursion—i.e., that for any such function ,
there exists such that for all , .
In order to do so, Ackermann shows that although Hilbert originally
defined by higher-order recursion using the
functional , the same function in extension can be defined
by a form of recursion directly on the natural numbers which is more
complex than ordinary recursion. In particular, the first two lemmas of Ackermann (1928b) jointly entail that this function is also given by the following
definition:
It is this definition which many subsequent authors identify as giving
the Ackermann function.
While the arguments on the righthand size of () are
natural numbers, this definition does not conform to the primitive
recursion scheme as the value of is defined
relative to its prior values at both and . In
light of this, Ackermann originally referred to this as an instance of
simultaneous recursion. His original argument
that is not primitive recursive was somewhat
involved. As such, subsequent presentations often demonstrate the
existence of a function definable by simultaneous but not primitive
recursion via the simpler example of the binary Péter
function .
Recall that as presented in the main text this is given by
This definition was presented by Péter (1935) (see also 1967:
9) and bears a similar relation to the function
—which was defined in the main text in terms of the
functional —as does () to
(). Relative to the terminology she subsequently
introduced, the definition () is an instance of nested
double recursion—i.e., it exemplifies two separate
generalizations of primitive recursion which are both subsumed under
Ackermann’s original term “simultaneous
recursion”.
Double recursion is in turn an instance of multiple or
k-recursion which was considered in the general case
by Péter (1937). For double recursion (i.e., ), the
case for binary functions is given by the scheme
where and are previously given
functions and is fixed. In order to calculate the value
for the arguments we must thus first obtain its
value for the pairs and also
. Note, however, that both of these pairs
come before in the lexicographical
ordering of —i.e.,
iff or and . Thus under the
assumption that we can compute the value of ,
() can still be understood as specifying a finite
inductive procedure for calculating the values of
.[38]
And in fact Péter (1937) showed that the generalization of
() to multiple recursion on variables with
parameters does not lead outside the class of primitive recursive
functions by showing that this procedure can be reduced to course of
values recursion (see also 1967: 6).
In order to understand the generalization involved with nested
recursion, () can be compared directly with
(). The former can be considered as a case of the latter
in which is the projection function which returns its third
argument . In the case of () we
assume that is a given function already known to be in
the class under consideration. But in the case of (),
corresponds to —i.e., a
substitution instance of the function which is itself being defined.
It is in this sense which the definition exemplified by ()
is said to involve a form of recursion which is “nested”
(eingeschachtelte). For although a calculation carried out by
applying the clauses of () also follows the lexicographic
order, when the first argument of decreases, the value of the
second argument required to calculate is not
determined independently of the specification of function
itself. It is in this sense in which the definition of the Ackermann
and Péter functions have subsequently been said to exhibit a
form impredicativity which makes them inaccessible from
Hilbert’s finitary standpoint (see, e.g., Tait 1961, 1968,
1981).[39]
Nested recursion was introduced by Péter (1935) and is
considered in relation to k- and transfinite recursion in Tait
(1961), Péter (1967), and Rose (1984). The definitions
() and () can be understood to exemplify the
following general scheme of double nested recursion formulated by
Epstein and Carnielli (2008: 117):
for a fixed but arbitrary . But again this scheme on its own does
not necessarily lead out of the class of primitive recursive
functions. In fact Péter (1956) shows that if , and
are primitive recursive, and where
is also primitive recursive and is calculated by means of
), then is also primitive recursive (see also
1967: 10).