Notations for transfinite ordinals

Conventions 

w represents omega.
W represents Omega = omega 1, the first uncountable ordinal.

Introduction 

The domain of transfinite ordinals has the particularity of being the only mathematical domain that cannot be automated. In all other domains of mathematics, it is at least theoretically possible to deduce the theorems automatically from a formal system consisting of a finite set of axioms and rules. But Gödel proved that given any formal system of a theory sufficiently powerful to contain arithmetics, it is possible to build a proposition that expresses its own unprovability in this formal system. This proposition, which is very huge, has also a meaning as an ordinary arithmetic proposition, but is very useless in ordinary arithmetics. If the formal system is consistent, then this proposition is undecidable.
At first sight one could think that we just have to add this proposition to the system as an axiom, but this augmented system also have its own Gödelian proposition. By adding successively Gödelian propositions, we obtain an infinite sequence of systems, and the system defined as the union of all these systems also has its Gödelian proposition, and so on.
But according to Solomon Feferman in "Penrose’s Gödelian argument" http://math.stanford.edu/~feferman/papers/penrose.pdf p.9 :
"one obtains completeness for all arithmetical sentences in a progression based on the transfinite iteration of the so-called global or uniform reflection principle"
The uniform reflection principle, which is something similar to adding the Gödelian proposition as an axiom, is described for example in John Harrison's paper "Metatheory and Reflection in Theorem Proving: A Survey and Critique" http://www.cl.cam.ac.uk/~jrh13/papers/reflect.ps.gz p.18 :
⊢∀n.Pr(⌈ϕ[n]⌉)⇒ϕ[n]
Harrison also says p.19 :
"Feferman showed that a transfinite iteration based on it proves all true sentences of number theory".
So we can say that the construction of transfinite ordinals can store all the creative part of mathematics.

Formally, a countable ordinal number is either : An uncountable ordinal number may be the limit of a transfinite sequence f(0), f(1), f(2), ... , f(w), f(w+1), ..., f(n), ... where n is an ordinal. The domain of f is called the cofinality of the ordinal.
Generally, an ordinal can be defined as the least ordinal strictly greater than all ordinals in a given set : the empty set for 0, the set { a } for the successor of a (a+1), the set of natural numbers for w, ...

The ordinal numbers start with ordinary natural numbers 0, 1, 2, 3, ... which are followed by w which represents the "simple" infinity. Then the transfinite ordinals go further with w+1, w+2, w+3, ... w+w = w*2, w*2+1, ..., w*3, ... w*w = w^2, ..., w^3, ... w^w, ... w^(w^w), ..., epsilon 0.
epsilon 0 is the least fixed point of the function a -> w^a, which means the least ordinal such as a = w^a. It is the limit of the sequence 0, w^0, w^(w^0), ... Then we can go further by searching for the next fixed points of this function. The next one can be obtained by iterating application of function a -> w^a starting with an ordinal which is certainly greater than epsilon 0, for example epsilon 0 + 1. We get the second fixed point called epsilon 1 which is the limit of epsilon 0 + 1, w^(epsilon 0 + 1), w^(w^(epsilon 0 + 1)), ...
We can go on the same way to obtain epsilon 2, epsilon 3, ...
We can consider epsilon as a function a -> epsilon a and say that this function enumerates the fixed points of the function a -> w^a.
Then epsilon w can be defined as the limit of epsilon 0, epsilon 1, epsilon 2, ...
And we can go on with epsilon (omega+1), ..., epsilon (epsilon 0), ... zeta 0.
zeta 0 is the least fixed point of the function epsilon.
Like for epsilon, the function zeta (a -> zeta a) enumerates the fixed points of the function epsilon.
Then there is the function eta which enumerates the fixed points of zeta.
We could go on using successive greek letters, but it is better to number these functions, defining :
We can also consider a function phi of two variables (called the binary Veblen function) : The least ordinal which cannot be obtained with this binary Veblen function is the least fixed point of a -> phi(a,0) which is called Gamma 0. It can still be represented with the phi function if we add a variable to it : Gamma 0 = phi(1,0,0).
We can generalize it with any number of variables : phi(1,0,0,0), ...
An other way to represent an application of the phi function to some ordinals is to indicate the position of the variable (from 0 for the last one) and the corresponding value, only for those which are different from 0, for example :
phi(1,0,5,4) = phi (3:0, 1:5, 0:4)
With this notation it is possible to write easily expressions which would be difficult to write with the complete list of variables, for example phi(1000:1) = phi(1,0,...,0) with 1000 0s.
And even phi(w:1) which can be defined as the limit of phi(0:1) = phi(0,1), phi(1:1) = phi(1,0), phi(2,1) = phi(1,0,0), ... This ordinal is called the small Veblen ordinal.
The smallest ordinal which cannot be represented with this notation is called the large Veblen ordinal. It is the least fixed point of the function a -> phi(a:1), the limit of 0, phi(0:1) = phi(0,1) = w^1 = w, phi(phi(0:1):1) = phi(w:1), phi(phi(phi(0:1):1):1), ...
References : Veblen function

phi(an,...,a0) is defined by :
phi(a) = w^a
phi(0,an,...,a0) = phi(an,...,a0)
phi(an,...,a(i+1),a,0,...,0,c) = c-th fixed point of \x.phi(an,...,a(i+1),b,x,0,...,0) for all b<a
see http://en.wikipedia.org/wiki/Veblen_function

This function can be generalized to transfinitely many variables.

Schütte brackets or Klammersymbols

Schütte brackets or Klammersymbols are another way to write Veblen fuctions with transfinitely many variables. A Schütte bracket consists in a matrix with two lines, with the positions of the variables in the second line in increasing order, and the corresponding values in the first line. This matrix is preceded by the function x -> phi(x). If we take x -> w^x, we get the equivalent of the Veblen function. For example :
phi(a,b,c) = (x -> w^x) ( c  b  a )
                        ( 0  1  2 )

Small Veblen ordinal = (x -> w^x) ( 1 )
                                  ( w )
See https://core.ac.uk/download/pdf/33091421.pdf for more information.

Beyond Veblen function

We start with the large Veblen ordinal (LVO) which is the least fixed point of the function α↦φ(1_α), φ(1_α) representing the application of φ with transfinitely many variables with 1 at position α and 0 anywhere else. Then we consider a function F which enumerates the fixed points of α↦φ(1_α). So we have LVO = F(0). The next fixed point F(1) is the limit of LVO+1,φ(1_LVO+1),φ(1_φ(1_LVO+1)),...

Then we can consider the fixed points of the function F and define a function G which enumerates these fixed points, then a function H which enumerates the fixed points of G, and so on.

This construction is similar to ϵ which enumerates the fixed points of α↦ωα, ζ which enumerates the fixed points of ϵ, η which enumerates the fixed points of ζ.*

Like we have defined :
we can define :
With this notation we can write LVO=φ′0(0).

Then φ′α(β) can be written as a binary function φ′(α,β) which can be generalized to finitely many variables like φ′(α,β,γ) and transfinitely many variables like φ′(1ω).

Then we can consider the fixed points of the function α↦φ′(1α) and define a function φ′′0 which enumerates these fixed points.

The same way we can define φ′′′, φ′′′′, ...

We can then introduce a new notation :

Then we can go on with for example the fixed points of α↦Φα(1α) or something like that ...

There is another way to express this construction, using Veblen functions indiced by the function used for φ0.

There are different conventions for φ0(x), like ωx or ϵx. We can write explicitely the convention chosen for φ0 by writing "φf(α,β)" for "φα(β) with function f used for φ0". With this notation we have:

( See http://www.cs.man.ac.uk/~hsimmons/TEMP/OrdNotes.pdf )

Then we generalize the binary function φf(α,β) to finitely many variables: for example φ_f(1,0,α)=(1+α)th common fixed point of the function ξ↦φ(ξ,0) ( see https://en.wikipedia.org/wiki/Veblen_function ) and to infinitely many variables with a finite number of them different from 0, for example φ_f(1_ω).

Then we can define new φ functions by taking for φ0 the function ξ↦φ_f(1_ξ) and define functions φ_ξ↦φ_f(1_ξ) with 2 variables, with finitely many variables and with transfinitely many variables.

To make a correspondence with my previous construction, if f is the function ξ↦ω^ξ, then φ_f(α,β) corresponds to what I wrote φ_α(β), and φ_ξ↦φf(1ξ)(α,β) to φ′_α(β).

If we define the function S by S(f)(ξ)=φ_f(1_ξ), then φ_ξ↦φf(1ξ) can be written φ_S(f). We can then consider φ_S(S(f)) and so on.

Given an ordinal α, we can iterate transfinitely "α times" the application of S to an initial function f0, for example f0(ξ)=ω^ξ, to obtain a function which I will write S^α(f0). We can use this function to define a function φ_S^α(f0) which permits to construct big ordinals.

We must verify that this function really permits to get greater and greater ordinals and does not get stucked in a loop, perhaps by verifying it is "fruitful" or "helpful" in the sense of http://www.cs.man.ac.uk/~hsimmons/TEMP/OrdNotes.pdf : "An ordinal function f∈Ord' is fruitful if it is inflationary, monotone, continuous, and big. Let Fruit be the class of fruitful functions. An ordinal function h∈Ord' is helpful if it is strictly inflationary, monotone, and strictly big. Let Help be the class of helpful functions."

If it is the case and if this construction is correct, there is probably a correspondence with the notations using ordinal collapsing functions, but for the moment I don't see how to establish it.

And after ? The next step could perhaps start by enumerating the fixed points of a function like ξ↦φ_S^ξ(1_ξ) or something like that ...

Notation of Harold Simmons

http://www.cs.man.ac.uk/~hsimmons/ORDINAL-NOTATIONS/ordinal-notations.html
Fix f z = f^w(z+1) = H f (suc z) = least fixed point of f which is > z

Next = Fix [w^*] = "next epsilon_a"

[0] h = Fix (a → h^a 0) 
[1] H h = Fix (a → H^a h 0)
[2] H h g = Fix (a → H^a h g 0)
or
[0] h = Fix (a → h^a w) 
[1] H h = Fix (a → H^a h w)
[2] H h g = Fix (a → H^a h g w)

…
Delta[0] = w
Delta[1] = Next w = epsilon 0
Delta[2] = [0] Next w = least v with v = Next^v w = zeta 0

Veb f z = (Fix f)^(1+z) 0 = (1+z)th fixed point of f
Enm h a = h^(1+a) 0
Veb = Enm o Fix ; [0] = Fix o Enm
Fix o Veb = Fix o Enm o Fix = [0] o Fix
Fix o Veb^a = [0]^a o Fix

Delta[3] = [1] [0] Next w = least v with v = [0]^v Next w = Gamma 0
Delta[4] = [2] [1] [0] Next w = least v with v = [1]^v [0] Next w = large Veblen ordinal 
…
Correspondence with Veblen function
epsilon_a = phi(1,a) = Next^(1+a) 0 = Next^(1+a) w
zeta_0 = phi(2,0) = least fixed point of (x → epsilon_x) = Fix (x → epsilon_x) 0 = Fix (x → Next^(1+x) 0] 0 = Fix (x → Next^x 0) 0 = [0] Next 0
Next fixed point : zeta_1 = phi(2,1) = Fix (x → Next^x 0) ([0] Next 0) = [0] Next ([0] Next 0) = ([0] Next)^2 0
zeta_a = phi(2,a) = ([0] Next)^(1+a) 0
eta_0 = phi(3,0) = Fix (x → zeta_x) 0 = Fix (x → ([0] Next)^(1+x) 0) 0 = Fix (x → ([0] Next)^x 0) 0 = [0] ([0] Next) 0 = [0]^2 Next 0
eta_a = phi(3,a) = ([0]^2 Next)^(1+a) 0
phi(1+b,a) = ([0]^b Next)^(1+a) 0
Gamma_0 = phi(1,0,0) = least fixed point of x → phi(x,0) = Fix (x → phi(x,0)) 0 = Fix (x → [0]^x Next 0) 0 = [1] [0] Next 0
phi(c,b,a) = ([0]^b (([1] [0])^c Next))^(1+a) 0
phi(d,c,b,a) = ([0]^b (([1] [0])^c (([1]^2 [0])^d Next)))^(1+a) 0
Small Veblen ordinal = [1]^w [0] Next 0
Large Veblen ordinal = [2] [1] [0] Next 0 = [2] [1] [0] Next w
See also http://www.cs.man.ac.uk/~hsimmons/ORDINAL-NOTATIONS/FromBelow.pdf.

Extension
Large Veblen ordinal = [2...0] Next 0
Bachmann-Howard ordinal = [w...0] Next 0
[1] [w...0] Next 0 = [w+1...0] Next 0
Fix (x → [x...0] Next 0) 0
Variant
Replace a → w^a by suc
N = Fix suc
[0] N 0 = Fix (x → N^x 0) 0 = lim 1, N^1 0 = w, N^w 0 = w*w = w^2, N^w^2 0 = w*w^2 = w^3, ... = w^w
[0]^2 N 0 = [0] ([0] N) 0 = Fix (x → ([0] N)^x 0) 0 = lim 1, [0] N 0 = w^w, ... = w^w^2
[0]^a N 0 = w^w^a
[1] [0] N a = Fix (x →  [0]^x N 0) a = lim a+1, [0]^(a+1) N 0 = w^w^(a+1), ... = Next a
[1] [0] N = Next
([0]^b ([1] [0] N))^(1+a) = phi(1+b,a)


Ordinal collapsing functions

An ordinal collapsing function is a function which, when applied to an uncountable ordinal, gives a countable ordinal.

The general idea is to define a set of ordinals C(a) or C(a,b) where a and b are ordinals, which contains all ordinals that can be built using an initial set of ordinals and some operations or functions, and then define psi(a) or psi(a,b) as the smallest ordinal which is not in C(a) or C(a,b), or the least ordinal which is greater than than all countable ordinals of C(a) or C(a,b).

Different ordinal collapsing functions are described here : http://googology.wikia.com/wiki/Ordinal_notation

An example of ordinal collapsing function : Madore's psi

This ordinal collapsing function is described in https://en.wikipedia.org/wiki/Ordinal_collapsing_function and http://quibb.blogspot.fr/2012/03/infinity-impredicative-ordinals.html.

The definition of this function uses the ordinal Omega which is the least uncountable ordinal.
C(a) is the set of all ordinals constructible using only 0, 1, w, Omega and addition, multiplication, exponentiation, and the function psi (which will be defined later) restricted to ordinals smaller than a.
psi(a) is the smallest ordinal not in C(a).

The smallest ordinal not in C(0) is the limit of w, w^w, w^w^w, ... which is ε0, so psi(0) = epsilon_0. More generally, psi(a) = epsilon_a for all a < zeta_0, psi(a) = zeta_0 for zeta_0 <= a <= Omega, and psi(Omega+a) = epsilon_(zeta_0+a) for a <= zeta_1.

The limit psi(epsilon_(Omega+1)) of psi(Omega), psi(Omega^Omega), psi(Omega^Omega^Omega), ... is the Bachmann-Howard ordinal.

Some examples of fundamental sequences (FS) are :



Correspondence between Veblen functions and Madore's ψ (psi) collapsing function

To distinguish between the different Veblen functions, let us call φF the Veblen function with finitely many variables, and φT the Veblen function with transfinitely many variables.

φF is a function which, when applied to a list of countable ordinals, gives a countable ordinal. A list of countable ordinals can be seen as a function which, when applied to a natural number, gives a countable ordinal, with the restriction that the result differs from 0 for finitely many integers. If we denote ω the set of natural numbers and Ω the set of countable ordinals, then this can be written : φF:(ω→Ω)→Ω. If we replace α→β by β^α, we get Ω^Ω^ω, and if we apply ψ to it, we get ψ(Ω^Ω^ω), which is the small Veblen ordinal, the least ordinal that cannot be reached using φF.

For φT, the position of a variable is represented by a countable ordinal instead of a natural number, also with the restriction that finitely many variables differ from 0, so we have φT:(Ω→Ω)→Ω. If we replace α→β by β^α, we get Ω^Ω^Ω, and if we apply ψ to it, we get ψ(Ω^Ω^Ω), which is the large Veblen ordinal, the least ordinal that cannot be reached using

If we extrapolate this correspondence, we can define a generalization of the Veblen function whose limit would be ψ(Ω^Ω^Ω^Ω), and the "position" of a variable would be a function which gives a countable ordinal when applied to a countable ordinal, and so on, up to the Howard ordinal, which is the limit of ψ(Ω),ψ(Ω^Ω),ψ(Ω^Ω^Ω),...

θ function

This is another collapsing function.

θ function is a binary function. It’s defined as follows:

where W_0 = 0 and W_a means the a-th uncountable ordinal.

It means that, θ(α,β) is the (1+β)-th ordinal such that it cannot be built from ordinals less than it by addition, applying θ(δ,_) where δ < α and getting an uncountable cardinal.

It seems that θ(a,b) = φ(a,b) below Gamma_0, making θ function an extension of φ function. Even θ(Gamma_0,b) = φ(Gamma_0,b) is true.

Other important values :

See https://stepstowardinfinity.wordpress.com/2015/05/04/ordinal2/ for more information.

Taranovsky's C

Taranovsky's C is also a collapsing function.

C(a,b) is the least element above b that has degree >= a.

Definition: A degree for a well-ordered set S is a binary relation on S such that

Note: The third condition can be equivalently written as ∀a (Ca+1 = lim(Ca) ∨ ∃d ∈ lim(S)∩(a+1) Ca+1 = lim(Ca) ∪ (Ca∩(d+1))), where S is identified with an ordinal (so a+1 consists of ordinals ≤a), Ca is the set of elements that have degree a, and lim is limit points.

In other terms : Let ηη be an ordinal, and let 0S and let Ld(a,b) be the statement that aa is a limit of ordinals c such that (c,b)∈D. Let D be the following binary relation over η:

C(a, b) = b+ω^a iff C(a, b) ≥ a.

For ordinals in the standard representation written in the postfix form, the comparison is done in the lexicographical order where 'C' < '0' < 'Ω': For example, C(C(0,0),0) < C(Ω, 0) because 000CC < 0ΩC. (This does not hold for non-standard representations of ordinals.)

The fundamental sequences of Taranovsky’s notation can be easily defined.[3] Let L(α) be the amount of C’s in standard representation of α, then α[n]=max{β|β<α∧L(β)≤L(α)+n}.

Here is a summary of the system by Taranovsky (see https://cs.nyu.edu/pipermail/fom/2012-March/016349.html) :

Examples of representations of some ordinals (where W = W1) :

See http://web.mit.edu/dmytro/www/other/OrdinalNotation.htm and https://stepstowardinfinity.wordpress.com/2015/06/22/ordinal3/ for more information.

Ordinal trees

See http://www.madore.org/~david/math/ordtrees.pdf and http://journals.openedition.org/philosophiascientiae/pdf/402.

The order on finite rooted trees is recursively defined as follows: a tree A is less than a tree B, written A < B,
iff :
- either there is some child (=immediate subtree) B' of B such that A <= B',
- or the following two conditions hold: every child A' of A satisfies A' <  B, and the list of children of A is lexicographically less than the list of children of B for the order <  (with the leftmost children having the most weight, i.e., either B has more children than A, or if A' and B' are the leftmost children on which they differ then A' < B').
This is a well-order.

Combinatory or RHS0 notation

This method is based on combinatory logic and lambda calculus formalism.
Intuitively, the method consists in :

The difficulty, which requires intelligence, is to see the regularities. It gives the following sequence :
To progress faster, we can use the following rule :
If we have found an ordinal a, and later another ordinal b of the form f (s (s z)), we may produce an ordinal c = f ([suc->s,0->z] a) where [suc->s,0->z] a means the expression obtained by replacing suc by s and 0 by z in a.
For example :
a = R1 H suc 0
b = R1 H (R1 H suc) 0
s = R1 H
z = suc
f x = x 0
[suc->R1 H,0->suc] a = R1 H (R1 H) suc
c = f ([suc->R1 H,0->suc] a) = R1 H (R1 H) suc 0
With the following rules : we can produce the following sequence of ordinals : The rules R1, R2, R3, ... may be replaced by H or Repl if f1 ... fn ... f1 ... fn is reformulated in <f1,...,fn> ( ... (<f1,...,fn> I)...) with <f1,...,fn> g = g f1 ... fn :

More formally, this notation uses combinatory logic with De Bruijn indexes.
lambda.x is written [ x ] and variables are written *, **, ***..., for example [ ... * ... ] = \x ( ... x ... ) 

CI = C I is defined by CI x f = f x.
CI x = <x>
<x1,...,xn> f = f x1 ... xn
tuple n f x1 ... xn = f <x1,...,xn>
tuple 0 = <I>
tuple (n+1) f x0 = tuple n [ f (insert x0 *) ]
with insert x0 a f  = a (f x0)

r 0 f x = x
r (n+1) f x = f (r n f x)
r (lim g) f x = lim [r * f x]

H f x represents the limit of x, f x, f (f x), ...
H f x = r w f x

R1 = [H <*> I] = tuple 1 [H * I]
R2 = [[H <**,*> I]] = tuple 2 [H * I]
R3 = [[[H <***,**,*> I]]] = tuple 3 [H * I]
Rn = tuple n [H * I]
R(n...1) = Rn ... R1
S(n...1) = [S(*...1)] n = <Rn,...,R1>
R(n...1) = S(n...1) I
[S(*...1)] 0 = I
[S(*...1)] (n+1) = insert (tuple (n+1) [H * I]) ([S(*...1)] n)

L f = lim f 0, f 1, ...
L f x = L [f * x]
H = [[L [r * *** **]]]
or
L0 = lim f 0, f 1, ...
L n f = tuple n [ L0 [ ** (f *) ]]
L n = [ tuple n [ L0 [ ** (*** *) ]]]
L = [[ tuple ** [ L0 [ ** (*** *) ]]]
 = \n \f (tuple n \a (L0 \i (a (f i)) ) )
 
To represent the replacement [suc->s,0->z] we can represent ordinals by ordinal functions which, when applied to suc and 0, give the considered ordinal. For example, R1 H suc 0 is represented by the ordinal function s -> z -> R1 H s z, R1 H (R1 H suc) 0 by s -> z -> R1 H (R1 H s) z. From these ordinals, with the replacement [suc->R1 H,0->suc] we can produce a new ordinal represented by s -> z -> ((s -> z -> R1 H s z) (R1 H) s z) = s -> z -> R1 H (R1 H) s z) which, when applied to suc and 0, gives R1 H (R1 H) suc 0.

Operations can be represented with replacements :
The ordinal ascension can be continued after Ra...1 H suc 0 by taking the fixed point :
H [ R(*->1) H suc 0 ] 0
= R(1;1) H suc 0
with R(1;1) = [[[ H [ R(*...1) **** *** ** ] 0 ]]]
= tuple 3 [ H [ ** R(*...1) ] 0]
with tuple n f x1 ... xn = f <x1, ... , xn>
and <x1, ... , xn> f = f x1 ... xn
and then we can go on with : Correspondence with Simmons notation :
The RHS0 notation can be obtained from the Simmons notation (ending with w) by replacing w by H, Next by R1, [0] by R2, [1] by R3, [2] by R4, and so on, and putting suc 0 at the end.
For example :



Correspondence between basic notation systems and their collapsing extensions based on formula : least fixed point of f = f(W)

Basic notationFormulaLimitExtensionCorrespondence with basic notationCrossing beyond limit
Cantorcantor(a,b)=b+w^aleast a = cantor(a,0) = w^a = epsilon_0TaranovskyC(a,b) = b+w^a iff C(a,b) >= aC(W,0) = epsilon_0
Epsilonepsilon_aleast a = epsilon_a = zeta_0Madore's psipsi(a) = epsilon_a for all a < zeta_0psi(W) = zeta_0
Binary Veblenphi_a(b) or phi(a,b)least a = phi(a,0) = Gamma_0thetatheta(a,b) = phi(a,b) below Gamma_0theta(W,0) = Gamma_0

Correspondence between different notations for some of the most important ordinals

Namelimit of VeblenSimmonsMadore's psithetaTaranovsky
Gamma_0phi_a(b) or phi(a,b)[1] [0] Next wpsi(W^W)theta(W,0)C(W^2,0)
Small Veblenfinitely many variables phi(a_n,...,a_0)psi(W^W^w)theta(W^w,0)C(W^w,0)
Large Veblentransfinitely many variables phi[2] [1] [0] Next wpsi(W^W^W)theta(W^W,0)C(W^W,0)
Bachmann Howardextension of phi : T = T -> W phi(a1:...:an,b1:...:bn,...)limit of ... [3] [2] [1] [0] Next wpsi(epsilon_(W+1)) = limit of psi(W^W^...^W)theta(epsilon_(W+1),0)C(C(W_2,W),0)

List of ordinals in different systems

Name Symbol Properties Algebraic Veblen function Simmons notation Madore's psi Taranovsky's Ordinal tree Combinatory
Zero 0 Smallest ordinal 0

0 () 0
One 1
1

C(0,0) = 0+w^0 (()) suc 0
Two 2
2

C(0,1) = C(0,C(0,0)) = 1+w^0 ((())) suc (suc 0)
omega w Smallest infinite ordinal w
w
C(1,0) = 0+w^1 (()()) H suc 0 = r w suc 0
= L [r * suc 0] = [[L [r * *** **]]] suc 0



w+1

C(0,w) = w+w^0 ((()())) suc (H suc 0)



w+2

C(0,w+1) (((()()))) suc (suc (H suc 0))



w*2

C(1,w) = w+w^1 (()(())) H suc (H suc 0)



w*3

C(1,w*2) = w*2+w^1 (()((()))) H suc (H suc (H suc 0))



w^2

C(2,0) = 0+w^2 (()(()())) H (H suc) 0



w^3

C(3,0) = 0+w^3 (()(()(()()))) H (H (H suc)) 0



w^w

C(w,0) = 0+w^w ((())()) H H suc 0



w^w^w

C(w^w,0) = 0+w^w^w ((()())()) H H H suc 0

epsilon 0
limit of w^w^...^w phi(1,0) Next 0 = Next w psi(0) C(W,0) (()()()) R1 H suc 0  
= H <H> I suc 0
= r w <r w> I suc 0
= [r w <*> I] (r w) suc 0
with R1 = [ H (CI *) I ]
= [H <*> I]
= tuple 1 [H * I]
or \f (H (\g (g f)) (\x x)) in lambda calculus

epsilon 1
epsilon 0 ^ ... ^ epsilon 0 phi(1,1) Next (Next 0) = Next^2 0 psi(1) C(W,C(W,0)) (()()(())) R1 (R1 H) suc 0

epsilon 2

phi(1,2) Next^3 0 psi(2) C(W,C(W,C(W,0))) (()()((()))) R1 (R1 (R1 H)) suc 0

epsilon w

phi(1,w) Next^w 0 psi(w) C(C(0,W),0) (()()(()())) H R1 H suc 0

epsilon epsilon 0

phi(1,phi(1,0)) psi(psi(0)) C(W+epsilon_0,0) (()()(()()())) R1 H R1 H suc 0

zeta 0

phi(2,0) [0] Next 0 = [0] Next w psi(W) C(C(W,W),0) = C(W*2,0) with W*2 = C(W,W) (()(())()) R(2...1) H suc 0 = R2 R1 H suc 0
= [[r w <**,*> I]] [r w <*> I] (r w) suc 0
with R2 = [[ H (B (CI *) (CI **)) I ]]
= [[ H <**,*> I ]]
= tuple 2 [H * I]

eta 0

phi(3,0) [0]^2 Next 0 psi(W^2) C(W*3,0) with W*3 = C(W,C(W,W)) (()((()))()) R2 (R2 R1) H suc 0
Feferman-Schütte Gamma 0

phi(1,0,0) [1] [0] Next 0 = [1] [0] Next w psi(W^W) C(C(W*2,W),0) = C(W^2,0) with W² = C(W*2,0) ((())()()) R(3...1) H suc 0 = R3 R2 R1 H suc 0
with R3 = [[[H(B(CI *)(B(CI **)(CI ***)))I]]]
= [[[ H <***,**,*> I ]]]
= tuple 3 [H * I]




phi(1,0,1) ([1] [0] Next)^2 0 psi(W^W*2) ((())()(())) R3 R2 R1 (R3 R2 R1 H) suc 0

Gamma w

phi(1,0,w) ([1] [0] Next)^w 0 psi(W^W*w) C(W^2+1,0) ((())()(()())) H (R3 R3 R1) H suc 0




phi(1,0,Gamma 0) psi(W^W*Gamma 0) ((())()((())()())) R1 H (R3 R2 R1) H suc 0




phi(1,1,0) [0] ([1] [0] Next) 0 psi(W^(W+1)) ((())(())()) R2 (R3 R2 R1) H suc 0




phi(1,2,0) [0]^2 ([1] [0] Next) 0 psi(W^(W+2)) ((())((()))()) R2 (R2 (R3 R2 R1)) H suc 0




phi(2,0,0) ([1] [0])^2 Next 0 psi(W^(W*2)) (((()))()()) R3 R2 (R3 R2 R1) H suc 0




phi(3,0,0) ([1] [0])^3 Next 0 psi(W^(W*3)) ((((())))()()) R3 R2 (R3 R2 (R3 R2 R1))) H suc 0
Ackermann


phi(1,0,0,0)
[1]^2 [0] Next 0 psi(W^W^2) (()()()()) R3 (R3 R2) R1 H suc 0




phi(1,0,0,0,0) [1]^3 [0] Next 0 psi(W^W^3) (()()()()()) R3 (R3 (R3 R2)) R1 H suc 0
small Veblen


limit of phi(1,0,...,0)
[1]^w [0] Next 0 psi(W^W^w) C(W^w,0) no representation
for a>=small Veblen ordinal
H R3 R2 R1 H suc 0
large Veblen


phi(W^W,0) [2] [1] [0] Next 0 = [2] [1] [0] Next w psi(W^W^W) C(W^W,0)
R4 R3 R2 R1 H suc 0
Bachmann-Howard


phi(epsilon (W+1),0)
with epsilon(W+1)=W^...^W
Limit of ... [3] [2] [1] [0] Next w psi(epsilon(W+1)) C(C(W2,W),0)
Rw...1 H suc 0
Takeuti-Feferman-Buchholz





psi(epsilon W(w)+1)


H [R*...1 H suc 0] 0 ?
Church-Kleene wCK1 Smallest non recursive ordinal







W or w1 Smallest uncountable ordinal








Example of application

In "Penrose's Gödelian argument" (p 9) Feferman writed :
"It was Turing (not me) who showed in his 1939 paper that the ordinal logic obtained by iteration of adjunction of consistency statements starting with PA and proceeding through the recursive ordinals is complete for Π1 statement (in fact at a surprisingly low level); Turing had hoped to improve this to completeness for Π2 sentences. In my 1962 paper I proved that: (i) Turing’s ordinal logic is incomplete for Π2 sentences; (ii) the same holds for progressions based on transfinite iteration of the so-called local reflection principle; (iii) but one obtains completeness for all arithmetical sentences in a progression based on the transfinite iteration of the so-called global or uniform reflection principle."

The uniform reflection principle is defined by :
For all natural number n, if there exist a proof off "p(n)", then p(n).
See Metatheory and Reflection in Theorem Proving: A Survey and Critique by John Harrison for more information about reflection principles.

So, it is possible to extend PA (Peano arithmetic) by adding the uniform reflection principle to it, and repeat it "some transfinite number of times" to get a stronger theory. For each true arithmetical sentence, there exist a transfinite ordinal such that the sentence can be proved by PA extended by transfinite iteration of uniform reflection principle up to this ordinal.

Ordinal Gamma0 in Coq

Inductive ordinal : Type :=
 | Zero : ordinal
 | Succ : ordinal -> ordinal
 | Limit : (nat -> ordinal) -> ordinal.

Fixpoint iter (a:Type) (f:a->a) (n:nat) (x:a) : a :=
 match n with
  | O => x
  | S p => iter a f p (f x)
 end.

Definition OpLim (F:nat->ordinal->ordinal) (a:ordinal) : ordinal :=
 Limit (fun n => F n a).
 
Definition OpItw (f:ordinal->ordinal) : ordinal->ordinal :=
 OpLim (iter _ f).

Fixpoint cantor (a:ordinal) (c:ordinal) : ordinal :=
 match c with
  | Zero => Succ a
  | Succ b => OpItw (fun x => cantor x b) a
  | Limit f => Limit (fun n => cantor a (f n))
 end.

Fixpoint Nabla (f:ordinal->ordinal) (b:ordinal) : ordinal :=
 match b with
  | Zero => f Zero
  | Succ a => f (Succ (Nabla f a))
  | Limit h => Limit (fun n => Nabla f (h n))
 end.

Definition deriv (f:ordinal->ordinal) : ordinal->ordinal :=
 Nabla (OpItw f).

Fixpoint veblen (b:ordinal) : ordinal->ordinal :=
 match b with
  | Zero => Nabla (OpLim (iter _ (cantor Zero)))
  | Succ a => Nabla (OpLim (iter _ (veblen a)))
  | Limit f => Nabla (OpLim (fun n => veblen (f n)))
 end.

Definition veb (a:ordinal) : ordinal := veblen a Zero.

Definition epsilon0 : ordinal := veb Zero. 

Definition Gamma0 : ordinal := Limit (fun n => iter _ veb n Zero).

Check epsilon0.
Check Gamma0.

Ordinal Gamma0 in Agda

module ordi where

 data nat : Set where 
  O : nat
  S : nat -> nat

 data ordinal : Set where
  Zero : ordinal
  Succ : ordinal -> ordinal
  Limit : (nat -> ordinal) -> ordinal

 iter : (a : Set) (f : a -> a) (n : nat) (x : a) -> a
 iter a f O x = x
 iter a f (S p) x = iter a f p (f x)

 OpLim : (nat -> ordinal -> ordinal) -> ordinal -> ordinal
 OpLim F a = Limit (\n -> F n a) 

 OpItw : (ordinal -> ordinal) -> ordinal -> ordinal
 OpItw f = OpLim (iter _ f)

 cantor : ordinal -> ordinal -> ordinal 
 cantor a Zero = Succ a
 cantor a (Succ b) = OpItw (\x -> cantor x b) a 
 cantor a (Limit f) = Limit (\n -> cantor a (f n)) 

 Nabla : (ordinal -> ordinal) -> ordinal -> ordinal
 Nabla f Zero = f Zero
 Nabla f (Succ a) = f (Succ (Nabla f a)) 
 Nabla f (Limit h) = Limit (\n -> Nabla f (h n)) 

 deriv : (ordinal -> ordinal) -> ordinal -> ordinal 
 deriv f = Nabla (OpItw f) 

 veblen : ordinal -> ordinal -> ordinal 
 veblen Zero = Nabla (OpLim (iter _ (cantor Zero)))
 veblen (Succ a) = Nabla (OpLim (iter _ (veblen a))) 
 veblen (Limit f) = Nabla (OpLim (\n -> veblen (f n))) 

 veb : ordinal -> ordinal
 veb a = veblen a Zero

 epsilon0 : ordinal
 epsilon0 = veb Zero

 Gamma0 : ordinal
 Gamma0 = Limit (\n -> iter _ veb n Zero) 

Large Veblen ordinal in Agda

{- 
   A definition of the large Veblen ordinal in Agda
   by Jacques Bailhache, March 2016

   See https://en.wikipedia.org/wiki/Veblen_function

    (1) phi(a)=w**a for a single variable,

    (2) phi(0,an-1,...,a0)=phi(an-1,...,a0), and

    (3) for a>0, c->phi(an,...,ai+1,a,0,...,0,c) is the function enumerating the common fixed points of the functions 
        x->phi(an,...,ai+1,b,x,0,...,0) for all b<a.

    (4) Let a be a transfinite sequence of ordinals (i.e., an ordinal function with finite support) which ends in zero 
        (i.e., such that a0=0), and let a[0->c] denote the same function where the final 0 has been replaced by c. 
        Then c->phi(a[0->c]) is defined as the function enumerating the common fixed points of all functions x->phi(b)      
        where b ranges over all sequences which are obtained by decreasing the smallest-indexed nonzero value of a 
        and replacing some smaller-indexed value with the indeterminate x (i.e., b=a[i0->z,i->x] meaning that 
        for the smallest index i0 such that ai0 is nonzero the latter has been replaced by some value z<ai0 
        and that for some smaller index i<i0, the value ai=0 has been replaced with x).

-}


module LargeVeblen where

 data Nat : Set where
  O : Nat
  1+ : Nat -> Nat

 data Ord : Set where
  Zero : Ord
  Suc : Ord -> Ord
  Lim : (Nat -> Ord) -> Ord

 -- rpt n f x = f^n(x)
 rpt : {t : Set} -> Nat -> (t -> t) -> t -> t
 rpt O f x = x
 rpt (1+ n) f x = rpt n f (f x)

 -- smallest fixed point of f greater than x, limit of x, f x, f (f x), ...
 fix : (Ord -> Ord) -> Ord -> Ord
 fix f x = Lim (\n -> rpt n f x)

 w = fix Suc Zero -- not a fixed point in this case !

 -- cantor a b = b + w^a
 cantor : Ord -> Ord -> Ord
 cantor Zero a = Suc a
 cantor (Suc b) a = fix (cantor b) a
 cantor (Lim f) a = Lim (\n -> cantor (f n) a)

 -- phi0 a = w^a
 phi0 : Ord -> Ord
 phi0 a = cantor a Zero

 -- Another possibility is to use phi'0 instead of phi0 in the definition of phi,
 -- this gives a phi function which grows slower
 phi'0 : Ord -> Ord
 phi'0 Zero = Suc Zero
 phi'0 (Suc a) = Suc (phi'0 a)
 phi'0 (Lim f) = Lim (\n -> phi'0 (f n))

 -- Associative list of ordinals
 infixr 40 _=>_&_
 data OrdAList : Set where
  Zeros : OrdAList
  _=>_&_ : Ord -> Ord -> OrdAList -> OrdAList

 -- Usage : phi al, where al is the associative list of couples index => value ordered by increasing values,
 -- absent indexes corresponding to Zero values

 phi : OrdAList -> Ord 
 phi              Zeros  = phi0 Zero -- (1) phi(0) = w**0 = 1 
 phi (Zero => a & Zeros) = phi0 a    -- (1) phi(a) = w**a
 phi (            k => Zero & al) = phi al -- eliminate unnecessary Zero value
 phi (Zero => a & k => Zero & al) = phi (Zero => a & al) -- idem
 phi (Zero => a & Zero => b & al) = phi (Zero => a & al) -- should not appear but necessary for completeness
 phi (Zero => Lim f & al) = Lim (\n -> phi (Zero => f n & al)) -- canonical treatment of limit
 phi (                Suc k => Suc b & al) = fix (\x -> phi (k => x & Suc k => b & al)) Zero -- (3) least fixed point
 phi (Zero => Suc a & Suc k => Suc b & al) = fix (\x -> phi (k => x & Suc k => b & al)) (Suc (phi (Zero => a & Suc k => Suc b & al))) -- (3) following fixed points
 phi (                Suc k => Lim f & al) = Lim (\n -> phi (Suc k => f n & al)) -- idem 
 phi (Zero => Suc a & Suc k => Lim f & al) = Lim (\n -> phi (k => Suc (phi (Zero => a & Suc k => Lim f & al)) & Suc k => f n & al)) -- idem  
 phi (                Lim f => Suc b & al) = Lim (\n -> phi (f n => (Suc Zero) & Lim f => b & al)) 
 phi (Zero => Suc a & Lim f => Suc b & al) = Lim (\n -> phi (f n => phi (Zero => a & Lim f => Suc b & al) & Lim f => b & al))
 phi (                Lim f => Lim g & al) = Lim (\n -> phi (Lim f => g n & al))
 phi (Zero => Suc a & Lim f => Lim g & al) = Lim (\n -> phi (f n => phi (Zero => a & Lim f => Lim g & al) & Lim f => g n & al)) 

 SmallVeblen = phi (w => Suc Zero & Zeros)

 LargeVeblen = fix (\x -> phi (x => Suc Zero & Zeros)) (Suc Zero)

