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

tactic: change (_ : colimit _ ⟶  _) = (_ : colimit _ ⟶  _)
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
⊢ stalkPushforward C (𝟙 X) ℱ x = (stalkFunctor C x).map (Pushforward.id ℱ).hom

tactic: ext1 j
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
⊢ stalkPushforward C (𝟙 X) ℱ x = (stalkFunctor C x).map (Pushforward.id ℱ).hom

tactic: induction' j using Opposite.rec with j
state_before: case w
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
j : (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ
⊢ colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        j ≫
      stalkPushforward C (𝟙 X) ℱ x =
    colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        j ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom

tactic: rcases j with ⟨⟨_, _⟩, _⟩
state_before: case w.mk
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
j : OpenNhds ((forget TopCat).map (𝟙 X) x)
⊢ colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        { unop := j } ≫
      stalkPushforward C (𝟙 X) ℱ x =
    colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        { unop := j } ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom

tactic: erw [colimit.ι_map_assoc]
state_before: case w.mk.mk.mk
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
carrier✝ : Set ↑X
is_open'✝ : IsOpen carrier✝
property✝ : (forget TopCat).map (𝟙 X) x ∈ { carrier := carrier✝, is_open' := is_open'✝ }
⊢ colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        { unop := { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ } } ≫
      stalkPushforward C (𝟙 X) ℱ x =
    colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        { unop := { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ } } ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom

tactic: simpa [stalkFunctor, stalkPushforward] using by rfl
state_before: case w.mk.mk.mk
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
carrier✝ : Set ↑X
is_open'✝ : IsOpen carrier✝
property✝ : (forget TopCat).map (𝟙 X) x ∈ { carrier := carrier✝, is_open' := is_open'✝ }
⊢ (whiskerRight (NatTrans.op (OpenNhds.inclusionMapIso (𝟙 X) x).inv) ℱ).app
        { unop := { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ } } ≫
      colimit.ι
          (Functor.op (OpenNhds.map (𝟙 X) x) ⋙
            ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion x))).obj ℱ)
          { unop := { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ } } ≫
        colimit.pre (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion x))).obj ℱ)
          (Functor.op (OpenNhds.map (𝟙 X) x)) =
    colimit.ι
        (((whiskeringLeft (OpenNhds ((forget TopCat).map (𝟙 X) x))ᵒᵖ (Opens ↑X)ᵒᵖ C).obj
              (Functor.op (OpenNhds.inclusion ((forget TopCat).map (𝟙 X) x)))).obj
          (𝟙 X _* ℱ))
        { unop := { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ } } ≫
      (stalkFunctor C x).map (Pushforward.id ℱ).hom

tactic: rfl
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
ℱ : Presheaf C X
x : ↑X
carrier✝ : Set ↑X
is_open'✝ : IsOpen carrier✝
property✝ : (forget TopCat).map (𝟙 X) x ∈ { carrier := carrier✝, is_open' := is_open'✝ }
⊢ colimit.ι (Functor.op (OpenNhds.inclusion x) ⋙ ℱ)
      { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ }.op =
    colimit.ι (Functor.op (OpenNhds.inclusion x) ⋙ ℱ)
      { unop := { obj := { carrier := carrier✝, is_open' := is_open'✝ }, property := property✝ } }