Theorem: CategoryTheory.Pretriangulated.opShiftFunctorEquivalence_functor
File: Mathlib/CategoryTheory/Triangulated/Opposite.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ ((shiftFunctor Cᵒᵖ n).map
          ((NatIso.op (shiftFunctorCompIsoId C (-n) n ⋯) ≪≫
                  isoWhiskerRight (shiftFunctorOpIso C n (-n) ⋯).symm (shiftFunctor C n).op).hom.app
            X) ≫
        (isoWhiskerLeft (shiftFunctor C n).op (shiftFunctorOpIso C n (-n) ⋯) ≪≫
                NatIso.op (shiftFunctorCompIsoId C n (-n) ⋯).symm).hom.app
          ((shiftFunctor Cᵒᵖ n).obj X)).unop =
    (𝟙 ((shiftFunctor Cᵒᵖ n).obj X)).unop
state_after: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ ((shiftFunctorCompIsoId C n (-n) ⋯).inv.app (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X)) ≫
        𝟙
          (Opposite.unop
            ((shiftFunctor Cᵒᵖ n).obj
              (Opposite.op ((shiftFunctor C n).obj (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X))))))) ≫
      ((shiftFunctor Cᵒᵖ n).map
          (((shiftFunctorCompIsoId C (-n) n ⋯).hom.app (Opposite.unop X)).op ≫
            ((shiftFunctor C n).map (𝟙 ((shiftFunctor Cᵒᵖ n).obj X)).unop).op)).unop =
    𝟙 (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X))
tactic: dsimp [shiftFunctorOpIso]
state_before: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ ((shiftFunctorCompIsoId C n (-n) ⋯).inv.app (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X)) ≫
        𝟙
          (Opposite.unop
            ((shiftFunctor Cᵒᵖ n).obj
              (Opposite.op ((shiftFunctor C n).obj (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X))))))) ≫
      ((shiftFunctor Cᵒᵖ n).map
          (((shiftFunctorCompIsoId C (-n) n ⋯).hom.app (Opposite.unop X)).op ≫
            ((shiftFunctor C n).map (𝟙 ((shiftFunctor Cᵒᵖ n).obj X)).unop).op)).unop =
    𝟙 (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X))
state_after: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ (shiftFunctorCompIsoId C n (-n) ⋯).inv.app (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X)) ≫
      ((shiftFunctor Cᵒᵖ n).map ((shiftFunctorCompIsoId C (-n) n ⋯).hom.app (Opposite.unop X)).op).unop =
    𝟙 (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X))
tactic: erw [comp_id, Functor.map_id, comp_id]
state_before: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ (shiftFunctorCompIsoId C n (-n) ⋯).inv.app (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X)) ≫
      ((shiftFunctor Cᵒᵖ n).map ((shiftFunctorCompIsoId C (-n) n ⋯).hom.app (Opposite.unop X)).op).unop =
    𝟙 (Opposite.unop ((shiftFunctor Cᵒᵖ n).obj X))
state_after: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ (shiftFunctorCompIsoId C n (-n) ⋯).inv.app ((shiftFunctor C (-n)).obj (Opposite.unop X)) ≫
      (shiftFunctor C (-n)).map ((shiftFunctorCompIsoId C (-n) n ⋯).hom.app (Opposite.unop X)) =
    𝟙 ((𝟭 C).obj ((shiftFunctor C (-n)).obj (Opposite.unop X)))
tactic: change (shiftFunctorCompIsoId C n (-n) (add_neg_self n)).inv.app (X.unop⟦-n⟧) ≫
      ((shiftFunctorCompIsoId C (-n) n (neg_add_self n)).hom.app X.unop)⟦-n⟧' = 𝟙 _
state_before: C : Type u_1
inst✝¹ : Category.{?u.61456, u_1} C
inst✝ : HasShift C ℤ
n : ℤ
X : Cᵒᵖ
⊢ (shiftFunctorCompIsoId C n (-n) ⋯).inv.app ((shiftFunctor C (-n)).obj (Opposite.unop X)) ≫
      (shiftFunctor C (-n)).map ((shiftFunctorCompIsoId C (-n) n ⋯).hom.app (Opposite.unop X)) =
    𝟙 ((𝟭 C).obj ((shiftFunctor C (-n)).obj (Opposite.unop X)))
state_after: no goals
tactic: rw [shift_shiftFunctorCompIsoId_neg_add_self_hom_app n X.unop, Iso.inv_hom_id_app]