File: Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean

full_name: CategoryTheory.ShortComplex.LeftHomologyData.π
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: self.K ⟶ self.H

full_name: CategoryTheory.ShortComplex.LeftHomologyData.wπ
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: CategoryTheory.CategoryStruct.comp (self.hi.lift (CategoryTheory.Limits.KernelFork.ofι S.f ⋯)) self.π = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyData
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: Type (max u_1 u_2)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.wi
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: CategoryTheory.CategoryStruct.comp self.i S.g = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyData.hi
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: CategoryTheory.Limits.IsLimit (CategoryTheory.Limits.KernelFork.ofι self.i ⋯)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.hπ
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.CokernelCofork.ofπ self.π ⋯)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.H
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: C

full_name: CategoryTheory.ShortComplex.LeftHomologyData.K
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: C

full_name: CategoryTheory.ShortComplex.LeftHomologyData.i
code: /-- A left homology data for a short complex `S` consists of morphisms `i : K ⟶ S.X₂` and
`π : K ⟶ H` such that `i` identifies `K` to the kernel of `g : S.X₂ ⟶ S.X₃`,
and that `π` identifies `H` to the cokernel of the induced map `f' : S.X₁ ⟶ K` -/
structure LeftHomologyData where
  /-- a choice of kernel of `S.g : S.X₂ ⟶ S.X₃`-/
  K : C
  /-- a choice of cokernel of the induced morphism `S.f' : S.X₁ ⟶ K`-/
  H : C
  /-- the inclusion of cycles in `S.X₂` -/
  i : K ⟶ S.X₂
  /-- the projection from cycles to the (left) homology -/
  π : K ⟶ H
  /-- the kernel condition for `i` -/
  wi : i ≫ S.g = 0
  /-- `i : K ⟶ S.X₂` is a kernel of `g : S.X₂ ⟶ S.X₃` -/
  hi : IsLimit (KernelFork.ofι i wi)
  /-- the cokernel condition for `π` -/
  wπ : hi.lift (KernelFork.ofι _ S.zero) ≫ π = 0
  /-- `π : K ⟶ H` is a cokernel of the induced morphism `S.f' : S.X₁ ⟶ K` -/
  hπ : IsColimit (CokernelCofork.ofπ π wπ)
goal: self.K ⟶ S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel_π
code: /-- The chosen kernels and cokernels of the limits API give a `LeftHomologyData` -/
@[simps]
noncomputable def ofHasKernelOfHasCokernel
    [HasKernel S.g] [HasCokernel (kernel.lift S.g S.f S.zero)] :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel S).π =
  CategoryTheory.Limits.cokernel.π (CategoryTheory.Limits.kernel.lift S.g S.f ⋯)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel_K
code: /-- The chosen kernels and cokernels of the limits API give a `LeftHomologyData` -/
@[simps]
noncomputable def ofHasKernelOfHasCokernel
    [HasKernel S.g] [HasCokernel (kernel.lift S.g S.f S.zero)] :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel S).K = CategoryTheory.Limits.kernel S.g

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel_i
code: /-- The chosen kernels and cokernels of the limits API give a `LeftHomologyData` -/
@[simps]
noncomputable def ofHasKernelOfHasCokernel
    [HasKernel S.g] [HasCokernel (kernel.lift S.g S.f S.zero)] :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel S).i = CategoryTheory.Limits.kernel.ι S.g

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel
code: /-- The chosen kernels and cokernels of the limits API give a `LeftHomologyData` -/
@[simps]
noncomputable def ofHasKernelOfHasCokernel
    [HasKernel S.g] [HasCokernel (kernel.lift S.g S.f S.zero)] :
    S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel_H
code: /-- The chosen kernels and cokernels of the limits API give a `LeftHomologyData` -/
@[simps]
noncomputable def ofHasKernelOfHasCokernel
    [HasKernel S.g] [HasCokernel (kernel.lift S.g S.f S.zero)] :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernelOfHasCokernel S).H =
  CategoryTheory.Limits.cokernel (CategoryTheory.Limits.kernel.lift S.g S.f ⋯)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.instMonoI
code: instance : Mono h.i 
goal: CategoryTheory.Mono h.i

full_name: CategoryTheory.ShortComplex.LeftHomologyData.instEpiπ
code: instance : Epi h.π 
goal: CategoryTheory.Epi h.π

full_name: CategoryTheory.ShortComplex.LeftHomologyData.liftK
code: /-- Any morphism `k : A ⟶ S.X₂` that is a cycle (i.e. `k ≫ S.g = 0`) lifts
to a morphism `A ⟶ K` -/
def liftK (k : A ⟶ S.X₂) (hk : k ≫ S.g = 0) : A ⟶ h.K 
goal: A ⟶ h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyData.liftK_i
code: @[reassoc (attr := simp)]
lemma liftK_i (k : A ⟶ S.X₂) (hk : k ≫ S.g = 0) : h.liftK k hk ≫ h.i = k 
goal: CategoryTheory.CategoryStruct.comp (h.liftK k hk) h.i = k

full_name: CategoryTheory.ShortComplex.LeftHomologyData.liftH
code: /-- The (left) homology class `A ⟶ H` attached to a cycle `k : A ⟶ S.X₂` -/
@[simp]
def liftH (k : A ⟶ S.X₂) (hk : k ≫ S.g = 0) : A ⟶ h.H 
goal: A ⟶ h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyData.f'
code: /-- Given `h : LeftHomologyData S`, this is morphism `S.X₁ ⟶ h.K` induced
by `S.f : S.X₁ ⟶ S.X₂` and the fact that `h.K` is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
def f' : S.X₁ ⟶ h.K 
goal: S.X₁ ⟶ h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyData.f'_i
code: @[reassoc (attr := simp)] lemma f'_i : h.f' ≫ h.i = S.f 
goal: CategoryTheory.CategoryStruct.comp h.f' h.i = S.f

full_name: CategoryTheory.ShortComplex.LeftHomologyData.f'_π
code: @[reassoc (attr := simp)] lemma f'_π : h.f' ≫ h.π = 0 
goal: CategoryTheory.CategoryStruct.comp h.f' h.π = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyData.liftK_π_eq_zero_of_boundary
code: @[reassoc]
lemma liftK_π_eq_zero_of_boundary (k : A ⟶ S.X₂) (x : A ⟶ S.X₁) (hx : k = x ≫ S.f) :
    h.liftK k (by rw [hx, assoc, S.zero, comp_zero]) ≫ h.π = 0 
goal: CategoryTheory.CategoryStruct.comp (h.liftK k ⋯) h.π = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyData.hπ'
code: /-- For `h : S.LeftHomologyData`, this is a restatement of `h.hπ`, saying that
`π : h.K ⟶ h.H` is a cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
def hπ' : IsColimit (CokernelCofork.ofπ h.π h.f'_π) 
goal: CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.CokernelCofork.ofπ h.π ⋯)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.descH
code: /-- The morphism `H ⟶ A` induced by a morphism `k : K ⟶ A` such that `f' ≫ k = 0` -/
def descH (k : h.K ⟶ A) (hk : h.f' ≫ k = 0) : h.H ⟶ A 
goal: h.H ⟶ A

full_name: CategoryTheory.ShortComplex.LeftHomologyData.π_descH
code: @[reassoc (attr := simp)]
lemma π_descH (k : h.K ⟶ A) (hk : h.f' ≫ k = 0) : h.π ≫ h.descH k hk = k 
goal: CategoryTheory.CategoryStruct.comp h.π (h.descH k hk) = k

full_name: CategoryTheory.ShortComplex.LeftHomologyData.isIso_i
code: lemma isIso_i (hg : S.g = 0) : IsIso h.i 
goal: CategoryTheory.IsIso h.i

full_name: CategoryTheory.ShortComplex.LeftHomologyData.isIso_π
code: lemma isIso_π (hf : S.f = 0) : IsIso h.π 
goal: CategoryTheory.IsIso h.π

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork_π
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given
by any colimit cokernel cofork of `S.f` -/
@[simps]
def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsColimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S hg c hc).π = CategoryTheory.Limits.Cofork.π c

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork_K
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given
by any colimit cokernel cofork of `S.f` -/
@[simps]
def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsColimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S hg c hc).K = S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given
by any colimit cokernel cofork of `S.f` -/
@[simps]
def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsColimit c) :
    S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork_i
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given
by any colimit cokernel cofork of `S.f` -/
@[simps]
def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsColimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S hg c hc).i =
  CategoryTheory.CategoryStruct.id S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork_H
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given
by any colimit cokernel cofork of `S.f` -/
@[simps]
def ofIsColimitCokernelCofork (hg : S.g = 0) (c : CokernelCofork S.f) (hc : IsColimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S hg c hc).H = c.pt

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork_f'
code: @[simp] lemma ofIsColimitCokernelCofork_f' (hg : S.g = 0) (c : CokernelCofork S.f)
    (hc : IsColimit c) : (ofIsColimitCokernelCofork S hg c hc).f' = S.f 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S hg c hc).f' = S.f

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel_π
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given by
the chosen `cokernel S.f` -/
@[simps!]
noncomputable def ofHasCokernel [HasCokernel S.f] (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel S hg).π = CategoryTheory.Limits.cokernel.π S.f

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel_K
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given by
the chosen `cokernel S.f` -/
@[simps!]
noncomputable def ofHasCokernel [HasCokernel S.f] (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel S hg).K = S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel_i
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given by
the chosen `cokernel S.f` -/
@[simps!]
noncomputable def ofHasCokernel [HasCokernel S.f] (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel S hg).i = CategoryTheory.CategoryStruct.id S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given by
the chosen `cokernel S.f` -/
@[simps!]
noncomputable def ofHasCokernel [HasCokernel S.f] (hg : S.g = 0) : S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel_H
code: /-- When the second map `S.g` is zero, this is the left homology data on `S` given by
the chosen `cokernel S.f` -/
@[simps!]
noncomputable def ofHasCokernel [HasCokernel S.f] (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofHasCokernel S hg).H = CategoryTheory.Limits.cokernel S.f

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork
code: /-- When the first map `S.f` is zero, this is the left homology data on `S` given
by any limit kernel fork of `S.g` -/
@[simps]
def ofIsLimitKernelFork (hf : S.f = 0) (c : KernelFork S.g) (hc : IsLimit c) :
    S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork_K
code: /-- When the first map `S.f` is zero, this is the left homology data on `S` given
by any limit kernel fork of `S.g` -/
@[simps]
def ofIsLimitKernelFork (hf : S.f = 0) (c : KernelFork S.g) (hc : IsLimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S hf c hc).K = c.pt

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork_i
code: /-- When the first map `S.f` is zero, this is the left homology data on `S` given
by any limit kernel fork of `S.g` -/
@[simps]
def ofIsLimitKernelFork (hf : S.f = 0) (c : KernelFork S.g) (hc : IsLimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S hf c hc).i = CategoryTheory.Limits.Fork.ι c

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork_H
code: /-- When the first map `S.f` is zero, this is the left homology data on `S` given
by any limit kernel fork of `S.g` -/
@[simps]
def ofIsLimitKernelFork (hf : S.f = 0) (c : KernelFork S.g) (hc : IsLimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S hf c hc).H = c.pt

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork_π
code: /-- When the first map `S.f` is zero, this is the left homology data on `S` given
by any limit kernel fork of `S.g` -/
@[simps]
def ofIsLimitKernelFork (hf : S.f = 0) (c : KernelFork S.g) (hc : IsLimit c) :
    S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S hf c hc).π = CategoryTheory.CategoryStruct.id c.pt

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork_f'
code: @[simp] lemma ofIsLimitKernelFork_f' (hf : S.f = 0) (c : KernelFork S.g) (hc : IsLimit c) :
    (ofIsLimitKernelFork S hf c hc).f' = 0 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S hf c hc).f' = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofHasKernel
