Documentation

Mathlib.SetTheory.Cardinal.Cofinality

Cofinality #

This file contains the definition of cofinality of an order and an ordinal number.

Main Definitions #

Main Statements #

Implementation Notes #

Cofinality of orders #

noncomputable def Order.cof (α : Type u) [Preorder α] :

The cofinality of a preorder is the smallest cardinality of a cofinal subset.

Equations
Instances For
    theorem Order.cof_le {α : Type u} [Preorder α] {s : Set α} (h : IsCofinal s) :
    theorem Order.le_cof_iff {α : Type u} [Preorder α] {c : Cardinal.{u}} :
    c cof α ∀ (s : Set α), IsCofinal sc Cardinal.mk s
    @[deprecated Order.le_cof_iff (since := "2026-02-18")]
    theorem Order.le_cof {α : Type u} [Preorder α] {c : Cardinal.{u}} :
    c cof α ∀ (s : Set α), IsCofinal sc Cardinal.mk s

    Alias of Order.le_cof_iff.

    theorem Order.cof_eq (α : Type u) [Preorder α] :
    ∃ (s : Set α), IsCofinal s Cardinal.mk s = cof α
    theorem Order.cof_eq_zero_iff {α : Type u} [Preorder α] :
    cof α = 0 IsEmpty α
    @[simp]
    theorem Order.cof_eq_zero {α : Type u} [Preorder α] [h : IsEmpty α] :
    cof α = 0
    @[simp]
    theorem Order.cof_ne_zero {α : Type u} [Preorder α] [h : Nonempty α] :
    cof α 0
    theorem Order.cof_eq_one_iff {α : Type u} [Preorder α] :
    cof α = 1 ∃ (x : α), IsTop x
    @[simp]
    theorem Order.cof_eq_one {α : Type u} [Preorder α] [OrderTop α] :
    cof α = 1
    theorem GaloisConnection.cof_le_lift {α : Type u} {β : Type v} [Preorder α] [Preorder β] {f : βα} {g : αβ} (h : GaloisConnection f g) :
    theorem GaloisConnection.cof_le {α γ : Type u} [Preorder α] [Preorder γ] {f : γα} {g : αγ} (h : GaloisConnection f g) :
    theorem OrderIso.cof_eq {α γ : Type u} [Preorder α] [Preorder γ] (f : α ≃o γ) :
    @[deprecated OrderIso.lift_cof_eq (since := "2026-02-18")]

    Alias of OrderIso.lift_cof_eq.

    @[deprecated OrderIso.cof_eq (since := "2026-02-18")]
    theorem RelIso.cof_eq {α γ : Type u} [Preorder α] [Preorder γ] (f : α ≃o γ) :

    Alias of OrderIso.cof_eq.

    theorem isCofinal_of_isCofinal_sUnion {α : Type u_1} [LinearOrder α] {s : Set (Set α)} (h₁ : IsCofinal (⋃₀ s)) (h₂ : Cardinal.mk s < Order.cof α) :
    xs, IsCofinal x

    If the union of s is cofinal and s is smaller than the cofinality, then s has a cofinal member.

    theorem isCofinal_of_isCofinal_iUnion {α ι : Type u_1} [LinearOrder α] {s : ιSet α} (h₁ : IsCofinal (⋃ (i : ι), s i)) (h₂ : Cardinal.mk ι < Order.cof α) :
    ∃ (i : ι), IsCofinal (s i)

    If the union of the ι-indexed family s is cofinal and ι is smaller than the cofinality, then s has a cofinal member.

    Cofinality of ordinals #

    noncomputable def Ordinal.cof (o : Ordinal.{u}) :

    The cofinality on an ordinal is the Order.cof of any isomorphic linear order.

    In particular, cof 0 = 0 and cof (succ o) = 1.

    Equations
    Instances For
      @[simp]
      theorem Ordinal.cof_type (α : Type u_1) [LinearOrder α] [WellFoundedLT α] :
      (type fun (x1 x2 : α) => x1 < x2).cof = Order.cof α
      @[deprecated Ordinal.cof_type (since := "2026-02-18")]
      theorem Ordinal.cof_type_lt (α : Type u_1) [LinearOrder α] [WellFoundedLT α] :
      (type fun (x1 x2 : α) => x1 < x2).cof = Order.cof α

      Alias of Ordinal.cof_type.

      @[deprecated Ordinal.cof_toType (since := "2026-02-18")]

      Alias of Ordinal.cof_toType.

      @[deprecated Order.le_cof_iff (since := "2026-02-18")]
      theorem Ordinal.le_cof_type {α : Type u} [Preorder α] {c : Cardinal.{u}} :
      c Order.cof α ∀ (s : Set α), IsCofinal sc Cardinal.mk s

      Alias of Order.le_cof_iff.

      @[deprecated Order.cof_le (since := "2026-02-18")]
      theorem Ordinal.cof_type_le {α : Type u} [Preorder α] {s : Set α} (h : IsCofinal s) :

      Alias of Order.cof_le.

      @[deprecated Order.cof_le (since := "2026-02-18")]
      theorem Ordinal.lt_cof_type {α : Type u} [Preorder α] {s : Set α} (h : IsCofinal s) :

      Alias of Order.cof_le.

      @[deprecated Order.cof_eq (since := "2026-02-18")]
      theorem Ordinal.cof_eq (α : Type u) [Preorder α] :
      ∃ (s : Set α), IsCofinal s Cardinal.mk s = Order.cof α

      Alias of Order.cof_eq.

      @[simp]
      theorem Ordinal.cof_eq_zero {o : Ordinal.{u_1}} :
      o.cof = 0 o = 0
      @[deprecated Ordinal.cof_eq_zero (since := "2026-02-18")]
      @[simp]
      theorem Ordinal.cof_zero :
      cof 0 = 0
      @[simp]
      theorem Ordinal.cof_one :
      cof 1 = 1
      @[deprecated Ordinal.cof_eq_one_iff (since := "2026-02-18")]

      Alias of Ordinal.cof_eq_one_iff.

      theorem Ordinal.ord_cof_eq (α : Type u_1) [LinearOrder α] [WellFoundedLT α] :
      ∃ (s : Set α), IsCofinal s (type fun (x1 x2 : s) => x1 < x2) = (Order.cof α).ord

      Cofinality of suprema and least strict upper bounds #

      The set in the lsub characterization of cof is nonempty.

      theorem Ordinal.cof_eq_sInf_lsub (o : Ordinal.{u}) :
      o.cof = sInf {a : Cardinal.{u} | ∃ (ι : Type u) (f : ιOrdinal.{u}), lsub f = o Cardinal.mk ι = a}
      theorem Ordinal.exists_lsub_cof (o : Ordinal.{u}) :
      ∃ (ι : Type u) (f : ιOrdinal.{u}), lsub f = o Cardinal.mk ι = o.cof
      theorem Ordinal.cof_lsub_le {ι : Type u} (f : ιOrdinal.{u}) :
      theorem Ordinal.le_cof_iff_lsub {o : Ordinal.{u}} {a : Cardinal.{u}} :
      a o.cof ∀ {ι : Type u} (f : ιOrdinal.{u}), lsub f = oa Cardinal.mk ι
      theorem Ordinal.lsub_lt_ord_lift {ι : Type u} {f : ιOrdinal.{max u v}} {c : Ordinal.{max u v}} ( : Cardinal.lift.{v, u} (Cardinal.mk ι) < c.cof) (hf : ∀ (i : ι), f i < c) :
      lsub f < c
      theorem Ordinal.lsub_lt_ord {ι : Type u} {f : ιOrdinal.{u}} {c : Ordinal.{u}} ( : Cardinal.mk ι < c.cof) :
      (∀ (i : ι), f i < c)lsub f < c
      theorem Ordinal.cof_iSup_le_lift {ι : Type u} {f : ιOrdinal.{max u v}} (H : ∀ (i : ι), f i < iSup f) :
      theorem Ordinal.cof_iSup_le {ι : Type u_1} {f : ιOrdinal.{u_1}} (H : ∀ (i : ι), f i < iSup f) :
      theorem Ordinal.iSup_lt_ord_lift {ι : Type u} {f : ιOrdinal.{max u v}} {c : Ordinal.{max u v}} ( : Cardinal.lift.{v, u} (Cardinal.mk ι) < c.cof) (hf : ∀ (i : ι), f i < c) :
      iSup f < c
      theorem Ordinal.iSup_lt_ord {ι : Type u_1} {f : ιOrdinal.{u_1}} {c : Ordinal.{u_1}} ( : Cardinal.mk ι < c.cof) :
      (∀ (i : ι), f i < c)iSup f < c
      theorem Ordinal.iSup_lt_lift {ι : Type u} {f : ιCardinal.{max u v}} {c : Cardinal.{max u v}} ( : Cardinal.lift.{v, u} (Cardinal.mk ι) < c.ord.cof) (hf : ∀ (i : ι), f i < c) :
      iSup f < c
      theorem Ordinal.iSup_lt {ι : Type u_1} {f : ιCardinal.{u_1}} {c : Cardinal.{u_1}} ( : Cardinal.mk ι < c.ord.cof) :
      (∀ (i : ι), f i < c)iSup f < c
      theorem Ordinal.nfpFamily_lt_ord_lift {ι : Type u} {f : ιOrdinal.{max u v}Ordinal.{max u v}} {c : Ordinal.{max u v}} (hc : Cardinal.aleph0 < c.cof) (hc' : Cardinal.lift.{v, u} (Cardinal.mk ι) < c.cof) (hf : ∀ (i : ι), b < c, f i b < c) {a : Ordinal.{max u v}} (ha : a < c) :
      nfpFamily f a < c
      theorem Ordinal.nfpFamily_lt_ord {ι : Type u} {f : ιOrdinal.{u}Ordinal.{u}} {c : Ordinal.{u}} (hc : Cardinal.aleph0 < c.cof) (hc' : Cardinal.mk ι < c.cof) (hf : ∀ (i : ι), b < c, f i b < c) {a : Ordinal.{u}} :
      a < cnfpFamily f a < c
      theorem Ordinal.nfp_lt_ord {f : Ordinal.{u_1}Ordinal.{u_1}} {c : Ordinal.{u_1}} (hc : Cardinal.aleph0 < c.cof) (hf : i < c, f i < c) {a : Ordinal.{u_1}} :
      a < cnfp f a < c
      theorem Ordinal.exists_blsub_cof (o : Ordinal.{u}) :
      ∃ (f : (a : Ordinal.{u}) → a < o.cof.ordOrdinal.{u}), o.cof.ord.blsub f = o
      theorem Ordinal.le_cof_iff_blsub {b : Ordinal.{u}} {a : Cardinal.{u}} :
      a b.cof ∀ {o : Ordinal.{u}} (f : (a : Ordinal.{u}) → a < oOrdinal.{u}), o.blsub f = ba o.card
      theorem Ordinal.cof_blsub_le {o : Ordinal.{u}} (f : (a : Ordinal.{u}) → a < oOrdinal.{u}) :
      (o.blsub f).cof o.card
      theorem Ordinal.blsub_lt_ord_lift {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < oOrdinal.{max u v}} {c : Ordinal.{max u v}} (ho : Cardinal.lift.{v, u} o.card < c.cof) (hf : ∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c) :
      o.blsub f < c
      theorem Ordinal.blsub_lt_ord {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < oOrdinal.{u}} {c : Ordinal.{u}} (ho : o.card < c.cof) (hf : ∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c) :
      o.blsub f < c
      theorem Ordinal.cof_bsup_le_lift {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < oOrdinal.{max u v}} (H : ∀ (i : Ordinal.{u}) (h : i < o), f i h < o.bsup f) :
      theorem Ordinal.cof_bsup_le {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < oOrdinal.{u}} :
      (∀ (i : Ordinal.{u}) (h : i < o), f i h < o.bsup f)(o.bsup f).cof o.card
      theorem Ordinal.bsup_lt_ord_lift {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < oOrdinal.{max u v}} {c : Ordinal.{max u v}} (ho : Cardinal.lift.{v, u} o.card < c.cof) (hf : ∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c) :
      o.bsup f < c
      theorem Ordinal.bsup_lt_ord {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < oOrdinal.{u}} {c : Ordinal.{u}} (ho : o.card < c.cof) :
      (∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c)o.bsup f < c

      Fundamental sequences #

      A fundamental sequence for a is an increasing sequence of length o = cof a that converges at a. We provide o explicitly in order to avoid type rewrites.

      Equations
      Instances For
        theorem Ordinal.IsFundamentalSequence.strict_mono {a o : Ordinal.{u}} {f : (b : Ordinal.{u}) → b < oOrdinal.{u}} (hf : a.IsFundamentalSequence o f) {i j : Ordinal.{u}} (hi : i < o) (hj : j < o) :
        i < jf i hi < f j hj
        theorem Ordinal.IsFundamentalSequence.ord_cof {a o : Ordinal.{u}} {f : (b : Ordinal.{u}) → b < oOrdinal.{u}} (hf : a.IsFundamentalSequence o f) :
        a.IsFundamentalSequence a.cof.ord fun (i : Ordinal.{u}) (hi : i < a.cof.ord) => f i
        theorem Ordinal.IsFundamentalSequence.monotone {a o : Ordinal.{u}} {f : (b : Ordinal.{u}) → b < oOrdinal.{u}} (hf : a.IsFundamentalSequence o f) {i j : Ordinal.{u}} (hi : i < o) (hj : j < o) (hij : i j) :
        f i hi f j hj
        theorem Ordinal.IsFundamentalSequence.trans {a o o' : Ordinal.{u}} {f : (b : Ordinal.{u}) → b < oOrdinal.{u}} (hf : a.IsFundamentalSequence o f) {g : (b : Ordinal.{u}) → b < o'Ordinal.{u}} (hg : o.IsFundamentalSequence o' g) :
        a.IsFundamentalSequence o' fun (i : Ordinal.{u}) (hi : i < o') => f (g i hi)
        theorem Ordinal.IsFundamentalSequence.lt {a o : Ordinal.{u_1}} {s : (p : Ordinal.{u_1}) → p < oOrdinal.{u_1}} (h : a.IsFundamentalSequence o s) {p : Ordinal.{u_1}} (hp : p < o) :
        s p hp < a

        Every ordinal has a fundamental sequence.

        @[simp]
        theorem Ordinal.IsFundamentalSequence.of_isNormal {f : Ordinal.{u}Ordinal.{u}} (hf : Order.IsNormal f) {a o : Ordinal.{u}} (ha : Order.IsSuccLimit a) {g : (b : Ordinal.{u}) → b < oOrdinal.{u}} (hg : a.IsFundamentalSequence o g) :
        (f a).IsFundamentalSequence o fun (b : Ordinal.{u}) (hb : b < o) => f (g b hb)
        @[deprecated Ordinal.IsFundamentalSequence.of_isNormal (since := "2025-12-25")]
        theorem Ordinal.IsNormal.isFundamentalSequence {f : Ordinal.{u}Ordinal.{u}} (hf : Order.IsNormal f) {a o : Ordinal.{u}} (ha : Order.IsSuccLimit a) {g : (b : Ordinal.{u}) → b < oOrdinal.{u}} (hg : a.IsFundamentalSequence o g) :
        (f a).IsFundamentalSequence o fun (b : Ordinal.{u}) (hb : b < o) => f (g b hb)

        Alias of Ordinal.IsFundamentalSequence.of_isNormal.

        @[deprecated Ordinal.cof_eq_of_isNormal (since := "2025-12-25")]

        Alias of Ordinal.cof_eq_of_isNormal.

        @[deprecated Ordinal.cof_le_of_isNormal (since := "2025-12-25")]

        Alias of Ordinal.cof_le_of_isNormal.

        @[simp]
        theorem Ordinal.cof_add (a b : Ordinal.{u_1}) :
        b 0(a + b).cof = b.cof
        @[simp]
        theorem Ordinal.cof_eq' {α : Type u} (r : ααProp) [H : IsWellOrder α r] (h : Order.IsSuccLimit (type r)) :
        ∃ (S : Set α), (∀ (a : α), bS, r a b) Cardinal.mk S = (type r).cof

        Results on sets #

        theorem Cardinal.mk_bounded_subset {α : Type u_1} (h : x < mk α, 2 ^ x < mk α) {r : ααProp} [IsWellOrder α r] (hr : (mk α).ord = Ordinal.type r) :
        mk { s : Set α // Set.Bounded r s } = mk α
        theorem Cardinal.mk_subset_mk_lt_cof {α : Type u_1} (h : x < mk α, 2 ^ x < mk α) :
        mk { s : Set α // mk s < (mk α).ord.cof } = mk α
        @[deprecated isCofinal_of_isCofinal_sUnion (since := "2026-02-25")]
        theorem Cardinal.unbounded_of_unbounded_sUnion {α : Type u_1} [LinearOrder α] {s : Set (Set α)} (h₁ : IsCofinal (⋃₀ s)) (h₂ : mk s < Order.cof α) :
        xs, IsCofinal x

        Alias of isCofinal_of_isCofinal_sUnion.


        If the union of s is cofinal and s is smaller than the cofinality, then s has a cofinal member.

        @[deprecated isCofinal_of_isCofinal_iUnion (since := "2026-02-25")]
        theorem Cardinal.unbounded_of_unbounded_iUnion {α ι : Type u_1} [LinearOrder α] {s : ιSet α} (h₁ : IsCofinal (⋃ (i : ι), s i)) (h₂ : mk ι < Order.cof α) :
        ∃ (i : ι), IsCofinal (s i)

        Alias of isCofinal_of_isCofinal_iUnion.


        If the union of the ι-indexed family s is cofinal and ι is smaller than the cofinality, then s has a cofinal member.

        Consequences of König's lemma #

        theorem Cardinal.lt_cof_power {a b : Cardinal.{u_1}} (ha : aleph0 a) (b1 : 1 < b) :
        a < (b ^ a).ord.cof