l3lab/ntp-mathlib huggingface dataset:
/-- When `F` is an exact additive functor, `F(Hᵢ(X)) ≅ Hᵢ(F(X))` for `X` a complex. -/
noncomputable def homology'Iso (C : HomologicalComplex A c) (j : ι) :
    F.obj (C.homology' j) ≅ ((F.mapHomologicalComplex c).obj C).homology' j :=
  (PreservesCokernel.iso F _).trans
    (cokernel.mapIso _ _
      ((F.mapIso (imageSubobjectIso _)).trans
        ((PreservesImage.iso F _).symm.trans (imageSubobjectIso _).symm))
      ((F.mapIso (kernelSubobjectIso _)).trans
        ((PreservesKernel.iso F _).trans (kernelSubobjectIso _).symm))
      (by
        dsimp
        ext
        simp only [Category.assoc, imageToKernel_arrow]
        erw [kernelSubobject_arrow', imageSubobject_arrow']
        

Proof state:
case h
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.285620, u_2} B
inst✝³ : Abelian B
F : A ⥤ B
inst✝² : Additive F
inst✝¹ : PreservesFiniteLimits F
inst✝ : PreservesFiniteColimits F
C : HomologicalComplex A c
j : ι
⊢ F.map
        (imageToKernel (HomologicalComplex.dTo C j) (HomologicalComplex.dFrom C j)
          (_ : HomologicalComplex.dTo C j ≫ HomologicalComplex.dFrom C j = 0)) ≫
      F.map (kernelSubobjectIso (HomologicalComplex.dFrom C j)).hom ≫
        (PreservesKernel.iso F (HomologicalComplex.dFrom C j)).hom ≫ kernel.ι (F.map (HomologicalComplex.dFrom C j)) =
    F.map (imageSubobjectIso (HomologicalComplex.dTo C j)).hom ≫
      IsImage.lift
          (StrongEpiMonoFactorisation.toMonoIsImage
            (StrongEpiMonoFactorisation.mk
              (MonoFactorisation.mk (F.obj (image (HomologicalComplex.dTo C j)))
                (F.map (image.ι (HomologicalComplex.dTo C j))) (F.map (factorThruImage (HomologicalComplex.dTo C j))))))
          (Image.monoFactorisation (F.map (HomologicalComplex.dTo C j))) ≫
        image.ι (F.map (HomologicalComplex.dTo C j))

Next tactic:
simp [← F.map_comp]
/-- 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
      

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),
    (homology'Functor A c i ⋙ F).map f ≫ ((fun X => homology'Iso F X i) Y).hom =
      ((fun X => homology'Iso F X i) X).hom ≫ (mapHomologicalComplex F c ⋙ homology'Functor B c i).map f

Next tactic:
intro X Y f
/-- 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
      

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
⊢ (homology'Functor A c i ⋙ F).map f ≫ ((fun X => homology'Iso F X i) Y).hom =
    ((fun X => homology'Iso F X i) X).hom ≫ (mapHomologicalComplex F c ⋙ homology'Functor B c i).map f

Next tactic:
dsimp
/-- 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
      

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
⊢ 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)) ≫
      (homology'Iso F Y i).hom =
    (homology'Iso F X i).hom ≫
      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)

Next tactic:
rw [← Iso.inv_comp_eq, ← Category.assoc, ← Iso.eq_comp_inv]
/-- 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]
      

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
⊢ (homology'Iso F X i).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)) =
    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) ≫
      (homology'Iso F Y i).inv

Next tactic:
refine' coequalizer.hom_ext _
/-- 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 _
      

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
⊢ coequalizer.π
        (imageToKernel (HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i)
          (HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i)
          (_ :
            HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
              0))
        0 ≫
      (homology'Iso F X i).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)) =
    coequalizer.π
        (imageToKernel (HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i)
          (HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i)
          (_ :
            HomologicalComplex.dTo ((mapHomologicalComplex F c).obj X) i ≫
                HomologicalComplex.dFrom ((mapHomologicalComplex F c).obj X) i =
              0))
        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) ≫
        (homology'Iso F Y i).inv

Next tactic:
dsimp [homology'Iso]
/-- 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]
      

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.dFrom X i))).hom ≫
      (PreservesKernel.iso F (HomologicalComplex.dFrom X i)).inv ≫
        F.map (kernelSubobjectIso (HomologicalComplex.dFrom X i)).inv ≫
          F.map
            (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))) =
    kernelSubobjectMap (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i) ≫
      (kernelSubobjectIso (F.map (HomologicalComplex.dFrom Y i))).hom ≫
        (PreservesKernel.iso F (HomologicalComplex.dFrom Y i)).inv ≫
          F.map (kernelSubobjectIso (HomologicalComplex.dFrom Y i)).inv ≫
            cokernel.π
                (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 [π_comp_cokernelComparison, ← F.map_comp]
/-- 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]
      

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.dFrom X i))).hom ≫
      (PreservesKernel.iso F (HomologicalComplex.dFrom X i)).inv ≫
        F.map
          ((kernelSubobjectIso (HomologicalComplex.dFrom X i)).inv ≫
            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))) =
    kernelSubobjectMap (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i) ≫
      (kernelSubobjectIso (F.map (HomologicalComplex.dFrom Y i))).hom ≫
        (PreservesKernel.iso F (HomologicalComplex.dFrom Y i)).inv ≫
          F.map
            ((kernelSubobjectIso (HomologicalComplex.dFrom Y i)).inv ≫
              cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)))

