Theorem: CochainComplex.mapBifunctorShift₁Iso_trans_mapBifunctorShift₂Iso
File: Mathlib/Algebra/Homology/BifunctorShift.lean

Proof steps:
state_before: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ K₁.mapBifunctorShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F x ≪≫
      (CategoryTheory.shiftFunctor (CochainComplex D ℤ) x).mapIso (K₁.mapBifunctorShift₂Iso K₂ F y) =
    (x * y).negOnePow •
      ((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorShift₂Iso K₂ F y ≪≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).mapIso (K₁.mapBifunctorShift₁Iso K₂ F x) ≪≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).app (K₁.mapBifunctor K₂ F)
state_after: case w
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ (K₁.mapBifunctorShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F x ≪≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) x).mapIso (K₁.mapBifunctorShift₂Iso K₂ F y)).hom =
    ((x * y).negOnePow •
        ((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorShift₂Iso K₂ F y ≪≫
          (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).mapIso (K₁.mapBifunctorShift₁Iso K₂ F x) ≪≫
            (shiftFunctorComm (CochainComplex D ℤ) x y).app (K₁.mapBifunctor K₂ F)).hom
tactic: ext1
state_before: case w
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ (K₁.mapBifunctorShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F x ≪≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) x).mapIso (K₁.mapBifunctorShift₂Iso K₂ F y)).hom =
    ((x * y).negOnePow •
        ((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorShift₂Iso K₂ F y ≪≫
          (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).mapIso (K₁.mapBifunctorShift₁Iso K₂ F x) ≪≫
            (shiftFunctorComm (CochainComplex D ℤ) x y).app (K₁.mapBifunctor K₂ F)).hom
state_after: case w
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ (HomologicalComplex₂.total.map
          (K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F
              x).hom
          (ComplexShape.up ℤ) ≫
        ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂)).totalShift₁Iso
            x).hom) ≫
      (CategoryTheory.shiftFunctor (CochainComplex D ℤ) x).map
        (HomologicalComplex₂.total.map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom (ComplexShape.up ℤ) ≫
          ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).totalShift₂Iso
              y).hom) =
    (x * y).negOnePow •
      (HomologicalComplex₂.total.map
            (((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
                y).hom
            (ComplexShape.up ℤ) ≫
          ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj
                      ((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁)).obj
                  K₂).totalShift₂Iso
              y).hom) ≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).map
            (HomologicalComplex₂.total.map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom (ComplexShape.up ℤ) ≫
              ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                      K₂).totalShift₁Iso
                  x).hom) ≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).hom.app (K₁.mapBifunctor K₂ F)
tactic: dsimp [mapBifunctorShift₁Iso, mapBifunctorShift₂Iso]
state_before: case w
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ (HomologicalComplex₂.total.map
          (K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F
              x).hom
          (ComplexShape.up ℤ) ≫
        ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂)).totalShift₁Iso
            x).hom) ≫
      (CategoryTheory.shiftFunctor (CochainComplex D ℤ) x).map
        (HomologicalComplex₂.total.map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom (ComplexShape.up ℤ) ≫
          ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).totalShift₂Iso
              y).hom) =
    (x * y).negOnePow •
      (HomologicalComplex₂.total.map
            (((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
                y).hom
            (ComplexShape.up ℤ) ≫
          ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj
                      ((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁)).obj
                  K₂).totalShift₂Iso
              y).hom) ≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).map
            (HomologicalComplex₂.total.map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom (ComplexShape.up ℤ) ≫
              ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                      K₂).totalShift₁Iso
                  x).hom) ≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).hom.app (K₁.mapBifunctor K₂ F)
state_after: case w
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ HomologicalComplex₂.total.map
        (((K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F
                x).hom ≫
            (HomologicalComplex₂.shiftFunctor₁ D x).map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom) ≫
          (HomologicalComplex₂.shiftFunctor₁₂CommIso D x y).hom.app
            (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂))
        (ComplexShape.up ℤ) ≫
      (((HomologicalComplex₂.shiftFunctor₁ D x).obj
                (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                  K₂)).totalShift₂Iso
            y).hom ≫
        (CategoryTheory.shiftFunctor (HomologicalComplex D (ComplexShape.up ℤ)) y).map
            ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).totalShift₁Iso
                x).hom ≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).hom.app
            ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).total
              (ComplexShape.up ℤ)) =
    HomologicalComplex₂.total.map
        ((((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
              y).hom ≫
          (HomologicalComplex₂.shiftFunctor₂ D y).map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom)
        (ComplexShape.up ℤ) ≫
      (((HomologicalComplex₂.shiftFunctor₁ D x).obj
                (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                  K₂)).totalShift₂Iso
            y).hom ≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).map
            ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).totalShift₁Iso
                x).hom ≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).hom.app (K₁.mapBifunctor K₂ F)
tactic: rw [Functor.map_comp, Functor.map_comp, assoc, assoc, assoc,
    ← HomologicalComplex₂.totalShift₁Iso_hom_naturality_assoc,
    HomologicalComplex₂.totalShift₁Iso_hom_totalShift₂Iso_hom,
    ← HomologicalComplex₂.totalShift₂Iso_hom_naturality_assoc,
    Linear.comp_units_smul, Linear.comp_units_smul,
    smul_left_cancel_iff,
    ← HomologicalComplex₂.total.map_comp_assoc,
    ← HomologicalComplex₂.total.map_comp_assoc,
    ← HomologicalComplex₂.total.map_comp_assoc]
