Theorem: CategoryTheory.Sheaf.sheafComposeNatIso_app_counit
File: Mathlib/CategoryTheory/Sites/Discrete.lean

Proof steps:
state_before: C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ (sheafComposeNatIso J U (sheafificationAdjunction J A) (sheafificationAdjunction J B)).hom.app
        ((sheafToPresheaf J A).obj P) ≫
      (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P) =
    (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)
state_after: C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ ((sheafificationAdjunction J B).homEquiv (P.val ⋙ U) ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))).symm
        (whiskerRight (toSheafify J P.val) U) ≫
      (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P) =
    (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)
tactic: simp only [sheafToPresheaf_obj, Functor.comp_obj, whiskeringRight_obj_obj, Functor.id_obj,
    sheafComposeNatIso, sheafComposeNatTrans, sheafCompose_obj_val,
    sheafificationAdjunction_unit_app, asIso_hom]
state_before: C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ ((sheafificationAdjunction J B).homEquiv (P.val ⋙ U) ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))).symm
        (whiskerRight (toSheafify J P.val) U) ≫
      (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P) =
    (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)
state_after: C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ ((presheafToSheaf J B).map (whiskerRight (toSheafify J P.val) U) ≫
        (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))) ≫
      (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P) =
    (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)
tactic: erw [Adjunction.homEquiv_counit]
state_before: C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ ((presheafToSheaf J B).map (whiskerRight (toSheafify J P.val) U) ≫
        (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))) ≫
      (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P) =
    (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)
state_after: case h
C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ (((presheafToSheaf J B).map (whiskerRight (toSheafify J P.val) U) ≫
          (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))) ≫
        (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P)).val =
    ((sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)).val
tactic: apply Sheaf.hom_ext
state_before: case h
C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ (((presheafToSheaf J B).map (whiskerRight (toSheafify J P.val) U) ≫
          (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))) ≫
        (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P)).val =
    ((sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)).val
state_after: case h
C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ toSheafify J (P.val ⋙ U) ≫
      (((presheafToSheaf J B).map (whiskerRight (toSheafify J P.val) U) ≫
            (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))) ≫
          (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P)).val =
    toSheafify J (P.val ⋙ U) ≫ ((sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)).val
tactic: apply sheafify_hom_ext _ _ _ ((sheafCompose J U).obj P).cond
state_before: case h
C : Type u_1
inst✝¹³ : Category.{u_4, u_1} C
J : GrothendieckTopology C
A : Type u_2
inst✝¹² : Category.{u_5, 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_6, 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 P : Sheaf J A
⊢ toSheafify J (P.val ⋙ U) ≫
      (((presheafToSheaf J B).map (whiskerRight (toSheafify J P.val) U) ≫
            (sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj ((presheafToSheaf J A).obj P.val))) ≫
          (sheafCompose J U).map ((sheafificationAdjunction J A).counit.app P)).val =
    toSheafify J (P.val ⋙ U) ≫ ((sheafificationAdjunction J B).counit.app ((sheafCompose J U).obj P)).val
state_after: no goals
tactic: simp [← whiskerRight_comp]