/-- This is a constructor of `TopCat.GlueData` whose arguments are in terms of elements and
intersections rather than subobjects and pullbacks. Please refer to `TopCat.GlueData.MkCore` for
details. -/
def mk' (h : MkCore.{u}) : TopCat.GlueData where
  J := h.J
  U := h.U
  V i := (Opens.toTopCat _).obj (h.V i.1 i.2)
  f i j := (h.V i j).inclusion
  f_id i := by
    -- Porting note: added `dsimp only`
    dsimp only
    exact (h.V_id i).symm ▸ IsIso.of_iso (Opens.inclusionTopIso (h.U i))
  f_open := fun i j : h.J => (h.V i j).openEmbedding
  t := h.t
  t_id i := by ext; rw [h.t_id]; rfl
  t' := h.t'
  t_fac i j k := by
    delta MkCore.t'
    rw [Category.assoc, Category.assoc, pullbackIsoProdSubtype_inv_snd, ← Iso.eq_inv_comp,
      pullbackIsoProdSubtype_inv_fst_assoc]
    ext ⟨⟨⟨x, hx⟩, ⟨x', hx'⟩⟩, rfl : x = x'⟩
    rfl
  cocycle i j k := by
    delta MkCore.t'
    simp_rw [← Category.assoc]
    rw [Iso.comp_inv_eq]
    simp only [Iso.inv_hom_id_assoc, Category.assoc, Category.id_comp]
    rw [← Iso.eq_inv_comp, Iso.inv_hom_id]
    ext1 ⟨⟨⟨x, hx⟩, ⟨x', hx'⟩⟩, rfl : x = x'⟩
    -- The next 9 tactics (up to `convert ...` were a single `rw` before leanprover/lean4#2644
    -- rw [comp_app, ContinuousMap.coe_mk, comp_app, id_app, ContinuousMap.coe_mk, Subtype.mk_eq_mk,
    --   Prod.mk.inj_iff, Subtype.mk_eq_mk, Subtype.ext_iff, and_self_iff]
    rw [comp_app] --, comp_app, id_app]
    -- erw [ContinuousMap.coe_mk]
    conv_lhs => erw [ContinuousMap.coe_mk]
    erw [id_app]
    rw [ContinuousMap.coe_mk]
    erw [Subtype.mk_eq_mk]
    rw [Prod.mk.inj_iff]
    erw [Subtype.mk_eq_mk]
    rw [Subtype.ext_iff]
    rw [and_self_iff]
    

Proof state:
case w.mk.mk.mk.mk
D : GlueData
h : MkCore
i j k : h.J
x : ↑(MkCore.U h i)
hx : x ∈ MkCore.V h i j
hx' : x ∈ MkCore.V h i k
⊢ ↑((MkCore.t h k i)
        (↑((ContinuousMap.mk fun x =>
                {
                  val :=
                    ({ val := ↑((MkCore.t h j k) (↑x).1),
                        property := (_ : ↑((MkCore.t h j k) (↑x).1) ∈ MkCore.V h k i) },
                      (MkCore.t h j k) (↑x).1),
                  property :=
                    (_ :
                      (Opens.inclusion (MkCore.V h k i))
                          ({ val := ↑((MkCore.t h j k) (↑x).1),
                                property := (_ : ↑((MkCore.t h j k) (↑x).1) ∈ MkCore.V h k i) },
                              (MkCore.t h j k) (↑x).1).1 =
                        (Opens.inclusion (MkCore.V h k i))
                          ({ val := ↑((MkCore.t h j k) (↑x).1),
                                property := (_ : ↑((MkCore.t h j k) (↑x).1) ∈ MkCore.V h k i) },
                              (MkCore.t h j k) (↑x).1).1) })
              ((ContinuousMap.mk fun x =>
                  {
                    val :=
                      ({ val := ↑((MkCore.t h i j) (↑x).1),
                          property := (_ : ↑((MkCore.t h i j) (↑x).1) ∈ MkCore.V h j k) },
                        (MkCore.t h i j) (↑x).1),
                    property :=
                      (_ :
                        (Opens.inclusion (MkCore.V h j k))
                            ({ val := ↑((MkCore.t h i j) (↑x).1),
                                  property := (_ : ↑((MkCore.t h i j) (↑x).1) ∈ MkCore.V h j k) },
                                (MkCore.t h i j) (↑x).1).1 =
                          (Opens.inclusion (MkCore.V h j k))
                            ({ val := ↑((MkCore.t h i j) (↑x).1),
                                  property := (_ : ↑((MkCore.t h i j) (↑x).1) ∈ MkCore.V h j k) },
                                (MkCore.t h i j) (↑x).1).1) })
                { val := ({ val := x, property := hx }, { val := x, property := hx' }),
                  property := (_ : x = x) }))).1) =
    x

Next tactic:
convert congr_arg Subtype.val (h.t_inv k i ⟨x, hx'⟩) using 3