Theorem: CategoryTheory.essentiallySmall_iff
File: Mathlib/CategoryTheory/EssentiallySmall.lean

tactic: fconstructor
state_before: C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
⊢ EssentiallySmall.{w, v, u} C ↔ Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C
state_after: case mp
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
⊢ EssentiallySmall.{w, v, u} C → Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C

case mpr
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
⊢ Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C → EssentiallySmall.{w, v, u} C

tactic: intro h
state_before: case mp
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
⊢ EssentiallySmall.{w, v, u} C → Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C
state_after: case mp
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
h : EssentiallySmall.{w, v, u} C
⊢ Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C

tactic: fconstructor
state_before: case mp
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
h : EssentiallySmall.{w, v, u} C
⊢ Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C
state_after: case mp.left
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
h : EssentiallySmall.{w, v, u} C
⊢ Small.{w, u} (Skeleton C)

case mp.right
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
h : EssentiallySmall.{w, v, u} C
⊢ LocallySmall.{w, v, u} C

tactic: rcases h with ⟨S, 𝒮, ⟨e⟩⟩
state_before: case mp.left
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
h : EssentiallySmall.{w, v, u} C
⊢ Small.{w, u} (Skeleton C)
state_after: case mp.left.mk.intro.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
S : Type w
𝒮 : SmallCategory S
e : C ≌ S
⊢ Small.{w, u} (Skeleton C)

tactic: refine ⟨⟨Skeleton S, ⟨?_⟩⟩⟩
state_before: case mp.left.mk.intro.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
S : Type w
𝒮 : SmallCategory S
e : C ≌ S
⊢ Small.{w, u} (Skeleton C)
state_after: case mp.left.mk.intro.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
S : Type w
𝒮 : SmallCategory S
e : C ≌ S
⊢ Skeleton C ≃ Skeleton S

tactic: exact e.skeletonEquiv
state_before: case mp.left.mk.intro.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
S : Type w
𝒮 : SmallCategory S
e : C ≌ S
⊢ Skeleton C ≃ Skeleton S
state_after: no goals

tactic: infer_instance
state_before: case mp.right
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
h : EssentiallySmall.{w, v, u} C
⊢ LocallySmall.{w, v, u} C
state_after: no goals

tactic: rintro ⟨⟨S, ⟨e⟩⟩, L⟩
state_before: case mpr
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
⊢ Small.{w, u} (Skeleton C) ∧ LocallySmall.{w, v, u} C → EssentiallySmall.{w, v, u} C
state_after: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
⊢ EssentiallySmall.{w, v, u} C

tactic: let e' := (ShrinkHoms.equivalence C).skeletonEquiv.symm
state_before: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
⊢ EssentiallySmall.{w, v, u} C
state_after: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
e' : Skeleton (ShrinkHoms.{u} C) ≃ Skeleton C := (ShrinkHoms.equivalence C).skeletonEquiv.symm
⊢ EssentiallySmall.{w, v, u} C

tactic: letI : Category S := InducedCategory.category (e'.trans e).symm
state_before: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
e' : Skeleton (ShrinkHoms.{u} C) ≃ Skeleton C := (ShrinkHoms.equivalence C).skeletonEquiv.symm
⊢ EssentiallySmall.{w, v, u} C
state_after: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
e' : Skeleton (ShrinkHoms.{u} C) ≃ Skeleton C := (ShrinkHoms.equivalence C).skeletonEquiv.symm
this : Category.{w, w} S := InducedCategory.category ⇑(e'.trans e).symm
⊢ EssentiallySmall.{w, v, u} C

tactic: refine ⟨⟨S, this, ⟨?_⟩⟩⟩
state_before: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
e' : Skeleton (ShrinkHoms.{u} C) ≃ Skeleton C := (ShrinkHoms.equivalence C).skeletonEquiv.symm
this : Category.{w, w} S := InducedCategory.category ⇑(e'.trans e).symm
⊢ EssentiallySmall.{w, v, u} C
state_after: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
e' : Skeleton (ShrinkHoms.{u} C) ≃ Skeleton C := (ShrinkHoms.equivalence C).skeletonEquiv.symm
this : Category.{w, w} S := InducedCategory.category ⇑(e'.trans e).symm
⊢ C ≌ S

tactic: refine (ShrinkHoms.equivalence C).trans <|
  (skeletonEquivalence (ShrinkHoms C)).symm.trans
    ((inducedFunctor (e'.trans e).symm).asEquivalence.symm)
state_before: case mpr.intro.mk.intro.intro
C✝ : Type u
inst✝¹ : Category.{v, u} C✝
C : Type u
inst✝ : Category.{v, u} C
L : LocallySmall.{w, v, u} C
S : Type w
e : Skeleton C ≃ S
e' : Skeleton (ShrinkHoms.{u} C) ≃ Skeleton C := (ShrinkHoms.equivalence C).skeletonEquiv.symm
this : Category.{w, w} S := InducedCategory.category ⇑(e'.trans e).symm
⊢ C ≌ S
state_after: no goals