-- Lean 4 proof step from Mathlib.CategoryTheory.Triangulated.Triangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasZeroObject.{v_1, u_1} C
inst_3 : HasShift.{v_1, u_1, 0} C ℤ
inst_4 : ∀ (n : ℤ), Functor.Additive.{v_1, u_1, v_1, u_1} (shiftFunctor C n)
inst_5 : Pretriangulated.{v_1, u_1} C
X₁ X₂ X₃ Z₁₂ Z₂₃ Z₁₃ : C
u₁₂ : X₁ ⟶ X₂
u₂₃ : X₂ ⟶ X₃
u₁₃ : X₁ ⟶ X₃
comm : u₁₂ ≫ u₂₃ = u₁₃
v₁₂ : X₂ ⟶ Z₁₂
w₁₂ : Z₁₂ ⟶ Functor.obj.{v_1, v_1, u_1, u_1} (shiftFunctor C (A := ℤ) 1) X₁
h₁₂ :
  Membership.mem (γ := Set (Triangle.{v_1, u_1} C)) (@distinguishedTriangles _ _ inst_2 _ inst_1 inst_4 _)
    (Triangle.mk u₁₂ v₁₂ w₁₂)
v₂₃ : X₃ ⟶ Z₂₃
w₂₃ : Z₂₃ ⟶ Functor.obj.{v_1, v_1, u_1, u_1} (shiftFunctor C (A := ℤ) 1) X₂
h₂₃ :
  Membership.mem (γ := Set (Triangle.{v_1, u_1} C)) (@distinguishedTriangles _ _ inst_2 _ inst_1 inst_4 _)
    (Triangle.mk u₂₃ v₂₃ w₂₃)
v₁₃ : X₃ ⟶ Z₁₃
w₁₃ : Z₁₃ ⟶ Functor.obj.{v_1, v_1, u_1, u_1} (shiftFunctor C (A := ℤ) 1) X₁
h₁₃ :
  Membership.mem (γ := Set (Triangle.{v_1, u_1} C)) (@distinguishedTriangles _ _ inst_2 _ inst_1 inst_4 _)
    (Triangle.mk u₁₃ v₁₃ w₁₃)
