mathlib documentation

set_theory.ordinal.principal

Principal ordinals #

We define principal or indecomposable ordinals, and we prove the standard properties about them.

Main definitions and results #

Todo #

Principal ordinals #

def ordinal.principal (op : ordinalordinalordinal) (o : ordinal) :
Prop

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
@[simp]
theorem ordinal.principal_one_iff {op : ordinalordinalordinal} :
ordinal.principal op 1 op 0 0 = 0
theorem ordinal.principal.iterate_lt {op : ordinalordinalordinal} {a o : ordinal} (hao : a < o) (ho : ordinal.principal op o) (n : ) :
op a^[n] a < o
theorem ordinal.op_eq_self_of_principal {op : ordinalordinalordinal} {a o : ordinal} (hao : a < o) (H : ordinal.is_normal (op a)) (ho : ordinal.principal op o) (ho' : o.is_limit) :
op a o = o
theorem ordinal.nfp_le_of_principal {op : ordinalordinalordinal} {a o : ordinal} (hao : a < o) (ho : ordinal.principal op o) :
ordinal.nfp (op a) a o

Principal ordinals are unbounded #

noncomputable def ordinal.blsub₂ (op : ordinalordinalordinal) (o : ordinal) :

The least strict upper bound of op applied to all pairs of ordinals less than o. This is essentially a two-argument version of ordinal.blsub.

Equations
theorem ordinal.lt_blsub₂ (op : ordinalordinalordinal) {o a b : ordinal} (ha : a < o) (hb : b < o) :
op a b < ordinal.blsub₂ op o

Additive principal ordinals #

theorem ordinal.exists_lt_add_of_not_principal_add {a : ordinal} (ha : ¬ordinal.principal has_add.add a) :
∃ (b c : ordinal) (hb : b < a) (hc : c < a), b + c = a
theorem ordinal.principal_add_iff_add_lt_ne_self {a : ordinal} :
ordinal.principal has_add.add a ∀ ⦃b c : ordinal⦄, b < ac < ab + c a
theorem ordinal.add_omega {a : ordinal} (h : a < ω) :
a + ω = ω
theorem ordinal.add_omega_opow {a b : ordinal} (h : a < ω ^ b) :
a + ω ^ b = ω ^ b

The main characterization theorem for additive principal ordinals.

theorem ordinal.add_absorp {a b c : ordinal} (h₁ : a < ω ^ b) (h₂ : ω ^ b c) :
a + c = c

Multiplicative principal ordinals #

theorem ordinal.principal_mul_iff_mul_left_eq {o : ordinal} :
ordinal.principal has_mul.mul o ∀ (a : ordinal), 0 < aa < oa * o = o
theorem ordinal.mul_omega {a : ordinal} (a0 : 0 < a) (ha : a < ω) :
a * ω = ω
theorem ordinal.mul_lt_omega_opow {a b c : ordinal} (c0 : 0 < c) (ha : a < ω ^ c) (hb : b < ω) :
a * b < ω ^ c
theorem ordinal.mul_omega_opow_opow {a b : ordinal} (a0 : 0 < a) (h : a < ω ^ ω ^ b) :
a * ω ^ ω ^ b = ω ^ ω ^ b

The main characterization theorem for multiplicative principal ordinals.

theorem ordinal.mul_omega_dvd {a : ordinal} (a0 : 0 < a) (ha : a < ω) {b : ordinal} :
ω ba * b = b
theorem ordinal.mul_eq_opow_log_succ {a b : ordinal} (ha : 0 < a) (hb : ordinal.principal has_mul.mul b) (hb₂ : 2 < b) :
a * b = b ^ (b.log a).succ

Exponential principal ordinals #

theorem ordinal.principal_opow_omega  :
ordinal.principal (λ (_x _y : ordinal), _x ^ _y) ω
theorem ordinal.opow_omega {a : ordinal} (a1 : 1 < a) (h : a < ω) :
a ^ ω = ω