{-
Normally it should terminate because the parameter of phi lexicographically decreases, but Agda is not clever enough to see it, 
so it must be called with no termination check option :

$ agda -I --no-termination-check LargeVeblen.agda
                 _ 
   ____         | |
  / __ \        | |
 | |__| |___  __| | ___
 |  __  / _ \/ _  |/ __\     Agda Interactive
 | |  |/ /_\ \/_| / /_| \
 |_|  |\___  /____\_____/    Type :? for help.
        __/ /
        \__/

The interactive mode is no longer supported. Don't complain if it doesn't work.
Checking LargeVeblen (/perso/ord/LargeVeblen.agda).
Finished LargeVeblen.
Main> phi Zeros
Suc Zero
Main> phi (Zero => Suc Zero & Zeros)
Lim (λ n → rpt n (λ a → Suc a) Zero)
Main> phi (Zero => Suc (Suc Zero) & Zeros)
Lim
(λ n → rpt n (λ a → Lim (λ n₁ → rpt n₁ (λ a₁ → Suc a₁) a)) Zero)
Main> phi (Suc Zero => Suc Zero & Zeros)
Lim
(λ n →
   rpt n (λ x → phi (Zero => x & Suc Zero => Zero & Zeros)) Zero)
Main> 
-}


Simmons hierarchy in Haskell

