# Cardinal Numbers #

We define cardinal numbers as a quotient of types under the equivalence relation of equinumerity.

## Main definitions #

• Cardinal is the type of cardinal numbers (in a given universe).
• Cardinal.mk α or #α is the cardinality of α. The notation # lives in the locale Cardinal.
• Addition c₁ + c₂ is defined by Cardinal.add_def α β : #α + #β = #(α ⊕ β).
• Multiplication c₁ * c₂ is defined by Cardinal.mul_def : #α * #β = #(α × β).
• The order c₁ ≤ c₂ is defined by Cardinal.le_def α β : #α ≤ #β ↔ Nonempty (α ↪ β).
• Exponentiation c₁ ^ c₂ is defined by Cardinal.power_def α β : #α ^ #β = #(β → α).
• Cardinal.isLimit c means that c is a (weak) limit cardinal: c ≠ 0 ∧ ∀ x < c, succ x < c.
• Cardinal.aleph0 or ℵ₀ is the cardinality of ℕ. This definition is universe polymorphic: Cardinal.aleph0.{u} : Cardinal.{u} (contrast with ℕ : Type, which lives in a specific universe). In some cases the universe level has to be given explicitly.
• Cardinal.sum is the sum of an indexed family of cardinals, i.e. the cardinality of the corresponding sigma type.
• Cardinal.prod is the product of an indexed family of cardinals, i.e. the cardinality of the corresponding pi type.
• Cardinal.powerlt a b or a ^< b is defined as the supremum of a ^ c for c < b.

## Main instances #

• Cardinals form a CanonicallyOrderedCommSemiring with the aforementioned sum and product.
• Cardinals form a SuccOrder. Use Order.succ c for the smallest cardinal greater than c.
• The less than relation on cardinals forms a well-order.
• Cardinals form a ConditionallyCompleteLinearOrderBot. Bounded sets for cardinals in universe u are precisely the sets indexed by some type in universe u, see Cardinal.bddAbove_iff_small. One can use sSup for the cardinal supremum, and sInf for the minimum of a set of cardinals.

## Main Statements #

• Cantor's theorem: Cardinal.cantor c : c < 2 ^ c.
• König's theorem: Cardinal.sum_lt_prod

## Implementation notes #

• There is a type of cardinal numbers in every universe level: Cardinal.{u} : Type (u + 1) is the quotient of types in Type u. The operation Cardinal.lift lifts cardinal numbers to a higher level.
• Cardinal arithmetic specifically for infinite cardinals (like κ * κ = κ) is in the file Mathlib/SetTheory/Cardinal/Ordinal.lean.
• There is an instance Pow Cardinal, but this will only fire if Lean already knows that both the base and the exponent live in the same universe. As a workaround, you can add
  local infixr:80 " ^' " => @HPow.hPow Cardinal Cardinal Cardinal _

to a file. This notation will work even if Lean doesn't know yet that the base and the exponent live in the same universe (but no exponents in other types can be used). (Porting note: This last point might need to be updated.)

## Tags #

cardinal number, cardinal arithmetic, cardinal exponentiation, aleph, Cantor's theorem, König's theorem, Konig's theorem

The equivalence relation on types given by equivalence (bijective correspondence) of types. Quotienting by this equivalence relation gives the cardinal numbers.

Equations
def Cardinal :
Type (u + 1)

Cardinal.{u} is the type of cardinal numbers in Type u, defined as the quotient of Type u by existence of an equivalence (a bijection with explicit inverse).

Equations
Instances For

The cardinal number of a type

Equations
Instances For

The cardinal number of a type

Equations
Instances For
theorem Cardinal.inductionOn {p : } (c : Cardinal.{u_1}) (h : ∀ (α : Type u_1), p ()) :
p c
theorem Cardinal.inductionOn₂ {p : } (c₁ : Cardinal.{u_1}) (c₂ : Cardinal.{u_2}) (h : ∀ (α : Type u_1) (β : Type u_2), p () ()) :
p c₁ c₂
theorem Cardinal.inductionOn₃ {p : } (c₁ : Cardinal.{u_1}) (c₂ : Cardinal.{u_2}) (c₃ : Cardinal.{u_3}) (h : ∀ (α : Type u_1) (β : Type u_2) (γ : Type u_3), p () () ()) :
p c₁ c₂ c₃
theorem Cardinal.eq {α : Type u} {β : Type u} :
Nonempty (α β)
@[simp]
theorem Cardinal.mk'_def (α : Type u) :
α =
@[simp]
theorem Cardinal.mk_out (c : Cardinal.{u_1}) :
= c
def Cardinal.outMkEquiv {α : Type v} :
α

The representative of the cardinal of a type is equivalent to the original type.

Equations
• Cardinal.outMkEquiv =
Instances For
theorem Cardinal.mk_congr {α : Type u} {β : Type u} (e : α β) :
theorem Equiv.cardinal_eq {α : Type u} {β : Type u} (e : α β) :

Alias of Cardinal.mk_congr.

def Cardinal.map (f : Type u → Type v) (hf : (α β : Type u) → α βf α f β) :

