Chained arrow notation

Chained arrow notation is a generalization of up-arrow notation devised by J. H. Conway and R. K. Guy.

Nathan Ho and Wojowu showed that chained arrow notation terminates — that is, its output exists for all input sequences.

By Bird's Proof, chained arrow notation is roughly comparable to 4-entry arrays in Jonathan Bowers' linear array notation, but is far exceeded by arrays with 5 entries or more.

Definition

 * 1) \(a \rightarrow b = a^{b}\)
 * 2) \(a \rightarrow b \rightarrow c = a\uparrow^cb = a\underbrace{\uparrow\ldots\uparrow}_cb\) (in which up-arrow notation is used) = a[c+2]b (in which the bracket notation of hyper operator is used)
 * 3) \(a \rightarrow\ldots\rightarrow b \rightarrow 1 = a \rightarrow\ldots\rightarrow b\) — When last entry is 1, it will be ignored.
 * 4) \(a \rightarrow\ldots\rightarrow b \rightarrow 1 \rightarrow c = a \rightarrow\ldots\rightarrow b\)
 * 5) \(a \rightarrow\ldots\rightarrow b \rightarrow (c + 1) \rightarrow (d + 1) = a \rightarrow\ldots\rightarrow b \rightarrow (a \rightarrow\ldots\rightarrow b \rightarrow c \rightarrow (d + 1) ) \rightarrow d\)

Note that the arrow \(\rightarrow\) is not an operator in the conventional sense; \(a\rightarrow b\rightarrow c\) is equal to neither of \(a\rightarrow(b\rightarrow c)\) or \((a\rightarrow b)\rightarrow c\). The entire chain (which could be thought of as an array) represents a single operation.

Examples
Here are some small examples of chained arrow notation in action:

\(2 \rightarrow 2 \rightarrow 2 \rightarrow 2\) = \(2 \rightarrow 2 \rightarrow (2 \rightarrow 2 \rightarrow 1 \rightarrow 2) \rightarrow 1\) = \(2 \rightarrow 2 \rightarrow 4 \rightarrow 1\) = \(2\uparrow\uparrow\uparrow\uparrow2\) = 4

\(3 \rightarrow 3 \rightarrow 2 = 3\uparrow\uparrow3 = 7,625,597,484,987\)


 * \(3 \rightarrow 3 \rightarrow 2 \rightarrow 2\)
 * \(= 3 \rightarrow 3 \rightarrow (3 \rightarrow 3 \rightarrow 1 \rightarrow 2) \rightarrow 1\)
 * \(= 3 \rightarrow 3 \rightarrow (3 \rightarrow 3 \rightarrow 1 \rightarrow 2)\)
 * \(= 3 \rightarrow 3 \rightarrow (3 \rightarrow 3)\)
 * \(= 3 \rightarrow 3 \rightarrow (3^{3})\)
 * \(= 3 \rightarrow 3 \rightarrow 27\)
 * \(= 3 \uparrow^{27} 3 \)

CG function
Using chained arrow notation, Conway and Guy created a new function similar to the Ackermann numbers that defines \(cg(n) = \underbrace{n \rightarrow n \rightarrow \ldots \rightarrow n \rightarrow n}_n\). Although it is equal to the Ackermann numbers for n from 1 to 3, \(cg(4) = 4\rightarrow 4\rightarrow 4\rightarrow 4 > \lbrace 4,4,3,2 \rbrace\), using Bird's Proof. Therefore, cg(4) is much, much larger than the famous Graham's number (in fact, the same can be said for the much smaller Conway's Tetratri).

The growth rate of this function is about \(f_{\omega^2}(n)\) in the fast-growing hierarchy. This is comparable to 4 entry linear arrays in BEAF or Bird's array notation. In Notation Array Notation, the CG function can be written as (n{3,n}n).

Peter Hurford's extensions
Peter Hurford extends chained arrow notation by adding the following rule:

\(a \rightarrow_c b = \underbrace{a \rightarrow_{c-1} a \rightarrow_{c-1}\ldots\rightarrow_{c-1} a \rightarrow_{c-1}a}_{b \rightarrow_{c-1}'s}\)

All normal rules remains unchanged. Thus, they apply ignoring subscripts. Notice that expressions like \(3 \rightarrow_{2} 3 \rightarrow 3\) are illegal; entire expressions must have single type of right-arrows. Also, Hurford shows that \(f(n) = n \rightarrow_n n\) is about \(f_{\omega^3}(n)\) in the fast-growing hierarchy.

Furthermore, he defines C(n) function as follows:


 * \(C(a) = a \rightarrow_a a\)
 * \(C(a,1) = a \rightarrow_{C(a)} a\)
 * \(C(a,b) = a \rightarrow_{C(a,b-1)} a\)
 * \(C(a,1,1) = C(a,C(a,a))\)
 * \(C(a,b,1) = C(a,C(a,b-1,1))\)
 * \(C(a,1,c) = C(a,C(a,a,c-1),c-1)\)
 * \(C(a,b,c) = C(a,C(a,b-1,c),c-1)\)

The function \(f(n) = C(n,n,n)\) grows about as fast as \(f_{\omega^3 + \omega}(n)\) in the fast-growing hierarchy.

Cookiefonster's extension
The wiki user Cookiefonster created an alternate extension that allows expressions to contain multiple arrow types. He uses a superscript to denote arrow type rather than a subscript.


 * \(a\rightarrow^1 b = a^b\)
 * \(a\rightarrow^x b = a\rightarrow^{x-1} a\rightarrow^{x-1} a \ldots \rightarrow^{x-1} a\) where there are \(b\) copies of \(a\)
 * \(\#\rightarrow^x 1 = \#\) (here, \(\#\) denotes an arbitrarily long part of the chain before the relevant terms)
 * \(\#\rightarrow^x 1\rightarrow^y a = \#\) (the source accidentally uses two \(\rightarrow^x\) arrows implying they must be the same, but that is not required)
 * \(\#\rightarrow^n a\rightarrow^1 b = \#\rightarrow^n (\#\rightarrow^n (a-1)\rightarrow^1 b)\rightarrow^1 (b-1)\)
 * \(\#\rightarrow^n a\rightarrow^x b = \#\rightarrow^n a\rightarrow^{x-1} a\rightarrow^{x-1} a \ldots \rightarrow^{x-1} a\) where there are \(b\) copies of \(a\)

The function \(f(n) = n\rightarrow^n n\) grows about as fast as \(f_{\omega^\omega}(n)\) in the fast-growing hierarchy.