Knuth's up-arrow notation
From Wikipedia, the free encyclopedia
In mathematics, Knuth's up-arrow notation is a notation for very large integers introduced by Donald Knuth in 1976. The idea is based on iterated exponentiation in much the same way that exponentiation is iterated multiplication, and multiplication is iterated addition.
Contents |
[edit] Introduction
Multiplication by a natural number can be defined as iterated addition:
and exponentiation for a natural power b can be defined as iterated multiplication:
which inspired Knuth to define a 'double arrow' operator for iterated exponentiation or tetration:
Here and below evaluation is to take place from right to left (as such the operation is right-associative):
According to this definition,
- (when expanded, this would fill a dozen moderately large hard drives)
- 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):
followed by a 'quad arrow' operator:
and so on. The general rule is that an n-arrow operator expands into a series of (n − 1)-arrow operators. Symbolically,
Examples:
[edit] 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 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 ab doesn't lend itself well for generalization, which explains why Knuth chose to work from the inline notation instead.
In the context of the C programming language, the ^ character is the XOR operator. ** is a common alternative to for discussion in this context, using the same principle of two symbols meaning repetition of that operator. It is possible that *** could be equivalent to , but this usage is uncommon.
[edit] 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 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.
It is generally suggested that Knuth's arrow should be used for relatively smaller magnitude numbers, and the chained arrow or hyper operators for larger ones.
[edit] Definition
The up-arrow notation is formally defined by
for all integers a,b,n 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 as appear as left operands of arrow operators. This is significant since the arrow operators are not commutative.
[edit] Tables of values
Computing can be restated in terms of an infinite table. We place the numbers 2 n 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.
m\n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | formula |
---|---|---|---|---|---|---|---|---|
0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 2n |
1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 2n |
2 | 2 | 4 | 16 | 65536 | ||||
3 | 2 | 4 | 65536 | |||||
4 | 2 | 4 |
Note: denotes a functional power of the function f(n) = 10n (the function also expressed by the suffix -plex as in googolplex).
The table is the same as that of the Ackermann function, except for a shift in m and n, and an addition of 3 to all values.
Computing
We place the numbers 3 n 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.
m\n | 1 | 2 | 3 | 4 | 5 | formula |
---|---|---|---|---|---|---|
0 | 3 | 6 | 9 | 12 | 15 | 3n |
1 | 3 | 9 | 27 | 81 | 243 | 3n |
2 | 3 | 27 | 7,625,597,484,987 | 37,625,597,484,987 | ||
3 | 3 | 7,625,597,484,987 | ||||
4 | 3 |
Computing
We place the numbers 10 n 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.
m\n | 1 | 2 | 3 | 4 | 5 | formula |
---|---|---|---|---|---|---|
0 | 10 | 20 | 30 | 40 | 50 | 10n |
1 | 10 | 100 | 1,000 | 10,000 | 100,000 | 10n |
2 | 10 | 10,000,000,000 | 1010,000,000,000 | |||
3 | 10 | |||||
4 | 10 |
[edit] References
- Weisstein, Eric W., Arrow Notation at MathWorld.
- Robert Munafo, Big Numbers