Draft:Introduction to hyperfactorial array notation

P.S. Could someone move this to Draft:Introduction to hyperfactorial array notation? I can't do it myself. Quattuorquadragintaducentillion (talk) 02:54, 30 December 2022 (UTC)

Hyperfactorial array notation is a googological notation created by Lawrence Hollom.

It consists of three parts:
 * Linear
 * Dimensional
 * Extended

This page was created because one might find the definition complicated. It is one of the fastest-growing array notations (aside from stage array notation and a few others) and has a unique set of rules that makes it stand out and inspired people to use certain parts of the rule set in their own notations, like the dollar function.

Basics
First, we need to know the basics. The factorial is a very fast-growing function! It's defined as \(n!=\prod_{i=1}^{n}i\) in product notation. Broken down, it's \(1\times2\times3\cdots n\). Although this isn't what you're expecting when you enter a realm of super huge numbers, things are about to get big.

Adding up-arrow notation
Hollom then adds up-arrow notation to his definition of the factorial. Up-arrow notation is defined like this:
 * 1) \(a\underbrace{\uparrow\cdots\uparrow}_{c}1=a\) if \(a\) and \(c>0\).
 * 2) \(a\uparrow b=a^{b}\) if \(b>1\) and \(a>0\).
 * 3) \(a\underbrace{\uparrow\cdots\uparrow}_{c}b=a\underbrace{\uparrow\cdots\uparrow}_{c-1}(a\underbrace{\uparrow\cdots\uparrow}_{c}b-1)\) if \(a>0\) and \(b\) and \(c>1\).

It should be pretty obvious that you're not supposed to use things like zero, decimals, and negative numbers in this notation. You should also keep in mind that it's "right-associative," meaning that if there are no parentheses anywhere, you always evaluate expressions starting from the right.

After this, he incorporates the notation with the factorial. Notice how the factorial is equal to the same thing if its expression is flipped around (e.g. a "commutative" expression). So, although up-arrow notation is not commutative, Hollom decides to flip the factorial around and take it from there:
 * \(a!b=a\underbrace{\uparrow\cdots\uparrow}_{b}(a-1)\underbrace{\uparrow\cdots\uparrow}_{b}(a-2)\cdots1\).

Now, the notation, instead of being limited by \(f_{2}\), is now limited by \(f_{\omega}\) in the fast-growing hierarchy with the expression \(a!a\).

Definition
Hyperfactorial linear arrays are of the form a![b,c...y,z], where all entries are greater than zero. Hollom provides multiple symbols and terminology to use for the rules in his site:

"


 * The active entry is the first non-1 entry in an array.
 * The receiving entry is the entry before the active entry (this may not always exist).
 * The very first entry in an array is the main entry.
 * The deepest array of entry x is the array for which x is not within a sub-array.
 * The active row is the row with the active entry in it.
 * A block is a section of an array defined by a polynomial, e.g. a X^2 block within a X^6 array.
 * The previous block to an entry is the block of equal dimensions and megadimensions before the largest block that this term is the first entry in. (this is often just an X^0 point). For example, in a 5D array, the previous block to an entry with position (1,1,3,1,5) would be the plane (X,X,2,1,5).

To represent part of an array that could be anything, sometimes with some constraints, I will use the following symbols (note that any of these could represent nothing at all):
 * ◆ can be anything
 * ◇ contains only 1's and separators
 * ○ either starts with a separator greater than the one before it or a ']' (or '<' or '>' where these are used as brackets, and if they could be used appropriately there).
 * ▮ represents any number of '['s.
 * If a ... is used, and no extra detail is given, assume it specifies an n long chain of the pattern before it.

"

The last, second-to-last, third-to-last, sixth-to-last, sixth, fifth, and fourth definitions are unnecessary as they will be used in later extensions of the notation. Hence, the new symbols and terminology goes as follows:

"


 * The active entry is the first non-1 entry in an array.
 * The receiving entry is the entry before the active entry (this may not always exist).
 * The very first entry in an array is the main entry.