state_before: case w
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ HomologicalComplex₂.total.map
        (((K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F
                x).hom ≫
            (HomologicalComplex₂.shiftFunctor₁ D x).map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom) ≫
          (HomologicalComplex₂.shiftFunctor₁₂CommIso D x y).hom.app
            (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂))
        (ComplexShape.up ℤ) ≫
      (((HomologicalComplex₂.shiftFunctor₁ D x).obj
                (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                  K₂)).totalShift₂Iso
            y).hom ≫
        (CategoryTheory.shiftFunctor (HomologicalComplex D (ComplexShape.up ℤ)) y).map
            ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).totalShift₁Iso
                x).hom ≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).hom.app
            ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).total
              (ComplexShape.up ℤ)) =
    HomologicalComplex₂.total.map
        ((((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
              y).hom ≫
          (HomologicalComplex₂.shiftFunctor₂ D y).map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom)
        (ComplexShape.up ℤ) ≫
      (((HomologicalComplex₂.shiftFunctor₁ D x).obj
                (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj
                  K₂)).totalShift₂Iso
            y).hom ≫
        (CategoryTheory.shiftFunctor (CochainComplex D ℤ) y).map
            ((((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂).totalShift₁Iso
                x).hom ≫
          (shiftFunctorComm (CochainComplex D ℤ) x y).hom.app (K₁.mapBifunctor K₂ F)
state_after: case w.e_a.e_φ
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ ((K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F x).hom ≫
        (HomologicalComplex₂.shiftFunctor₁ D x).map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom) ≫
      (HomologicalComplex₂.shiftFunctor₁₂CommIso D x y).hom.app
        (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂) =
    (((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
          y).hom ≫
      (HomologicalComplex₂.shiftFunctor₂ D y).map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom
tactic: congr 2
state_before: case w.e_a.e_φ
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
⊢ ((K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F x).hom ≫
        (HomologicalComplex₂.shiftFunctor₁ D x).map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom) ≫
      (HomologicalComplex₂.shiftFunctor₁₂CommIso D x y).hom.app
        (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂) =
    (((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
          y).hom ≫
      (HomologicalComplex₂.shiftFunctor₂ D y).map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom
state_after: case w.e_a.e_φ.h.h
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
a b : ℤ
⊢ ((((K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F
                    x).hom ≫
                (HomologicalComplex₂.shiftFunctor₁ D x).map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom) ≫
              (HomologicalComplex₂.shiftFunctor₁₂CommIso D x y).hom.app
                (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂)).f
          a).f
      b =
    (((((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
                  y).hom ≫
              (HomologicalComplex₂.shiftFunctor₂ D y).map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom).f
          a).f
      b
tactic: ext a b
state_before: case w.e_a.e_φ.h.h
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
a b : ℤ
⊢ ((((K₁.mapBifunctorHomologicalComplexShift₁Iso ((CategoryTheory.shiftFunctor (CochainComplex C₂ ℤ) y).obj K₂) F
                    x).hom ≫
                (HomologicalComplex₂.shiftFunctor₁ D x).map (K₁.mapBifunctorHomologicalComplexShift₂Iso K₂ F y).hom) ≫
              (HomologicalComplex₂.shiftFunctor₁₂CommIso D x y).hom.app
                (((F.mapBifunctorHomologicalComplex (ComplexShape.up ℤ) (ComplexShape.up ℤ)).obj K₁).obj K₂)).f
          a).f
      b =
    (((((CategoryTheory.shiftFunctor (CochainComplex C₁ ℤ) x).obj K₁).mapBifunctorHomologicalComplexShift₂Iso K₂ F
                  y).hom ≫
              (HomologicalComplex₂.shiftFunctor₂ D y).map (K₁.mapBifunctorHomologicalComplexShift₁Iso K₂ F x).hom).f
          a).f
      b
state_after: case w.e_a.e_φ.h.h
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
a b : ℤ
⊢ (𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y))) ≫ 𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y)))) ≫
      𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y))) =
    𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y))) ≫ 𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y)))
tactic: dsimp [HomologicalComplex₂.shiftFunctor₁₂CommIso]
state_before: case w.e_a.e_φ.h.h
C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁸ : Category.{u_5, u_1} C₁
inst✝⁷ : Category.{u_6, u_2} C₂
inst✝⁶ : Category.{u_4, u_3} D
inst✝⁵ : Preadditive C₁
inst✝⁴ : Preadditive C₂
inst✝³ : Preadditive D
K₁ : CochainComplex C₁ ℤ
K₂ : CochainComplex C₂ ℤ
F : C₁ ⥤ C₂ ⥤ D
inst✝² : F.Additive
inst✝¹ : ∀ (X₁ : C₁), (F.obj X₁).Additive
x y : ℤ
inst✝ : K₁.HasMapBifunctor K₂ F
a b : ℤ
⊢ (𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y))) ≫ 𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y)))) ≫
      𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y))) =
    𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y))) ≫ 𝟙 ((F.obj (K₁.X (a + x))).obj (K₂.X (b + y)))
state_after: no goals
tactic: simp only [id_comp]