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

full_name: CategoryTheory.Functor.PreservesHomology
code: /-- A functor preserves homology when it preserves both kernels and cokernels. -/
class PreservesHomology (F : C ⥤ D) [PreservesZeroMorphisms F] where
  /-- the functor preserves kernels -/
  preservesKernels ⦃X Y : C⦄ (f : X ⟶ Y) : PreservesLimit (parallelPair f 0) F := by
    infer_instance
  /-- the functor preserves cokernels -/
  preservesCokernels ⦃X Y : C⦄ (f : X ⟶ Y) : PreservesColimit (parallelPair f 0) F := by
    infer_instance
goal: Type (max (max (max u_1 u_2) u_3) u_4)

full_name: CategoryTheory.Functor.PreservesHomology.preservesCokernels
code: /-- A functor preserves homology when it preserves both kernels and cokernels. -/
class PreservesHomology (F : C ⥤ D) [PreservesZeroMorphisms F] where
  /-- the functor preserves kernels -/
  preservesKernels ⦃X Y : C⦄ (f : X ⟶ Y) : PreservesLimit (parallelPair f 0) F := by
    infer_instance
  /-- the functor preserves cokernels -/
  preservesCokernels ⦃X Y : C⦄ (f : X ⟶ Y) : PreservesColimit (parallelPair f 0) F := by
    infer_instance
goal: CategoryTheory.Limits.PreservesColimit (CategoryTheory.Limits.parallelPair f 0) F

full_name: CategoryTheory.Functor.PreservesHomology.preservesKernels
code: /-- A functor preserves homology when it preserves both kernels and cokernels. -/
class PreservesHomology (F : C ⥤ D) [PreservesZeroMorphisms F] where
  /-- the functor preserves kernels -/
  preservesKernels ⦃X Y : C⦄ (f : X ⟶ Y) : PreservesLimit (parallelPair f 0) F := by
    infer_instance
  /-- the functor preserves cokernels -/
  preservesCokernels ⦃X Y : C⦄ (f : X ⟶ Y) : PreservesColimit (parallelPair f 0) F := by
    infer_instance
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.parallelPair f 0) F

full_name: CategoryTheory.Functor.PreservesHomology.preservesKernel
code: /-- A functor which preserves homology preserves kernels. -/
def PreservesHomology.preservesKernel [F.PreservesHomology] {X Y : C} (f : X ⟶ Y) :
    PreservesLimit (parallelPair f 0) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.parallelPair f 0) F

full_name: CategoryTheory.Functor.PreservesHomology.preservesCokernel
code: /-- A functor which preserves homology preserves cokernels. -/
def PreservesHomology.preservesCokernel [F.PreservesHomology] {X Y : C} (f : X ⟶ Y) :
    PreservesColimit (parallelPair f 0) F 
goal: CategoryTheory.Limits.PreservesColimit (CategoryTheory.Limits.parallelPair f 0) F

full_name: CategoryTheory.Functor.preservesHomologyOfExact
code: noncomputable instance preservesHomologyOfExact
    [PreservesFiniteLimits F] [PreservesFiniteColimits F] :
  F.PreservesHomology 
goal: F.PreservesHomology

full_name: CategoryTheory.ShortComplex.LeftHomologyData.IsPreservedBy.f'
code: /-- A left homology data `h` of a short complex `S` is preserved by a functor `F` is
`F` preserves the kernel of `S.g : S.X₂ ⟶ S.X₃` and the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
class IsPreservedBy [F.PreservesZeroMorphisms] where
  /-- the functor preserves the kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
  g : PreservesLimit (parallelPair S.g 0) F
  /-- the functor preserves the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
  f' : PreservesColimit (parallelPair h.f' 0) F
goal: CategoryTheory.Limits.PreservesColimit (CategoryTheory.Limits.parallelPair h.f' 0) F

full_name: CategoryTheory.ShortComplex.LeftHomologyData.IsPreservedBy.g
code: /-- A left homology data `h` of a short complex `S` is preserved by a functor `F` is
`F` preserves the kernel of `S.g : S.X₂ ⟶ S.X₃` and the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
class IsPreservedBy [F.PreservesZeroMorphisms] where
  /-- the functor preserves the kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
  g : PreservesLimit (parallelPair S.g 0) F
  /-- the functor preserves the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
  f' : PreservesColimit (parallelPair h.f' 0) F
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.parallelPair S.g 0) F

full_name: CategoryTheory.ShortComplex.LeftHomologyData.IsPreservedBy
code: /-- A left homology data `h` of a short complex `S` is preserved by a functor `F` is
`F` preserves the kernel of `S.g : S.X₂ ⟶ S.X₃` and the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
class IsPreservedBy [F.PreservesZeroMorphisms] where
  /-- the functor preserves the kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
  g : PreservesLimit (parallelPair S.g 0) F
  /-- the functor preserves the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
  f' : PreservesColimit (parallelPair h.f' 0) F
goal: Type (max (max (max u_1 u_2) u_3) u_4)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.isPreservedByOfPreservesHomology
code: noncomputable instance isPreservedByOfPreservesHomology [F.PreservesHomology] :
    h.IsPreservedBy F 
goal: h.IsPreservedBy F

full_name: CategoryTheory.ShortComplex.LeftHomologyData.IsPreservedBy.hg
code: /-- When a left homology data is preserved by a functor `F`, this functor
preserves the kernel of `S.g : S.X₂ ⟶ S.X₃`. -/
def IsPreservedBy.hg : PreservesLimit (parallelPair S.g 0) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.parallelPair S.g 0) F

full_name: CategoryTheory.ShortComplex.LeftHomologyData.IsPreservedBy.hf'
code: /-- When a left homology data `h` is preserved by a functor `F`, this functor
preserves the cokernel of `h.f' : S.X₁ ⟶ h.K`. -/
def IsPreservedBy.hf' : PreservesColimit (parallelPair h.f' 0) F 
goal: CategoryTheory.Limits.PreservesColimit (CategoryTheory.Limits.parallelPair h.f' 0) F

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map
code: /-- When a left homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced left homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).LeftHomologyData 
goal: (S.map F).LeftHomologyData

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_i
code: /-- When a left homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced left homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).LeftHomologyData 
goal: (h.map F).i = F.map h.i

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_K
code: /-- When a left homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced left homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).LeftHomologyData 
goal: (h.map F).K = F.obj h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_H
code: /-- When a left homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced left homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).LeftHomologyData 
goal: (h.map F).H = F.obj h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_π
code: /-- When a left homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced left homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).LeftHomologyData 
goal: (h.map F).π = F.map h.π

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_f'
code: @[simp]
lemma map_f' : (h.map F).f' = F.map h.f' 
goal: (h.map F).f' = F.map h.f'

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.map
code: /-- Given a left homology map data `ψ : LeftHomologyMapData φ h₁ h₂` such that
both left homology data `h₁` and `h₂` are preserved by a functor `F`, this is
the induced left homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def LeftHomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.LeftHomologyData}
    {h₂ : S₂.LeftHomologyData} (ψ : LeftHomologyMapData φ h₁ h₂) (F : C ⥤ D)
    [F.PreservesZeroMorphisms] [h₁.IsPreservedBy F] [h₂.IsPreservedBy F] :
    LeftHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F)

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.map_φH
code: /-- Given a left homology map data `ψ : LeftHomologyMapData φ h₁ h₂` such that
both left homology data `h₁` and `h₂` are preserved by a functor `F`, this is
the induced left homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def LeftHomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.LeftHomologyData}
    {h₂ : S₂.LeftHomologyData} (ψ : LeftHomologyMapData φ h₁ h₂) (F : C ⥤ D)
    [F.PreservesZeroMorphisms] [h₁.IsPreservedBy F] [h₂.IsPreservedBy F] :
    LeftHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: (ψ.map F).φH = F.map ψ.φH

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.map_φK
code: /-- Given a left homology map data `ψ : LeftHomologyMapData φ h₁ h₂` such that
both left homology data `h₁` and `h₂` are preserved by a functor `F`, this is
the induced left homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def LeftHomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.LeftHomologyData}
    {h₂ : S₂.LeftHomologyData} (ψ : LeftHomologyMapData φ h₁ h₂) (F : C ⥤ D)
    [F.PreservesZeroMorphisms] [h₁.IsPreservedBy F] [h₂.IsPreservedBy F] :
    LeftHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: (ψ.map F).φK = F.map ψ.φK

