Theorem: TopCat.Presheaf.stalkPushforward.stalkPushforward_iso_of_openEmbedding
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
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
⊢ IsIso (stalkPushforward C f F x)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
⊢ IsIso (stalkPushforward C f F x)
tactic: haveI := Functor.initial_of_adjunction (hf.isOpenMap.adjunctionNhds x)
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
⊢ IsIso (stalkPushforward C f F x)
state_after: case h.e'_5.h
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
e_3✝ : ((pushforward C f).obj F).stalk (f x) = colimit ((OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F)
e_4✝ : F.stalk x = colim.obj (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj F)
⊢ stalkPushforward C f F x =
    ((Functor.Final.colimitIso (⋯.functorNhds x).op ((OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F)).symm ≪≫
        colim.mapIso ?convert_2).hom

case convert_2
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
⊢ (⋯.functorNhds x).op ⋙ (OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F ≅
    ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj F
tactic: convert
      ((Functor.Final.colimitIso (hf.isOpenMap.functorNhds x).op
              ((OpenNhds.inclusion (f x)).op ⋙ f _* F) :
            _).symm ≪≫
        colim.mapIso _).isIso_hom
state_before: case h.e'_5.h
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
e_3✝ : ((pushforward C f).obj F).stalk (f x) = colimit ((OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F)
e_4✝ : F.stalk x = colim.obj (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj F)
⊢ stalkPushforward C f F x =
    ((Functor.Final.colimitIso (⋯.functorNhds x).op ((OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F)).symm ≪≫
        colim.mapIso ?convert_2).hom

case convert_2
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
⊢ (⋯.functorNhds x).op ⋙ (OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F ≅
    ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj F
state_after: case convert_2
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
⊢ (⋯.functorNhds x).op ⋙ (OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F ≅
    ((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj F

case h.e'_5.h
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y Z : TopCat
f : X ⟶ Y
hf : OpenEmbedding ⇑f
F : Presheaf C X
x : ↑X
this : (⋯.functorNhds x).Initial
e_3✝ : ((pushforward C f).obj F).stalk (f x) = colimit ((OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F)
e_4✝ : F.stalk x = colim.obj (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion x).op).obj F)
⊢ stalkPushforward C f F x =
    ((Functor.Final.colimitIso (⋯.functorNhds x).op ((OpenNhds.inclusion (f x)).op ⋙ (pushforward C f).obj F)).symm ≪≫
        colim.mapIso ?convert_2).hom
tactic: swap