l3lab/ntp-mathlib huggingface dataset:
/-- 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) where
  φQ := F.map ψ.φQ
  φH := F.map ψ.φH
  commp := by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.45906, u_1} C
inst✝⁵ : Category.{?u.45910, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : RightHomologyData S₁
h₂ : RightHomologyData S₂
ψ : RightHomologyMapData φ h₁ h₂
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : RightHomologyData.IsPreservedBy h₁ F
inst✝ : RightHomologyData.IsPreservedBy h₂ F
⊢ (RightHomologyData.map h₁ F).p ≫ F.map ψ.φQ = ((Functor.mapShortComplex F).map φ).τ₂ ≫ (RightHomologyData.map h₂ F).p

Next tactic:
simpa only [F.map_comp] using F.congr_map ψ.commp
/-- 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) where
  φQ := F.map ψ.φQ
  φH := F.map ψ.φH
  commp := by simpa only [F.map_comp] using F.congr_map ψ.commp
  commg' := by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.45906, u_1} C
inst✝⁵ : Category.{?u.45910, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : RightHomologyData S₁
h₂ : RightHomologyData S₂
ψ : RightHomologyMapData φ h₁ h₂
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : RightHomologyData.IsPreservedBy h₁ F
inst✝ : RightHomologyData.IsPreservedBy h₂ F
⊢ F.map ψ.φQ ≫ RightHomologyData.g' (RightHomologyData.map h₂ F) =
    RightHomologyData.g' (RightHomologyData.map h₁ F) ≫ ((Functor.mapShortComplex F).map φ).τ₃

Next tactic:
simpa only [RightHomologyData.map_g', F.map_comp] using F.congr_map ψ.commg'
/-- 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) where
  φQ := F.map ψ.φQ
  φH := F.map ψ.φH
  commp := by simpa only [F.map_comp] using F.congr_map ψ.commp
  commg' := by simpa only [RightHomologyData.map_g', F.map_comp] using F.congr_map ψ.commg'
  commι := by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.45906, u_1} C
inst✝⁵ : Category.{?u.45910, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : RightHomologyData S₁
h₂ : RightHomologyData S₂
ψ : RightHomologyMapData φ h₁ h₂
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : RightHomologyData.IsPreservedBy h₁ F
inst✝ : RightHomologyData.IsPreservedBy h₂ F
⊢ F.map ψ.φH ≫ (RightHomologyData.map h₂ F).ι = (RightHomologyData.map h₁ F).ι ≫ F.map ψ.φQ

Next tactic:
simpa only [F.map_comp] using F.congr_map ψ.commι
/-- 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 where
  left := h.left.map F
  right := h.right.map F
  iso := F.mapIso h.iso
  comm := by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.48592, u_1} C