full_name: CategoryTheory.ShortComplex.RightHomologyData.IsPreservedBy
code: /-- A right homology data `h` of a short complex `S` is preserved by a functor `F` is
`F` preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂` and the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
class IsPreservedBy [F.PreservesZeroMorphisms] where
  /-- the functor preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂`. -/
  f : PreservesColimit (parallelPair S.f 0) F
  /-- the functor preserves the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
  g' : PreservesLimit (parallelPair h.g' 0) F
goal: Type (max (max (max u_1 u_2) u_3) u_4)

full_name: CategoryTheory.ShortComplex.RightHomologyData.IsPreservedBy.f
code: /-- A right homology data `h` of a short complex `S` is preserved by a functor `F` is
`F` preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂` and the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
class IsPreservedBy [F.PreservesZeroMorphisms] where
  /-- the functor preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂`. -/
  f : PreservesColimit (parallelPair S.f 0) F
  /-- the functor preserves the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
  g' : PreservesLimit (parallelPair h.g' 0) F
goal: CategoryTheory.Limits.PreservesColimit (CategoryTheory.Limits.parallelPair S.f 0) F

full_name: CategoryTheory.ShortComplex.RightHomologyData.IsPreservedBy.g'
code: /-- A right homology data `h` of a short complex `S` is preserved by a functor `F` is
`F` preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂` and the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
class IsPreservedBy [F.PreservesZeroMorphisms] where
  /-- the functor preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂`. -/
  f : PreservesColimit (parallelPair S.f 0) F
  /-- the functor preserves the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
  g' : PreservesLimit (parallelPair h.g' 0) F
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.parallelPair h.g' 0) F

full_name: CategoryTheory.ShortComplex.RightHomologyData.isPreservedByOfPreservesHomology
code: noncomputable instance isPreservedByOfPreservesHomology [F.PreservesHomology] :
    h.IsPreservedBy F 
goal: h.IsPreservedBy F

full_name: CategoryTheory.ShortComplex.RightHomologyData.IsPreservedBy.hf
code: /-- When a right homology data is preserved by a functor `F`, this functor
preserves the cokernel of `S.f : S.X₁ ⟶ S.X₂`. -/
def IsPreservedBy.hf : PreservesColimit (parallelPair S.f 0) F 
goal: CategoryTheory.Limits.PreservesColimit (CategoryTheory.Limits.parallelPair S.f 0) F

full_name: CategoryTheory.ShortComplex.RightHomologyData.IsPreservedBy.hg'
code: /-- When a right homology data `h` is preserved by a functor `F`, this functor
preserves the kernel of `h.g' : h.Q ⟶ S.X₃`. -/
def IsPreservedBy.hg' : PreservesLimit (parallelPair h.g' 0) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.parallelPair h.g' 0) F

full_name: CategoryTheory.ShortComplex.RightHomologyData.map
code: /-- When a right homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced right homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).RightHomologyData 
goal: (S.map F).RightHomologyData

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_H
code: /-- When a right homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced right homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).RightHomologyData 
goal: (h.map F).H = F.obj h.H

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_Q
code: /-- When a right homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced right homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).RightHomologyData 
goal: (h.map F).Q = F.obj h.Q

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_ι
code: /-- When a right homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced right homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).RightHomologyData 
goal: (h.map F).ι = F.map h.ι

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_p
code: /-- When a right homology data `h` of a short complex `S` is preserved by a functor `F`,
this is the induced right homology data `h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def map : (S.map F).RightHomologyData 
goal: (h.map F).p = F.map h.p

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_g'
code: @[simp]
lemma map_g' : (h.map F).g' = F.map h.g' 
goal: (h.map F).g' = F.map h.g'

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.map
code: /-- Given a right homology map data `ψ : RightHomologyMapData φ h₁ h₂` such that
both right homology data `h₁` and `h₂` are preserved by a functor `F`, this is
the induced right homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def RightHomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.RightHomologyData}
    {h₂ : S₂.RightHomologyData} (ψ : RightHomologyMapData φ h₁ h₂) (F : C ⥤ D)
    [F.PreservesZeroMorphisms] [h₁.IsPreservedBy F] [h₂.IsPreservedBy F] :
    RightHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: CategoryTheory.ShortComplex.RightHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F)

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.map_φH
code: /-- Given a right homology map data `ψ : RightHomologyMapData φ h₁ h₂` such that
both right homology data `h₁` and `h₂` are preserved by a functor `F`, this is
the induced right homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def RightHomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.RightHomologyData}
    {h₂ : S₂.RightHomologyData} (ψ : RightHomologyMapData φ h₁ h₂) (F : C ⥤ D)
    [F.PreservesZeroMorphisms] [h₁.IsPreservedBy F] [h₂.IsPreservedBy F] :
    RightHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: (ψ.map F).φH = F.map ψ.φH

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.map_φQ
code: /-- Given a right homology map data `ψ : RightHomologyMapData φ h₁ h₂` such that
both right homology data `h₁` and `h₂` are preserved by a functor `F`, this is
the induced right homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def RightHomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.RightHomologyData}
    {h₂ : S₂.RightHomologyData} (ψ : RightHomologyMapData φ h₁ h₂) (F : C ⥤ D)
    [F.PreservesZeroMorphisms] [h₁.IsPreservedBy F] [h₂.IsPreservedBy F] :
    RightHomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: (ψ.map F).φQ = F.map ψ.φQ

full_name: CategoryTheory.ShortComplex.HomologyData.map_iso
code: /-- When a homology data `h` of a short complex `S` is such that both `h.left` and
`h.right` are preserved by a functor `F`, this is the induced homology data
`h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def HomologyData.map (h : S.HomologyData) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h.left.IsPreservedBy F] [h.right.IsPreservedBy F] :
    (S.map F).HomologyData 