To represent part of an array that could be anything, sometimes with some constraints, I will use the following symbols (note that any of these could represent nothing at all):
 * ◆ can be anything, including nothing.
 * ◇ contains only 1's and separators, including nothing.

"

Wow! That removed quite a bit from the symbols and terminology. Now you don't have to break everything down and look for what you'll be needing, for we have already broken it down for you. With that out of the way, Hollom says the definition is--wait, the rules are all jumbled up! We'll have to combine them together. Anyways, parts of the definition are not defined on the main site that need to be defined.

Say \(\lbrace n\rbrace\) denotes the "base" \(n\), e.g. the "a" before the exclamation in "a![◆]." (Keep in mind that it has to be one or greater.) We can use this to define any array without having to make things complicated. So, in mathematical format, the rules are:
 * 1) {n}[◇] = {n}n, e.g. 3![1,[1],2] = 3![1,3,2].
 * 2) {n}[◆1] = {n}[◆] if ◆ is not equivalent to a ◇ of the same length, e.g. 3!1],2,[2,1 = 3![3,2,[2,1]] = 3![3,2,[2]].
 * 3) {n}[k◆] = {n}([k-1◆])...![k-1◆] with n "[k-1◆]"s if k>0, e.g. 3![[1],2,1] = 3![[1],2] = 3![3,2] = 3![2,2]![2,2]![2,2].
 * 4) {n}[◇1,k◆] = {n}[◇[◇1,1◆],k-1◆] if k>0, e.g. 3![1,1,2] = 3![1,[1,1,1],1] = 3![1,[1,1,1]] = 3![1,3] = 3![[1,1],2] = 3![3,2] = 3![2,2]![2,2]![2,2].

Or, using the regular symbols (Z is a vector of ones, and # is a vector of anything well-defined, where both can be nothing):
 * 1) {n}[Z] = {n}n.
 * 2) {n}[#1] = {n}[#] if # is not equivalent to a Z of the same length.
 * 3) {n}[k#] = {n}([k-1#])...![k-1#] with n "[k-1#]"s if k>0.
 * 4) {n}[Z1,k#] = {n}[Z[Z1,1#],k-1#] if k>0.

Alternatively, using terminology:
 * 1) If an array somewhere is a vector of ones, change it to the base.
 * 2) If an array somewhere ends with a one, remove the terminating one.
 * 3) If an array somewhere has a main entry of greater than one, replace the array with base concatenated copies of the same array with the main entry reduced by one, where each copy has an exclamation mark on the left.
 * 4) If an array somewhere starts with a vector of ones but ends with a non-one entry, turn the receiving entry into the array with the active entry turned to zero, and reduce the active entry in the original array by one.

Remember that if multiple things apply at once, use the rule with the smallest ordinal position.

And here's a small little example to get you started, which was used in the definition we just discussed (the numbers in parentheses after the equalities show what rule is applied for reference): 3![1,1,2] = (4) 3![1,[1,1,1],1] = (2) 3![1,[1,1,1]] = (1) 3![1,3] = (4) 3!1,1],2] = (1) 3![3,2] = (3) 3![2,2]![2,2]![2,2] = (3) 3![1,2]![1,2]![1,2]![2,2]![2,2] = (4) 3![[1,1],1]![1,2]![1,2]![2,2]![2,2] = (2) 3![[1,1![1,2]![1,2]![2,2]![2,2] = (1) 3![3]![1,2]![1,2]![2,2]![2,2]... and then it gets so big we're too lazy to type it out.

Linear hyperfactorial array notation makes other notations childish compared to it. Usually, a standard linear array notation would be limited by \(\omega^{\omega}\) in the fast-growing hierarchy. However, immediately, trientrical linear HAN can be around \(f_{\omega^{\omega}}(n)\) where \(n\) is the base according to Hollom when he says that n![1,1,k] ≈ \(f_{\omega^{\omega}}(n)\). Why you haven't been seeing many new array notations based off of this one is because the linear array notation is decently new. We'd bet you there are probably multiple people working on something similar right this moment.

Dimensional
Coming soon!

Extended
Coming soon!