Theorem: CategoryTheory.GlueData.types_ι_jointly_surjective
File: Mathlib/CategoryTheory/GlueData.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x : D.glued
⊢ ∃ i y, D.ι i y = x
state_after: C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x : D.glued
⊢ ∃ i y, Multicoequalizer.π D.diagram i y = x
tactic: delta CategoryTheory.GlueData.ι
state_before: C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x : D.glued
⊢ ∃ i y, Multicoequalizer.π D.diagram i y = x
state_after: C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x : D.glued
⊢ ∃ i y, (Sigma.ι D.diagram.right i ≫ Multicoequalizer.sigmaπ D.diagram) y = x
tactic: simp_rw [← Multicoequalizer.ι_sigmaπ D.diagram]
state_before: C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x : D.glued
⊢ ∃ i y, (Sigma.ι D.diagram.right i ≫ Multicoequalizer.sigmaπ D.diagram) y = x
state_after: case intro
C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x' : D.sigmaOpens
⊢ ∃ i y, (Sigma.ι D.diagram.right i ≫ Multicoequalizer.sigmaπ D.diagram) y = D.π x'
tactic: rcases D.types_π_surjective x with ⟨x', rfl⟩
state_before: case intro
C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x' : D.sigmaOpens
⊢ ∃ i y, (Sigma.ι D.diagram.right i ≫ Multicoequalizer.sigmaπ D.diagram) y = D.π x'
state_after: case intro
C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x' : D.sigmaOpens
⊢ ∃ i y,
    (Sigma.ι D.diagram.right i ≫ Multicoequalizer.sigmaπ D.diagram) y =
      D.π
        ((colimit.isoColimitCocone (Types.coproductColimitCocone D.U)).inv
          ((colimit.isoColimitCocone (Types.coproductColimitCocone D.U)).hom x'))
tactic: rw [← show (colimit.isoColimitCocone (Types.coproductColimitCocone.{v, v} _)).inv _ = x' from
      ConcreteCategory.congr_hom
        (colimit.isoColimitCocone (Types.coproductColimitCocone _)).hom_inv_id x']
state_before: case intro
C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x' : D.sigmaOpens
⊢ ∃ i y,
    (Sigma.ι D.diagram.right i ≫ Multicoequalizer.sigmaπ D.diagram) y =
      D.π
        ((colimit.isoColimitCocone (Types.coproductColimitCocone D.U)).inv
          ((colimit.isoColimitCocone (Types.coproductColimitCocone D.U)).hom x'))
state_after: case intro.mk
C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x' : D.sigmaOpens
i : D.J
y : D.U i
⊢ ∃ i_1 y_1,
    (Sigma.ι D.diagram.right i_1 ≫ Multicoequalizer.sigmaπ D.diagram) y_1 =
      D.π ((colimit.isoColimitCocone (Types.coproductColimitCocone D.U)).inv ⟨i, y⟩)
tactic: rcases (colimit.isoColimitCocone (Types.coproductColimitCocone _)).hom x' with ⟨i, y⟩
state_before: case intro.mk
C : Type u₁
inst✝¹ : Category.{v, u₁} C
C' : Type u₂
inst✝ : Category.{v, u₂} C'
D✝ : GlueData C
D : GlueData (Type v)
x' : D.sigmaOpens
i : D.J
y : D.U i
⊢ ∃ i_1 y_1,
    (Sigma.ι D.diagram.right i_1 ≫ Multicoequalizer.sigmaπ D.diagram) y_1 =
      D.π ((colimit.isoColimitCocone (Types.coproductColimitCocone D.U)).inv ⟨i, y⟩)
state_after: no goals
tactic: exact ⟨i, y, by
    simp [← Multicoequalizer.ι_sigmaπ]
    rfl ⟩