Theorem: TopCat.Presheaf.stalkSpecializes_stalkPushforward
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
f : X ⟶ Y
F : Presheaf C X
x y : ↑X
h : x ⤳ y
⊢ stalkSpecializes (f _* F) (_ : ↑f x ⤳ ↑f y) ≫ stalkPushforward C f F x =
    stalkPushforward C f F y ≫ stalkSpecializes F h

tactic: ext
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
F : Presheaf C X
x y : ↑X
h : x ⤳ y
⊢ stalkSpecializes (f _* F) (_ : ↑f x ⤳ ↑f y) ≫ stalkPushforward C f F x =
    stalkPushforward C f F y ≫ stalkSpecializes F h

tactic: delta stalkPushforward
state_before: case w
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
F : Presheaf C X
x y : ↑X
h : x ⤳ y
j✝ : (OpenNhds (↑f y))ᵒᵖ
⊢ colimit.ι
        (((whiskeringLeft (OpenNhds (↑f y))ᵒᵖ (Opens ↑Y)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion (↑f y)))).obj
          (f _* F))
        j✝ ≫
      stalkSpecializes (f _* F) (_ : ↑f x ⤳ ↑f y) ≫ stalkPushforward C f F x =
    colimit.ι
        (((whiskeringLeft (OpenNhds (↑f y))ᵒᵖ (Opens ↑Y)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion (↑f y)))).obj
          (f _* F))
        j✝ ≫
      stalkPushforward C f F y ≫ stalkSpecializes F h

tactic: simp only [stalkSpecializes, colimit.ι_desc_assoc, colimit.ι_map_assoc, colimit.ι_pre,
  Category.assoc, colimit.pre_desc, colimit.ι_desc]
state_before: case w
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
F : Presheaf C X
x y : ↑X
h : x ⤳ y
j✝ : (OpenNhds (↑f y))ᵒᵖ
⊢ colimit.ι
        (((whiskeringLeft (OpenNhds (↑f y))ᵒᵖ (Opens ↑Y)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion (↑f y)))).obj
          (f _* F))
        j✝ ≫
      stalkSpecializes (f _* F) (_ : ↑f x ⤳ ↑f y) ≫
        colim.map (whiskerRight (NatTrans.op (OpenNhds.inclusionMapIso f x).inv) F) ≫
          colimit.pre (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion x))).obj F)
            (Functor.op (OpenNhds.map f x)) =
    colimit.ι
        (((whiskeringLeft (OpenNhds (↑f y))ᵒᵖ (Opens ↑Y)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion (↑f y)))).obj
          (f _* F))
        j✝ ≫
      (colim.map (whiskerRight (NatTrans.op (OpenNhds.inclusionMapIso f y).inv) F) ≫
          colimit.pre (((whiskeringLeft (OpenNhds y)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion y))).obj F)
            (Functor.op (OpenNhds.map f y))) ≫
        stalkSpecializes F h

tactic: rfl
state_before: case w
C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
F : Presheaf C X
x y : ↑X
h : x ⤳ y
j✝ : (OpenNhds (↑f y))ᵒᵖ
⊢ (whiskerRight (NatTrans.op (OpenNhds.inclusionMapIso f x).inv) F).app
        { obj := j✝.unop.obj, property := (_ : ↑f x ∈ j✝.unop.obj.carrier) }.op ≫
      colimit.ι (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion x))).obj F)
        ((Functor.op (OpenNhds.map f x)).obj { obj := j✝.unop.obj, property := (_ : ↑f x ∈ j✝.unop.obj.carrier) }.op) =
    (whiskerRight (NatTrans.op (OpenNhds.inclusionMapIso f y).inv) F).app j✝ ≫
      (Cocone.whisker (Functor.op (OpenNhds.map f y))
              {
                pt :=
                  colim.obj
                    (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (Functor.op (OpenNhds.inclusion x))).obj F),
                ι :=
                  NatTrans.mk fun U =>
                    colimit.ι (Functor.op (OpenNhds.inclusion x) ⋙ F)
                      { obj := U.unop.obj, property := (_ : x ∈ U.unop.obj.carrier) }.op }).ι.app
        j✝