Multiplication is repeated addition: 2 * 5 is defined as 2 + 2 + 2 + 2 + 2.

Exponentiation is repeated multiplication: 25 is defined as 2 * 2 * 2 * 2 * 2.

Repeated exponentiation is known as tetration: 2 ↑↑ 5 is defined as 2(2(2(22))).

Exponential growth is difficult for people to reason about (population growth, the spread of disease, etc). The numbers are surprising and overwhelming. Well, tetration grows a lot faster than that. Here are the first few values of 2 ↑↑ n:

n 2 ↑↑ n
0 1
1 2
2 4
3 16
4 65,536
5 > 1019,729

That is to say, T = 2 ↑↑ 5 is a number with almost twenty thousand digits.

T represents a sweet spot for big numbers. It is perhaps the smallest number that is easy to define, dramatically larger than any real-world number, and also physically obtainable. By “physically obtainable” I mean that it can actually be displayed on a computer and witnessed in full, although this might take a little work.

First of all, some programming langauges represent numbers using bit sequences of fixed length. There are infinitely many numbers and only finitely many bit sequences of a given length, so it is only possible to deal with numbers within a certain bound. For example, the largest 64-bit number is 264 - 1 = 18,446,744,073,709,551,615, a number with only twenty digits. Even on a platform with 65,536-bit numbers, T would be just a little too big to represent.

So bearing witness to T will require a language with unbounded numbers, like Python. But still there will be problems:

>>> T = 2 ** 2 ** 2 ** 2 ** 2
>>> T
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Exceeds the limit (4300) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit

By default Python won’t display such a large number. To see T, the default must be overridden:

>>> import sys
>>> sys.set_int_max_str_digits(20_000)
>>> T

Will that work? That depends on the local conditions. Up until just recently, trying to display T inside Emacs would cause it to freeze hard due to a long-standing and unbelievably annoying bug with long lines. So don’t try this on Emacs version 28 or earlier. I haven’t tried it on other platforms, but my guess is that it would cause problems elsewhere as well.

The first and last digits of T in base-10 are: 2003…6736. As expected, it is an even number.

The base-10 representation of T contains every single three-digit number sequence. That is, it contains 000, 001, …, and 999 as subsequences.

T = 2 ** 2 ** 2 ** 2 ** 2
T_str = str(T)

seq_len = 3

for n in range(10 ** seq_len):
    assert str(n).zfill(seq_len) in T_str