Documentation

Mathlib.SetTheory.Cardinal.Arithmetic

Cardinal arithmetic #

Arithmetic operations on cardinals are defined in SetTheory/Cardinal/Basic.lean. However, proving the important theorem c * c = c for infinite cardinals and its corollaries requires the use of ordinal numbers. This is done within this file.

Main statements #

Tags #

cardinal arithmetic (for infinite cardinals)

Properties of mul #

If α is an infinite type, then α × α and α have the same cardinality.

If α and β are infinite types, then the cardinality of α × β is the maximum of the cardinalities of α and β.

@[simp]
theorem Cardinal.mul_mk_eq_max {α : Type u} {β : Type u} [Infinite α] [Infinite β] :
@[simp]
theorem Cardinal.aleph_mul_aleph (o₁ : Ordinal.{u_1}) (o₂ : Ordinal.{u_1}) :
Cardinal.aleph o₁ * Cardinal.aleph o₂ = Cardinal.aleph (max o₁ o₂)
@[simp]
theorem Cardinal.aleph0_mul_aleph (o : Ordinal.{u_1}) :
Cardinal.aleph0 * Cardinal.aleph o = Cardinal.aleph o
@[simp]
theorem Cardinal.aleph_mul_aleph0 (o : Ordinal.{u_1}) :
Cardinal.aleph o * Cardinal.aleph0 = Cardinal.aleph o
theorem Cardinal.mul_lt_of_lt {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} (hc : Cardinal.aleph0 ≤ c) (h1 : a < c) (h2 : b < c) :
a * b < c
theorem Cardinal.mul_eq_left {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (ha : Cardinal.aleph0 ≤ a) (hb : b ≤ a) (hb' : b ≠ 0) :
a * b = a
theorem Cardinal.mul_eq_right {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (hb : Cardinal.aleph0 ≤ b) (ha : a ≤ b) (ha' : a ≠ 0) :
a * b = b
theorem Cardinal.le_mul_left {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (h : b ≠ 0) :
a ≤ b * a
theorem Cardinal.le_mul_right {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (h : b ≠ 0) :
a ≤ a * b

Properties of add #

If α is an infinite type, then α ⊕ α and α have the same cardinality.

If α is an infinite type, then the cardinality of α ⊕ β is the maximum of the cardinalities of α and β.

@[simp]
theorem Cardinal.add_mk_eq_max {α : Type u} {β : Type u} [Infinite α] :
@[simp]
theorem Cardinal.add_le_of_le {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} (hc : Cardinal.aleph0 ≤ c) (h1 : a ≤ c) (h2 : b ≤ c) :
a + b ≤ c
theorem Cardinal.add_lt_of_lt {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} (hc : Cardinal.aleph0 ≤ c) (h1 : a < c) (h2 : b < c) :
a + b < c
theorem Cardinal.eq_of_add_eq_of_aleph0_le {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} (h : a + b = c) (ha : a < c) (hc : Cardinal.aleph0 ≤ c) :
b = c
theorem Cardinal.add_eq_left {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (ha : Cardinal.aleph0 ≤ a) (hb : b ≤ a) :
a + b = a
theorem Cardinal.add_eq_right {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (hb : Cardinal.aleph0 ≤ b) (ha : a ≤ b) :
a + b = b
theorem Cardinal.add_nat_eq {a : Cardinal.{u_1}} (n : ℕ) (ha : Cardinal.aleph0 ≤ a) :
a + ↑n = a
theorem Cardinal.nat_add_eq {a : Cardinal.{u_1}} (n : ℕ) (ha : Cardinal.aleph0 ≤ a) :
↑n + a = a

Properties of ciSup #

theorem Cardinal.ciSup_add {ι : Type u} (f : ι → Cardinal.{v}) [Nonempty ι] (hf : BddAbove (Set.range f)) (c : Cardinal.{v}) :
(⨆ (i : ι), f i) + c = ⨆ (i : ι), f i + c
theorem Cardinal.add_ciSup {ι : Type u} (f : ι → Cardinal.{v}) [Nonempty ι] (hf : BddAbove (Set.range f)) (c : Cardinal.{v}) :
c + ⨆ (i : ι), f i = ⨆ (i : ι), c + f i
theorem Cardinal.ciSup_add_ciSup {ι : Type u} {ι' : Type w} (f : ι → Cardinal.{v}) [Nonempty ι] [Nonempty ι'] (hf : BddAbove (Set.range f)) (g : ι' → Cardinal.{v}) (hg : BddAbove (Set.range g)) :
(⨆ (i : ι), f i) + ⨆ (j : ι'), g j = ⨆ (i : ι), ⨆ (j : ι'), f i + g j
theorem Cardinal.ciSup_mul {ι : Type u} (f : ι → Cardinal.{v}) (c : Cardinal.{v}) :
(⨆ (i : ι), f i) * c = ⨆ (i : ι), f i * c
theorem Cardinal.mul_ciSup {ι : Type u} (f : ι → Cardinal.{v}) (c : Cardinal.{v}) :
c * ⨆ (i : ι), f i = ⨆ (i : ι), c * f i
theorem Cardinal.ciSup_mul_ciSup {ι : Type u} {ι' : Type w} (f : ι → Cardinal.{v}) (g : ι' → Cardinal.{v}) :
(⨆ (i : ι), f i) * ⨆ (j : ι'), g j = ⨆ (i : ι), ⨆ (j : ι'), f i * g j

Properties of aleph #

@[simp]
theorem Cardinal.aleph_add_aleph (o₁ : Ordinal.{u_1}) (o₂ : Ordinal.{u_1}) :
Cardinal.aleph o₁ + Cardinal.aleph o₂ = Cardinal.aleph (max o₁ o₂)
theorem Cardinal.principal_add_aleph (o : Ordinal.{u_1}) :
Ordinal.Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) (Cardinal.aleph o).ord
theorem Cardinal.add_right_inj_of_lt_aleph0 {α : Cardinal.{u_1}} {β : Cardinal.{u_1}} {γ : Cardinal.{u_1}} (γ₀ : γ < Cardinal.aleph0) :
α + γ = β + γ ↔ α = β
@[simp]
theorem Cardinal.add_nat_inj {α : Cardinal.{u_1}} {β : Cardinal.{u_1}} (n : ℕ) :
α + ↑n = β + ↑n ↔ α = β
@[simp]
theorem Cardinal.add_one_inj {α : Cardinal.{u_1}} {β : Cardinal.{u_1}} :
α + 1 = β + 1 ↔ α = β
@[simp]
theorem Cardinal.add_nat_le_add_nat_iff {α : Cardinal.{u_1}} {β : Cardinal.{u_1}} (n : ℕ) :
α + ↑n ≤ β + ↑n ↔ α ≤ β
@[deprecated Cardinal.add_nat_le_add_nat_iff]
theorem Cardinal.add_nat_le_add_nat_iff_of_lt_aleph_0 {α : Cardinal.{u_1}} {β : Cardinal.{u_1}} (n : ℕ) :
α + ↑n ≤ β + ↑n ↔ α ≤ β

Alias of Cardinal.add_nat_le_add_nat_iff.

@[simp]
@[deprecated Cardinal.add_one_le_add_one_iff]

Alias of Cardinal.add_one_le_add_one_iff.

Properties about power #

theorem Cardinal.pow_le {κ : Cardinal.{u}} {μ : Cardinal.{u}} (H1 : Cardinal.aleph0 ≤ κ) (H2 : μ < Cardinal.aleph0) :
κ ^ μ ≤ κ
theorem Cardinal.pow_eq {κ : Cardinal.{u}} {μ : Cardinal.{u}} (H1 : Cardinal.aleph0 ≤ κ) (H2 : 1 ≤ μ) (H3 : μ < Cardinal.aleph0) :
κ ^ μ = κ
theorem Cardinal.prod_eq_two_power {ι : Type u} [Infinite ι] {c : ι → Cardinal.{v}} (h₁ : ∀ (i : ι), 2 ≤ c i) (h₂ : ∀ (i : ι), Cardinal.lift.{u, v} (c i) ≤ Cardinal.lift.{v, u} (Cardinal.mk ι)) :
theorem Cardinal.power_eq_two_power {c₁ : Cardinal.{u_1}} {c₂ : Cardinal.{u_1}} (h₁ : Cardinal.aleph0 ≤ c₁) (h₂ : 2 ≤ c₂) (h₂' : c₂ ≤ c₁) :
c₂ ^ c₁ = 2 ^ c₁
theorem Cardinal.nat_power_eq {c : Cardinal.{u}} (h : Cardinal.aleph0 ≤ c) {n : ℕ} (hn : 2 ≤ n) :
↑n ^ c = 2 ^ c
theorem Cardinal.power_nat_eq {c : Cardinal.{u}} {n : ℕ} (h1 : Cardinal.aleph0 ≤ c) (h2 : 1 ≤ n) :
c ^ n = c

Computing cardinality of various types #

theorem Cardinal.mk_equiv_comm {α : Type u} {β' : Type v} :
Cardinal.mk (α ≃ β') = Cardinal.mk (β' ≃ α)

This lemma makes lemmas assuming Infinite α applicable to the situation where we have Infinite β instead.

theorem Cardinal.mk_arrow_eq_zero_iff {α : Type u} {β' : Type v} :
Cardinal.mk (α → β') = 0 ↔ Cardinal.mk α ≠ 0 ∧ Cardinal.mk β' = 0
theorem Cardinal.mk_equiv_le_embedding (α : Type u) (β' : Type v) :
Cardinal.mk (α ≃ β') ≤ Cardinal.mk (α ↪ β')
theorem Cardinal.mk_embedding_le_arrow (α : Type u) (β' : Type v) :
Cardinal.mk (α ↪ β') ≤ Cardinal.mk (α → β')
theorem Cardinal.mk_equiv_eq_arrow_of_eq {α : Type u} {β : Type u} [Infinite α] (eq : Cardinal.mk α = Cardinal.mk β) :
Cardinal.mk (α ≃ β) = Cardinal.mk (α → β)
theorem Cardinal.mk_equiv_of_eq {α : Type u} {β : Type u} [Infinite α] (eq : Cardinal.mk α = Cardinal.mk β) :
theorem Cardinal.mk_embedding_eq_arrow_of_le {α : Type u} {β : Type u} [Infinite α] (le : Cardinal.mk β ≤ Cardinal.mk α) :
Cardinal.mk (β ↪ α) = Cardinal.mk (β → α)
theorem Cardinal.mk_surjective_eq_arrow_of_le {α : Type u} {β : Type u} [Infinite α] (le : Cardinal.mk β ≤ Cardinal.mk α) :
Cardinal.mk ↑{f : α → β | Function.Surjective f} = Cardinal.mk (α → β)
@[simp]
theorem Cardinal.mk_bounded_subset_le {α : Type u} (s : Set α) (c : Cardinal.{u}) :

Properties of compl #

theorem Cardinal.mk_compl_of_infinite {α : Type u_1} [Infinite α] (s : Set α) (h2 : Cardinal.mk ↑s < Cardinal.mk α) :
theorem Cardinal.mk_compl_eq_mk_compl_infinite {α : Type u_1} [Infinite α] {s : Set α} {t : Set α} (hs : Cardinal.mk ↑s < Cardinal.mk α) (ht : Cardinal.mk ↑t < Cardinal.mk α) :
theorem Cardinal.mk_compl_eq_mk_compl_finite {α : Type u} {β : Type u} [Finite α] {s : Set α} {t : Set β} (h1 : Cardinal.mk α = Cardinal.mk β) (h : Cardinal.mk ↑s = Cardinal.mk ↑t) :
theorem Cardinal.mk_compl_eq_mk_compl_finite_same {α : Type u} [Finite α] {s : Set α} {t : Set α} (h : Cardinal.mk ↑s = Cardinal.mk ↑t) :

Extending an injection to an equiv #

theorem Cardinal.extend_function {α : Type u_1} {β : Type u_2} {s : Set α} (f : ↑s ↪ β) (h : Nonempty (↑sᶜ ≃ ↑(Set.range ⇑f)ᶜ)) :
∃ (g : α ≃ β), ∀ (x : ↑s), g ↑x = f x
theorem Cardinal.extend_function_finite {α : Type u} {β : Type v} [Finite α] {s : Set α} (f : ↑s ↪ β) (h : Nonempty (α ≃ β)) :
∃ (g : α ≃ β), ∀ (x : ↑s), g ↑x = f x
theorem Cardinal.extend_function_of_lt {α : Type u_1} {β : Type u_2} {s : Set α} (f : ↑s ↪ β) (hs : Cardinal.mk ↑s < Cardinal.mk α) (h : Nonempty (α ≃ β)) :
∃ (g : α ≃ β), ∀ (x : ↑s), g ↑x = f x

Cardinal operations with ordinal indices #

Results on cardinality of ordinal-indexed families of sets.

theorem Ordinal.Cardinal.mk_iUnion_Ordinal_le_of_le {β : Type u_1} {o : Ordinal.{u_1}} {c : Cardinal.{u_1}} (ho : o.card ≤ c) (hc : Cardinal.aleph0 ≤ c) (A : Ordinal.{u_1} → Set β) (hA : ∀ j < o, Cardinal.mk ↑(A j) ≤ c) :
Cardinal.mk ↑(⋃ (j : Ordinal.{u_1}), ⋃ (_ : j < o), A j) ≤ c

Bounding the cardinal of an ordinal-indexed union of sets.