Lift a function between Type*s to a function between Cardinals.

Equations
Instances For
@[simp]
theorem Cardinal.map_mk (f : Type u → Type v) (hf : (α β : Type u) → α βf α f β) (α : Type u) :
Cardinal.map f hf () = Cardinal.mk (f α)
def Cardinal.map₂ (f : Type u → Type v → Type w) (hf : (α β : Type u) → (γ δ : Type v) → α βγ δf α γ f β δ) :

Lift a binary operation Type* → Type* → Type* to a binary operation on Cardinals.

Equations
Instances For

The universe lift operation on cardinals. You can specify the universes explicitly with lift.{u v} : Cardinal.{v} → Cardinal.{max v u}

Equations
Instances For
@[simp]
theorem Cardinal.mk_uLift (α : Type u) :
@[simp]

lift.{max u v, u} equals lift.{v, u}.

@[simp]

lift.{max v u, u} equals lift.{v, u}.

@[simp]

A cardinal lifted to a lower or equal universe equals itself.

@[simp]
theorem Cardinal.lift_id (a : Cardinal.{u}) :
= a

A cardinal lifted to the same universe equals itself.

A cardinal lifted to the zero universe equals itself.

@[simp]

We define the order on cardinal numbers by #α ≤ #β if and only if there exists an embedding (injective function) from α to β.

