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

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))) ≫
          (PreservesCokernel.iso F
              (imageToKernel (HomologicalComplex.dTo X i) (HomologicalComplex.dFrom X i)
                (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0))).inv) ≫
        F.map
          (homology'.map (_ : HomologicalComplex.dTo X i ≫ HomologicalComplex.dFrom X i = 0)
            (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0) (HomologicalComplex.Hom.sqTo f i)
            (HomologicalComplex.Hom.sqFrom f i)
            (_ : (HomologicalComplex.Hom.sqTo f i).right = (HomologicalComplex.Hom.sqTo f i).right)) =
    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)) ≫
      homology'.map
          (_ :
            HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
              0)
          (_ :
            HomologicalComplex.dTo ((mapHomologicalComplex F c).obj Y) i ≫
                HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj Y) i =
              0)
          (HomologicalComplex.Hom.sqTo ((mapHomologicalComplex F c).map f) i)
          (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i)
          (_ :
            (HomologicalComplex.Hom.sqTo ((mapHomologicalComplex F c).map f) i).right =
              (HomologicalComplex.Hom.sqTo ((mapHomologicalComplex F c).map f) i).right) ≫
        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))) ≫
          (PreservesCokernel.iso F
              (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0))).inv

Next tactic:
simp only [PreservesCokernel.iso_inv]