code: /-- When the first map `S.f` is zero, this is the left homology data on `S` given
by the chosen `kernel S.g` -/
@[simp]
noncomputable def ofHasKernel [HasKernel S.g] (hf : S.f = 0) : S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofZeros_K
code: /-- When both `S.f` and `S.g` are zero, the middle object `S.X₂` gives a left homology data on S -/
@[simps]
def ofZeros (hf : S.f = 0) (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg).K = S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofZeros_π
code: /-- When both `S.f` and `S.g` are zero, the middle object `S.X₂` gives a left homology data on S -/
@[simps]
def ofZeros (hf : S.f = 0) (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg).π = CategoryTheory.CategoryStruct.id S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofZeros_H
code: /-- When both `S.f` and `S.g` are zero, the middle object `S.X₂` gives a left homology data on S -/
@[simps]
def ofZeros (hf : S.f = 0) (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg).H = S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofZeros
code: /-- When both `S.f` and `S.g` are zero, the middle object `S.X₂` gives a left homology data on S -/
@[simps]
def ofZeros (hf : S.f = 0) (hg : S.g = 0) : S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofZeros_i
code: /-- When both `S.f` and `S.g` are zero, the middle object `S.X₂` gives a left homology data on S -/
@[simps]
def ofZeros (hf : S.f = 0) (hg : S.g = 0) : S.LeftHomologyData 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg).i = CategoryTheory.CategoryStruct.id S.X₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofZeros_f'
code: @[simp] lemma ofZeros_f' (hf : S.f = 0) (hg : S.g = 0) :
    (ofZeros S hf hg).f' = 0 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg).f' = 0

full_name: CategoryTheory.ShortComplex.HasLeftHomology
code: /-- A short complex `S` has left homology when there exists a `S.LeftHomologyData` -/
class HasLeftHomology : Prop where
  condition : Nonempty S.LeftHomologyData
goal: Prop

full_name: CategoryTheory.ShortComplex.HasLeftHomology.condition
code: /-- A short complex `S` has left homology when there exists a `S.LeftHomologyData` -/
class HasLeftHomology : Prop where
  condition : Nonempty S.LeftHomologyData
goal: Nonempty S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.leftHomologyData
code: /-- A chosen `S.LeftHomologyData` for a short complex `S` that has left homology -/
noncomputable def leftHomologyData [S.HasLeftHomology] :
  S.LeftHomologyData 
goal: S.LeftHomologyData

full_name: CategoryTheory.ShortComplex.HasLeftHomology.mk'
code: lemma mk' (h : S.LeftHomologyData) : HasLeftHomology S 
goal: S.HasLeftHomology

full_name: CategoryTheory.ShortComplex.HasLeftHomology.of_hasKernel_of_hasCokernel
code: instance of_hasKernel_of_hasCokernel [HasKernel S.g] [HasCokernel (kernel.lift S.g S.f S.zero)] :
  S.HasLeftHomology 
goal: S.HasLeftHomology

full_name: CategoryTheory.ShortComplex.HasLeftHomology.of_hasCokernel
code: instance of_hasCokernel {X Y : C} (f : X ⟶ Y) (Z : C) [HasCokernel f] :
    (ShortComplex.mk f (0 : Y ⟶ Z) comp_zero).HasLeftHomology 
goal: (CategoryTheory.ShortComplex.mk f 0 ⋯).HasLeftHomology

full_name: CategoryTheory.ShortComplex.HasLeftHomology.of_hasKernel
code: instance of_hasKernel {Y Z : C} (g : Y ⟶ Z) (X : C) [HasKernel g] :
    (ShortComplex.mk (0 : X ⟶ Y) g zero_comp).HasLeftHomology 
goal: (CategoryTheory.ShortComplex.mk 0 g ⋯).HasLeftHomology

full_name: CategoryTheory.ShortComplex.HasLeftHomology.of_zeros
code: instance of_zeros (X Y Z : C) :
    (ShortComplex.mk (0 : X ⟶ Y) (0 : Y ⟶ Z) zero_comp).HasLeftHomology 
goal: (CategoryTheory.ShortComplex.mk 0 0 ⋯).HasLeftHomology

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.commπ
code: /-- Given left homology data `h₁` and `h₂` for two short complexes `S₁` and `S₂`,
a `LeftHomologyMapData` for a morphism `φ : S₁ ⟶ S₂`
consists of a description of the induced morphisms on the `K` (cycles)
and `H` (left homology) fields of `h₁` and `h₂`. -/
structure LeftHomologyMapData where
  /-- the induced map on cycles -/
  φK : h₁.K ⟶ h₂.K
  /-- the induced map on left homology -/
  φH : h₁.H ⟶ h₂.H
  /-- commutation with `i` -/
  commi : φK ≫ h₂.i = h₁.i ≫ φ.τ₂ := by aesop_cat
  /-- commutation with `f'` -/
  commf' : h₁.f' ≫ φK = φ.τ₁ ≫ h₂.f' := by aesop_cat
  /-- commutation with `π` -/
  commπ : h₁.π ≫ φH = φK ≫ h₂.π := by aesop_cat
goal: CategoryTheory.CategoryStruct.comp h₁.π self.φH = CategoryTheory.CategoryStruct.comp self.φK h₂.π

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.φH
code: /-- Given left homology data `h₁` and `h₂` for two short complexes `S₁` and `S₂`,
a `LeftHomologyMapData` for a morphism `φ : S₁ ⟶ S₂`
consists of a description of the induced morphisms on the `K` (cycles)
and `H` (left homology) fields of `h₁` and `h₂`. -/
structure LeftHomologyMapData where
  /-- the induced map on cycles -/
  φK : h₁.K ⟶ h₂.K
  /-- the induced map on left homology -/
  φH : h₁.H ⟶ h₂.H
  /-- commutation with `i` -/
  commi : φK ≫ h₂.i = h₁.i ≫ φ.τ₂ := by aesop_cat
  /-- commutation with `f'` -/
  commf' : h₁.f' ≫ φK = φ.τ₁ ≫ h₂.f' := by aesop_cat
  /-- commutation with `π` -/
  commπ : h₁.π ≫ φH = φK ≫ h₂.π := by aesop_cat
goal: h₁.H ⟶ h₂.H

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData
code: /-- Given left homology data `h₁` and `h₂` for two short complexes `S₁` and `S₂`,
a `LeftHomologyMapData` for a morphism `φ : S₁ ⟶ S₂`
consists of a description of the induced morphisms on the `K` (cycles)
and `H` (left homology) fields of `h₁` and `h₂`. -/
structure LeftHomologyMapData where
  /-- the induced map on cycles -/
  φK : h₁.K ⟶ h₂.K
  /-- the induced map on left homology -/
  φH : h₁.H ⟶ h₂.H
  /-- commutation with `i` -/
  commi : φK ≫ h₂.i = h₁.i ≫ φ.τ₂ := by aesop_cat
  /-- commutation with `f'` -/
  commf' : h₁.f' ≫ φK = φ.τ₁ ≫ h₂.f' := by aesop_cat
  /-- commutation with `π` -/
  commπ : h₁.π ≫ φH = φK ≫ h₂.π := by aesop_cat
goal: Type u_2

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.φK
code: /-- Given left homology data `h₁` and `h₂` for two short complexes `S₁` and `S₂`,
a `LeftHomologyMapData` for a morphism `φ : S₁ ⟶ S₂`
consists of a description of the induced morphisms on the `K` (cycles)
and `H` (left homology) fields of `h₁` and `h₂`. -/
structure LeftHomologyMapData where
  /-- the induced map on cycles -/
  φK : h₁.K ⟶ h₂.K
  /-- the induced map on left homology -/
  φH : h₁.H ⟶ h₂.H
  /-- commutation with `i` -/
  commi : φK ≫ h₂.i = h₁.i ≫ φ.τ₂ := by aesop_cat
  /-- commutation with `f'` -/
  commf' : h₁.f' ≫ φK = φ.τ₁ ≫ h₂.f' := by aesop_cat
  /-- commutation with `π` -/
  commπ : h₁.π ≫ φH = φK ≫ h₂.π := by aesop_cat
goal: h₁.K ⟶ h₂.K

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.commi
code: /-- Given left homology data `h₁` and `h₂` for two short complexes `S₁` and `S₂`,
a `LeftHomologyMapData` for a morphism `φ : S₁ ⟶ S₂`
consists of a description of the induced morphisms on the `K` (cycles)
and `H` (left homology) fields of `h₁` and `h₂`. -/
structure LeftHomologyMapData where
  /-- the induced map on cycles -/
  φK : h₁.K ⟶ h₂.K
  /-- the induced map on left homology -/
  φH : h₁.H ⟶ h₂.H
  /-- commutation with `i` -/
  commi : φK ≫ h₂.i = h₁.i ≫ φ.τ₂ := by aesop_cat
  /-- commutation with `f'` -/
  commf' : h₁.f' ≫ φK = φ.τ₁ ≫ h₂.f' := by aesop_cat
  /-- commutation with `π` -/
  commπ : h₁.π ≫ φH = φK ≫ h₂.π := by aesop_cat
goal: CategoryTheory.CategoryStruct.comp self.φK h₂.i = CategoryTheory.CategoryStruct.comp h₁.i φ.τ₂

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.commf'
code: /-- Given left homology data `h₁` and `h₂` for two short complexes `S₁` and `S₂`,
a `LeftHomologyMapData` for a morphism `φ : S₁ ⟶ S₂`
consists of a description of the induced morphisms on the `K` (cycles)
and `H` (left homology) fields of `h₁` and `h₂`. -/
structure LeftHomologyMapData where
  /-- the induced map on cycles -/
  φK : h₁.K ⟶ h₂.K
  /-- the induced map on left homology -/
  φH : h₁.H ⟶ h₂.H
  /-- commutation with `i` -/
  commi : φK ≫ h₂.i = h₁.i ≫ φ.τ₂ := by aesop_cat
  /-- commutation with `f'` -/
  commf' : h₁.f' ≫ φK = φ.τ₁ ≫ h₂.f' := by aesop_cat
  /-- commutation with `π` -/
  commπ : h₁.π ≫ φH = φK ≫ h₂.π := by aesop_cat
