Knuth's up-arrow notation explained

In mathematics, Knuth's up-arrow notation is a method of notation for very large integers, introduced by Donald Knuth in 1976.[1]

In his 1947 paper,[2] R. L. Goodstein introduced the specific sequence of operations that are now called hyperoperations. Goodstein also suggested the Greek names tetration, pentation, etc., for the extended operations beyond exponentiation. The sequence starts with a unary operation (the successor function with n = 0), and continues with the binary operations of addition (n = 1), multiplication (n = 2), exponentiation (n = 3), tetration (n = 4), pentation (n = 5), etc.Various notations have been used to represent hyperoperations. One such notation is

Hn(a,b)

.Knuth's up-arrow notation

\uparrow

is another. For example:

\uparrow

represents exponentiation (iterated multiplication) 2 \uparrow 4 = H_3(2,4) = 2\times(2\times(2\times 2)) = 2^4 = 16

\uparrow\uparrow

represents tetration (iterated exponentiation) 2 \uparrow\uparrow 4 = H_4(2,4) = 2 \uparrow (2 \uparrow (2 \uparrow 2))= 2^ = 2^ = 65,536

\uparrow\uparrow\uparrow

represents pentation (iterated tetration) \begin2 \uparrow\uparrow\uparrow 4 = H_5(2,4) = 2 \uparrow\uparrow (2 \uparrow\uparrow (2 \uparrow\uparrow 2))\\ &= 2 \uparrow\uparrow (2 \uparrow\uparrow (2 \uparrow 2))\\&= 2 \uparrow\uparrow (2 \uparrow\uparrow 4)\\&= \underbrace \; = \; \underbrace\\& \;\;\;\;\; 2 \uparrow\uparrow 4 \mbox 2 \;\;\;\;\; \mbox\\\endThe general definition of the up-arrow notation is as follows (for

a\ge0,n\ge1,b\ge0

):a\uparrow^nb = H_(a,b) = a[n+2]b.Here,

\uparrown

stands for n arrows, so for example2 \uparrow\uparrow\uparrow\uparrow 3 = 2\uparrow^4 3.The square brackets are another notation for hyperoperations.

Introduction

The hyperoperations naturally extend the arithmetic operations of addition and multiplication as follows.Addition by a natural number is defined as iterated incrementation:

\begin{matrix} H1(a,b)=a+b=&a+\underbrace{1+1+...+1}\\ &bcopiesof1 \end{matrix}

Multiplication by a natural number is defined as iterated addition:

\begin{matrix} H2(a,b)=a x b=&\underbrace{a+a+...+a}\\ &bcopiesofa \end{matrix}

For example,

\begin{matrix} 4 x 3&=&\underbrace{4+4+4}&=&12\\ &&3copiesof4 \end{matrix}

Exponentiation for a natural power

b

is defined as iterated multiplication, which Knuth denoted by a single up-arrow:

\begin{matrix} a\uparrowb=H3(a,b)=ab=&\underbrace{a x a x ... x a}\\ &bcopiesofa \end{matrix}

For example,

\begin{matrix} 4\uparrow3=43=&\underbrace{4 x 4 x 4}&=&64\\ &3copiesof4 \end{matrix}

Tetration is defined as iterated exponentiation, which Knuth denoted by a “double arrow”:

\begin{matrix} a\uparrow\uparrowb=H4(a,b)=&

{
a
.a
.
.
\underbrace{a
}} & = & \underbrace \\ & b\mboxa & & b\mboxa \end

For example,

\begin{matrix} 4\uparrow\uparrow3=&

44
\underbrace{4
} & = & \underbrace & = & 4^ & \approx & 1.34078079\times 10^&\\ & 3\mbox4 & &3\mbox4 \end

Expressions are evaluated from right to left, as the operators are defined to be right-associative.

According to this definition,

3\uparrow\uparrow2=33=27

3\uparrow\uparrow

33
3=3

=327=7,625,597,484,987

3\uparrow\uparrow

33
3
4=3
327
=3

=376255974849871.2580143 x 103638334640024

3\uparrow\uparrow

33
3
3
5=3
327
3
=3
37625597484987
=3

1.2580143 x 103638334640024
3

etc.

This already leads to some fairly large numbers, but the hyperoperator sequence does not stop here.

Pentation, defined as iterated tetration, is represented by the “triple arrow”:

\begin{matrix} a\uparrow\uparrow\uparrowb=H5(a,b)=& \underbrace{a\uparrow\uparrow(a\uparrow\uparrow(...\uparrow\uparrowa))}\\ &bcopiesofa \end{matrix}

