Theorem: CategoryTheory.ShortComplex.Exact.rightHomologyDataOfIsColimitCokernelCofork_Q
File: Mathlib/Algebra/Homology/ShortComplex/Exact.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
⊢ Cofork.π cc ≫ (Iso.refl cc.pt).hom = Cofork.π (CokernelCofork.ofπ (Cofork.π cc) ⋯)
state_after: no goals
tactic: simp
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
⊢ Mono ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ Mono ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))
tactic: have := hS.hasHomology
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ Mono ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯)) ≅
    Arrow.mk S.fromOpcycles
tactic: refine ((MorphismProperty.monomorphisms C).arrow_mk_iso_iff ?_).2
      hS.mono_fromOpcycles
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯)) ≅
    Arrow.mk S.fromOpcycles
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ (hcc.coconePointUniqueUpToIso S.opcyclesIsCokernel).hom ≫ (Arrow.mk S.fromOpcycles).hom =
    (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).hom ≫
      (Iso.refl
          (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).right).hom
tactic: refine Arrow.isoMk (IsColimit.coconePointUniqueUpToIso hcc S.opcyclesIsCokernel)
      (Iso.refl _) ?_
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ (hcc.coconePointUniqueUpToIso S.opcyclesIsCokernel).hom ≫ (Arrow.mk S.fromOpcycles).hom =
    (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).hom ≫
      (Iso.refl
          (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).right).hom
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ Cofork.π cc ≫ (hcc.coconePointUniqueUpToIso S.opcyclesIsCokernel).hom ≫ (Arrow.mk S.fromOpcycles).hom =
    Cofork.π cc ≫
      (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).hom ≫
        (Iso.refl
            (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).right).hom
tactic: apply Cofork.IsColimit.hom_ext hcc
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.45519, u_1} C
inst✝³ : Category.{?u.45523, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
cc : CokernelCofork S.f
hcc : IsColimit cc
this : S.HasHomology
⊢ Cofork.π cc ≫ (hcc.coconePointUniqueUpToIso S.opcyclesIsCokernel).hom ≫ (Arrow.mk S.fromOpcycles).hom =
    Cofork.π cc ≫
      (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).hom ≫
        (Iso.refl
            (Arrow.mk ((hcc.ofIsoColimit (Cofork.ext (Iso.refl cc.pt) ⋯)).desc (CokernelCofork.ofπ S.g ⋯))).right).hom
state_after: no goals
tactic: simp [IsColimit.coconePointUniqueUpToIso]