goal: (h.map F).iso = F.mapIso h.iso

full_name: CategoryTheory.ShortComplex.HomologyData.map_left
code: /-- When a homology data `h` of a short complex `S` is such that both `h.left` and
`h.right` are preserved by a functor `F`, this is the induced homology data
`h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def HomologyData.map (h : S.HomologyData) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h.left.IsPreservedBy F] [h.right.IsPreservedBy F] :
    (S.map F).HomologyData 
goal: (h.map F).left = h.left.map F

full_name: CategoryTheory.ShortComplex.HomologyData.map_right
code: /-- When a homology data `h` of a short complex `S` is such that both `h.left` and
`h.right` are preserved by a functor `F`, this is the induced homology data
`h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def HomologyData.map (h : S.HomologyData) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h.left.IsPreservedBy F] [h.right.IsPreservedBy F] :
    (S.map F).HomologyData 
goal: (h.map F).right = h.right.map F

full_name: CategoryTheory.ShortComplex.HomologyData.map
code: /-- When a homology data `h` of a short complex `S` is such that both `h.left` and
`h.right` are preserved by a functor `F`, this is the induced homology data
`h.map F` for the short complex `S.map F`. -/
@[simps]
noncomputable def HomologyData.map (h : S.HomologyData) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h.left.IsPreservedBy F] [h.right.IsPreservedBy F] :
    (S.map F).HomologyData 
goal: (S.map F).HomologyData

full_name: CategoryTheory.ShortComplex.HomologyMapData.map
code: /-- Given a homology map data `ψ : HomologyMapData φ h₁ h₂` such that
`h₁.left`, `h₁.right`, `h₂.left` and `h₂.right` are all preserved by a functor `F`, this is
the induced homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def HomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.HomologyData} {h₂ : S₂.HomologyData}
    (ψ : HomologyMapData φ h₁ h₂) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h₁.left.IsPreservedBy F] [h₁.right.IsPreservedBy F]
    [h₂.left.IsPreservedBy F] [h₂.right.IsPreservedBy F] :
    HomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: CategoryTheory.ShortComplex.HomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F)

full_name: CategoryTheory.ShortComplex.HomologyMapData.map_right
code: /-- Given a homology map data `ψ : HomologyMapData φ h₁ h₂` such that
`h₁.left`, `h₁.right`, `h₂.left` and `h₂.right` are all preserved by a functor `F`, this is
the induced homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def HomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.HomologyData} {h₂ : S₂.HomologyData}
    (ψ : HomologyMapData φ h₁ h₂) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h₁.left.IsPreservedBy F] [h₁.right.IsPreservedBy F]
    [h₂.left.IsPreservedBy F] [h₂.right.IsPreservedBy F] :
    HomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: (ψ.map F).right = ψ.right.map F