Hexation, defined as iterated pentation, is represented by the “quadruple arrow”:

\begin{matrix} a\uparrow\uparrow\uparrow\uparrowb=H6(a,b)=& \underbrace{a\uparrow\uparrow\uparrow(a\uparrow\uparrow\uparrow(...\uparrow\uparrow\uparrowa))}\\ &bcopiesofa \end{matrix}

and so on. The general rule is that an

n

-arrow operator expands into a right-associative series of (

n-1

)-arrow operators. Symbolically,

\begin{matrix} a\underbrace{\uparrow\uparrow...\uparrow}nb= \underbrace{a\underbrace{\uparrow...\uparrow}n-1(a\underbrace{\uparrow...\uparrow}n-1(... \underbrace{\uparrow...\uparrow}n-1a))}bcopiesofa\end{matrix}

Examples:

3\uparrow\uparrow\uparrow2=3\uparrow\uparrow3=

33
3

=327=7,625,597,484,987

\begin{matrix} 3\uparrow\uparrow\uparrow3=3\uparrow\uparrow(3\uparrow\uparrow3)=3\uparrow\uparrow(3\uparrow3\uparrow3)=& \underbrace{3\uparrow3\uparrow...\uparrow3}\\ &3\uparrow3\uparrow3copiesof3 \end{matrix} \begin{matrix} =&\underbrace{3\uparrow3\uparrow...\uparrow3}\\ &7,625,597,484,987copiesof3 \end{matrix} \begin{matrix} =&

3
3
3
3
\underbrace{3
} \\ & \mbox \end

Notation

In expressions such as

ab

, the notation for exponentiation is usually to write the exponent

b

as a superscript to the base number

a

. But many environments - such as programming languages and plain-text e-mail - do not support superscript typesetting. People have adopted the linear notation

a\uparrowb

for such environments; the up-arrow suggests 'raising to the power of'. If the character set does not contain an up arrow, the caret (^) is used instead.

The superscript notation

ab

doesn't lend itself well to generalization, which explains why Knuth chose to work from the inline notation

a\uparrowb

instead.

a\uparrownb

is a shorter alternative notation for n uparrows. Thus

a\uparrow4b=a\uparrow\uparrow\uparrow\uparrowb

.

Writing out up-arrow notation in terms of powers

Attempting to write

a\uparrow\uparrowb

using the familiar superscript notation gives a power tower.

For example:

a\uparrow\uparrow4=a\uparrow(a\uparrow(a\uparrowa))=

aa
a
a

If b is a variable (or is too large), the power tower might be written using dots and a note indicating the height of the tower.

a\uparrow\uparrowb=

..{a
.
a
\underbrace{a
}}_

Continuing with this notation,

a\uparrow\uparrow\uparrowb

could be written with a stack of such power towers, each describing the size of the one above it.

a\uparrow\uparrow\uparrow4=a\uparrow\uparrow(a\uparrow\uparrow(a\uparrow\uparrowa))=

..{a
.
a
\underbrace{a
}}_

Again, if b is a variable or is too large, the stack might be written using dots and a note indicating its height.

a\uparrow\uparrow\uparrowb=\left.

..{a
.
a
\underbrace{a
}}_ \right\} b

Furthermore,

a\uparrow\uparrow\uparrow\uparrowb

might be written using several columns of such stacks of power towers, each column describing the number of power towers in the stack to its left:

a\uparrow\uparrow\uparrow\uparrow4=a\uparrow\uparrow\uparrow(a\uparrow\uparrow\uparrow(a\uparrow\uparrow\uparrowa))=\left.\left.\left.

..{a
.
a
\underbrace{a
}}_ \right\} \underbrace_ \right\} \underbrace_ \right\} a

And more generally:

a\uparrow\uparrow\uparrow\uparrowb=\underbrace{ \left.\left.\left.

..{a
.
a
\underbrace{a
}}_ \right\} \underbrace_ \right\} \cdots \right\} a }_

This might be carried out indefinitely to represent

a\uparrownb

as iterated exponentiation of iterated exponentiation for any a, n and b (although it clearly becomes rather cumbersome).

Using tetration

The Rudy Rucker notation

ba

for tetration allows us to make these diagrams slightly simpler while still employing a geometric representation (we could call these tetration towers).

a\uparrow\uparrowb={}ba

a\uparrow\uparrow\uparrowb=

