Theorem: CategoryTheory.ShortComplex.HasRightHomology.hasKernel
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

tactic: let h := S.rightHomologyData
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
⊢ HasKernel (cokernel.desc S.f S.g ⋯)
state_after: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
⊢ HasKernel (cokernel.desc S.f S.g ⋯)

tactic: haveI : HasLimit (parallelPair h.g' 0) := ⟨⟨⟨_, h.hι'⟩⟩⟩
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
⊢ HasKernel (cokernel.desc S.f S.g ⋯)
state_after: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
this : HasLimit (parallelPair h.g' 0)
⊢ HasKernel (cokernel.desc S.f S.g ⋯)

tactic: let e : parallelPair (cokernel.desc S.f S.g S.zero) 0 ≅ parallelPair h.g' 0 :=
  parallelPair.ext (IsColimit.coconePointUniqueUpToIso (colimit.isColimit _) h.hp)
    (Iso.refl _) (coequalizer.hom_ext (by simp)) (by aesop_cat)
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
this : HasLimit (parallelPair h.g' 0)
⊢ HasKernel (cokernel.desc S.f S.g ⋯)
state_after: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
this : HasLimit (parallelPair h.g' 0)
e : parallelPair (cokernel.desc S.f S.g ⋯) 0 ≅ parallelPair h.g' 0 :=
  parallelPair.ext ((colimit.isColimit (parallelPair S.f 0)).coconePointUniqueUpToIso h.hp)
    (Iso.refl ((parallelPair (cokernel.desc S.f S.g ⋯) 0).obj WalkingParallelPair.one)) ⋯ ⋯
⊢ HasKernel (cokernel.desc S.f S.g ⋯)

tactic: exact hasLimitOfIso e.symm
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
this : HasLimit (parallelPair h.g' 0)
e : parallelPair (cokernel.desc S.f S.g ⋯) 0 ≅ parallelPair h.g' 0 :=
  parallelPair.ext ((colimit.isColimit (parallelPair S.f 0)).coconePointUniqueUpToIso h.hp)
    (Iso.refl ((parallelPair (cokernel.desc S.f S.g ⋯) 0).obj WalkingParallelPair.one)) ⋯ ⋯
⊢ HasKernel (cokernel.desc S.f S.g ⋯)
state_after: no goals

tactic: simp
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
this : HasLimit (parallelPair h.g' 0)
⊢ coequalizer.π S.f 0 ≫
      (parallelPair (cokernel.desc S.f S.g ⋯) 0).map WalkingParallelPairHom.left ≫
        (Iso.refl ((parallelPair (cokernel.desc S.f S.g ⋯) 0).obj WalkingParallelPair.one)).hom =
    coequalizer.π S.f 0 ≫
      ((colimit.isColimit (parallelPair S.f 0)).coconePointUniqueUpToIso h.hp).hom ≫
        (parallelPair h.g' 0).map WalkingParallelPairHom.left
state_after: no goals

tactic: aesop_cat
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
inst✝¹ : S.HasRightHomology
inst✝ : HasCokernel S.f
h : S.RightHomologyData := S.rightHomologyData
this : HasLimit (parallelPair h.g' 0)
⊢ (parallelPair (cokernel.desc S.f S.g ⋯) 0).map WalkingParallelPairHom.right ≫
      (Iso.refl ((parallelPair (cokernel.desc S.f S.g ⋯) 0).obj WalkingParallelPair.one)).hom =
    ((colimit.isColimit (parallelPair S.f 0)).coconePointUniqueUpToIso h.hp).hom ≫
      (parallelPair h.g' 0).map WalkingParallelPairHom.right
state_after: no goals