Documentation

Mathlib.Data.Countable.Defs

Countable and uncountable types #

In this file we define a typeclass Countable saying that a given Sort* is countable and a typeclass Uncountable saying that a given Type* is uncountable.

See also Encodable for a version that singles out a specific encoding of elements of α by natural numbers.

This file also provides a few instances of these typeclasses. More instances can be found in other files.

Definition and basic properties #

theorem Function.Injective.countable {α : Sort u} {β : Sort v} [Countable β] {f : αβ} (hf : Injective f) :
theorem Function.Surjective.countable {α : Sort u} {β : Sort v} [Countable α] {f : αβ} (hf : Surjective f) :
theorem Countable.of_equiv {β : Sort v} (α : Sort u_1) [Countable α] (e : α β) :
theorem Equiv.countable_iff {α : Sort u} {β : Sort v} (e : α β) :

Operations on Sort*s #

@[instance 100]
@[instance 500]
instance Subtype.countable {α : Sort u} [Countable α] {p : αProp} :
Countable { x : α // p x }
@[instance 100]
instance Finite.to_countable {α : Sort u} [Finite α] :
@[instance 100]
instance Prop.countable (p : Prop) :
@[instance 500]
instance Quotient.countable {α : Sort u} [Countable α] {r : ααProp} :
@[instance 500]
instance instCountableQuotient {α : Sort u} [Countable α] {s : Setoid α} :

Uncountable types #

@[simp]
theorem not_uncountable {α : Sort u} [Countable α] :
@[simp]
theorem not_countable {α : Sort u} [Uncountable α] :
theorem Function.Injective.uncountable {α : Sort u} {β : Sort v} [Uncountable α] {f : αβ} (hf : Injective f) :
theorem Function.Surjective.uncountable {α : Sort u} {β : Sort v} [Uncountable β] {f : αβ} (hf : Surjective f) :
theorem not_injective_uncountable_countable {α : Sort u} {β : Sort v} [Uncountable α] [Countable β] (f : αβ) :
theorem Uncountable.of_equiv {β : Sort v} (α : Sort u_1) [Uncountable α] (e : α β) :
theorem Equiv.uncountable_iff {α : Sort u} {β : Sort v} (e : α β) :
@[instance 100]