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

tactic: simp
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ (Functor.op (Opens.map (𝟙 Y))).obj U.op = U.op

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

tactic: dsimp [id]
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj U.op) =
    colimit.ι (Lan.diagram (Functor.op (Opens.map (𝟙 Y))) ℱ U.op)
        (CostructuredArrow.mk (eqToHom (_ : (Functor.op (Opens.map (𝟙 Y))).obj U.op = U.op))) ≫
      ((id ℱ).app U.op).hom

tactic: erw [colimit.ι_desc_assoc]
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj U.op) =
    colimit.ι (Lan.diagram (Functor.op (Opens.map (𝟙 Y))) ℱ U.op)
        (CostructuredArrow.mk (𝟙 ((Opens.map (𝟙 Y)).obj U).op)) ≫
      colimit.desc (Lan.diagram (Functor.op (Opens.map (𝟙 Y))) ℱ U.op)
          (coconeOfDiagramTerminal
            (IsLimit.mk fun s =>
              CostructuredArrow.homMk
                (homOfLE
                    (_ :
                      (forget TopCat).map (𝟙 Y) '' ↑((Functor.fromPUnit U.op).obj s.pt.right).unop ⊆ ↑s.pt.1.unop)).op)
            (Lan.diagram (Functor.op (Opens.map (𝟙 Y))) ℱ U.op)) ≫
        ℱ.map
          (eqToHom
            (_ :
              { carrier := (forget TopCat).map (𝟙 Y) '' ↑U.op.unop,
                    is_open' := (_ : IsOpen ((forget TopCat).map (𝟙 Y) '' ↑U.op.unop)) }.op =
                U.op))

tactic: dsimp
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj U.op) =
    (coconeOfDiagramTerminal
              (IsLimit.mk fun s =>
                CostructuredArrow.homMk
                  (homOfLE
                      (_ :
                        (forget TopCat).map (𝟙 Y) '' ↑((Functor.fromPUnit U.op).obj s.pt.right).unop ⊆
                          ↑s.pt.1.unop)).op)
              (Lan.diagram (Functor.op (Opens.map (𝟙 Y))) ℱ U.op)).ι.app
        (CostructuredArrow.mk (𝟙 ((Opens.map (𝟙 Y)).obj U).op)) ≫
      ℱ.map
        (eqToHom
          (_ :
            { carrier := (forget TopCat).map (𝟙 Y) '' ↑U.op.unop,
                  is_open' := (_ : IsOpen ((forget TopCat).map (𝟙 Y) '' ↑U.op.unop)) }.op =
              U.op))

tactic: rw [← ℱ.map_comp, ← ℱ.map_id]
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ 𝟙 (ℱ.obj U.op) =
    ℱ.map
        (IsTerminal.from
            (IsLimit.mk fun s =>
              CostructuredArrow.homMk
                (homOfLE
                    (_ :
                      (forget TopCat).map (𝟙 Y) '' ↑((Functor.fromPUnit U.op).obj s.pt.right).unop ⊆ ↑s.pt.1.unop)).op)
            (CostructuredArrow.mk (𝟙 ((Opens.map (𝟙 Y)).obj U).op))).left ≫
      ℱ.map
        (eqToHom
          (_ :
            { carrier := (forget TopCat).map (𝟙 Y) '' ↑U.op.unop,
                  is_open' := (_ : IsOpen ((forget TopCat).map (𝟙 Y) '' ↑U.op.unop)) }.op =
              U.op))

tactic: rfl
state_before: C : Type u
inst✝¹ : Category C
inst✝ : HasColimits C
X Y : TopCat
ℱ : Presheaf C Y
U : Opens ↑Y
⊢ ℱ.map (𝟙 U.op) =
    ℱ.map
      ((IsTerminal.from
            (IsLimit.mk fun s =>
              CostructuredArrow.homMk
                (homOfLE
                    (_ :
                      (forget TopCat).map (𝟙 Y) '' ↑((Functor.fromPUnit U.op).obj s.pt.right).unop ⊆ ↑s.pt.1.unop)).op)
            (CostructuredArrow.mk (𝟙 ((Opens.map (𝟙 Y)).obj U).op))).left ≫
        eqToHom
          (_ :
            { carrier := (forget TopCat).map (𝟙 Y) '' ↑U.op.unop,
                  is_open' := (_ : IsOpen ((forget TopCat).map (𝟙 Y) '' ↑U.op.unop)) }.op =
              U.op))