Skip to content

Commit 0fe8cd6

Browse files
committed
chore: golf Ordinal.isPrincipal_add_iff_zero_or_omega0_opow (#36798)
1 parent 34dd2c6 commit 0fe8cd6

1 file changed

Lines changed: 15 additions & 20 deletions

File tree

Mathlib/SetTheory/Ordinal/Principal.lean

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,14 @@ theorem isPrincipal_add_iff_add_self_lt : IsPrincipal (· + ·) a ↔ ∀ b < a,
184184
isPrincipal_iff_of_monotone
185185
(fun x _ _ h ↦ add_le_add_right h x) (fun x _ _ h ↦ add_le_add_left h x)
186186

187+
theorem IsPrincipal.mul_natCast_lt (ho : IsPrincipal (· + ·) o) (ha : a < o) (n : ℕ) :
188+
a * n < o := by
189+
induction n with
190+
| zero => simpa using ha.pos
191+
| succ n h =>
192+
rw [Nat.cast_add_one, mul_add_one]
193+
exact ho h ha
194+
187195
theorem isPrincipal_add_one : IsPrincipal (· + ·) 1 := by simp
188196

189197
@[deprecated (since := "2026-03-17")]
@@ -282,26 +290,13 @@ alias add_absorp := add_of_omega0_opow_le
282290
/-- The main characterization theorem for additive principal ordinals. -/
283291
theorem isPrincipal_add_iff_zero_or_omega0_opow :
284292
IsPrincipal (· + ·) o ↔ o = 0 ∨ o ∈ Set.range (ω ^ · : Ordinal → Ordinal) := by
285-
rcases eq_or_ne o 0 with (rfl | ho)
286-
· simp only [isPrincipal_zero, Or.inl]
287-
· rw [isPrincipal_add_iff_add_left_eq_self]
288-
simp only [ho, false_or]
289-
refine
290-
fun H => ⟨_, ((lt_or_eq_of_le (opow_log_le_self _ ho)).resolve_left fun h => ?_)⟩,
291-
fun ⟨b, e⟩ => e.symm ▸ fun a => add_omega0_opow⟩
292-
have := H _ h
293-
have := lt_opow_succ_log_self one_lt_omega0 o
294-
rw [opow_succ, lt_mul_iff_of_isSuccLimit isSuccLimit_omega0] at this
295-
rcases this with ⟨a, ao, h'⟩
296-
rcases lt_omega0.1 ao with ⟨n, rfl⟩
297-
clear ao
298-
revert h'
299-
apply not_lt_of_ge
300-
suffices e : ω ^ log ω o * n + o = o by
301-
simpa only [e] using le_self_add (a := ω ^ log ω o * ↑n) (b := o)
302-
induction n with
303-
| zero => simp [Nat.cast_zero, mul_zero, zero_add]
304-
| succ n IH => simp only [Nat.cast_succ, mul_add_one, add_assoc, this, IH]
293+
constructor
294+
· rw [or_iff_not_imp_left]
295+
refine fun H ho ↦ ⟨log ω o, (opow_log_le_self ω ho).eq_of_not_lt ?_⟩
296+
obtain ⟨n, hn⟩ := lt_omega0_opow_succ.1 (lt_opow_succ_log_self one_lt_omega0 o)
297+
exact fun h ↦ hn.not_gt <| H.mul_natCast_lt h n
298+
· rintro (rfl | ⟨a, rfl⟩)
299+
exacts [isPrincipal_zero, isPrincipal_add_omega0_opow a]
305300

306301
@[deprecated (since := "2026-03-17")]
307302
alias principal_add_iff_zero_or_omega0_opow := isPrincipal_add_iff_zero_or_omega0_opow

0 commit comments

Comments
 (0)