/-- If `F` is an exact additive functor, then `F` commutes with `Hᵢ` (up to natural isomorphism). -/
noncomputable def homology'FunctorIso (i : ι) :
    homology'Functor A c i ⋙ F ≅ F.mapHomologicalComplex c ⋙ homology'Functor B c i :=
  NatIso.ofComponents (fun X => homology'Iso F X i) (by
      intro X Y f
      dsimp
      rw [← Iso.inv_comp_eq, ← Category.assoc, ← Iso.eq_comp_inv]
      refine' coequalizer.hom_ext _
      dsimp [homology'Iso]
      simp only [PreservesCokernel.iso_inv]
      dsimp [homology'.map]
      simp only [← Category.assoc, cokernel.π_desc]
      simp only [Category.assoc, cokernelComparison_map_desc, cokernel.π_desc]
      simp only [π_comp_cokernelComparison, ← F.map_comp]
      erw [← kernelSubobjectIso_comp_kernel_map_assoc]
      simp only [HomologicalComplex.Hom.sqFrom_right, HomologicalComplex.Hom.sqFrom_left,
        F.mapHomologicalComplex_map_f, F.map_comp]
      dsimp [HomologicalComplex.dFrom, HomologicalComplex.Hom.next]
      rw [kernel_map_comp_preserves_kernel_iso_inv_assoc]
      

Proof state:
A : Type u
inst✝⁶ : Category.{v, u} A
inst✝⁵ : Abelian A
X✝ Y✝ Z : A
f✝ : X✝ ⟶ Y✝
g : Y✝ ⟶ Z
w : f✝ ≫ g = 0
ι : Type u_1
c : ComplexShape ι
B : Type u_2
inst✝⁴ : Category.{?u.309013, u_2} B
inst✝³ : Abelian B
F : A ⥤ B
inst✝² : Additive F
inst✝¹ : PreservesFiniteLimits F
inst✝ : PreservesFiniteColimits F
i : ι
X Y : HomologicalComplex A c
f : X ⟶ Y
⊢ (kernelSubobjectIso (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))).hom ≫
      (PreservesKernel.iso F (HomologicalComplex.d X i (ComplexShape.next c i))).inv ≫
        F.map (kernelSubobjectIso (HomologicalComplex.d X i (ComplexShape.next c i))).inv ≫
          F.map (kernelSubobjectMap (HomologicalComplex.Hom.sqFrom f i)) ≫
            F.map
              (cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.d Y i (ComplexShape.next c i))
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0))) =
    (kernelSubobjectIso (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))).hom ≫
      (PreservesKernel.iso F (HomologicalComplex.d X i (ComplexShape.next c i))).inv ≫
        F.map
            (kernel.map (HomologicalComplex.d X i (ComplexShape.next c i))
              (HomologicalComplex.d Y i (ComplexShape.next c i)) (HomologicalComplex.Hom.f f i)
              (HomologicalComplex.Hom.f f (ComplexShape.next c i)) ?hpq) ≫
          F.map (kernelSubobjectIso (HomologicalComplex.d Y i (ComplexShape.next c i))).inv ≫
            F.map
              (cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.d Y i (ComplexShape.next c i))
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)))
case hpq
A : Type u
inst✝⁶ : Category.{v, u} A
inst✝⁵ : Abelian A
X✝ Y✝ Z : A
f✝ : X✝ ⟶ Y✝
g : Y✝ ⟶ Z
w : f✝ ≫ g = 0
ι : Type u_1
c : ComplexShape ι
B : Type u_2
inst✝⁴ : Category.{?u.309013, u_2} B
inst✝³ : Abelian B
F : A ⥤ B
inst✝² : Additive F
inst✝¹ : PreservesFiniteLimits F
inst✝ : PreservesFiniteColimits F
i : ι
X Y : HomologicalComplex A c
f : X ⟶ Y
⊢ HomologicalComplex.d X i (ComplexShape.next c i) ≫ HomologicalComplex.Hom.f f (ComplexShape.next c i) =
    HomologicalComplex.Hom.f f i ≫ HomologicalComplex.d Y i (ComplexShape.next c i)

Next tactic:
conv_lhs => erw [← F.map_comp_assoc]