goal: CategoryTheory.CategoryStruct.comp h₁.f' self.φK = CategoryTheory.CategoryStruct.comp φ.τ₁ h₂.f'

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.zero_φK
code: /-- The left homology map data associated to the zero morphism between two short complexes. -/
@[simps]
def zero (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    LeftHomologyMapData 0 h₁ h₂ 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.zero h₁ h₂).φK = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.zero_φH
code: /-- The left homology map data associated to the zero morphism between two short complexes. -/
@[simps]
def zero (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    LeftHomologyMapData 0 h₁ h₂ 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.zero h₁ h₂).φH = 0

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.zero
code: /-- The left homology map data associated to the zero morphism between two short complexes. -/
@[simps]
def zero (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    LeftHomologyMapData 0 h₁ h₂ 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData 0 h₁ h₂

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.id
code: /-- The left homology map data associated to the identity morphism of a short complex. -/
@[simps]
def id (h : S.LeftHomologyData) : LeftHomologyMapData (𝟙 S) h h 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData (CategoryTheory.CategoryStruct.id S) h h

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.id_φH
code: /-- The left homology map data associated to the identity morphism of a short complex. -/
@[simps]
def id (h : S.LeftHomologyData) : LeftHomologyMapData (𝟙 S) h h 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.id h).φH = CategoryTheory.CategoryStruct.id h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.id_φK
code: /-- The left homology map data associated to the identity morphism of a short complex. -/
@[simps]
def id (h : S.LeftHomologyData) : LeftHomologyMapData (𝟙 S) h h 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.id h).φK = CategoryTheory.CategoryStruct.id h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.comp_φH
code: /-- The composition of left homology map data. -/
@[simps]
def comp {φ : S₁ ⟶ S₂} {φ' : S₂ ⟶ S₃}
    {h₁ : S₁.LeftHomologyData} {h₂ : S₂.LeftHomologyData} {h₃ : S₃.LeftHomologyData}
    (ψ : LeftHomologyMapData φ h₁ h₂) (ψ' : LeftHomologyMapData φ' h₂ h₃) :
    LeftHomologyMapData (φ ≫ φ') h₁ h₃ 
goal: (ψ.comp ψ').φH = CategoryTheory.CategoryStruct.comp ψ.φH ψ'.φH

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.comp
code: /-- The composition of left homology map data. -/
@[simps]
def comp {φ : S₁ ⟶ S₂} {φ' : S₂ ⟶ S₃}
    {h₁ : S₁.LeftHomologyData} {h₂ : S₂.LeftHomologyData} {h₃ : S₃.LeftHomologyData}
    (ψ : LeftHomologyMapData φ h₁ h₂) (ψ' : LeftHomologyMapData φ' h₂ h₃) :
    LeftHomologyMapData (φ ≫ φ') h₁ h₃ 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData (CategoryTheory.CategoryStruct.comp φ φ') h₁ h₃

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.comp_φK
code: /-- The composition of left homology map data. -/
@[simps]
def comp {φ : S₁ ⟶ S₂} {φ' : S₂ ⟶ S₃}
    {h₁ : S₁.LeftHomologyData} {h₂ : S₂.LeftHomologyData} {h₃ : S₃.LeftHomologyData}
    (ψ : LeftHomologyMapData φ h₁ h₂) (ψ' : LeftHomologyMapData φ' h₂ h₃) :
    LeftHomologyMapData (φ ≫ φ') h₁ h₃ 
goal: (ψ.comp ψ').φK = CategoryTheory.CategoryStruct.comp ψ.φK ψ'.φK

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.instSubsingleton
code: instance : Subsingleton (LeftHomologyMapData φ h₁ h₂) 
goal: Subsingleton (CategoryTheory.ShortComplex.LeftHomologyMapData φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.instInhabited
code: instance : Inhabited (LeftHomologyMapData φ h₁ h₂) 
goal: Inhabited (CategoryTheory.ShortComplex.LeftHomologyMapData φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.instUnique
code: instance : Unique (LeftHomologyMapData φ h₁ h₂) 
goal: Unique (CategoryTheory.ShortComplex.LeftHomologyMapData φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.congr_φH
code: lemma congr_φH {γ₁ γ₂ : LeftHomologyMapData φ h₁ h₂} (eq : γ₁ = γ₂) : γ₁.φH = γ₂.φH 
goal: γ₁.φH = γ₂.φH

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.congr_φK
code: lemma congr_φK {γ₁ γ₂ : LeftHomologyMapData φ h₁ h₂} (eq : γ₁ = γ₂) : γ₁.φK = γ₂.φK 
goal: γ₁.φK = γ₂.φK

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofZeros_φK
code: /-- When `S₁.f`, `S₁.g`, `S₂.f` and `S₂.g` are all zero, the action on left homology of a
morphism `φ : S₁ ⟶ S₂` is given by the action `φ.τ₂` on the middle objects. -/
@[simps]
def ofZeros (φ : S₁ ⟶ S₂) (hf₁ : S₁.f = 0) (hg₁ : S₁.g = 0) (hf₂ : S₂.f = 0) (hg₂ : S₂.g = 0) :
    LeftHomologyMapData φ (LeftHomologyData.ofZeros S₁ hf₁ hg₁)
      (LeftHomologyData.ofZeros S₂ hf₂ hg₂) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofZeros φ hf₁ hg₁ hf₂ hg₂).φK = φ.τ₂

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofZeros
code: /-- When `S₁.f`, `S₁.g`, `S₂.f` and `S₂.g` are all zero, the action on left homology of a
morphism `φ : S₁ ⟶ S₂` is given by the action `φ.τ₂` on the middle objects. -/
@[simps]
def ofZeros (φ : S₁ ⟶ S₂) (hf₁ : S₁.f = 0) (hg₁ : S₁.g = 0) (hf₂ : S₂.f = 0) (hg₂ : S₂.g = 0) :
    LeftHomologyMapData φ (LeftHomologyData.ofZeros S₁ hf₁ hg₁)
      (LeftHomologyData.ofZeros S₂ hf₂ hg₂) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData φ (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S₁ hf₁ hg₁)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S₂ hf₂ hg₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofZeros_φH
code: /-- When `S₁.f`, `S₁.g`, `S₂.f` and `S₂.g` are all zero, the action on left homology of a
morphism `φ : S₁ ⟶ S₂` is given by the action `φ.τ₂` on the middle objects. -/
@[simps]
def ofZeros (φ : S₁ ⟶ S₂) (hf₁ : S₁.f = 0) (hg₁ : S₁.g = 0) (hf₂ : S₂.f = 0) (hg₂ : S₂.g = 0) :
    LeftHomologyMapData φ (LeftHomologyData.ofZeros S₁ hf₁ hg₁)
      (LeftHomologyData.ofZeros S₂ hf₂ hg₂) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofZeros φ hf₁ hg₁ hf₂ hg₂).φH = φ.τ₂

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsColimitCokernelCofork
code: /-- When `S₁.g` and `S₂.g` are zero and we have chosen colimit cokernel coforks `c₁` and `c₂`
for `S₁.f` and `S₂.f` respectively, the action on left homology of a morphism `φ : S₁ ⟶ S₂` of
short complexes is given by the unique morphism `f : c₁.pt ⟶ c₂.pt` such that
`φ.τ₂ ≫ c₂.π = c₁.π ≫ f`. -/
@[simps]
def ofIsColimitCokernelCofork (φ : S₁ ⟶ S₂)
    (hg₁ : S₁.g = 0) (c₁ : CokernelCofork S₁.f) (hc₁ : IsColimit c₁)
    (hg₂ : S₂.g = 0) (c₂ : CokernelCofork S₂.f) (hc₂ : IsColimit c₂) (f : c₁.pt ⟶ c₂.pt)
    (comm : φ.τ₂ ≫ c₂.π = c₁.π ≫ f) :
    LeftHomologyMapData φ (LeftHomologyData.ofIsColimitCokernelCofork S₁ hg₁ c₁ hc₁)
      (LeftHomologyData.ofIsColimitCokernelCofork S₂ hg₂ c₂ hc₂) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData φ
  (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S₁ hg₁ c₁ hc₁)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S₂ hg₂ c₂ hc₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsColimitCokernelCofork_φK
code: /-- When `S₁.g` and `S₂.g` are zero and we have chosen colimit cokernel coforks `c₁` and `c₂`
for `S₁.f` and `S₂.f` respectively, the action on left homology of a morphism `φ : S₁ ⟶ S₂` of
short complexes is given by the unique morphism `f : c₁.pt ⟶ c₂.pt` such that
`φ.τ₂ ≫ c₂.π = c₁.π ≫ f`. -/
@[simps]
def ofIsColimitCokernelCofork (φ : S₁ ⟶ S₂)
    (hg₁ : S₁.g = 0) (c₁ : CokernelCofork S₁.f) (hc₁ : IsColimit c₁)
    (hg₂ : S₂.g = 0) (c₂ : CokernelCofork S₂.f) (hc₂ : IsColimit c₂) (f : c₁.pt ⟶ c₂.pt)
    (comm : φ.τ₂ ≫ c₂.π = c₁.π ≫ f) :
    LeftHomologyMapData φ (LeftHomologyData.ofIsColimitCokernelCofork S₁ hg₁ c₁ hc₁)
      (LeftHomologyData.ofIsColimitCokernelCofork S₂ hg₂ c₂ hc₂) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsColimitCokernelCofork φ hg₁ c₁ hc₁ hg₂ c₂ hc₂ f comm).φK = φ.τ₂

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsColimitCokernelCofork_φH
code: /-- When `S₁.g` and `S₂.g` are zero and we have chosen colimit cokernel coforks `c₁` and `c₂`
for `S₁.f` and `S₂.f` respectively, the action on left homology of a morphism `φ : S₁ ⟶ S₂` of
short complexes is given by the unique morphism `f : c₁.pt ⟶ c₂.pt` such that
`φ.τ₂ ≫ c₂.π = c₁.π ≫ f`. -/
@[simps]
def ofIsColimitCokernelCofork (φ : S₁ ⟶ S₂)
    (hg₁ : S₁.g = 0) (c₁ : CokernelCofork S₁.f) (hc₁ : IsColimit c₁)
    (hg₂ : S₂.g = 0) (c₂ : CokernelCofork S₂.f) (hc₂ : IsColimit c₂) (f : c₁.pt ⟶ c₂.pt)
    (comm : φ.τ₂ ≫ c₂.π = c₁.π ≫ f) :
    LeftHomologyMapData φ (LeftHomologyData.ofIsColimitCokernelCofork S₁ hg₁ c₁ hc₁)
      (LeftHomologyData.ofIsColimitCokernelCofork S₂ hg₂ c₂ hc₂) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsColimitCokernelCofork φ hg₁ c₁ hc₁ hg₂ c₂ hc₂ f comm).φH = f

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsLimitKernelFork_φH
code: /-- When `S₁.f` and `S₂.f` are zero and we have chosen limit kernel forks `c₁` and `c₂`
for `S₁.g` and `S₂.g` respectively, the action on left homology of a morphism `φ : S₁ ⟶ S₂` of
short complexes is given by the unique morphism `f : c₁.pt ⟶ c₂.pt` such that
`c₁.ι ≫ φ.τ₂ = f ≫ c₂.ι`. -/
@[simps]
def ofIsLimitKernelFork (φ : S₁ ⟶ S₂)
    (hf₁ : S₁.f = 0) (c₁ : KernelFork S₁.g) (hc₁ : IsLimit c₁)
    (hf₂ : S₂.f = 0) (c₂ : KernelFork S₂.g) (hc₂ : IsLimit c₂) (f : c₁.pt ⟶ c₂.pt)
    (comm : c₁.ι ≫ φ.τ₂ = f ≫ c₂.ι) :
    LeftHomologyMapData φ (LeftHomologyData.ofIsLimitKernelFork S₁ hf₁ c₁ hc₁)
      (LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ c₂ hc₂) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsLimitKernelFork φ hf₁ c₁ hc₁ hf₂ c₂ hc₂ f comm).φH = f

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsLimitKernelFork
code: /-- When `S₁.f` and `S₂.f` are zero and we have chosen limit kernel forks `c₁` and `c₂`
for `S₁.g` and `S₂.g` respectively, the action on left homology of a morphism `φ : S₁ ⟶ S₂` of
short complexes is given by the unique morphism `f : c₁.pt ⟶ c₂.pt` such that
`c₁.ι ≫ φ.τ₂ = f ≫ c₂.ι`. -/
@[simps]
def ofIsLimitKernelFork (φ : S₁ ⟶ S₂)
    (hf₁ : S₁.f = 0) (c₁ : KernelFork S₁.g) (hc₁ : IsLimit c₁)
    (hf₂ : S₂.f = 0) (c₂ : KernelFork S₂.g) (hc₂ : IsLimit c₂) (f : c₁.pt ⟶ c₂.pt)
    (comm : c₁.ι ≫ φ.τ₂ = f ≫ c₂.ι) :
    LeftHomologyMapData φ (LeftHomologyData.ofIsLimitKernelFork S₁ hf₁ c₁ hc₁)
      (LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ c₂ hc₂) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData φ
  (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S₁ hf₁ c₁ hc₁)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ c₂ hc₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsLimitKernelFork_φK
code: /-- When `S₁.f` and `S₂.f` are zero and we have chosen limit kernel forks `c₁` and `c₂`
for `S₁.g` and `S₂.g` respectively, the action on left homology of a morphism `φ : S₁ ⟶ S₂` of
short complexes is given by the unique morphism `f : c₁.pt ⟶ c₂.pt` such that
`c₁.ι ≫ φ.τ₂ = f ≫ c₂.ι`. -/
@[simps]
def ofIsLimitKernelFork (φ : S₁ ⟶ S₂)
    (hf₁ : S₁.f = 0) (c₁ : KernelFork S₁.g) (hc₁ : IsLimit c₁)
    (hf₂ : S₂.f = 0) (c₂ : KernelFork S₂.g) (hc₂ : IsLimit c₂) (f : c₁.pt ⟶ c₂.pt)
    (comm : c₁.ι ≫ φ.τ₂ = f ≫ c₂.ι) :
    LeftHomologyMapData φ (LeftHomologyData.ofIsLimitKernelFork S₁ hf₁ c₁ hc₁)
      (LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ c₂ hc₂) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofIsLimitKernelFork φ hf₁ c₁ hc₁ hf₂ c₂ hc₂ f comm).φK = f

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsColimitCokernelCofork_φH
code: /-- When both maps `S.f` and `S.g` of a short complex `S` are zero, this is the left homology map
data (for the identity of `S`) which relates the left homology data `ofZeros` and
`ofIsColimitCokernelCofork`. -/
@[simps]
def compatibilityOfZerosOfIsColimitCokernelCofork (hf : S.f = 0) (hg : S.g = 0)
    (c : CokernelCofork S.f) (hc : IsColimit c) :
    LeftHomologyMapData (𝟙 S) (LeftHomologyData.ofZeros S hf hg)
      (LeftHomologyData.ofIsColimitCokernelCofork S hg c hc) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsColimitCokernelCofork S hf hg c hc).φH =
  CategoryTheory.Limits.Cofork.π c

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsColimitCokernelCofork
code: /-- When both maps `S.f` and `S.g` of a short complex `S` are zero, this is the left homology map
data (for the identity of `S`) which relates the left homology data `ofZeros` and
`ofIsColimitCokernelCofork`. -/
@[simps]
def compatibilityOfZerosOfIsColimitCokernelCofork (hf : S.f = 0) (hg : S.g = 0)
    (c : CokernelCofork S.f) (hc : IsColimit c) :
    LeftHomologyMapData (𝟙 S) (LeftHomologyData.ofZeros S hf hg)
      (LeftHomologyData.ofIsColimitCokernelCofork S hg c hc) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData (CategoryTheory.CategoryStruct.id S)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofIsColimitCokernelCofork S hg c hc)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsColimitCokernelCofork_φK
code: /-- When both maps `S.f` and `S.g` of a short complex `S` are zero, this is the left homology map
data (for the identity of `S`) which relates the left homology data `ofZeros` and
`ofIsColimitCokernelCofork`. -/
@[simps]
def compatibilityOfZerosOfIsColimitCokernelCofork (hf : S.f = 0) (hg : S.g = 0)
    (c : CokernelCofork S.f) (hc : IsColimit c) :
    LeftHomologyMapData (𝟙 S) (LeftHomologyData.ofZeros S hf hg)
      (LeftHomologyData.ofIsColimitCokernelCofork S hg c hc) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsColimitCokernelCofork S hf hg c hc).φK =
  CategoryTheory.CategoryStruct.id (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg).K

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsLimitKernelFork_φH
code: /-- When both maps `S.f` and `S.g` of a short complex `S` are zero, this is the left homology map
data (for the identity of `S`) which relates the left homology data
`LeftHomologyData.ofIsLimitKernelFork` and `ofZeros` . -/
@[simps]
def compatibilityOfZerosOfIsLimitKernelFork (hf : S.f = 0) (hg : S.g = 0)
    (c : KernelFork S.g) (hc : IsLimit c) :
    LeftHomologyMapData (𝟙 S) (LeftHomologyData.ofIsLimitKernelFork S hf c hc)
      (LeftHomologyData.ofZeros S hf hg) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsLimitKernelFork S hf hg c hc).φH =
  CategoryTheory.Limits.Fork.ι c

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsLimitKernelFork_φK
code: /-- When both maps `S.f` and `S.g` of a short complex `S` are zero, this is the left homology map
data (for the identity of `S`) which relates the left homology data
`LeftHomologyData.ofIsLimitKernelFork` and `ofZeros` . -/
@[simps]
def compatibilityOfZerosOfIsLimitKernelFork (hf : S.f = 0) (hg : S.g = 0)
    (c : KernelFork S.g) (hc : IsLimit c) :
    LeftHomologyMapData (𝟙 S) (LeftHomologyData.ofIsLimitKernelFork S hf c hc)
      (LeftHomologyData.ofZeros S hf hg) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsLimitKernelFork S hf hg c hc).φK =
  CategoryTheory.Limits.Fork.ι c

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.compatibilityOfZerosOfIsLimitKernelFork
code: /-- When both maps `S.f` and `S.g` of a short complex `S` are zero, this is the left homology map
data (for the identity of `S`) which relates the left homology data
`LeftHomologyData.ofIsLimitKernelFork` and `ofZeros` . -/
@[simps]
def compatibilityOfZerosOfIsLimitKernelFork (hf : S.f = 0) (hg : S.g = 0)
    (c : KernelFork S.g) (hc : IsLimit c) :
    LeftHomologyMapData (𝟙 S) (LeftHomologyData.ofIsLimitKernelFork S hf c hc)
      (LeftHomologyData.ofZeros S hf hg) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData (CategoryTheory.CategoryStruct.id S)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofIsLimitKernelFork S hf c hc)
  (CategoryTheory.ShortComplex.LeftHomologyData.ofZeros S hf hg)

