Theorem: TopCat.Presheaf.Pullback.id_inv_app
File: Mathlib/Topology/Sheaves/Presheaf.lean

tactic: simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ (Opens.map (𝟙 Y)).op.obj { unop := U } = { unop := U }
state_after: no goals

tactic: rw [← Category.id_comp ((id ℱ).inv.app (op U)), ← NatIso.app_inv, Iso.comp_inv_eq]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ (id ℱ).inv.app { unop := U } =
    colimit.ι (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U }) (CostructuredArrow.mk (eqToHom ⋯))
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    colimit.ι (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U }) (CostructuredArrow.mk (eqToHom ⋯)) ≫
      ((id ℱ).app { unop := U }).hom

tactic: dsimp [id]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    colimit.ι (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U }) (CostructuredArrow.mk (eqToHom ⋯)) ≫
      ((id ℱ).app { unop := U }).hom
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    colimit.ι (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })
        (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U })) ≫
      colimit.desc (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })
          (coconeOfDiagramTerminal { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
            (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })) ≫
        ℱ.map (eqToHom ⋯)

tactic: erw [colimit.ι_desc_assoc]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    colimit.ι (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })
        (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U })) ≫
      colimit.desc (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })
          (coconeOfDiagramTerminal { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
            (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })) ≫
        ℱ.map (eqToHom ⋯)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    (coconeOfDiagramTerminal { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
              (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })).ι.app
        (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U })) ≫
      ℱ.map (eqToHom ⋯)

tactic: dsimp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    (coconeOfDiagramTerminal { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
              (Lan.diagram (Opens.map (𝟙 Y)).op ℱ { unop := U })).ι.app
        (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U })) ≫
      ℱ.map (eqToHom ⋯)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    ℱ.map
        (IsTerminal.from { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
            (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U }))).left ≫
      ℱ.map (eqToHom ⋯)

tactic: rw [← ℱ.map_comp, ← ℱ.map_id]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj { unop := U }) =
    ℱ.map
        (IsTerminal.from { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
            (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U }))).left ≫
      ℱ.map (eqToHom ⋯)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ ℱ.map (𝟙 { unop := U }) =
    ℱ.map
      ((IsTerminal.from { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
            (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U }))).left ≫
        eqToHom ⋯)

tactic: rfl
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ ℱ.map (𝟙 { unop := U }) =
    ℱ.map
      ((IsTerminal.from { lift := fun s => CostructuredArrow.homMk (homOfLE ⋯).op ⋯, fac := ⋯, uniq := ⋯ }
            (CostructuredArrow.mk (𝟙 { unop := (Opens.map (𝟙 Y)).obj U }))).left ≫
        eqToHom ⋯)
state_after: no goals