l3lab/ntp-mathlib huggingface dataset:
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> 

Proof state:
case h.e'_4.h.e'_5.h.h
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
this :
  IsIso
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).c.app
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U)))
e_1✝ : (Opens ↑↑(colimit F).toPresheafedSpace)ᵒᵖ = (Opens ↑↑(forgetToPresheafedSpace.obj (colimit F)))ᵒᵖ
he✝ : CategoryStruct.toQuiver = CategoryStruct.toQuiver
⊢ ((colimit.ι F i).base _* (F.obj i).presheaf).toPrefunctor =
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base _*
        ((F ⋙ forgetToPresheafedSpace).obj i).presheaf).toPrefunctor

Next tactic:
congr
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> 

Proof state:
case h.e'_4.h.e'_6.h
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
this :
  IsIso
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).c.app
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U)))
e_1✝ : (Opens ↑↑(colimit F).toPresheafedSpace)ᵒᵖ = (Opens ↑↑(forgetToPresheafedSpace.obj (colimit F)))ᵒᵖ
⊢ op ((IsOpenMap.functor (_ : IsOpenMap ⇑(colimit.ι F i).base)).obj U) =
    op
      ((IsOpenMap.functor
            (_ :
              IsOpenMap
                ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                      (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
        U)

Next tactic:
congr
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> 

Proof state:
case h.e'_5.e'_6.h.h
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
this :
  IsIso
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).c.app
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U)))
e_3✝ :
  (colimit F).toPresheafedSpace.presheaf.obj (op ((IsOpenMap.functor (_ : IsOpenMap ⇑(colimit.ι F i).base)).obj U)) =
    (forgetToPresheafedSpace.obj (colimit F)).presheaf.obj
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U))
e_4✝ :
  ((colimit.ι F i).base _* (F.obj i).presheaf).obj
      (op ((IsOpenMap.functor (_ : IsOpenMap ⇑(colimit.ι F i).base)).obj U)) =
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base _*
          ((F ⋙ forgetToPresheafedSpace).obj i).presheaf).obj
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U))
e_1✝ : (Opens ↑↑(colimit F).toPresheafedSpace)ᵒᵖ = (Opens ↑↑(forgetToPresheafedSpace.obj (colimit F)))ᵒᵖ
he✝ : Category.opposite = Category.opposite
⊢ (colimit.ι F i).base _* (F.obj i).presheaf =
    (colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base _*
      ((F ⋙ forgetToPresheafedSpace).obj i).presheaf

Next tactic:
congr
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> 

Proof state:
case h.e'_5.e'_8.h
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
this :
  IsIso
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).c.app
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U)))
e_3✝ :
  (colimit F).toPresheafedSpace.presheaf.obj (op ((IsOpenMap.functor (_ : IsOpenMap ⇑(colimit.ι F i).base)).obj U)) =
    (forgetToPresheafedSpace.obj (colimit F)).presheaf.obj
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U))
e_4✝ :
  ((colimit.ι F i).base _* (F.obj i).presheaf).obj
      (op ((IsOpenMap.functor (_ : IsOpenMap ⇑(colimit.ι F i).base)).obj U)) =
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base _*
          ((F ⋙ forgetToPresheafedSpace).obj i).presheaf).obj
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U))
e_1✝ : (Opens ↑↑(colimit F).toPresheafedSpace)ᵒᵖ = (Opens ↑↑(forgetToPresheafedSpace.obj (colimit F)))ᵒᵖ
⊢ op ((IsOpenMap.functor (_ : IsOpenMap ⇑(colimit.ι F i).base)).obj U) =
    op
      ((IsOpenMap.functor
            (_ :
              IsOpenMap
                ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                      (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
        U)

Next tactic:
congr
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> congr
    

Proof state:
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
⊢ IsIso
    ((colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).c.app
      (op
        ((IsOpenMap.functor
              (_ :
                IsOpenMap
                  ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                        (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
          U)))

Next tactic:
rw [PresheafedSpace.comp_c_app,
      ← PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_hom_π]
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> congr
    rw [PresheafedSpace.comp_c_app,
      ← PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_hom_π]
    -- Porting note : this instance created manually to make the `inferInstance` below work
    

Proof state:
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
⊢ IsIso
    ((preservesColimitIso forgetToPresheafedSpace F).inv.c.app
        (op
          ((IsOpenMap.functor
                (_ :
                  IsOpenMap
                    ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                          (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
            U)) ≫
      (PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit (F ⋙ forgetToPresheafedSpace)
            ((Opens.map (preservesColimitIso forgetToPresheafedSpace F).inv.base).obj
              (op
                  ((IsOpenMap.functor
                        (_ :
                          IsOpenMap
                            ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                                  (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
                    U)).unop)).hom ≫
        limit.π
          (PresheafedSpace.componentwiseDiagram (F ⋙ forgetToPresheafedSpace)
            ((Opens.map (preservesColimitIso forgetToPresheafedSpace F).inv.base).obj
              (op
                  ((IsOpenMap.functor
                        (_ :
                          IsOpenMap
                            ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                                  (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
                    U)).unop))
          (op i))

Next tactic:
have inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c :=
      PresheafedSpace.c_isIso_of_iso _
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> congr
    rw [PresheafedSpace.comp_c_app,
      ← PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_hom_π]
    -- Porting note : this instance created manually to make the `inferInstance` below work
    have inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c :=
      PresheafedSpace.c_isIso_of_iso _
    rsuffices : IsIso
        (limit.π
          (PresheafedSpace.componentwiseDiagram (F ⋙ SheafedSpace.forgetToPresheafedSpace)
            ((Opens.map
                  (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv.base).obj
              (unop <| op <| H.isOpenMap.functor.obj U)))
          (op i))
    · infer_instance
    

Proof state:
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c
⊢ IsIso
    (limit.π
      (PresheafedSpace.componentwiseDiagram (F ⋙ forgetToPresheafedSpace)
        ((Opens.map (preservesColimitIso forgetToPresheafedSpace F).inv.base).obj
          (op
              ((IsOpenMap.functor
                    (_ :
                      IsOpenMap
                        ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                              (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
                U)).unop))
      (op i))

Next tactic:
apply limit_π_isIso_of_is_strict_terminal
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> congr
    rw [PresheafedSpace.comp_c_app,
      ← PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_hom_π]
    -- Porting note : this instance created manually to make the `inferInstance` below work
    have inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c :=
      PresheafedSpace.c_isIso_of_iso _
    rsuffices : IsIso
        (limit.π
          (PresheafedSpace.componentwiseDiagram (F ⋙ SheafedSpace.forgetToPresheafedSpace)
            ((Opens.map
                  (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv.base).obj
              (unop <| op <| H.isOpenMap.functor.obj U)))
          (op i))
    · infer_instance
    apply limit_π_isIso_of_is_strict_terminal
    

Proof state:
case H
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c
⊢ (j : (Discrete ι)ᵒᵖ) →
    j ≠ op i →
      IsTerminal
        ((PresheafedSpace.componentwiseDiagram (F ⋙ forgetToPresheafedSpace)
              ((Opens.map (preservesColimitIso forgetToPresheafedSpace F).inv.base).obj
                (op
                    ((IsOpenMap.functor
                          (_ :
                            IsOpenMap
                              ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                                    (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
                      U)).unop)).obj
          j)

Next tactic:
intro j hj
instance sigma_ι_isOpenImmersion [HasStrictTerminalObjects C] :
    SheafedSpace.IsOpenImmersion (colimit.ι F i) where
  base_open := sigma_ι_openEmbedding F i
  c_iso U := by
    have e : colimit.ι F i = _ :=
      (ι_preservesColimitsIso_inv SheafedSpace.forgetToPresheafedSpace F i).symm
    have H :
      OpenEmbedding
        (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
            (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).base :=
      e ▸ sigma_ι_openEmbedding F i
    suffices IsIso <| (colimit.ι (F ⋙ SheafedSpace.forgetToPresheafedSpace) i ≫
        (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv).c.app <|
      op (H.isOpenMap.functor.obj U) by
      -- Porting note : just `convert` is very slow, so helps it a bit
      convert this using 2 <;> congr
    rw [PresheafedSpace.comp_c_app,
      ← PresheafedSpace.colimitPresheafObjIsoComponentwiseLimit_hom_π]
    -- Porting note : this instance created manually to make the `inferInstance` below work
    have inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c :=
      PresheafedSpace.c_isIso_of_iso _
    rsuffices : IsIso
        (limit.π
          (PresheafedSpace.componentwiseDiagram (F ⋙ SheafedSpace.forgetToPresheafedSpace)
            ((Opens.map
                  (preservesColimitIso SheafedSpace.forgetToPresheafedSpace F).inv.base).obj
              (unop <| op <| H.isOpenMap.functor.obj U)))
          (op i))
    · infer_instance
    apply limit_π_isIso_of_is_strict_terminal
    intro j hj
    

Proof state:
case H
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : HasLimits C
ι : Type v
F : Discrete ι ⥤ SheafedSpace C
inst✝¹ : HasColimit F
i : Discrete ι
inst✝ : HasStrictTerminalObjects C
U : Opens ↑↑(F.obj i).toPresheafedSpace
e : colimit.ι F i = colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv
H :
  OpenEmbedding ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫ (preservesColimitIso forgetToPresheafedSpace F).inv).base
inst1 : IsIso (preservesColimitIso forgetToPresheafedSpace F).inv.c
j : (Discrete ι)ᵒᵖ
hj : j ≠ op i
⊢ IsTerminal
    ((PresheafedSpace.componentwiseDiagram (F ⋙ forgetToPresheafedSpace)
          ((Opens.map (preservesColimitIso forgetToPresheafedSpace F).inv.base).obj
            (op
                ((IsOpenMap.functor
                      (_ :
                        IsOpenMap
                          ⇑(colimit.ι (F ⋙ forgetToPresheafedSpace) i ≫
                                (preservesColimitIso forgetToPresheafedSpace F).inv).base)).obj
                  U)).unop)).obj
      j)

Next tactic:
induction j using Opposite.rec' with | h j => ?_