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

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
⊢ (Iso.refl kf.pt).hom ≫ Fork.ι (KernelFork.ofι (Fork.ι kf) ⋯) = Fork.ι kf
state_after: no goals
tactic: simp
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
⊢ Epi ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ Epi ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))
tactic: have := hS.hasHomology
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ Epi ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ Arrow.mk S.toCycles ≅ Arrow.mk ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))
tactic: refine ((MorphismProperty.epimorphisms C).arrow_mk_iso_iff ?_).1
      hS.epi_toCycles
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ Arrow.mk S.toCycles ≅ Arrow.mk ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ (Iso.refl (Arrow.mk S.toCycles).left).hom ≫
      (Arrow.mk ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))).hom =
    (Arrow.mk S.toCycles).hom ≫ (S.cyclesIsKernel.conePointUniqueUpToIso hkf).hom
tactic: refine Arrow.isoMk (Iso.refl _)
      (IsLimit.conePointUniqueUpToIso S.cyclesIsKernel hkf) ?_
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ (Iso.refl (Arrow.mk S.toCycles).left).hom ≫
      (Arrow.mk ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))).hom =
    (Arrow.mk S.toCycles).hom ≫ (S.cyclesIsKernel.conePointUniqueUpToIso hkf).hom
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ ((Iso.refl (Arrow.mk S.toCycles).left).hom ≫
        (Arrow.mk ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))).hom) ≫
      Fork.ι kf =
    ((Arrow.mk S.toCycles).hom ≫ (S.cyclesIsKernel.conePointUniqueUpToIso hkf).hom) ≫ Fork.ι kf
tactic: apply Fork.IsLimit.hom_ext hkf
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{?u.40064, u_1} C
inst✝³ : Category.{?u.40068, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
S : ShortComplex C
hS : S.Exact
inst✝ : HasZeroObject C
kf : KernelFork S.g
hkf : IsLimit kf
this : S.HasHomology
⊢ ((Iso.refl (Arrow.mk S.toCycles).left).hom ≫
        (Arrow.mk ((hkf.ofIsoLimit (Fork.ext (Iso.refl kf.pt) ⋯)).lift (KernelFork.ofι S.f ⋯))).hom) ≫
      Fork.ι kf =
    ((Arrow.mk S.toCycles).hom ≫ (S.cyclesIsKernel.conePointUniqueUpToIso hkf).hom) ≫ Fork.ι kf
state_after: no goals
tactic: simp [IsLimit.conePointUniqueUpToIso]