Arrow notation

Up-arrow notation is a notation for the hyper operators, devised by Donald Knuth in 1976 to represent large numbers. It is defined by the following rules:

\[a \uparrow^1 b = a^b \text{ (if n=1)}\]

\[a \uparrow^n 1 = a \text{ (if b=1)}\]

\[a \uparrow^{n + 1} (b + 1) = a \uparrow^n (a \uparrow^{n + 1} b) \text{ (otherwise)}\]

\(a \uparrow^{n} b\) is a shorthand for \(a \uparrow\uparrow\cdots\uparrow\uparrow b\) with n up-arrows (where n is a positive integer). When n=0, it drops to multiplication.

Arrow operators are right-associative; \(a \uparrow b \uparrow c\) always means \(a \uparrow (b \uparrow c)\).

Specifically, \(a \uparrow b\) is exponentiation, \(a \uparrow\uparrow b\) is tetration, \(a \uparrow\uparrow\uparrow b\) is pentation, and so forth. In ASCII, these are written a^b, a^^b, a^^^b, ...

Here are some examples:
 * \(2 \uparrow 3 = 2^3 = 8\)
 * \(5 \uparrow 6 = 5^6 = 15625\)
 * \(10 \uparrow 100 = 10^{100} =\) googol
 * \(3 \uparrow\uparrow 4 = 3 \uparrow 3 \uparrow 3 \uparrow 3 = 3 \uparrow 3 \uparrow 27 = 3^{7625597484987}\)
 * \(2 \uparrow\uparrow\uparrow 2 = 2 \uparrow\uparrow 2 = 2 \uparrow 2 = 2^2 = 4\)
 * \(3 \uparrow\uparrow\uparrow 2 = 3 \uparrow\uparrow 3 = 3 \uparrow 3 \uparrow 3 = 3^{3^3} = 3^{27} = 7625597484987\)
 * \(2 \uparrow\uparrow\uparrow 3 = 2 \uparrow\uparrow 2 \uparrow\uparrow 2 = 2 \uparrow\uparrow 4 = 2 \uparrow 2 \uparrow 2 \uparrow 2 = 2 \uparrow 2 \uparrow 4 = 2 \uparrow 16 = 65536\)

Arrow notation has been generalized to form other notations. Two notable ones are chained arrow notation and the famous Exploding Array Function.