module Simmons where

 -- Natural numbers
 data Nat 
  = ZeroN
  | SucN Nat

 -- Ordinals
 data Ord 
  = Zero
  | Suc Ord
  | Lim (Nat -> Ord)

 -- Ordinal corresponding to a given natural
 ordOfNat ZeroN = Zero
 ordOfNat (SucN n) = Suc (ordOfNat n)

 -- omega
 w = Lim ordOfNat

 lim0 s = Lim s
 lim1 f x = lim0 (\n -> f n x)
 lim2 f x = lim1 (\n -> f n x)

 -- this does not work :
 -- lim ZeroN s = Lim s
 -- lim (SucN p) f = \x -> lim p (\n -> f n x)

 -- f^a(x)
 fpower0 f Zero x = x
 fpower0 f (Suc a) x = f (fpower0 f a x)
 fpower0 f (Lim s) x = Lim (\n -> fpower0 f (s n) x)

 fpower l f Zero x = x
 fpower l f (Suc a) x = f (fpower l f a x)
 fpower l f (Lim s) x = l (\n -> fpower l f (s n) x)

 -- fix f z = least fixed point of f which is > z
 fix f z = fpower lim0 f w (Suc z) -- Lim (\n -> fpower0 f (ordOfNat n) (Suc z))

 -- cantor b a = a + w^b
 cantor Zero a = Suc a
 cantor (Suc b) a = fix (cantor b) a
 cantor (Lim s) a = Lim (\n -> cantor (s n) a)
 
 -- expw a = w^a
 expw a = cantor a Zero

 -- next a = least epsilon_b > a
 next = fix expw

 -- [0]
 simmons0 h = fix (\a -> fpower lim0 h a Zero)

 -- [1]
 simmons1 h1 h0 = fix (\a -> fpower lim1 h1 a h0 Zero)

 -- [2]
 simmons2 h2 h1 h0 = fix (\a -> fpower lim2 h2 a h1 h0 Zero)

 -- Large Veblen ordinal 
 lvo = simmons2 simmons1 simmons0 next w