a.
.
.
a
\underbrace{

a}b

a\uparrow\uparrow\uparrow\uparrowb=\left.

a.
.
.
a
\underbrace{
a}
a.
.
.
a
\underbrace{
a

a}}\right\}b

Finally, as an example, the fourth Ackermann number

4\uparrow44

could be represented as:
4.
.
.
4
\underbrace{
4}
4.
.
.
4
\underbrace{
4
4.
.
.
4
\underbrace{
4

4}}=

4.
.
.
4
\underbrace{
4}
4.
.
.
4
\underbrace{
4
44
4
4
}

Generalizations

Some numbers are so large that multiple arrows of Knuth's up-arrow notation become too cumbersome; then an n-arrow operator

\uparrown

is useful (and also for descriptions with a variable number of arrows), or equivalently, hyper operators.

Some numbers are so large that even that notation is not sufficient. The Conway chained arrow notation can then be used: a chain of three elements is equivalent with the other notations, but a chain of four or more is even more powerful.

\begin{matrix} a\uparrownb&=&a[n+2]b&=&a\tob\ton\\ (Knuth)&&(hyperoperation)&&(Conway) \end{matrix}

6\uparrow\uparrow4

=
.6
.
.
6
\underbrace{6
}_, Since

6\uparrow\uparrow4

=
66
6
6
=
646,656
6
, Thus the result comes out with
.6
.
.
6
\underbrace{6
}_

10\uparrow(3 x 10\uparrow(3 x 10\uparrow15)+3)

=

\underbrace{100000...000}\underbrace{300000...00015}}

or
3 x 1015
3 x 10+3
10
(Petillion)

Even faster-growing functions can be categorized using an ordinal analysis called the fast-growing hierarchy. The fast-growing hierarchy uses successive function iteration and diagonalization to systematically create faster-growing functions from some base function

f(x)

. For the standard fast-growing hierarchy using

f0(x)=x+1

,

f2(x)

already exhibits exponential growth,

f3(x)

is comparable to tetrational growth and is upper-bounded by a function involving the first four hyperoperators;. Then,

f\omega(x)

is comparable to the Ackermann function,

f\omega(x)

is already beyond the reach of indexed arrows but can be used to approximate Graham's number, and
f
\omega2

(x)

is comparable to arbitrarily-long Conway chained arrow notation.

These functions are all computable. Even faster computable functions, such as the Goodstein sequence and the TREE sequence require the usage of large ordinals, may occur in certain combinatorical and proof-theoretic contexts. There exist functions which grow uncomputably fast, such as the Busy Beaver, whose very nature will be completely out of reach from any up-arrow, or even any ordinal-based analysis.

Definition

Without reference to hyperoperation the up-arrow operators can be formally defined by

a\uparrownb= \begin{cases} ab,&ifn=1;\\ 1,&ifn>1andb=0;\\ a\uparrown-1(a\uparrown(b-1)),&otherwise \end{cases}

for all integers

a,b,n

with

a\ge0,n\ge1,b\ge0

.

(a\uparrow1b=a\uparrowb=ab)

as the base case, and tetration

(a\uparrow2b=a\uparrow\uparrowb)

as repeated exponentiation. This is equivalent to the hyperoperation sequence except it omits the three more basic operations of succession, addition and multiplication.

(a\uparrow0b=a x b)

as the base case and iterate from there. Then exponentiation becomes repeated multiplication. The formal definition would be

a\uparrownb= \begin{cases} a x b,&ifn=0;\\ 1,&ifn>0andb=0;\\ a\uparrown-1(a\uparrown(b-1)),&otherwise \end{cases}

for all integers

a,b,n

with

a\ge0,n\ge0,b\ge0

.

Note, however, that Knuth did not define the "nil-arrow" (

\uparrow0

). One could extend the notation to negative indices (n ≥ -2) in such a way as to agree with the entire hyperoperation sequence, except for the lag in the indexing:

Hn(a,b)=a[n]b=a\uparrown-2bforn\ge0.

The up-arrow operation is a right-associative operation, that is,

a\uparrowb\uparrowc

is understood to be

a\uparrow(b\uparrowc)

, instead of

(a\uparrowb)\uparrowc

. If ambiguity is not an issue parentheses are sometimes dropped.

Tables of values

Computing 0↑n b

Computing

0\uparrownb=Hn+2(0,b)=0[n+2]b

results in

0, when n = 0  [3]

1, when n = 1 and b = 0   [4] [5]

