Theorem: CategoryTheory.Limits.Cofan.isColimit_iff_isIso_sigmaDesc
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

Proof steps:
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
⊢ IsIso (Sigma.desc c.inj) ↔ Nonempty (IsColimit c)
state_after: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
⊢ IsIso (Sigma.desc c.inj)
tactic: refine ⟨fun h ↦ ⟨isColimitOfIsIsoSigmaDesc c⟩, fun ⟨hc⟩ ↦ ?_⟩
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
⊢ IsIso (Sigma.desc c.inj)
state_after: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
⊢ IsIso (Sigma.desc c.inj)
tactic: have : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c) := by
    simp; infer_instance
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
⊢ IsIso (Sigma.desc c.inj)
state_after: case h.e'_5.h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
e_3✝ : ∐ f = (mk (∐ f) (Sigma.ι f)).pt
⊢ Sigma.desc c.inj = ((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c
tactic: convert this
state_before: case h.e'_5.h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
e_3✝ : ∐ f = (mk (∐ f) (Sigma.ι f)).pt
⊢ Sigma.desc c.inj = ((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c
state_after: case h.e'_5.h.h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
e_3✝ : ∐ f = (mk (∐ f) (Sigma.ι f)).pt
b✝ : β
⊢ Sigma.ι f b✝ ≫ Sigma.desc c.inj =
    Sigma.ι f b✝ ≫ ((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c
tactic: ext
state_before: case h.e'_5.h.h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
e_3✝ : ∐ f = (mk (∐ f) (Sigma.ι f)).pt
b✝ : β
⊢ Sigma.ι f b✝ ≫ Sigma.desc c.inj =
    Sigma.ι f b✝ ≫ ((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c
state_after: case h.e'_5.h.h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
e_3✝ : ∐ f = (mk (∐ f) (Sigma.ι f)).pt
b✝ : β
⊢ c.inj b✝ = c.ι.app { as := b✝ }
tactic: simp only [colimit.ι_desc, mk_pt, mk_ι_app, IsColimit.coconePointUniqueUpToIso,
    coproductIsCoproduct, colimit.cocone_x, Functor.mapIso_hom, IsColimit.uniqueUpToIso_hom,
    Cocones.forget_map, IsColimit.descCoconeMorphism_hom, IsColimit.ofIsoColimit_desc,
    Cocones.ext_inv_hom, Iso.refl_inv, colimit.isColimit_desc, Category.id_comp,
    IsColimit.desc_self, Category.comp_id]
state_before: case h.e'_5.h.h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : β → C
inst✝ : HasCoproduct f
c : Cofan f
x✝ : Nonempty (IsColimit c)
hc : IsColimit c
this : IsIso (((coproductIsCoproduct f).coconePointUniqueUpToIso hc).hom ≫ hc.desc c)
e_3✝ : ∐ f = (mk (∐ f) (Sigma.ι f)).pt
b✝ : β
⊢ c.inj b✝ = c.ι.app { as := b✝ }
state_after: no goals
tactic: rfl