This node serves as a continuation from linear array notation.

The next step in the construction of the "Exploding Array Function" is to make arrays with multiple rows meaningful. To do this we have to extend our notation and definitions slightly.

Definitions

All the old definitions still hold, except that:

  • An array is now two-dimensional, though still finite. The default value of an entry in an array is still 1 and we still use 1s as padding when necessary. Inline, we can represent the commencement of a new row by a (1).
  • The pilot (the first non-1 entry after the prime entry) may now appear on later row than the first row.
  • If the pilot is the first entry on its row, there is no copilot. The rest of the time, the copilot is the entry before the pilot, as normal.
  • We can introduce the term "previous line" for any line which appears wholly above the pilot.
  • We also introduce the term "prime block". The prime block of a line is the first p entries in that line, whatever p is. If the line isn't long enough, pad it out with 1s.
  • The "airplane" now consists of the pilot, all its previous entries, including (if it exists) the copilot, the prime entry and the base, AND the prime block of all the previous lines. Likewise the definition of "passengers" is expanded to include the larger airplane.

In other words

Here, b, p, d and # are always used for the base, prime entry, pilot and remainder of the array respectively.

  copilot
       |
A = <b,p,d,#>
     |
  passenger

     copilot
         |
A = <b,p,1,d,#>
     \_/
      |
   passengers

             copilot
                 |  
A = <b,p,1,...,1,1,d,#>
     \_________/
          |
     passengers

        p entries
       _____|_____
      /           \
A = / b p 1 1 ... 1 \ <- this row is all passengers
    \ d #           /    NO COPILOT


         p entries
       ______|______
      /             \
A = / b p 1 1 1 ... 1 \    \ 
   /  1 1 1 1 1 ... 1  \    |
  /   . . . . .     .   \   |any number of
 <    . . . . .     .    >  |rows of passengers
  \   . . . . .     .   /   |  
   \  1 1 1 1 1 ... 1  /   /
    \ 1 1 1 d #       /
      \_/ |
       |  |
       | copilot
       |
passengers

Rules for evaluating an array

