@@ -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+
187195theorem 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. -/
283291theorem 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" )]
307302alias principal_add_iff_zero_or_omega0_opow := isPrincipal_add_iff_zero_or_omega0_opow
0 commit comments