@@ -10,12 +10,7 @@ public import Mathlib.SetTheory.Ordinal.Arithmetic
1010/-!
1111# Arithmetic on families of ordinals
1212
13- ## Main definitions and results
14-
15- * `sup`, `lsub`: the supremum / least strict upper bound of an indexed family of ordinals in
16- `Type u`, as an ordinal in `Type u`.
17- * `bsup`, `blsub`: the supremum / least strict upper bound of a set of ordinals indexed by ordinals
18- less than a given ordinal `o`.
13+ This file proves basic results about the suprema of families of ordinals.
1914
2015Various other basic arithmetic results are given in `Principal.lean` instead.
2116-/
@@ -499,42 +494,58 @@ theorem iSup_Iio_eq_bsup {o} {f : ∀ a < o, Ordinal} : ⨆ a : Iio o, f a.1 a.2
499494
500495end bsup
501496
502- -- TODO: bring the lsub API in line with the sSup / iSup API, or deprecate it altogether.
503-
504497section lsub
505498
506499/-- The least strict upper bound of a family of ordinals. -/
500+ @ [deprecated "write `⨆ i, f i + 1` instead." (since := "2026-03-27" )]
507501def lsub {ι : Type u} (f : ι → Ordinal.{max u v}) : Ordinal :=
508502 iSup (succ ∘ f)
509503
510- @[simp]
504+ set_option linter.deprecated false in
505+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
511506theorem iSup_eq_lsub {ι} (f : ι → Ordinal) : iSup (succ ∘ f) = lsub f :=
512507 rfl
513508
509+ set_option linter.deprecated false in
510+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
514511theorem lsub_le_iff {ι} {f : ι → Ordinal} {a} : lsub f ≤ a ↔ ∀ i, f i < a :=
515512 Ordinal.iSup_add_one_le_iff
516513
514+ set_option linter.deprecated false in
515+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
517516theorem lsub_le {ι} {f : ι → Ordinal} {a} : (∀ i, f i < a) → lsub f ≤ a :=
518517 lsub_le_iff.2
519518
519+ set_option linter.deprecated false in
520+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
520521theorem lt_lsub {ι} (f : ι → Ordinal) (i) : f i < lsub f :=
521522 Ordinal.lt_iSup_add_one f i
522523
524+ set_option linter.deprecated false in
525+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
523526theorem lt_lsub_iff {ι} {f : ι → Ordinal} {a} : a < lsub f ↔ ∃ i, a ≤ f i := by
524527 simpa only [not_forall, not_lt, not_le] using not_congr lsub_le_iff
525528
529+ set_option linter.deprecated false in
530+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
526531theorem iSup_le_lsub {ι} (f : ι → Ordinal) : iSup f ≤ lsub f :=
527532 Ordinal.iSup_le fun i => (lt_lsub f i).le
528533
534+ set_option linter.deprecated false in
535+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
529536theorem lsub_le_succ_iSup {ι} (f : ι → Ordinal) : lsub f ≤ succ (iSup f) :=
530537 lsub_le fun i => lt_succ_iff.2 (Ordinal.le_iSup f i)
531538
539+ set_option linter.deprecated false in
540+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
532541theorem iSup_eq_lsub_or_succ_iSup_eq_lsub {ι} (f : ι → Ordinal) :
533542 iSup f = lsub f ∨ succ (iSup f) = lsub f := by
534543 rcases eq_or_lt_of_le (iSup_le_lsub f) with h | h
535544 · exact Or.inl h
536545 · exact Or.inr ((succ_le_of_lt h).antisymm (lsub_le_succ_iSup f))
537546
547+ set_option linter.deprecated false in
548+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
538549theorem succ_iSup_le_lsub_iff {ι} (f : ι → Ordinal) :
539550 succ (iSup f) ≤ lsub f ↔ ∃ i, f i = iSup f := by
540551 refine ⟨fun h => ?_, ?_⟩
@@ -545,10 +556,14 @@ theorem succ_iSup_le_lsub_iff {ι} (f : ι → Ordinal) :
545556 rw [succ_le_iff, ← hf]
546557 exact lt_lsub _ _
547558
559+ set_option linter.deprecated false in
560+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
548561theorem succ_iSup_eq_lsub_iff {ι} (f : ι → Ordinal) :
549562 succ (iSup f) = lsub f ↔ ∃ i, f i = iSup f :=
550563 (lsub_le_succ_iSup f).ge_iff_eq'.symm.trans (succ_iSup_le_lsub_iff f)
551564
565+ set_option linter.deprecated false in
566+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
552567theorem iSup_eq_lsub_iff {ι} (f : ι → Ordinal) :
553568 iSup f = lsub f ↔ ∀ a < lsub f, succ a < lsub f := by
554569 refine ⟨fun h => ?_, fun hf => le_antisymm (iSup_le_lsub f) (lsub_le fun i => ?_)⟩
@@ -564,72 +579,92 @@ theorem iSup_eq_lsub_iff {ι} (f : ι → Ordinal) :
564579 rw [heq] at this
565580 exact this.false
566581
582+ set_option linter.deprecated false in
583+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
567584theorem iSup_eq_lsub_iff_lt_iSup {ι} (f : ι → Ordinal) :
568585 iSup f = lsub f ↔ ∀ i, f i < iSup f :=
569586 ⟨fun h i => by
570587 rw [h]
571588 apply lt_lsub, fun h => le_antisymm (iSup_le_lsub f) (lsub_le h)⟩
572589
573- @[simp]
590+ set_option linter.deprecated false in
591+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
574592theorem lsub_empty {ι} [h : IsEmpty ι] (f : ι → Ordinal) : lsub f = 0 := by
575593 rw [← nonpos_iff_eq_zero, lsub_le_iff]
576594 exact h.elim
577595
596+ set_option linter.deprecated false in
597+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
578598theorem lsub_pos {ι} [h : Nonempty ι] (f : ι → Ordinal) : 0 < lsub f :=
579599 h.elim fun i => (zero_le _).trans_lt (lt_lsub f i)
580600
581- @[simp]
601+ set_option linter.deprecated false in
602+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
582603theorem lsub_eq_zero_iff {ι} (f : ι → Ordinal) :
583604 lsub.{_, v} f = 0 ↔ IsEmpty ι := by
584605 refine ⟨fun h => ⟨fun i => ?_⟩, fun h => @lsub_empty _ h _⟩
585606 have := @lsub_pos.{_, v} _ ⟨i⟩ f
586607 rw [h] at this
587608 exact this.false
588609
589- @[simp]
610+ set_option linter.deprecated false in
611+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
590612theorem lsub_const {ι} [Nonempty ι] (o : Ordinal) : (lsub fun _ : ι => o) = succ o :=
591613 ciSup_const
592614
593- @[simp]
615+ set_option linter.deprecated false in
616+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
594617theorem lsub_unique {ι} [Unique ι] (f : ι → Ordinal) : lsub f = succ (f default) :=
595618 ciSup_unique
596619
620+ set_option linter.deprecated false in
621+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
597622theorem lsub_le_of_range_subset {ι ι'} {f : ι → Ordinal} {g : ι' → Ordinal}
598623 (h : Set.range f ⊆ Set.range g) : lsub.{u, max v w} f ≤ lsub.{v, max u w} g :=
599624 csSup_le_csSup' (bddAbove_range.{v, max u w} _)
600625 (by convert Set.image_mono h <;> apply Set.range_comp)
601626
627+ set_option linter.deprecated false in
628+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
602629theorem lsub_eq_of_range_eq {ι ι'} {f : ι → Ordinal} {g : ι' → Ordinal}
603630 (h : Set.range f = Set.range g) : lsub.{u, max v w} f = lsub.{v, max u w} g :=
604631 (lsub_le_of_range_subset.{u, v, w} h.le).antisymm (lsub_le_of_range_subset.{v, u, w} h.ge)
605632
606- @[simp]
633+ set_option linter.deprecated false in
634+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
607635theorem lsub_sum {α : Type u} {β : Type v} (f : α ⊕ β → Ordinal) :
608636 lsub.{max u v, w} f =
609637 max (lsub.{u, max v w} fun a => f (Sum.inl a)) (lsub.{v, max u w} fun b => f (Sum.inr b)) :=
610638 iSup_sum _
611639
640+ set_option linter.deprecated false in
641+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
612642theorem lsub_notMem_range {ι} (f : ι → Ordinal) :
613643 lsub f ∉ Set.range f := fun ⟨i, h⟩ =>
614644 h.not_lt (lt_lsub f i)
615645
646+ set_option linter.deprecated false in
647+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
616648theorem nonempty_compl_range {ι : Type u} (f : ι → Ordinal.{max u v}) : (Set.range f)ᶜ.Nonempty :=
617649 ⟨_, lsub_notMem_range f⟩
618650
619- @[simp]
651+ set_option linter.deprecated false in
652+ @ [deprecated "lsub is deprecated" (since := "2026-03-27" )]
620653theorem lsub_typein (o : Ordinal) : lsub.{u, u} (typein (α := o.ToType) (· < ·)) = o :=
621654 (lsub_le.{u, u} typein_lt_self).antisymm
622655 (by
623656 by_contra! h
624657 have h := h.trans_eq (type_toType o).symm
625658 simpa [typein_enum] using lt_lsub.{u, u} (typein (· < ·)) (enum (· < ·) ⟨_, h⟩))
626659
660+ set_option linter.deprecated false in
661+ @ [deprecated IsSuccPrelimit.sSup_Iio (since := "2026-03-27" )]
627662theorem iSup_typein_limit {o : Ordinal.{u}} (ho : ∀ a, a < o → succ a < o) :
628663 iSup (typein ((· < ·) : o.ToType → o.ToType → Prop )) = o := by
629664 rw [(iSup_eq_lsub_iff.{u, u} (typein (· < ·))).2 ] <;> rw [lsub_typein o]
630665 assumption
631666
632- @[simp ]
667+ @ [deprecated csSup_Iic (since := "2026-03-27" ) ]
633668theorem iSup_typein_succ {o : Ordinal} :
634669 iSup (typein ((· < ·) : (succ o).ToType → (succ o).ToType → Prop )) = o := by
635670 rw [← csSup_Iic (a := o), iSup, PrincipalSeg.range_eq]
@@ -840,13 +875,18 @@ set_option linter.deprecated false in
840875theorem blsub_id : ∀ o, (blsub.{u, u} o fun x _ => x) = o :=
841876 lsub_typein
842877
878+ set_option linter.deprecated false in
879+ @ [deprecated IsSuccPrelimit.sSup_Iio (since := "2026-03-23" )]
843880theorem bsup_id_limit {o : Ordinal} : (∀ a < o, succ a < o) → (bsup.{u, u} o fun x _ => x) = o :=
844881 iSup_typein_limit
845882
846- @[simp]
883+ set_option linter.deprecated false in
884+ @ [deprecated csSup_Iic (since := "2026-03-23" )]
847885theorem bsup_id_add_one (o) : (bsup.{u, u} (o + 1 ) fun x _ => x) = o :=
848886 iSup_typein_succ
849887
888+ set_option linter.deprecated false in
889+ @ [deprecated csSup_Iic (since := "2026-03-23" )]
850890theorem bsup_id_succ (o) : (bsup.{u, u} (succ o) fun x _ => x) = o :=
851891 iSup_typein_succ
852892
@@ -887,6 +927,7 @@ theorem blsub_comp {o o' : Ordinal.{max u v}} {f : ∀ a < o, Ordinal.{max u v w
887927 @bsup_comp.{u, v, w} o _ (fun a ha => succ (f a ha))
888928 (fun {_ _} _ _ h => succ_le_succ_iff.2 (hf _ _ h)) g hg
889929
930+ set_option linter.deprecated false in
890931@ [deprecated IsNormal.apply_of_isSuccLimit (since := "2026-03-23" )]
891932theorem IsNormal.bsup_eq {f : Ordinal.{u} → Ordinal.{max u v}} (H : IsNormal f) {o : Ordinal.{u}}
892933 (h : IsSuccLimit o) : (Ordinal.bsup.{_, v} o fun x _ => f x) = f o := by
0 commit comments