Equations
Equations
• One or more equations did not get rendered due to their size.
theorem Cardinal.le_def (α : Type u) (β : Type u) :
Nonempty (α β)
theorem Cardinal.mk_le_of_injective {α : Type u} {β : Type u} {f : αβ} (hf : ) :
theorem Function.Embedding.cardinal_le {α : Type u} {β : Type u} (f : α β) :
theorem Cardinal.mk_le_of_surjective {α : Type u} {β : Type u} {f : αβ} (hf : ) :
theorem Cardinal.le_mk_iff_exists_set {c : Cardinal.{u}} {α : Type u} :
c ∃ (p : Set α), = c
theorem Cardinal.mk_subtype_le {α : Type u} (p : αProp) :
theorem Cardinal.mk_set_le {α : Type u} (s : Set α) :
@[simp]
theorem Cardinal.mk_preimage_down {α : Type u} {s : Set α} :
Cardinal.mk (ULift.down ⁻¹' s) =
theorem Cardinal.lift_mk_le {α : Type v} {β : Type w} :
Nonempty (α β)
theorem Cardinal.lift_mk_le' {α : Type u} {β : Type v} :
Nonempty (α β)

A variant of Cardinal.lift_mk_le with specialized universes. Because Lean often can not realize it should use this specialization itself, we provide this statement separately so you don't have to solve the specialization problem either.

theorem Cardinal.lift_mk_eq {α : Type u} {β : Type v} :
= Nonempty (α β)
theorem Cardinal.lift_mk_eq' {α : Type u} {β : Type v} :
= Nonempty (α β)

A variant of Cardinal.lift_mk_eq with specialized universes. Because Lean often can not realize it should use this specialization itself, we provide this statement separately so you don't have to solve the specialization problem either.

@[simp]

Cardinal.lift as an OrderEmbedding.

Equations
Instances For
@[simp]
theorem Cardinal.lift_inj {a : Cardinal.{u}} {b : Cardinal.{u}} :
a = b
@[simp]
theorem Cardinal.lift_lt {a : Cardinal.{u}} {b : Cardinal.{u}} :
a < b
Equations
Equations
@[simp]
theorem Cardinal.mk_eq_zero (α : Type u) [] :
= 0
@[simp]
theorem Cardinal.lift_zero :
= 0
@[simp]
theorem Cardinal.lift_eq_zero {a : Cardinal.{v}} :
= 0 a = 0
theorem Cardinal.mk_eq_zero_iff {α : Type u} :
= 0
@[simp]
theorem Cardinal.mk_ne_zero (α : Type u) [] :
0
Equations
theorem Cardinal.mk_eq_one (α : Type u) [] :
= 1
@[simp]
theorem Cardinal.mk_le_one_iff_set_subsingleton {α : Type u} {s : Set α} :
1
theorem Set.Subsingleton.cardinal_mk_le_one {α : Type u} {s : Set α} :
1

Alias of the reverse direction of Cardinal.mk_le_one_iff_set_subsingleton.

Equations
theorem Cardinal.add_def (α : Type u) (β : Type u) :
= Cardinal.mk (α β)
Equations
@[simp]
theorem Cardinal.mk_sum (α : Type u) (β : Type v) :
Cardinal.mk (α β) = +
@[simp]
theorem Cardinal.mk_option {α : Type u} :
= + 1
@[simp]
theorem Cardinal.mk_psum (α : Type u) (β : Type v) :
Cardinal.mk (α ⊕' β) = +
@[simp]
theorem Cardinal.mk_fintype (α : Type u) [h : ] :
= ()
theorem Cardinal.cast_succ (n : ) :
(n + 1) = n + 1
Equations
theorem Cardinal.mul_def (α : Type u) (β : Type u) :
= Cardinal.mk (α × β)
@[simp]
theorem Cardinal.mk_prod (α : Type u) (β : Type v) :
Cardinal.mk (α × β) = *

The cardinal exponential. #α ^ #β is the cardinal of β → α.

Equations
theorem Cardinal.power_def (α : Type u) (β : Type u) :
= Cardinal.mk (βα)
theorem Cardinal.mk_arrow (α : Type u) (β : Type v) :
Cardinal.mk (αβ) = ^
@[simp]
theorem Cardinal.power_zero {a : Cardinal.{u_1}} :
a ^ 0 = 1
@[simp]
theorem Cardinal.power_one {a : Cardinal.{u}} :
a ^ 1 = a
theorem Cardinal.power_add {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} :
a ^ (b + c) = a ^ b * a ^ c

Porting note (#11229): Deprecated section. Remove.

@[deprecated]
theorem Cardinal.power_bit0 (a : Cardinal.{u_1}) (b : Cardinal.{u_1}) :
a ^ bit0 b = a ^ b * a ^ b
@[deprecated]
theorem Cardinal.power_bit1 (a : Cardinal.{u_1}) (b : Cardinal.{u_1}) :
a ^ bit1 b = a ^ b * a ^ b * a
@[simp]
theorem Cardinal.one_power {a : Cardinal.{u_1}} :
1 ^ a = 1
@[simp]
theorem Cardinal.zero_power {a : Cardinal.{u_1}} :
a 00 ^ a = 0
theorem Cardinal.mul_power {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} :
(a * b) ^ c = a ^ c * b ^ c
theorem Cardinal.power_mul {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} :
a ^ (b * c) = (a ^ b) ^ c
@[simp]
theorem Cardinal.pow_cast_right (a : Cardinal.{u}) (n : ) :
a ^ n = a ^ n
@[simp]
theorem Cardinal.lift_one :
= 1
@[simp]
theorem Cardinal.lift_eq_one {a : Cardinal.{v}} :
= 1 a = 1

Porting note (#11229): Deprecated section. Remove.

@[simp, deprecated]
@[simp, deprecated]
@[simp]
theorem Cardinal.mk_set {α : Type u} :
Cardinal.mk (Set α) = 2 ^
@[simp]
theorem Cardinal.mk_powerset {α : Type u} (s : Set α) :
Cardinal.mk (𝒫 s) = 2 ^

A variant of Cardinal.mk_set expressed in terms of a Set instead of a Type.

Equations
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
Equations
theorem Cardinal.power_le_power_left {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} :
a 0b ca ^ b a ^ c
theorem Cardinal.self_le_power (a : Cardinal.{u_1}) {b : Cardinal.{u_1}} (hb : 1 b) :
a a ^ b
theorem Cardinal.cantor (a : Cardinal.{u}) :
a < 2 ^ a

Cantor's theorem

theorem Cardinal.power_pos {a : Cardinal.{u_1}} (b : Cardinal.{u_1}) (ha : 0 < a) :
0 < a ^ b
theorem Cardinal.lt_wf :
WellFounded fun (x x_1 : Cardinal.{u}) => x < x_1
Equations
instance Cardinal.wo :
IsWellOrder Cardinal.{u} fun (x x_1 : Cardinal.{u}) => x < x_1
Equations
@[simp]
theorem Cardinal.sInf_eq_zero_iff {s : } :
sInf s = 0 s = ∃ a ∈ s, a = 0
theorem Cardinal.iInf_eq_zero_iff {ι : Sort u_1} {f : } :
⨅ (i : ι), f i = 0 ∃ (i : ι), f i = 0

Note that the successor of c is not the same as c + 1 except in the case of finite c.

Equations
• One or more equations did not get rendered due to their size.

A cardinal is a limit if it is not zero or a successor cardinal. Note that ℵ₀ is a limit cardinal by this definition, but 0 isn't.

Use IsSuccLimit if you want to include the c = 0 case.

Equations
Instances For
theorem Cardinal.IsLimit.succ_lt {x : Cardinal.{u_1}} {c : Cardinal.{u_1}} (h : ) :
x < c < c
def Cardinal.sum {ι : Type u_1} (f : ) :

The indexed sum of cardinals is the cardinality of the indexed disjoint union, i.e. sigma type.

Equations
Instances For
theorem Cardinal.le_sum {ι : Type u_1} (f : ) (i : ι) :
f i
@[simp]
theorem Cardinal.mk_sigma {ι : Type u_2} (f : ιType u_1) :
Cardinal.mk ((i : ι) × f i) = Cardinal.sum fun (i : ι) => Cardinal.mk (f i)
@[simp]
theorem Cardinal.sum_const (ι : Type u) (a : Cardinal.{v}) :
(Cardinal.sum fun (x : ι) => a) = *
theorem Cardinal.sum_const' (ι : Type u) (a : Cardinal.{u}) :
(Cardinal.sum fun (x : ι) => a) = * a
@[simp]
theorem Cardinal.sum_add_distrib {ι : Type u_1} (f : ) (g : ) :
@[simp]
theorem Cardinal.sum_add_distrib' {ι : Type u_1} (f : ) (g : ) :
(Cardinal.sum fun (i : ι) => f i + g i) =
@[simp]
theorem Cardinal.lift_sum {ι : Type u} (f : ) :
= Cardinal.sum fun (i : ι) => Cardinal.lift.{w, v} (f i)
theorem Cardinal.sum_le_sum {ι : Type u_1} (f : ) (g : ) (H : ∀ (i : ι), f i g i) :
theorem Cardinal.mk_le_mk_mul_of_mk_preimage_le {α : Type u} {β : Type u} {c : Cardinal.{u}} (f : αβ) (hf : ∀ (b : β), Cardinal.mk (f ⁻¹' {b}) c) :
* c
theorem Cardinal.lift_mk_le_lift_mk_mul_of_lift_mk_preimage_le {α : Type u} {β : Type v} {c : Cardinal.{max u v} } (f : αβ) (hf : ∀ (b : β), Cardinal.lift.{v, u} (Cardinal.mk (f ⁻¹' {b})) c) :
* c
theorem Cardinal.bddAbove_range {ι : Type u} (f : ) :

The range of an indexed cardinal function, whose outputs live in a higher universe than the inputs, is always bounded above.

A set of cardinals is bounded above iff it's small, i.e. it corresponds to a usual ZFC set.

theorem Cardinal.bddAbove_of_small (s : ) [h : ] :
theorem Cardinal.bddAbove_image (f : ) {s : } (hs : ) :
BddAbove (f '' s)
theorem Cardinal.bddAbove_range_comp {ι : Type u} {f : } (hf : ) (g : ) :
theorem Cardinal.iSup_le_sum {ι : Type u_1} (f : ) :
theorem Cardinal.sum_le_iSup_lift {ι : Type u} (f : ) :
theorem Cardinal.sum_le_iSup {ι : Type u} (f : ) :
theorem Cardinal.sum_nat_eq_add_sum_succ (f : ) :
= f 0 + Cardinal.sum fun (i : ) => f (i + 1)
theorem Cardinal.iSup_of_empty {ι : Sort u_1} (f : ) [] :
iSup f = 0

A variant of ciSup_of_empty but with 0 on the RHS for convenience

theorem Cardinal.exists_eq_of_iSup_eq_of_not_isSuccLimit {ι : Type u} (f : ) (ω : Cardinal.{v}) (hω : ) (h : ⨆ (i : ι), f i = ω) :
∃ (i : ι), f i = ω
theorem Cardinal.exists_eq_of_iSup_eq_of_not_isLimit {ι : Type u} [hι : ] (f : ) (hf : ) (ω : Cardinal.{v}) (hω : ) (h : ⨆ (i : ι), f i = ω) :
∃ (i : ι), f i = ω
@[simp]
theorem Cardinal.lift_mk_shrink (α : Type u) [] :
=
@[simp]
theorem Cardinal.lift_mk_shrink' (α : Type u) [] :
=
@[simp]
def Cardinal.prod {ι : Type u} (f : ) :

The indexed product of cardinals is the cardinality of the Pi type (dependent product).

Equations
Instances For
@[simp]
theorem Cardinal.mk_pi {ι : Type u} (α : ιType v) :
Cardinal.mk ((i : ι) → α i) = Cardinal.prod fun (i : ι) => Cardinal.mk (α i)
@[simp]
theorem Cardinal.prod_const (ι : Type u) (a : Cardinal.{v}) :
(Cardinal.prod fun (x : ι) => a) = ^
theorem Cardinal.prod_const' (ι : Type u) (a : Cardinal.{u}) :
(Cardinal.prod fun (x : ι) => a) = a ^
theorem Cardinal.prod_le_prod {ι : Type u_1} (f : ) (g : ) (H : ∀ (i : ι), f i g i) :
@[simp]
theorem Cardinal.prod_eq_zero {ι : Type u_1} (f : ) :
∃ (i : ι), f i = 0
theorem Cardinal.prod_ne_zero {ι : Type u_1} (f : ) :
∀ (i : ι), f i 0
@[simp]
theorem Cardinal.lift_prod {ι : Type u} (c : ) :
= Cardinal.prod fun (i : ι) => Cardinal.lift.{w, v} (c i)
theorem Cardinal.prod_eq_of_fintype {α : Type u} [h : ] (f : ) :
= Cardinal.lift.{u, v} (Finset.prod Finset.univ fun (i : α) => f i)
@[simp]
theorem Cardinal.lift_sInf (s : ) :
= sInf ()
@[simp]
theorem Cardinal.lift_iInf {ι : Sort u_1} (f : ) :
= ⨅ (i : ι), Cardinal.lift.{u, v} (f i)
theorem Cardinal.lift_down {a : Cardinal.{u}} {b : Cardinal.{max u v} } :
b ∃ (a' : Cardinal.{u}), = b
@[simp]
theorem Cardinal.lift_sSup {s : } (hs : ) :
= sSup ()

The lift of a supremum is the supremum of the lifts.

theorem Cardinal.lift_iSup {ι : Type v} {f : } (hf : ) :
= ⨆ (i : ι), Cardinal.lift.{u, w} (f i)

The lift of a supremum is the supremum of the lifts.

theorem Cardinal.lift_iSup_le {ι : Type v} {f : } {t : Cardinal.{max u w} } (hf : ) (w : ∀ (i : ι), Cardinal.lift.{u, w} (f i) t) :
t

To prove that the lift of a supremum is bounded by some cardinal t, it suffices to show that the lift of each cardinal is bounded by t.

@[simp]
theorem Cardinal.lift_iSup_le_iff {ι : Type v} {f : } (hf : ) {t : Cardinal.{max u w} } :
t ∀ (i : ι), Cardinal.lift.{u, w} (f i) t
theorem Cardinal.lift_iSup_le_lift_iSup {ι : Type v} {ι' : Type v'} {f : } {f' : } (hf : ) (hf' : BddAbove ()) {g : ιι'} (h : ∀ (i : ι), Cardinal.lift.{w, w'} (f' (g i))) :

To prove an inequality between the lifts to a common universe of two different supremums, it suffices to show that the lift of each cardinal from the smaller supremum if bounded by the lift of some cardinal from the larger supremum.

theorem Cardinal.lift_iSup_le_lift_iSup' {ι : Type v} {ι' : Type v'} {f : } {f' : } (hf : ) (hf' : BddAbove ()) (g : ιι') (h : ∀ (i : ι), Cardinal.lift.{v, v'} (f' (g i))) :

A variant of lift_iSup_le_lift_iSup with universes specialized via w = v and w' = v'. This is sometimes necessary to avoid universe unification issues.

ℵ₀ is the smallest infinite cardinal.

Equations
Instances For

ℵ₀ is the smallest infinite cardinal.

Equations
Instances For
@[simp]

### Properties about the cast from ℕ#

theorem Cardinal.mk_fin (n : ) :
Cardinal.mk (Fin n) = n
@[simp]
theorem Cardinal.lift_natCast (n : ) :
= n
@[simp]
theorem Cardinal.lift_ofNat (n : ) [] :
@[simp]
theorem Cardinal.lift_eq_nat_iff {a : Cardinal.{u}} {n : } :
= n a = n
@[simp]
theorem Cardinal.lift_eq_ofNat_iff {a : Cardinal.{u}} {n : } [] :
a =
@[simp]
theorem Cardinal.nat_eq_lift_iff {n : } {a : Cardinal.{u}} :
n = n = a
@[simp]
@[simp]
@[simp]
theorem Cardinal.ofNat_eq_lift_iff {a : Cardinal.{u}} {n : } [] :
= a
@[simp]
theorem Cardinal.lift_le_nat_iff {a : Cardinal.{u}} {n : } :
n a n
@[simp]
@[simp]
theorem Cardinal.lift_le_ofNat_iff {a : Cardinal.{u}} {n : } [] :
a
@[simp]
theorem Cardinal.nat_le_lift_iff {n : } {a : Cardinal.{u}} :
n n a
@[simp]
@[simp]
theorem Cardinal.lift_lt_nat_iff {a : Cardinal.{u}} {n : } :
< n a < n
@[simp]
theorem Cardinal.lift_lt_ofNat_iff {a : Cardinal.{u}} {n : } [] :
a <
@[simp]
theorem Cardinal.nat_lt_lift_iff {n : } {a : Cardinal.{u}} :
n < n < a
@[simp]
@[simp]
@[simp]
theorem Cardinal.ofNat_lt_lift_iff {a : Cardinal.{u}} {n : } [] :
< a
theorem Cardinal.lift_mk_fin (n : ) :
= n
theorem Cardinal.mk_coe_finset {α : Type u} {s : } :
Cardinal.mk { x : α // x s } = s.card
@[simp]
theorem Cardinal.mk_finsupp_lift_of_fintype (α : Type u) (β : Type v) [] [Zero β] :
theorem Cardinal.mk_finsupp_of_fintype (α : Type u) (β : Type u) [] [Zero β] :
theorem Cardinal.card_le_of_finset {α : Type u_1} (s : ) :
s.card
theorem Cardinal.natCast_pow {m : } {n : } :
(m ^ n) = m ^ n
theorem Cardinal.natCast_le {m : } {n : } :
m n m n
theorem Cardinal.natCast_lt {m : } {n : } :
m < n m < n
theorem Cardinal.natCast_inj {m : } {n : } :
m = n m = n
@[simp]
theorem Cardinal.nat_succ (n : ) :
() =
theorem Cardinal.succ_natCast (n : ) :
= n + 1
theorem Cardinal.natCast_add_one_le_iff {n : } {c : Cardinal.{u_1}} :
n + 1 c n < c
@[simp]
theorem Cardinal.succ_zero :
= 1
theorem Cardinal.exists_finset_le_card (α : Type u_1) (n : ) (h : n ) :
∃ (s : ), n s.card
theorem Cardinal.card_le_of {α : Type u} {n : } (H : ∀ (s : ), s.card n) :
n
theorem Cardinal.cantor' (a : Cardinal.{u_1}) {b : Cardinal.{u_1}} (hb : 1 < b) :
a < b ^ a
@[simp]
theorem Cardinal.lt_aleph0 {c : Cardinal.{u_1}} :
∃ (n : ), c = n
theorem Cardinal.aleph0_le {c : Cardinal.{u_1}} :
∀ (n : ), n c
theorem Cardinal.exists_eq_natCast_of_iSup_eq {ι : Type u} [] (f : ) (hf : ) (n : ) (h : ⨆ (i : ι), f i = n) :
∃ (i : ι), f i = n
@[simp]
theorem Cardinal.mk_eq_nat_iff {α : Type u} {n : } :
= n Nonempty (α Fin n)
theorem Set.Finite.lt_aleph0 {α : Type u} {S : Set α} :

Alias of the reverse direction of Cardinal.lt_aleph0_iff_set_finite.

@[simp]
theorem Cardinal.lt_aleph0_iff_subtype_finite {α : Type u} {p : αProp} :
Cardinal.mk { x : α // p x } < Cardinal.aleph0 Set.Finite {x : α | p x}
@[simp]
theorem Cardinal.mk_le_aleph0 {α : Type u} [] :
theorem Set.Countable.le_aleph0 {α : Type u} {s : Set α} :

Alias of the reverse direction of Cardinal.le_aleph0_iff_set_countable.

@[simp]
theorem Cardinal.le_aleph0_iff_subtype_countable {α : Type u} {p : αProp} :
Cardinal.mk { x : α // p x } Cardinal.aleph0 Set.Countable {x : α | p x}
theorem Cardinal.add_lt_aleph0 {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (ha : ) (hb : ) :

See also Cardinal.nsmul_lt_aleph0_iff_of_ne_zero if you already have n ≠ 0.

See also Cardinal.nsmul_lt_aleph0_iff for a hypothesis-free version.

theorem Cardinal.mul_lt_aleph0 {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (ha : ) (hb : ) :

See also Cardinal.aleph0_le_mul_iff.

See also Cardinal.aleph0_le_mul_iff'.

theorem Cardinal.power_lt_aleph0 {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (ha : ) (hb : ) :
theorem Cardinal.eq_one_iff_unique {α : Type u_1} :
= 1
@[simp]
theorem Cardinal.aleph0_le_mk (α : Type u) [] :
@[simp]
theorem Cardinal.mk_eq_aleph0 (α : Type u_1) [] [] :
theorem Cardinal.mk_denumerable (α : Type u) [] :
@[simp]
@[simp]
theorem Cardinal.nat_mul_aleph0 {n : } (hn : n 0) :
@[simp]
theorem Cardinal.aleph0_mul_nat {n : } (hn : n 0) :
@[simp]
theorem Cardinal.ofNat_mul_aleph0 {n : } [] :
@[simp]
theorem Cardinal.aleph0_mul_ofNat {n : } [] :
@[simp]
@[simp]
@[simp]
@[simp]
theorem Cardinal.ofNat_add_aleph0 {n : } [] :
@[simp]
theorem Cardinal.aleph0_add_ofNat {n : } [] :
theorem Cardinal.exists_nat_eq_of_le_nat {c : Cardinal.{u_1}} {n : } (h : c n) :
∃ m ≤ n, c = m
theorem Cardinal.sum_lt_prod {ι : Type u_1} (f : ) (g : ) (H : ∀ (i : ι), f i < g i) :

König's theorem

Cardinalities of sets: cardinality of empty, finite sets, unions, subsets etc.

theorem Cardinal.mk_singleton {α : Type u} (x : α) :
Cardinal.mk {x} = 1
@[simp]
theorem Cardinal.mk_vector (α : Type u) (n : ) :
theorem Cardinal.mk_quot_le {α : Type u} {r : ααProp} :
theorem Cardinal.mk_quotient_le {α : Type u} {s : } :
theorem Cardinal.mk_subtype_le_of_subset {α : Type u} {p : αProp} {q : αProp} (h : ∀ ⦃x : α⦄, p xq x) :
theorem Cardinal.mk_emptyCollection_iff {α : Type u} {s : Set α} :
= 0 s =
@[simp]
theorem Cardinal.mk_univ {α : Type u} :
Cardinal.mk Set.univ =
theorem Cardinal.mk_image_le {α : Type u} {β : Type u} {f : αβ} {s : Set α} :
Cardinal.mk (f '' s)
theorem Cardinal.mk_image_le_lift {α : Type u} {β : Type v} {f : αβ} {s : Set α} :
theorem Cardinal.mk_range_le {α : Type u} {β : Type u} {f : αβ} :
theorem Cardinal.mk_range_le_lift {α : Type u} {β : Type v} {f : αβ} :
theorem Cardinal.mk_range_eq {α : Type u} {β : Type u} (f : αβ) (h : ) :
Cardinal.mk () =
theorem Cardinal.mk_range_eq_lift {α : Type u} {β : Type v} {f : αβ} (hf : ) :
=
theorem Cardinal.mk_range_eq_of_injective {α : Type u} {β : Type v} {f : αβ} (hf : ) :
=
theorem Cardinal.lift_mk_le_lift_mk_of_injective {α : Type u} {β : Type v} {f : αβ} (hf : ) :
theorem Cardinal.mk_image_eq_of_injOn {α : Type u} {β : Type u} (f : αβ) (s : Set α) (h : ) :
Cardinal.mk (f '' s) =
theorem Cardinal.mk_image_eq_of_injOn_lift {α : Type u} {β : Type v} (f : αβ) (s : Set α) (h : ) :
theorem Cardinal.mk_image_eq {α : Type u} {β : Type u} {f : αβ} {s : Set α} (hf : ) :
Cardinal.mk (f '' s) =
theorem Cardinal.mk_image_eq_lift {α : Type u} {β : Type v} (f : αβ) (s : Set α) (h : ) :
theorem Cardinal.mk_iUnion_le_sum_mk {α : Type u} {ι : Type u} {f : ιSet α} :
Cardinal.mk (⋃ (i : ι), f i) Cardinal.sum fun (i : ι) => Cardinal.mk (f i)
theorem Cardinal.mk_iUnion_le_sum_mk_lift {α : Type u} {ι : Type v} {f : ιSet α} :
Cardinal.lift.{v, u} (Cardinal.mk (⋃ (i : ι), f i)) Cardinal.sum fun (i : ι) => Cardinal.mk (f i)
theorem Cardinal.mk_iUnion_eq_sum_mk {α : Type u} {ι : Type u} {f : ιSet α} (h : Pairwise fun (i j : ι) => Disjoint (f i) (f j)) :
Cardinal.mk (⋃ (i : ι), f i) = Cardinal.sum fun (i : ι) => Cardinal.mk (f i)
theorem Cardinal.mk_iUnion_eq_sum_mk_lift {α : Type u} {ι : Type v} {f : ιSet α} (h : Pairwise fun (i j : ι) => Disjoint (f i) (f j)) :
Cardinal.lift.{v, u} (Cardinal.mk (⋃ (i : ι), f i)) = Cardinal.sum fun (i : ι) => Cardinal.mk (f i)
theorem Cardinal.mk_iUnion_le {α : Type u} {ι : Type u} (f : ιSet α) :
Cardinal.mk (⋃ (i : ι), f i) * ⨆ (i : ι), Cardinal.mk (f i)
theorem Cardinal.mk_iUnion_le_lift {α : Type u} {ι : Type v} (f : ιSet α) :
Cardinal.lift.{v, u} (Cardinal.mk (⋃ (i : ι), f i)) * ⨆ (i : ι), Cardinal.lift.{v, u} (Cardinal.mk (f i))
theorem Cardinal.mk_sUnion_le {α : Type u} (A : Set (Set α)) :
Cardinal.mk (⋃₀ A) * ⨆ (s : A), Cardinal.mk s
theorem Cardinal.mk_biUnion_le {ι : Type u} {α : Type u} (A : ιSet α) (s : Set ι) :
Cardinal.mk (⋃ x ∈ s, A x) * ⨆ (x : s), Cardinal.mk (A x)
theorem Cardinal.mk_biUnion_le_lift {α : Type u} {ι : Type v} (A : ιSet α) (s : Set ι) :
Cardinal.lift.{v, u} (Cardinal.mk (⋃ x ∈ s, A x)) * ⨆ (x : s), Cardinal.lift.{v, u} (Cardinal.mk (A x))
theorem Cardinal.finset_card_lt_aleph0 {α : Type u} (s : ) :
theorem Cardinal.mk_set_eq_nat_iff_finset {α : Type u_1} {s : Set α} {n : } :
= n ∃ (t : ), t = s t.card = n
theorem Cardinal.mk_eq_nat_iff_finset {α : Type u} {n : } :
= n ∃ (t : ), t = Set.univ t.card = n
theorem Cardinal.mk_eq_nat_iff_fintype {α : Type u} {n : } :
= n ∃ (h : ),
theorem Cardinal.mk_union_add_mk_inter {α : Type u} {S : Set α} {T : Set α} :
Cardinal.mk (S T) + Cardinal.mk (S T) = +
theorem Cardinal.mk_union_le {α : Type u} (S : Set α) (T : Set α) :
Cardinal.mk (S T) +

The cardinality of a union is at most the sum of the cardinalities of the two sets.

theorem Cardinal.mk_union_of_disjoint {α : Type u} {S : Set α} {T : Set α} (H : Disjoint S T) :
Cardinal.mk (S T) = +
theorem Cardinal.mk_insert {α : Type u} {s : Set α} {a : α} (h : as) :
Cardinal.mk (insert a s) = + 1
theorem Cardinal.mk_insert_le {α : Type u} {s : Set α} {a : α} :
Cardinal.mk (insert a s) + 1
theorem Cardinal.mk_sum_compl {α : Type u_1} (s : Set α) :
+ =
theorem Cardinal.mk_le_mk_of_subset {α : Type u_1} {s : Set α} {t : Set α} (h : s t) :
theorem Cardinal.mk_le_iff_forall_finset_subset_card_le {α : Type u} {n : } {t : Set α} :
n ∀ (s : ), s ts.card n
theorem Cardinal.mk_subtype_mono {α : Type u} {p : αProp} {q : αProp} (h : ∀ (x : α), p xq x) :
Cardinal.mk { x : α // p x } Cardinal.mk { x : α // q x }
theorem Cardinal.le_mk_diff_add_mk {α : Type u} (S : Set α) (T : Set α) :
Cardinal.mk (S \ T) +
theorem Cardinal.mk_diff_add_mk {α : Type u} {S : Set α} {T : Set α} (h : T S) :
Cardinal.mk (S \ T) + =
theorem Cardinal.mk_union_le_aleph0 {α : Type u_1} {P : Set α} {Q : Set α} :
theorem Cardinal.mk_subtype_of_equiv {α : Type u} {β : Type u} (p : βProp) (e : α β) :
Cardinal.mk { a : α // p (e a) } = Cardinal.mk { b : β // p b }
theorem Cardinal.mk_sep {α : Type u} (s : Set α) (t : αProp) :
Cardinal.mk {x : α | x s t x} = Cardinal.mk {x : s | t x}
theorem Cardinal.mk_preimage_of_injective_lift {α : Type u} {β : Type v} (f : αβ) (s : Set β) (h : ) :
theorem Cardinal.mk_preimage_of_subset_range_lift {α : Type u} {β : Type v} (f : αβ) (s : Set β) (h : s ) :
theorem Cardinal.mk_preimage_of_injective_of_subset_range_lift {α : Type u} {β : Type v} (f : αβ) (s : Set β) (h : ) (h2 : s ) :
theorem Cardinal.mk_preimage_of_injective_of_subset_range {α : Type u} {β : Type u} (f : αβ) (s : Set β) (h : ) (h2 : s ) :
Cardinal.mk (f ⁻¹' s) =
theorem Cardinal.mk_preimage_of_injective {α : Type u} {β : Type u} (f : αβ) (s : Set β) (h : ) :
theorem Cardinal.mk_preimage_of_subset_range {α : Type u} {β : Type u} (f : αβ) (s : Set β) (h : s ) :
theorem Cardinal.mk_subset_ge_of_subset_image_lift {α : Type u} {β : Type v} (f : αβ) {s : Set α} {t : Set β} (h : t f '' s) :
Cardinal.lift.{v, u} (Cardinal.mk {x : α | x s f x t})
theorem Cardinal.mk_subset_ge_of_subset_image {α : Type u} {β : Type u} (f : αβ) {s : Set α} {t : Set β} (h : t f '' s) :
Cardinal.mk {x : α | x s f x t}
theorem Cardinal.le_mk_iff_exists_subset {c : Cardinal.{u}} {α : Type u} {s : Set α} :
c ∃ p ⊆ s, = c
theorem Cardinal.two_le_iff {α : Type u} :
2 ∃ (x : α) (y : α), x y
theorem Cardinal.two_le_iff' {α : Type u} (x : α) :
2 ∃ (y : α), y x
theorem Cardinal.mk_eq_two_iff {α : Type u} :
= 2 ∃ (x : α) (y : α), x y {x, y} = Set.univ
theorem Cardinal.mk_eq_two_iff' {α : Type u} (x : α) :
= 2 ∃! (y : α), y x
theorem Cardinal.exists_not_mem_of_length_lt {α : Type u_1} (l : List α) (h : () < ) :
∃ (z : α), zl
theorem Cardinal.three_le {α : Type u_1} (h : 3 ) (x : α) (y : α) :
∃ (z : α), z x z y

The function a ^< b, defined as the supremum of a ^ c for c < b.

Equations
• a ^< b = ⨆ (c : ()), a ^ c
Instances For

The function a ^< b, defined as the supremum of a ^ c for c < b.

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem Cardinal.le_powerlt {b : Cardinal.{u}} {c : Cardinal.{u}} (a : Cardinal.{u}) (h : c < b) :
a ^ c a ^< b
theorem Cardinal.powerlt_le {a : Cardinal.{u}} {b : Cardinal.{u}} {c : Cardinal.{u}} :
a ^< b c x < b, a ^ x c
theorem Cardinal.powerlt_succ {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} (h : a 0) :
a ^< = a ^ b
theorem Cardinal.powerlt_min {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} :
a ^< min b c = min (a ^< b) (a ^< c)
theorem Cardinal.powerlt_max {a : Cardinal.{u_1}} {b : Cardinal.{u_1}} {c : Cardinal.{u_1}} :
a ^< max b c = max (a ^< b) (a ^< c)
theorem Cardinal.zero_powerlt {a : Cardinal.{u_1}} (h : a 0) :
0 ^< a = 1
@[simp]
theorem Cardinal.mk_le_of_module (R : Type u) (E : Type v) [] [Ring R] [Module R E] [] [] :

The cardinality of a nontrivial module over a ring is at least the cardinality of the ring if there are no zero divisors (for instance if the ring is a field)