Theorem: TopCat.GlueData.eqvGen_of_π_eq
File: Mathlib/Topology/Gluing.lean

Proof steps:
state_before: D : GlueData
x y : ↑(∐ D.U)
h : D.π x = D.π y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap ≫ (Multicoequalizer.isoCoequalizer D.diagram).inv) x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap ≫ (Multicoequalizer.isoCoequalizer D.diagram).inv) y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
tactic: delta GlueData.π Multicoequalizer.sigmaπ at h
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap ≫ (Multicoequalizer.isoCoequalizer D.diagram).inv) x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap ≫ (Multicoequalizer.isoCoequalizer D.diagram).inv) y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
tactic: replace h := (TopCat.mono_iff_injective (Multicoequalizer.isoCoequalizer 𝖣.diagram).inv).mp
    inferInstance h
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
tactic: let diagram := parallelPair 𝖣.diagram.fstSigmaMap 𝖣.diagram.sndSigmaMap ⋙ forget _
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
this : colimit.ι diagram one x = colimit.ι diagram one y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
tactic: have : colimit.ι diagram one x = colimit.ι diagram one y := by
    dsimp only [coequalizer.π, ContinuousMap.toFun_eq_coe] at h
    -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
    erw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
    simp
    rfl
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
this : colimit.ι diagram one x = colimit.ι diagram one y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
this✝ : colimit.ι diagram one x = colimit.ι diagram one y
this :
  (colimit.ι diagram one ≫
        colim.map (diagramIsoParallelPair diagram).hom ≫
          (colimit.isoColimitCocone
              (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
                (diagram.map WalkingParallelPairHom.right))).hom)
      x =
    (colimit.ι diagram one ≫
        colim.map (diagramIsoParallelPair diagram).hom ≫
          (colimit.isoColimitCocone
              (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
                (diagram.map WalkingParallelPairHom.right))).hom)
      y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
tactic: have :
    (colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ =
      (colimit.ι diagram _ ≫ colim.map _ ≫ (colimit.isoColimitCocone _).hom) _ :=
    (congr_arg
        (colim.map (diagramIsoParallelPair diagram).hom ≫
          (colimit.isoColimitCocone (Types.coequalizerColimit _ _)).hom)
        this :
      _)
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
this✝ : colimit.ι diagram one x = colimit.ι diagram one y
this :
  (colimit.ι diagram one ≫
        colim.map (diagramIsoParallelPair diagram).hom ≫
          (colimit.isoColimitCocone
              (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
                (diagram.map WalkingParallelPairHom.right))).hom)
      x =
    (colimit.ι diagram one ≫
        colim.map (diagramIsoParallelPair diagram).hom ≫
          (colimit.isoColimitCocone
              (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
                (diagram.map WalkingParallelPairHom.right))).hom)
      y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
this✝ : colimit.ι diagram one x = colimit.ι diagram one y
this :
  (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
              (diagram.map WalkingParallelPairHom.right)).cocone.ι.app
      one x =
    (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
              (diagram.map WalkingParallelPairHom.right)).cocone.ι.app
      one y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
tactic: rw [colimit.ι_map_assoc, diagramIsoParallelPair_hom_app, eqToHom_refl,
    colimit.isoColimitCocone_ι_hom, types_comp_apply, types_id_apply, types_comp_apply,
    types_id_apply] at this
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 x =
    (coequalizer.π D.diagram.fstSigmaMap D.diagram.sndSigmaMap).1 y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
this✝ : colimit.ι diagram one x = colimit.ι diagram one y
this :
  (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
              (diagram.map WalkingParallelPairHom.right)).cocone.ι.app
      one x =
    (Types.coequalizerColimit (diagram.map WalkingParallelPairHom.left)
              (diagram.map WalkingParallelPairHom.right)).cocone.ι.app
      one y
⊢ EqvGen (Types.CoequalizerRel ⇑D.diagram.fstSigmaMap ⇑D.diagram.sndSigmaMap) x y
state_after: no goals
tactic: exact Quot.eq.1 this