Documentation

Mathlib.SetTheory.Ordinal.Family

Arithmetic on families of ordinals #

Main definitions and results #

Various other basic arithmetic results are given in Principal.lean instead.

Families of ordinals #

There are two kinds of indexed families that naturally arise when dealing with ordinals: those indexed by some type in the appropriate universe, and those indexed by ordinals less than another. The following API allows one to convert from one kind of family to the other.

In many cases, this makes it easy to prove claims about one kind of family via the corresponding claim on the other.

def Ordinal.bfamilyOfFamily' {ฮฑ : Type u_1} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ ฮฑ) (a : Ordinal.{u}) :
a < type r โ†’ ฮฑ

Converts a family indexed by a Type u to one indexed by an Ordinal.{u} using a specified well-ordering.

Equations
    Instances For
      def Ordinal.bfamilyOfFamily {ฮฑ : Type u_1} {ฮน : Type u} :
      (ฮน โ†’ ฮฑ) โ†’ (a : Ordinal.{u}) โ†’ a < type WellOrderingRel โ†’ ฮฑ

      Converts a family indexed by a Type u to one indexed by an Ordinal.{u} using a well-ordering given by the axiom of choice.

      Equations
        Instances For
          def Ordinal.familyOfBFamily' {ฮฑ : Type u_1} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] {o : Ordinal.{u}} (ho : type r = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ ฮฑ) :
          ฮน โ†’ ฮฑ

          Converts a family indexed by an Ordinal.{u} to one indexed by a Type u using a specified well-ordering.

          Equations
            Instances For
              def Ordinal.familyOfBFamily {ฮฑ : Type u_1} (o : Ordinal.{u_4}) (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ) :
              o.ToType โ†’ ฮฑ

              Converts a family indexed by an Ordinal.{u} to one indexed by a Type u using a well-ordering given by the axiom of choice.

              Equations
                Instances For
                  @[simp]
                  theorem Ordinal.bfamilyOfFamily'_typein {ฮฑ : Type u_1} {ฮน : Type u_4} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ ฮฑ) (i : ฮน) :
                  bfamilyOfFamily' r f ((typein r).toRelEmbedding i) โ‹ฏ = f i
                  @[simp]
                  theorem Ordinal.bfamilyOfFamily_typein {ฮฑ : Type u_1} {ฮน : Type u_4} (f : ฮน โ†’ ฮฑ) (i : ฮน) :
                  theorem Ordinal.familyOfBFamily'_enum {ฮฑ : Type u_1} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] {o : Ordinal.{u}} (ho : type r = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ ฮฑ) (i : Ordinal.{u}) (hi : i < o) :
                  familyOfBFamily' r ho f ((enum r) โŸจi, โ‹ฏโŸฉ) = f i hi
                  theorem Ordinal.familyOfBFamily_enum {ฮฑ : Type u_1} (o : Ordinal.{u_4}) (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ) (i : Ordinal.{u_4}) (hi : i < o) :
                  o.familyOfBFamily f ((enum fun (x1 x2 : o.ToType) => x1 < x2) โŸจi, โ‹ฏโŸฉ) = f i hi
                  def Ordinal.brange {ฮฑ : Type u_1} (o : Ordinal.{u_4}) (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ) :
                  Set ฮฑ

                  The range of a family indexed by ordinals.

                  Equations
                    Instances For
                      theorem Ordinal.mem_brange {ฮฑ : Type u_1} {o : Ordinal.{u_4}} {f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ} {a : ฮฑ} :
                      a โˆˆ o.brange f โ†” โˆƒ (i : Ordinal.{u_4}) (hi : i < o), f i hi = a
                      theorem Ordinal.mem_brange_self {ฮฑ : Type u_1} {o : Ordinal.{u_4}} (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ) (i : Ordinal.{u_4}) (hi : i < o) :
                      f i hi โˆˆ o.brange f
                      @[simp]
                      theorem Ordinal.range_familyOfBFamily' {ฮฑ : Type u_1} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] {o : Ordinal.{u}} (ho : type r = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ ฮฑ) :
                      @[simp]
                      theorem Ordinal.range_familyOfBFamily {ฮฑ : Type u_1} {o : Ordinal.{u_4}} (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ) :
                      @[simp]
                      theorem Ordinal.brange_bfamilyOfFamily' {ฮฑ : Type u_1} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ ฮฑ) :
                      @[simp]
                      theorem Ordinal.brange_bfamilyOfFamily {ฮฑ : Type u_1} {ฮน : Type u} (f : ฮน โ†’ ฮฑ) :
                      @[simp]
                      theorem Ordinal.brange_const {ฮฑ : Type u_1} {o : Ordinal.{u_4}} (ho : o โ‰  0) {c : ฮฑ} :
                      (o.brange fun (x : Ordinal.{u_4}) (x_1 : x < o) => c) = {c}
                      theorem Ordinal.comp_bfamilyOfFamily' {ฮฑ : Type u_1} {ฮฒ : Type u_2} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ ฮฑ) (g : ฮฑ โ†’ ฮฒ) :
                      (fun (i : Ordinal.{u}) (hi : i < type r) => g (bfamilyOfFamily' r f i hi)) = bfamilyOfFamily' r (g โˆ˜ f)
                      theorem Ordinal.comp_bfamilyOfFamily {ฮฑ : Type u_1} {ฮฒ : Type u_2} {ฮน : Type u} (f : ฮน โ†’ ฮฑ) (g : ฮฑ โ†’ ฮฒ) :
                      (fun (i : Ordinal.{u}) (hi : i < type WellOrderingRel) => g (bfamilyOfFamily f i hi)) = bfamilyOfFamily (g โˆ˜ f)
                      theorem Ordinal.comp_familyOfBFamily' {ฮฑ : Type u_1} {ฮฒ : Type u_2} {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] {o : Ordinal.{u}} (ho : type r = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ ฮฑ) (g : ฮฑ โ†’ ฮฒ) :
                      g โˆ˜ familyOfBFamily' r ho f = familyOfBFamily' r ho fun (i : Ordinal.{u}) (hi : i < o) => g (f i hi)
                      theorem Ordinal.comp_familyOfBFamily {ฮฑ : Type u_1} {ฮฒ : Type u_2} {o : Ordinal.{u_4}} (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ ฮฑ) (g : ฮฑ โ†’ ฮฒ) :
                      g โˆ˜ o.familyOfBFamily f = o.familyOfBFamily fun (i : Ordinal.{u_4}) (hi : i < o) => g (f i hi)

                      Supremum of a family of ordinals #

                      theorem Ordinal.bddAbove_range {ฮน : Type u} (f : ฮน โ†’ Ordinal.{max u v}) :

                      The range of an indexed ordinal function, whose outputs live in a higher universe than the inputs, is always bounded above. See Ordinal.lsub for an explicit bound.

                      theorem Ordinal.bddAbove_range_comp {ฮน : Type u} {f : ฮน โ†’ Ordinal.{v}} (hf : BddAbove (Set.range f)) (g : Ordinal.{v} โ†’ Ordinal.{max v w}) :
                      theorem Ordinal.le_iSup {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{u}) [Small.{u, u_4} ฮน] (i : ฮน) :

                      le_ciSup whenever the input type is small in the output universe. This lemma sometimes fails to infer f in simple cases and needs it to be given explicitly.

                      theorem Ordinal.iSup_le_iff {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{u}} {a : Ordinal.{u}} [Small.{u, u_4} ฮน] :
                      iSup f โ‰ค a โ†” โˆ€ (i : ฮน), f i โ‰ค a

                      ciSup_le_iff' whenever the input type is small in the output universe.

                      theorem Ordinal.iSup_le {ฮน : Sort u_4} {f : ฮน โ†’ Ordinal.{u_5}} {a : Ordinal.{u_5}} :
                      (โˆ€ (i : ฮน), f i โ‰ค a) โ†’ iSup f โ‰ค a

                      An alias of ciSup_le' for discoverability.

                      theorem Ordinal.lt_iSup_iff {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{u}} {a : Ordinal.{u}} [Small.{u, u_4} ฮน] :
                      a < iSup f โ†” โˆƒ (i : ฮน), a < f i

                      lt_ciSup_iff' whenever the input type is small in the output universe.

                      theorem Ordinal.succ_lt_iSup_of_ne_iSup {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{u}} [Small.{u, u_4} ฮน] (hf : โˆ€ (i : ฮน), f i โ‰  iSup f) {a : Ordinal.{u}} (hao : a < iSup f) :
                      theorem Ordinal.iSup_eq_zero_iff {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{u}} [Small.{u, u_4} ฮน] :
                      iSup f = 0 โ†” โˆ€ (i : ฮน), f i = 0
                      theorem Ordinal.iSup_eq_of_range_eq {ฮน : Sort u_4} {ฮน' : Sort u_5} {f : ฮน โ†’ Ordinal.{u_6}} {g : ฮน' โ†’ Ordinal.{u_6}} (h : Set.range f = Set.range g) :
                      iSup f = iSup g
                      @[deprecated iSup_succ (since := "2025-10-08")]
                      theorem Ordinal.iSup_succ {ฮฑ : Type u_2} [ConditionallyCompleteLinearOrderBot ฮฑ] [SuccOrder ฮฑ] (x : ฮฑ) :
                      โจ† (a : โ†‘(Set.Iio x)), Order.succ โ†‘a = x

                      Alias of iSup_succ.

                      theorem Ordinal.iSup_sum {ฮฑ : Type u_4} {ฮฒ : Type u_5} (f : ฮฑ โŠ• ฮฒ โ†’ Ordinal.{u}) [Small.{u, u_4} ฮฑ] [Small.{u, u_5} ฮฒ] :
                      iSup f = max (โจ† (a : ฮฑ), f (Sum.inl a)) (โจ† (b : ฮฒ), f (Sum.inr b))
                      theorem Ordinal.unbounded_range_of_le_iSup {ฮฑ ฮฒ : Type u} (r : ฮฑ โ†’ ฮฑ โ†’ Prop) [IsWellOrder ฮฑ r] (f : ฮฒ โ†’ ฮฑ) (h : type r โ‰ค โจ† (i : ฮฒ), (typein r).toRelEmbedding (f i)) :
                      @[deprecated Order.IsNormal.map_iSup (since := "2025-12-25")]
                      theorem Ordinal.IsNormal.map_iSup_of_bddAbove {f : Ordinal.{u} โ†’ Ordinal.{v}} (H : Ordinal.IsNormal f) {ฮน : Type u_4} (g : ฮน โ†’ Ordinal.{u}) (hg : BddAbove (Set.range g)) [Nonempty ฮน] :
                      f (โจ† (i : ฮน), g i) = โจ† (i : ฮน), f (g i)
                      @[deprecated Order.IsNormal.map_iSup (since := "2025-12-25")]
                      theorem Ordinal.IsNormal.map_iSup {f : Ordinal.{u} โ†’ Ordinal.{v}} (H : Ordinal.IsNormal f) {ฮน : Type w} (g : ฮน โ†’ Ordinal.{u}) [Small.{u, w} ฮน] [Nonempty ฮน] :
                      f (โจ† (i : ฮน), g i) = โจ† (i : ฮน), f (g i)
                      @[deprecated Order.IsNormal.map_sSup (since := "2025-12-25")]
                      theorem Ordinal.IsNormal.map_sSup_of_bddAbove {f : Ordinal.{u} โ†’ Ordinal.{v}} (H : Ordinal.IsNormal f) {s : Set Ordinal.{u}} (hs : BddAbove s) (hn : s.Nonempty) :
                      f (sSup s) = sSup (f '' s)
                      @[deprecated Order.IsNormal.map_sSup (since := "2025-12-25")]
                      theorem Ordinal.IsNormal.map_sSup {f : Ordinal.{u} โ†’ Ordinal.{v}} (H : Order.IsNormal f) {s : Set Ordinal.{u}} (hn : s.Nonempty) [Small.{u, u + 1} โ†‘s] :
                      f (sSup s) = sSup (f '' s)
                      @[deprecated Order.IsNormal.apply_of_isSuccLimit (since := "2025-12-25")]
                      theorem Ordinal.IsNormal.apply_of_isSuccLimit {f : Ordinal.{u} โ†’ Ordinal.{v}} (H : Ordinal.IsNormal f) {o : Ordinal.{u}} (ho : Order.IsSuccLimit o) :
                      f o = โจ† (a : โ†‘(Set.Iio o)), f โ†‘a
                      theorem Ordinal.iSup_ord {ฮน : Sort u_4} (f : ฮน โ†’ Cardinal.{u_5}) :
                      (โจ† (i : ฮน), f i).ord = โจ† (i : ฮน), (f i).ord
                      theorem Ordinal.iSup_eq_iSup {ฮน ฮน' : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) (r' : ฮน' โ†’ ฮน' โ†’ Prop) [IsWellOrder ฮน r] [IsWellOrder ฮน' r'] {o : Ordinal.{u}} (ho : type r = o) (ho' : type r' = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{u_4}) :
                      def Ordinal.bsup (o : Ordinal.{u}) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :

                      The supremum of a family of ordinals indexed by the set of ordinals less than some o : Ordinal.{u}. This is a special case of iSup over the family provided by familyOfBFamily.

                      Equations
                        Instances For
                          theorem Ordinal.iSup'_eq_bsup {o : Ordinal.{u_4}} {ฮน : Type u_4} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (ho : type r = o) (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_4 u_5}) :
                          @[simp]
                          theorem Ordinal.bsup'_eq_iSup {ฮน : Type u_4} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ Ordinal.{max u_4 u_5}) :
                          theorem Ordinal.bsup_eq_bsup {ฮน : Type u} (r r' : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] [IsWellOrder ฮน r'] (f : ฮน โ†’ Ordinal.{max u v}) :
                          theorem Ordinal.bsup_congr {oโ‚ oโ‚‚ : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < oโ‚ โ†’ Ordinal.{max u v}) (ho : oโ‚ = oโ‚‚) :
                          oโ‚.bsup f = oโ‚‚.bsup fun (a : Ordinal.{u}) (h : a < oโ‚‚) => f a โ‹ฏ
                          theorem Ordinal.bsup_le_iff {o : Ordinal.{u}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}} {a : Ordinal.{max u v}} :
                          o.bsup f โ‰ค a โ†” โˆ€ (i : Ordinal.{u}) (h : i < o), f i h โ‰ค a
                          theorem Ordinal.bsup_le {o : Ordinal.{u}} {f : (b : Ordinal.{u}) โ†’ b < o โ†’ Ordinal.{max u v}} {a : Ordinal.{max u v}} :
                          (โˆ€ (i : Ordinal.{u}) (h : i < o), f i h โ‰ค a) โ†’ o.bsup f โ‰ค a
                          theorem Ordinal.le_bsup {o : Ordinal.{u_4}} (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_5 u_4}) (i : Ordinal.{u_4}) (h : i < o) :
                          f i h โ‰ค o.bsup f
                          theorem Ordinal.lt_bsup {o : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) {a : Ordinal.{max u v}} :
                          a < o.bsup f โ†” โˆƒ (i : Ordinal.{u}) (hi : i < o), a < f i hi
                          theorem Ordinal.IsNormal.bsup {f : Ordinal.{max u_4 u_5} โ†’ Ordinal.{max u_5 u_6}} (H : Order.IsNormal f) {o : Ordinal.{u_5}} (g : (a : Ordinal.{u_5}) โ†’ a < o โ†’ Ordinal.{max u_5 u_4}) :
                          o โ‰  0 โ†’ f (o.bsup g) = o.bsup fun (a : Ordinal.{u_5}) (h : a < o) => f (g a h)
                          theorem Ordinal.lt_bsup_of_ne_bsup {o : Ordinal.{u}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}} :
                          (โˆ€ (i : Ordinal.{u}) (h : i < o), f i h โ‰  o.bsup f) โ†” โˆ€ (i : Ordinal.{u}) (h : i < o), f i h < o.bsup f
                          theorem Ordinal.bsup_not_succ_of_ne_bsup {o : Ordinal.{u}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}} (hf : โˆ€ {i : Ordinal.{u}} (h : i < o), f i h โ‰  o.bsup f) (a : Ordinal.{max u v}) :
                          a < o.bsup f โ†’ Order.succ a < o.bsup f
                          @[simp]
                          theorem Ordinal.bsup_eq_zero_iff {o : Ordinal.{u_4}} {f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_5 u_4}} :
                          o.bsup f = 0 โ†” โˆ€ (i : Ordinal.{u_4}) (hi : i < o), f i hi = 0
                          theorem Ordinal.lt_bsup_of_limit {o : Ordinal.{u_4}} {f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_4 u_5}} (hf : โˆ€ {a a' : Ordinal.{u_4}} (ha : a < o) (ha' : a' < o), a < a' โ†’ f a ha < f a' ha') (ho : โˆ€ a < o, Order.succ a < o) (i : Ordinal.{u_4}) (h : i < o) :
                          f i h < o.bsup f
                          theorem Ordinal.bsup_succ_of_mono {o : Ordinal.{u_4}} {f : (a : Ordinal.{u_4}) โ†’ a < Order.succ o โ†’ Ordinal.{max u_4 u_5}} (hf : โˆ€ {i j : Ordinal.{u_4}} (hi : i < Order.succ o) (hj : j < Order.succ o), i โ‰ค j โ†’ f i hi โ‰ค f j hj) :
                          (Order.succ o).bsup f = f o โ‹ฏ
                          @[simp]
                          theorem Ordinal.bsup_zero (f : (a : Ordinal.{u_4}) โ†’ a < 0 โ†’ Ordinal.{max u_4 u_5}) :
                          bsup 0 f = 0
                          theorem Ordinal.bsup_const {o : Ordinal.{u}} (ho : o โ‰  0) (a : Ordinal.{max u v}) :
                          (o.bsup fun (x : Ordinal.{u}) (x_1 : x < o) => a) = a
                          @[simp]
                          theorem Ordinal.bsup_one (f : (a : Ordinal.{u_4}) โ†’ a < 1 โ†’ Ordinal.{max u_4 u_5}) :
                          bsup 1 f = f 0 โ‹ฏ
                          theorem Ordinal.bsup_le_of_brange_subset {o : Ordinal.{u}} {o' : Ordinal.{v}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max (max u v) w}} {g : (a : Ordinal.{v}) โ†’ a < o' โ†’ Ordinal.{max (max u v) w}} (h : o.brange f โІ o'.brange g) :
                          o.bsup f โ‰ค o'.bsup g
                          theorem Ordinal.bsup_eq_of_brange_eq {o : Ordinal.{u}} {o' : Ordinal.{v}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max (max u v) w}} {g : (a : Ordinal.{v}) โ†’ a < o' โ†’ Ordinal.{max (max u v) w}} (h : o.brange f = o'.brange g) :
                          o.bsup f = o'.bsup g
                          theorem Ordinal.iSup_Iio_eq_bsup {o : Ordinal.{u_4}} {f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_5 u_4}} :
                          โจ† (a : โ†‘(Set.Iio o)), f โ†‘a โ‹ฏ = o.bsup f
                          @[deprecated Ordinal.iSup_eq_iSup (since := "2025-10-01")]
                          theorem Ordinal.sup_eq_sup {ฮน ฮน' : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) (r' : ฮน' โ†’ ฮน' โ†’ Prop) [IsWellOrder ฮน r] [IsWellOrder ฮน' r'] {o : Ordinal.{u}} (ho : type r = o) (ho' : type r' = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{u_4}) :

                          Alias of Ordinal.iSup_eq_iSup.

                          @[deprecated Ordinal.iSup'_eq_bsup (since := "2025-10-01")]
                          theorem Ordinal.sup_eq_bsup' {o : Ordinal.{u_4}} {ฮน : Type u_4} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (ho : type r = o) (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_4 u_5}) :

                          Alias of Ordinal.iSup'_eq_bsup.

                          @[deprecated Ordinal.iSup_eq_bsup (since := "2025-10-01")]
                          theorem Ordinal.sup_eq_bsup {o : Ordinal.{u_4}} (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_4 u_5}) :

                          Alias of Ordinal.iSup_eq_bsup.

                          @[deprecated Ordinal.bsup'_eq_iSup (since := "2025-10-01")]
                          theorem Ordinal.bsup_eq_sup' {ฮน : Type u_4} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ Ordinal.{max u_4 u_5}) :

                          Alias of Ordinal.bsup'_eq_iSup.

                          @[deprecated Ordinal.bsup_eq_iSup (since := "2025-10-01")]
                          theorem Ordinal.bsup_eq_sup {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :

                          Alias of Ordinal.bsup_eq_iSup.

                          def Ordinal.lsub {ฮน : Type u} (f : ฮน โ†’ Ordinal.{max u v}) :

                          The least strict upper bound of a family of ordinals.

                          Equations
                            Instances For
                              @[simp]
                              theorem Ordinal.iSup_eq_lsub {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              theorem Ordinal.lsub_le_iff {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{max u_5 u_4}} {a : Ordinal.{max u_4 u_5}} :
                              lsub f โ‰ค a โ†” โˆ€ (i : ฮน), f i < a
                              theorem Ordinal.lsub_le {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{max u_5 u_4}} {a : Ordinal.{max u_5 u_4}} :
                              (โˆ€ (i : ฮน), f i < a) โ†’ lsub f โ‰ค a
                              theorem Ordinal.lt_lsub {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) (i : ฮน) :
                              f i < lsub f
                              theorem Ordinal.lt_lsub_iff {ฮน : Type u_4} {f : ฮน โ†’ Ordinal.{max u_5 u_4}} {a : Ordinal.{max u_4 u_5}} :
                              a < lsub f โ†” โˆƒ (i : ฮน), a โ‰ค f i
                              theorem Ordinal.succ_iSup_le_lsub_iff {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              Order.succ (iSup f) โ‰ค lsub f โ†” โˆƒ (i : ฮน), f i = iSup f
                              theorem Ordinal.succ_iSup_eq_lsub_iff {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              Order.succ (iSup f) = lsub f โ†” โˆƒ (i : ฮน), f i = iSup f
                              theorem Ordinal.iSup_eq_lsub_iff {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              iSup f = lsub f โ†” โˆ€ a < lsub f, Order.succ a < lsub f
                              theorem Ordinal.iSup_eq_lsub_iff_lt_iSup {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              iSup f = lsub f โ†” โˆ€ (i : ฮน), f i < iSup f
                              @[simp]
                              theorem Ordinal.lsub_empty {ฮน : Type u_4} [h : IsEmpty ฮน] (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              lsub f = 0
                              theorem Ordinal.lsub_pos {ฮน : Type u_4} [h : Nonempty ฮน] (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              0 < lsub f
                              @[simp]
                              theorem Ordinal.lsub_eq_zero_iff {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max v u_4}) :
                              lsub f = 0 โ†” IsEmpty ฮน
                              @[simp]
                              theorem Ordinal.lsub_const {ฮน : Type u_4} [Nonempty ฮน] (o : Ordinal.{max u_5 u_4}) :
                              (lsub fun (x : ฮน) => o) = Order.succ o
                              @[simp]
                              theorem Ordinal.lsub_unique {ฮน : Type u_4} [Unique ฮน] (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              theorem Ordinal.lsub_le_of_range_subset {ฮน : Type u} {ฮน' : Type v} {f : ฮน โ†’ Ordinal.{max (max u v) w}} {g : ฮน' โ†’ Ordinal.{max (max u v) w}} (h : Set.range f โІ Set.range g) :
                              theorem Ordinal.lsub_eq_of_range_eq {ฮน : Type u} {ฮน' : Type v} {f : ฮน โ†’ Ordinal.{max (max u v) w}} {g : ฮน' โ†’ Ordinal.{max (max u v) w}} (h : Set.range f = Set.range g) :
                              lsub f = lsub g
                              @[simp]
                              theorem Ordinal.lsub_sum {ฮฑ : Type u} {ฮฒ : Type v} (f : ฮฑ โŠ• ฮฒ โ†’ Ordinal.{max (max u v) w}) :
                              lsub f = max (lsub fun (a : ฮฑ) => f (Sum.inl a)) (lsub fun (b : ฮฒ) => f (Sum.inr b))
                              theorem Ordinal.lsub_notMem_range {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              lsub f โˆ‰ Set.range f
                              @[simp]
                              theorem Ordinal.lsub_typein (o : Ordinal.{u}) :
                              lsub โ‡‘(typein fun (x1 x2 : o.ToType) => x1 < x2).toRelEmbedding = o
                              theorem Ordinal.iSup_typein_limit {o : Ordinal.{u}} (ho : โˆ€ a < o, Order.succ a < o) :
                              iSup โ‡‘(typein fun (x1 x2 : o.ToType) => x1 < x2).toRelEmbedding = o
                              @[simp]
                              theorem Ordinal.iSup_typein_succ {o : Ordinal.{u_4}} :
                              iSup โ‡‘(typein fun (x1 x2 : (Order.succ o).ToType) => x1 < x2).toRelEmbedding = o
                              @[deprecated Ordinal.iSup_eq_lsub (since := "2025-10-01")]
                              theorem Ordinal.sup_eq_lsub {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :

                              Alias of Ordinal.iSup_eq_lsub.

                              @[deprecated Ordinal.iSup_le_lsub (since := "2025-10-01")]
                              theorem Ordinal.sup_le_lsub {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :

                              Alias of Ordinal.iSup_le_lsub.

                              @[deprecated Ordinal.lsub_le_succ_iSup (since := "2025-10-01")]
                              theorem Ordinal.lsub_le_sup_succ {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :

                              Alias of Ordinal.lsub_le_succ_iSup.

                              @[deprecated Ordinal.iSup_eq_lsub_or_succ_iSup_eq_lsub (since := "2025-10-01")]

                              Alias of Ordinal.iSup_eq_lsub_or_succ_iSup_eq_lsub.

                              @[deprecated Ordinal.succ_iSup_le_lsub_iff (since := "2025-10-01")]
                              theorem Ordinal.sup_succ_le_lsub {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              Order.succ (iSup f) โ‰ค lsub f โ†” โˆƒ (i : ฮน), f i = iSup f

                              Alias of Ordinal.succ_iSup_le_lsub_iff.

                              @[deprecated Ordinal.succ_iSup_eq_lsub_iff (since := "2025-10-01")]
                              theorem Ordinal.sup_succ_eq_lsub {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              Order.succ (iSup f) = lsub f โ†” โˆƒ (i : ฮน), f i = iSup f

                              Alias of Ordinal.succ_iSup_eq_lsub_iff.

                              @[deprecated Ordinal.iSup_eq_lsub_iff (since := "2025-10-01")]
                              theorem Ordinal.sup_eq_lsub_iff_succ {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              iSup f = lsub f โ†” โˆ€ a < lsub f, Order.succ a < lsub f

                              Alias of Ordinal.iSup_eq_lsub_iff.

                              @[deprecated Ordinal.iSup_eq_lsub_iff_lt_iSup (since := "2025-10-01")]
                              theorem Ordinal.sup_eq_lsub_iff_lt_sup {ฮน : Type u_4} (f : ฮน โ†’ Ordinal.{max u_5 u_4}) :
                              iSup f = lsub f โ†” โˆ€ (i : ฮน), f i < iSup f

                              Alias of Ordinal.iSup_eq_lsub_iff_lt_iSup.

                              @[deprecated Ordinal.iSup_typein_limit (since := "2025-10-01")]
                              theorem Ordinal.sup_typein_limit {o : Ordinal.{u}} (ho : โˆ€ a < o, Order.succ a < o) :
                              iSup โ‡‘(typein fun (x1 x2 : o.ToType) => x1 < x2).toRelEmbedding = o

                              Alias of Ordinal.iSup_typein_limit.

                              @[deprecated Ordinal.iSup_typein_succ (since := "2025-10-01")]
                              theorem Ordinal.sup_typein_succ {o : Ordinal.{u_4}} :
                              iSup โ‡‘(typein fun (x1 x2 : (Order.succ o).ToType) => x1 < x2).toRelEmbedding = o

                              Alias of Ordinal.iSup_typein_succ.

                              def Ordinal.blsub (o : Ordinal.{u}) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :

                              The least strict upper bound of a family of ordinals indexed by the set of ordinals less than some o : Ordinal.{u}.

                              This is to lsub as bsup is to sup.

                              Equations
                                Instances For
                                  @[simp]
                                  theorem Ordinal.bsup_eq_blsub (o : Ordinal.{u}) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  (o.bsup fun (a : Ordinal.{u}) (ha : a < o) => Order.succ (f a ha)) = o.blsub f
                                  theorem Ordinal.lsub_eq_blsub' {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] {o : Ordinal.{u}} (ho : type r = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u u_4}) :
                                  theorem Ordinal.lsub_eq_lsub {ฮน ฮน' : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) (r' : ฮน' โ†’ ฮน' โ†’ Prop) [IsWellOrder ฮน r] [IsWellOrder ฮน' r'] {o : Ordinal.{u}} (ho : type r = o) (ho' : type r' = o) (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  @[simp]
                                  theorem Ordinal.lsub_eq_blsub {o : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  @[simp]
                                  theorem Ordinal.blsub_eq_lsub' {ฮน : Type u} (r : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] (f : ฮน โ†’ Ordinal.{max u v}) :
                                  theorem Ordinal.blsub_eq_blsub {ฮน : Type u} (r r' : ฮน โ†’ ฮน โ†’ Prop) [IsWellOrder ฮน r] [IsWellOrder ฮน r'] (f : ฮน โ†’ Ordinal.{max u v}) :
                                  theorem Ordinal.blsub_congr {oโ‚ oโ‚‚ : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < oโ‚ โ†’ Ordinal.{max u v}) (ho : oโ‚ = oโ‚‚) :
                                  oโ‚.blsub f = oโ‚‚.blsub fun (a : Ordinal.{u}) (h : a < oโ‚‚) => f a โ‹ฏ
                                  theorem Ordinal.blsub_le_iff {o : Ordinal.{u}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}} {a : Ordinal.{max u v}} :
                                  o.blsub f โ‰ค a โ†” โˆ€ (i : Ordinal.{u}) (h : i < o), f i h < a
                                  theorem Ordinal.blsub_le {o : Ordinal.{u_4}} {f : (b : Ordinal.{u_4}) โ†’ b < o โ†’ Ordinal.{max u_4 u_5}} {a : Ordinal.{max u_4 u_5}} :
                                  (โˆ€ (i : Ordinal.{u_4}) (h : i < o), f i h < a) โ†’ o.blsub f โ‰ค a
                                  theorem Ordinal.lt_blsub {o : Ordinal.{u_4}} (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_5 u_4}) (i : Ordinal.{u_4}) (h : i < o) :
                                  f i h < o.blsub f
                                  theorem Ordinal.lt_blsub_iff {o : Ordinal.{u}} {f : (b : Ordinal.{u}) โ†’ b < o โ†’ Ordinal.{max u v}} {a : Ordinal.{max u v}} :
                                  a < o.blsub f โ†” โˆƒ (i : Ordinal.{u}) (hi : i < o), a โ‰ค f i hi
                                  theorem Ordinal.bsup_succ_le_blsub {o : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  Order.succ (o.bsup f) โ‰ค o.blsub f โ†” โˆƒ (i : Ordinal.{u}) (hi : i < o), f i hi = o.bsup f
                                  theorem Ordinal.bsup_succ_eq_blsub {o : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  Order.succ (o.bsup f) = o.blsub f โ†” โˆƒ (i : Ordinal.{u}) (hi : i < o), f i hi = o.bsup f
                                  theorem Ordinal.bsup_eq_blsub_iff_succ {o : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  o.bsup f = o.blsub f โ†” โˆ€ a < o.blsub f, Order.succ a < o.blsub f
                                  theorem Ordinal.bsup_eq_blsub_iff_lt_bsup {o : Ordinal.{u}} (f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}) :
                                  o.bsup f = o.blsub f โ†” โˆ€ (i : Ordinal.{u}) (hi : i < o), f i hi < o.bsup f
                                  theorem Ordinal.bsup_eq_blsub_of_lt_succ_limit {o : Ordinal.{u}} (ho : Order.IsSuccLimit o) {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max u v}} (hf : โˆ€ (a : Ordinal.{u}) (ha : a < o), f a ha < f (Order.succ a) โ‹ฏ) :
                                  o.bsup f = o.blsub f
                                  theorem Ordinal.blsub_succ_of_mono {o : Ordinal.{u}} {f : (a : Ordinal.{u}) โ†’ a < Order.succ o โ†’ Ordinal.{max u v}} (hf : โˆ€ {i j : Ordinal.{u}} (hi : i < Order.succ o) (hj : j < Order.succ o), i โ‰ค j โ†’ f i hi โ‰ค f j hj) :
                                  (Order.succ o).blsub f = Order.succ (f o โ‹ฏ)
                                  @[simp]
                                  theorem Ordinal.blsub_eq_zero_iff {o : Ordinal.{u_4}} {f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_5 u_4}} :
                                  o.blsub f = 0 โ†” o = 0
                                  @[simp]
                                  theorem Ordinal.blsub_zero (f : (a : Ordinal.{u_4}) โ†’ a < 0 โ†’ Ordinal.{max u_4 u_5}) :
                                  blsub 0 f = 0
                                  theorem Ordinal.blsub_pos {o : Ordinal.{u_4}} (ho : 0 < o) (f : (a : Ordinal.{u_4}) โ†’ a < o โ†’ Ordinal.{max u_4 u_5}) :
                                  0 < o.blsub f
                                  theorem Ordinal.blsub_type {ฮฑ : Type u} (r : ฮฑ โ†’ ฮฑ โ†’ Prop) [IsWellOrder ฮฑ r] (f : (a : Ordinal.{u}) โ†’ a < type r โ†’ Ordinal.{max u v}) :
                                  (type r).blsub f = lsub fun (a : ฮฑ) => f ((typein r).toRelEmbedding a) โ‹ฏ
                                  theorem Ordinal.blsub_const {o : Ordinal.{u}} (ho : o โ‰  0) (a : Ordinal.{max u v}) :
                                  (o.blsub fun (x : Ordinal.{u}) (x_1 : x < o) => a) = Order.succ a
                                  @[simp]
                                  theorem Ordinal.blsub_one (f : (a : Ordinal.{u_4}) โ†’ a < 1 โ†’ Ordinal.{max u_4 u_5}) :
                                  blsub 1 f = Order.succ (f 0 โ‹ฏ)
                                  @[simp]
                                  theorem Ordinal.blsub_id (o : Ordinal.{u}) :
                                  (o.blsub fun (x : Ordinal.{u}) (x_1 : x < o) => x) = o
                                  theorem Ordinal.bsup_id_limit {o : Ordinal.{u}} :
                                  (โˆ€ a < o, Order.succ a < o) โ†’ (o.bsup fun (x : Ordinal.{u}) (x_1 : x < o) => x) = o
                                  @[simp]
                                  theorem Ordinal.bsup_id_succ (o : Ordinal.{u}) :
                                  ((Order.succ o).bsup fun (x : Ordinal.{u}) (x_1 : x < Order.succ o) => x) = o
                                  theorem Ordinal.blsub_le_of_brange_subset {o : Ordinal.{u}} {o' : Ordinal.{v}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max (max u v) w}} {g : (a : Ordinal.{v}) โ†’ a < o' โ†’ Ordinal.{max (max u v) w}} (h : o.brange f โІ o'.brange g) :
                                  theorem Ordinal.blsub_eq_of_brange_eq {o : Ordinal.{u}} {o' : Ordinal.{v}} {f : (a : Ordinal.{u}) โ†’ a < o โ†’ Ordinal.{max (max u v) w}} {g : (a : Ordinal.{v}) โ†’ a < o' โ†’ Ordinal.{max (max u v) w}} (h : {o_1 : Ordinal.{max (max u v) w} | โˆƒ (i : Ordinal.{u}) (hi : i < o), f i hi = o_1} = {o : Ordinal.{max (max u v) w} | โˆƒ (i : Ordinal.{v}) (hi : i < o'), g i hi = o}) :
                                  o.blsub f = o'.blsub g
                                  theorem Ordinal.bsup_comp {o o' : Ordinal.{max u v}} {f : (a : Ordinal.{max u v}) โ†’ a < o โ†’ Ordinal.{max u v w}} (hf : โˆ€ {i j : Ordinal.{max u v}} (hi : i < o) (hj : j < o), i โ‰ค j โ†’ f i hi โ‰ค f j hj) {g : (a : Ordinal.{max u v}) โ†’ a < o' โ†’ Ordinal.{max u v}} (hg : o'.blsub g = o) :
                                  (o'.bsup fun (a : Ordinal.{max u v}) (ha : a < o') => f (g a ha) โ‹ฏ) = o.bsup f
                                  theorem Ordinal.blsub_comp {o o' : Ordinal.{max u v}} {f : (a : Ordinal.{max u v}) โ†’ a < o โ†’ Ordinal.{max u v w}} (hf : โˆ€ {i j : Ordinal.{max u v}} (hi : i < o) (hj : j < o), i โ‰ค j โ†’ f i hi โ‰ค f j hj) {g : (a : Ordinal.{max u v}) โ†’ a < o' โ†’ Ordinal.{max u v}} (hg : o'.blsub g = o) :
                                  (o'.blsub fun (a : Ordinal.{max u v}) (ha : a < o') => f (g a ha) โ‹ฏ) = o.blsub f
                                  theorem Ordinal.IsNormal.bsup_eq {f : Ordinal.{u} โ†’ Ordinal.{max u v}} (H : Order.IsNormal f) {o : Ordinal.{u}} (h : Order.IsSuccLimit o) :
                                  (o.bsup fun (x : Ordinal.{u}) (x_1 : x < o) => f x) = f o
                                  theorem Ordinal.IsNormal.blsub_eq {f : Ordinal.{u} โ†’ Ordinal.{max u v}} (H : Order.IsNormal f) {o : Ordinal.{u}} (h : Order.IsSuccLimit o) :
                                  (o.blsub fun (x : Ordinal.{u}) (x_1 : x < o) => f x) = f o
                                  theorem Ordinal.isNormal_iff_lt_succ_and_bsup_eq {f : Ordinal.{u} โ†’ Ordinal.{max u v}} :
                                  Order.IsNormal f โ†” (โˆ€ (a : Ordinal.{u}), f a < f (Order.succ a)) โˆง โˆ€ (o : Ordinal.{u}), Order.IsSuccLimit o โ†’ (o.bsup fun (x : Ordinal.{u}) (x_1 : x < o) => f x) = f o
                                  theorem Ordinal.isNormal_iff_lt_succ_and_blsub_eq {f : Ordinal.{u} โ†’ Ordinal.{max u v}} :
                                  Order.IsNormal f โ†” (โˆ€ (a : Ordinal.{u}), f a < f (Order.succ a)) โˆง โˆ€ (o : Ordinal.{u}), Order.IsSuccLimit o โ†’ (o.blsub fun (x : Ordinal.{u}) (x_1 : x < o) => f x) = f o
                                  @[deprecated Order.IsNormal.ext (since := "2025-12-25")]
                                  theorem Ordinal.IsNormal.eq_iff_zero_and_succ {f g : Ordinal.{u} โ†’ Ordinal.{u}} (hf : Order.IsNormal f) (hg : Order.IsNormal g) :
                                  f = g โ†” f 0 = g 0 โˆง โˆ€ (a : Ordinal.{u}), f a = g a โ†’ f (Order.succ a) = g (Order.succ a)

                                  Results about injectivity and surjectivity #

                                  @[deprecated not_surjective_of_ordinal (since := "2025-08-21")]
                                  theorem not_surjective_of_ordinal_of_small {ฮฑ : Type u_1} [Small.{u, u_1} ฮฑ] (f : ฮฑ โ†’ Ordinal.{u}) :

                                  Alias of not_surjective_of_ordinal.

                                  @[deprecated not_injective_of_ordinal (since := "2025-08-21")]
                                  theorem not_injective_of_ordinal_of_small {ฮฑ : Type u_1} [Small.{u, u_1} ฮฑ] (f : Ordinal.{u} โ†’ ฮฑ) :

                                  Alias of not_injective_of_ordinal.

                                  The type of ordinals in universe u is not Small.{u}. This is the type-theoretic analog of the Burali-Forti paradox.

                                  Casting naturals into ordinals, compatibility with operations #

                                  @[deprecated Ordinal.apply_omega0_of_isNormal (since := "2025-12-25")]
                                  theorem Ordinal.IsNormal.apply_omega0 {f : Ordinal.{u} โ†’ Ordinal.{v}} (hf : Order.IsNormal f) :
                                  โจ† (n : โ„•), f โ†‘n = f omega0

                                  Alias of Ordinal.apply_omega0_of_isNormal.

                                  @[simp]
                                  theorem Ordinal.iSup_add_natCast (o : Ordinal.{u_1}) :
                                  โจ† (n : โ„•), o + โ†‘n = o + omega0
                                  @[deprecated Ordinal.iSup_add_natCast (since := "2025-12-25")]
                                  theorem Ordinal.iSup_add_nat (o : Ordinal.{u_1}) :
                                  โจ† (n : โ„•), o + โ†‘n = o + omega0

                                  Alias of Ordinal.iSup_add_natCast.

                                  @[simp]
                                  theorem Ordinal.iSup_mul_natCast (o : Ordinal.{u_1}) :
                                  โจ† (n : โ„•), o * โ†‘n = o * omega0
                                  @[deprecated Ordinal.iSup_mul_natCast (since := "2025-12-25")]
                                  theorem Ordinal.iSup_mul_nat (o : Ordinal.{u_1}) :
                                  โจ† (n : โ„•), o * โ†‘n = o * omega0

                                  Alias of Ordinal.iSup_mul_natCast.