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 s → c ≤ 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 s → c ≤ 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
    @[simp]
    theorem Order.cof_ne_one {α : Type u} [Preorder α] [h : NoTopOrder α] :
    cof α ≠ 1
    theorem Order.cof_le_one_iff {α : Type u} [Preorder α] [Nonempty α] :
    cof α ≤ 1 ↔ ∃ (x : α), IsTop x
    theorem Order.one_lt_cof_iff {α : Type u} [Preorder α] [Nonempty α] :
    @[simp]
    theorem Order.one_lt_cof {α : Type u} [Preorder α] [Nonempty α] [h : NoTopOrder α] :
    1 < cof α
    theorem Order.cof_congr_of_strictMono {α γ : Type u} [LinearOrder α] [LinearOrder γ] {f : α → γ} (hf : StrictMono f) (hf' : IsCofinal (Set.range f)) :
    cof α = cof γ
    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) :
    @[deprecated OrderIso.lift_cof_congr (since := "2026-03-20")]

    Alias of OrderIso.lift_cof_congr.

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

    Alias of OrderIso.cof_congr.

    @[deprecated OrderIso.lift_cof_congr (since := "2026-02-18")]

    Alias of OrderIso.lift_cof_congr.

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

    Alias of OrderIso.cof_congr.

    theorem isCofinal_of_isCofinal_sUnion {α : Type u_1} [LinearOrder α] {s : Set (Set α)} (h₁ : IsCofinal (⋃₀ s)) (h₂ : Cardinal.mk ↑s < Order.cof α) :
    ∃ x ∈ s, 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 s → c ≤ 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.

      theorem Order.cof_Iio {α : Type u} [LinearOrder α] [WellFoundedLT α] (x : α) :
      cof ↑(Set.Iio x) = ((Ordinal.typein fun (x1 x2 : α) => x1 < x2).toRelEmbedding x).cof
      @[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_pos {o : Ordinal.{u_1}} :
      0 < o.cof ↔ 0 < o
      @[simp]
      theorem Ordinal.cof_zero :
      cof 0 = 0
      @[simp]
      theorem Ordinal.cof_one :
      cof 1 = 1
      @[deprecated Ordinal.one_lt_cof_iff (since := "2026-03-22")]

      A countable limit ordinal has cofinality ℵ₀.

      @[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
      @[simp]
      theorem Order.cof_ord_cof (α : Type u_1) [LinearOrder α] [WellFoundedLT α] :
      (cof α).ord.cof = cof α
      @[deprecated Ordinal.cof_ord_cof (since := "2026-03-21")]

      Alias of Ordinal.cof_ord_cof.

      Cofinalities and suprema #

      theorem Ordinal.cof_iSup_add_one {γ : Type u} [LinearOrder γ] {f : γ → Ordinal.{u}} (hf : StrictMono f) :
      (⨆ (i : γ), f i + 1).cof = Order.cof γ
      theorem Ordinal.cof_iSup {γ : Type u} [LinearOrder γ] [NoMaxOrder γ] {f : γ → Ordinal.{u}} (hf : StrictMono f) :
      (⨆ (i : γ), f i).cof = Order.cof γ
      theorem Ordinal.cof_iSup_Iio_add_one {a : Ordinal.{u_1}} {f : ↑(Set.Iio a) → Ordinal.{u_1}} (hf : StrictMono f) :
      (⨆ (i : ↑(Set.Iio a)), f i + 1).cof = a.cof
      theorem Ordinal.cof_iSup_Iio {a : Ordinal.{u_1}} {f : ↑(Set.Iio a) → Ordinal.{u_1}} (hf : StrictMono f) (ha : Order.IsSuccPrelimit a) :
      (⨆ (i : ↑(Set.Iio a)), f i).cof = a.cof
      @[deprecated Ordinal.cof_map_of_isNormal (since := "2026-03-19")]

      Alias of Ordinal.cof_map_of_isNormal.

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

      Alias of Ordinal.cof_map_of_isNormal.


      Alias of Ordinal.cof_map_of_isNormal.

      @[deprecated Ordinal.le_cof_map_of_isNormal (since := "2026-03-19")]

      Alias of Ordinal.le_cof_map_of_isNormal.

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

      Alias of Ordinal.le_cof_map_of_isNormal.

      theorem Ordinal.sSup_add_one_lt_of_lt_cof {s : Set Ordinal.{u}} {a : Ordinal.{u}} (ha : Cardinal.mk ↑s < (lift.{u + 1, u} a).cof) (hs : ∀ i ∈ s, i < a) :
      sSup ((fun (x : Ordinal.{u}) => x + 1) '' s) < a
      theorem Ordinal.sSup_lt_of_lt_cof {s : Set Ordinal.{u}} {a : Ordinal.{u}} (ha : Cardinal.mk ↑s < (lift.{u + 1, u} a).cof) (hs : ∀ i ∈ s, i < a) :
      sSup s < a
      theorem Ordinal.lift_iSup_add_one_lt_of_lt_cof {β : Type v} {f : β → Ordinal.{u}} {a : Ordinal.{u}} (ha : Cardinal.lift.{u, v} (Cardinal.mk β) < (lift.{v, u} a).cof) (hf : ∀ (i : β), f i < a) :
      ⨆ (i : β), f i + 1 < a
      theorem Ordinal.iSup_add_one_lt_of_lt_cof {α : Type u} {f : α → Ordinal.{u}} {a : Ordinal.{u}} (ha : Cardinal.mk α < a.cof) (hf : ∀ (i : α), f i < a) :
      ⨆ (i : α), f i + 1 < a
      theorem Ordinal.lift_iSup_lt_of_lt_cof {β : Type v} {f : β → Ordinal.{u}} {a : Ordinal.{u}} (ha : Cardinal.lift.{u, v} (Cardinal.mk β) < (lift.{v, u} a).cof) (hf : ∀ (i : β), f i < a) :
      ⨆ (i : β), f i < a
      theorem Ordinal.iSup_lt_of_lt_cof {α : Type u} {f : α → Ordinal.{u}} {a : Ordinal.{u}} (ha : Cardinal.mk α < a.cof) (hf : ∀ (i : α), f i < a) :
      ⨆ (i : α), f i < a
      theorem Ordinal.cof_iSup_add_one_le {α : Type u} (f : α → Ordinal.{u}) :
      (⨆ (i : α), f i + 1).cof ≤ Cardinal.mk α
      theorem Cardinal.sSup_lt_of_lt_cof_ord {s : Set Cardinal.{u}} {a : Cardinal.{u}} (ha : mk ↑s < (lift.{u + 1, u} a).ord.cof) (hs : ∀ i ∈ s, i < a) :
      sSup s < a
      theorem Cardinal.lift_iSup_lt_of_lt_cof_ord {β : Type v} {f : β → Cardinal.{u}} {a : Cardinal.{u}} (ha : lift.{u, v} (mk β) < (lift.{v, u} a).ord.cof) (hf : ∀ (i : β), f i < a) :
      ⨆ (i : β), f i < a
      theorem Cardinal.iSup_lt_of_lt_cof_ord {α : Type u} {f : α → Cardinal.{u}} {a : Cardinal.{u}} (ha : mk α < a.ord.cof) (hf : ∀ (i : α), f i < a) :
      ⨆ (i : α), f i < a

      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 = o → a ≤ Cardinal.mk ι
      theorem Ordinal.lsub_lt_ord_lift {ι : Type u} {f : ι → Ordinal.{max u v}} {c : Ordinal.{max u v}} (hι : 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}} (hι : 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}} (hι : 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}} (hι : 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}} (hι : 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}} (hι : 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 < c → nfpFamily 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 < c → nfp f a < c
      theorem Ordinal.exists_blsub_cof (o : Ordinal.{u}) :
      ∃ (f : (a : Ordinal.{u}) → a < o.cof.ord → Ordinal.{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 < o → Ordinal.{u}), o.blsub f = b → a ≤ o.card
      theorem Ordinal.cof_blsub_le {o : Ordinal.{u}} (f : (a : Ordinal.{u}) → a < o → Ordinal.{u}) :
      (o.blsub f).cof ≤ o.card
      theorem Ordinal.blsub_lt_ord_lift {o : Ordinal.{u}} {f : (a : Ordinal.{u}) → a < o → Ordinal.{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 < o → Ordinal.{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 < o → Ordinal.{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 < o → Ordinal.{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 < o → Ordinal.{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 < o → Ordinal.{u}} {c : Ordinal.{u}} (ho : o.card < c.cof) :
      (∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c) → o.bsup f < c
      @[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 : α), ∃ b ∈ S, 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 α) :
      ∃ x ∈ s, 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