Principal ordinals #
We define principal or indecomposable ordinals, and we prove the standard properties about them.
Main definitions and results #
Principal
: A principal or indecomposable ordinal under some binary operation. We include 0 and any other typically excluded edge cases for simplicity.not_bddAbove_principal
: Principal ordinals (under any operation) are unbounded.principal_add_iff_zero_or_omega0_opow
: The main characterization theorem for additive principal ordinals.principal_mul_iff_le_two_or_omega0_opow_opow
: The main characterization theorem for multiplicative principal ordinals.
TODO #
- Prove that exponential principal ordinals are 0, 1, 2, ω, or epsilon numbers, i.e. fixed points
of
fun x ↦ ω ^ x
.
Principal ordinals #
An ordinal o
is said to be principal or indecomposable under an operation when the set of
ordinals less than it is closed under that operation. In standard mathematical usage, this term is
almost exclusively used for additive and multiplicative principal ordinals.
For simplicity, we break usual convention and regard 0
as principal.
Equations
- Ordinal.Principal op o = ∀ ⦃a b : Ordinal.{?u.8}⦄, a < o → b < o → op a b < o
Instances For
theorem
Ordinal.principal_swap_iff
{o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
:
theorem
Ordinal.not_principal_iff
{o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
:
theorem
Ordinal.principal_iff_of_monotone
{o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
(h₁ : ∀ (a : Ordinal.{u}), Monotone (op a))
(h₂ : ∀ (a : Ordinal.{u}), Monotone (Function.swap op a))
:
theorem
Ordinal.not_principal_iff_of_monotone
{o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
(h₁ : ∀ (a : Ordinal.{u}), Monotone (op a))
(h₂ : ∀ (a : Ordinal.{u}), Monotone (Function.swap op a))
:
@[simp]
theorem
Ordinal.Principal.iterate_lt
{a o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
(hao : a < o)
(ho : Principal op o)
(n : ℕ)
:
theorem
Ordinal.op_eq_self_of_principal
{a o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
(hao : a < o)
(H : IsNormal (op a))
(ho : Principal op o)
(ho' : o.IsLimit)
:
theorem
Ordinal.nfp_le_of_principal
{a o : Ordinal.{u}}
{op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u}}
(hao : a < o)
(ho : Principal op o)
:
Principal ordinals are unbounded #
Principal ordinals under any operation are unbounded.
@[deprecated "No deprecation message was provided." (since := "2024-10-11")]
theorem
Ordinal.principal_nfp_blsub₂
(op : Ordinal.{u} → Ordinal.{u} → Ordinal.{u})
(o : Ordinal.{u})
:
Principal op
(nfp
(fun (o' : Ordinal.{u}) => o'.blsub₂ o' fun (a : Ordinal.{u}) (x : a < o') (b : Ordinal.{u}) (x : b < o') => op a b)
o)
@[deprecated "No deprecation message was provided." (since := "2024-10-11")]
theorem
Ordinal.unbounded_principal
(op : Ordinal.{u_1} → Ordinal.{u_1} → Ordinal.{u_1})
:
Set.Unbounded (fun (x1 x2 : Ordinal.{u_1}) => x1 < x2) {o : Ordinal.{u_1} | Principal op o}
Additive principal ordinals #
theorem
Ordinal.principal_add_of_le_one
{o : Ordinal.{u}}
(ho : o ≤ 1)
:
Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) o
theorem
Ordinal.isLimit_of_principal_add
{o : Ordinal.{u}}
(ho₁ : 1 < o)
(ho : Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) o)
:
o.IsLimit
@[deprecated Ordinal.isLimit_of_principal_add (since := "2024-10-16")]
theorem
Ordinal.principal_add_isLimit
{o : Ordinal.{u}}
(ho₁ : 1 < o)
(ho : Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) o)
:
o.IsLimit
Alias of Ordinal.isLimit_of_principal_add
.
theorem
Ordinal.exists_lt_add_of_not_principal_add
{a : Ordinal.{u}}
(ha : ¬Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) a)
:
theorem
Ordinal.principal_add_omega0_opow
(o : Ordinal.{u_1})
:
Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) (omega0 ^ o)
The main characterization theorem for additive principal ordinals.
theorem
Ordinal.principal_add_opow_of_principal_add
{a : Ordinal.{u_1}}
(ha : Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) a)
(b : Ordinal.{u_1})
:
Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) (a ^ b)
@[deprecated Ordinal.principal_add_opow_of_principal_add (since := "2024-10-16")]
theorem
Ordinal.opow_principal_add_of_principal_add
{a : Ordinal.{u_1}}
(ha : Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) a)
(b : Ordinal.{u_1})
:
Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) (a ^ b)
theorem
Ordinal.principal_add_mul_of_principal_add
(a : Ordinal.{u})
{b : Ordinal.{u}}
(hb₁ : b ≠ 1)
(hb : Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) b)
:
Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) (a * b)
@[deprecated Ordinal.principal_add_mul_of_principal_add (since := "2024-10-16")]
theorem
Ordinal.mul_principal_add_is_principal_add
(a : Ordinal.{u})
{b : Ordinal.{u}}
(hb₁ : b ≠ 1)
(hb : Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) b)
:
Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) (a * b)
Multiplicative principal ordinals #
theorem
Ordinal.principal_mul_of_le_two
{o : Ordinal.{u}}
(ho : o ≤ 2)
:
Principal (fun (x1 x2 : Ordinal.{u}) => x1 * x2) o
theorem
Ordinal.principal_add_of_principal_mul
{o : Ordinal.{u}}
(ho : Principal (fun (x1 x2 : Ordinal.{u}) => x1 * x2) o)
(ho₂ : o ≠ 2)
:
Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) o
theorem
Ordinal.isLimit_of_principal_mul
{o : Ordinal.{u}}
(ho₂ : 2 < o)
(ho : Principal (fun (x1 x2 : Ordinal.{u}) => x1 * x2) o)
:
o.IsLimit
@[deprecated Ordinal.isLimit_of_principal_mul (since := "2024-10-16")]
theorem
Ordinal.principal_mul_isLimit
{o : Ordinal.{u}}
(ho₂ : 2 < o)
(ho : Principal (fun (x1 x2 : Ordinal.{u}) => x1 * x2) o)
:
o.IsLimit
Alias of Ordinal.isLimit_of_principal_mul
.
theorem
Ordinal.principal_add_of_principal_mul_opow
{b o : Ordinal.{u}}
(hb : 1 < b)
(ho : Principal (fun (x1 x2 : Ordinal.{u}) => x1 * x2) (b ^ o))
:
Principal (fun (x1 x2 : Ordinal.{u}) => x1 + x2) o
The main characterization theorem for multiplicative principal ordinals.
theorem
Ordinal.mul_eq_opow_log_succ
{a b : Ordinal.{u}}
(ha : a ≠ 0)
(hb : Principal (fun (x1 x2 : Ordinal.{u}) => x1 * x2) b)
(hb₂ : 2 < b)
: