Theorem: TopCat.Presheaf.stalkPushforward.id
File: Mathlib/Topology/Sheaves/Stalks.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
⊢ stalkPushforward C (𝟙 X) ℱ x = (stalkFunctor C x).map (Pushforward.id ℱ).hom
state_after: case ih
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : (𝟙 X) x ∈ U✝
⊢ ((pushforward C (𝟙 X)).obj ℱ).germ ⟨(𝟙 X) x, hxU✝⟩ ≫ stalkPushforward C (𝟙 X) ℱ x =
    ((pushforward C (𝟙 X)).obj ℱ).germ ⟨(𝟙 X) x, hxU✝⟩ ≫ (stalkFunctor C x).map (Pushforward.id ℱ).hom
tactic: ext
state_before: case ih
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : (𝟙 X) x ∈ U✝
⊢ ((pushforward C (𝟙 X)).obj ℱ).germ ⟨(𝟙 X) x, hxU✝⟩ ≫ stalkPushforward C (𝟙 X) ℱ x =
    ((pushforward C (𝟙 X)).obj ℱ).germ ⟨(𝟙 X) x, hxU✝⟩ ≫ (stalkFunctor C x).map (Pushforward.id ℱ).hom
state_after: case ih
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : (𝟙 X) x ∈ U✝
⊢ ℱ.map ((NatTrans.op (OpenNhds.inclusionMapIso (𝟙 X) x).inv).app (op { obj := U✝, property := ⋯ })) ≫
      colimit.ι
          ((OpenNhds.map (𝟙 X) x).op ⋙
            ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (op { obj := U✝, property := ⋯ }) ≫
        colimit.pre (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (OpenNhds.map (𝟙 X) x).op =
    colimit.ι ((OpenNhds.inclusion ((𝟙 X) x)).op ⋙ (pushforward C (𝟙 X)).obj ℱ) (op { obj := U✝, property := ⋯ }) ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom
tactic: simp only [stalkPushforward, germ, colim_map, ι_colimMap_assoc, whiskerRight_app]
state_before: case ih
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : (𝟙 X) x ∈ U✝
⊢ ℱ.map ((NatTrans.op (OpenNhds.inclusionMapIso (𝟙 X) x).inv).app (op { obj := U✝, property := ⋯ })) ≫
      colimit.ι
          ((OpenNhds.map (𝟙 X) x).op ⋙
            ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (op { obj := U✝, property := ⋯ }) ≫
        colimit.pre (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (OpenNhds.map (𝟙 X) x).op =
    colimit.ι ((OpenNhds.inclusion ((𝟙 X) x)).op ⋙ (pushforward C (𝟙 X)).obj ℱ) (op { obj := U✝, property := ⋯ }) ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom
state_after: case ih
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : (𝟙 X) x ∈ U✝
⊢ 𝟙 (ℱ.obj ((OpenNhds.inclusion ((𝟙 X) x) ⋙ Opens.map (𝟙 X)).op.obj (op { obj := U✝, property := ⋯ }))) ≫
      colimit.ι
          ((OpenNhds.map (𝟙 X) x).op ⋙
            ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (op { obj := U✝, property := ⋯ }) ≫
        colimit.pre (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (OpenNhds.map (𝟙 X) x).op =
    colimit.ι ((OpenNhds.inclusion ((𝟙 X) x)).op ⋙ (pushforward C (𝟙 X)).obj ℱ) (op { obj := U✝, property := ⋯ }) ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom
tactic: erw [CategoryTheory.Functor.map_id]
state_before: case ih
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : (𝟙 X) x ∈ U✝
⊢ 𝟙 (ℱ.obj ((OpenNhds.inclusion ((𝟙 X) x) ⋙ Opens.map (𝟙 X)).op.obj (op { obj := U✝, property := ⋯ }))) ≫
      colimit.ι
          ((OpenNhds.map (𝟙 X) x).op ⋙
            ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (op { obj := U✝, property := ⋯ }) ≫
        colimit.pre (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj ℱ)
          (OpenNhds.map (𝟙 X) x).op =
    colimit.ι ((OpenNhds.inclusion ((𝟙 X) x)).op ⋙ (pushforward C (𝟙 X)).obj ℱ) (op { obj := U✝, property := ⋯ }) ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom
state_after: no goals
tactic: simp [stalkFunctor]