User blog:Qlf2007/Algebraic BEAF

It is well known that BEAF was originally only defined up to tetrational arrays. For pentational and higher arrays, Bowers says: "How to work with these? - Only God knows."

The modern way to define BEAF uses ordinal numbers. To summarize, each "array" is a function which maps ordinals to natural numbers, such that all but a finite number of ordinals are mapped to \(1\). Each ordinal is associated with a group of "passengers", which is a finite set of smaller ordinals. At each step of evaluation, we take the smallest ordinal not mapped to \(1\), decrease its image by \(1\), and set the image of its passengers to the base value.

The problem with this definition is that it loses some of the structural regularity seen in smaller arrays. Up to tetrational arrays, there is a nice correspondence between Bowers' notion of "hypernomials" and ordinals below \(\epsilon_0\). For example \(\omega^{\omega^\omega + \omega}\) corresponds with \(X^{X^X + X}\), and we can reliably predict the size of its passengers.

Beyond \(\epsilon_0\), however, this correspondence is broken. There is no ordinal which corresponds to \(X \uparrow\uparrow (X + 1)\), because \(\omega^{\epsilon_0} = \epsilon_0\). There is also no ordinal which corresponds exactly to \(X \uparrow\uparrow (2X)\). Two ways to define the fundamental sequence for \(\epsilon_1\) are \[\epsilon_0 + 1,\quad \omega^{\epsilon_0 + 1},\quad \omega^{\omega^{\epsilon_0 + 1}},\quad \cdots\] and \[1,\quad \epsilon_0,\quad \epsilon_0^{\epsilon_0},\quad \cdots\] Both results in passenger size that is slightly larger than \(X \uparrow\uparrow (2X)\). Therefore Bowers' vision of "Double-Tetrational Array" or "Dimensotetrational Array" is not realized.

Here we attempt to define a function that is similar to BEAF, but is based on hypernomials instead of ordinals, and provides a nice correspondence between hypernomials and their "passengers".

Primitive Hypernomial Functions
First we define an infinite, ordinal-indexed sequence of functions, each with signature \(\mathbb{N}^+ \times \mathbb{N} \mapsto \mathbb{N}^+\). \[f_0(a,b) = a^b\] \[f_{\alpha + 1}(a,0) = 1\] \[f_{\alpha + 1}(a,b) = f_\alpha(a,f_{\alpha + 1}(a,b - 1)) \quad b > 0\] \[f_\alpha(a,b) = f_{\alpha[b]}(a,b) \quad \text{\(\alpha\) is limit ordinal}\]

Alternatively we can change the last rule to \[f_\alpha(a,b) = f_{\alpha[a]}(a,b) \quad \text{\(\alpha\) is limit ordinal}\] This approach was taken by the original BEAF. But our definition gives faster-growing functions.

Example. \(f_n\) where \(n < \omega\) is just the Knuth arrow function. \[f_n(a,b) = a \uparrow^{n + 1} b\] \(f_\omega\) is a diagonalization over \(f_n\). \[f_\omega(a,b) = a \uparrow^b b\]

Example. By induction, we can prove the following identities. \[f_\alpha(a,1) = a\] \[f_\alpha(1,a) = 1\] \[f_\alpha(2,2) = 4\]

The functions \(f_\alpha\) are called primitive hypernomial functions.

Formal Hypernomials
We now introduce formal notations for hypernomials. We say formal, because we want to keep track of some nuanced details of hypernomials. For example, \(X^{X^X}\) and \(X \uparrow^2 3\) might represent the same function, but formally they are two different notations.

A (formal) hypernomial \(H\) is either \(0\), or a finite sum of terms \[H = t_1 + t_2 + \cdots + t_n\]

A term is either \(1\), \(X\), or \(f_\alpha(X,H)\) where \(\alpha\) is an ordinal, \(H\) is a hypernomial, but not \(0\) or \(1\). We exclude these two cases, because \(f_\alpha(X,0) = 1\) and \(f_\alpha(X,1) = X\).

