Theorem: CategoryTheory.toSheafify_plusPlusIsoSheafify_hom
File: Mathlib/CategoryTheory/Sites/LeftExact.lean

Proof steps:
state_before: C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P : Cᵒᵖ ⥤ D
⊢ J.toSheafify P ≫ (plusPlusIsoSheafify J D P).hom = toSheafify J P
state_after: case h.e'_2.h.h.e'_6.h.h.e
C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P : Cᵒᵖ ⥤ D
e_1✝ : (P ⟶ sheafify J P) = ((𝟭 (Cᵒᵖ ⥤ D)).obj P ⟶ (sheafToPresheaf J D).obj ((presheafToSheaf J D).obj P))
e_3✝ : P = (𝟭 (Cᵒᵖ ⥤ D)).obj P
e_4✝ : J.sheafify P = (plusPlusSheaf J D ⋙ sheafToPresheaf J D).obj P
⊢ J.toSheafify = (plusPlusAdjunction J D).unit.app
tactic: convert Adjunction.unit_leftAdjointUniq_hom_app
    (plusPlusAdjunction J D) (sheafificationAdjunction J D) P
state_before: case h.e'_2.h.h.e'_6.h.h.e
C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P : Cᵒᵖ ⥤ D
e_1✝ : (P ⟶ sheafify J P) = ((𝟭 (Cᵒᵖ ⥤ D)).obj P ⟶ (sheafToPresheaf J D).obj ((presheafToSheaf J D).obj P))
e_3✝ : P = (𝟭 (Cᵒᵖ ⥤ D)).obj P
e_4✝ : J.sheafify P = (plusPlusSheaf J D ⋙ sheafToPresheaf J D).obj P
⊢ J.toSheafify = (plusPlusAdjunction J D).unit.app
state_after: case h.e'_2.h.h.e'_6.h.h.e.h
C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P✝ : Cᵒᵖ ⥤ D
e_1✝ : (P✝ ⟶ sheafify J P✝) = ((𝟭 (Cᵒᵖ ⥤ D)).obj P✝ ⟶ (sheafToPresheaf J D).obj ((presheafToSheaf J D).obj P✝))
e_3✝ : P✝ = (𝟭 (Cᵒᵖ ⥤ D)).obj P✝
e_4✝ : J.sheafify P✝ = (plusPlusSheaf J D ⋙ sheafToPresheaf J D).obj P✝
P : Cᵒᵖ ⥤ D
⊢ J.toSheafify P = (plusPlusAdjunction J D).unit.app P
tactic: ext1 P
state_before: case h.e'_2.h.h.e'_6.h.h.e.h
C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P✝ : Cᵒᵖ ⥤ D
e_1✝ : (P✝ ⟶ sheafify J P✝) = ((𝟭 (Cᵒᵖ ⥤ D)).obj P✝ ⟶ (sheafToPresheaf J D).obj ((presheafToSheaf J D).obj P✝))
e_3✝ : P✝ = (𝟭 (Cᵒᵖ ⥤ D)).obj P✝
e_4✝ : J.sheafify P✝ = (plusPlusSheaf J D ⋙ sheafToPresheaf J D).obj P✝
P : Cᵒᵖ ⥤ D
⊢ J.toSheafify P = (plusPlusAdjunction J D).unit.app P
state_after: case h.e'_2.h.h.e'_6.h.h.e.h
C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P✝ : Cᵒᵖ ⥤ D
e_1✝ : (P✝ ⟶ sheafify J P✝) = ((𝟭 (Cᵒᵖ ⥤ D)).obj P✝ ⟶ (sheafToPresheaf J D).obj ((presheafToSheaf J D).obj P✝))
e_3✝ : P✝ = (𝟭 (Cᵒᵖ ⥤ D)).obj P✝
e_4✝ : J.sheafify P✝ = (plusPlusSheaf J D ⋙ sheafToPresheaf J D).obj P✝
P : Cᵒᵖ ⥤ D
⊢ J.toPlus P ≫ J.plusMap (J.toPlus P) = (J.toPlus P ≫ J.plusMap (J.toPlus P)) ≫ 𝟙 (J.sheafify P)
tactic: dsimp [GrothendieckTopology.toSheafify, plusPlusAdjunction]
state_before: case h.e'_2.h.h.e'_6.h.h.e.h
C : Type u
inst✝¹⁰ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁹ : Category.{max v u, w} D
inst✝⁸ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝⁷ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝⁶ : ConcreteCategory D
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : PreservesLimits (forget D)
inst✝³ : (forget D).ReflectsIsomorphisms
K : Type w'
inst✝² : SmallCategory K
inst✝¹ : FinCategory K
inst✝ : HasLimitsOfShape K D
P✝ : Cᵒᵖ ⥤ D
e_1✝ : (P✝ ⟶ sheafify J P✝) = ((𝟭 (Cᵒᵖ ⥤ D)).obj P✝ ⟶ (sheafToPresheaf J D).obj ((presheafToSheaf J D).obj P✝))
e_3✝ : P✝ = (𝟭 (Cᵒᵖ ⥤ D)).obj P✝
e_4✝ : J.sheafify P✝ = (plusPlusSheaf J D ⋙ sheafToPresheaf J D).obj P✝
P : Cᵒᵖ ⥤ D
⊢ J.toPlus P ≫ J.plusMap (J.toPlus P) = (J.toPlus P ≫ J.plusMap (J.toPlus P)) ≫ 𝟙 (J.sheafify P)
state_after: no goals
tactic: rw [Category.comp_id]