Theorem: CategoryTheory.Functor.mapTriangleCommShiftIso_inv_app_hom₃
File: Mathlib/CategoryTheory/Triangulated/Functor.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ ((Triangle.shiftFunctor C n ⋙ F.mapTriangle).obj T).mor₁ ≫ ((F.commShiftIso n).app T.obj₂).hom =
    ((F.commShiftIso n).app T.obj₁).hom ≫ ((F.mapTriangle ⋙ Triangle.shiftFunctor D n).obj T).mor₁
state_after: no goals
tactic: aesop_cat
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ ((Triangle.shiftFunctor C n ⋙ F.mapTriangle).obj T).mor₂ ≫ ((F.commShiftIso n).app T.obj₃).hom =
    ((F.commShiftIso n).app T.obj₂).hom ≫ ((F.mapTriangle ⋙ Triangle.shiftFunctor D n).obj T).mor₂
state_after: no goals
tactic: aesop_cat
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ ((Triangle.shiftFunctor C n ⋙ F.mapTriangle).obj T).mor₃ ≫
      (shiftFunctor D 1).map ((F.commShiftIso n).app T.obj₁).hom =
    ((F.commShiftIso n).app T.obj₃).hom ≫ ((F.mapTriangle ⋙ Triangle.shiftFunctor D n).obj T).mor₃
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ (F.map (n.negOnePow • (shiftFunctor C n).map T.mor₃ ≫ (shiftFunctorComm C 1 n).hom.app T.obj₁) ≫
        (F.commShiftIso 1).hom.app ((shiftFunctor C n).obj T.obj₁)) ≫
      (shiftFunctor D 1).map ((F.commShiftIso n).hom.app T.obj₁) =
    (F.commShiftIso n).hom.app T.obj₃ ≫
      (n.negOnePow •
        (shiftFunctor D n).map (F.map T.mor₃ ≫ (F.commShiftIso 1).hom.app T.obj₁) ≫
          (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁))
tactic: dsimp
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ (F.map (n.negOnePow • (shiftFunctor C n).map T.mor₃ ≫ (shiftFunctorComm C 1 n).hom.app T.obj₁) ≫
        (F.commShiftIso 1).hom.app ((shiftFunctor C n).obj T.obj₁)) ≫
      (shiftFunctor D 1).map ((F.commShiftIso n).hom.app T.obj₁) =
    (F.commShiftIso n).hom.app T.obj₃ ≫
      (n.negOnePow •
        (shiftFunctor D n).map (F.map T.mor₃ ≫ (F.commShiftIso 1).hom.app T.obj₁) ≫
          (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁))
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        F.map ((shiftFunctorComm C 1 n).hom.app T.obj₁) ≫
          (F.commShiftIso 1).hom.app ((shiftFunctor C n).obj T.obj₁) ≫
            (shiftFunctor D 1).map ((F.commShiftIso n).hom.app T.obj₁) =
    n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        (F.commShiftIso n).hom.app ((shiftFunctor C 1).obj T.obj₁) ≫
          (shiftFunctor D n).map ((F.commShiftIso 1).hom.app T.obj₁) ≫ (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁)
tactic: simp only [map_units_smul, map_comp, Linear.units_smul_comp, assoc,
        Linear.comp_units_smul, ← F.commShiftIso_hom_naturality_assoc]
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        F.map ((shiftFunctorComm C 1 n).hom.app T.obj₁) ≫
          (F.commShiftIso 1).hom.app ((shiftFunctor C n).obj T.obj₁) ≫
            (shiftFunctor D 1).map ((F.commShiftIso n).hom.app T.obj₁) =
    n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        (F.commShiftIso n).hom.app ((shiftFunctor C 1).obj T.obj₁) ≫
          (shiftFunctor D n).map ((F.commShiftIso 1).hom.app T.obj₁) ≫ (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁)
