In mathematics, Knuth's up-arrow notation is a method of notation for very large integers, introduced by Donald Knuth in 1976. It is closely related to the Ackermann function and especially to the hyperoperation sequence. The idea is based on the fact that multiplication can be viewed as iterated addition and exponentiation as iterated multiplication. Continuing in this manner leads to iterated exponentiation (tetration) and to the remainder of the hyperoperation sequence, which is commonly denoted using Knuth arrow notation.
Introduction
The ordinary arithmetical operations of addition, multiplication and exponentiation are naturally extended into a sequence of hyperoperations as follows.
Multiplication by a natural number can be defined as iterated addition:
![{\displaystyle {\begin{matrix}a\times b&=&\underbrace {a+a+\dots +a} \\&&b{\mbox{ copies of }}a\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f88f765266d545e1fb8339aeff8dc2851561d15a)
For example,
![{\displaystyle {\begin{matrix}4\times 3&=&\underbrace {4+4+4} &=&12\\&&3{\mbox{ copies of }}4\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7bc39e5b373cf45216d0c8ec819717f9deab5e81)
Exponentiation for a natural power
can be defined as iterated multiplication, which Knuth denoted by a single up-arrow:
![{\displaystyle {\begin{matrix}a\uparrow b=a^{b}=&\underbrace {a\times a\times \dots \times a} \\&b{\mbox{ copies of }}a\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/74b942d789d807bf56ca97d1ac33c12c0a04326f)
For example,
![{\displaystyle {\begin{matrix}4\uparrow 3=4^{3}=&\underbrace {4\times 4\times 4} &=&64\\&3{\mbox{ copies of }}4\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4bb86be18173b80c0b79ce32fe545e0c70791456)
To extend the sequence of operations beyond exponentiation, Knuth defined a “double arrow” operator to denote iterated exponentiation (tetration):
![{\displaystyle {\begin{matrix}a\uparrow \uparrow b&={\ ^{b}a}=&\underbrace {a^{a^{{}^{.\,^{.\,^{.\,^{a}}}}}}} &=&\underbrace {a\uparrow (a\uparrow (\dots \uparrow a))} \\&&b{\mbox{ copies of }}a&&b{\mbox{ copies of }}a\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f27decf1cf8a247dbe36dafd88666a3500f98b71)
For example,
![{\displaystyle {\begin{matrix}4\uparrow \uparrow 3&={\ ^{3}4}=&\underbrace {4^{4^{4}}} &=&\underbrace {4\uparrow (4\uparrow 4)} &=&4^{256}\approx 1.3\times 10^{154}\\&&3{\mbox{ copies of }}4&&3{\mbox{ copies of }}4\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3efa3e7ff1bfe8418f094e44839f1262ff1c00e2)
Here and below evaluation is to take place from right to left, as Knuth's arrow operators (just like exponentiation) are defined to be right-associative.
According to this definition,
![{\displaystyle 3\uparrow \uparrow 2=3^{3}=27}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5217b6f0699e9e634d31a294211ccbc027f3cd0)
![{\displaystyle 3\uparrow \uparrow 3=3^{3^{3}}=3^{27}=7,625,597,484,987}](https://wikimedia.org/api/rest_v1/media/math/render/svg/757b4d90f49bf6c6c26d19e27e205d5c424c54b2)
![{\displaystyle 3\uparrow \uparrow 4=3^{3^{3^{3}}}=3^{7625597484987}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e1aee6f729d926da4441ddb83a719a8a6cb9c750)
![{\displaystyle 3\uparrow \uparrow 5=3^{3^{3^{3^{3}}}}=3^{3^{7625597484987}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7dd9642cdca24750ed9d36b02539c5040faa9f3d)
- etc.
This already leads to some fairly large numbers, but Knuth extended the notation. He went on to define a “triple arrow” operator for iterated application of the “double arrow” operator (also known as pentation):
![{\displaystyle {\begin{matrix}a\uparrow \uparrow \uparrow b=&\underbrace {a_{}\uparrow \uparrow (a\uparrow \uparrow (\dots \uparrow \uparrow a))} \\&b{\mbox{ copies of }}a\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f1d39a613409fc2519d2a01c8d7037a3339fd166)
followed by a 'quad arrow' operator:
![{\displaystyle {\begin{matrix}a\uparrow \uparrow \uparrow \uparrow b=&\underbrace {a_{}\uparrow \uparrow \uparrow (a\uparrow \uparrow \uparrow (\dots \uparrow \uparrow \uparrow a))} \\&b{\mbox{ copies of }}a\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b718400232f457404a67d18a629a92dc1032a51b)
and so on. The general rule is that an
-arrow operator expands into a right-associative series of (
)-arrow operators. Symbolically,
![{\displaystyle {\begin{matrix}a\ \underbrace {\uparrow _{}\uparrow \!\!\dots \!\!\uparrow } \ b=a\ \underbrace {\uparrow \!\!\dots \!\!\uparrow } \ a\ \underbrace {\uparrow _{}\!\!\dots \!\!\uparrow } \ a\ \dots \ a\ \underbrace {\uparrow _{}\!\!\dots \!\!\uparrow } \ a\\\quad \ \ \,n\qquad \ \ \ \underbrace {\quad n_{}\!-\!\!1\quad \ \,n\!-\!\!1\qquad \quad \ \ \ \,n\!-\!\!1\ \ \ } \\\qquad \qquad \quad \ \ b{\mbox{ copies of }}a\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/18c5da304868b299307e8fd474cec7d7d9d2093e)
Examples:
The notation
is commonly used to denote
with n arrows.
Notation
In expressions such as
, the notation for exponentiation is usually to write the exponent
as a superscript to the base number
. But many environments — such as programming languages and plain-text e-mail — do not support such two-dimensional layout. People have adopted the linear notation
for such environments; the up-arrow suggests 'raising to the power of'. If the character set doesn't contain an up arrow, the caret ^ is used instead.
The superscript notation
doesn't lend itself well to generalization, which explains why Knuth chose to work from the inline notation
instead.
Writing out up-arrow notation in terms of powers
Attempting to write
using the familiar superscript notation gives a power tower.
- For example:
![{\displaystyle a\uparrow \uparrow 4=a\uparrow a\uparrow a\uparrow a=a^{a^{a^{a}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/fbaae0970bfdf5c85b1c8369646a924287a7fadc)
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.
![{\displaystyle a\uparrow \uparrow b=\underbrace {a^{a^{.^{.^{.{a}}}}}} _{b}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/657de5a64d016cd2169ad6846c8a6b2dcbb75509)
Continuing with this notation,
could be written with a stack of such power towers, each describing the size of the one above it.
![{\displaystyle a\uparrow \uparrow \uparrow 4=a\uparrow \uparrow a\uparrow \uparrow a\uparrow \uparrow a=\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{a}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb0dd92a1281b4a22fb30840e3ae046e90a227f2)
Again, if b is a variable or is too large, the stack might be written using dots and a note indicating its height.
![{\displaystyle a\uparrow \uparrow \uparrow b=\left.\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {\vdots } _{a}}}\right\}b}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d9eaf431ae1e3ae43dccbf865766fd86f401ebc8)
Furthermore,
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:
![{\displaystyle a\uparrow \uparrow \uparrow \uparrow 4=a\uparrow \uparrow \uparrow a\uparrow \uparrow \uparrow a\uparrow \uparrow \uparrow a=\left.\left.\left.\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {\vdots } _{a}}}\right\}\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {\vdots } _{a}}}\right\}\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {\vdots } _{a}}}\right\}a}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3ed7d2d637034b1227c18c82bc8ec64da158eda3)
And more generally:
![{\displaystyle a\uparrow \uparrow \uparrow \uparrow b=\underbrace {\left.\left.\left.\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {\vdots } _{a}}}\right\}\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {a^{a^{.^{.^{.{a}}}}}} _{\underbrace {\vdots } _{a}}}\right\}\cdots \right\}a} _{b}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9dbe7a05b2b86adcc384edb1349ea7d6f72bfa1a)
This might be carried out indefinitely to represent
as iterated exponentiation of iterated exponentiation for any a, n and b (although it clearly becomes rather cumbersome).
Using tetration
The tetration notation
allows us to make these diagrams slightly simpler while still employing a geometric representation (we could call these tetration towers).
![{\displaystyle a\uparrow \uparrow b={}^{b}a}](https://wikimedia.org/api/rest_v1/media/math/render/svg/561a1efc3143c2442f671d6a6692d20c123581d9)
![{\displaystyle a\uparrow \uparrow \uparrow b=\underbrace {^{^{^{^{^{a}.}.}.}a}a} _{b}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/86cd0c41523276344c304fee5463abd5c6d7c942)
![{\displaystyle a\uparrow \uparrow \uparrow \uparrow b=\left.\underbrace {^{^{^{^{^{a}.}.}.}a}a} _{\underbrace {^{^{^{^{^{a}.}.}.}a}a} _{\underbrace {\vdots } _{a}}}\right\}b}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7583fbfab215ee44047ad7a6f73adfc2d14bec85)
Finally, as an example, the fourth Ackermann number
could be represented as:
![{\displaystyle \underbrace {^{^{^{^{^{4}.}.}.}4}4} _{\underbrace {^{^{^{^{^{4}.}.}.}4}4} _{\underbrace {^{^{^{^{^{4}.}.}.}4}4} _{4}}}=\underbrace {^{^{^{^{^{4}.}.}.}4}4} _{\underbrace {^{^{^{^{^{4}.}.}.}4}4} _{^{^{^{4}4}4}4}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9167a441053a1bd1ccb22f731b252972797511fe)
Generalizations
Some numbers are so large that multiple arrows of Knuth's up-arrow notation become too cumbersome; then an n-arrow operator
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. Graham's number is an example. 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.
![{\displaystyle {\begin{matrix}a\uparrow ^{n}b&=&{\mbox{hyper}}(a,n+2,b)&=&a\to b\to n\\{\mbox{(Knuth)}}&&&&{\mbox{(Conway)}}\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/662fafad9ccc9c24a4c06da32d1e46a43c559a0f)
It is generally suggested that Knuth's arrow should be used for smaller magnitude numbers, and the chained arrow or hyper operators for larger ones.
Definition
The up-arrow notation is formally defined by
![{\displaystyle a\uparrow ^{n}b=\left\{{\begin{matrix}a^{b},&{\mbox{if }}n=1;\\1,&{\mbox{if }}b=0;\\a\uparrow ^{n-1}(a\uparrow ^{n}(b-1)),&{\mbox{otherwise}}\end{matrix}}\right.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2384531e625163c2487d3850fdd0b37ce8fce384)
for all integers
with
.
All up-arrow operators (including normal exponentiation,
) are right associative, i.e. evaluation is to take place from right to left in an expression that contains two or more such operators. For example,
, not
; for example
is
not
There is good reason for the choice of this right-to-left order of evaluation. If we used left-to-right evaluation, then
would equal
, so that
would not be an essentially new operation.
Right associativity is also natural because we can rewrite the iterated arrow expression
that appears
in the expansion of
as
, so that all the
s appear
as left operands of arrow operators. This is significant since the arrow operators are not commutative.
Writing
for the bth functional power of the function
we have
.
The definition could be extrapolated one step, starting with
if n = 0, because exponentiation is repeated multiplication starting with 1. Extrapolating one step more, writing multiplication as repeated addition, is not as straightforward because multiplication is repeated addition starting with 0 instead of 1. "Extrapolating" again one step more, writing addition of n as repeated addition of 1, requires starting with the number a. Compare the {{#invoke:Hyperoperation|Definition|definition of the hyper operator}}, where the starting values for addition and multiplication are also separately specified.
Tables of values
Computing
can be restated in terms of an infinite table. We place the numbers 2
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
= hyper(2, m + 2, n) = 2 → n → m
m\n
|
1
|
2
|
3
|
4
|
5
|
6
|
formula
|
1
|
2 |
4 |
8 |
16 |
32 |
64 |
|
2
|
2 |
4 |
16 |
65536 |
![{\displaystyle 2^{65536}\approx 2.0\times 10^{19,729}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6052af8e4f3fea4a96a7c310c3a2245d13134857) |
![{\displaystyle 2^{2^{65536}}\approx 10^{6.0\times 10^{19,728}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3b47983e0f4cf74c4b953055ef15d937c34df3a3) |
|
3
|
2 |
4 |
65536 |
![{\displaystyle {\begin{matrix}\underbrace {2_{}^{2^{{}^{.\,^{.\,^{.\,^{2}}}}}}} \\65536{\mbox{ copies of }}2\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/dc48ed4649b192c00667f0e11e59c335c17a992d) |
|
|
|
4
|
2 |
4 |
![{\displaystyle {\begin{matrix}\underbrace {2_{}^{2^{{}^{.\,^{.\,^{.\,^{2}}}}}}} \\65536{\mbox{ copies of }}2\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/dc48ed4649b192c00667f0e11e59c335c17a992d) |
|
|
|
|
The table is the same as that of the Ackermann function, except for a shift in
and
, and an addition of 3 to all values.
Computing
We place the numbers 3
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
= hyper(3, m + 2, n) = 3 → n → m
m\n
|
1
|
2
|
3
|
4
|
5
|
formula
|
1
|
3 |
9 |
27 |
81 |
243 |
|
2
|
3 |
27 |
7,625,597,484,987 |
![{\displaystyle 3^{7,625,597,484,987}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5190150b02f9ed6b5da00f1738b9d6609173c9d8) |
|
|
3
|
3 |
7,625,597,484,987 |
![{\displaystyle {\begin{matrix}\underbrace {3_{}^{3^{{}^{.\,^{.\,^{.\,^{3}}}}}}} \\7,625,597,484,987{\mbox{ copies of }}3\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/314202214531e93b9c9a3c49dab0666d3617a84c) |
|
|
|
4
|
3 |
![{\displaystyle {\begin{matrix}\underbrace {3_{}^{3^{{}^{.\,^{.\,^{.\,^{3}}}}}}} \\7,625,597,484,987{\mbox{ copies of }}3\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/314202214531e93b9c9a3c49dab0666d3617a84c) |
|
|
|
|
Computing
We place the numbers 10
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
= hyper(10, m + 2, n) = 10 → n → m
m\n
|
1
|
2
|
3
|
4
|
5
|
formula
|
1
|
10 |
100 |
1,000 |
10,000 |
100,000 |
|
2
|
10 |
10,000,000,000 |
![{\displaystyle 10^{10,000,000,000}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e67ec008015d2f00095e50673d22086c221e9bfc) |
![{\displaystyle 10^{10^{10,000,000,000}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e29b4d5c284015544180c03d596a7ffb477e5ebe) |
![{\displaystyle 10^{10^{10^{10,000,000,000}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/968cb43fe875add704cd66028fbea5136d5722cd) |
|
3
|
10 |
![{\displaystyle {\begin{matrix}\underbrace {10_{}^{10^{{}^{.\,^{.\,^{.\,^{10}}}}}}} \\10{\mbox{ copies of }}10\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/166c2af4a40bbcdd586c38ef32031a29a59df2d7) |
![{\displaystyle {\begin{matrix}\underbrace {10_{}^{10^{{}^{.\,^{.\,^{.\,^{10}}}}}}} \\10^{10}{\mbox{ copies of }}10\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1f9e6d71bbc516fcc6112e8092bd61a47536d637) |
![{\displaystyle {\begin{matrix}\underbrace {10_{}^{10^{{}^{.\,^{.\,^{.\,^{10}}}}}}} \\10^{10^{10}}{\mbox{ copies of }}10\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1b28d716345502b1ceeb93f51322938d9f3544bb) |
|
|
4
|
10 |
![{\displaystyle {\begin{matrix}\underbrace {^{^{^{^{^{10}.}.}.}10}10} \\10{\mbox{ copies of }}10\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/36265518be6979b002cd6537e53b33d858071689) |
![{\displaystyle {\begin{matrix}\underbrace {^{^{^{^{^{10}.}.}.}10}10} \\10^{10}{\mbox{ copies of }}10\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6fa4ad32352c439c6b5699c077b685b8896e284e) |
|
|
|
Note that for 2 ≤ n ≤ 9 the numerical order of the numbers
is the lexicographical order with m 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 ≤ n ≤ 99, and if we start from m = 1 even for 3 ≤ n ≤ 9,999,999,999.
Numeration systems based on the hyperoperation sequence
Goodstein [1947], with a system of notation different from Knuth arrows, used the sequence of hyperoperators here denoted by
to create systems of numeration for the nonnegative integers. Letting superscripts
denote the respective hyperoperators
, the so-called complete hereditary representation of integer n, at level k and base b, can be expressed as follows using only the first k hyperoperators and using as digits only 0, 1, ..., b-1:
- For 0 ≤ n ≤ b-1, n is represented simply by the corresponding digit.
- For n > b-1, the representation of n is found recursively, first representing n in the form
![{\displaystyle b^{(k)}{x_{k}}^{(k-1)}{x_{k-1}}^{(k-2)}\dots {x_{2}}^{(1)}x_{1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6e519124dedd597508742ffba41c66631a9a69a6)
- where xk, ..., x1 are the largest integers satisfying (in turn)
![{\displaystyle b^{(k)}x_{k}\leq n}](https://wikimedia.org/api/rest_v1/media/math/render/svg/519d2ff2e2e26386344c4785c7c7a0ff3959e757)
![{\displaystyle b^{(k)}{x_{k}}^{(k-1)}x_{k-1}\leq n}](https://wikimedia.org/api/rest_v1/media/math/render/svg/56860a7eb771bf48a3002d7523ed12959cfe10dc)
- ...
.
- Any xi exceeding b-1 is then re-expressed in the same manner, and so on, repeating this procedure until the resulting form contains only the digits 0, 1, ..., b-1.
The remainder of this section will use
, rather than superscripts, to denote the hyperoperators.
Unnecessary parentheses can be avoided by giving higher-level operators higher precedence in the order of evaluation; thus,
level-1 representations have the form
, with X also of this form;
level-2 representations have the form
, with X,Y also of this form;
level-3 representations have the form
, with X,Y,Z also of this form;
level-4 representations have the form
, with X,Y,Z,T also of this form;
and so on.
The representations can be abbreviated by omitting any instances of
etc.; for example, the level-3 base-2 representation of the number 6 is
, which abbreviates to
.
Examples:
The unique base-2 representations of the number 266, at levels 1, 2, 3, 4, and 5 are as follows:
![{\displaystyle {\text{Level 1:}}\ \ 266=2+2+\dots +2\ \ {\text{(with 133 2s)}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8eaa445653f927660867357a4226b0e86dbfec73)
![{\displaystyle {\text{Level 2:}}\ \ 266=2\times (2\times (2\times (2\times 2\times 2\times 2\times 2+1))+1)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5963ce0c94fb5da7d354a3f546c2ae5862014bdf)
![{\displaystyle {\text{Level 3:}}\ \ 266=2\uparrow 2\uparrow (2+1)+2\uparrow (2+1)+2}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6c1fcddcfc2417db8307c5c17e52c3e90d28ef0b)
![{\displaystyle {\text{Level 4:}}\ \ 266=2\uparrow \uparrow (2+1)\uparrow 2+2\uparrow \uparrow 2\times 2+2}](https://wikimedia.org/api/rest_v1/media/math/render/svg/69588051482ea3caaa8ef2a2b3bec258adab1a25)
.
See also
References