Skip to content

Commit fde83d9

Browse files
committed
feat(SetTheory/Ordinal/Principal): simpler characterization of Principal for monotone operations (#17742)
plus some drive-by spacing fixes. Subsequent PRs will use this to golf results on additive and multiplicative principal ordinals.
1 parent e0e004a commit fde83d9

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

Mathlib/SetTheory/Ordinal/Principal.lean

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Mathlib.SetTheory.Ordinal.FixedPoint
1111
We define principal or indecomposable ordinals, and we prove the standard properties about them.
1212
1313
## Main definitions and results
14+
1415
* `Principal`: A principal or indecomposable ordinal under some binary operation. We include 0 and
1516
any other typically excluded edge cases for simplicity.
1617
* `unbounded_principal`: Principal ordinals are unbounded.
@@ -20,6 +21,7 @@ We define principal or indecomposable ordinals, and we prove the standard proper
2021
multiplicative principal ordinals.
2122
2223
## TODO
24+
2325
* Prove that exponential principal ordinals are 0, 1, 2, ω, or epsilon numbers, i.e. fixed points
2426
of `fun x ↦ ω ^ x`.
2527
-/
@@ -56,6 +58,15 @@ theorem principal_iff_principal_swap {o : Ordinal} :
5658
theorem not_principal_iff {o : Ordinal} : ¬ Principal op o ↔ ∃ a < o, ∃ b < o, o ≤ op a b := by
5759
simp [Principal]
5860

61+
theorem principal_iff_of_monotone {o : Ordinal}
62+
(h₁ : ∀ a, Monotone (op a)) (h₂ : ∀ a, Monotone (Function.swap op a)):
63+
Principal op o ↔ ∀ a < o, op a a < o := by
64+
use fun h a ha => h ha ha
65+
intro H a b ha hb
66+
obtain hab | hba := le_or_lt a b
67+
· exact (h₂ b hab).trans_lt <| H b hb
68+
· exact (h₁ a hba.le).trans_lt <| H a ha
69+
5970
theorem principal_zero : Principal op 0 := fun a _ h =>
6071
(Ordinal.not_lt_zero a h).elim
6172

@@ -115,7 +126,6 @@ theorem unbounded_principal (op : Ordinal → Ordinal → Ordinal) :
115126

116127
/-! #### Additive principal ordinals -/
117128

118-
119129
theorem principal_add_one : Principal (· + ·) 1 :=
120130
principal_one_iff.2 <| zero_add 0
121131

@@ -265,7 +275,6 @@ theorem mul_principal_add_is_principal_add (a : Ordinal.{u}) {b : Ordinal.{u}} (
265275

266276
/-! #### Multiplicative principal ordinals -/
267277

268-
269278
theorem principal_mul_one : Principal (· * ·) 1 := by
270279
rw [principal_one_iff]
271280
exact zero_mul _
@@ -423,7 +432,6 @@ theorem mul_eq_opow_log_succ {a b : Ordinal.{u}} (ha : a ≠ 0) (hb : Principal
423432

424433
/-! #### Exponential principal ordinals -/
425434

426-
427435
theorem principal_opow_omega0 : Principal (· ^ ·) ω := fun a b ha hb =>
428436
match a, b, lt_omega0.1 ha, lt_omega0.1 hb with
429437
| _, _, ⟨m, rfl⟩, ⟨n, rfl⟩ => by

0 commit comments

Comments
 (0)