These have not changed, but the implications in light of the new definitions are large.

  • If p=1 then v(A)=b, regardless of what comes after p.
  • If there is no pilot, then v(A)=bp.
  • Otherwise, p>1 and the pilot exists. In this case:
    1. Decrement the pilot.
    2. Let all passengers take on the base value. Note that the prime entry is among the passengers, and the base value remains unchanged. Note that the meaning of "passengers" has been extended to include a large block of 1s which now turn into bs.
    3. Replace the copilot if it exists with v(A'), where A' is the original array, except with the prime entry decremented.
    4. Leave the remainder of array unchanged.
    Then evaluate the new array instead.

Two-row arrays

The simplest two-row arrays are of the form:

/b p\  =  <b b ... b>
\2  /      \_______/
               |
           p entries

Here, the "passengers" are the first p entries on the top row; regardless of the fact that most of these entries are 1s. As the passengers are all turned to bs, so the pilot, which is equal to 2, decrements to 1, meaning we can trim the second row off.

Thus we have a very simple way to generate linear arrays of arbitrary width... provided that we want every entry to be equal to b. However, this is an expected sacrifice. In order to describe large numbers in relatively small spaces, it is necessary to sacrifice precision for scope.

Some of the numbers mentioned previously are expressible in this form:

tri group

tritri = /3 3\  =  <3,3,3>
         \2  /

tetratri = /3 4\  =  <3,3,3,3>
           \2  /

pentatri = /3 5\  =  <3,3,3,3,3>
           \2  /

hexatri = /3 6\  =  <3,3,3,3,3,3>
          \2  /

heptatri = /3 7\  =  <3,3,3,3,3,3,3>
           \2  /

ultatri = /3 27\  =  <3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3>
          \2   /

super group

supertri = /3 3\  =  <3,3,3>
           \2  /

supertet = /4 4\  =  <4,4,4,4>
           \2  /

superpent = /5 5\  =  <5,5,5,5,5>
            \2  /

superhex = /6 6\  =  <6,6,6,6,6,6>
           \2  /

supersept = /7 7\  =  <7,7,7,7,7,7,7>
            \2  /

superoct = /8 8\  =  <8,8,8,8,8,8,8,8>
           \2  /

superenn = /9 9\  =  <9,9,9,9,9,9,9,9,9>
           \2  /

superdec = /10 10\  =  <10,10,10,10,10,10,10,10,10,10>
           \2    /

decal group

tridecal = /10 3\ = <10,10,10>
           \2   /

tetradecal = /10 4\ = <10,10,10,10>
             \2   /

pentadecal = /10 5\ = <10,10,10,10,10>
             \2   /

hexadecal = /10 6\ = <10,10,10,10,10,10>
            \2   /

heptadecal = /10 7\ = <10,10,10,10,10,10,10>
             \2   /

octadecal = /10 8\ = <10,10,10,10,10,10,10,10>
            \2   /

ennadecal = /10 9\ = <10,10,10,10,10,10,10,10,10>
            \2   /

duperdecal = /10 10\ = <10,10,10,10,10,10,10,10,10,10>
             \2    /

More two-row arrays

So far, so good. Let's mix things up a bit. If we extend the top row by a 2, interesting things start to happen.

/b 2 2\
\2    /

Here the top row contains base, prime entry, copilot and pilot as per usual. However, the presence of the 2 on the next row throws things off a bit.

A = /b 2 2\ = /b v(A') 1\     ...where A' = /b 1 2\ = b
    \2    /   \2        /                   \2    /

            = /b b\
              \2  /

            = <b,b,...,b>
               \_______/
                   b

Hey, we just saw some stuff like that:

supertri = /3 2 2\  =  <3,3,3>
           \2    /

supertet = /4 2 2\  =  <4,4,4,4>
           \2    /

superpent = /5 2 2\  =  <5,5,5,5,5>
            \2    /

superhex = /6 2 2\  =  <6,6,6,6,6,6>
           \2    /

supersept = /7 2 2\  =  <7,7,7,7,7,7,7>
            \2    /

superoct = /8 2 2\  =  <8,8,8,8,8,8,8,8>
           \2    /

superenn = /9 2 2\  =  <9,9,9,9,9,9,9,9,9>
           \2    /

superdec = /10 2 2\  =  <10,10,10,10,10,10,10,10,10,10>
           \2     /

Moving on:

A = /b 3 2\ = /b v(A') 1\ where A' = /b 2 2\
    \2    /   \2        /            \2    /

            = /b v(A')\
              \2      /

            = <b,b,...,b>
               \_______/
                 v(A')

            = <b,b,...,b>
               \_______/
              <b,b,...,b>
               \_______/
                   b

Gosh, this all looks terribly familiar! Can we guess the rest?

/b p 2\ = <b,b,...,b> \
\2    /    \_______/   |
               .       |
               .       |p
               .       |
           \_______/   |
               b      /


/b 2 3\ = /b b 2\
\2    /   \2    /

        = <b,b,...,b> \
           \_______/   |
               .       |
               .       |b
               .       |
           \_______/   |
               b      /


/b p 3\ = <b,b,...,b> \     \
\2    /    \_______/   |     |
               .       |     |
               .       | ... |b
               .       |     |
           \_______/   |     |
               b      /     /
          \___________________/
                    p

Tiers of towers of tiers, oh my. Note that this is just 3 entries on the top row and a 2 on the second row causing all this chaos. Here are some more named numbers in this region:

iteral group

iteral = /10 2 2\
         \2     /

       = /10 10\
         \2    /

       = <10,10,...,10>
          \__________/
               10


iteralplex = /10 3 2\
             \2     /

           = /10 iteral\
             \2        /

           = <10,10,...,10>
              \__________/
             <10,10,...,10>
              \__________/
                   10


iteralduplex = /10 4 2\
               \2     /

             = /10 iteralplex\
               \2            /

             = <10,10,...,10>
                \__________/
               <10,10,...,10>
                \__________/
               <10,10,...,10>
                \__________/
                     10

more of that tri group you hear so much about

dupertri = /3 3 2\
           \2    /

         = <3,3,...,3> \
            \_______/   |
             <3,3,3>    |3
              \___/     |
                3      /


latri = /3 2\ = /3 3\ = /3 3 3\
        \4  /   \3  /   \2    /

      = /3 v(A') 2\    ...where A' = /3 2 3\ = /3 3 2\ = dupertri
        \2        /                  \2    /   \2    /

      = /3 dupertri 2\
        \2           /

      = <3,3,...,3> \
         \_______/   | <3,3,...,3> \
             .       |  \_______/   |
             .       |   <3,3,3>    |3
             .       |    \___/     |
           \___/     |      3      /
             3      /
        \____________________________/
                       3

As you can see, many of these numbers can be represented in multiple forms, which is handy as it means they can provide familiar points of reference as our notation develops.

We haven't made much use of the (1) notation I mentioned yet, and I can't be bothered to render all of the following in fixed-width form, so here are some more named numbers:

?-??-bol(plex) group

  • goobol = <10,100 (1) 2>
  • goobolplex = <10,goobol (1) 2>
  • gibbol = <10,100,2 (1) 2>
  • gabbol = <10,100,3 (1) 2>
  • geebol = <10,100,4 (1) 2>
  • gibol = <10,100,5 (1) 2>
  • gobbol = <10,100,6 (1) 2>
  • gabol = <10,100,7 (1) 2>
  • boobol = <10,10,100 (1) 2>
  • bibbol = <10,10,100,2 (1) 2>
  • babbol = <10,10,100,3 (1) 2>
  • beebol = <10,10,100,4 (1) 2>
  • bibol = <10,10,100,5 (1) 2>
  • bobbol = <10,10,100,6 (1) 2>
  • babol = <10,10,100,7 (1) 2>
  • troobol = <10,10,10,100 (1) 2>
  • tribbol = <10,10,10,100,2 (1) 2>
  • trabbol = <10,10,10,100,3 (1) 2>
  • treebol = <10,10,10,100,4 (1) 2>
  • tribol = <10,10,10,100,5 (1) 2>
  • trobbol = <10,10,10,100,6 (1) 2>
  • trabol = <10,10,10,100,7 (1) 2>
  • quadroobol = <10,10,10,10,100 (1) 2>
  • quadribbol = <10,10,10,10,100,2 (1) 2>
  • quadrabbol = <10,10,10,10,100,3 (1) 2>
  • quadreebol = <10,10,10,10,100,4 (1) 2>
  • quadribol = <10,10,10,10,100,5 (1) 2>
  • quadrobbol = <10,10,10,10,100,6 (1) 2>
  • quadrabol = <10,10,10,10,100,7 (1) 2>
  • quintoobol = <10,10,10,10,10,100 (1) 2>
  • quintibbol = <10,10,10,10,10,100,2 (1) 2>
  • quintabbol = <10,10,10,10,10,100,3 (1) 2>
  • quinteebol = <10,10,10,10,10,100,4 (1) 2>
  • quintibol = <10,10,10,10,10,100,5 (1) 2>
  • quintobbol = <10,10,10,10,10,100,6 (1) 2>
  • quintabol = <10,10,10,10,10,100,7 (1) 2>

?-??-trol group

  • gootrol = <10,100 (1) 3>
  • gitrol = <10,100,2 (1) 3>
  • gatrol = <10,100,3 (1) 3>
  • geetrol = <10,100,4 (1) 3>
  • geitrol = <10,100,5 (1) 3>
  • gotrol = <10,100,6 (1) 3>
  • gaitrol = <10,100,7 (1) 3>
  • gootrol = <10,100 (1) 3>
  • bootrol = <10,10,100 (1) 3>
  • trootrol = <10,10,10,100 (1) 3>
  • quadrootrol = <10,10,10,10,100 (1) 3>

?-ooquadrol group

  • gooquadrol = <10,100 (1) 4>
  • booquarol = <10,10,100 (1) 4>
  • trooquadrol = <10,10,10,100 (1) 4>
  • quadrooquadrol = <10,10,10,10,100 (1) 4>

goo-??-ol group

  • googol = <10,100>
  • goobol = <10,100 (1) 2>
  • gootrol = <10,100 (1) 3>
  • gooquadrol = <10,100 (1) 4>
  • gooquintol = <10,100 (1) 5>

?-??-ssol(plex) group

  • gossol = <10,10 (1) 100>
  • gossolplex = <10,10 (1) gossol>
  • gissol = <10,10 (1) 100,2>
  • gassol = <10,10 (1) 100,3>
  • geesol = <10,10 (1) 100,4>
  • gussol = <10,10 (1) 100,5>
  • mossol = <10,10 (1) 10,100>
  • mossolplex = <10,10 (1) 10,mossol>
  • missol = <10,10 (1) 10,100,2>
  • massol = <10,10 (1) 10,100,3>
  • meesol = <10,10 (1) 10,100,4>
  • mussol = <10,10 (1) 10,100,5>
  • bossol = <10,10 (1) 10,10,100>
  • bissol = <10,10 (1) 10,10,100,2>
  • bassol = <10,10 (1) 10,10,100,3>
  • beesol = <10,10 (1) 10,10,100,4>
  • bussol = <10,10 (1) 10,10,100,5>
  • trossol = <10,10 (1) 10,10,10,100>
  • trissol = <10,10 (1) 10,10,10,100,2>
  • trassol = <10,10 (1) 10,10,10,100,3>
  • treesol = <10,10 (1) 10,10,10,100,4>
  • trussol = <10,10 (1) 10,10,10,100,5>

Miscellaneous

emperal = /10 10\ = <10,10 (1) 10>
          \10   /


emperalplex = /  10    10 \ = <10,10 (1) emperal>
              \emperal    /

hyperal = /10 10\ = <10,10 (1) 10,10>
          \10 10/


hyperalplex = / 10    10    \ = <10,10 (1) 10,hyperal>
              \ 10  hyperal /

Some additional comments at this point. Firstly, what's up with these names, maaaaan? They take the old "googolplex" system and extend it in some fairly interesting ways, but they're inconsistent ("gaitrol"? We have to jump through hoops to get the right vowels sounds in such situations), incomplete (what comes after the "ay" sound for "seven"? Bowers doesn't say!), and generally describe numbers in which we have very little interest. Who cares what a trossol is? Is that number of any use? Emperals and hyperals are at least more interesting.

Secondly, we're still only at two rows, so the real ramifications of an entire second dimension have yet to be explored. As the arrays become larger, so the prime block of all previous structures increases in size too. This kind of thing starts happening:

hyperal = /10 2\ = /10 10\
         < 1    >  \10 10/
          \2   /

diteral = /10 10\ = /10 10 10 10 10 10 10 10 10 10\ = <10,10 (1)(1) 2>
         < 1     >  \10 10 10 10 10 10 10 10 10 10/
          \2    /

diteralplex = /10 diteral \ = /10 10 ... 10\ = <10,diteral (1)(1) 2>
             < 1           >  \10 10 ... 10/
              \2          /    \__________/
                                  diteral
  • dubol = <10,100 (1)(1) 2>
  • dutrol = <10,100 (1)(1) 3>
  • duquadrol = <10,100 (1)(1) 4>
  • admiral = <10,100 (1)(1) 10>
  • dossol = <10,100 (1)(1) 100>
  • dossolplex = <10,100 (1)(1) dossol>
dutritri = <3,3 (1)(1)(1) 2>

             /3 3\
         =  / 1   \
            \ 1   /
             \2  /

         =  /3 3 3\
           < 3 3 3 >
            \3 3 3/

dutridecal = <10,3 (1)(1)(1) 2>

               /10 3\
           =  / 1    \
              \ 1    /
               \2   /

           =  /10 10 10\
             < 10 10 10 >
              \10 10 10/

xappol = <10,10 (1)(1)(1)(1)(1)(1)(1)(1)(1)(1) 2>

               /10 10\
              / 1     \
             /  1      \
            /   1       \
           /    1        \
       =  <     1         >
           \    1        /
            \   1       /
             \  1      /
              \ 1     /
               \2    /

              / 10 10 10 10 10 10 10 10 10 10 \
             /  10 10 10 10 10 10 10 10 10 10  \
            /   10 10 10 10 10 10 10 10 10 10   \
           /    10 10 10 10 10 10 10 10 10 10    \
          /     10 10 10 10 10 10 10 10 10 10     \
       =  \     10 10 10 10 10 10 10 10 10 10     /
           \    10 10 10 10 10 10 10 10 10 10    /
            \   10 10 10 10 10 10 10 10 10 10   /
             \  10 10 10 10 10 10 10 10 10 10  /
              \ 10 10 10 10 10 10 10 10 10 10 /

And once again, we reach the limits of convenience of our notation. Oh deary me. If only we could use... THE THIRD DIMENSION!!!

Next: Multidimensional array notation.

Log in or register to write something here or to contact authors.