full_name: CategoryTheory.ShortComplex.leftHomology
code: /-- The left homology of a short complex, given by the `H` field of a chosen left homology data.  -/
noncomputable def leftHomology : C 
goal: C

full_name: CategoryTheory.ShortComplex.cycles
code: /-- The cycles of a short complex, given by the `K` field of a chosen left homology data.  -/
noncomputable def cycles : C 
goal: C

full_name: CategoryTheory.ShortComplex.leftHomologyπ
code: /-- The "homology class" map `S.cycles ⟶ S.leftHomology`. -/
noncomputable def leftHomologyπ : S.cycles ⟶ S.leftHomology 
goal: S.cycles ⟶ S.leftHomology

full_name: CategoryTheory.ShortComplex.iCycles
code: /-- The inclusion `S.cycles ⟶ S.X₂`. -/
noncomputable def iCycles : S.cycles ⟶ S.X₂ 
goal: S.cycles ⟶ S.X₂

full_name: CategoryTheory.ShortComplex.toCycles
code: /-- The "boundaries" map `S.X₁ ⟶ S.cycles`. (Note that in this homology API, we make no use
of the "image" of this morphism, which under some categorical assumptions would be a subobject
of `S.X₂` contained in `S.cycles`.) -/
noncomputable def toCycles : S.X₁ ⟶ S.cycles 
goal: S.X₁ ⟶ S.cycles

full_name: CategoryTheory.ShortComplex.iCycles_g
code: @[reassoc (attr := simp)]
lemma iCycles_g : S.iCycles ≫ S.g = 0 
goal: CategoryTheory.CategoryStruct.comp S.iCycles S.g = 0

full_name: CategoryTheory.ShortComplex.toCycles_i
code: @[reassoc (attr := simp)]
lemma toCycles_i : S.toCycles ≫ S.iCycles = S.f 
goal: CategoryTheory.CategoryStruct.comp S.toCycles S.iCycles = S.f

full_name: CategoryTheory.ShortComplex.instMonoICycles
code: instance : Mono S.iCycles 
goal: CategoryTheory.Mono S.iCycles

full_name: CategoryTheory.ShortComplex.instEpiLeftHomologyπ
code: instance : Epi S.leftHomologyπ 
goal: CategoryTheory.Epi S.leftHomologyπ

full_name: CategoryTheory.ShortComplex.leftHomology_ext_iff
code: lemma leftHomology_ext_iff {A : C} (f₁ f₂ : S.leftHomology ⟶ A) :
    f₁ = f₂ ↔ S.leftHomologyπ ≫ f₁ = S.leftHomologyπ ≫ f₂ 
goal: f₁ = f₂ ↔ CategoryTheory.CategoryStruct.comp S.leftHomologyπ f₁ = CategoryTheory.CategoryStruct.comp S.leftHomologyπ f₂

full_name: CategoryTheory.ShortComplex.leftHomology_ext
code: @[ext]
lemma leftHomology_ext {A : C} (f₁ f₂ : S.leftHomology ⟶ A)
    (h : S.leftHomologyπ ≫ f₁ = S.leftHomologyπ ≫ f₂) : f₁ = f₂ 
goal: f₁ = f₂

full_name: CategoryTheory.ShortComplex.cycles_ext_iff
code: lemma cycles_ext_iff {A : C} (f₁ f₂ : A ⟶ S.cycles) :
    f₁ = f₂ ↔ f₁ ≫ S.iCycles = f₂ ≫ S.iCycles 
goal: f₁ = f₂ ↔ CategoryTheory.CategoryStruct.comp f₁ S.iCycles = CategoryTheory.CategoryStruct.comp f₂ S.iCycles

full_name: CategoryTheory.ShortComplex.cycles_ext
code: @[ext]
lemma cycles_ext {A : C} (f₁ f₂ : A ⟶ S.cycles) (h : f₁ ≫ S.iCycles = f₂ ≫ S.iCycles) :
    f₁ = f₂ 
goal: f₁ = f₂

full_name: CategoryTheory.ShortComplex.isIso_iCycles
code: lemma isIso_iCycles (hg : S.g = 0) : IsIso S.iCycles 
goal: CategoryTheory.IsIso S.iCycles

full_name: CategoryTheory.ShortComplex.cyclesIsoX₂_hom
code: /-- When `S.g = 0`, this is the canonical isomorphism `S.cycles ≅ S.X₂` induced by `S.iCycles`. -/
@[simps! hom]
noncomputable def cyclesIsoX₂ (hg : S.g = 0) : S.cycles ≅ S.X₂ 
goal: (S.cyclesIsoX₂ hg).hom = S.iCycles

full_name: CategoryTheory.ShortComplex.cyclesIsoX₂
code: /-- When `S.g = 0`, this is the canonical isomorphism `S.cycles ≅ S.X₂` induced by `S.iCycles`. -/
@[simps! hom]
noncomputable def cyclesIsoX₂ (hg : S.g = 0) : S.cycles ≅ S.X₂ 
goal: S.cycles ≅ S.X₂

full_name: CategoryTheory.ShortComplex.cyclesIsoX₂_hom_inv_id
code: @[reassoc (attr := simp)]
lemma cyclesIsoX₂_hom_inv_id (hg : S.g = 0) :
    S.iCycles ≫ (S.cyclesIsoX₂ hg).inv = 𝟙 _ 
goal: CategoryTheory.CategoryStruct.comp S.iCycles (S.cyclesIsoX₂ hg).inv = CategoryTheory.CategoryStruct.id S.cycles