0, when n = 1 and b > 0   [4] [5]

1, when n > 1 and b is even (including 0)

0, when n > 1 and b is odd

Computing 2↑n b

Computing

2\uparrownb

can be restated in terms of an infinite table. We place the numbers

2b

in the top row, and fill the left column with values 2. To determine a number in the table, take the number immediately to the left, then look up the required number in the previous row, at the position given by the number just taken.
Values of

2\uparrownb

=

Hn+2(2,b)

=

2[n+2]b

= 2 → b → n
123456formula
12 4 8 16 32 64

2b

22 4 16 65536

265{,536}2.0 x 1019{,728}

265{,536
2
}\approx 10^

2\uparrow\uparrowb

32 4 65536

\begin{matrix}

{
2
.2
.
.
\underbrace{2
}} \\ 65536\mbox2 \end

\begin{matrix}

{
2
.2
.
.
\underbrace{2
}}\\ \underbrace\\ 65536\mbox2 \end

\begin{matrix}

{
2
.2
.
.
\underbrace{2
}}\\ \underbrace\\ \underbrace\\ 65536\mbox2 \end

2\uparrow\uparrow\uparrowb

42 4

\begin{matrix}

{
2
.2
.
.
\underbrace{2
}}\\ 65536\mbox2 \end

\begin{matrix}

2.
.
.
2
\underbrace{

2}\\

{
2
.2
.
.
\underbrace{2
}}\\ 65536\mbox2 \end

\begin{matrix}

2.
.
.
2
\underbrace{

2}\\

2.
.
.
2
\underbrace{

2}\\

{
2
.2
.
.
\underbrace{2
}}\\ 65536\mbox2 \end

\begin{matrix}

2.
.
.
2
\underbrace{

2}\\

2.
.
.
2
\underbrace{

2}\\

2.
.
.
2
\underbrace{

2}\\

{
2
.2
.
.
\underbrace{2
}}\\ 65536\mbox2 \end

2\uparrow\uparrow\uparrow\uparrowb

The table is the same as that of the Ackermann function, except for a shift in

n

and

b

, and an addition of 3 to all values.

Computing 3↑n b

We place the numbers

3b

in the top row, and fill the left column with values 3. To determine a number in the table, take the number immediately to the left, then look up the required number in the previous row, at the position given by the number just taken.
Values of

3\uparrownb

=

Hn+2(3,b)

=

3[n+2]b

= 3 → b → n
12345formula
13 9 27 81 243

3b

23 27 7,625,597,484,987

37{,625{,}597{,}484{,}987}1.3 x 103{,638{,}334{,}640{,}024}

37{,625{,
3

597{,}484{,}987}}

3\uparrow\uparrowb

33 7,625,597,484,987

\begin{matrix}

{
3
.3
.
.
\underbrace{3
}}\\ 7625597484987\mbox3 \end

\begin{matrix}

{
3
.3
.
.
\underbrace{3
}}\\ \underbrace\\ 7625597484987\mbox3 \end

\begin{matrix}

{
3
.3
.
.
\underbrace{3
}}\\ \underbrace\\ \underbrace\\ 7625597484987\mbox3 \end

3\uparrow\uparrow\uparrowb

43

\begin{matrix}

{
3
.3
.
.
\underbrace{3
}}\\ 7625597484987\mbox3 \end

\begin{matrix}

3.
.
.
3
\underbrace{

3}\\

{
3
.3
.
.
\underbrace{3
}}\\ 7625597484987\mbox3 \end

\begin{matrix}

3.
.
.
3
\underbrace{

3}\\

3.
.
.
3
\underbrace{

3}\\

{
3
.3
.
.
\underbrace{3
}}\\ 7625597484987\mbox3 \end

\begin{matrix}

3.
.
.
3
\underbrace{

3}\\

3.
.
.
3
\underbrace{

3}\\

3.
.
.
3
\underbrace{

3}\\

{
3
.3
.
.
\underbrace{3
}}\\ 7625597484987\mbox3 \end

3\uparrow\uparrow\uparrow\uparrowb

Computing 4↑n b

We place the numbers

4b

in the top row, and fill the left column with values 4. To determine a number in the table, take the number immediately to the left, then look up the required number in the previous row, at the position given by the number just taken.
Values of

4\uparrownb

=

Hn+2(4,b)

=

4[n+2]b

= 4 → b → n
12345formula
14 16 64 256 1024

4b

24 256

42561.34 x 10154

4256
4

