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

Proof steps:
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ (composeEquiv J adj X'✝ Y✝).symm (f ≫ g) = (composeAndSheafify J G).map f ≫ (composeEquiv J adj X✝ Y✝).symm g
state_after: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ ((composeEquiv J adj X'✝ Y✝).symm (f ≫ g)).val =
    ((composeAndSheafify J G).map f ≫ (composeEquiv J adj X✝ Y✝).symm g).val
tactic: ext1
state_before: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ ((composeEquiv J adj X'✝ Y✝).symm (f ≫ g)).val =
    ((composeAndSheafify J G).map f ≫ (composeEquiv J adj X✝ Y✝).symm g).val
state_after: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X'✝.val Y✝.val).symm (f.val ≫ g.val)) ⋯ =
    ((presheafToSheaf J D).map (whiskerRight f.val G)).val ≫
      sheafifyLift J (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
tactic: dsimp [composeEquiv]
state_before: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X'✝.val Y✝.val).symm (f.val ≫ g.val)) ⋯ =
    ((presheafToSheaf J D).map (whiskerRight f.val G)).val ≫
      sheafifyLift J (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
state_after: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X'✝.val Y✝.val).symm (f.val ≫ g.val)) ⋯ =
    sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
tactic: rw [sheafifyMap_sheafifyLift]
state_before: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X'✝.val Y✝.val).symm (f.val ≫ g.val)) ⋯ =
    sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
state_after: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J
      (((whiskeringRight Cᵒᵖ E D).obj G).map f.val ≫
        ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val)
      ⋯ =
    sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
tactic: erw [Adjunction.homEquiv_naturality_left_symm]
state_before: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J
      (((whiskeringRight Cᵒᵖ E D).obj G).map f.val ≫
        ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val)
      ⋯ =
    sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
state_after: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯ =
    sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
tactic: rw [whiskeringRight_obj_map]
state_before: case h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X'✝ X✝ : Sheaf J E
Y✝ : Sheaf J D
f : X'✝ ⟶ X✝
g : X✝ ⟶ (sheafCompose J F).obj Y✝
⊢ sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯ =
    sheafifyLift J (whiskerRight f.val G ≫ ((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val).symm g.val) ⋯
state_after: no goals
tactic: rfl
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
⊢ (composeEquiv J adj X✝ Y'✝) (f ≫ g) = (composeEquiv J adj X✝ Y✝) f ≫ (sheafCompose J F).map g
state_after: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ ((composeEquiv J adj X✝ Y'✝) (f ≫ g)).val.app x✝ =
    ((composeEquiv J adj X✝ Y✝) f ≫ (sheafCompose J F).map g).val.app x✝
tactic: ext
state_before: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ ((composeEquiv J adj X✝ Y'✝) (f ≫ g)).val.app x✝ =
    ((composeEquiv J adj X✝ Y✝) f ≫ (sheafCompose J F).map g).val.app x✝
state_after: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y'✝.val) (toSheafify J (X✝.val ⋙ G) ≫ f.val ≫ g.val)).app x✝ =
    (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val) (toSheafify J (X✝.val ⋙ G) ≫ f.val)).app x✝ ≫
      F.map (g.val.app x✝)
tactic: dsimp [composeEquiv]
state_before: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y'✝.val) (toSheafify J (X✝.val ⋙ G) ≫ f.val ≫ g.val)).app x✝ =
    (((Adjunction.whiskerRight Cᵒᵖ adj).homEquiv X✝.val Y✝.val) (toSheafify J (X✝.val ⋙ G) ≫ f.val)).app x✝ ≫
      F.map (g.val.app x✝)
state_after: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ ((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val ≫
          ((whiskeringRight Cᵒᵖ D E).obj F).map (toSheafify J (X✝.val ⋙ G) ≫ f.val ≫ g.val)).app
      x✝ =
    ((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val ≫
            ((whiskeringRight Cᵒᵖ D E).obj F).map (toSheafify J (X✝.val ⋙ G) ≫ f.val)).app
        x✝ ≫
      F.map (g.val.app x✝)
tactic: erw [Adjunction.homEquiv_unit, Adjunction.homEquiv_unit]
state_before: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ ((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val ≫
          ((whiskeringRight Cᵒᵖ D E).obj F).map (toSheafify J (X✝.val ⋙ G) ≫ f.val ≫ g.val)).app
      x✝ =
    ((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val ≫
            ((whiskeringRight Cᵒᵖ D E).obj F).map (toSheafify J (X✝.val ⋙ G) ≫ f.val)).app
        x✝ ≫
      F.map (g.val.app x✝)
state_after: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ ((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val).app x✝ ≫
      F.map ((toSheafify J (X✝.val ⋙ G)).app x✝ ≫ f.val.app x✝ ≫ g.val.app x✝) =
    (((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val).app x✝ ≫
        F.map ((toSheafify J (X✝.val ⋙ G)).app x✝ ≫ f.val.app x✝)) ≫
      F.map (g.val.app x✝)
tactic: dsimp
state_before: case h.w.h
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{?u.9011, u_1} E
F : D ⥤ E
G : E ⥤ D
inst✝¹ : HasWeakSheafify J D
inst✝ : J.HasSheafCompose F
adj : G ⊣ F
X✝ : Sheaf J E
Y✝ Y'✝ : Sheaf J D
f : (composeAndSheafify J G).obj X✝ ⟶ Y✝
g : Y✝ ⟶ Y'✝
x✝ : Cᵒᵖ
⊢ ((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val).app x✝ ≫
      F.map ((toSheafify J (X✝.val ⋙ G)).app x✝ ≫ f.val.app x✝ ≫ g.val.app x✝) =
    (((Adjunction.whiskerRight Cᵒᵖ adj).unit.app X✝.val).app x✝ ≫
        F.map ((toSheafify J (X✝.val ⋙ G)).app x✝ ≫ f.val.app x✝)) ≫
      F.map (g.val.app x✝)
state_after: no goals
tactic: simp