Large Numbers

How can we build a large number ?

Let us start with addition, the simplest operation with two numbers. If we have two numbers a and b, we can build a third number c = a + b by adding a and b. This number c is greater than a and than b.

Then we can add repetitively a to itself b times : a + a + ... + a. This is called the product a * b. It can be defined recursively :

We can consider the operation "*" as the result of a "meta-operation" (an operation on operations) applied to the operation "+", this meta-operation consisting in iterating the original operation, and write it "* = ,+" where "," represents the iteration meta-operation. So we have a * b = a ,+ b.

We can go on by iterating the product : a * a * ... * a with a repeated b times. This is the exponentiation a^b, and the exponentiation is the iteration of the product : ^ = ,* = ,,+ which we can write more simply 2,+.

If we want to iterate exponentiation, we must be careful because it is not commutative and we have for example (a^a)^a = a^(a*a) = a^(a^2). So we get larger numbers if we apply exponentiation from right to left and we define an operation called "tetration" by a^^b = a^(a^(a^(...^(a^a)))) with a repeated b times. We have ^^ = ,^ = ,,,+ = 3,+.

We can define very large numbers starting with addition and repetitively iterating it a large number of times, and applying it to some large numbers, for example : 1000 1000,+ 1000.

The number of times we apply the iteration meta-operator to addition can itself be built this way, giving successively :

We will introduce another meta-operator called "nesting", represented by "@" and defined by (where # represents any operator) : With this notation we have : Here is a Haskell definition of these notations :
module Main where

 add a b = a + b

 iter 0 x a b = x a b
 iter (n+1) x a 1 = a
 iter (n+1) x a (b+1) = iter n x a (iter (n+1) x a b)

 nest x a 1 = a
 nest x a (b+1) = iter (nest x a b) x a a
There is a correspondence between these notations and other notations invented by Jonathan Bowers called Extended Operator Notation and Array Notation or Bower Exploding Array Function defined by the following rules : Bowers extended operator notation is related to his array notation in this way: For example, we have :

Links about Bowers notation :