Each hypernomial \(H\) represents a function \(u_H : \mathbb{N}^+ \mapsto \mathbb{N}^+\). \(u_H(n)\) is computed by replacing each \(X\) in \(H\) with \(n\).

Example. Let \(H = f_2(X,2X + 1)\), then \(u_H(n) = n \uparrow^3 (2n + 1)\).

We associate each hypernomial \(H\) with an ordinal (\gamma_H\), called its level. Levels are not used to measure the growth speed of hypernomials, but only for proving the well-definedness of our function.

Basic cases.


 * 1) If \(H = 0\), then \(\gamma_H = 0\).


 * 1) If \(H = 1\), then \(\gamma_H = 1\).


 * 1) If \(H = X\), then \(\gamma_H = \omega\).

Let \(\varphi(\alpha,\beta)\) be the binary Veblen function. If \(H = f_\alpha(X,H')\), then \(\gamma_H = \varphi(\alpha,\gamma_{H'} + 1)\). We use \(\gamma_{H'} + 1\) because it is never a fixed point of Veblen function.

If \(H\) is a sum of terms, then \(\gamma_H\) is the sum of the levels of its terms (note that the order of summation is important).

Example. Let \(H = X^2 + 3X + X^2\), then \(\gamma_H = \omega^3 + \omega \cdot 3 + \omega^3 = \omega^3 \cdot 2\).

Passengers
For each hypernomial \(H\), we construct a function \(S_H(n)\), which maps each positive integer to a set of hypernomials, the levels of which are strictly smaller than that of \(H\). This set is called the passenger of \(H\). We make sure that \(|S_H(n)| = u_H(n)\).

This is the most tricky part of our definition. Let us begin from easy cases. If \(H\) is a hypernomial, and \(S\) is a set of hypernomials, we define \[H \oplus S = \{H + s | s \in S\}\] Now if \(H\) is a sum of terms \[H = T_1 + T_2 + \cdots + T_m\] then we define \[S_H(n) = \bigcup_{k = 1}^m (T_1 + T_2 + \cdots + T_{k - 1} \oplus S_{T_k}(n))\]
 * 1) If \(H = 0\), then \(S_H(n) = \emptyset\).
 * 2) If \(H = 1\), then \(S_H(n) = \{0\}\).
 * 3) If \(H = X\), then \(S_H(n) = \{0,1,2,\cdots,n - 1\}\).

Examples. Finally, we deal with the case where \(H\) is a single term of the form \(f_\alpha(X,H')\). If \(\alpha = 0\) we can use a simple definition. Let \(M = S_{H'}(n)\). By induction hypothesis, \(|M| = u_{H'}(n)\). Consider the set \(G\) of all functions \(g\) from \(M\) to \(\{0,1,2\cdots,n - 1\}\). There are exactly \(n^{|M|}\) such functions. For each \(g \in G\) we can construct a hypernomial \[T = \sum_{s \in M} f(s) \cdot f_0(X,s)\] The summation order is from the element with highest level to the one with lowest level.
 * 1) Let \(H = 3 = 1 + 1 + 1\). Then \(S_H(n) = \{0,1,2\}\).
 * 2) In general, if \(H\) is a natural number \(m\), then \(S_H(n) = \{0,1,2,\cdots,m - 1\}\).
 * 3) Let \(H = 2X + 2\), then \(S_H(n) = \{0,1,2,\cdots,n - 1,X,X + 1,X + 2,\cdots,X + n - 1,2X,2X + 1\}\).

Example. Let \(H = X^3\). We know that \(S_3(n) = \{0,1,2\}\). Therefore \[S_H(n) = \{a \cdot X^2 + b \cdot X + c | a,b,c \in \{0,1,2,\cdots,n - 1\}\}\]

Unfortunately we cannot repeat the same construction when \(\alpha > 0\).

