Theorem: CategoryTheory.GrothendieckTopology.sheafToPresheaf_map_sheafComposeNatTrans_eq_sheafifyCompIso_inv
File: Mathlib/CategoryTheory/Sites/PreservesSheafification.lean

tactic: suffices (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P =
  ⟨(sheafifyCompIso J F P).inv⟩ by
  rw [this]
  rfl
state_before: C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
⊢ (sheafToPresheaf J E).map ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
    (J.sheafifyCompIso F P).inv
state_after: C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
⊢ (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P =
    { val := (J.sheafifyCompIso F P).inv }

tactic: apply ((plusPlusAdjunction J E).homEquiv _ _).injective
state_before: C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
⊢ (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P =
    { val := (J.sheafifyCompIso F P).inv }
state_after: case a
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
    ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      { val := (J.sheafifyCompIso F P).inv }

tactic: convert sheafComposeNatTrans_fac J F (plusPlusAdjunction J D) (plusPlusAdjunction J E) P
state_before: case a
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
    ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      { val := (J.sheafifyCompIso F P).inv }
state_after: case h.e'_2.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
    (plusPlusAdjunction J E).unit.app (P ⋙ F) ≫
      (sheafToPresheaf J E).map ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P)

case h.e'_3.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      { val := (J.sheafifyCompIso F P).inv } =
    whiskerRight ((plusPlusAdjunction J D).unit.app P) F

tactic: all_goals
  dsimp [plusPlusAdjunction]
  simp
state_before: case h.e'_2.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
    (plusPlusAdjunction J E).unit.app (P ⋙ F) ≫
      (sheafToPresheaf J E).map ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P)

case h.e'_3.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      { val := (J.sheafifyCompIso F P).inv } =
    whiskerRight ((plusPlusAdjunction J D).unit.app P) F
state_after: no goals

tactic: rw [this]
state_before: C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
this :
  (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P =
    { val := (J.sheafifyCompIso F P).inv }
⊢ (sheafToPresheaf J E).map ((sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P) =
    (J.sheafifyCompIso F P).inv
state_after: C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
this :
  (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P =
    { val := (J.sheafifyCompIso F P).inv }
⊢ (sheafToPresheaf J E).map { val := (J.sheafifyCompIso F P).inv } = (J.sheafifyCompIso F P).inv

tactic: rfl
state_before: C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
this :
  (sheafComposeNatTrans J F (plusPlusAdjunction J D) (plusPlusAdjunction J E)).app P =
    { val := (J.sheafifyCompIso F P).inv }
⊢ (sheafToPresheaf J E).map { val := (J.sheafifyCompIso F P).inv } = (J.sheafifyCompIso F P).inv
state_after: no goals

tactic: dsimp [plusPlusAdjunction]
state_before: case h.e'_3.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ ((plusPlusAdjunction J E).homEquiv (((whiskeringRight Cᵒᵖ D E).obj F).obj P)
        ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
      { val := (J.sheafifyCompIso F P).inv } =
    whiskerRight ((plusPlusAdjunction J D).unit.app P) F
state_after: case h.e'_3.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ J.toSheafify (P ⋙ F) ≫ (J.sheafifyCompIso F P).inv = whiskerRight (J.toSheafify P ≫ 𝟙 (J.sheafify P)) F

tactic: simp
state_before: case h.e'_3.h
C : Type u
inst✝¹⁸ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u_1
B : Type u_2
inst✝¹⁷ : Category.{?u.74132, u_1} A
inst✝¹⁶ : Category.{?u.74136, u_2} B
F✝ : A ⥤ B
D : Type u_3
E : Type u_4
inst✝¹⁵ : Category.{max v u, u_3} D
inst✝¹⁴ : Category.{max v u, u_4} E
F : D ⥤ E
inst✝¹³ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝¹² : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝¹¹ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹⁰ : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ E
inst✝⁹ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ F
inst✝⁸ : (X : C) → (W : J.Cover X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (W.index P).multicospan F
inst✝⁷ : ConcreteCategory D
inst✝⁶ : ConcreteCategory E
inst✝⁵ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
inst✝⁴ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget E)
inst✝³ : PreservesLimits (forget D)
inst✝² : PreservesLimits (forget E)
inst✝¹ : (forget D).ReflectsIsomorphisms
inst✝ : (forget E).ReflectsIsomorphisms
P : Cᵒᵖ ⥤ D
e_1✝ :
  (((whiskeringRight Cᵒᵖ D E).obj F).obj P ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P)) =
    ((𝟭 (Cᵒᵖ ⥤ E)).obj (P ⋙ F) ⟶ (sheafToPresheaf J E).obj ((plusPlusSheaf J D ⋙ sheafCompose J F).obj P))
⊢ J.toSheafify (P ⋙ F) ≫ (J.sheafifyCompIso F P).inv = whiskerRight (J.toSheafify P ≫ 𝟙 (J.sheafify P)) F
state_after: no goals