full_name: CategoryTheory.ShortComplex.cyclesIsoX₂_inv_hom_id
code: @[reassoc (attr := simp)]
lemma cyclesIsoX₂_inv_hom_id (hg : S.g = 0) :
    (S.cyclesIsoX₂ hg).inv ≫ S.iCycles = 𝟙 _ 
goal: CategoryTheory.CategoryStruct.comp (S.cyclesIsoX₂ hg).inv S.iCycles = CategoryTheory.CategoryStruct.id S.X₂

full_name: CategoryTheory.ShortComplex.isIso_leftHomologyπ
code: lemma isIso_leftHomologyπ (hf : S.f = 0) : IsIso S.leftHomologyπ 
goal: CategoryTheory.IsIso S.leftHomologyπ

full_name: CategoryTheory.ShortComplex.cyclesIsoLeftHomology_hom
code: /-- When `S.f = 0`, this is the canonical isomorphism `S.cycles ≅ S.leftHomology` induced
by `S.leftHomologyπ`. -/
@[simps! hom]
noncomputable def cyclesIsoLeftHomology (hf : S.f = 0) : S.cycles ≅ S.leftHomology 
goal: (S.cyclesIsoLeftHomology hf).hom = S.leftHomologyπ

full_name: CategoryTheory.ShortComplex.cyclesIsoLeftHomology
code: /-- When `S.f = 0`, this is the canonical isomorphism `S.cycles ≅ S.leftHomology` induced
by `S.leftHomologyπ`. -/
@[simps! hom]
noncomputable def cyclesIsoLeftHomology (hf : S.f = 0) : S.cycles ≅ S.leftHomology 
goal: S.cycles ≅ S.leftHomology

full_name: CategoryTheory.ShortComplex.cyclesIsoLeftHomology_hom_inv_id
code: @[reassoc (attr := simp)]
lemma cyclesIsoLeftHomology_hom_inv_id (hf : S.f = 0) :
    S.leftHomologyπ ≫ (S.cyclesIsoLeftHomology hf).inv = 𝟙 _ 
goal: CategoryTheory.CategoryStruct.comp S.leftHomologyπ (S.cyclesIsoLeftHomology hf).inv =
  CategoryTheory.CategoryStruct.id S.cycles

full_name: CategoryTheory.ShortComplex.cyclesIsoLeftHomology_inv_hom_id
code: @[reassoc (attr := simp)]
lemma cyclesIsoLeftHomology_inv_hom_id (hf : S.f = 0) :
    (S.cyclesIsoLeftHomology hf).inv ≫ S.leftHomologyπ = 𝟙 _ 
goal: CategoryTheory.CategoryStruct.comp (S.cyclesIsoLeftHomology hf).inv S.leftHomologyπ =
  CategoryTheory.CategoryStruct.id S.leftHomology

full_name: CategoryTheory.ShortComplex.leftHomologyMapData
code: /-- The (unique) left homology map data associated to a morphism of short complexes that
are both equipped with left homology data. -/
def leftHomologyMapData : LeftHomologyMapData φ h₁ h₂ 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData φ h₁ h₂

full_name: CategoryTheory.ShortComplex.leftHomologyMap'
code: /-- Given a morphism `φ : S₁ ⟶ S₂` of short complexes and left homology data `h₁` and `h₂`
for `S₁` and `S₂` respectively, this is the induced left homology map `h₁.H ⟶ h₁.H`. -/
def leftHomologyMap' : h₁.H ⟶ h₂.H 
goal: h₁.H ⟶ h₂.H

full_name: CategoryTheory.ShortComplex.cyclesMap'
code: /-- Given a morphism `φ : S₁ ⟶ S₂` of short complexes and left homology data `h₁` and `h₂`
for `S₁` and `S₂` respectively, this is the induced morphism `h₁.K ⟶ h₁.K` on cycles. -/
def cyclesMap' : h₁.K ⟶ h₂.K 
goal: h₁.K ⟶ h₂.K

full_name: CategoryTheory.ShortComplex.cyclesMap'_i
code: @[reassoc (attr := simp)]
lemma cyclesMap'_i : cyclesMap' φ h₁ h₂ ≫ h₂.i = h₁.i ≫ φ.τ₂ 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap' φ h₁ h₂) h₂.i =
  CategoryTheory.CategoryStruct.comp h₁.i φ.τ₂

full_name: CategoryTheory.ShortComplex.f'_cyclesMap'
code: @[reassoc (attr := simp)]
lemma f'_cyclesMap' : h₁.f' ≫ cyclesMap' φ h₁ h₂ = φ.τ₁ ≫ h₂.f' 
goal: CategoryTheory.CategoryStruct.comp h₁.f' (CategoryTheory.ShortComplex.cyclesMap' φ h₁ h₂) =
  CategoryTheory.CategoryStruct.comp φ.τ₁ h₂.f'

full_name: CategoryTheory.ShortComplex.leftHomologyπ_naturality'
code: @[reassoc (attr := simp)]
lemma leftHomologyπ_naturality' :
    h₁.π ≫ leftHomologyMap' φ h₁ h₂ = cyclesMap' φ h₁ h₂ ≫ h₂.π 
goal: CategoryTheory.CategoryStruct.comp h₁.π (CategoryTheory.ShortComplex.leftHomologyMap' φ h₁ h₂) =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap' φ h₁ h₂) h₂.π

full_name: CategoryTheory.ShortComplex.leftHomologyMap
code: /-- The (left) homology map `S₁.leftHomology ⟶ S₂.leftHomology` induced by a morphism
`S₁ ⟶ S₂` of short complexes. -/
noncomputable def leftHomologyMap : S₁.leftHomology ⟶ S₂.leftHomology 
goal: S₁.leftHomology ⟶ S₂.leftHomology

full_name: CategoryTheory.ShortComplex.cyclesMap
code: /-- The morphism `S₁.cycles ⟶ S₂.cycles` induced by a morphism `S₁ ⟶ S₂` of short complexes. -/
noncomputable def cyclesMap : S₁.cycles ⟶ S₂.cycles 
goal: S₁.cycles ⟶ S₂.cycles

full_name: CategoryTheory.ShortComplex.cyclesMap_i
code: @[reassoc (attr := simp)]
lemma cyclesMap_i : cyclesMap φ ≫ S₂.iCycles = S₁.iCycles ≫ φ.τ₂ 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap φ) S₂.iCycles =
  CategoryTheory.CategoryStruct.comp S₁.iCycles φ.τ₂

full_name: CategoryTheory.ShortComplex.toCycles_naturality
code: @[reassoc (attr := simp)]
lemma toCycles_naturality : S₁.toCycles ≫ cyclesMap φ = φ.τ₁ ≫ S₂.toCycles 
goal: CategoryTheory.CategoryStruct.comp S₁.toCycles (CategoryTheory.ShortComplex.cyclesMap φ) =
  CategoryTheory.CategoryStruct.comp φ.τ₁ S₂.toCycles

full_name: CategoryTheory.ShortComplex.leftHomologyπ_naturality
code: @[reassoc (attr := simp)]
lemma leftHomologyπ_naturality :
    S₁.leftHomologyπ ≫ leftHomologyMap φ = cyclesMap φ ≫ S₂.leftHomologyπ 
goal: CategoryTheory.CategoryStruct.comp S₁.leftHomologyπ (CategoryTheory.ShortComplex.leftHomologyMap φ) =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap φ) S₂.leftHomologyπ

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.leftHomologyMap'_eq
code: lemma leftHomologyMap'_eq : leftHomologyMap' φ h₁ h₂ = γ.φH 
goal: CategoryTheory.ShortComplex.leftHomologyMap' φ h₁ h₂ = γ.φH

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.cyclesMap'_eq
code: lemma cyclesMap'_eq : cyclesMap' φ h₁ h₂ = γ.φK 
goal: CategoryTheory.ShortComplex.cyclesMap' φ h₁ h₂ = γ.φK

full_name: CategoryTheory.ShortComplex.leftHomologyMap'_id
code: @[simp]
lemma leftHomologyMap'_id (h : S.LeftHomologyData) :
    leftHomologyMap' (𝟙 S) h h = 𝟙 _ 
goal: CategoryTheory.ShortComplex.leftHomologyMap' (CategoryTheory.CategoryStruct.id S) h h =
  CategoryTheory.CategoryStruct.id h.H

full_name: CategoryTheory.ShortComplex.cyclesMap'_id
code: @[simp]
lemma cyclesMap'_id (h : S.LeftHomologyData) :
    cyclesMap' (𝟙 S) h h = 𝟙 _ 
goal: CategoryTheory.ShortComplex.cyclesMap' (CategoryTheory.CategoryStruct.id S) h h = CategoryTheory.CategoryStruct.id h.K

full_name: CategoryTheory.ShortComplex.leftHomologyMap_id
code: @[simp]
lemma leftHomologyMap_id [HasLeftHomology S] :
    leftHomologyMap (𝟙 S) = 𝟙 _ 
goal: CategoryTheory.ShortComplex.leftHomologyMap (CategoryTheory.CategoryStruct.id S) =
  CategoryTheory.CategoryStruct.id S.leftHomology

full_name: CategoryTheory.ShortComplex.cyclesMap_id
code: @[simp]
lemma cyclesMap_id [HasLeftHomology S] :
    cyclesMap (𝟙 S) = 𝟙 _ 
goal: CategoryTheory.ShortComplex.cyclesMap (CategoryTheory.CategoryStruct.id S) = CategoryTheory.CategoryStruct.id S.cycles

full_name: CategoryTheory.ShortComplex.leftHomologyMap'_zero
code: @[simp]
lemma leftHomologyMap'_zero (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    leftHomologyMap' 0 h₁ h₂ = 0 
goal: CategoryTheory.ShortComplex.leftHomologyMap' 0 h₁ h₂ = 0

full_name: CategoryTheory.ShortComplex.cyclesMap'_zero
code: @[simp]
lemma cyclesMap'_zero (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    cyclesMap' 0 h₁ h₂ = 0 
goal: CategoryTheory.ShortComplex.cyclesMap' 0 h₁ h₂ = 0

full_name: CategoryTheory.ShortComplex.leftHomologyMap_zero
code: @[simp]
lemma leftHomologyMap_zero [HasLeftHomology S₁] [HasLeftHomology S₂] :
    leftHomologyMap (0 : S₁ ⟶ S₂) = 0 
goal: CategoryTheory.ShortComplex.leftHomologyMap 0 = 0

full_name: CategoryTheory.ShortComplex.cyclesMap_zero
code: @[simp]
lemma cyclesMap_zero [HasLeftHomology S₁] [HasLeftHomology S₂] :
    cyclesMap (0 : S₁ ⟶ S₂) = 0 
goal: CategoryTheory.ShortComplex.cyclesMap 0 = 0

full_name: CategoryTheory.ShortComplex.leftHomologyMap'_comp
code: @[reassoc]
lemma leftHomologyMap'_comp (φ₁ : S₁ ⟶ S₂) (φ₂ : S₂ ⟶ S₃)
    (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) (h₃ : S₃.LeftHomologyData) :
    leftHomologyMap' (φ₁ ≫ φ₂) h₁ h₃ = leftHomologyMap' φ₁ h₁ h₂ ≫
      leftHomologyMap' φ₂ h₂ h₃ 