full_name: CategoryTheory.ShortComplex.HomologyMapData.map_left
code: /-- Given a homology map data `ψ : HomologyMapData φ h₁ h₂` such that
`h₁.left`, `h₁.right`, `h₂.left` and `h₂.right` are all preserved by a functor `F`, this is
the induced homology map data for the morphism `F.mapShortComplex.map φ`. -/
@[simps]
def HomologyMapData.map {φ : S₁ ⟶ S₂} {h₁ : S₁.HomologyData} {h₂ : S₂.HomologyData}
    (ψ : HomologyMapData φ h₁ h₂) (F : C ⥤ D) [F.PreservesZeroMorphisms]
    [h₁.left.IsPreservedBy F] [h₁.right.IsPreservedBy F]
    [h₂.left.IsPreservedBy F] [h₂.right.IsPreservedBy F] :
    HomologyMapData (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: (ψ.map F).left = ψ.left.map F

full_name: CategoryTheory.Functor.PreservesLeftHomologyOf
code: /-- A functor preserves the left homology of a short complex `S` if it preserves all the
left homology data of `S`. -/
class PreservesLeftHomologyOf where
  /-- the functor preserves all the left homology data of the short complex -/
  isPreservedBy : ∀ (h : S.LeftHomologyData), h.IsPreservedBy F
goal: Type (max (max (max u_1 u_2) u_3) u_4)

full_name: CategoryTheory.Functor.PreservesLeftHomologyOf.isPreservedBy
code: /-- A functor preserves the left homology of a short complex `S` if it preserves all the
left homology data of `S`. -/
class PreservesLeftHomologyOf where
  /-- the functor preserves all the left homology data of the short complex -/
  isPreservedBy : ∀ (h : S.LeftHomologyData), h.IsPreservedBy F
goal: h.IsPreservedBy F

full_name: CategoryTheory.Functor.PreservesRightHomologyOf.isPreservedBy
code: /-- A functor preserves the right homology of a short complex `S` if it preserves all the
right homology data of `S`. -/
class PreservesRightHomologyOf where
  /-- the functor preserves all the right homology data of the short complex -/
  isPreservedBy : ∀ (h : S.RightHomologyData), h.IsPreservedBy F
goal: h.IsPreservedBy F

full_name: CategoryTheory.Functor.PreservesRightHomologyOf
code: /-- A functor preserves the right homology of a short complex `S` if it preserves all the
right homology data of `S`. -/
class PreservesRightHomologyOf where
  /-- the functor preserves all the right homology data of the short complex -/
  isPreservedBy : ∀ (h : S.RightHomologyData), h.IsPreservedBy F
goal: Type (max (max (max u_1 u_2) u_3) u_4)

full_name: CategoryTheory.Functor.PreservesHomology.preservesLeftHomologyOf
code: noncomputable instance PreservesHomology.preservesLeftHomologyOf [F.PreservesHomology] :
    F.PreservesLeftHomologyOf S 
goal: F.PreservesLeftHomologyOf S

full_name: CategoryTheory.Functor.PreservesHomology.preservesRightHomologyOf
code: noncomputable instance PreservesHomology.preservesRightHomologyOf [F.PreservesHomology] :
    F.PreservesRightHomologyOf S 
goal: F.PreservesRightHomologyOf S

full_name: CategoryTheory.Functor.PreservesLeftHomologyOf.mk'
code: /-- If a functor preserves a certain left homology data of a short complex `S`, then it
preserves the left homology of `S`. -/
def PreservesLeftHomologyOf.mk' (h : S.LeftHomologyData) [h.IsPreservedBy F] :
    F.PreservesLeftHomologyOf S 
goal: F.PreservesLeftHomologyOf S

full_name: CategoryTheory.Functor.PreservesRightHomologyOf.mk'
code: /-- If a functor preserves a certain right homology data of a short complex `S`, then it
preserves the right homology of `S`. -/
def PreservesRightHomologyOf.mk' (h : S.RightHomologyData) [h.IsPreservedBy F] :
    F.PreservesRightHomologyOf S 
goal: F.PreservesRightHomologyOf S

full_name: CategoryTheory.ShortComplex.LeftHomologyData.isPreservedByOfPreserves
code: instance LeftHomologyData.isPreservedByOfPreserves [F.PreservesLeftHomologyOf S] :
    h₁.IsPreservedBy F 
goal: h₁.IsPreservedBy F

full_name: CategoryTheory.ShortComplex.RightHomologyData.isPreservedByOfPreserves
code: instance RightHomologyData.isPreservedByOfPreserves [F.PreservesRightHomologyOf S] :
    h₂.IsPreservedBy F 
goal: h₂.IsPreservedBy F

full_name: CategoryTheory.ShortComplex.hasLeftHomology_of_preserves
code: instance hasLeftHomology_of_preserves [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (S.map F).HasLeftHomology 
goal: (S.map F).HasLeftHomology

full_name: CategoryTheory.ShortComplex.hasLeftHomology_of_preserves'
code: instance hasLeftHomology_of_preserves' [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (F.mapShortComplex.obj S).HasLeftHomology 
goal: (F.mapShortComplex.obj S).HasLeftHomology

full_name: CategoryTheory.ShortComplex.hasRightHomology_of_preserves
code: instance hasRightHomology_of_preserves [S.HasRightHomology] [F.PreservesRightHomologyOf S] :
    (S.map F).HasRightHomology 
goal: (S.map F).HasRightHomology

full_name: CategoryTheory.ShortComplex.hasRightHomology_of_preserves'
code: instance hasRightHomology_of_preserves' [S.HasRightHomology] [F.PreservesRightHomologyOf S] :
    (F.mapShortComplex.obj S).HasRightHomology 
goal: (F.mapShortComplex.obj S).HasRightHomology

full_name: CategoryTheory.ShortComplex.hasHomology_of_preserves
code: instance hasHomology_of_preserves [S.HasHomology] [F.PreservesLeftHomologyOf S]
    [F.PreservesRightHomologyOf S] :
    (S.map F).HasHomology 
goal: (S.map F).HasHomology

full_name: CategoryTheory.ShortComplex.hasHomology_of_preserves'
code: instance hasHomology_of_preserves' [S.HasHomology] [F.PreservesLeftHomologyOf S]
    [F.PreservesRightHomologyOf S] :
    (F.mapShortComplex.obj S).HasHomology 
goal: (F.mapShortComplex.obj S).HasHomology

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_cyclesMap'
code: lemma map_cyclesMap' : F.map (ShortComplex.cyclesMap' φ hl₁ hl₂) =
    ShortComplex.cyclesMap' (F.mapShortComplex.map φ) (hl₁.map F) (hl₂.map F) 
goal: F.map (CategoryTheory.ShortComplex.cyclesMap' φ hl₁ hl₂) =
  CategoryTheory.ShortComplex.cyclesMap' (F.mapShortComplex.map φ) (hl₁.map F) (hl₂.map F)

full_name: CategoryTheory.ShortComplex.LeftHomologyData.map_leftHomologyMap'
code: lemma map_leftHomologyMap' : F.map (ShortComplex.leftHomologyMap' φ hl₁ hl₂) =
    ShortComplex.leftHomologyMap' (F.mapShortComplex.map φ) (hl₁.map F) (hl₂.map F) 
goal: F.map (CategoryTheory.ShortComplex.leftHomologyMap' φ hl₁ hl₂) =
  CategoryTheory.ShortComplex.leftHomologyMap' (F.mapShortComplex.map φ) (hl₁.map F) (hl₂.map F)

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_opcyclesMap'
code: lemma map_opcyclesMap' : F.map (ShortComplex.opcyclesMap' φ hr₁ hr₂) =
    ShortComplex.opcyclesMap' (F.mapShortComplex.map φ) (hr₁.map F) (hr₂.map F) 
goal: F.map (CategoryTheory.ShortComplex.opcyclesMap' φ hr₁ hr₂) =
  CategoryTheory.ShortComplex.opcyclesMap' (F.mapShortComplex.map φ) (hr₁.map F) (hr₂.map F)

full_name: CategoryTheory.ShortComplex.RightHomologyData.map_rightHomologyMap'
code: lemma map_rightHomologyMap' : F.map (ShortComplex.rightHomologyMap' φ hr₁ hr₂) =
    ShortComplex.rightHomologyMap' (F.mapShortComplex.map φ) (hr₁.map F) (hr₂.map F) 
goal: F.map (CategoryTheory.ShortComplex.rightHomologyMap' φ hr₁ hr₂) =
  CategoryTheory.ShortComplex.rightHomologyMap' (F.mapShortComplex.map φ) (hr₁.map F) (hr₂.map F)

full_name: CategoryTheory.ShortComplex.HomologyData.map_homologyMap'
code: lemma HomologyData.map_homologyMap'
    [h₁.left.IsPreservedBy F] [h₁.right.IsPreservedBy F]
    [h₂.left.IsPreservedBy F] [h₂.right.IsPreservedBy F] :
    F.map (ShortComplex.homologyMap' φ h₁ h₂) =
      ShortComplex.homologyMap' (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F) 
goal: F.map (CategoryTheory.ShortComplex.homologyMap' φ h₁ h₂) =
  CategoryTheory.ShortComplex.homologyMap' (F.mapShortComplex.map φ) (h₁.map F) (h₂.map F)

full_name: CategoryTheory.ShortComplex.mapCyclesIso
code: /-- When a functor `F` preserves the left homology of a short complex `S`, this is the
canonical isomorphism `(S.map F).cycles ≅ F.obj S.cycles`. -/
noncomputable def mapCyclesIso [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (S.map F).cycles ≅ F.obj S.cycles 
goal: (S.map F).cycles ≅ F.obj S.cycles

full_name: CategoryTheory.ShortComplex.mapCyclesIso_hom_iCycles
code: @[reassoc (attr := simp)]
lemma mapCyclesIso_hom_iCycles [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (S.mapCyclesIso F).hom ≫ F.map S.iCycles = (S.map F).iCycles 
goal: CategoryTheory.CategoryStruct.comp (S.mapCyclesIso F).hom (F.map S.iCycles) = (S.map F).iCycles

full_name: CategoryTheory.ShortComplex.mapLeftHomologyIso
code: /-- When a functor `F` preserves the left homology of a short complex `S`, this is the
canonical isomorphism `(S.map F).leftHomology ≅ F.obj S.leftHomology`. -/
noncomputable def mapLeftHomologyIso [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (S.map F).leftHomology ≅ F.obj S.leftHomology 
goal: (S.map F).leftHomology ≅ F.obj S.leftHomology

full_name: CategoryTheory.ShortComplex.mapOpcyclesIso
code: /-- When a functor `F` preserves the right homology of a short complex `S`, this is the
canonical isomorphism `(S.map F).opcycles ≅ F.obj S.opcycles`. -/
noncomputable def mapOpcyclesIso [S.HasRightHomology] [F.PreservesRightHomologyOf S] :
    (S.map F).opcycles ≅ F.obj S.opcycles 
goal: (S.map F).opcycles ≅ F.obj S.opcycles

full_name: CategoryTheory.ShortComplex.mapRightHomologyIso
code: /-- When a functor `F` preserves the right homology of a short complex `S`, this is the
canonical isomorphism `(S.map F).rightHomology ≅ F.obj S.rightHomology`. -/
noncomputable def mapRightHomologyIso [S.HasRightHomology] [F.PreservesRightHomologyOf S] :
    (S.map F).rightHomology ≅ F.obj S.rightHomology 
goal: (S.map F).rightHomology ≅ F.obj S.rightHomology

full_name: CategoryTheory.ShortComplex.mapHomologyIso
code: /-- When a functor `F` preserves the left homology of a short complex `S`, this is the
canonical isomorphism `(S.map F).homology ≅ F.obj S.homology`. -/
noncomputable def mapHomologyIso [S.HasHomology] [(S.map F).HasHomology]
    [F.PreservesLeftHomologyOf S] :
    (S.map F).homology ≅ F.obj S.homology 
goal: (S.map F).homology ≅ F.obj S.homology

full_name: CategoryTheory.ShortComplex.mapHomologyIso'
code: /-- When a functor `F` preserves the right homology of a short complex `S`, this is the
canonical isomorphism `(S.map F).homology ≅ F.obj S.homology`. -/
noncomputable def mapHomologyIso' [S.HasHomology] [(S.map F).HasHomology]
    [F.PreservesRightHomologyOf S] :
    (S.map F).homology ≅ F.obj S.homology 
goal: (S.map F).homology ≅ F.obj S.homology

full_name: CategoryTheory.ShortComplex.LeftHomologyData.mapCyclesIso_eq
code: lemma LeftHomologyData.mapCyclesIso_eq [S.HasLeftHomology]
    [F.PreservesLeftHomologyOf S] :
    S.mapCyclesIso F = (hl.map F).cyclesIso ≪≫ F.mapIso hl.cyclesIso.symm 
goal: S.mapCyclesIso F = (hl.map F).cyclesIso ≪≫ F.mapIso hl.cyclesIso.symm

full_name: CategoryTheory.ShortComplex.LeftHomologyData.mapLeftHomologyIso_eq
code: lemma LeftHomologyData.mapLeftHomologyIso_eq [S.HasLeftHomology]
    [F.PreservesLeftHomologyOf S] :
    S.mapLeftHomologyIso F = (hl.map F).leftHomologyIso ≪≫ F.mapIso hl.leftHomologyIso.symm 
goal: S.mapLeftHomologyIso F = (hl.map F).leftHomologyIso ≪≫ F.mapIso hl.leftHomologyIso.symm

full_name: CategoryTheory.ShortComplex.RightHomologyData.mapOpcyclesIso_eq
code: lemma RightHomologyData.mapOpcyclesIso_eq [S.HasRightHomology]
    [F.PreservesRightHomologyOf S] :
    S.mapOpcyclesIso F = (hr.map F).opcyclesIso ≪≫ F.mapIso hr.opcyclesIso.symm 
goal: S.mapOpcyclesIso F = (hr.map F).opcyclesIso ≪≫ F.mapIso hr.opcyclesIso.symm

full_name: CategoryTheory.ShortComplex.RightHomologyData.mapRightHomologyIso_eq
code: lemma RightHomologyData.mapRightHomologyIso_eq [S.HasRightHomology]
    [F.PreservesRightHomologyOf S] :
    S.mapRightHomologyIso F = (hr.map F).rightHomologyIso ≪≫
      F.mapIso hr.rightHomologyIso.symm 
goal: S.mapRightHomologyIso F = (hr.map F).rightHomologyIso ≪≫ F.mapIso hr.rightHomologyIso.symm

full_name: CategoryTheory.ShortComplex.LeftHomologyData.mapHomologyIso_eq
code: lemma LeftHomologyData.mapHomologyIso_eq [S.HasHomology]
    [(S.map F).HasHomology] [F.PreservesLeftHomologyOf S] :
    S.mapHomologyIso F = (hl.map F).homologyIso ≪≫ F.mapIso hl.homologyIso.symm 
goal: S.mapHomologyIso F = (hl.map F).homologyIso ≪≫ F.mapIso hl.homologyIso.symm

full_name: CategoryTheory.ShortComplex.RightHomologyData.mapHomologyIso'_eq
code: lemma RightHomologyData.mapHomologyIso'_eq [S.HasHomology]
    [(S.map F).HasHomology] [F.PreservesRightHomologyOf S] :
    S.mapHomologyIso' F = (hr.map F).homologyIso ≪≫ F.mapIso hr.homologyIso.symm 
goal: S.mapHomologyIso' F = (hr.map F).homologyIso ≪≫ F.mapIso hr.homologyIso.symm

full_name: CategoryTheory.ShortComplex.mapCyclesIso_hom_naturality
code: @[reassoc]
lemma mapCyclesIso_hom_naturality [S₁.HasLeftHomology] [S₂.HasLeftHomology]
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂] :
    cyclesMap (F.mapShortComplex.map φ) ≫ (S₂.mapCyclesIso F).hom =
      (S₁.mapCyclesIso F).hom ≫ F.map (cyclesMap φ) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.cyclesMap (F.mapShortComplex.map φ))
    (S₂.mapCyclesIso F).hom =
  CategoryTheory.CategoryStruct.comp (S₁.mapCyclesIso F).hom (F.map (CategoryTheory.ShortComplex.cyclesMap φ))

full_name: CategoryTheory.ShortComplex.mapCyclesIso_inv_naturality
code: @[reassoc]
lemma mapCyclesIso_inv_naturality [S₁.HasLeftHomology] [S₂.HasLeftHomology]
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂] :
    F.map (cyclesMap φ) ≫ (S₂.mapCyclesIso F).inv =
      (S₁.mapCyclesIso F).inv ≫ cyclesMap (F.mapShortComplex.map φ) 
goal: CategoryTheory.CategoryStruct.comp (F.map (CategoryTheory.ShortComplex.cyclesMap φ)) (S₂.mapCyclesIso F).inv =
  CategoryTheory.CategoryStruct.comp (S₁.mapCyclesIso F).inv
    (CategoryTheory.ShortComplex.cyclesMap (F.mapShortComplex.map φ))

full_name: CategoryTheory.ShortComplex.mapLeftHomologyIso_hom_naturality
code: @[reassoc]
lemma mapLeftHomologyIso_hom_naturality [S₁.HasLeftHomology] [S₂.HasLeftHomology]
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂] :
    leftHomologyMap (F.mapShortComplex.map φ) ≫ (S₂.mapLeftHomologyIso F).hom =
      (S₁.mapLeftHomologyIso F).hom ≫ F.map (leftHomologyMap φ) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.leftHomologyMap (F.mapShortComplex.map φ))
    (S₂.mapLeftHomologyIso F).hom =
  CategoryTheory.CategoryStruct.comp (S₁.mapLeftHomologyIso F).hom
    (F.map (CategoryTheory.ShortComplex.leftHomologyMap φ))

full_name: CategoryTheory.ShortComplex.mapLeftHomologyIso_inv_naturality
code: @[reassoc]
lemma mapLeftHomologyIso_inv_naturality [S₁.HasLeftHomology] [S₂.HasLeftHomology]
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂] :
    F.map (leftHomologyMap φ) ≫ (S₂.mapLeftHomologyIso F).inv =
      (S₁.mapLeftHomologyIso F).inv ≫ leftHomologyMap (F.mapShortComplex.map φ) 
goal: CategoryTheory.CategoryStruct.comp (F.map (CategoryTheory.ShortComplex.leftHomologyMap φ))
    (S₂.mapLeftHomologyIso F).inv =
  CategoryTheory.CategoryStruct.comp (S₁.mapLeftHomologyIso F).inv
    (CategoryTheory.ShortComplex.leftHomologyMap (F.mapShortComplex.map φ))

full_name: CategoryTheory.ShortComplex.mapOpcyclesIso_hom_naturality
code: @[reassoc]
lemma mapOpcyclesIso_hom_naturality [S₁.HasRightHomology] [S₂.HasRightHomology]
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂] :
    opcyclesMap (F.mapShortComplex.map φ) ≫ (S₂.mapOpcyclesIso F).hom =
      (S₁.mapOpcyclesIso F).hom ≫ F.map (opcyclesMap φ) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.opcyclesMap (F.mapShortComplex.map φ))
    (S₂.mapOpcyclesIso F).hom =
  CategoryTheory.CategoryStruct.comp (S₁.mapOpcyclesIso F).hom (F.map (CategoryTheory.ShortComplex.opcyclesMap φ))

