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 #
Cardinal.mul_eq_max
andCardinal.add_eq_max
state that the product (resp. sum) of two infinite cardinals is just their maximum. Several variations around this fact are also given.Cardinal.mk_list_eq_mk
: whenα
is infinite,α
andList α
have the same cardinality.
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_lt_of_lt
{a b c : Cardinal.{u_1}}
(hc : aleph0 ≤ c)
(h1 : a < c)
(h2 : b < c)
:
theorem
Cardinal.mul_eq_max_of_aleph0_le_left
{a b : Cardinal.{u_1}}
(h : aleph0 ≤ a)
(h' : b ≠ 0)
:
theorem
Cardinal.mul_eq_max_of_aleph0_le_right
{a b : Cardinal.{u_1}}
(h' : a ≠ 0)
(h : aleph0 ≤ 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 β
.
theorem
Cardinal.add_le_of_le
{a b c : Cardinal.{u_1}}
(hc : aleph0 ≤ c)
(h1 : a ≤ c)
(h2 : b ≤ c)
:
theorem
Cardinal.add_lt_of_lt
{a b c : Cardinal.{u_1}}
(hc : aleph0 ≤ c)
(h1 : a < c)
(h2 : b < c)
:
theorem
Cardinal.eq_of_add_eq_of_aleph0_le
{a b c : Cardinal.{u_1}}
(h : a + b = c)
(ha : a < c)
(hc : aleph0 ≤ c)
:
b = c
theorem
Cardinal.eq_of_add_eq_add_left
{a b c : Cardinal.{u_1}}
(h : a + b = a + c)
(ha : a < aleph0)
:
b = c
theorem
Cardinal.eq_of_add_eq_add_right
{a b c : Cardinal.{u_1}}
(h : a + b = c + b)
(hb : b < aleph0)
:
a = c
Properties of ciSup
#
theorem
Cardinal.ciSup_add
{ι : Type u}
(f : ι → Cardinal.{v})
[Nonempty ι]
(hf : BddAbove (Set.range f))
(c : Cardinal.{v})
:
theorem
Cardinal.add_ciSup
{ι : Type u}
(f : ι → Cardinal.{v})
[Nonempty ι]
(hf : BddAbove (Set.range f))
(c : Cardinal.{v})
:
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))
:
theorem
Cardinal.ciSup_mul_ciSup
{ι : Type u}
{ι' : Type w}
(f : ι → Cardinal.{v})
(g : ι' → Cardinal.{v})
:
theorem
Cardinal.sum_eq_iSup_lift
{ι : Type u}
{f : ι → Cardinal.{max u v}}
(hι : aleph0 ≤ mk ι)
(h : lift.{v, u} (mk ι) ≤ iSup f)
:
Properties of aleph
#
@[simp]
theorem
Cardinal.principal_add_ord
{c : Cardinal.{u_1}}
(hc : aleph0 ≤ c)
:
Ordinal.Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) c.ord
theorem
Cardinal.principal_add_aleph
(o : Ordinal.{u_1})
:
Ordinal.Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 + x2) (aleph o).ord
@[simp]
Properties about power
#
theorem
Cardinal.prod_eq_two_power
{ι : Type u}
[Infinite ι]
{c : ι → Cardinal.{v}}
(h₁ : ∀ (i : ι), 2 ≤ c i)
(h₂ : ∀ (i : ι), lift.{u, v} (c i) ≤ lift.{v, u} (mk ι))
:
prod c = 2 ^ lift.{v, u} (mk ι)
theorem
Cardinal.power_eq_two_power
{c₁ c₂ : Cardinal.{u_1}}
(h₁ : aleph0 ≤ c₁)
(h₂ : 2 ≤ c₂)
(h₂' : c₂ ≤ c₁)
:
Computing cardinality of various types #
theorem
Cardinal.mk_equiv_eq_zero_iff_lift_ne
{α : Type u}
{β' : Type v}
:
mk (α ≃ β') = 0 ↔ lift.{v, u} (mk α) ≠ lift.{u, v} (mk β')
theorem
Cardinal.mk_embedding_eq_zero_iff_lift_lt
{α : Type u}
{β' : Type v}
:
mk (α ↪ β') = 0 ↔ lift.{u, v} (mk β') < lift.{v, u} (mk α)
theorem
Cardinal.mk_surjective_eq_zero_iff_lift
{α : Type u}
{β' : Type v}
:
mk ↑{f : α → β' | Function.Surjective f} = 0 ↔ lift.{v, u} (mk α) < lift.{u, v} (mk β') ∨ mk α ≠ 0 ∧ mk β' = 0
theorem
Cardinal.mk_equiv_eq_arrow_of_lift_eq
{α : Type u}
{β' : Type v}
[Infinite α]
(leq : lift.{v, u} (mk α) = lift.{u, v} (mk β'))
:
theorem
Cardinal.mk_equiv_of_lift_eq
{α : Type u}
{β' : Type v}
[Infinite α]
(leq : lift.{v, u} (mk α) = lift.{u, v} (mk β'))
:
theorem
Cardinal.mk_embedding_eq_arrow_of_lift_le
{α : Type u}
{β' : Type v}
[Infinite α]
(lle : lift.{u, v} (mk β') ≤ lift.{v, u} (mk α))
:
theorem
Cardinal.mk_surjective_eq_arrow_of_lift_le
{α : Type u}
{β' : Type v}
[Infinite α]
(lle : lift.{u, v} (mk β') ≤ lift.{v, u} (mk α))
:
mk ↑{f : α → β' | Function.Surjective f} = mk (α → β')
Properties of compl
#
theorem
Cardinal.mk_compl_eq_mk_compl_finite_lift
{α : Type u}
{β : Type v}
[Finite α]
{s : Set α}
{t : Set β}
(h1 : lift.{max v w, u} (mk α) = lift.{max u w, v} (mk β))
(h2 : lift.{max v w, u} (mk ↑s) = lift.{max u w, v} (mk ↑t))
:
lift.{max v w, u} (mk ↑sᶜ) = lift.{max u w, v} (mk ↑tᶜ)
Extending an injection to an equiv #
Cardinal operations with ordinal indices #
theorem
Cardinal.mk_iUnion_Ordinal_lift_le_of_le
{β : Type v}
{o : Ordinal.{u}}
{c : Cardinal.{v}}
(ho : lift.{v, u} o.card ≤ lift.{u, v} c)
(hc : aleph0 ≤ c)
(A : Ordinal.{u} → Set β)
(hA : ∀ j < o, mk ↑(A j) ≤ c)
:
mk ↑(⋃ (j : Ordinal.{u}), ⋃ (_ : j < o), A j) ≤ c
Bounds the cardinal of an ordinal-indexed union of sets.
theorem
Cardinal.mk_iUnion_Ordinal_le_of_le
{β : Type u_1}
{o : Ordinal.{u_1}}
{c : Cardinal.{u_1}}
(ho : o.card ≤ c)
(hc : aleph0 ≤ c)
(A : Ordinal.{u_1} → Set β)
(hA : ∀ j < o, mk ↑(A j) ≤ c)
:
mk ↑(⋃ (j : Ordinal.{u_1}), ⋃ (_ : j < o), A j) ≤ c
@[deprecated Cardinal.mk_iUnion_Ordinal_le_of_le (since := "2024-11-02")]
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
Alias of Cardinal.mk_iUnion_Ordinal_le_of_le
.
Cardinality of ordinals #
theorem
Ordinal.lift_card_iSup_le_sum_card
{ι : Type u}
[Small.{v, u} ι]
(f : ι → Ordinal.{v})
:
Cardinal.lift.{u, v} (⨆ (i : ι), f i).card ≤ Cardinal.sum fun (i : ι) => (f i).card
theorem
Ordinal.card_iSup_le_sum_card
{ι : Type u}
(f : ι → Ordinal.{max u v})
:
(⨆ (i : ι), f i).card ≤ Cardinal.sum fun (i : ι) => (f i).card
theorem
Ordinal.card_iSup_Iio_le_sum_card
{o : Ordinal.{u}}
(f : ↑(Set.Iio o) → Ordinal.{max u v})
:
(⨆ (a : ↑(Set.Iio o)), f a).card ≤ Cardinal.sum fun (i : o.toType) => (f (o.enumIsoToType.symm i)).card
theorem
Ordinal.card_iSup_Iio_le_card_mul_iSup
{o : Ordinal.{u}}
(f : ↑(Set.Iio o) → Ordinal.{max u v})
:
(⨆ (a : ↑(Set.Iio o)), f a).card ≤ Cardinal.lift.{v, u} o.card * ⨆ (a : ↑(Set.Iio o)), (f a).card
theorem
Ordinal.card_opow_le_of_omega0_le_left
{a : Ordinal.{u_1}}
(ha : omega0 ≤ a)
(b : Ordinal.{u_1})
:
theorem
Ordinal.card_opow_le_of_omega0_le_right
(a : Ordinal.{u_1})
{b : Ordinal.{u_1}}
(hb : omega0 ≤ b)
:
theorem
Ordinal.card_opow_le
(a b : Ordinal.{u_1})
:
(a ^ b).card ≤ Cardinal.aleph0 ⊔ (a.card ⊔ b.card)
theorem
Ordinal.card_opow_eq_of_omega0_le_left
{a b : Ordinal.{u_1}}
(ha : omega0 ≤ a)
(hb : 0 < b)
:
theorem
Ordinal.card_opow_eq_of_omega0_le_right
{a b : Ordinal.{u_1}}
(ha : 1 < a)
(hb : omega0 ≤ b)
:
theorem
Ordinal.card_omega0_opow
{a : Ordinal.{u_1}}
(h : a ≠ 0)
:
(omega0 ^ a).card = Cardinal.aleph0 ⊔ a.card
theorem
Ordinal.card_opow_omega0
{a : Ordinal.{u_1}}
(h : 1 < a)
:
(a ^ omega0).card = Cardinal.aleph0 ⊔ a.card
theorem
Ordinal.principal_opow_omega
(o : Ordinal.{u_1})
:
Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 ^ x2) (omega o)
theorem
Ordinal.IsInitial.principal_opow
{o : Ordinal.{u_1}}
(h : o.IsInitial)
(ho : omega0 ≤ o)
:
Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 ^ x2) o
theorem
Ordinal.principal_opow_ord
{c : Cardinal.{u_1}}
(hc : Cardinal.aleph0 ≤ c)
:
Principal (fun (x1 x2 : Ordinal.{u_1}) => x1 ^ x2) c.ord