h : Octahedron comm h₁₂ h₂₃ h₁₃
X₁' X₂' X₃' Z₁₂' Z₂₃' Z₁₃' : C
u₁₂' : X₁' ⟶ X₂'
u₂₃' : X₂' ⟶ X₃'
u₁₃' : X₁' ⟶ X₃'
comm' : u₁₂' ≫ u₂₃' = u₁₃'
e₁ : X₁ ≅ X₁'
e₂ : X₂ ≅ X₂'
e₃ : X₃ ≅ X₃'
comm₁₂ : u₁₂ ≫ e₂.hom = e₁.hom ≫ u₁₂'
comm₂₃ : u₂₃ ≫ e₃.hom = e₂.hom ≫ u₂₃'
v₁₂' : X₂' ⟶ Z₁₂'
w₁₂' : Z₁₂' ⟶ Functor.obj.{v_1, v_1, u_1, u_1} (shiftFunctor C (A := ℤ) 1) X₁'
h₁₂' :
  Membership.mem (γ := Set (Triangle.{v_1, u_1} C)) (@distinguishedTriangles _ _ inst_2 _ inst_1 inst_4 _)
    (Triangle.mk u₁₂' v₁₂' w₁₂')
v₂₃' : X₃' ⟶ Z₂₃'
w₂₃' : Z₂₃' ⟶ Functor.obj.{v_1, v_1, u_1, u_1} (shiftFunctor C (A := ℤ) 1) X₂'
h₂₃' :
  Membership.mem (γ := Set (Triangle.{v_1, u_1} C)) (@distinguishedTriangles _ _ inst_2 _ inst_1 inst_4 _)
    (Triangle.mk u₂₃' v₂₃' w₂₃')
v₁₃' : X₃' ⟶ Z₁₃'
w₁₃' : Z₁₃' ⟶ Functor.obj.{v_1, v_1, u_1, u_1} (shiftFunctor C (A := ℤ) 1) X₁'
h₁₃' :
  Membership.mem (γ := Set (Triangle.{v_1, u_1} C)) (@distinguishedTriangles _ _ inst_2 _ inst_1 inst_4 _)
    (Triangle.mk u₁₃' v₁₃' w₁₃')
H : Octahedron comm' h₁₂' h₂₃' h₁₃'
iso₁₂ : Triangle.mk u₁₂ v₁₂ w₁₂ ≅ Triangle.mk u₁₂' v₁₂' w₁₂' :=
  isoTriangleOfIso₁₂ (Triangle.mk u₁₂ v₁₂ w₁₂) (Triangle.mk u₁₂' v₁₂' w₁₂') h₁₂ h₁₂' e₁ e₂ comm₁₂
iso₂₃ : Triangle.mk u₂₃ v₂₃ w₂₃ ≅ Triangle.mk u₂₃' v₂₃' w₂₃' :=
  isoTriangleOfIso₁₂ (Triangle.mk u₂₃ v₂₃ w₂₃) (Triangle.mk u₂₃' v₂₃' w₂₃') h₂₃ h₂₃' e₂ e₃ comm₂₃
iso₁₃ : Triangle.mk u₁₃ v₁₃ w₁₃ ≅ Triangle.mk u₁₃' v₁₃' w₁₃' :=
  isoTriangleOfIso₁₂ (Triangle.mk u₁₃ v₁₃ w₁₃) (Triangle.mk u₁₃' v₁₃' w₁₃') h₁₃ h₁₃' e₁ e₃ ⋯
eq₁₂ : (Triangle.mk u₁₂ v₁₂ w₁₂).mor₂ ≫ iso₁₂.hom.hom₃ = iso₁₂.hom.hom₂ ≫ (Triangle.mk u₁₂' v₁₂' w₁₂').mor₂
eq₁₂' :
  (Triangle.mk u₁₂ v₁₂ w₁₂).mor₃ ≫ Functor.map (shiftFunctor C (A := ℤ) 1) iso₁₂.hom.hom₁ =
    iso₁₂.hom.hom₃ ≫ (Triangle.mk u₁₂' v₁₂' w₁₂').mor₃
eq₁₃ : (Triangle.mk u₁₃ v₁₃ w₁₃).mor₂ ≫ iso₁₃.hom.hom₃ = iso₁₃.hom.hom₂ ≫ (Triangle.mk u₁₃' v₁₃' w₁₃').mor₂
eq₁₃' :
  (Triangle.mk u₁₃ v₁₃ w₁₃).mor₃ ≫ Functor.map (shiftFunctor C (A := ℤ) 1) iso₁₃.hom.hom₁ =
    iso₁₃.hom.hom₃ ≫ (Triangle.mk u₁₃' v₁₃' w₁₃').mor₃
eq₂₃ : (Triangle.mk u₂₃ v₂₃ w₂₃).mor₂ ≫ iso₂₃.hom.hom₃ = iso₂₃.hom.hom₂ ≫ (Triangle.mk u₂₃' v₂₃' w₂₃').mor₂
eq₂₃' :
  (Triangle.mk u₂₃ v₂₃ w₂₃).mor₃ ≫ Functor.map (shiftFunctor C (A := ℤ) 1) iso₂₃.hom.hom₁ =
    iso₂₃.hom.hom₃ ≫ (Triangle.mk u₂₃' v₂₃' w₂₃').mor₃
rel₁₂ :
  (Triangle.mk u₁₂' v₁₂' w₁₂').mor₂ ≫ H.triangleMorphism₁.hom₃ =
    H.triangleMorphism₁.hom₂ ≫ (Triangle.mk u₁₃' v₁₃' w₁₃').mor₂
rel₁₃ :
  (Triangle.mk u₁₂' v₁₂' w₁₂').mor₃ ≫ Functor.map (shiftFunctor C (A := ℤ) 1) H.triangleMorphism₁.hom₁ =
    H.triangleMorphism₁.hom₃ ≫ (Triangle.mk u₁₃' v₁₃' w₁₃').mor₃
⊢ Octahedron comm h₁₂ h₂₃ h₁₃
have rel₂₂ : (Triangle.mk u₁₃' v₁₃' w₁₃').mor₂ ≫ H.triangleMorphism₂.hom₃ =
  H.triangleMorphism₂.hom₂ ≫ (Triangle.mk u₂₃' v₂₃' w₂₃').mor₂
Tactic: have rel₂₂ := H.triangleMorphism₂.comm₂