full_name: CategoryTheory.ShortComplex.mapOpcyclesIso_inv_naturality
code: @[reassoc]
lemma mapOpcyclesIso_inv_naturality [S₁.HasRightHomology] [S₂.HasRightHomology]
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂] :
    F.map (opcyclesMap φ) ≫ (S₂.mapOpcyclesIso F).inv =
      (S₁.mapOpcyclesIso F).inv ≫ opcyclesMap (F.mapShortComplex.map φ) 
goal: CategoryTheory.CategoryStruct.comp (F.map (CategoryTheory.ShortComplex.opcyclesMap φ)) (S₂.mapOpcyclesIso F).inv =
  CategoryTheory.CategoryStruct.comp (S₁.mapOpcyclesIso F).inv
    (CategoryTheory.ShortComplex.opcyclesMap (F.mapShortComplex.map φ))

full_name: CategoryTheory.ShortComplex.mapRightHomologyIso_hom_naturality
code: @[reassoc]
lemma mapRightHomologyIso_hom_naturality [S₁.HasRightHomology] [S₂.HasRightHomology]
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂] :
    rightHomologyMap (F.mapShortComplex.map φ) ≫ (S₂.mapRightHomologyIso F).hom =
      (S₁.mapRightHomologyIso F).hom ≫ F.map (rightHomologyMap φ) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.rightHomologyMap (F.mapShortComplex.map φ))
    (S₂.mapRightHomologyIso F).hom =
  CategoryTheory.CategoryStruct.comp (S₁.mapRightHomologyIso F).hom
    (F.map (CategoryTheory.ShortComplex.rightHomologyMap φ))