Next tactic:
erw [← kernelSubobjectIso_comp_kernel_map_assoc]
/-- 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]
      

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.dFrom X i))).hom ≫
      (PreservesKernel.iso F (HomologicalComplex.dFrom X i)).inv ≫
        F.map
          ((kernelSubobjectIso (HomologicalComplex.dFrom X i)).inv ≫
            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))) =
    (kernelSubobjectIso (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))).hom ≫
      kernel.map (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
          (F.map (HomologicalComplex.d Y i (ComplexShape.next c i)))
          (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i).left
          (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i).right
          (_ :
            (Arrow.mk (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))).hom ≫
                (𝟭 B).map (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i).right =
              (𝟭 B).map (HomologicalComplex.Hom.sqFrom ((mapHomologicalComplex F c).map f) i).left ≫
                (Arrow.mk (F.map (HomologicalComplex.d Y i (ComplexShape.next c i)))).hom) ≫
        (PreservesKernel.iso F (HomologicalComplex.dFrom Y i)).inv ≫
          F.map
            ((kernelSubobjectIso (HomologicalComplex.dFrom Y i)).inv ≫
              cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)))

Next tactic:
simp only [HomologicalComplex.Hom.sqFrom_right, HomologicalComplex.Hom.sqFrom_left,
        F.mapHomologicalComplex_map_f, F.map_comp]
/-- 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]
      

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.dFrom X i))).hom ≫
      (PreservesKernel.iso F (HomologicalComplex.dFrom X i)).inv ≫
        F.map (kernelSubobjectIso (HomologicalComplex.dFrom X i)).inv ≫
          F.map (kernelSubobjectMap (HomologicalComplex.Hom.sqFrom f i)) ≫
            F.map
              (cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0))) =
    (kernelSubobjectIso (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))).hom ≫
      kernel.map (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
          (F.map (HomologicalComplex.d Y i (ComplexShape.next c i))) (F.map (HomologicalComplex.Hom.f f i))
          (F.map (HomologicalComplex.Hom.f f (ComplexShape.next c i)))
          (_ :
            F.map (HomologicalComplex.d X i (ComplexShape.next c i)) ≫
                F.map (HomologicalComplex.Hom.f f (ComplexShape.next c i)) =
              F.map (HomologicalComplex.Hom.f f i) ≫ F.map (HomologicalComplex.d Y i (ComplexShape.next c i))) ≫
        (PreservesKernel.iso F (HomologicalComplex.dFrom Y i)).inv ≫
          F.map (kernelSubobjectIso (HomologicalComplex.dFrom Y i)).inv ≫
            F.map
              (cokernel.π
                (imageToKernel (HomologicalComplex.dTo Y i) (HomologicalComplex.dFrom Y i)
                  (_ : HomologicalComplex.dTo Y i ≫ HomologicalComplex.dFrom Y i = 0)))

Next tactic:
dsimp [HomologicalComplex.dFrom, HomologicalComplex.Hom.next]
/-- 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]
      

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 ≫
      kernel.map (F.map (HomologicalComplex.d X i (ComplexShape.next c i)))
          (F.map (HomologicalComplex.d Y i (ComplexShape.next c i))) (F.map (HomologicalComplex.Hom.f f i))
          (F.map (HomologicalComplex.Hom.f f (ComplexShape.next c i)))
          (_ :
            F.map (HomologicalComplex.d X i (ComplexShape.next c i)) ≫
                F.map (HomologicalComplex.Hom.f f (ComplexShape.next c i)) =
              F.map (HomologicalComplex.Hom.f f i) ≫ F.map (HomologicalComplex.d Y i (ComplexShape.next c i))) ≫
        (PreservesKernel.iso F (HomologicalComplex.d Y i (ComplexShape.next c i))).inv ≫
          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)))

Next tactic:
rw [kernel_map_comp_preserves_kernel_iso_inv_assoc]