Theorem: CategoryTheory.Pretriangulated.invRotate_obj
File: Mathlib/CategoryTheory/Triangulated/Rotate.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ X✝.invRotate.mor₁ ≫ f.hom₁ = (shiftFunctor C (-1)).map f.hom₃ ≫ Y✝.invRotate.mor₁
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (-(shiftFunctor C (-1)).map X✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app X✝.obj₁) ≫ f.hom₁ =
    (shiftFunctor C (-1)).map f.hom₃ ≫
      (-(shiftFunctor C (-1)).map Y✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁)
tactic: dsimp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (-(shiftFunctor C (-1)).map X✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app X✝.obj₁) ≫ f.hom₁ =
    (shiftFunctor C (-1)).map f.hom₃ ≫
      (-(shiftFunctor C (-1)).map Y✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁)
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (shiftFunctor C (-1)).map X✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app X✝.obj₁ ≫ f.hom₁ =
    (shiftFunctor C (-1)).map (X✝.mor₃ ≫ (shiftFunctor C 1).map f.hom₁) ≫
      (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁
tactic: simp only [neg_comp, assoc, comp_neg, neg_inj, ← Functor.map_comp_assoc, ← f.comm₃]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (shiftFunctor C (-1)).map X✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app X✝.obj₁ ≫ f.hom₁ =
    (shiftFunctor C (-1)).map (X✝.mor₃ ≫ (shiftFunctor C 1).map f.hom₁) ≫
      (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (shiftFunctor C (-1)).map X✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app X✝.obj₁ ≫ f.hom₁ =
    (shiftFunctor C (-1)).map X✝.mor₃ ≫
      (shiftFunctor C (-1)).map ((shiftFunctor C 1).map f.hom₁) ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁
tactic: rw [Functor.map_comp, assoc]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (shiftFunctor C (-1)).map X✝.mor₃ ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app X✝.obj₁ ≫ f.hom₁ =
    (shiftFunctor C (-1)).map X✝.mor₃ ≫
      (shiftFunctor C (-1)).map ((shiftFunctor C 1).map f.hom₁) ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (shiftFunctor C (-1)).map X✝.mor₃ ≫
      (shiftFunctor C 1 ⋙ shiftFunctor C (-1)).map f.1 ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁ =
    (shiftFunctor C (-1)).map X✝.mor₃ ≫
      (shiftFunctor C (-1)).map ((shiftFunctor C 1).map f.hom₁) ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁
tactic: erw [← NatTrans.naturality]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ (shiftFunctor C (-1)).map X✝.mor₃ ≫
      (shiftFunctor C 1 ⋙ shiftFunctor C (-1)).map f.1 ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁ =
    (shiftFunctor C (-1)).map X✝.mor₃ ≫
      (shiftFunctor C (-1)).map ((shiftFunctor C 1).map f.hom₁) ≫ (shiftFunctorCompIsoId C 1 (-1) ⋯).hom.app Y✝.obj₁
state_after: no goals
tactic: rfl
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ X✝.invRotate.mor₃ ≫ (shiftFunctor C 1).map ((shiftFunctor C (-1)).map f.hom₃) = f.hom₂ ≫ Y✝.invRotate.mor₃
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ X✝.mor₂ ≫ (𝟭 C).map f.hom₃ ≫ (shiftEquiv C 1).counitIso.inv.app Y✝.obj₃ =
    X✝.mor₂ ≫ f.hom₃ ≫ (shiftEquiv C 1).counitIso.inv.app Y✝.3
tactic: erw [← reassoc_of% f.comm₂, Category.assoc, ← NatTrans.naturality]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
inst✝ : HasShift C ℤ
X : C
X✝ Y✝ : Triangle C
f : X✝ ⟶ Y✝
⊢ X✝.mor₂ ≫ (𝟭 C).map f.hom₃ ≫ (shiftEquiv C 1).counitIso.inv.app Y✝.obj₃ =
    X✝.mor₂ ≫ f.hom₃ ≫ (shiftEquiv C 1).counitIso.inv.app Y✝.3
state_after: no goals
tactic: rfl