Theorem: CategoryTheory.equivEssImageOfReflective_functor
File: Mathlib/CategoryTheory/Adjunction/Reflective.lean

Proof steps:
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
⊢ ∀ {X Y : D} (f : X ⟶ Y),
    (𝟭 D).map f ≫ ((fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) Y).hom =
      ((fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) X).hom ≫
        (i.toEssImage ⋙ i.essImageInclusion ⋙ reflector i).map f
state_after: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : D
f : X ⟶ Y
⊢ (𝟭 D).map f ≫ ((fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) Y).hom =
    ((fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) X).hom ≫
      (i.toEssImage ⋙ i.essImageInclusion ⋙ reflector i).map f
tactic: intro X Y f
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : D
f : X ⟶ Y
⊢ (𝟭 D).map f ≫ ((fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) Y).hom =
    ((fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) X).hom ≫
      (i.toEssImage ⋙ i.essImageInclusion ⋙ reflector i).map f
state_after: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : D
f : X ⟶ Y
⊢ f ≫ inv ((reflectorAdjunction i).counit.app Y) =
    inv ((reflectorAdjunction i).counit.app X) ≫ (reflector i).map (i.map f)
tactic: dsimp
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : D
f : X ⟶ Y
⊢ f ≫ inv ((reflectorAdjunction i).counit.app Y) =
    inv ((reflectorAdjunction i).counit.app X) ≫ (reflector i).map (i.map f)
state_after: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : D
f : X ⟶ Y
⊢ (reflectorAdjunction i).counit.app X ≫ f = (reflector i).map (i.map f) ≫ (reflectorAdjunction i).counit.app Y
tactic: rw [IsIso.comp_inv_eq, Category.assoc, IsIso.eq_inv_comp]
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : D
f : X ⟶ Y
⊢ (reflectorAdjunction i).counit.app X ≫ f = (reflector i).map (i.map f) ≫ (reflectorAdjunction i).counit.app Y
state_after: no goals
tactic: exact ((reflectorAdjunction i).counit.naturality f).symm
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
⊢ ∀ {X Y : i.EssImageSubcategory} (f : X ⟶ Y),
    ((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom =
      (equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f
state_after: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
⊢ ((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom =
    (equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f
tactic: intro X Y f
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
⊢ ((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom =
    (equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f
state_after: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
⊢ i.essImageInclusion.map
      (((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom) =
    i.essImageInclusion.map ((equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f)
tactic: apply (Functor.essImageInclusion i).map_injective
state_before: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
⊢ i.essImageInclusion.map
      (((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom) =
    i.essImageInclusion.map ((equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f)
state_after: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
h :
  (reflectorAdjunction i).unit.app X.obj ≫ (reflector i ⋙ i).map f =
    (𝟭 C).map f ≫ (reflectorAdjunction i).unit.app Y.obj
⊢ i.essImageInclusion.map
      (((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom) =
    i.essImageInclusion.map ((equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f)
tactic: have h := ((reflectorAdjunction i).unit.naturality f).symm
state_before: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
h :
  (reflectorAdjunction i).unit.app X.obj ≫ (reflector i ⋙ i).map f =
    (𝟭 C).map f ≫ (reflectorAdjunction i).unit.app Y.obj
⊢ i.essImageInclusion.map
      (((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom) =
    i.essImageInclusion.map ((equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f)
state_after: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
h : (reflectorAdjunction i).unit.app X.obj ≫ (reflector i ⋙ i).map f = f ≫ (reflectorAdjunction i).unit.app Y.obj
⊢ i.essImageInclusion.map
      (((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom) =
    i.essImageInclusion.map ((equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f)
tactic: rw [Functor.id_map] at h
state_before: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X Y : i.EssImageSubcategory
f : X ⟶ Y
h : (reflectorAdjunction i).unit.app X.obj ≫ (reflector i ⋙ i).map f = f ≫ (reflectorAdjunction i).unit.app Y.obj
⊢ i.essImageInclusion.map
      (((i.essImageInclusion ⋙ reflector i) ⋙ i.toEssImage).map f ≫ (equivEssImageOfReflective_counitIso_app Y).hom) =
    i.essImageInclusion.map ((equivEssImageOfReflective_counitIso_app X).hom ≫ (𝟭 i.EssImageSubcategory).map f)
state_after: no goals
tactic: erw [Functor.map_comp, Functor.map_comp,
          equivEssImageOfReflective_map_counitIso_app_hom,
          equivEssImageOfReflective_map_counitIso_app_hom,
          IsIso.comp_inv_eq, assoc, ← h, IsIso.inv_hom_id_assoc, Functor.comp_map]
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X : D
⊢ i.toEssImage.map ((NatIso.ofComponents (fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) ⋯).hom.app X) ≫
      (NatIso.ofComponents equivEssImageOfReflective_counitIso_app ⋯).hom.app (i.toEssImage.obj X) =
    𝟙 (i.toEssImage.obj X)
state_after: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X : D
⊢ i.essImageInclusion.map
      (i.toEssImage.map
          ((NatIso.ofComponents (fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) ⋯).hom.app X) ≫
        (NatIso.ofComponents equivEssImageOfReflective_counitIso_app ⋯).hom.app (i.toEssImage.obj X)) =
    i.essImageInclusion.map (𝟙 (i.toEssImage.obj X))
tactic: apply (Functor.essImageInclusion i).map_injective
state_before: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X : D
⊢ i.essImageInclusion.map
      (i.toEssImage.map
          ((NatIso.ofComponents (fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) ⋯).hom.app X) ≫
        (NatIso.ofComponents equivEssImageOfReflective_counitIso_app ⋯).hom.app (i.toEssImage.obj X)) =
    i.essImageInclusion.map (𝟙 (i.toEssImage.obj X))
state_after: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X : D
⊢ i.essImageInclusion.map
        (i.toEssImage.map
          ((NatIso.ofComponents (fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) ⋯).hom.app X)) ≫
      inv ((reflectorAdjunction i).unit.app ((𝟭 i.EssImageSubcategory).obj (i.toEssImage.obj X)).obj) =
    i.essImageInclusion.map (𝟙 (i.toEssImage.obj X))
tactic: erw [Functor.map_comp, equivEssImageOfReflective_map_counitIso_app_hom]
state_before: case a
C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
X : D
⊢ i.essImageInclusion.map
        (i.toEssImage.map
          ((NatIso.ofComponents (fun X => (asIso ((reflectorAdjunction i).counit.app X)).symm) ⋯).hom.app X)) ≫
      inv ((reflectorAdjunction i).unit.app ((𝟭 i.EssImageSubcategory).obj (i.toEssImage.obj X)).obj) =
    i.essImageInclusion.map (𝟙 (i.toEssImage.obj X))
state_after: no goals
tactic: aesop_cat