Theorem: CategoryTheory.Pretriangulated.TriangleOpEquivalence.unitIso_inv_app
File: Mathlib/CategoryTheory/Triangulated/Opposite.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.135729, u_1} C
inst✝ : HasShift C ℤ
T : (Triangle C)ᵒᵖ
⊢ (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
          (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
            (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).mor₁ ≫
      (Iso.refl
          (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
              (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₂).hom =
    (Iso.refl
          (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
              (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₁).hom ≫
      (Opposite.unop T).mor₁
state_after: no goals
tactic: aesop_cat
state_before: C : Type u_1
inst✝¹ : Category.{?u.135729, u_1} C
inst✝ : HasShift C ℤ
T : (Triangle C)ᵒᵖ
⊢ (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
          (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
            (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).mor₂ ≫
      (Iso.refl
          (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
              (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₃).hom =
    (Iso.refl
          (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
              (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₂).hom ≫
      (Opposite.unop T).mor₂
state_after: no goals
tactic: aesop_cat
state_before: C : Type u_1
inst✝¹ : Category.{?u.135729, u_1} C
inst✝ : HasShift C ℤ
T : (Triangle C)ᵒᵖ
⊢ ((Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
            (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
              (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).mor₃ ≫
        (shiftFunctor C 1).map
          (Iso.refl
              (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                  (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                    (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₁).hom).op =
    ((Iso.refl
            (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                  (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₃).hom ≫
        (Opposite.unop T).mor₃).op
state_after: no goals
tactic: simp [shift_unop_opShiftFunctorEquivalence_counitIso_inv_app]
state_before: C : Type u_1
inst✝¹ : Category.{?u.135729, u_1} C
inst✝ : HasShift C ℤ
T₁ T₂ : (Triangle C)ᵒᵖ
f : T₁ ⟶ T₂
⊢ ((𝟭 (Triangle C)ᵒᵖ).map f ≫
        ((fun T =>
              ((Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                      (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                        (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).isoMk
                  (Opposite.unop T)
                  (Iso.refl
                    (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                        (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                          (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₁)
                  (Iso.refl
                    (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                        (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                          (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₂)
                  (Iso.refl
                    (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                        (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                          (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₃)
                  ⋯ ⋯ ⋯).op)
            T₂).hom).unop =
    (((fun T =>
              ((Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                      (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                        (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).isoMk
                  (Opposite.unop T)
                  (Iso.refl
                    (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                        (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                          (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₁)
                  (Iso.refl
                    (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                        (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                          (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₂)
                  (Iso.refl
                    (Triangle.mk ((functor C).obj T).mor₂.unop ((functor C).obj T).mor₁.unop
                        (((opShiftFunctorEquivalence C 1).unitIso.inv.app ((functor C).obj T).obj₁).unop ≫
                          (shiftFunctor C 1).map ((functor C).obj T).mor₃.unop)).obj₃)
                  ⋯ ⋯ ⋯).op)
            T₁).hom ≫
        (functor C ⋙ inverse C).map f).unop
state_after: no goals
tactic: aesop_cat