One way to proceed is to collapse everything into iterated applications of \(f_0\). For example, let \(H = f_1(X,X + 1)\) and \(n = 3\). We can define its passenger to be the same as that of \[H' = X^{X^{X^X}}\] However, this essentially destroys all structural information stored in the original hypernomial, which is not very interesting.

What we need is a way to somehow embed parts of the original hypernomial into the transformed hypernomial. In the example above, we want the expression \(X + 1\) to appear somewhere in \(H'\). We can place it at the top of the tetration tower: \[H' = X^{X^{X^{X^{X + 1}}}}\] However this messes up the passenger size. We need a device to make \(X + 1\) behave as if it were simply \(1\). Let us call such expressions frozen. Frozen expressions are a kind of formal device, used only during computation of passengers. If \(H\) is frozen, then \(u_H(n)\) is always equal to \(1\). If \(H = f_0(X,H')\) where \(H'\) is frozen, then \(S_H(n) = \{n \cdot H' | n \in \{0,1,2,\cdots,n - 1\}\}\) where \(n \cdot H'\) means multiplying each term in \(H'\) with the same coefficient.

Example. Suppose we want to compute the passenger of \[H = X^{X^{\overbrace{X + 1}^\text{frozen}}}\] with \(n = 3\). Since \(X + 1\) is frozen, the passenger of \(X^{X + 1}\) is \(\{0,X + 1,2X + 2\}\). Therefore the passenger of \(X^{X^{X + 1}}\) is \[\{a \cdot X^{2X + 2} + b \cdot X^{X + 1} + c | a,b,c \in \{0,1,2\}\}\]

In general, we make the following definitions.
 * 1) If \(\alpha = \beta + 1\), and \(H = f_\alpha(X,H')\), then the passenger of \(H\) is the same as that of \[\underbrace{f_\beta(X,f_\beta(X,f_\beta(\cdots(X}_{u_{H'}(n) \times X},\overbrace{H'}^{\text{frozen}})\cdots))\]
 * 2) If \(\alpha\) is a limit ordinal, and \(H = f_\alpha(X,H')\), then the passenger of \(H\) is the same as that of \[f_{\alpha[u_{H'}(n)]}(X,H')\]
 * 3) After the passenger set has been computed, all frozen parts shall be defrozen.

Relative Iteration
In this section let \(f\) be any function with signature \(\mathbb{N}^+ \times \mathbb{N} \mapsto \mathbb{N}^+\), such as the primitive hypernomial functions. We use \(E\) to denote exponentiation (the first primitive hypernomial). We introduce a family of functors \(F\), indexed by hypernomials, which take any \(f\) as input and return a new function. We define \(F\) by induction on the level of hypernomials.

If \(H = 0\), then \(F_H\) is just the normal iteration operation. \[F_0(f)(a,0) = 1\] \[F_0(f)(a,b) = f(a,F_0(f)(a,b - 1))\]

If \(H \neq 0\), we compute \(F_H(f)(a,b)\) in the following way. Let \(S = S_H(b)\), the passenger set of \(H\). Order the elements of \(S\) from highest level to lowest level. Suppose the elements are \(s_1,s_2,\cdots,s_n\). The levels of these hypernomials are strictly smaller than that of \(H\). By induction hypothesis, we have already defined \(F_{s_k}\). Then define \[g_0(a,b) = f(a,b)\] \[g_1(a,b) = \underbrace{F_{s_1}(F_{s_1}(\cdots(g_0)\cdots))}_{b \times F_{s_1}}\] \[g_2(a,b) = \underbrace{F_{s_2}(F_{s_2}(\cdots(g_1)\cdots))}_{b \times F_{s_2}}\] \[\vdots\] \[F_H(f)(a,b) = g_n(a,b)\]

And we are done! Take any hypernomial you like, and \(F_H(E)(a,b)\) will be a function that grows extremely fast.

Our function does not use arrays. However the above definitions are heavily inspired by BEAF. Consider a linear array in BEAF: \[\{a,b,n_0,n_1,\cdots,n_k\}\]

This function can be realized in our system in the following way. Begin with the exponentiation function \(E\). Apply \(F_k\) to it \(n_k\) times. Then apply \(F_{k - 1}\) to it \(n_{k - 1}\) times. And so on. Finally apply \(F_0\) to it \(n_0\) times.