Theorem: skyscraperPresheaf_map
File: Mathlib/Topology/Sheaves/Skyscraper.lean

Proof steps:
state_before: X : TopCat
p₀ : ↑X
inst✝² : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝¹ : Category.{w, v} C
inst✝ : HasTerminal C
A : C
U V : (Opens ↑X)ᵒᵖ
i : U ⟶ V
h : p₀ ∈ unop V
⊢ (fun U => if p₀ ∈ unop U then A else ⊤_ C) U = (fun U => if p₀ ∈ unop U then A else ⊤_ C) V
state_after: X : TopCat
p₀ : ↑X
inst✝² : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝¹ : Category.{w, v} C
inst✝ : HasTerminal C
A : C
U V : (Opens ↑X)ᵒᵖ
i : U ⟶ V
h : p₀ ∈ unop V
⊢ (if p₀ ∈ unop U then A else ⊤_ C) = if p₀ ∈ unop V then A else ⊤_ C
tactic: dsimp
state_before: X : TopCat
p₀ : ↑X
inst✝² : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝¹ : Category.{w, v} C
inst✝ : HasTerminal C
A : C
U V : (Opens ↑X)ᵒᵖ
i : U ⟶ V
h : p₀ ∈ unop V
⊢ (if p₀ ∈ unop U then A else ⊤_ C) = if p₀ ∈ unop V then A else ⊤_ C
state_after: no goals
tactic: erw [if_pos h, if_pos (leOfHom i.unop h)]
state_before: X : TopCat
p₀ : ↑X
inst✝² : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝¹ : Category.{w, v} C
inst✝ : HasTerminal C
A : C
U V W : (Opens ↑X)ᵒᵖ
iVU : U ⟶ V
iWV : V ⟶ W
⊢ { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
          map := fun {U V} i =>
            if h : p₀ ∈ unop V then eqToHom ⋯
            else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
      (iVU ≫ iWV) =
    { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
            map := fun {U V} i =>
              if h : p₀ ∈ unop V then eqToHom ⋯
              else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
        iVU ≫
      { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
            map := fun {U V} i =>
              if h : p₀ ∈ unop V then eqToHom ⋯
              else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
        iWV
state_after: case pos
X : TopCat
p₀ : ↑X
inst✝² : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝¹ : Category.{w, v} C
inst✝ : HasTerminal C
A : C
U V W : (Opens ↑X)ᵒᵖ
iVU : U ⟶ V
iWV : V ⟶ W
hW : p₀ ∈ unop W
⊢ { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
          map := fun {U V} i =>
            if h : p₀ ∈ unop V then eqToHom ⋯
            else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
      (iVU ≫ iWV) =
    { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
            map := fun {U V} i =>
              if h : p₀ ∈ unop V then eqToHom ⋯
              else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
        iVU ≫
      { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
            map := fun {U V} i =>
              if h : p₀ ∈ unop V then eqToHom ⋯
              else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
        iWV

case neg
X : TopCat
p₀ : ↑X
inst✝² : (U : Opens ↑X) → Decidable (p₀ ∈ U)
C : Type v
inst✝¹ : Category.{w, v} C
inst✝ : HasTerminal C
A : C
U V W : (Opens ↑X)ᵒᵖ
iVU : U ⟶ V
iWV : V ⟶ W
hW : p₀ ∉ unop W
⊢ { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
          map := fun {U V} i =>
            if h : p₀ ∈ unop V then eqToHom ⋯
            else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
      (iVU ≫ iWV) =
    { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
            map := fun {U V} i =>
              if h : p₀ ∈ unop V then eqToHom ⋯
              else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
        iVU ≫
      { obj := fun U => if p₀ ∈ unop U then A else ⊤_ C,
            map := fun {U V} i =>
              if h : p₀ ∈ unop V then eqToHom ⋯
              else (⋯ ▸ terminalIsTerminal).from ((fun U => if p₀ ∈ unop U then A else ⊤_ C) U) }.map
        iWV
tactic: by_cases hW : p₀ ∈ unop W