Theorem: CategoryTheory.GrothendieckTopology.Subpresheaf.toPresheaf_map_coe
File: Mathlib/CategoryTheory/Sites/Subsheaf.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X : Cᵒᵖ
⊢ { obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map (𝟙 X) =
    𝟙 ({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.obj X)
state_after: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X : Cᵒᵖ
x : F.obj X
property✝ : x ∈ G.obj X
⊢ ↑({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map (𝟙 X) ⟨x, property✝⟩) =
    ↑(𝟙 ({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.obj X) ⟨x, property✝⟩)
tactic: ext ⟨x, _⟩
state_before: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X : Cᵒᵖ
x : F.obj X
property✝ : x ∈ G.obj X
⊢ ↑({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map (𝟙 X) ⟨x, property✝⟩) =
    ↑(𝟙 ({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.obj X) ⟨x, property✝⟩)
state_after: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X : Cᵒᵖ
x : F.obj X
property✝ : x ∈ G.obj X
⊢ F.map (𝟙 X) x = x
tactic: dsimp
state_before: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X : Cᵒᵖ
x : F.obj X
property✝ : x ∈ G.obj X
⊢ F.map (𝟙 X) x = x
state_after: no goals
tactic: simp only [FunctorToTypes.map_id_apply]
state_before: C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X Y Z : Cᵒᵖ
i : X ⟶ Y
j : Y ⟶ Z
⊢ { obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map (i ≫ j) =
    { obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map i ≫
      { obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map j
state_after: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X Y Z : Cᵒᵖ
i : X ⟶ Y
j : Y ⟶ Z
x : F.obj X
property✝ : x ∈ G.obj X
⊢ ↑({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map (i ≫ j) ⟨x, property✝⟩) =
    ↑(({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map i ≫
          { obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map j)
        ⟨x, property✝⟩)
tactic: ext ⟨x, _⟩
state_before: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X Y Z : Cᵒᵖ
i : X ⟶ Y
j : Y ⟶ Z
x : F.obj X
property✝ : x ∈ G.obj X
⊢ ↑({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map (i ≫ j) ⟨x, property✝⟩) =
    ↑(({ obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map i ≫
          { obj := fun U => ↑(G.obj U), map := fun U V i x => ⟨F.map i ↑x, ⋯⟩ }.map j)
        ⟨x, property✝⟩)
state_after: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X Y Z : Cᵒᵖ
i : X ⟶ Y
j : Y ⟶ Z
x : F.obj X
property✝ : x ∈ G.obj X
⊢ F.map (i ≫ j) x = F.map j (F.map i x)
tactic: dsimp
state_before: case h.mk.a
C : Type u
inst✝ : Category.{v, u} C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
X Y Z : Cᵒᵖ
i : X ⟶ Y
j : Y ⟶ Z
x : F.obj X
property✝ : x ∈ G.obj X
⊢ F.map (i ≫ j) x = F.map j (F.map i x)
state_after: no goals
tactic: simp only [FunctorToTypes.map_comp_apply]