Skip to content

Commit

Permalink
feat(SetTheory/Ordinal/Principal): simpler characterization of `Princ…
Browse files Browse the repository at this point in the history
…ipal` for monotone operations (#17742)

plus some drive-by spacing fixes.

Subsequent PRs will use this to golf results on additive and multiplicative principal ordinals.
  • Loading branch information
vihdzp committed Oct 16, 2024
1 parent e0e004a commit fde83d9
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions Mathlib/SetTheory/Ordinal/Principal.lean
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import Mathlib.SetTheory.Ordinal.FixedPoint
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.
* `unbounded_principal`: Principal ordinals are unbounded.
Expand All @@ -20,6 +21,7 @@ We define principal or indecomposable ordinals, and we prove the standard proper
multiplicative principal ordinals.
## TODO
* Prove that exponential principal ordinals are 0, 1, 2, ω, or epsilon numbers, i.e. fixed points
of `fun x ↦ ω ^ x`.
-/
Expand Down Expand Up @@ -56,6 +58,15 @@ theorem principal_iff_principal_swap {o : Ordinal} :
theorem not_principal_iff {o : Ordinal} : ¬ Principal op o ↔ ∃ a < o, ∃ b < o, o ≤ op a b := by
simp [Principal]

theorem principal_iff_of_monotone {o : Ordinal}
(h₁ : ∀ a, Monotone (op a)) (h₂ : ∀ a, Monotone (Function.swap op a)):
Principal op o ↔ ∀ a < o, op a a < o := by
use fun h a ha => h ha ha
intro H a b ha hb
obtain hab | hba := le_or_lt a b
· exact (h₂ b hab).trans_lt <| H b hb
· exact (h₁ a hba.le).trans_lt <| H a ha

theorem principal_zero : Principal op 0 := fun a _ h =>
(Ordinal.not_lt_zero a h).elim

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

/-! #### Additive principal ordinals -/


theorem principal_add_one : Principal (· + ·) 1 :=
principal_one_iff.2 <| zero_add 0

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

/-! #### Multiplicative principal ordinals -/


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

/-! #### Exponential principal ordinals -/


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

0 comments on commit fde83d9

Please sign in to comment.