Theorem: _private.Mathlib.CategoryTheory.Sites.Discrete.0.CategoryTheory.Sheaf.constantSheafAdj_counit_w
File: Mathlib/CategoryTheory/Sites/Discrete.lean

Proof steps:
state_before: C : Type u_1
inst✝¹³ : Category.{u_5, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_6, u_2} A
inst✝¹¹ : HasWeakSheafify J A
inst✝¹⁰ : (constantSheaf J A).Faithful
inst✝⁹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝⁸ : Category.{u_4, u_3} B
U : A ⥤ B
inst✝⁷ : HasWeakSheafify J A
inst✝⁶ : HasWeakSheafify J B
inst✝⁵ : (constantSheaf J A).Faithful
inst✝⁴ : (constantSheaf J A).Full
inst✝³ : (constantSheaf J B).Faithful
inst✝² : (constantSheaf J B).Full
inst✝¹ : J.PreservesSheafification U
inst✝ : J.HasSheafCompose U
F : Sheaf J A
⊢ ((sheafifyComposeIso J U ((const Cᵒᵖ).obj (F.val.obj (op t)))).symm ≪≫
          (presheafToSheaf J B ⋙ sheafToPresheaf J B).mapIso (constComp Cᵒᵖ (F.val.obj (op t)) U)).hom ≫
      ((constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F)).val =
    ((sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)).val
state_after: C : Type u_1
inst✝¹³ : Category.{u_5, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_6, u_2} A
inst✝¹¹ : HasWeakSheafify J A
inst✝¹⁰ : (constantSheaf J A).Faithful
inst✝⁹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝⁸ : Category.{u_4, u_3} B
U : A ⥤ B
inst✝⁷ : HasWeakSheafify J A
inst✝⁶ : HasWeakSheafify J B
inst✝⁵ : (constantSheaf J A).Faithful
inst✝⁴ : (constantSheaf J A).Full
inst✝³ : (constantSheaf J B).Faithful
inst✝² : (constantSheaf J B).Full
inst✝¹ : J.PreservesSheafification U
inst✝ : J.HasSheafCompose U
F : Sheaf J A
⊢ ((constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F)).val =
    ((sheafifyComposeIso J U ((const Cᵒᵖ).obj (F.val.obj (op t)))).symm ≪≫
          (presheafToSheaf J B ⋙ sheafToPresheaf J B).mapIso (constComp Cᵒᵖ (F.val.obj (op t)) U)).inv ≫
      ((sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)).val
tactic: rw [← Iso.eq_inv_comp]
state_before: C : Type u_1
inst✝¹³ : Category.{u_5, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_6, u_2} A
inst✝¹¹ : HasWeakSheafify J A
inst✝¹⁰ : (constantSheaf J A).Faithful
inst✝⁹ : (constantSheaf J A).Full
t : C
ht : IsTerminal t
B : Type u_3
inst✝⁸ : Category.{u_4, u_3} B
U : A ⥤ B
inst✝⁷ : HasWeakSheafify J A
inst✝⁶ : HasWeakSheafify J B
inst✝⁵ : (constantSheaf J A).Faithful
inst✝⁴ : (constantSheaf J A).Full
inst✝³ : (constantSheaf J B).Faithful
inst✝² : (constantSheaf J B).Full
inst✝¹ : J.PreservesSheafification U
inst✝ : J.HasSheafCompose U
F : Sheaf J A
⊢ ((constantSheafAdj J B ht).counit.app ((sheafCompose J U).obj F)).val =
    ((sheafifyComposeIso J U ((const Cᵒᵖ).obj (F.val.obj (op t)))).symm ≪≫
          (presheafToSheaf J B ⋙ sheafToPresheaf J B).mapIso (constComp Cᵒᵖ (F.val.obj (op t)) U)).inv ≫
      ((sheafCompose J U).map ((constantSheafAdj J A ht).counit.app F)).val
state_after: no goals
tactic: simp only [comp_obj, flip_obj_obj, sheafToPresheaf_obj, sheafCompose_obj_val, id_obj,
    Iso.trans_inv, mapIso_inv, Functor.comp_map, sheafToPresheaf_map,
    Iso.symm_inv, Category.assoc, sheafifyComposeIso_comp_sheafCompose_map_constantSheafAdj_counit,
    mapIso_hom, ← instCategorySheaf_comp_val, Iso.map_inv_hom_id_assoc]