goal: CategoryTheory.ShortComplex.leftHomologyMap' (CategoryTheory.CategoryStruct.comp φ₁ φ₂) h₁ h₃ =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.leftHomologyMap' φ₁ h₁ h₂)
    (CategoryTheory.ShortComplex.leftHomologyMap' φ₂ h₂ h₃)

full_name: CategoryTheory.ShortComplex.cyclesMap'_comp
code: @[reassoc]
lemma cyclesMap'_comp (φ₁ : S₁ ⟶ S₂) (φ₂ : S₂ ⟶ S₃)
    (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) (h₃ : S₃.LeftHomologyData) :
    cyclesMap' (φ₁ ≫ φ₂) h₁ h₃ = cyclesMap' φ₁ h₁ h₂ ≫ cyclesMap' φ₂ h₂ h₃ 
goal: CategoryTheory.ShortComplex.cyclesMap' (CategoryTheory.CategoryStruct.comp φ₁ φ₂) h₁ h₃ =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap' φ₁ h₁ h₂)
    (CategoryTheory.ShortComplex.cyclesMap' φ₂ h₂ h₃)

full_name: CategoryTheory.ShortComplex.leftHomologyMap_comp
code: @[reassoc]
lemma leftHomologyMap_comp [HasLeftHomology S₁] [HasLeftHomology S₂] [HasLeftHomology S₃]
    (φ₁ : S₁ ⟶ S₂) (φ₂ : S₂ ⟶ S₃) :
    leftHomologyMap (φ₁ ≫ φ₂) = leftHomologyMap φ₁ ≫ leftHomologyMap φ₂ 
goal: CategoryTheory.ShortComplex.leftHomologyMap (CategoryTheory.CategoryStruct.comp φ₁ φ₂) =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.leftHomologyMap φ₁)
    (CategoryTheory.ShortComplex.leftHomologyMap φ₂)

full_name: CategoryTheory.ShortComplex.cyclesMap_comp
code: @[reassoc]
lemma cyclesMap_comp [HasLeftHomology S₁] [HasLeftHomology S₂] [HasLeftHomology S₃]
    (φ₁ : S₁ ⟶ S₂) (φ₂ : S₂ ⟶ S₃) :
    cyclesMap (φ₁ ≫ φ₂) = cyclesMap φ₁ ≫ cyclesMap φ₂ 
goal: CategoryTheory.ShortComplex.cyclesMap (CategoryTheory.CategoryStruct.comp φ₁ φ₂) =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap φ₁)
    (CategoryTheory.ShortComplex.cyclesMap φ₂)

full_name: CategoryTheory.ShortComplex.leftHomologyMapIso'_hom
code: /-- An isomorphism of short complexes `S₁ ≅ S₂` induces an isomorphism on the `H` fields
of left homology data of `S₁` and `S₂`. -/
@[simps]
def leftHomologyMapIso' (e : S₁ ≅ S₂) (h₁ : S₁.LeftHomologyData)
    (h₂ : S₂.LeftHomologyData) : h₁.H ≅ h₂.H 