full_name: CategoryTheory.ShortComplex.mapRightHomologyIso_inv_naturality
code: @[reassoc]
lemma mapRightHomologyIso_inv_naturality [S₁.HasRightHomology] [S₂.HasRightHomology]
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂] :
    F.map (rightHomologyMap φ) ≫ (S₂.mapRightHomologyIso F).inv =
      (S₁.mapRightHomologyIso F).inv ≫ rightHomologyMap (F.mapShortComplex.map φ) 
goal: CategoryTheory.CategoryStruct.comp (F.map (CategoryTheory.ShortComplex.rightHomologyMap φ))
    (S₂.mapRightHomologyIso F).inv =
  CategoryTheory.CategoryStruct.comp (S₁.mapRightHomologyIso F).inv
    (CategoryTheory.ShortComplex.rightHomologyMap (F.mapShortComplex.map φ))

full_name: CategoryTheory.ShortComplex.mapHomologyIso_hom_naturality
code: @[reassoc]
lemma mapHomologyIso_hom_naturality [S₁.HasHomology] [S₂.HasHomology]
    [(S₁.map F).HasHomology] [(S₂.map F).HasHomology]
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂] :
    @homologyMap _ _ _ (S₁.map F) (S₂.map F) (F.mapShortComplex.map φ) _ _ ≫
      (S₂.mapHomologyIso F).hom = (S₁.mapHomologyIso F).hom ≫ F.map (homologyMap φ) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.homologyMap (F.mapShortComplex.map φ))
    (S₂.mapHomologyIso F).hom =
  CategoryTheory.CategoryStruct.comp (S₁.mapHomologyIso F).hom (F.map (CategoryTheory.ShortComplex.homologyMap φ))

full_name: CategoryTheory.ShortComplex.mapHomologyIso_inv_naturality
code: @[reassoc]
lemma mapHomologyIso_inv_naturality [S₁.HasHomology] [S₂.HasHomology]
    [(S₁.map F).HasHomology] [(S₂.map F).HasHomology]
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂] :
    F.map (homologyMap φ) ≫ (S₂.mapHomologyIso F).inv =
      (S₁.mapHomologyIso F).inv ≫
      @homologyMap _ _ _ (S₁.map F) (S₂.map F) (F.mapShortComplex.map φ) _ _ 
goal: CategoryTheory.CategoryStruct.comp (F.map (CategoryTheory.ShortComplex.homologyMap φ)) (S₂.mapHomologyIso F).inv =
  CategoryTheory.CategoryStruct.comp (S₁.mapHomologyIso F).inv
    (CategoryTheory.ShortComplex.homologyMap (F.mapShortComplex.map φ))