inst✝⁵ : Category.{?u.48596, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : HomologyData S
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : LeftHomologyData.IsPreservedBy h.left F
inst✝ : RightHomologyData.IsPreservedBy h.right F
⊢ (LeftHomologyData.map h.left F).π ≫ (F.mapIso h.iso).hom ≫ (RightHomologyData.map h.right F).ι =
    (LeftHomologyData.map h.left F).i ≫ (RightHomologyData.map h.right F).p

Next tactic:
simpa only [F.map_comp] using F.congr_map h.comm
/-- 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 where
  isPreservedBy h' :=
    { g := ShortComplex.LeftHomologyData.IsPreservedBy.hg h F
      f' := by
        

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.57607, u_1} C
inst✝⁴ : Category.{?u.57611, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.LeftHomologyData S
inst✝ : ShortComplex.LeftHomologyData.IsPreservedBy h F
h' : ShortComplex.LeftHomologyData S
⊢ PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h') 0) F

Next tactic:
have := ShortComplex.LeftHomologyData.IsPreservedBy.hf' h F
/-- 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 where
  isPreservedBy h' :=
    { g := ShortComplex.LeftHomologyData.IsPreservedBy.hg h F
      f' := by
        have := ShortComplex.LeftHomologyData.IsPreservedBy.hf' h F
        

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.57607, u_1} C
inst✝⁴ : Category.{?u.57611, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.LeftHomologyData S
inst✝ : ShortComplex.LeftHomologyData.IsPreservedBy h F
h' : ShortComplex.LeftHomologyData S
this : PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h) 0) F
⊢ PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h') 0) F

Next tactic:
let e : parallelPair h.f' 0 ≅ parallelPair h'.f' 0 :=
          parallelPair.ext (Iso.refl _) (ShortComplex.cyclesMapIso' (Iso.refl S) h h')
            (by simp) (by simp)
/-- 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 where
  isPreservedBy h' :=
    { g := ShortComplex.LeftHomologyData.IsPreservedBy.hg h F
      f' := by
        have := ShortComplex.LeftHomologyData.IsPreservedBy.hf' h F
        let e : parallelPair h.f' 0 ≅ parallelPair h'.f' 0 :=
          parallelPair.ext (Iso.refl _) (ShortComplex.cyclesMapIso' (Iso.refl S) h h')
            (by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.57607, u_1} C
inst✝⁴ : Category.{?u.57611, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.LeftHomologyData S
inst✝ : ShortComplex.LeftHomologyData.IsPreservedBy h F
h' : ShortComplex.LeftHomologyData S
this : PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h) 0) F
⊢ (parallelPair (ShortComplex.LeftHomologyData.f' h) 0).map WalkingParallelPairHom.left ≫
      (ShortComplex.cyclesMapIso' (Iso.refl S) h h').hom =
    (Iso.refl ((parallelPair (ShortComplex.LeftHomologyData.f' h) 0).obj WalkingParallelPair.zero)).hom ≫
      (parallelPair (ShortComplex.LeftHomologyData.f' h') 0).map WalkingParallelPairHom.left

Next tactic:
simp
/-- 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 where
  isPreservedBy h' :=
    { g := ShortComplex.LeftHomologyData.IsPreservedBy.hg h F
      f' := by
        have := ShortComplex.LeftHomologyData.IsPreservedBy.hf' h F
        let e : parallelPair h.f' 0 ≅ parallelPair h'.f' 0 :=
          parallelPair.ext (Iso.refl _) (ShortComplex.cyclesMapIso' (Iso.refl S) h h')
            (by simp) (by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.57607, u_1} C
inst✝⁴ : Category.{?u.57611, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.LeftHomologyData S
inst✝ : ShortComplex.LeftHomologyData.IsPreservedBy h F
h' : ShortComplex.LeftHomologyData S
this : PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h) 0) F
⊢ (parallelPair (ShortComplex.LeftHomologyData.f' h) 0).map WalkingParallelPairHom.right ≫
      (ShortComplex.cyclesMapIso' (Iso.refl S) h h').hom =
    (Iso.refl ((parallelPair (ShortComplex.LeftHomologyData.f' h) 0).obj WalkingParallelPair.zero)).hom ≫
      (parallelPair (ShortComplex.LeftHomologyData.f' h') 0).map WalkingParallelPairHom.right

Next tactic:
simp
/-- 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 where
  isPreservedBy h' :=
    { g := ShortComplex.LeftHomologyData.IsPreservedBy.hg h F
      f' := by
        have := ShortComplex.LeftHomologyData.IsPreservedBy.hf' h F
        let e : parallelPair h.f' 0 ≅ parallelPair h'.f' 0 :=
          parallelPair.ext (Iso.refl _) (ShortComplex.cyclesMapIso' (Iso.refl S) h h')
            (by simp) (by simp)
        

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.57607, u_1} C
inst✝⁴ : Category.{?u.57611, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.LeftHomologyData S
inst✝ : ShortComplex.LeftHomologyData.IsPreservedBy h F
h' : ShortComplex.LeftHomologyData S
this : PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h) 0) F
e : parallelPair (ShortComplex.LeftHomologyData.f' h) 0 ≅ parallelPair (ShortComplex.LeftHomologyData.f' h') 0 :=
  parallelPair.ext (Iso.refl ((parallelPair (ShortComplex.LeftHomologyData.f' h) 0).obj WalkingParallelPair.zero))
    (ShortComplex.cyclesMapIso' (Iso.refl S) h h')
    (_ :
      ShortComplex.LeftHomologyData.f' h ≫ ShortComplex.cyclesMap' (𝟙 S) h h' =
        𝟙 S.X₁ ≫ ShortComplex.LeftHomologyData.f' h')
    (_ : 0 ≫ ShortComplex.cyclesMap' (𝟙 S) h h' = 𝟙 S.X₁ ≫ 0)
⊢ PreservesColimit (parallelPair (ShortComplex.LeftHomologyData.f' h') 0) F

Next tactic:
exact preservesColimitOfIsoDiagram F e
/-- 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 where
  isPreservedBy h' :=
    { f := ShortComplex.RightHomologyData.IsPreservedBy.hf h F
      g' := by
        

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.61140, u_1} C
inst✝⁴ : Category.{?u.61144, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.RightHomologyData S
inst✝ : ShortComplex.RightHomologyData.IsPreservedBy h F
h' : ShortComplex.RightHomologyData S
⊢ PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h') 0) F

Next tactic:
have := ShortComplex.RightHomologyData.IsPreservedBy.hg' h F
/-- 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 where
  isPreservedBy h' :=
    { f := ShortComplex.RightHomologyData.IsPreservedBy.hf h F
      g' := by
        have := ShortComplex.RightHomologyData.IsPreservedBy.hg' h F
        

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.61140, u_1} C
inst✝⁴ : Category.{?u.61144, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.RightHomologyData S
inst✝ : ShortComplex.RightHomologyData.IsPreservedBy h F
h' : ShortComplex.RightHomologyData S
this : PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h) 0) F
⊢ PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h') 0) F

Next tactic:
let e : parallelPair h.g' 0 ≅ parallelPair h'.g' 0 :=
          parallelPair.ext (ShortComplex.opcyclesMapIso' (Iso.refl S) h h') (Iso.refl _)
            (by simp) (by simp)
/-- 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 where
  isPreservedBy h' :=
    { f := ShortComplex.RightHomologyData.IsPreservedBy.hf h F
      g' := by
        have := ShortComplex.RightHomologyData.IsPreservedBy.hg' h F
        let e : parallelPair h.g' 0 ≅ parallelPair h'.g' 0 :=
          parallelPair.ext (ShortComplex.opcyclesMapIso' (Iso.refl S) h h') (Iso.refl _)
            (by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.61140, u_1} C
inst✝⁴ : Category.{?u.61144, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.RightHomologyData S
inst✝ : ShortComplex.RightHomologyData.IsPreservedBy h F
h' : ShortComplex.RightHomologyData S
this : PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h) 0) F
⊢ (parallelPair (ShortComplex.RightHomologyData.g' h) 0).map WalkingParallelPairHom.left ≫
      (Iso.refl ((parallelPair (ShortComplex.RightHomologyData.g' h) 0).obj WalkingParallelPair.one)).hom =
    (ShortComplex.opcyclesMapIso' (Iso.refl S) h h').hom ≫
      (parallelPair (ShortComplex.RightHomologyData.g' h') 0).map WalkingParallelPairHom.left

Next tactic:
simp
/-- 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 where
  isPreservedBy h' :=
    { f := ShortComplex.RightHomologyData.IsPreservedBy.hf h F
      g' := by
        have := ShortComplex.RightHomologyData.IsPreservedBy.hg' h F
        let e : parallelPair h.g' 0 ≅ parallelPair h'.g' 0 :=
          parallelPair.ext (ShortComplex.opcyclesMapIso' (Iso.refl S) h h') (Iso.refl _)
            (by simp) (by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.61140, u_1} C
inst✝⁴ : Category.{?u.61144, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.RightHomologyData S
inst✝ : ShortComplex.RightHomologyData.IsPreservedBy h F
h' : ShortComplex.RightHomologyData S
this : PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h) 0) F
⊢ (parallelPair (ShortComplex.RightHomologyData.g' h) 0).map WalkingParallelPairHom.right ≫
      (Iso.refl ((parallelPair (ShortComplex.RightHomologyData.g' h) 0).obj WalkingParallelPair.one)).hom =
    (ShortComplex.opcyclesMapIso' (Iso.refl S) h h').hom ≫
      (parallelPair (ShortComplex.RightHomologyData.g' h') 0).map WalkingParallelPairHom.right

Next tactic:
simp
/-- 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 where
  isPreservedBy h' :=
    { f := ShortComplex.RightHomologyData.IsPreservedBy.hf h F
      g' := by
        have := ShortComplex.RightHomologyData.IsPreservedBy.hg' h F
        let e : parallelPair h.g' 0 ≅ parallelPair h'.g' 0 :=
          parallelPair.ext (ShortComplex.opcyclesMapIso' (Iso.refl S) h h') (Iso.refl _)
            (by simp) (by simp)
        

Proof state:
C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.61140, u_1} C
inst✝⁴ : Category.{?u.61144, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
F : C ⥤ D
inst✝¹ : PreservesZeroMorphisms F
S S₁ S₂ : ShortComplex C
h : ShortComplex.RightHomologyData S
inst✝ : ShortComplex.RightHomologyData.IsPreservedBy h F
h' : ShortComplex.RightHomologyData S
this : PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h) 0) F
e : parallelPair (ShortComplex.RightHomologyData.g' h) 0 ≅ parallelPair (ShortComplex.RightHomologyData.g' h') 0 :=
  parallelPair.ext (ShortComplex.opcyclesMapIso' (Iso.refl S) h h')
    (Iso.refl ((parallelPair (ShortComplex.RightHomologyData.g' h) 0).obj WalkingParallelPair.one))
    (_ :
      ShortComplex.RightHomologyData.g' h ≫ 𝟙 S.X₃ =
        ShortComplex.opcyclesMap' (𝟙 S) h h' ≫ ShortComplex.RightHomologyData.g' h')
    (_ : 0 ≫ 𝟙 S.X₃ = ShortComplex.opcyclesMap' (𝟙 S) h h' ≫ 0)
⊢ PreservesLimit (parallelPair (ShortComplex.RightHomologyData.g' h') 0) F

Next tactic:
exact preservesLimitOfIsoDiagram F e
instance hasLeftHomology_of_preserves' [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (F.mapShortComplex.obj S).HasLeftHomology :=
  by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.67674, u_1} C
inst✝⁵ : Category.{?u.67678, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : HasLeftHomology S
inst✝ : Functor.PreservesLeftHomologyOf F S
⊢ HasLeftHomology ((Functor.mapShortComplex F).obj S)

Next tactic:
dsimp
instance hasLeftHomology_of_preserves' [S.HasLeftHomology] [F.PreservesLeftHomologyOf S] :
    (F.mapShortComplex.obj S).HasLeftHomology :=
  by dsimp; 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.67674, u_1} C
inst✝⁵ : Category.{?u.67678, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : HasLeftHomology S
inst✝ : Functor.PreservesLeftHomologyOf F S
⊢ HasLeftHomology (map S F)

Next tactic:
infer_instance
instance hasRightHomology_of_preserves' [S.HasRightHomology] [F.PreservesRightHomologyOf S] :
    (F.mapShortComplex.obj S).HasRightHomology :=
  by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.69136, u_1} C
inst✝⁵ : Category.{?u.69140, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : HasRightHomology S
inst✝ : Functor.PreservesRightHomologyOf F S
⊢ HasRightHomology ((Functor.mapShortComplex F).obj S)

Next tactic:
dsimp
instance hasRightHomology_of_preserves' [S.HasRightHomology] [F.PreservesRightHomologyOf S] :
    (F.mapShortComplex.obj S).HasRightHomology :=
  by dsimp; 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁶ : Category.{?u.69136, u_1} C
inst✝⁵ : Category.{?u.69140, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : HasRightHomology S
inst✝ : Functor.PreservesRightHomologyOf F S
⊢ HasRightHomology (map S F)

Next tactic:
infer_instance
instance hasHomology_of_preserves' [S.HasHomology] [F.PreservesLeftHomologyOf S]
    [F.PreservesRightHomologyOf S] :
    (F.mapShortComplex.obj S).HasHomology :=
  by 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁷ : Category.{?u.70744, u_1} C
inst✝⁶ : Category.{?u.70748, u_2} D
inst✝⁵ : HasZeroMorphisms C
inst✝⁴ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝³ : Functor.PreservesZeroMorphisms F
inst✝² : HasHomology S
inst✝¹ : Functor.PreservesLeftHomologyOf F S
inst✝ : Functor.PreservesRightHomologyOf F S
⊢ HasHomology ((Functor.mapShortComplex F).obj S)

Next tactic:
dsimp
instance hasHomology_of_preserves' [S.HasHomology] [F.PreservesLeftHomologyOf S]
    [F.PreservesRightHomologyOf S] :
    (F.mapShortComplex.obj S).HasHomology :=
  by dsimp; 

Proof state:
C : Type u_1
D : Type u_2
inst✝⁷ : Category.{?u.70744, u_1} C
inst✝⁶ : Category.{?u.70748, u_2} D
inst✝⁵ : HasZeroMorphisms C
inst✝⁴ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝³ : Functor.PreservesZeroMorphisms F
inst✝² : HasHomology S
inst✝¹ : Functor.PreservesLeftHomologyOf F S
inst✝ : Functor.PreservesRightHomologyOf F S
⊢ HasHomology (map S F)

Next tactic:
infer_instance
lemma map_cyclesMap' : F.map (ShortComplex.cyclesMap' φ hl₁ hl₂) =
    ShortComplex.cyclesMap' (F.mapShortComplex.map φ) (hl₁.map F) (hl₂.map F) := by
  

Proof state:
C : Type u_1
D : Type u_2
inst✝⁷ : Category.{u_4, u_1} C
inst✝⁶ : Category.{u_3, u_2} D
inst✝⁵ : HasZeroMorphisms C
inst✝⁴ : HasZeroMorphisms D
S : ShortComplex C
h₁✝ : LeftHomologyData S
h₂✝ : RightHomologyData S
F✝ : C ⥤ D
inst✝³ : Functor.PreservesZeroMorphisms F✝
hl : LeftHomologyData S
hr : RightHomologyData S
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
h₁ : HomologyData S₁
h₂ : HomologyData S₂
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : IsPreservedBy hl₁ F
inst✝ : IsPreservedBy hl₂ F
⊢ F.map (cyclesMap' φ hl₁ hl₂) = cyclesMap' ((Functor.mapShortComplex F).map φ) (map hl₁ F) (map hl₂ F)

Next tactic:
have γ : ShortComplex.LeftHomologyMapData φ hl₁ hl₂ := default
lemma map_cyclesMap' : F.map (ShortComplex.cyclesMap' φ hl₁ hl₂) =
    ShortComplex.cyclesMap' (F.mapShortComplex.map φ) (hl₁.map F) (hl₂.map F) := by
  have γ : ShortComplex.LeftHomologyMapData φ hl₁ hl₂ := default
  

Proof state:
C : Type u_1
D : Type u_2
inst✝⁷ : Category.{u_4, u_1} C
inst✝⁶ : Category.{u_3, u_2} D
inst✝⁵ : HasZeroMorphisms C
inst✝⁴ : HasZeroMorphisms D
S : ShortComplex C
h₁✝ : LeftHomologyData S
h₂✝ : RightHomologyData S
F✝ : C ⥤ D
inst✝³ : Functor.PreservesZeroMorphisms F✝
hl : LeftHomologyData S
hr : RightHomologyData S
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
h₁ : HomologyData S₁
h₂ : HomologyData S₂
F : C ⥤ D
inst✝² : Functor.PreservesZeroMorphisms F
inst✝¹ : IsPreservedBy hl₁ F
inst✝ : IsPreservedBy hl₂ F
γ : LeftHomologyMapData φ hl₁ hl₂
⊢ F.map (cyclesMap' φ hl₁ hl₂) = cyclesMap' ((Functor.mapShortComplex F).map φ) (map hl₁ F) (map hl₂ F)

Next tactic:
rw [γ.cyclesMap'_eq, (γ.map F).cyclesMap'_eq,  ShortComplex.LeftHomologyMapData.map_φK]