Module docstring
{"# Instances and theorems for Small.
In particular we prove small_of_injective and small_of_surjective.
","We don't define Countable.toSmall in this file, to keep imports to Logic to a minimum.
"}
{"# Instances and theorems for Small.
In particular we prove small_of_injective and small_of_surjective.
","We don't define Countable.toSmall in this file, to keep imports to Logic to a minimum.
"}
small_subtype
instance
(α : Type v) [Small.{w} α] (P : α → Prop) : Small.{w} { x // P x }
instance small_subtype (α : Type v) [Small.{w} α] (P : α → Prop) : Small.{w} { x // P x } :=
small_map (equivShrink α).subtypeEquivOfSubtype'
small_of_injective
theorem
{α : Type v} {β : Type w} [Small.{u} β] {f : α → β} (hf : Function.Injective f) : Small.{u} α
theorem small_of_injective {α : Type v} {β : Type w} [Small.{u} β] {f : α → β}
(hf : Function.Injective f) : Small.{u} α :=
small_map (Equiv.ofInjective f hf)
small_of_surjective
theorem
{α : Type v} {β : Type w} [Small.{u} α] {f : α → β} (hf : Function.Surjective f) : Small.{u} β
theorem small_of_surjective {α : Type v} {β : Type w} [Small.{u} α] {f : α → β}
(hf : Function.Surjective f) : Small.{u} β :=
small_of_injective (Function.injective_surjInv hf)
small_subsingleton
instance
(α : Type v) [Subsingleton α] : Small.{w} α
instance (priority := 100) small_subsingleton (α : Type v) [Subsingleton α] : Small.{w} α := by
rcases isEmpty_or_nonempty α with ⟨⟩
· apply small_map (Equiv.equivPEmpty α)
· apply small_map Equiv.punitOfNonemptyOfSubsingleton
small_of_injective_of_exists
theorem
{α : Type v} {β : Type w} {γ : Type v'} [Small.{u} α] (f : α → γ) {g : β → γ} (hg : Function.Injective g)
(h : ∀ b : β, ∃ a : α, f a = g b) : Small.{u} β
/-- This can be seen as a version of `small_of_surjective` in which the function `f` doesn't
actually land in `β` but in some larger type `γ` related to `β` via an injective function `g`.
-/
theorem small_of_injective_of_exists {α : Type v} {β : Type w} {γ : Type v'} [Small.{u} α]
(f : α → γ) {g : β → γ} (hg : Function.Injective g) (h : ∀ b : β, ∃ a : α, f a = g b) :
Small.{u} β := by
by_cases hβ : Nonempty β
· refine small_of_surjective (f := Function.invFunFunction.invFun g ∘ f) (fun b => ?_)
obtain ⟨a, ha⟩ := h b
exact ⟨a, by rw [Function.comp_apply, ha, Function.leftInverse_invFun hg]⟩
· simp only [not_nonempty_iff] at hβ
infer_instance
small_Pi
instance
{α} (β : α → Type*) [Small.{w} α] [∀ a, Small.{w} (β a)] : Small.{w} (∀ a, β a)
instance small_Pi {α} (β : α → Type*) [Small.{w} α] [∀ a, Small.{w} (β a)] :
Small.{w} (∀ a, β a) :=
⟨⟨∀ a' : Shrink α, Shrink (β ((equivShrink α).symm a')),
⟨Equiv.piCongr (equivShrink α) fun a => by simpa using equivShrink (β a)⟩⟩⟩
small_prod
instance
{α β} [Small.{w} α] [Small.{w} β] : Small.{w} (α × β)
instance small_prod {α β} [Small.{w} α] [Small.{w} β] : Small.{w} (α × β) :=
⟨⟨Shrink α × Shrink β, ⟨Equiv.prodCongr (equivShrink α) (equivShrink β)⟩⟩⟩
small_sum
instance
{α β} [Small.{w} α] [Small.{w} β] : Small.{w} (α ⊕ β)
small_set
instance
{α} [Small.{w} α] : Small.{w} (Set α)
instance small_set {α} [Small.{w} α] : Small.{w} (Set α) :=
⟨⟨Set (Shrink α), ⟨Equiv.Set.congr (equivShrink α)⟩⟩⟩