full_name: CategoryTheory.ShortComplex.mapHomologyIso'_hom_naturality
code: @[reassoc]
lemma mapHomologyIso'_hom_naturality [S₁.HasHomology] [S₂.HasHomology]
    [(S₁.map F).HasHomology] [(S₂.map F).HasHomology]
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂] :
    @homologyMap _ _ _ (S₁.map F) (S₂.map F) (F.mapShortComplex.map φ) _ _ ≫
      (S₂.mapHomologyIso' F).hom = (S₁.mapHomologyIso' F).hom ≫ F.map (homologyMap φ) 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.homologyMap (F.mapShortComplex.map φ))
    (S₂.mapHomologyIso' F).hom =
  CategoryTheory.CategoryStruct.comp (S₁.mapHomologyIso' F).hom (F.map (CategoryTheory.ShortComplex.homologyMap φ))

full_name: CategoryTheory.ShortComplex.mapHomologyIso'_inv_naturality
code: @[reassoc]
lemma mapHomologyIso'_inv_naturality [S₁.HasHomology] [S₂.HasHomology]
    [(S₁.map F).HasHomology] [(S₂.map F).HasHomology]
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂] :
    F.map (homologyMap φ) ≫ (S₂.mapHomologyIso' F).inv = (S₁.mapHomologyIso' F).inv ≫
      @homologyMap _ _ _ (S₁.map F) (S₂.map F) (F.mapShortComplex.map φ) _ _ 
goal: CategoryTheory.CategoryStruct.comp (F.map (CategoryTheory.ShortComplex.homologyMap φ)) (S₂.mapHomologyIso' F).inv =
  CategoryTheory.CategoryStruct.comp (S₁.mapHomologyIso' F).inv
    (CategoryTheory.ShortComplex.homologyMap (F.mapShortComplex.map φ))

full_name: CategoryTheory.ShortComplex.mapHomologyIso'_eq_mapHomologyIso
code: lemma mapHomologyIso'_eq_mapHomologyIso [S.HasHomology] [F.PreservesLeftHomologyOf S]
    [F.PreservesRightHomologyOf S] :
    S.mapHomologyIso' F = S.mapHomologyIso F 
goal: S.mapHomologyIso' F = S.mapHomologyIso F

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.natTransApp_φH
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the left homology of a short complex `S`, and a left homology data for `S`,
this is the left homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def LeftHomologyMapData.natTransApp (h : LeftHomologyData S) (τ : F ⟶ G) :
    LeftHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.natTransApp h τ).φH = τ.app h.H

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.natTransApp_φK
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the left homology of a short complex `S`, and a left homology data for `S`,
this is the left homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def LeftHomologyMapData.natTransApp (h : LeftHomologyData S) (τ : F ⟶ G) :
    LeftHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: (CategoryTheory.ShortComplex.LeftHomologyMapData.natTransApp h τ).φK = τ.app h.K

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.natTransApp
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the left homology of a short complex `S`, and a left homology data for `S`,
this is the left homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def LeftHomologyMapData.natTransApp (h : LeftHomologyData S) (τ : F ⟶ G) :
    LeftHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: CategoryTheory.ShortComplex.LeftHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G)

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.natTransApp_φH
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the right homology of a short complex `S`, and a right homology data for `S`,
this is the right homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def RightHomologyMapData.natTransApp (h : RightHomologyData S) (τ : F ⟶ G) :
    RightHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: (CategoryTheory.ShortComplex.RightHomologyMapData.natTransApp h τ).φH = τ.app h.H

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.natTransApp_φQ
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the right homology of a short complex `S`, and a right homology data for `S`,
this is the right homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def RightHomologyMapData.natTransApp (h : RightHomologyData S) (τ : F ⟶ G) :
    RightHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: (CategoryTheory.ShortComplex.RightHomologyMapData.natTransApp h τ).φQ = τ.app h.Q

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.natTransApp
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the right homology of a short complex `S`, and a right homology data for `S`,
this is the right homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def RightHomologyMapData.natTransApp (h : RightHomologyData S) (τ : F ⟶ G) :
    RightHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: CategoryTheory.ShortComplex.RightHomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G)

full_name: CategoryTheory.ShortComplex.HomologyMapData.natTransApp_right
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the homology of a short complex `S`, and a homology data for `S`,
this is the homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def HomologyMapData.natTransApp (h : HomologyData S) (τ : F ⟶ G) :
    HomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: (CategoryTheory.ShortComplex.HomologyMapData.natTransApp h τ).right =
  CategoryTheory.ShortComplex.RightHomologyMapData.natTransApp h.right τ

full_name: CategoryTheory.ShortComplex.HomologyMapData.natTransApp
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the homology of a short complex `S`, and a homology data for `S`,
this is the homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def HomologyMapData.natTransApp (h : HomologyData S) (τ : F ⟶ G) :
    HomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: CategoryTheory.ShortComplex.HomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G)

full_name: CategoryTheory.ShortComplex.HomologyMapData.natTransApp_left
code: /-- Given a natural transformation `τ : F ⟶ G` between functors `C ⥤ D` which preserve
the homology of a short complex `S`, and a homology data for `S`,
this is the homology map data for the morphism `S.mapNatTrans τ`
obtained by evaluating `τ`. -/
@[simps]
def HomologyMapData.natTransApp (h : HomologyData S) (τ : F ⟶ G) :
    HomologyMapData (S.mapNatTrans τ) (h.map F) (h.map G) 
goal: (CategoryTheory.ShortComplex.HomologyMapData.natTransApp h τ).left =
  CategoryTheory.ShortComplex.LeftHomologyMapData.natTransApp h.left τ

full_name: CategoryTheory.ShortComplex.homologyMap_mapNatTrans
code: lemma homologyMap_mapNatTrans [S.HasHomology] (τ : F ⟶ G) :
    homologyMap (S.mapNatTrans τ) =
      (S.mapHomologyIso F).hom ≫ τ.app S.homology ≫ (S.mapHomologyIso G).inv 
goal: CategoryTheory.ShortComplex.homologyMap (S.mapNatTrans τ) =
  CategoryTheory.CategoryStruct.comp (S.mapHomologyIso F).hom
    (CategoryTheory.CategoryStruct.comp (τ.app S.homology) (S.mapHomologyIso G).inv)

full_name: CategoryTheory.ShortComplex.cyclesFunctorIso
code: /-- The natural isomorphism
`F.mapShortComplex ⋙ cyclesFunctor D ≅ cyclesFunctor C ⋙ F`
for a functor `F : C ⥤ D` which preserves homology. --/
noncomputable def cyclesFunctorIso [F.PreservesHomology] :
    F.mapShortComplex ⋙ ShortComplex.cyclesFunctor D ≅
      ShortComplex.cyclesFunctor C ⋙ F 
goal: F.mapShortComplex.comp (CategoryTheory.ShortComplex.cyclesFunctor D) ≅
  (CategoryTheory.ShortComplex.cyclesFunctor C).comp F

full_name: CategoryTheory.ShortComplex.leftHomologyFunctorIso
code: /-- The natural isomorphism
`F.mapShortComplex ⋙ leftHomologyFunctor D ≅ leftHomologyFunctor C ⋙ F`
for a functor `F : C ⥤ D` which preserves homology. --/
noncomputable def leftHomologyFunctorIso [F.PreservesHomology] :
    F.mapShortComplex ⋙ ShortComplex.leftHomologyFunctor D ≅
      ShortComplex.leftHomologyFunctor C ⋙ F 
goal: F.mapShortComplex.comp (CategoryTheory.ShortComplex.leftHomologyFunctor D) ≅
  (CategoryTheory.ShortComplex.leftHomologyFunctor C).comp F

full_name: CategoryTheory.ShortComplex.opcyclesFunctorIso
code: /-- The natural isomorphism
`F.mapShortComplex ⋙ opcyclesFunctor D ≅ opcyclesFunctor C ⋙ F`
for a functor `F : C ⥤ D` which preserves homology. --/
noncomputable def opcyclesFunctorIso [F.PreservesHomology] :
    F.mapShortComplex ⋙ ShortComplex.opcyclesFunctor D ≅
      ShortComplex.opcyclesFunctor C ⋙ F 
