Extended Array Notation (ExAN) is the second part of almighty array notation. A valid expression in ExAN is of the form a*(a, b X c X d X e X ... X n) where a, b, c, d, e, ..., n ≥ 1, and X are the separators.
The Extended Array Notation has the following form:
a*(a, b X c X d X e X ... X n) where a, b, c, d, e, ..., n ≥ 1, and X are the separators.
In ExAN, The separator can only in the form of {c}, such as {3}, {5}, {7}.
The first entry of the array is the base, the number after it is the iterator.
The {1} separator stands for comma.
Empty array rule: a*() = 1, since a*(1) = a*() using the tailing rule.
Base rule: a*(a) = a and a*(a, b) = a^b
Tailing rule 1: a*(# 1 X #) = a*(#) where # indicates the rest of array (X can be any separators)
Tailing rule 2: a*(# X 1) = a*(#)
Prime rule: a*(a, 1 #) = a
Recursion rule: a*(a, b, 1, 1, ..., 1, 1, c #) = a*(a, a, a, a, ..., a, a*(a, b - 1, 1, 1, ..., 1, 1, c #), c - 1 #) (w/ b number of a's) for a, b, c > 1 and the length of the array ≥ 4
If rules 1 - 6 do not apply: a*(a, b, c #) = a*(a, a*(a, b - 1, c #), c - 1 #)
Comma rule: a*(a, b {1} c #) = a*(a, b, c #)
If more than one rule(s) apply to an array, start from step 1, and find the nearest rule that applies to that array.
So a*(2, 1, 1, 1, 1, 1, 2, 2) = a*(2) = 2 (by rule 5) instead of a*(2, 2, 2, 2, ..., 2, a*(2, 0, 1, 1, ..., 1, 1, 2, 2), 1, 2) (by rule 6), which is ill-formed due to the occurrence of 0.
Followed by some additional rules by following:
Reuse the rules for linear arrays to that row (after separators other than commas)
a*(a, b {2} c) a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} c - 1) with b string of 1's using comma as a separator.
a*(a, b {2} 1 {2} ... {2} 1 {2} c) = a*(a, a, {2} 1 {2} ... {2} 1, 1, 1, ..., 1, 1, 2 {2} c - 1) with b string of 1's using comma as a separator.
a*(a, b {d} 1 {d} ... {d} 1 {d} c) = a*(a, a, {d - 1} 1 {d - 1} ... {d - 1} 1, 1, 1, ..., 1, 1, 2 {d - 1} c - 1) with b string of 1's using {d - 1} as a separator.
a*(a, b {2} 2) = a(a, a, 1, 1, 1, ..., 1, 1, 1, 2) with b string of 1's = a*(a, a, a, a, a, ..., a, a, b) with b + 2 entries. FGH level ω^ω.
a*(a, b, 2 {2} 2) = a*(a, a*(a, a*(a, ... a*(a, a {2} 2) {2} 2) {2} 2) ... {2} 2) (b times). FGH level ω^ω + 1 where a*(a, 2, 2 {2} 2) = a*(a, a {2} 2} and a*(a, 3, 2 {2} 2) = a*(a, a*(a, a {2} 2) {2} 2).
a*(a, b, 1, 2 {2} 2) = a*(a, a, a*(a, a, a*(a, a, ... a*(a, a, a {2} 2) {2} 2) {2} 2) ... {2} 2) (b times). FGH level ω^ω + ω.
a*(a, b, 2, 2 {2} 2) = a*(a, a*(a, a*(a, ... a*(a, a, 1, 2 {2} 2), 1, 2 {2} 2), 1, 2 {2} 2), 1, 2 ... {2} 2) (b times). FGH level ω^ω + ω + 1.
a*(a, b, 1, 3 {2} 2) = a*(a, a, a*(a, a, a*(a, a, ... a*(a, a, a, 2 {2} 2), 2 {2} 2), 2 {2} 2), ... 2 {2} 2) (b times). FGH level ω^ω + ω2.
a*(a, b, 1, 4 {2} 2) = a*(a, a, a*(a, a, a*(a, a, ... a*(a, a, a, 3 {2} 2), 3 {2} 2), 3 {2} 2), ... 3 {2} 2) (b times). FGH level ω^ω + ω3.
a*(a, b, 1, 1, 2 {2} 2) = a*(a, a, a, a*(a, a, a, a*(a, a, a, a*(a, a, a, ... a*(a, a, a, a {2} 2) {2} 2) {2} 2) ... {2} 2) (b times). FGH level ω^ω + ω^2.
a*(a, b, 1, 1, 1, 2 {2} 2) = a*(a, a, a, a, a*(a, a, a, a, a*(a, a, a, a, ... a*(a, a, a, a, a {2} 2) {2} 2) {2} 2) ... {2} 2) (b times). FGH level ω^ω + ω^3.
a*(a, b {2} 3) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 2) with b string of 1's. FGH level (ω^ω)2.
a*(a, b, 1, 2 {2} 2) = a*(a, a, a*(a, a, a*(a, a, ... a*(a, a, a {2} 3) {2} 3) {2} 3) ... {2} 3) (b times). FGH level (ω^ω)2 + ω.
a*(a, b {2} 4) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 3) with b string of 1's. FGH level (ω^ω)3.
a*(a, b {2} 5) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 4) with b string of 1's. FGH level (ω^ω)4.
Now we've reached 2-entry second row arrays!
a*(a, b {2} 1, 2) = a*(a, a {2} a*(a, a {2} a*(a, a {2} ... a*(a, a {2} a))) ... ))) (b times). FGH level ω^(ω + 1).
a*(a, b, 2 {2} 1, 2) = a*(a, a*(a, a*(a, ... a*(a, a {2} 1, 2) {2} 1, 2) {2} 1, 2) ... {2} 1, 2) (b times). FGH level ω^(ω + 1) + 1.
a*(a, b, 1, 2 {2} 1, 2) = a*(a, a, a*(a, a, a*(a, a, ... a*(a, a, a {2} 1, 2) {2} 1, 2) {2} 1, 2) ... {2} 1, 2) (b times). FGH level ω^(ω + 1) + ω.
a*(a, b {2} 2, 2) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 1, 2) with b string of 1's. FGH level ω^(ω + 1) + ω^ω.
a*(a, b {2} 3, 2) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 2, 2) with b string of 1's. FGH level ω^(ω + 1) + (ω^ω)2.
a*(a, b {2} 1, 3) = a*(a, a {2} a*(a, a {2} a*(a, a {2} ... a*(a, a {2} a, 2), 2), 2) ..., 2) (b times). FGH level ω^(ω + 1)2.
a*(a, b {2} 1, 4) = a*(a, a {2} a*(a, a {2} a*(a, a {2} ... a*(a, a {2} a, 3), 3), 3) ..., 3) (b times). FGH level ω^(ω + 1)2.
a*(a, b {2} 1, 1, 2) = a*(a, a {2} a, a*(a, a {2} a, a*(a, a, {2} a, ... a*(a, a {2} 1, a))) ... ))) (b times). FGH level ω^(ω + 2).
a*(a, b {2} 2, 1, 2) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 1, 1, 2) with b string of 1's. FGH level ω^(ω + 2) + ω^ω.
a*(a, b {2} 1, 2, 2) = a*(a, a {2} a*(a, a {2} a*(a, a {2} ... a*(a, a {2} a, 1, 2), 1, 2), 1, 2) ..., 1, 2) (b times). FGH level ω^(ω + 2) + ω^(ω + 1).
a*(a, b {2} 1, 1, 3) = a*(a, a {2} 1, a*(a, a {2] 1, a*(a, a {2} 1, ... a*(a, a {2} 1, a, 2), 2), 2) ..., 2) (b times). FGH level (ω^(ω + 2))2.
a*(a, b {2} 1, 1, 1, 2) = a*(a, a {2} 1, 1, a*(a, a {2} 1, 1, a*(a, a {2} 1, 1, ... a*(a, a {2} 1, 1, a))) ... ))) (b times). FGH level ω^(ω + 3).
a*(a, b {2} 1, 1, 1, 1, 2) = a*(a, a {2} 1, 1, 1, a*(a, a {2} 1, 1, 1, a*(a, a {2} 1, 1, 1, ... a*(a, a {2} 1, 1, 1, a))) ... ))) (b times). FGH level ω^(ω + 4).
Now we've reached 3-row arrays!
a*(a, b {2} 1 {2} 2) = a*(a, a {2} 1, 1, 1, ..., 1, 1, 2) with b string of 1's. FGH level ω^ω2.
a*(a, b {2} 2 {2} 2) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {2} 1 {2} 2) with b string of 1's. FGH level ω^ω2 + ω^ω.
a*(a, b {2} 1, 2 {2} 2) = a*(a, a {2} a*(a, a {2} a*(a, a {2} ... a*(a, a {2} a {2} 2) a {2} 2) a {2} 2) ... a {2} 2) (b times). FGH level ω^ω2 + ω^(ω + 1).
a*(a, b {2} 1 {2} 3) = a*(a, a {2} 1, 1, 1, ..., 1, 1, 2 {2} 2) with b string of 1's. FGH level (ω^ω2)2.
a*(a, b {2} 1 {2} 1, 2) = a*(a, a {2} 1 {2} a*(a, a {2} 1 {2} a*(a, a {2} 1 {2} ... a*(a, a {2} 1 {2} a))) ... ))) (b times). FGH level ω^(ω2 + 1).
a*(a, b {2} 1 {2} 1 {2} 2) = a*(a, a {2} 1 {2} 1, 1, 1, ..., 1, 1, 2) with b string of 1's. FGH level ω^ω3.
a*(a, b {2} 1 {2} 1 {2} 1 {2} 2) = a*(a, a {2} 1 {2} 1 {2} 1, 1, 1, ..., 1, 1, 2) with b string of 1's. FGH level ω^ω4.
Now we've reached the dimensional arrays!
a*(a, b {3} 2) = a*(a, b {2} 1 {2} ... {2} 1 {2} 2) with b string of 1's separated by {2}. FGH level ω^ω^2.
a*(a, b, 2 {3} 2) = a*(a, a*(a, a*(a, ... a*(a, a {3} 2) {3} 2) {3} 2) ... {3} 2) (b times). FGH level ω^ω^2 + 1.
a*(a, b, 1, 2 {3} 2) = a*(a, a, a*(a, a, a*(a, a, ... a*(a, a, a {3} 2) {3} 2) {3} 2) ... {2} 2) (b times). FGH level ω^ω^2 + ω.
a*(a, b {2} 2 {3} 2) = a*(a, a, 1, 1, 1, ..., 1, 1, 2 {3} 2) with b string of 1's. FGH level ω^ω^2 + ω^ω.
Note that if n < m, a*(# {n} 1 {m} #) = a*(# {m} #).
a*(a, b {3} 3) = a*(a, a {2} 1 {2} ... {2} 1 {2} 2 {3} 2) with b string of 1's separated by {2}. FGH level (ω^ω^2)2.
a*(a, b {3} 1, 2) = a*(a, a {3} a*(a, a {3} a*(a, a {3} ... a*(a, a {3} a))) ... ))) (b times). FGH level ω^(ω^2 + 1).
a*(a, b {3} 1 {2} 2) = a*(a, a {3} 1, 1, 1, ..., 1, 1, 2) with b string of 1's. FGH level ω^(ω^2 + ω).
a*(a, b {3} 1 {3} 2) = a*(a, a {3} 1 {2} 1 {2} ... {2} 1 {2} 2) with b string of 1's separated by {2}. FGH level ω^((ω^2)2).
a*(a, b {4} 2) = a*(a, b {3} 1 {3} ... {3} 1 {3} 2) with b string of 1's separated by {3}. FGH level ω^ω^3.
a*(a, b {5} 2) = a*(a, b {4} 1 {4} ... {4} 1 {4} 2) with b string of 1's separated by {4}. FGH level ω^ω^4.
etc.
And finally, the limit of the dimensional arrays is a*(a, a {n} 2), which is an ω^ω^ω-level.