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

tactic: delta GlueData.π Multicoequalizer.sigmaπ at h
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: 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 ≫ (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: 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
⊢ 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: have : colimit.ι diagram one x = colimit.ι diagram one y := by
  dsimp only [coequalizer.π, ContinuousMap.toFun_eq_coe] at h
  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
⊢ 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 _ ≫ 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
⊢ 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: 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 :
  (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: exact Quot.eq.1 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: dsimp only [coequalizer.π, ContinuousMap.toFun_eq_coe] at 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
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ colimit.ι diagram one x = colimit.ι diagram one y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) x =
    (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ colimit.ι diagram one x = colimit.ι diagram one y

tactic: erw [← ι_preservesColimitsIso_hom, forget_map_eq_coe, types_comp_apply, h]
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) x =
    (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ colimit.ι diagram one x = colimit.ι diagram one y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) x =
    (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom
      ((colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y) =
    (⇑(colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) ≫
        (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom)
      y

tactic: simp
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) x =
    (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom
      ((colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y) =
    (⇑(colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) ≫
        (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom)
      y
state_after: D : GlueData
x y : ↑(∐ D.U)
h :
  (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) x =
    (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom
      ((colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y) =
    (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom
      ((colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y)

tactic: rfl
state_before: D : GlueData
x y : ↑(∐ D.U)
h :
  (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) x =
    (colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y
diagram : WalkingParallelPair ⥤ Type u := parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap ⋙ forget TopCat
⊢ (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom
      ((colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y) =
    (preservesColimitIso (forget TopCat) (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap)).hom
      ((colimit.ι (parallelPair D.diagram.fstSigmaMap D.diagram.sndSigmaMap) one) y)
state_after: no goals