Theorem: CategoryTheory.Sheaf.adjunctionToTypes_counit_app_val
File: Mathlib/CategoryTheory/Sites/Adjunction.lean

tactic: apply J.sheafifyLift_unique
state_before: C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
⊢ ((adjunctionToTypes J adj).counit.app X).val =
    sheafifyLift J ((Functor.associator X.1 (forget D) G).hom ≫ (Adjunction.whiskerRight Cᵒᵖ adj).counit.app X.1)
      (_ : Presheaf.IsSheaf J X.val)

tactic: dsimp only [adjunctionToTypes, Adjunction.comp, NatTrans.comp_app,
  instCategorySheaf_comp_val, instCategorySheaf_id_val]
state_before: case a
C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
⊢ toSheafify J
        (((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).obj
          ((sheafToPresheaf J (Type (max u v))).obj ((sheafEquivSheafOfTypes J).inverse.obj ((sheafForget J).obj X)))) ≫
      ((adjunctionToTypes J adj).counit.app X).val =
    (Functor.associator X.1 (forget D) G).hom ≫ (Adjunction.whiskerRight Cᵒᵖ adj).counit.app X.1

tactic: rw [adjunction_counit_app_val]
state_before: case a
C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
⊢ toSheafify J
        (((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).obj
          ((sheafToPresheaf J (Type (max u v))).obj ((sheafEquivSheafOfTypes J).inverse.obj ((sheafForget J).obj X)))) ≫
      ((Functor.associator (sheafCompose J (forget D)) (Equivalence.symm (sheafEquivSheafOfTypes J)).inverse
                  ((Equivalence.symm (sheafEquivSheafOfTypes J)).functor ⋙ composeAndSheafify J G)).hom.app
            X).val ≫
        ((whiskerLeft (sheafCompose J (forget D))
                  (whiskerRight (Equivalence.toAdjunction (Equivalence.symm (sheafEquivSheafOfTypes J))).counit
                    (composeAndSheafify J G))).app
              X).val ≫
          ((adjunction J adj).counit.app X).val =
    (Functor.associator X.1 (forget D) G).hom ≫ (Adjunction.whiskerRight Cᵒᵖ adj).counit.app X.1

tactic: erw [Category.id_comp, J.sheafifyMap_sheafifyLift, J.toSheafify_sheafifyLift]
state_before: case a
C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
⊢ toSheafify J
        (((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).obj
          ((sheafToPresheaf J (Type (max u v))).obj ((sheafEquivSheafOfTypes J).inverse.obj ((sheafForget J).obj X)))) ≫
      ((Functor.associator (sheafCompose J (forget D)) (Equivalence.symm (sheafEquivSheafOfTypes J)).inverse
                  ((Equivalence.symm (sheafEquivSheafOfTypes J)).functor ⋙ composeAndSheafify J G)).hom.app
            X).val ≫
        ((whiskerLeft (sheafCompose J (forget D))
                  (whiskerRight (Equivalence.toAdjunction (Equivalence.symm (sheafEquivSheafOfTypes J))).counit
                    (composeAndSheafify J G))).app
              X).val ≫
          sheafifyLift J
            (↑(Adjunction.homEquiv (Adjunction.whiskerRight Cᵒᵖ adj) (X.val ⋙ forget D) X.val).symm
              (𝟙 (X.val ⋙ forget D)))
            (_ : Presheaf.IsSheaf J X.val) =
    (Functor.associator X.1 (forget D) G).hom ≫ (Adjunction.whiskerRight Cᵒᵖ adj).counit.app X.1

tactic: ext
state_before: case a
C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
⊢ ((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).map
        ((sheafToPresheaf J (Type (max u v))).map
          ((Equivalence.toAdjunction (Equivalence.symm (sheafEquivSheafOfTypes J))).counit.app
            ((sheafCompose J (forget D)).obj X))) ≫
      ↑(Adjunction.homEquiv (Adjunction.whiskerRight Cᵒᵖ adj) (X.val ⋙ forget D) X.val).symm (𝟙 (X.val ⋙ forget D)) =
    (Functor.associator X.1 (forget D) G).hom ≫ (Adjunction.whiskerRight Cᵒᵖ adj).counit.app X.1

tactic: dsimp [sheafEquivSheafOfTypes, Equivalence.symm, Equivalence.toAdjunction,
  NatIso.ofComponents, Adjunction.whiskerRight, Adjunction.mkOfUnitCounit]
state_before: case a.w.h.w
C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
x✝¹ : Cᵒᵖ
x✝ :
  (forget D).obj
    ((((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).obj
          ((sheafToPresheaf J (Type (max u v))).obj
            (((Equivalence.symm (sheafEquivSheafOfTypes J)).inverse ⋙
                  (Equivalence.symm (sheafEquivSheafOfTypes J)).functor).obj
              ((sheafCompose J (forget D)).obj X)))).obj
      x✝¹)
⊢ (forget D).map
      ((((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).map
              ((sheafToPresheaf J (Type (max u v))).map
                ((Equivalence.toAdjunction (Equivalence.symm (sheafEquivSheafOfTypes J))).counit.app
                  ((sheafCompose J (forget D)).obj X))) ≫
            ↑(Adjunction.homEquiv (Adjunction.whiskerRight Cᵒᵖ adj) (X.val ⋙ forget D) X.val).symm
              (𝟙 (X.val ⋙ forget D))).app
        x✝¹)
      x✝ =
    (forget D).map
      (((Functor.associator X.1 (forget D) G).hom ≫ (Adjunction.whiskerRight Cᵒᵖ adj).counit.app X.1).app x✝¹) x✝

tactic: simp
state_before: case a.w.h.w
C : Type u
inst✝⁹ : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝⁸ : Category D
E : Type w₂
inst✝⁷ : Category E
F : D ⥤ E
G✝ : E ⥤ D
inst✝⁶ : (X : C) → (S : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index S P)) F
inst✝⁵ : ConcreteCategory D
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
inst✝ : ReflectsIsomorphisms (forget D)
G : Type (max v u) ⥤ D
adj : G ⊣ forget D
X : Sheaf J D
x✝¹ : Cᵒᵖ
x✝ :
  (forget D).obj
    ((((whiskeringRight Cᵒᵖ (Type (max u v)) D).obj G).obj
          ((sheafToPresheaf J (Type (max u v))).obj
            (((Equivalence.symm (sheafEquivSheafOfTypes J)).inverse ⋙
                  (Equivalence.symm (sheafEquivSheafOfTypes J)).functor).obj
              ((sheafCompose J (forget D)).obj X)))).obj
      x✝¹)
⊢ (forget D).map
      (G.map (𝟙 ((forget D).obj (X.val.obj x✝¹))) ≫
        G.map (𝟙 ((forget D).obj (X.val.obj x✝¹))) ≫
          𝟙 (G.obj ((forget D).obj (X.val.obj x✝¹))) ≫ adj.counit.app (X.val.obj x✝¹) ≫ 𝟙 (X.val.obj x✝¹))
      x✝ =
    (forget D).map
      (𝟙 (G.obj ((forget D).obj (X.1.obj x✝¹))) ≫
        𝟙 (G.obj ((forget D).obj (X.1.obj x✝¹))) ≫ adj.counit.app (X.1.obj x✝¹) ≫ 𝟙 (X.val.obj x✝¹))
      x✝