$ hugs
__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-2005
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Bugs: http://hackage.haskell.org/trac/hugs
||   || Version: September 2006 _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Type :? for help
Hugs> :load simmons
Simmons> lvo
ERROR - Cannot find "show" function for:
*** Expression : lvo
*** Of type    : Ord

Simmons>

Simmons hierarchy in Symbolic Lambda Calculus


LET I ^x x
LET Y [[* *] ['* (* *)]]

LET zeron ^z ^s z
LET sucn ^n ^z ^s (s n)

LET zero ^z ^s ^l z
LET suc ^a ^z ^s ^l (s a)
LET lim ^f ^z ^s ^l (l f)

LET insert ^x ^t ^f (t (f x))
LET tuple (Y ^r ^n ^f : n (f I) : ^p ^x : r p : ^t : f : insert x t)

LET ordOfNat (Y ^r ^n : n zero : ^p : suc : r p)

LET w (lim ordOfNat)

LET lim0 lim
LET lim1 ^f ^x (lim0 : ^n : f n x)
LET lim2 ^f ^x (lim1 : ^n : f n x)

LET limn (Y ^r ^p : p lim : ^q ^f ^x : r q : ^n : f n x)

LET fpower (Y ^r ^l ^f ^a ^x : a x (^b : f : r l f b x) (^s : lim : ^n : r l f (s n) x))

LET fix ^f ^z (fpower lim0 f w : suc z)

LET cantor (Y ^r ^b ^a : b (suc a) (^p : fix (r p) a) (^s : lim : ^n : r (s n) a))

LET expw ^a (cantor a zero)

LET next (fix expw)

LET simmons0 ^h (fix ^a : fpower lim0 h a zero)
LET simmons1 ^h1 ^h0 (fix ^a : fpower lim1 h1 a h0 zero)
LET simmons2 ^h2 ^h1 ^h0 (fix ^a : fpower lim2 h2 a h1 h0 zero)

LET simmonsn ^n ^h (tuple n : ^t : fix ^a : t (fpower (limn n) a) zero)

LET lvo (simmons2 simmons1 simmons0 next w)

LET tupleSimmons (Y ^r ^n : n I ^p : insert (simmonsn p) : r p)

LET delta ^n (tupleSimmons n I next w)

LET howard (lim delta)

howard

Symbolic Lambda Calculus in Haskell

Construction inspired by Madore's psi ordinal collapsing function, in Haskell
module Collapsing where

 -- Natural numbers
 data Nat 
  = ZeroN
  | SucN Nat

 -- Ordinals
 data Ord 
  = Zero
  | Suc Ord
  | Lim (Nat -> Ord)
  | Ext (Ord -> Ord)

 -- Ordinal corresponding to a given natural
 ordOfNat ZeroN = Zero
 ordOfNat (SucN n) = Suc (ordOfNat n)

 -- omega
 w = Lim ordOfNat

 -- plus a b = b + a
 plus Zero b = b
 plus (Suc a) b = Suc (plus a b)
 plus (Lim s) b = Lim (\n -> plus (s n) b)
 plus (Ext f) b = Ext (\x -> plus (f x) b)

 lim0 s = Lim s

 iter f ZeroN a = a
 iter f (SucN p) a = iter f p (f a)

 opLim f a = Lim (\n -> f n a)

 opItw f = opLim (iter f)

 -- cantor a b = a + w^b
 cantor a Zero = Suc a
 cantor a (Suc b) = opItw (\x -> cantor x b) a
 cantor a (Lim s) = Lim (\n -> cantor a (s n))
 cantor a (Ext f) = Ext (\x -> cantor a (f x))
 
  -- expw a = w^a
 expw = cantor Zero 

 nabla f Zero = f Zero
 nabla f (Suc a) = f (Suc (nabla f a))
 nabla f (Lim s) = Lim (\n -> nabla f (s n))
 nabla f (Ext g) = Ext (\x -> nabla f (g x))

 deriv f = nabla (opItw f)

 veblen Zero = nabla (opLim (iter (cantor Zero)))
 veblen (Suc a) = nabla (opLim (iter (veblen a)))
 veblen (Lim s) = nabla (opLim (\n -> veblen (s n)))
 veblen (Ext f) = \a -> Ext (\x -> veblen (f x) a)

 epsilon = veblen Zero 

 fix f z = opItw f (Suc z)

 next = fix expw

 -- Omega
 o = Ext (\x -> x)

 -- Omega*2
 o2 = Ext (\x -> plus x o)

 psi Zero = epsilon Zero
 psi (Suc a) = next (psi a)
 psi (Lim s) = Lim (\n -> psi (s n))
 psi (Ext f) = psi (opItw (\a -> f (psi a)) Zero)




Construction inspired by Taranovsky's C ordinal collapsing function, in Haskell
module Taranovsky where

 -- Natural numbers
 data Nat 
  = ZeroN
  | SucN Nat

 -- Ordinals
 data Ord 
  = Zero
  | Suc Ord
  | Lim (Nat -> Ord)
  | Ext (Ord -> Ord)

 -- Ordinal corresponding to a given natural
 ordOfNat ZeroN = Zero
 ordOfNat (SucN n) = Suc (ordOfNat n)

 -- omega
 w = Lim ordOfNat

 -- plus a b = b + a
 plus Zero b = b
 plus (Suc a) b = Suc (plus a b)
 plus (Lim s) b = Lim (\n -> plus (s n) b)
 plus (Ext f) b = Ext (\x -> plus (f x) b)

 lim0 s = Lim s

 iter f ZeroN a = a
 iter f (SucN p) a = iter f p (f a)

 opLim f a = Lim (\n -> f n a)

 opItw f = opLim (iter f)

 -- Taranovsky's C(b,a) = generalization of a + w^b
 tc Zero a = Suc a
 tc (Suc b) a = opItw (tc b) a
 tc (Lim s) a = Lim (\n -> tc (s n) a)
 -- tc (Ext f) a = Ext (\x -> tc (f x) a)
 tc (Ext f) a = opItw (\x -> tc (f x) a) Zero 
 -- tc (Ext f) a = tc (opItw (\x -> f (tc x a)) Zero) a

 epsilon_0 = tc (Ext (\x -> x)) Zero

 bho = tc (tc (Ext (\x -> x)) (Ext (\x -> x))) Zero

Example :
C(W,0) = tc (Ext I) Zero = opItw (\x -> tc x Zero) Zero = H [C(*,0)] 0
= lim 0, C(0,0)=0+w^0=1, C(1,0)=0+w^1=w, C(w,0)=0+w^w=w^w, ...
= epsilon_0


Links

A tutorial overview of ordinal notations
Tutorial introduction to ordinal numbers in French by David Madore
Petit guide bordélique de quelques ordinaux intéressants by David Madore
Pointless Gigantic List of Infinite Numbers
Sbiis Saibian's !!! FORBIDDEN LIST !!! of Infinite Numbers
Professor Quibb's Infinity Series Portal
Ordinal notation
Traveling to the infinity
A short introduction to Ordinal Notations by Harold Simmons
A survey on ordinal notations around the Bachmann-Howard ordinal by Wilfried Buchholz
Ordinal Notation by Dmytro Taranovsky
Higher Order Set Theory with Reflective Cardinals by Dmytro Taranovsky
The Realm of Ordinal Analysis by Michael Rathjen
Connecting the Two Worlds: Well-partial-orders and Ordinal Notation Systems by Jeroen Van der Meeren
Veblen function on Wikipedia
Continuous increasing functions of finite and transfinite ordinals by Oswald Veblen
Ordinal collapsing function on Wikipedia
Buchholz psi functions on Wikipedia
Ordinal trees
Large Countable Ordinals by John Baez Part 1 Part 2 Part 3
Mind blown: the fast growing hierarchy for laymen — aka enormous numbers
Sbiis Saibian's Large Number Site
Extremely Large Numbers (videos)
My number is bigger !
Metatheory and Reflection in Theorem Proving: A Survey and Critique by John Harrison
Penrose's Gödelian argument by Solomon Feferman
Systems of logic based on ordinals by Alan Turing
Coq documentation
Agda documentation