/-- 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]
      

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
⊢ cokernel.π
        (imageToKernel (F.map (HomologicalComplex.d X (ComplexShape.prev c i) i))
          (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
          (_ :
            HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
              0)) ≫
      (cokernel.map
            (imageToKernel (F.map (HomologicalComplex.d X (ComplexShape.prev c i) i))
              (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
              (_ :
                HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                    HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
                  0))
            (F.map
              (imageToKernel (HomologicalComplex.dTo X i) (HomologicalComplex.dFrom X i)
                (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0)))
            (((imageSubobjectIso (F.map (HomologicalComplex.dTo X i))).hom ≫
                image.lift
                  (MonoFactorisation.mk (F.obj (image (HomologicalComplex.dTo X i)))
                    (F.map (image.ι (HomologicalComplex.dTo X i)))
                    (F.map (factorThruImage (HomologicalComplex.dTo X i))))) ≫
              F.map (imageSubobjectIso (HomologicalComplex.dTo X i)).inv)
            (((kernelSubobjectIso (F.map (HomologicalComplex.dFrom X i))).hom ≫
                (PreservesKernel.iso F (HomologicalComplex.dFrom X i)).inv) ≫
              F.map (kernelSubobjectIso (HomologicalComplex.dFrom X i)).inv)
            (_ :
              imageToKernel (F.map (HomologicalComplex.d X (ComplexShape.prev c i) i))
                    (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
                    (_ :
                      HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                          HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
                        0) ≫
                  (F.mapIso (kernelSubobjectIso (HomologicalComplex.dFrom X i)) ≪≫
                      PreservesKernel.iso F (HomologicalComplex.dFrom X i) ≪≫
                        (kernelSubobjectIso (F.map (HomologicalComplex.dFrom X i))).symm).inv =
                (F.mapIso (imageSubobjectIso (HomologicalComplex.dTo X i)) ≪≫
                      (PreservesImage.iso F (HomologicalComplex.dTo X i)).symm ≪≫
                        (imageSubobjectIso (F.map (HomologicalComplex.dTo X i))).symm).inv ≫
                  F.map
                    (imageToKernel (HomologicalComplex.dTo X i) (HomologicalComplex.dFrom X i)
                      (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0))) ≫
          cokernelComparison
            (imageToKernel (HomologicalComplex.dTo X i) (HomologicalComplex.dFrom X i)
              (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0))
            F) ≫
        F.map
          (cokernel.desc
            (imageToKernel (HomologicalComplex.dTo X i) (HomologicalComplex.dFrom X i)
              (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0))
            (kernelSubobjectMap (HomologicalComplex.Hom.sqFrom f i) ≫
              cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)))
            (_ :
              imageToKernel (HomologicalComplex.dTo X i) (HomologicalComplex.dFrom X i)
                    (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0) ≫
                  kernelSubobjectMap (HomologicalComplex.Hom.sqFrom f i) ≫
                    cokernel.π
                      (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                        (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)) =
                0)) =
    cokernel.π
        (imageToKernel (F.map (HomologicalComplex.d X (ComplexShape.prev c i) i))
          (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
          (_ :
            HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
              0)) ≫
      cokernel.desc
          (imageToKernel (F.map (HomologicalComplex.d X (ComplexShape.prev c i) i))
            (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
            (_ :
              HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                  HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
                0))
          (kernelSubobjectMap (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i) ≫
            cokernel.π
              (imageToKernel (F.map (HomologicalComplex.d Y (ComplexShape.prev c i) i))
                (F.map (HomologicalComplex.d Y i (ComplexShape.next c i)))
                (_ :
                  HomologicalComplex.dTo ((mapHomologicalComplex F c).obj Y) i ≫
                      HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj Y) i =
                    0)))
          (_ :
            imageToKernel (F.map (HomologicalComplex.d X (ComplexShape.prev c i) i))
                  (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
                  (_ :
                    HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                        HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
                      0) ≫
                kernelSubobjectMap (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i) ≫
                  cokernel.π
                    (imageToKernel (F.map (HomologicalComplex.d Y (ComplexShape.prev c i) i))
                      (F.map (HomologicalComplex.d Y i (ComplexShape.next c i)))
                      (_ :
                        HomologicalComplex.dTo ((mapHomologicalComplex F c).obj Y) i ≫
                            HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj Y) i =
                          0)) =
              0) ≫
        cokernel.map
            (imageToKernel (F.map (HomologicalComplex.d Y (ComplexShape.prev c i) i))
              (F.map (HomologicalComplex.d Y i (ComplexShape.next c i)))
              (_ :
                HomologicalComplex.dTo ((mapHomologicalComplex F c).obj Y) i ≫
                    HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj Y) i =
                  0))
            (F.map
              (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)))
            (((imageSubobjectIso (F.map (HomologicalComplex.dTo Y i))).hom ≫
                image.lift
                  (MonoFactorisation.mk (F.obj (image (HomologicalComplex.dTo Y i)))
                    (F.map (image.ι (HomologicalComplex.dTo Y i)))
                    (F.map (factorThruImage (HomologicalComplex.dTo Y i))))) ≫
              F.map (imageSubobjectIso (HomologicalComplex.dTo Y i)).inv)
            (((kernelSubobjectIso (F.map (HomologicalComplex.dFrom Y i))).hom ≫
                (PreservesKernel.iso F (HomologicalComplex.dFrom Y i)).inv) ≫
              F.map (kernelSubobjectIso (HomologicalComplex.dFrom Y i)).inv)
            (_ :
              imageToKernel (F.map (HomologicalComplex.d Y (ComplexShape.prev c i) i))
                    (F.map (HomologicalComplex.d Y i (ComplexShape.next c i)))
                    (_ :
                      HomologicalComplex.dTo ((mapHomologicalComplex F c).obj Y) i ≫
                          HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj Y) i =
                        0) ≫
                  (F.mapIso (kernelSubobjectIso (HomologicalComplex.dFrom Y i)) ≪≫
                      PreservesKernel.iso F (HomologicalComplex.dFrom Y i) ≪≫
                        (kernelSubobjectIso (F.map (HomologicalComplex.dFrom Y i))).symm).inv =
                (F.mapIso (imageSubobjectIso (HomologicalComplex.dTo Y i)) ≪≫
                      (PreservesImage.iso F (HomologicalComplex.dTo Y i)).symm ≪≫
                        (imageSubobjectIso (F.map (HomologicalComplex.dTo Y i))).symm).inv ≫
                  F.map
                    (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                      (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0))) ≫
          cokernelComparison
            (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
              (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0))
            F

Next tactic:
simp only [← Category.assoc, cokernel.π_desc]