goal: F.mapShortComplex.comp (CategoryTheory.ShortComplex.opcyclesFunctor D) ≅
  (CategoryTheory.ShortComplex.opcyclesFunctor C).comp F

full_name: CategoryTheory.ShortComplex.rightHomologyFunctorIso
code: /-- The natural isomorphism
`F.mapShortComplex ⋙ rightHomologyFunctor D ≅ rightHomologyFunctor C ⋙ F`
for a functor `F : C ⥤ D` which preserves homology. --/
noncomputable def rightHomologyFunctorIso [F.PreservesHomology] :
    F.mapShortComplex ⋙ ShortComplex.rightHomologyFunctor D ≅
      ShortComplex.rightHomologyFunctor C ⋙ F 
goal: F.mapShortComplex.comp (CategoryTheory.ShortComplex.rightHomologyFunctor D) ≅
  (CategoryTheory.ShortComplex.rightHomologyFunctor C).comp F

full_name: CategoryTheory.ShortComplex.homologyFunctorIso
code: /-- The natural isomorphism
`F.mapShortComplex ⋙ homologyFunctor D ≅ homologyFunctor C ⋙ F`
for a functor `F : C ⥤ D` which preserves homology. --/
noncomputable def homologyFunctorIso
    [CategoryWithHomology C] [CategoryWithHomology D] [F.PreservesHomology] :
    F.mapShortComplex ⋙ ShortComplex.homologyFunctor D ≅
      ShortComplex.homologyFunctor C ⋙ F 
goal: F.mapShortComplex.comp (CategoryTheory.ShortComplex.homologyFunctor D) ≅
  (CategoryTheory.ShortComplex.homologyFunctor C).comp F

full_name: CategoryTheory.ShortComplex.LeftHomologyMapData.quasiIso_map_iff
code: lemma LeftHomologyMapData.quasiIso_map_iff
    [(F.mapShortComplex.obj S₁).HasHomology]
    [(F.mapShortComplex.obj S₂).HasHomology]
    [hl₁.IsPreservedBy F] [hl₂.IsPreservedBy F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ IsIso (F.map ψl.φH) 
goal: CategoryTheory.ShortComplex.QuasiIso (F.mapShortComplex.map φ) ↔ CategoryTheory.IsIso (F.map ψl.φH)

full_name: CategoryTheory.ShortComplex.RightHomologyMapData.quasiIso_map_iff
code: lemma RightHomologyMapData.quasiIso_map_iff
    [(F.mapShortComplex.obj S₁).HasHomology]
    [(F.mapShortComplex.obj S₂).HasHomology]
    [hr₁.IsPreservedBy F] [hr₂.IsPreservedBy F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ IsIso (F.map ψr.φH) 
goal: CategoryTheory.ShortComplex.QuasiIso (F.mapShortComplex.map φ) ↔ CategoryTheory.IsIso (F.map ψr.φH)

full_name: CategoryTheory.ShortComplex.quasiIso_map_of_preservesLeftHomology
code: instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) 
goal: CategoryTheory.ShortComplex.QuasiIso (F.mapShortComplex.map φ)

full_name: CategoryTheory.ShortComplex.quasiIso_map_iff_of_preservesLeftHomology
code: lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [F.ReflectsIsomorphisms] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ 
goal: CategoryTheory.ShortComplex.QuasiIso (F.mapShortComplex.map φ) ↔ CategoryTheory.ShortComplex.QuasiIso φ

full_name: CategoryTheory.ShortComplex.quasiIso_map_of_preservesRightHomology
code: instance quasiIso_map_of_preservesRightHomology
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) 
goal: CategoryTheory.ShortComplex.QuasiIso (F.mapShortComplex.map φ)

full_name: CategoryTheory.ShortComplex.quasiIso_map_iff_of_preservesRightHomology
code: lemma quasiIso_map_iff_of_preservesRightHomology
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂]
    [F.ReflectsIsomorphisms] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ 
goal: CategoryTheory.ShortComplex.QuasiIso (F.mapShortComplex.map φ) ↔ CategoryTheory.ShortComplex.QuasiIso φ

full_name: CategoryTheory.Functor.preservesLeftHomologyOfZerof
code: /-- If a short complex `S` is such that `S.f = 0` and that the kernel of `S.g` is preserved
by a functor `F`, then `F` preserves the left homology of `S`. -/
noncomputable def preservesLeftHomologyOfZerof (hf : S.f = 0)
    [PreservesLimit (parallelPair S.g 0) F] :
    F.PreservesLeftHomologyOf S 
goal: F.PreservesLeftHomologyOf S

full_name: CategoryTheory.Functor.preservesRightHomologyOfZerog
code: /-- If a short complex `S` is such that `S.g = 0` and that the cokernel of `S.f` is preserved
by a functor `F`, then `F` preserves the right homology of `S`. -/
noncomputable def preservesRightHomologyOfZerog (hg : S.g = 0)
    [PreservesColimit (parallelPair S.f 0) F] :
    F.PreservesRightHomologyOf S 
goal: F.PreservesRightHomologyOf S

full_name: CategoryTheory.Functor.preservesLeftHomologyOfZerog
code: /-- If a short complex `S` is such that `S.g = 0` and that the cokernel of `S.f` is preserved
by a functor `F`, then `F` preserves the left homology of `S`. -/
noncomputable def preservesLeftHomologyOfZerog (hg : S.g = 0)
    [PreservesColimit (parallelPair S.f 0) F] :
    F.PreservesLeftHomologyOf S 
goal: F.PreservesLeftHomologyOf S

full_name: CategoryTheory.Functor.preservesRightHomologyOfZerof
code: /-- If a short complex `S` is such that `S.f = 0` and that the kernel of `S.g` is preserved
by a functor `F`, then `F` preserves the right homology of `S`. -/
noncomputable def preservesRightHomologyOfZerof (hf : S.f = 0)
    [PreservesLimit (parallelPair S.g 0) F] :
    F.PreservesRightHomologyOf S 
goal: F.PreservesRightHomologyOf S

full_name: CategoryTheory.NatTrans.app_homology
code: lemma NatTrans.app_homology {F G : C ⥤ D} (τ : F ⟶ G)
    (S : ShortComplex C) [S.HasHomology] [F.PreservesZeroMorphisms] [G.PreservesZeroMorphisms]
    [F.PreservesLeftHomologyOf S] [G.PreservesLeftHomologyOf S] [F.PreservesRightHomologyOf S]
    [G.PreservesRightHomologyOf S] :
    τ.app S.homology = (S.mapHomologyIso F).inv ≫
      ShortComplex.homologyMap (S.mapNatTrans τ) ≫ (S.mapHomologyIso G).hom 
goal: τ.app S.homology =
  CategoryTheory.CategoryStruct.comp (S.mapHomologyIso F).inv
    (CategoryTheory.CategoryStruct.comp (CategoryTheory.ShortComplex.homologyMap (S.mapNatTrans τ))
      (S.mapHomologyIso G).hom)