8.0 x 10153
10
4256
4
4

4\uparrow\uparrowb

34
4256
4

8.0 x 10153
10

\begin{matrix}

{
4
.4
.
.
\underbrace{4
}}\\ 4^\mbox4 \end

\begin{matrix}

{
4
.4
.
.
\underbrace{4
}}\\ \underbrace\\ 4^\mbox4 \end

\begin{matrix}

{
4
.4
.
.
\underbrace{4
}}\\ \underbrace\\ \underbrace\\ 4^\mbox4 \end

4\uparrow\uparrow\uparrowb

44

\begin{matrix}

{
4
.4
.
.
\underbrace{4
}}\\ \underbrace\\ 4^\mbox4 \end

\begin{matrix}

4.
.
.
4
\underbrace{

4}\\

{
4
.4
.
.
\underbrace{4
}}\\ \underbrace\\ 4^\mbox4 \end

\begin{matrix}

4.
.
.
4
\underbrace{

4}\\

4.
.
.
4
\underbrace{

4}\\

{
4
.4
.
.
\underbrace{4
}}\\ \underbrace\\ 4^\mbox4 \end

\begin{matrix}

4.
.
.
4
\underbrace{

4}\\

4.
.
.
4
\underbrace{

4}\\

4.
.
.
4
\underbrace{

4}\\

{
4
.4
.
.
\underbrace{4
}}\\ \underbrace\\ 4^\mbox4 \end

4\uparrow\uparrow\uparrow\uparrowb

Computing 10↑n b

We place the numbers

10b

in the top row, and fill the left column with values 10. To determine a number in the table, take the number immediately to the left, then look up the required number in the previous row, at the position given by the number just taken.
Values of

10\uparrownb

=

Hn+2(10,b)

=

10[n+2]b

= 10 → b → n
12345formula
110 100 1,000 10,000 100,000

10b

210 10,000,000,000

1010,000,000,000

1010,000,000,000
10
1010,000,000,000
10
10

10\uparrow\uparrowb

310

\begin{matrix}

{
10
.10
.
.
\underbrace{10
}}\\ 10\mbox10 \end

\begin{matrix}

{
10
.10
.
.
\underbrace{10
}}\\ \underbrace\\ 10\mbox10 \end

\begin{matrix}

{
10
.10
.
.
\underbrace{10
}}\\ \underbrace\\ \underbrace\\ 10\mbox10 \end

\begin{matrix}

{
10
.10
.
.
\underbrace{10
}}\\ \underbrace\\ \underbrace\\ \underbrace\\ 10\mbox10 \end

10\uparrow\uparrow\uparrowb

410

\begin{matrix}

10.
.
.
10
\underbrace{

10}\\ 10copiesof10 \end{matrix}

\begin{matrix}

10.
.
.
10
\underbrace{

10}\\

10.
.
.
10
\underbrace{

10}\\ 10copiesof10 \end{matrix}

\begin{matrix}

10.
.
.
10
\underbrace{

10}\\

10.
.
.
10
\underbrace{

10}\\

10.
.
.
10
\underbrace{

10}\\ 10copiesof10 \end{matrix}

\begin{matrix}

10.
.
.
10
\underbrace{

10}\\

10.
.
.
10
\underbrace{

10}\\

10.
.
.
10
\underbrace{

10}\\

10.
.
.
10
\underbrace{

10}\\ 10copiesof10 \end{matrix}

10\uparrow\uparrow\uparrow\uparrowb

For 2 ≤ b ≤ 9 the numerical order of the numbers

10\uparrownb

is the lexicographical order with n as the most significant number, so for the numbers of these 8 columns the numerical order is simply line-by-line. The same applies for the numbers in the 97 columns with 3 ≤ b ≤ 99, and if we start from n = 1 even for 3 ≤ b ≤ 9,999,999,999.

See also

Notes

  1. Knuth . Donald E.. 1976. Mathematics and Computer Science: Coping with Finiteness . Science . 194. 4271. 1235–1242 . 10.1126/science.194.4271.1235 . 17797067 . 1976Sci...194.1235K. 1690489.
  2. R. L. Goodstein . Transfinite Ordinals in Recursive Number Theory . Journal of Symbolic Logic . Dec 1947 . 12 . 4 . 123–129 . 10.2307/2266486 . 2266486. 1318943 .
  3. Keep in mind that Knuth did not define the operator

    \uparrow0

    .
  4. For more details, see Powers of zero.
  5. For more details, see Zero to the power of zero.

External links