-- Module: Mathlib.Algebra.Homology.BifunctorHomotopy
Goal:
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
inst : Category.{v_1, u_1} C₁
inst_1 : Category.{v_2, u_2} C₂
inst_2 : Category.{v_3, u_3} D
inst_3 : Preadditive.{v_1, u_1} C₁
inst_4 : Preadditive.{v_2, u_2} C₂
inst_5 : Preadditive.{v_3, u_3} D
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K₁ L₁ : HomologicalComplex.{v_1, u_1, u_4} C₁ c₁
f₁ f₁' : K₁ ⟶ L₁
h₁ : Homotopy f₁ f₁'
K₂ L₂ : HomologicalComplex.{v_2, u_2, u_5} C₂ c₂
f₂ : K₂ ⟶ L₂
F : C₁ ⥤ CategoryTheory.Functor.{v_2, v_3, u_2, u_3} C₂ D
inst_6 : F.Additive
inst_7 : ∀ (X₁ : C₁), (F.obj X₁).Additive
c : ComplexShape J
inst_8 : DecidableEq J
inst_9 : TotalComplexShape c₁ c₂ c
inst_10 : K₁.HasMapBifunctor K₂ F c
inst_11 : L₁.HasMapBifunctor L₂ F c
j : J
i₁ : I₁
i₂ : I₂
h : c₁.π c₂ c (i₁, i₂) = j
this : ∀ {X Y : D} (a b c d e f : X ⟶ Y), a = c → b = e → f = -d → a + b = c + d + (e + f)
h₂ :
  Eq (α := (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
    (CategoryStruct.comp (Y := (F.obj (K₁.xNext i₁)).obj (K₂.X i₂))
        (NatTrans.app (F.map (K₁.d i₁ (c₁.next i₁))) (K₂.X i₂))
        (NatTrans.app (F.map (h₁.hom (c₁.next i₁) i₁)) (K₂.X i₂) ≫
          (F.obj (L₁.X i₁)).map (f₂.f i₂) ≫ L₁.ιMapBifunctor L₂ F c i₁ i₂ j h) :
      (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
    (CategoryStruct.comp (Y := (((GradedObject.mapBifunctor F I₁ I₂).obj K₁.X).obj K₂.X).mapObj (c₁.π c₂ c) (c.next j))
        (HomologicalComplex₂.d₁ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) c i₁ i₂
            (c.next j) :
          X (X (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) i₁) i₂ ⟶
            (HomologicalComplex₂.toGradedObject
                  (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂)).mapObj
              (c₁.π c₂ c) (c.next j))
        (hom₁ h₁ f₂ F c (c.next j) j : X (K₁.mapBifunctor K₂ F c) (c.next j) ⟶ X (L₁.mapBifunctor L₂ F c) j) :
      (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
h₃ :
  Eq (α := (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
    (CategoryStruct.comp (Y := (F.obj (L₁.xPrev i₁)).obj (K₂.X i₂))
        (NatTrans.app (F.map (h₁.hom i₁ (c₁.prev i₁))) (K₂.X i₂))
        (NatTrans.app (F.map (L₁.d (c₁.prev i₁) i₁)) (K₂.X i₂) ≫
          (F.obj (L₁.X i₁)).map (f₂.f i₂) ≫ L₁.ιMapBifunctor L₂ F c i₁ i₂ j h) :
      (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
    (CategoryStruct.comp (Y := X (K₁.mapBifunctor K₂ F c) j)
        (K₁.ιMapBifunctor K₂ F c i₁ i₂ j h : (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (K₁.mapBifunctor K₂ F c) j)
        (CategoryStruct.comp (Y := X (L₁.mapBifunctor L₂ F c) (c.prev j))
            (hom₁ h₁ f₂ F c j (c.prev j) : X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) (c.prev j))
            (HomologicalComplex₂.D₁ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂) c
                (c.prev j) j :
              (HomologicalComplex₂.toGradedObject
                      (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                  (c₁.π c₂ c) (c.prev j) ⟶
                (HomologicalComplex₂.toGradedObject
                      (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                  (c₁.π c₂ c) j) :
          X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) j) :
      (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
h₄ :
  Eq (α := (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
    (CategoryStruct.comp (Y := X (K₁.mapBifunctor K₂ F c) j)
        (K₁.ιMapBifunctor K₂ F c i₁ i₂ j h : (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (K₁.mapBifunctor K₂ F c) j)
        (CategoryStruct.comp (Y := X (L₁.mapBifunctor L₂ F c) (c.prev j))
            (hom₁ h₁ f₂ F c j (c.prev j) : X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) (c.prev j))
            (HomologicalComplex₂.D₂ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂) c
                (c.prev j) j :
              (HomologicalComplex₂.toGradedObject
                      (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                  (c₁.π c₂ c) (c.prev j) ⟶
                (HomologicalComplex₂.toGradedObject
                      (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                  (c₁.π c₂ c) j) :
          X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) j) :
      (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
    (-CategoryStruct.comp (Y := (((GradedObject.mapBifunctor F I₁ I₂).obj K₁.X).obj K₂.X).mapObj (c₁.π c₂ c) (c.next j))
          (HomologicalComplex₂.d₂ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) c i₁ i₂
              (c.next j) :
            X (X (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) i₁) i₂ ⟶
              (HomologicalComplex₂.toGradedObject
                    (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂)).mapObj
                (c₁.π c₂ c) (c.next j))
          (hom₁ h₁ f₂ F c (c.next j) j : X (K₁.mapBifunctor K₂ F c) (c.next j) ⟶ X (L₁.mapBifunctor L₂ F c) j) :
      (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
⊢ HAdd.hAdd (α := (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
      (CategoryStruct.comp (Y := (F.obj (K₁.xNext i₁)).obj (K₂.X i₂))
        (NatTrans.app (F.map (K₁.d i₁ (c₁.next i₁))) (K₂.X i₂))
        (NatTrans.app (F.map (h₁.hom (c₁.next i₁) i₁)) (K₂.X i₂) ≫
          (F.obj (L₁.X i₁)).map (f₂.f i₂) ≫ L₁.ιMapBifunctor L₂ F c i₁ i₂ j h))
      (CategoryStruct.comp (Y := (F.obj (L₁.xPrev i₁)).obj (K₂.X i₂))
        (NatTrans.app (F.map (h₁.hom i₁ (c₁.prev i₁))) (K₂.X i₂))
        (NatTrans.app (F.map (L₁.d (c₁.prev i₁) i₁)) (K₂.X i₂) ≫
          (F.obj (L₁.X i₁)).map (f₂.f i₂) ≫ L₁.ιMapBifunctor L₂ F c i₁ i₂ j h)) =
    HAdd.hAdd (α := (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j) (β :=
        (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
        (CategoryStruct.comp (Y :=
            (((GradedObject.mapBifunctor F I₁ I₂).obj K₁.X).obj K₂.X).mapObj (c₁.π c₂ c) (c.next j))
            (HomologicalComplex₂.d₁ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) c i₁ i₂
                (c.next j) :
              X (X (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) i₁) i₂ ⟶
                (HomologicalComplex₂.toGradedObject
                      (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂)).mapObj
                  (c₁.π c₂ c) (c.next j))
            (hom₁ h₁ f₂ F c (c.next j) j : X (K₁.mapBifunctor K₂ F c) (c.next j) ⟶ X (L₁.mapBifunctor L₂ F c) j) :
          (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
        (CategoryStruct.comp (Y :=
            (((GradedObject.mapBifunctor F I₁ I₂).obj K₁.X).obj K₂.X).mapObj (c₁.π c₂ c) (c.next j))
            (HomologicalComplex₂.d₂ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) c i₁ i₂
                (c.next j) :
              X (X (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂) i₁) i₂ ⟶
                (HomologicalComplex₂.toGradedObject
                      (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) K₁) K₂)).mapObj
                  (c₁.π c₂ c) (c.next j))
            (hom₁ h₁ f₂ F c (c.next j) j : X (K₁.mapBifunctor K₂ F c) (c.next j) ⟶ X (L₁.mapBifunctor L₂ F c) j) :
          (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j) +
      HAdd.hAdd (α := (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j) (β :=
        (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
        (CategoryStruct.comp (Y := X (K₁.mapBifunctor K₂ F c) j)
            (K₁.ιMapBifunctor K₂ F c i₁ i₂ j h : (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (K₁.mapBifunctor K₂ F c) j)
            (CategoryStruct.comp (Y := X (L₁.mapBifunctor L₂ F c) (c.prev j))
                (hom₁ h₁ f₂ F c j (c.prev j) : X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) (c.prev j))
                (HomologicalComplex₂.D₁ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂) c
                    (c.prev j) j :
                  (HomologicalComplex₂.toGradedObject
                          (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                      (c₁.π c₂ c) (c.prev j) ⟶
                    (HomologicalComplex₂.toGradedObject
                          (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                      (c₁.π c₂ c) j) :
              X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) j) :
          (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)
        (CategoryStruct.comp (Y := X (K₁.mapBifunctor K₂ F c) j)
            (K₁.ιMapBifunctor K₂ F c i₁ i₂ j h : (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (K₁.mapBifunctor K₂ F c) j)
            (CategoryStruct.comp (Y := X (L₁.mapBifunctor L₂ F c) (c.prev j))
                (hom₁ h₁ f₂ F c j (c.prev j) : X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) (c.prev j))
                (HomologicalComplex₂.D₂ (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂) c
                    (c.prev j) j :
                  (HomologicalComplex₂.toGradedObject
                          (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                      (c₁.π c₂ c) (c.prev j) ⟶
                    (HomologicalComplex₂.toGradedObject
                          (Functor.obj (Functor.obj (F.mapBifunctorHomologicalComplex c₁ c₂) L₁) L₂)).mapObj
                      (c₁.π c₂ c) j) :
              X (K₁.mapBifunctor K₂ F c) j ⟶ X (L₁.mapBifunctor L₂ F c) j) :
          (F.obj (K₁.X i₁)).obj (K₂.X i₂) ⟶ X (L₁.mapBifunctor L₂ F c) j)

Tactic:
apply this