state_after: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        ((F.commShiftIso n).hom.app ((shiftFunctor C 1).obj T.obj₁) ≫
            (shiftFunctor D n).map ((F.commShiftIso 1).hom.app T.obj₁) ≫
              (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁) ≫
                (shiftFunctor D 1).map ((F.commShiftIso n).inv.app T.obj₁) ≫
                  (F.commShiftIso 1).inv.app ((shiftFunctor C n).obj T.obj₁)) ≫
          (F.commShiftIso 1).hom.app ((shiftFunctor C n).obj T.obj₁) ≫
            (shiftFunctor D 1).map ((F.commShiftIso n).hom.app T.obj₁) =
    n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        (F.commShiftIso n).hom.app ((shiftFunctor C 1).obj T.obj₁) ≫
          (shiftFunctor D n).map ((F.commShiftIso 1).hom.app T.obj₁) ≫ (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁)
tactic: rw [F.map_shiftFunctorComm_hom_app T.obj₁ 1 n]
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
T : Triangle C
⊢ n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        ((F.commShiftIso n).hom.app ((shiftFunctor C 1).obj T.obj₁) ≫
            (shiftFunctor D n).map ((F.commShiftIso 1).hom.app T.obj₁) ≫
              (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁) ≫
                (shiftFunctor D 1).map ((F.commShiftIso n).inv.app T.obj₁) ≫
                  (F.commShiftIso 1).inv.app ((shiftFunctor C n).obj T.obj₁)) ≫
          (F.commShiftIso 1).hom.app ((shiftFunctor C n).obj T.obj₁) ≫
            (shiftFunctor D 1).map ((F.commShiftIso n).hom.app T.obj₁) =
    n.negOnePow •
      F.map ((shiftFunctor C n).map T.mor₃) ≫
        (F.commShiftIso n).hom.app ((shiftFunctor C 1).obj T.obj₁) ≫
          (shiftFunctor D n).map ((F.commShiftIso 1).hom.app T.obj₁) ≫ (shiftFunctorComm D 1 n).hom.app (F.obj T.obj₁)
state_after: no goals
tactic: simp only [comp_obj, assoc, Iso.inv_hom_id_app_assoc,
        ← Functor.map_comp, Iso.inv_hom_id_app, map_id, comp_id]
state_before: C : Type u_1
D : Type u_2
E : Type u_3
inst✝¹⁰ : Category.{?u.21810, u_1} C
inst✝⁹ : Category.{?u.21814, u_2} D
inst✝⁸ : Category.{?u.21818, u_3} E
inst✝⁷ : HasShift C ℤ
inst✝⁶ : HasShift D ℤ
inst✝⁵ : HasShift E ℤ
F : C ⥤ D
inst✝⁴ : F.CommShift ℤ
G : D ⥤ E
inst✝³ : G.CommShift ℤ
inst✝² : Preadditive C
inst✝¹ : Preadditive D
inst✝ : F.Additive
n : ℤ
⊢ ∀ {X Y : Triangle C} (f : X ⟶ Y),
    (Triangle.shiftFunctor C n ⋙ F.mapTriangle).map f ≫
        ((fun T =>
              ((Triangle.shiftFunctor C n ⋙ F.mapTriangle).obj T).isoMk
                ((F.mapTriangle ⋙ Triangle.shiftFunctor D n).obj T) ((F.commShiftIso n).app T.obj₁)
                ((F.commShiftIso n).app T.obj₂) ((F.commShiftIso n).app T.obj₃) ⋯ ⋯ ⋯)
            Y).hom =
      ((fun T =>
              ((Triangle.shiftFunctor C n ⋙ F.mapTriangle).obj T).isoMk
                ((F.mapTriangle ⋙ Triangle.shiftFunctor D n).obj T) ((F.commShiftIso n).app T.obj₁)
                ((F.commShiftIso n).app T.obj₂) ((F.commShiftIso n).app T.obj₃) ⋯ ⋯ ⋯)
            X).hom ≫
        (F.mapTriangle ⋙ Triangle.shiftFunctor D n).map f
state_after: no goals
tactic: aesop_cat