goal: (CategoryTheory.ShortComplex.leftHomologyMapIso' e h₁ h₂).hom = CategoryTheory.ShortComplex.leftHomologyMap' e.hom h₁ h₂

full_name: CategoryTheory.ShortComplex.leftHomologyMapIso'
code: /-- An isomorphism of short complexes `S₁ ≅ S₂` induces an isomorphism on the `H` fields
of left homology data of `S₁` and `S₂`. -/
@[simps]
def leftHomologyMapIso' (e : S₁ ≅ S₂) (h₁ : S₁.LeftHomologyData)
    (h₂ : S₂.LeftHomologyData) : h₁.H ≅ h₂.H 
goal: h₁.H ≅ h₂.H

full_name: CategoryTheory.ShortComplex.leftHomologyMapIso'_inv
code: /-- An isomorphism of short complexes `S₁ ≅ S₂` induces an isomorphism on the `H` fields
of left homology data of `S₁` and `S₂`. -/
@[simps]
def leftHomologyMapIso' (e : S₁ ≅ S₂) (h₁ : S₁.LeftHomologyData)
    (h₂ : S₂.LeftHomologyData) : h₁.H ≅ h₂.H 
goal: (CategoryTheory.ShortComplex.leftHomologyMapIso' e h₁ h₂).inv = CategoryTheory.ShortComplex.leftHomologyMap' e.inv h₂ h₁

full_name: CategoryTheory.ShortComplex.isIso_leftHomologyMap'_of_isIso
code: instance isIso_leftHomologyMap'_of_isIso (φ : S₁ ⟶ S₂) [IsIso φ]
    (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    IsIso (leftHomologyMap' φ h₁ h₂) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.leftHomologyMap' φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.cyclesMapIso'
code: /-- An isomorphism of short complexes `S₁ ≅ S₂` induces an isomorphism on the `K` fields
of left homology data of `S₁` and `S₂`. -/
@[simps]
def cyclesMapIso' (e : S₁ ≅ S₂) (h₁ : S₁.LeftHomologyData)
    (h₂ : S₂.LeftHomologyData) : h₁.K ≅ h₂.K 
goal: h₁.K ≅ h₂.K

full_name: CategoryTheory.ShortComplex.cyclesMapIso'_inv
code: /-- An isomorphism of short complexes `S₁ ≅ S₂` induces an isomorphism on the `K` fields
of left homology data of `S₁` and `S₂`. -/
@[simps]
def cyclesMapIso' (e : S₁ ≅ S₂) (h₁ : S₁.LeftHomologyData)
    (h₂ : S₂.LeftHomologyData) : h₁.K ≅ h₂.K 
goal: (CategoryTheory.ShortComplex.cyclesMapIso' e h₁ h₂).inv = CategoryTheory.ShortComplex.cyclesMap' e.inv h₂ h₁

full_name: CategoryTheory.ShortComplex.cyclesMapIso'_hom
code: /-- An isomorphism of short complexes `S₁ ≅ S₂` induces an isomorphism on the `K` fields
of left homology data of `S₁` and `S₂`. -/
@[simps]
def cyclesMapIso' (e : S₁ ≅ S₂) (h₁ : S₁.LeftHomologyData)
    (h₂ : S₂.LeftHomologyData) : h₁.K ≅ h₂.K 
goal: (CategoryTheory.ShortComplex.cyclesMapIso' e h₁ h₂).hom = CategoryTheory.ShortComplex.cyclesMap' e.hom h₁ h₂

full_name: CategoryTheory.ShortComplex.isIso_cyclesMap'_of_isIso
code: instance isIso_cyclesMap'_of_isIso (φ : S₁ ⟶ S₂) [IsIso φ]
    (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    IsIso (cyclesMap' φ h₁ h₂) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.cyclesMap' φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.leftHomologyMapIso_inv
code: /-- The isomorphism `S₁.leftHomology ≅ S₂.leftHomology` induced by an isomorphism of
short complexes `S₁ ≅ S₂`. -/
@[simps]
noncomputable def leftHomologyMapIso (e : S₁ ≅ S₂) [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : S₁.leftHomology ≅ S₂.leftHomology 
goal: (CategoryTheory.ShortComplex.leftHomologyMapIso e).inv = CategoryTheory.ShortComplex.leftHomologyMap e.inv

full_name: CategoryTheory.ShortComplex.leftHomologyMapIso
code: /-- The isomorphism `S₁.leftHomology ≅ S₂.leftHomology` induced by an isomorphism of
short complexes `S₁ ≅ S₂`. -/
@[simps]
noncomputable def leftHomologyMapIso (e : S₁ ≅ S₂) [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : S₁.leftHomology ≅ S₂.leftHomology 
goal: S₁.leftHomology ≅ S₂.leftHomology

full_name: CategoryTheory.ShortComplex.leftHomologyMapIso_hom
code: /-- The isomorphism `S₁.leftHomology ≅ S₂.leftHomology` induced by an isomorphism of
short complexes `S₁ ≅ S₂`. -/
@[simps]
noncomputable def leftHomologyMapIso (e : S₁ ≅ S₂) [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : S₁.leftHomology ≅ S₂.leftHomology 
goal: (CategoryTheory.ShortComplex.leftHomologyMapIso e).hom = CategoryTheory.ShortComplex.leftHomologyMap e.hom

full_name: CategoryTheory.ShortComplex.isIso_leftHomologyMap_of_iso
code: instance isIso_leftHomologyMap_of_iso (φ : S₁ ⟶ S₂)
    [IsIso φ] [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    IsIso (leftHomologyMap φ) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.leftHomologyMap φ)

full_name: CategoryTheory.ShortComplex.cyclesMapIso_hom
code: /-- The isomorphism `S₁.cycles ≅ S₂.cycles` induced by an isomorphism
of short complexes `S₁ ≅ S₂`. -/
@[simps]
noncomputable def cyclesMapIso (e : S₁ ≅ S₂) [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : S₁.cycles ≅ S₂.cycles 
goal: (CategoryTheory.ShortComplex.cyclesMapIso e).hom = CategoryTheory.ShortComplex.cyclesMap e.hom

full_name: CategoryTheory.ShortComplex.cyclesMapIso
code: /-- The isomorphism `S₁.cycles ≅ S₂.cycles` induced by an isomorphism
of short complexes `S₁ ≅ S₂`. -/
@[simps]
noncomputable def cyclesMapIso (e : S₁ ≅ S₂) [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : S₁.cycles ≅ S₂.cycles 
goal: S₁.cycles ≅ S₂.cycles

full_name: CategoryTheory.ShortComplex.cyclesMapIso_inv
code: /-- The isomorphism `S₁.cycles ≅ S₂.cycles` induced by an isomorphism
of short complexes `S₁ ≅ S₂`. -/
@[simps]
noncomputable def cyclesMapIso (e : S₁ ≅ S₂) [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : S₁.cycles ≅ S₂.cycles 
goal: (CategoryTheory.ShortComplex.cyclesMapIso e).inv = CategoryTheory.ShortComplex.cyclesMap e.inv

full_name: CategoryTheory.ShortComplex.isIso_cyclesMap_of_iso
code: instance isIso_cyclesMap_of_iso (φ : S₁ ⟶ S₂) [IsIso φ] [S₁.HasLeftHomology]
    [S₂.HasLeftHomology] : IsIso (cyclesMap φ) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.cyclesMap φ)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.leftHomologyIso
code: /-- The isomorphism `S.leftHomology ≅ h.H` induced by a left homology data `h` for a
short complex `S`. -/
noncomputable def leftHomologyIso : S.leftHomology ≅ h.H 
goal: S.leftHomology ≅ h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyData.cyclesIso
code: /-- The isomorphism `S.cycles ≅ h.K` induced by a left homology data `h` for a
short complex `S`. -/
noncomputable def cyclesIso : S.cycles ≅ h.K 
goal: S.cycles ≅ h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyData.cyclesIso_hom_comp_i
code: @[reassoc (attr := simp)]
lemma cyclesIso_hom_comp_i : h.cyclesIso.hom ≫ h.i = S.iCycles 
goal: CategoryTheory.CategoryStruct.comp h.cyclesIso.hom h.i = S.iCycles

full_name: CategoryTheory.ShortComplex.LeftHomologyData.cyclesIso_inv_comp_iCycles
code: @[reassoc (attr := simp)]
lemma cyclesIso_inv_comp_iCycles : h.cyclesIso.inv ≫ S.iCycles = h.i 
goal: CategoryTheory.CategoryStruct.comp h.cyclesIso.inv S.iCycles = h.i

full_name: CategoryTheory.ShortComplex.LeftHomologyData.leftHomologyπ_comp_leftHomologyIso_hom
code: @[reassoc (attr := simp)]
lemma leftHomologyπ_comp_leftHomologyIso_hom :
    S.leftHomologyπ ≫ h.leftHomologyIso.hom = h.cyclesIso.hom ≫ h.π 
goal: CategoryTheory.CategoryStruct.comp S.leftHomologyπ h.leftHomologyIso.hom =
  CategoryTheory.CategoryStruct.comp h.cyclesIso.hom h.π

full_name: CategoryTheory.ShortComplex.LeftHomologyData.π_comp_leftHomologyIso_inv
code: @[reassoc (attr := simp)]
lemma π_comp_leftHomologyIso_inv :
    h.π ≫ h.leftHomologyIso.inv = h.cyclesIso.inv ≫ S.leftHomologyπ 
goal: CategoryTheory.CategoryStruct.comp h.π h.leftHomologyIso.inv =
  CategoryTheory.CategoryStruct.comp h.cyclesIso.inv S.leftHomologyπ

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.leftHomologyMap_eq
code: lemma leftHomologyMap_eq [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    leftHomologyMap φ = h₁.leftHomologyIso.hom ≫ γ.φH ≫ h₂.leftHomologyIso.inv 
goal: CategoryTheory.ShortComplex.leftHomologyMap φ =
  CategoryTheory.CategoryStruct.comp h₁.leftHomologyIso.hom
    (CategoryTheory.CategoryStruct.comp γ.φH h₂.leftHomologyIso.inv)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.cyclesMap_eq
code: lemma cyclesMap_eq [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    cyclesMap φ = h₁.cyclesIso.hom ≫ γ.φK ≫ h₂.cyclesIso.inv 
goal: CategoryTheory.ShortComplex.cyclesMap φ =
  CategoryTheory.CategoryStruct.comp h₁.cyclesIso.hom (CategoryTheory.CategoryStruct.comp γ.φK h₂.cyclesIso.inv)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.leftHomologyMap_comm
code: lemma leftHomologyMap_comm [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    leftHomologyMap φ ≫ h₂.leftHomologyIso.hom = h₁.leftHomologyIso.hom ≫ γ.φH 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.leftHomologyMap φ) h₂.leftHomologyIso.hom =
  CategoryTheory.CategoryStruct.comp h₁.leftHomologyIso.hom γ.φH

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.cyclesMap_comm
code: lemma cyclesMap_comm [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    cyclesMap φ ≫ h₂.cyclesIso.hom = h₁.cyclesIso.hom ≫ γ.φK 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap φ) h₂.cyclesIso.hom =
  CategoryTheory.CategoryStruct.comp h₁.cyclesIso.hom γ.φK

full_name: CategoryTheory.ShortComplex.leftHomologyFunctor_obj
code: /-- The left homology functor `ShortComplex C ⥤ C`, where the left homology of a
short complex `S` is understood as a cokernel of the obvious map `S.toCycles : S.X₁ ⟶ S.cycles`
where `S.cycles` is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
@[simps]
noncomputable def leftHomologyFunctor : ShortComplex C ⥤ C 
goal: (CategoryTheory.ShortComplex.leftHomologyFunctor C).obj S = S.leftHomology

full_name: CategoryTheory.ShortComplex.leftHomologyFunctor_map
code: /-- The left homology functor `ShortComplex C ⥤ C`, where the left homology of a
short complex `S` is understood as a cokernel of the obvious map `S.toCycles : S.X₁ ⟶ S.cycles`
where `S.cycles` is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
@[simps]
noncomputable def leftHomologyFunctor : ShortComplex C ⥤ C 
goal: ∀ {X Y : CategoryTheory.ShortComplex C} (φ : X ⟶ Y),
  (CategoryTheory.ShortComplex.leftHomologyFunctor C).map φ = CategoryTheory.ShortComplex.leftHomologyMap φ

full_name: CategoryTheory.ShortComplex.leftHomologyFunctor
code: /-- The left homology functor `ShortComplex C ⥤ C`, where the left homology of a
short complex `S` is understood as a cokernel of the obvious map `S.toCycles : S.X₁ ⟶ S.cycles`
where `S.cycles` is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
@[simps]
noncomputable def leftHomologyFunctor : ShortComplex C ⥤ C 
goal: CategoryTheory.Functor (CategoryTheory.ShortComplex C) C

full_name: CategoryTheory.ShortComplex.cyclesFunctor_obj
code: /-- The cycles functor `ShortComplex C ⥤ C` which sends a short complex `S` to `S.cycles`
which is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
@[simps]
noncomputable def cyclesFunctor : ShortComplex C ⥤ C 
goal: (CategoryTheory.ShortComplex.cyclesFunctor C).obj S = S.cycles

full_name: CategoryTheory.ShortComplex.cyclesFunctor
code: /-- The cycles functor `ShortComplex C ⥤ C` which sends a short complex `S` to `S.cycles`
which is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
@[simps]
noncomputable def cyclesFunctor : ShortComplex C ⥤ C 
goal: CategoryTheory.Functor (CategoryTheory.ShortComplex C) C

full_name: CategoryTheory.ShortComplex.cyclesFunctor_map
code: /-- The cycles functor `ShortComplex C ⥤ C` which sends a short complex `S` to `S.cycles`
which is a kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
@[simps]
noncomputable def cyclesFunctor : ShortComplex C ⥤ C 
goal: ∀ {X Y : CategoryTheory.ShortComplex C} (φ : X ⟶ Y),
  (CategoryTheory.ShortComplex.cyclesFunctor C).map φ = CategoryTheory.ShortComplex.cyclesMap φ

full_name: CategoryTheory.ShortComplex.leftHomologyπNatTrans
code: /-- The natural transformation `S.cycles ⟶ S.leftHomology` for all short complexes `S`. -/
@[simps]
noncomputable def leftHomologyπNatTrans : cyclesFunctor C ⟶ leftHomologyFunctor C 
goal: CategoryTheory.ShortComplex.cyclesFunctor C ⟶ CategoryTheory.ShortComplex.leftHomologyFunctor C

full_name: CategoryTheory.ShortComplex.leftHomologyπNatTrans_app
code: /-- The natural transformation `S.cycles ⟶ S.leftHomology` for all short complexes `S`. -/
@[simps]
noncomputable def leftHomologyπNatTrans : cyclesFunctor C ⟶ leftHomologyFunctor C 
goal: (CategoryTheory.ShortComplex.leftHomologyπNatTrans C).app S = S.leftHomologyπ

full_name: CategoryTheory.ShortComplex.iCyclesNatTrans_app
code: /-- The natural transformation `S.cycles ⟶ S.X₂` for all short complexes `S`. -/
@[simps]
noncomputable def iCyclesNatTrans : cyclesFunctor C ⟶ ShortComplex.π₂ 
goal: (CategoryTheory.ShortComplex.iCyclesNatTrans C).app S = S.iCycles

full_name: CategoryTheory.ShortComplex.iCyclesNatTrans
code: /-- The natural transformation `S.cycles ⟶ S.X₂` for all short complexes `S`. -/
@[simps]
noncomputable def iCyclesNatTrans : cyclesFunctor C ⟶ ShortComplex.π₂ 
goal: CategoryTheory.ShortComplex.cyclesFunctor C ⟶ CategoryTheory.ShortComplex.π₂

full_name: CategoryTheory.ShortComplex.toCyclesNatTrans_app
code: /-- The natural transformation `S.X₁ ⟶ S.cycles` for all short complexes `S`. -/
@[simps]
noncomputable def toCyclesNatTrans :
    π₁ ⟶ cyclesFunctor C 
goal: (CategoryTheory.ShortComplex.toCyclesNatTrans C).app S = S.toCycles

full_name: CategoryTheory.ShortComplex.toCyclesNatTrans
code: /-- The natural transformation `S.X₁ ⟶ S.cycles` for all short complexes `S`. -/
@[simps]
noncomputable def toCyclesNatTrans :
    π₁ ⟶ cyclesFunctor C 
goal: CategoryTheory.ShortComplex.π₁ ⟶ CategoryTheory.ShortComplex.cyclesFunctor C

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono_H
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₁` induces a left homology data for `S₂` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono'`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₂ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono φ h).H = h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono_π
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₁` induces a left homology data for `S₂` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono'`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₂ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono φ h).π = h.π

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono_K
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₁` induces a left homology data for `S₂` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono'`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₂ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono φ h).K = h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono_i
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₁` induces a left homology data for `S₂` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono'`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₂ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono φ h).i = CategoryTheory.CategoryStruct.comp h.i φ.τ₂

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₁` induces a left homology data for `S₂` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono'`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₂ 
goal: S₂.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.τ₁_ofEpiOfIsIsoOfMono_f'
code: @[simp]
lemma τ₁_ofEpiOfIsIsoOfMono_f' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : φ.τ₁ ≫ (ofEpiOfIsIsoOfMono φ h).f' = h.f' 
goal: CategoryTheory.CategoryStruct.comp φ.τ₁ (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono φ h).f' = h.f'

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono'_i
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₂` induces a left homology data for `S₁` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₁ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).i =
  CategoryTheory.CategoryStruct.comp h.i (CategoryTheory.inv φ.τ₂)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono'_H
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₂` induces a left homology data for `S₁` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₁ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).H = h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono'
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₂` induces a left homology data for `S₁` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₁ 
goal: S₁.LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono'_π
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₂` induces a left homology data for `S₁` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₁ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).π = h.π

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono'_K
code: /-- If `φ : S₁ ⟶ S₂` is a morphism of short complexes such that `φ.τ₁` is epi, `φ.τ₂` is an iso
and `φ.τ₃` is mono, then a left homology data for `S₂` induces a left homology data for `S₁` with
the same `K` and `H` fields. The inverse construction is `ofEpiOfIsIsoOfMono`. -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : LeftHomologyData S₁ 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).K = h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono'_f'
code: @[simp]
lemma ofEpiOfIsIsoOfMono'_f' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : (ofEpiOfIsIsoOfMono' φ h).f' = φ.τ₁ ≫ h.f' 
goal: (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).f' = CategoryTheory.CategoryStruct.comp φ.τ₁ h.f'

full_name: CategoryTheory.ShortComplex.LeftHomologyData.ofIso
code: /-- If `e : S₁ ≅ S₂` is an isomorphism of short complexes and `h₁ : LeftHomologyData S₁`,
this is the left homology data for `S₂` deduced from the isomorphism. -/
noncomputable def ofIso (e : S₁ ≅ S₂) (h₁ : LeftHomologyData S₁) : LeftHomologyData S₂ 
goal: S₂.LeftHomologyData

full_name: CategoryTheory.ShortComplex.hasLeftHomology_of_epi_of_isIso_of_mono
code: lemma hasLeftHomology_of_epi_of_isIso_of_mono (φ : S₁ ⟶ S₂) [HasLeftHomology S₁]
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : HasLeftHomology S₂ 
goal: S₂.HasLeftHomology

full_name: CategoryTheory.ShortComplex.hasLeftHomology_of_epi_of_isIso_of_mono'
code: lemma hasLeftHomology_of_epi_of_isIso_of_mono' (φ : S₁ ⟶ S₂) [HasLeftHomology S₂]
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] : HasLeftHomology S₁ 
goal: S₁.HasLeftHomology

full_name: CategoryTheory.ShortComplex.hasLeftHomology_of_iso
code: lemma hasLeftHomology_of_iso {S₁ S₂ : ShortComplex C} (e : S₁ ≅ S₂) [HasLeftHomology S₁] :
    HasLeftHomology S₂ 
goal: S₂.HasLeftHomology

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono_φK
code: /-- This left homology map data expresses compatibilities of the left homology data
constructed by `LeftHomologyData.ofEpiOfIsIsoOfMono` -/
@[simps]
def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    LeftHomologyMapData φ h (LeftHomologyData.ofEpiOfIsIsoOfMono φ h) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono φ h).φK = CategoryTheory.CategoryStruct.id h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono
code: /-- This left homology map data expresses compatibilities of the left homology data
constructed by `LeftHomologyData.ofEpiOfIsIsoOfMono` -/
@[simps]
def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    LeftHomologyMapData φ h (LeftHomologyData.ofEpiOfIsIsoOfMono φ h) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData φ h
  (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono φ h)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono_φH
code: /-- This left homology map data expresses compatibilities of the left homology data
constructed by `LeftHomologyData.ofEpiOfIsIsoOfMono` -/
@[simps]
def ofEpiOfIsIsoOfMono (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₁)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    LeftHomologyMapData φ h (LeftHomologyData.ofEpiOfIsIsoOfMono φ h) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono φ h).φH = CategoryTheory.CategoryStruct.id h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono'_φH
code: /-- This left homology map data expresses compatibilities of the left homology data
constructed by `LeftHomologyData.ofEpiOfIsIsoOfMono'` -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    LeftHomologyMapData φ (LeftHomologyData.ofEpiOfIsIsoOfMono' φ h) h 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono' φ h).φH =
  CategoryTheory.CategoryStruct.id (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).H

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono'_φK
code: /-- This left homology map data expresses compatibilities of the left homology data
constructed by `LeftHomologyData.ofEpiOfIsIsoOfMono'` -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    LeftHomologyMapData φ (LeftHomologyData.ofEpiOfIsIsoOfMono' φ h) h 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono' φ h).φK =
  CategoryTheory.CategoryStruct.id (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h).K

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.ofEpiOfIsIsoOfMono'
code: /-- This left homology map data expresses compatibilities of the left homology data
constructed by `LeftHomologyData.ofEpiOfIsIsoOfMono'` -/
@[simps]
noncomputable def ofEpiOfIsIsoOfMono' (φ : S₁ ⟶ S₂) (h : LeftHomologyData S₂)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    LeftHomologyMapData φ (LeftHomologyData.ofEpiOfIsIsoOfMono' φ h) h 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData φ (CategoryTheory.ShortComplex.LeftHomologyData.ofEpiOfIsIsoOfMono' φ h)
  h

full_name: CategoryTheory.ShortComplex.instIsIsoLeftHomologyMap'OfEpiτ₁Ofτ₂OfMonoτ₃
code: instance (φ : S₁ ⟶ S₂) (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData)
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    IsIso (leftHomologyMap' φ h₁ h₂) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.leftHomologyMap' φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.instIsIsoLeftHomologyMapOfEpiτ₁Ofτ₂OfMonoτ₃
code: /-- If a morphism of short complexes `φ : S₁ ⟶ S₂` is such that `φ.τ₁` is epi, `φ.τ₂` is an iso,
and `φ.τ₃` is mono, then the induced morphism on left homology is an isomorphism. -/
instance (φ : S₁ ⟶ S₂) [S₁.HasLeftHomology] [S₂.HasLeftHomology]
    [Epi φ.τ₁] [IsIso φ.τ₂] [Mono φ.τ₃] :
    IsIso (leftHomologyMap φ) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.leftHomologyMap φ)

full_name: CategoryTheory.ShortComplex.liftCycles
code: /-- A morphism `k : A ⟶ S.X₂` such that `k ≫ S.g = 0` lifts to a morphism `A ⟶ S.cycles`. -/
noncomputable def liftCycles : A ⟶ S.cycles 
goal: A ⟶ S.cycles

full_name: CategoryTheory.ShortComplex.liftCycles_i
code: @[reassoc (attr := simp)]
lemma liftCycles_i : S.liftCycles k hk ≫ S.iCycles = k 
goal: CategoryTheory.CategoryStruct.comp (S.liftCycles k hk) S.iCycles = k

full_name: CategoryTheory.ShortComplex.comp_liftCycles
code: @[reassoc]
lemma comp_liftCycles {A' : C} (α : A' ⟶ A) :
    α ≫ S.liftCycles k hk = S.liftCycles (α ≫ k) (by rw [assoc, hk, comp_zero]) 
goal: CategoryTheory.CategoryStruct.comp α (S.liftCycles k hk) = S.liftCycles (CategoryTheory.CategoryStruct.comp α k) ⋯

full_name: CategoryTheory.ShortComplex.cyclesIsKernel
code: /-- Via `S.iCycles : S.cycles ⟶ S.X₂`, the object `S.cycles` identifies to the
kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
noncomputable def cyclesIsKernel : IsLimit (KernelFork.ofι S.iCycles S.iCycles_g) 
goal: CategoryTheory.Limits.IsLimit (CategoryTheory.Limits.KernelFork.ofι S.iCycles ⋯)

full_name: CategoryTheory.ShortComplex.cyclesIsoKernel_hom
code: /-- The canonical isomorphism `S.cycles ≅ kernel S.g`. -/
@[simps]
noncomputable def cyclesIsoKernel [HasKernel S.g] : S.cycles ≅ kernel S.g 
goal: S.cyclesIsoKernel.hom = CategoryTheory.Limits.kernel.lift S.g S.iCycles ⋯

full_name: CategoryTheory.ShortComplex.cyclesIsoKernel
code: /-- The canonical isomorphism `S.cycles ≅ kernel S.g`. -/
@[simps]
noncomputable def cyclesIsoKernel [HasKernel S.g] : S.cycles ≅ kernel S.g 
goal: S.cycles ≅ CategoryTheory.Limits.kernel S.g

full_name: CategoryTheory.ShortComplex.cyclesIsoKernel_inv
code: /-- The canonical isomorphism `S.cycles ≅ kernel S.g`. -/
@[simps]
noncomputable def cyclesIsoKernel [HasKernel S.g] : S.cycles ≅ kernel S.g 
goal: S.cyclesIsoKernel.inv = S.liftCycles (CategoryTheory.Limits.kernel.ι S.g) ⋯

full_name: CategoryTheory.ShortComplex.liftLeftHomology
code: /-- The morphism `A ⟶ S.leftHomology` obtained from a morphism `k : A ⟶ S.X₂`
such that `k ≫ S.g = 0.` -/
@[simp]
noncomputable def liftLeftHomology : A ⟶ S.leftHomology 
goal: A ⟶ S.leftHomology

full_name: CategoryTheory.ShortComplex.liftCycles_leftHomologyπ_eq_zero_of_boundary
code: @[reassoc]
lemma liftCycles_leftHomologyπ_eq_zero_of_boundary (x : A ⟶ S.X₁) (hx : k = x ≫ S.f) :
    S.liftCycles k (by rw [hx, assoc, S.zero, comp_zero]) ≫ S.leftHomologyπ = 0 
goal: CategoryTheory.CategoryStruct.comp (S.liftCycles k ⋯) S.leftHomologyπ = 0

full_name: CategoryTheory.ShortComplex.toCycles_comp_leftHomologyπ
code: @[reassoc (attr := simp)]
lemma toCycles_comp_leftHomologyπ : S.toCycles ≫ S.leftHomologyπ = 0 
goal: CategoryTheory.CategoryStruct.comp S.toCycles S.leftHomologyπ = 0

full_name: CategoryTheory.ShortComplex.leftHomologyIsCokernel
code: /-- Via `S.leftHomologyπ : S.cycles ⟶ S.leftHomology`, the object `S.leftHomology` identifies
to the cokernel of `S.toCycles : S.X₁ ⟶ S.cycles`. -/
noncomputable def leftHomologyIsCokernel :
    IsColimit (CokernelCofork.ofπ S.leftHomologyπ S.toCycles_comp_leftHomologyπ) 
goal: CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.CokernelCofork.ofπ S.leftHomologyπ ⋯)

full_name: CategoryTheory.ShortComplex.liftCycles_comp_cyclesMap
code: @[reassoc (attr := simp)]
lemma liftCycles_comp_cyclesMap (φ : S ⟶ S₁) [S₁.HasLeftHomology] :
    S.liftCycles k hk ≫ cyclesMap φ =
      S₁.liftCycles (k ≫ φ.τ₂) (by rw [assoc, φ.comm₂₃, reassoc_of% hk, zero_comp]) 
goal: CategoryTheory.CategoryStruct.comp (S.liftCycles k hk) (CategoryTheory.ShortComplex.cyclesMap φ) =
  S₁.liftCycles (CategoryTheory.CategoryStruct.comp k φ.τ₂) ⋯

full_name: CategoryTheory.ShortComplex.LeftHomologyData.liftCycles_comp_cyclesIso_hom
code: @[reassoc (attr := simp)]
lemma LeftHomologyData.liftCycles_comp_cyclesIso_hom :
    S.liftCycles k hk ≫ h.cyclesIso.hom = h.liftK k hk 
goal: CategoryTheory.CategoryStruct.comp (S.liftCycles k hk) h.cyclesIso.hom = h.liftK k hk

full_name: CategoryTheory.ShortComplex.LeftHomologyData.lift_K_comp_cyclesIso_inv
code: @[reassoc (attr := simp)]
lemma LeftHomologyData.lift_K_comp_cyclesIso_inv :
    h.liftK k hk ≫ h.cyclesIso.inv = S.liftCycles k hk 
goal: CategoryTheory.CategoryStruct.comp (h.liftK k hk) h.cyclesIso.inv = S.liftCycles k hk

full_name: CategoryTheory.ShortComplex.HasLeftHomology.hasKernel
code: lemma hasKernel [S.HasLeftHomology] : HasKernel S.g 
goal: CategoryTheory.Limits.HasKernel S.g

full_name: CategoryTheory.ShortComplex.HasLeftHomology.hasCokernel
code: lemma hasCokernel [S.HasLeftHomology] [HasKernel S.g] :
    HasCokernel (kernel.lift S.g S.f S.zero) 
goal: CategoryTheory.Limits.HasCokernel (CategoryTheory.Limits.kernel.lift S.g S.f ⋯)

full_name: CategoryTheory.ShortComplex.leftHomologyIsoCokernelLift
code: /-- The left homology of a short complex `S` identifies to the cokernel of the canonical
morphism `S.X₁ ⟶ kernel S.g`. -/
noncomputable def leftHomologyIsoCokernelLift [S.HasLeftHomology] [HasKernel S.g]
    [HasCokernel (kernel.lift S.g S.f S.zero)] :
    S.leftHomology ≅ cokernel (kernel.lift S.g S.f S.zero) 
goal: S.leftHomology ≅ CategoryTheory.Limits.cokernel (CategoryTheory.Limits.kernel.lift S.g S.f ⋯)

full_name: CategoryTheory.ShortComplex.isIso_cyclesMap'_of_isIso_of_mono
code: lemma isIso_cyclesMap'_of_isIso_of_mono (φ : S₁ ⟶ S₂) (h₂ : IsIso φ.τ₂) (h₃ : Mono φ.τ₃)
    (h₁ : S₁.LeftHomologyData) (h₂ : S₂.LeftHomologyData) :
    IsIso (cyclesMap' φ h₁ h₂) 
goal: ∀ (h₂ : S₂.LeftHomologyData), CategoryTheory.IsIso (CategoryTheory.ShortComplex.cyclesMap' φ h₁ h₂)

full_name: CategoryTheory.ShortComplex.isIso_cyclesMap_of_isIso_of_mono'
code: lemma isIso_cyclesMap_of_isIso_of_mono' (φ : S₁ ⟶ S₂) (h₂ : IsIso φ.τ₂) (h₃ : Mono φ.τ₃)
    [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    IsIso (cyclesMap φ) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.cyclesMap φ)

full_name: CategoryTheory.ShortComplex.isIso_cyclesMap_of_isIso_of_mono
code: instance isIso_cyclesMap_of_isIso_of_mono (φ : S₁ ⟶ S₂) [IsIso φ.τ₂] [Mono φ.τ₃]
    [S₁.HasLeftHomology] [S₂.HasLeftHomology] :
    IsIso (cyclesMap φ) 
goal: CategoryTheory.IsIso (CategoryTheory.ShortComplex.cyclesMap φ)