Theorem: StalkSkyscraperPresheafAdjunctionAuxs.fromStalk_to_skyscraper
File: Mathlib/Topology/Sheaves/Skyscraper.lean

tactic: erw [colimit.ι_desc]
state_before: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ colimit.ι (((whiskeringLeft (OpenNhds p₀)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion p₀).op).obj 𝓕) U ≫
      fromStalk p₀ (toSkyscraperPresheaf p₀ f) =
    colimit.ι (((whiskeringLeft (OpenNhds p₀)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion p₀).op).obj 𝓕) U ≫ f
state_after: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ { pt := c,
            ι :=
              { app := fun U => (toSkyscraperPresheaf p₀ f).app { unop := U.unop.obj } ≫ eqToHom ⋯,
                naturality := ⋯ } }.ι.app
      U =
    colimit.ι (((whiskeringLeft (OpenNhds p₀)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion p₀).op).obj 𝓕) U ≫ f

tactic: dsimp
state_before: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ { pt := c,
            ι :=
              { app := fun U => (toSkyscraperPresheaf p₀ f).app { unop := U.unop.obj } ≫ eqToHom ⋯,
                naturality := ⋯ } }.ι.app
      U =
    colimit.ι (((whiskeringLeft (OpenNhds p₀)ᵒᵖ (Opens ↑X)ᵒᵖ C).obj (OpenNhds.inclusion p₀).op).obj 𝓕) U ≫ f
state_after: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ (if h : p₀ ∈ U.unop.obj then 𝓕.germ ⟨p₀, h⟩ ≫ f ≫ eqToHom ⋯
      else (⋯ ▸ terminalIsTerminal).from (𝓕.obj { unop := U.unop.obj })) ≫
      eqToHom ⋯ =
    colimit.ι ((OpenNhds.inclusion p₀).op ⋙ 𝓕) U ≫ f

tactic: rw [dif_pos U.unop.2]
state_before: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ (if h : p₀ ∈ U.unop.obj then 𝓕.germ ⟨p₀, h⟩ ≫ f ≫ eqToHom ⋯
      else (⋯ ▸ terminalIsTerminal).from (𝓕.obj { unop := U.unop.obj })) ≫
      eqToHom ⋯ =
    colimit.ι ((OpenNhds.inclusion p₀).op ⋙ 𝓕) U ≫ f
state_after: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ (𝓕.germ ⟨p₀, ⋯⟩ ≫ f ≫ eqToHom ⋯) ≫ eqToHom ⋯ = colimit.ι ((OpenNhds.inclusion p₀).op ⋙ 𝓕) U ≫ f

tactic: rw [Category.assoc, Category.assoc, eqToHom_trans, eqToHom_refl, Category.comp_id,
  Presheaf.germ]
state_before: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ (𝓕.germ ⟨p₀, ⋯⟩ ≫ f ≫ eqToHom ⋯) ≫ eqToHom ⋯ = colimit.ι ((OpenNhds.inclusion p₀).op ⋙ 𝓕) U ≫ f
state_after: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ colimit.ι ((OpenNhds.inclusion ↑⟨p₀, ⋯⟩).op ⋙ 𝓕) { unop := { obj := U.unop.obj, property := ⋯ } } ≫ f =
    colimit.ι ((OpenNhds.inclusion p₀).op ⋙ 𝓕) U ≫ f

tactic: congr 3
state_before: X : TopCat
p₀ : ↑X
inst✝³ : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝² : Category.{u, v} C
A : C
inst✝¹ : HasTerminal C
inst✝ : HasColimits C
𝓕 : Presheaf C X
c : C
f : 𝓕.stalk p₀ ⟶ c
U : (OpenNhds p₀)ᵒᵖ
⊢ colimit.ι ((OpenNhds.inclusion ↑⟨p₀, ⋯⟩).op ⋙ 𝓕) { unop := { obj := U.unop.obj, property := ⋯ } } ≫ f =
    colimit.ι ((OpenNhds.inclusion p₀).op ⋙ 𝓕) U ≫ f
state_after: no goals