Tetration

Tetration, also known as hyper4, superpower, superdegree, powerlog or power tower, is a binary mathematical operator defined as \(^yx = x^{x^{x^{.^{.^.}}}}\) with \(y\) copies of \(x\). In other words, tetration is repeated exponentiation. Formally, this is

\[^0x = 1\]

\[^{n + 1}x = x^{^nx}\]

where \(n\) is a nonnegative integer.

Daniel Geisler has created a website, tetration.org, dedicated to the operator and its properties.

The repeated tetration is called pentation.

Basis
Multiplication is defined as repeated addition:


 * \[x \times y = \underbrace{x + x + \ldots + x + x}_y\]

Exponentiation is defined as repeated multiplication:


 * \[x^y = \underbrace{x \times x \times \ldots \times x \times x}_y\]

Analogously, tetration is defined as repeated exponentiation:


 * \[^yx = \underbrace{x^{x^{x^{.^{.^.}}}}}_y\]

\(^yx\) is pronounced "to-the-\(y\) \(x\)" or "\(x\) tetrated to \(y\)." The notation is due to Rudy Rucker; another popular notation is \(x^④y\). \(^yx\) is equivalent to \(x \uparrow\uparrow y\) in Arrow Notation or \(\{x,y,2\}\) in BEAF.

Tetration also can be written in chained arrow notation as \(a \rightarrow b \rightarrow 2\) and in Hyper-E notation as \(E(a)\#1\#b\).

But since exponentiation is not an associative operator (that is, \(a^{b^{c}}\) is generally not equal to \(\left(a^b\right)^c = a^{bc}\)), we can also group the exponentiation from bottom to top, producing what Robert Munafo calls the hyper4 operator, written \(x_④y\). \(x_④y\) reduces to \(x^{x^{y - 1}}\), which is not as mathematically interesting as the usual tetration.

Properties
Tetration lacks many of the symmetrical properties of the lower hyper-operators, so it is difficult to manipulate algebraically. However, it does have a few properties.

Power identity
It is possible to show that \({^ba}^{^ca} = {^{c + 1}a}^{^{b - 1}a}\):

\[{^ba}^{^ca} = (a^{^{b - 1}a})^{(^ca)} = a^{^{b - 1}a \cdot {}^ca} = a^{^ca \cdot {}^{b - 1}a} = (a^{^ca})^{^{b - 1}a} = {^{c + 1}a}^{^{b - 1}a}\]

For example, \({^42}^{^22} = {^32}^{^32} = 2^{64}\).

Moduli of power towers
The last digits of \(^yx\) converge as \(y \rightarrow \infty\). In other words, given a large enough power tower, it is easy to find its last digits. The last \(d\) digits of \(^yx\) in base \(b\) is defined by the following recursive formula:


 * \(N(0) = x\)
 * \(N(d + 1) = x^{N(d)} \mod{b^d}\)

The exponentiation can be computed very quickly using tricks.

First digits
Computing the first digits of \(^yx\) in a reasonable amount of time is probably impossible. In base 10:

\[a^b = 10^{b \log_{10} a} = 10^{\text{frac}(b \log_{10} a) + \lfloor b \log_{10} a \rfloor} = 10^{\text{frac}(b \log_{10} a)} \times 10^{\lfloor b \log_{10} a \rfloor}\]

The leading digits of \(^ba\) are then \(10^{\text{frac}(^{b - 1}a \log_{10} a)}\), so the problem is finding the fractional part of \(^{b - 1}a \log_{10} a\). This is equivalent to finding arbitrary base-\(a\) digits of \(^{b - 2}a\) starting at the \(^{b - 2}a\)th place. The most efficient known way to do this is a, which, unfortunately, requires linear time to operate and works only with radixes in the form \(2^n\), where n is an integer. We need an algorithm at least as efficient as \(O(\log^*n)\) (where \(\log^*n\) is the ), and it is unlikely that one exists.

This roadblock ripples through the rest of the hyperoperators. Even if we do find a \(O(\log^*n)\) algorithm, it becomes unworkable at the pentational level. A constant time algorithm is needed, and it is highly improbable that one exists.

For non-integral \(y\)
Mathematicians have not agreed on the function's behavior on \(^yx\) where \(y\) is not an integer. In fact, the problem breaks down into a more general issue of the meaning of \(f^t(x)\) for non-integral \(t\). For example, if \(f(x) := x!\), what is \(f^{2.5}(x)\)?

As \(y \rightarrow \infty\)


One function of note is infinite tetration, defined as

\[^\infty x = \lim_{n\rightarrow\infty}{}^nx\]

If we mark the points on the complex plane at which \(^\infty x\) becomes periodic (as opposed to escaping to infinity), we get an interesting fractal. Daniel Geisler studied this shape extensively, giving names to identifiable features.

Examples
Here are some small examples of tetration in action:


 * \(^22 = 2^2 = 4\)
 * \(^32 = 2^{2^2} = 2^4 = 16\)
 * \(^23 = 3^3 = 27\)
 * \(^33 = 3^{3^3} = 3^{27} =\)
 * \(^42 = 2^{2^{2^2}} = 2^{2^4} = 2^{16} =\)
 * \(^2{-2} = (-2)^{(-2)} = \frac{1}{(-2)^2} = \frac{1}{4}\)
 * \(^3{-2} = (-2)^{(-2)^{(-2)}} = (-2)^{1/4} = \frac{1 + i}{\sqrt[4]{2}}\)
 * \(^2(1/2) = (1/2)^{(1/2)} = \sqrt{1/2} = \frac{\sqrt2}{2}\)
 * \(^3(1/2) = (1/2)^{(1/2)^{(1/2)}} = (1/2)^{\sqrt{2}/2}\)

Here are some larger examples:


 * \(^35 = 5^{5^5} \approx 1.9110125979 \cdot 10^{2184}\)
 * \(^310 = 10^{10^{10}} = 10^{10000000000}\)
 * \(^43 \approx 10^{10^{10^{1.11}}}\)

Pseudocode
Below is an example of pseudocode for tetration.

function tetration(a, b): result := 1 repeat b times: result := a to the power of result return result