category_theory.triangulated.pretriangulatedMathlib.CategoryTheory.Triangulated.Pretriangulated

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -52,7 +52,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
 
 #print CategoryTheory.Pretriangulated /-
 /- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
 * Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -97,7 +97,7 @@ variable [hC : Pretriangulated C]
 
 notation:20 "dist_triang " C => distinguishedTriangles C
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.rot_of_distTriang /-
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
@@ -106,7 +106,7 @@ theorem rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_t
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_distTriang
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.inv_rot_of_distTriang /-
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
@@ -116,7 +116,7 @@ theorem inv_rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_distTriang
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂ /-
 /-- Given any distinguished triangle
 ```
@@ -135,7 +135,7 @@ theorem comp_distTriang_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mor
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃ /-
 /-- Given any distinguished triangle
 ```
@@ -150,7 +150,7 @@ theorem comp_distTriang_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁ /-
 /-- Given any distinguished triangle
 ```
Diff
@@ -51,7 +51,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
 #print CategoryTheory.Pretriangulated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
Diff
@@ -51,7 +51,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
 #print CategoryTheory.Pretriangulated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
Diff
@@ -98,26 +98,26 @@ variable [hC : Pretriangulated C]
 notation:20 "dist_triang " C => distinguishedTriangles C
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
+#print CategoryTheory.Pretriangulated.rot_of_distTriang /-
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
-theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
+theorem rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
   (rotate_distinguished_triangle T).mp H
-#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_distTriang
 -/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
+#print CategoryTheory.Pretriangulated.inv_rot_of_distTriang /-
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
-theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
+theorem inv_rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
   (rotate_distinguished_triangle T.invRotate).mpr
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
-#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_distTriang
 -/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
+#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂ /-
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -126,17 +126,17 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
 the composition `f ≫ g = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
-theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mor₁ ≫ T.mor₂ = 0 :=
+theorem comp_distTriang_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mor₁ ≫ T.mor₂ = 0 :=
   by
   obtain ⟨c, hc⟩ :=
     complete_distinguished_triangle_morphism _ _ (contractible_distinguished T.obj₁) H (𝟙 T.obj₁)
       T.mor₁ rfl
   simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂
 -/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
+#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃ /-
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -145,13 +145,13 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
 the composition `g ≫ h = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
-theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor₂ ≫ T.mor₃ = 0 :=
-  comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+theorem comp_distTriang_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor₂ ≫ T.mor₃ = 0 :=
+  comp_distTriang_mor_zero₁₂ C T.rotate (rot_of_distTriang C T H)
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃
 -/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
+#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁ /-
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -160,12 +160,12 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
 the composition `h ≫ f⟦1⟧ = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
-theorem comp_dist_triangle_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
+theorem comp_distTriang_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
     T.mor₃ ≫ (shiftEquiv C 1).Functor.map T.mor₁ = 0 :=
   by
-  have H₂ := rot_of_dist_triangle C T.rotate (rot_of_dist_triangle C T H)
+  have H₂ := rot_of_distTriang C T.rotate (rot_of_distTriang C T H)
   simpa using comp_dist_triangle_mor_zero₁₂ C T.rotate.rotate H₂
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁
 -/
 
 /-
Diff
@@ -3,9 +3,9 @@ Copyright (c) 2021 Luke Kershaw. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
 -/
-import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathbin.CategoryTheory.Shift.Basic
-import Mathbin.CategoryTheory.Triangulated.Rotate
+import CategoryTheory.Preadditive.AdditiveFunctor
+import CategoryTheory.Shift.Basic
+import CategoryTheory.Triangulated.Rotate
 
 #align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
 
@@ -51,8 +51,8 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
 #print CategoryTheory.Pretriangulated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
 * Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -97,7 +97,7 @@ variable [hC : Pretriangulated C]
 
 notation:20 "dist_triang " C => distinguishedTriangles C
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
@@ -106,7 +106,7 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
@@ -116,7 +116,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
 /-- Given any distinguished triangle
 ```
@@ -135,7 +135,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
 /-- Given any distinguished triangle
 ```
@@ -150,7 +150,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
 /-- Given any distinguished triangle
 ```
Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2021 Luke Kershaw. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
-
-! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
 import Mathbin.CategoryTheory.Shift.Basic
 import Mathbin.CategoryTheory.Triangulated.Rotate
 
+#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
+
 /-!
 # Pretriangulated Categories
 
@@ -55,7 +52,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
 
 #print CategoryTheory.Pretriangulated /-
 /- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
 * Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -100,7 +97,7 @@ variable [hC : Pretriangulated C]
 
 notation:20 "dist_triang " C => distinguishedTriangles C
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
@@ -109,7 +106,7 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
@@ -119,7 +116,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
 /-- Given any distinguished triangle
 ```
@@ -138,7 +135,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
 /-- Given any distinguished triangle
 ```
@@ -153,7 +150,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 #print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
 /-- Given any distinguished triangle
 ```
Diff
@@ -53,7 +53,8 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
 variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+#print CategoryTheory.Pretriangulated /-
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
@@ -91,32 +92,35 @@ class Pretriangulated where
       (a : T₁.obj₁ ⟶ T₂.obj₁) (b : T₁.obj₂ ⟶ T₂.obj₂) (comm₁ : T₁.mor₁ ≫ b = a ≫ T₂.mor₁),
       ∃ c : T₁.obj₃ ⟶ T₂.obj₃, T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧ T₁.mor₃ ≫ a⟦1⟧' = c ≫ T₂.mor₃
 #align category_theory.pretriangulated CategoryTheory.Pretriangulated
+-/
 
 namespace Pretriangulated
 
 variable [hC : Pretriangulated C]
 
-include hC
-
--- mathport name: «exprdist_triang »
 notation:20 "dist_triang " C => distinguishedTriangles C
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
 theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
   (rotate_distinguished_triangle T).mp H
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
 theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
   (rotate_distinguished_triangle T.invRotate).mpr
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -132,8 +136,10 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
       T.mor₁ rfl
   simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -145,8 +151,10 @@ See <https://stacks.math.columbia.edu/tag/0146>
 theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor₂ ≫ T.mor₃ = 0 :=
   comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -161,6 +169,7 @@ theorem comp_dist_triangle_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
   have H₂ := rot_of_dist_triangle C T.rotate (rot_of_dist_triangle C T H)
   simpa using comp_dist_triangle_mor_zero₁₂ C T.rotate.rotate H₂
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+-/
 
 /-
 TODO: If `C` is pretriangulated with respect to a shift,
Diff
@@ -54,7 +54,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
 /- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
 * Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -101,14 +101,14 @@ include hC
 -- mathport name: «exprdist_triang »
 notation:20 "dist_triang " C => distinguishedTriangles C
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
 theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
   (rotate_distinguished_triangle T).mp H
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
 theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
@@ -116,7 +116,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -133,7 +133,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
   simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -146,7 +146,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
   comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
       f       g       h
Diff
@@ -53,7 +53,7 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
 variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
Diff
@@ -83,7 +83,7 @@ class Pretriangulated where
   contractible_distinguished : ∀ X : C, contractibleTriangle X ∈ distinguished_triangles
   distinguished_cocone_triangle :
     ∀ (X Y : C) (f : X ⟶ Y),
-      ∃ (Z : C)(g : Y ⟶ Z)(h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguished_triangles
+      ∃ (Z : C) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguished_triangles
   rotate_distinguished_triangle :
     ∀ T : Triangle C, T ∈ distinguished_triangles ↔ T.rotate ∈ distinguished_triangles
   complete_distinguished_triangle_morphism :
Diff
@@ -53,12 +53,6 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
 variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
-/- warning: category_theory.pretriangulated -> CategoryTheory.Pretriangulated is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)], Sort.{max (succ u2) (succ u1)}
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1], Sort.{max (succ u2) (succ u1)}
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated CategoryTheory.Pretriangulatedₓ'. -/
 /- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
@@ -107,12 +101,6 @@ include hC
 -- mathport name: «exprdist_triang »
 notation:20 "dist_triang " C => distinguishedTriangles C
 
-/- warning: category_theory.pretriangulated.rot_of_dist_triangle -> CategoryTheory.Pretriangulated.rot_of_dist_triangle is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 hC) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangleₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
@@ -120,12 +108,6 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
   (rotate_distinguished_triangle T).mp H
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
 
-/- warning: category_theory.pretriangulated.inv_rot_of_dist_triangle -> CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangleₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
@@ -134,12 +116,6 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
 
-/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T))))))
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)))))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
@@ -157,12 +133,6 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
   simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
 
-/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)))))))
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))))))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
@@ -176,9 +146,6 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
   comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
-/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
Diff
@@ -177,10 +177,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
 /- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)))))))
-but is expected to have type
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
Diff
@@ -59,7 +59,7 @@ lean 3 declaration is
 but is expected to have type
   forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1], Sort.{max (succ u2) (succ u1)}
 Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated CategoryTheory.Pretriangulatedₓ'. -/
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
 
 ! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
+! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -15,6 +15,9 @@ import Mathbin.CategoryTheory.Triangulated.Rotate
 /-!
 # Pretriangulated Categories
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file contains the definition of pretriangulated categories and triangulated functors
 between them.
 
Diff
@@ -50,6 +50,12 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
 variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
+/- warning: category_theory.pretriangulated -> CategoryTheory.Pretriangulated is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)], Sort.{max (succ u2) (succ u1)}
+but is expected to have type
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1], Sort.{max (succ u2) (succ u1)}
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated CategoryTheory.Pretriangulatedₓ'. -/
 /- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
@@ -98,6 +104,12 @@ include hC
 -- mathport name: «exprdist_triang »
 notation:20 "dist_triang " C => distinguishedTriangles C
 
+/- warning: category_theory.pretriangulated.rot_of_dist_triangle -> CategoryTheory.Pretriangulated.rot_of_dist_triangle is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
+but is expected to have type
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 hC) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangleₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
@@ -105,6 +117,12 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
   (rotate_distinguished_triangle T).mp H
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
 
+/- warning: category_theory.pretriangulated.inv_rot_of_dist_triangle -> CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
+but is expected to have type
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangleₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
@@ -113,6 +131,12 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
 
+/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T))))))
+but is expected to have type
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)))))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
@@ -130,6 +154,12 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
   simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
 
+/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)))))))
+but is expected to have type
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
@@ -143,6 +173,12 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
   comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
+/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)))))))
+but is expected to have type
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
Diff
@@ -4,12 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
 
 ! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 19786714ebe478f40b503acb4705fb058ba47303
+! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathbin.CategoryTheory.Shift
+import Mathbin.CategoryTheory.Shift.Basic
 import Mathbin.CategoryTheory.Triangulated.Rotate
 
 /-!
@@ -163,98 +163,6 @@ theorem comp_dist_triangle_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
 TODO: If `C` is pretriangulated with respect to a shift,
 then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
 -/
-omit hC
-
-/--
-The underlying structure of a triangulated functor between pretriangulated categories `C` and `D`
-is a functor `F : C ⥤ D` together with given functorial isomorphisms `ξ X : F(X⟦1⟧) ⟶ F(X)⟦1⟧`.
--/
-structure TriangulatedFunctorStruct extends C ⥤ D where
-  commShift : shiftFunctor C (1 : ℤ) ⋙ to_functor ≅ to_functor ⋙ shiftFunctor D (1 : ℤ)
-#align category_theory.pretriangulated.triangulated_functor_struct CategoryTheory.Pretriangulated.TriangulatedFunctorStruct
-
-namespace TriangulatedFunctorStruct
-
-/-- The identity `triangulated_functor_struct`. -/
-def id : TriangulatedFunctorStruct C C where
-  obj X := X
-  map _ _ f := f
-  commShift := by rfl
-#align category_theory.pretriangulated.triangulated_functor_struct.id CategoryTheory.Pretriangulated.TriangulatedFunctorStruct.id
-
-instance : Inhabited (TriangulatedFunctorStruct C C) :=
-  ⟨id C⟩
-
-variable {C D}
-
-/-- Given a `triangulated_functor_struct` we can define a functor from triangles of `C` to
-triangles of `D`.
--/
-@[simps]
-def mapTriangle (F : TriangulatedFunctorStruct C D) : Triangle C ⥤ Triangle D
-    where
-  obj T := Triangle.mk (F.map T.mor₁) (F.map T.mor₂) (F.map T.mor₃ ≫ F.commShift.Hom.app T.obj₁)
-  map S T f :=
-    { hom₁ := F.map f.hom₁
-      hom₂ := F.map f.hom₂
-      hom₃ := F.map f.hom₃
-      comm₁' := by
-        dsimp
-        simp only [← F.to_functor.map_comp, f.comm₁]
-      comm₂' := by
-        dsimp
-        simp only [← F.to_functor.map_comp, f.comm₂]
-      comm₃' := by
-        dsimp
-        erw [category.assoc, ← F.comm_shift.hom.naturality]
-        simp only [functor.comp_map, ← F.to_functor.map_comp_assoc, f.comm₃] }
-#align category_theory.pretriangulated.triangulated_functor_struct.map_triangle CategoryTheory.Pretriangulated.TriangulatedFunctorStruct.mapTriangle
-
-end TriangulatedFunctorStruct
-
-include hC
-
-variable (C D) [Pretriangulated D]
-
-/-- A triangulated functor between pretriangulated categories `C` and `D` is a functor `F : C ⥤ D`
-together with given functorial isomorphisms `ξ X : F(X⟦1⟧) ⟶ F(X)⟦1⟧` such that for every
-distinguished triangle `(X,Y,Z,f,g,h)` of `C`, the triangle
-`(F(X), F(Y), F(Z), F(f), F(g), F(h) ≫ (ξ X))` is a distinguished triangle of `D`.
-See <https://stacks.math.columbia.edu/tag/014V>
--/
-structure TriangulatedFunctor extends TriangulatedFunctorStruct C D where
-  map_distinguished' :
-    ∀ T : Triangle C,
-      T ∈ (dist_triang C) → to_triangulated_functor_struct.mapTriangle.obj T ∈ (dist_triang D)
-#align category_theory.pretriangulated.triangulated_functor CategoryTheory.Pretriangulated.TriangulatedFunctor
-
-instance : Inhabited (TriangulatedFunctor C C) :=
-  ⟨{  obj := fun X => X
-      map := fun _ _ f => f
-      commShift := by rfl
-      map_distinguished' := by
-        rintro ⟨_, _, _, _⟩ Tdt
-        dsimp at *
-        rwa [category.comp_id] }⟩
-
-variable {C D}
-
-/--
-Given a `triangulated_functor` we can define a functor from triangles of `C` to triangles of `D`.
--/
-@[simps]
-def TriangulatedFunctor.mapTriangle (F : TriangulatedFunctor C D) : Triangle C ⥤ Triangle D :=
-  F.toTriangulatedFunctorStruct.mapTriangle
-#align category_theory.pretriangulated.triangulated_functor.map_triangle CategoryTheory.Pretriangulated.TriangulatedFunctor.mapTriangle
-
-/-- Given a `triangulated_functor` and a distinguished triangle `T` of `C`, then the triangle it
-maps onto in `D` is also distinguished.
--/
-theorem TriangulatedFunctor.map_distinguished (F : TriangulatedFunctor C D) (T : Triangle C)
-    (h : T ∈ (dist_triang C)) : F.mapTriangle.obj T ∈ (dist_triang D) :=
-  F.map_distinguished' T h
-#align category_theory.pretriangulated.triangulated_functor.map_distinguished CategoryTheory.Pretriangulated.TriangulatedFunctor.map_distinguished
-
 end Pretriangulated
 
 end CategoryTheory
Diff
@@ -51,7 +51,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
   [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
 /- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
 * Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -98,14 +98,14 @@ include hC
 -- mathport name: «exprdist_triang »
 notation:20 "dist_triang " C => distinguishedTriangles C
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
 theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
   (rotate_distinguished_triangle T).mp H
 #align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
 theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
@@ -113,7 +113,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate 
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
 #align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -130,7 +130,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
   simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
       f       g       h
@@ -143,7 +143,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
   comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
 /-- Given any distinguished triangle
 ```
       f       g       h

Changes in mathlib4

mathlib3
mathlib4
feat(CategoryTheory/Triangulated): homological functors (#11759)

A functor F : C ⥤ A from a pretriangulated category to an abelian category is homological iff it sends distinguished triangles in C to exact sequences in A. In this PR, we define the corresponding type class F.IsHomological. If F is a homological functor, we introduce the strictly full triangulated subcategory F.homologicalKernel.

Diff
@@ -3,8 +3,9 @@ Copyright (c) 2021 Luke Kershaw. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw, Joël Riou
 -/
-import Mathlib.CategoryTheory.Triangulated.TriangleShift
+import Mathlib.Algebra.Homology.ShortComplex.Basic
 import Mathlib.CategoryTheory.Limits.Constructions.FiniteProductsOfBinaryProducts
+import Mathlib.CategoryTheory.Triangulated.TriangleShift
 
 #align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
 
@@ -158,6 +159,19 @@ theorem comp_distTriang_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C)
   simpa using comp_distTriang_mor_zero₁₂ T.rotate.rotate H₂
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁
 
+/-- The short complex `T.obj₁ ⟶ T.obj₂ ⟶ T.obj₃` attached to a distinguished triangle. -/
+@[simps]
+def shortComplexOfDistTriangle (T : Triangle C) (hT : T ∈ distTriang C) : ShortComplex C :=
+  ShortComplex.mk T.mor₁ T.mor₂ (comp_distTriang_mor_zero₁₂ _ hT)
+
+/-- The isomorphism between the short complex attached to
+two isomorphic distinguished triangles. -/
+@[simps!]
+def shortComplexOfDistTriangleIsoOfIso {T T' : Triangle C} (e : T ≅ T') (hT : T ∈ distTriang C) :
+    shortComplexOfDistTriangle T hT ≅ shortComplexOfDistTriangle T'
+      (isomorphic_distinguished _ hT _ e.symm) :=
+  ShortComplex.isoMk (Triangle.π₁.mapIso e) (Triangle.π₂.mapIso e) (Triangle.π₃.mapIso e)
+
 /-- Any morphism `Y ⟶ Z` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
 lemma distinguished_cocone_triangle₁ {Y Z : C} (g : Y ⟶ Z) :
     ∃ (X : C) (f : X ⟶ Y) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distTriang C := by
chore(CategoryTheory): make Functor.Full a Prop (#12449)

Before this PR, Functor.Full contained the data of the preimage of maps by a full functor F. This PR makes Functor.Full a proposition. This is to prevent any diamond to appear.

The lemma Functor.image_preimage is also renamed Functor.map_preimage.

Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>

Diff
@@ -188,8 +188,8 @@ lemma complete_distinguished_triangle_morphism₁ (T₁ T₂ : Triangle C)
   · apply (shiftFunctor C (1 : ℤ)).map_injective
     dsimp at ha₂
     rw [neg_comp, comp_neg, neg_inj] at ha₂
-    simpa only [Functor.map_comp, Functor.image_preimage] using ha₂
-  · simpa only [Functor.image_preimage] using ha₁
+    simpa only [Functor.map_comp, Functor.map_preimage] using ha₂
+  · simpa only [Functor.map_preimage] using ha₁
 
 /-- A commutative square involving the morphisms `mor₃` of two distinguished triangles
 can be extended as morphism of triangles -/
chore: Rename mul-div cancellation lemmas (#11530)

Lemma names around cancellation of multiplication and division are a mess.

This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero lemma name, the Group lemma, the AddGroup lemma name).

| Statement | New name | Old name | |

Diff
@@ -446,7 +446,7 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
     obtain ⟨x₁, hx₁⟩ : ∃ (x₁ : A ⟶ T.obj₁), x₁ ≫ φ.hom₁ = y₁ := ⟨y₁ ≫ inv φ.hom₁, by simp⟩
     refine' ⟨x₂ + x₁ ≫ T.mor₁, _⟩
     dsimp
-    rw [add_comp, assoc, φ.comm₁, reassoc_of% hx₁, ← hy₁, add_sub_cancel'_right]
+    rw [add_comp, assoc, φ.comm₁, reassoc_of% hx₁, ← hy₁, add_sub_cancel]
 
 lemma isIso₃_of_isIso₁₂ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
     (hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₂ : IsIso φ.hom₂) : IsIso φ.hom₃ :=
@@ -469,7 +469,7 @@ def binaryBiproductData (T : Triangle C) (hT : T ∈ distTriang C) (hT₀ : T.mo
     (total : fst ≫ T.mor₁ + T.mor₂ ≫ inr = 𝟙 T.obj₂) :
     BinaryBiproductData T.obj₁ T.obj₃ := by
   have : Mono T.mor₁ := T.mono₁ hT hT₀
-  have eq : fst ≫ T.mor₁ = 𝟙 T.obj₂ - T.mor₂ ≫ inr := by rw [← total, add_sub_cancel]
+  have eq : fst ≫ T.mor₁ = 𝟙 T.obj₂ - T.mor₂ ≫ inr := by rw [← total, add_sub_cancel_right]
   exact
     { bicone :=
       { pt := T.obj₂
@@ -612,7 +612,7 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
     have hb' : a - a' ≫ φ'.hom₃ = Pi.lift b ≫ (productTriangle T).mor₂ :=
       Limits.Pi.hom_ext _ _ (fun j => by rw [hb]; simp)
     have : (a' + (by exact Pi.lift b) ≫ T'.mor₂) ≫ φ'.hom₃ = a := by
-      rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel'_right]
+      rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel]
     exact ⟨_, this⟩
 
 lemma exists_iso_of_arrow_iso (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTriang C)
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -87,7 +87,7 @@ namespace Pretriangulated
 
 variable [∀ n : ℤ, Functor.Additive (CategoryTheory.shiftFunctor C n)] [hC : Pretriangulated C]
 
--- porting note: increased the priority so that we can write `T ∈ distTriang C`, and
+-- Porting note: increased the priority so that we can write `T ∈ distTriang C`, and
 -- not just `T ∈ (distTriang C)`
 /-- distinguished triangles in a pretriangulated category -/
 notation:60 "distTriang " C => @distinguishedTriangles C _ _ _ _ _ _
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -512,10 +512,10 @@ lemma exists_iso_binaryBiproduct_of_distTriang (T : Triangle C) (hT : T ∈ dist
   obtain ⟨fst, hfst⟩ := T.coyoneda_exact₂ hT (𝟙 T.obj₂ - T.mor₂ ≫ section_ T.mor₂) (by simp)
   let d := binaryBiproductData _ hT zero (section_ T.mor₂) (by simp) fst
     (by simp only [← hfst, sub_add_cancel])
-  refine' ⟨biprod.uniqueUpToIso _ _ d.isBilimit, ⟨_, by simp⟩⟩
+  refine' ⟨biprod.uniqueUpToIso _ _ d.isBilimit, ⟨_, by simp [d]⟩⟩
   ext
-  · simpa using d.bicone.inl_fst
-  · simpa using d.bicone.inl_snd
+  · simpa [d] using d.bicone.inl_fst
+  · simpa [d] using d.bicone.inl_snd
 
 lemma binaryBiproductTriangle_distinguished (X₁ X₂ : C) :
     binaryBiproductTriangle X₁ X₂ ∈ distTriang C := by
@@ -561,7 +561,7 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
   let T' := Triangle.mk f₁ f₂ f₃
   change T' ∈ distTriang C at hT'
   let φ : ∀ j, T' ⟶ T j := fun j => completeDistinguishedTriangleMorphism _ _
-    hT' (hT j) (Pi.π _ j) (Pi.π _ j) (by simp)
+    hT' (hT j) (Pi.π _ j) (Pi.π _ j) (by simp [f₁, T'])
   let φ' := productTriangle.lift _ φ
   have h₁ : φ'.hom₁ = 𝟙 _ := by aesop_cat
   have h₂ : φ'.hom₂ = 𝟙 _ := by aesop_cat
@@ -590,7 +590,7 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
     have hg'' := fun j => (T j).coyoneda_exact₂ (hT j) _ (hg' j)
     let α := fun j => (hg'' j).choose
     have hα : ∀ j, _ = α j ≫ _ := fun j => (hg'' j).choose_spec
-    have hg''' : g = Pi.lift α ≫ T'.mor₁ := by dsimp; ext j; rw [hα]; simp
+    have hg''' : g = Pi.lift α ≫ T'.mor₁ := by dsimp [f₁, T']; ext j; rw [hα]; simp
     rw [hg, hg''', assoc, comp_distTriang_mor_zero₁₂ _ hT', comp_zero]
   · intro a
     obtain ⟨a', ha'⟩ : ∃ (a' : A ⟶ Z), a' ≫ T'.mor₃ = a ≫ (productTriangle T).mor₃ := by
@@ -619,13 +619,13 @@ lemma exists_iso_of_arrow_iso (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTri
     (hT₂ : T₂ ∈ distTriang C) (e : Arrow.mk T₁.mor₁ ≅ Arrow.mk T₂.mor₁) :
     ∃ (e' : T₁ ≅ T₂), e'.hom.hom₁ = e.hom.left ∧ e'.hom.hom₂ = e.hom.right := by
   let φ := completeDistinguishedTriangleMorphism T₁ T₂ hT₁ hT₂ e.hom.left e.hom.right e.hom.w.symm
-  have : IsIso φ.hom₁ := by dsimp; infer_instance
-  have : IsIso φ.hom₂ := by dsimp; infer_instance
+  have : IsIso φ.hom₁ := by dsimp [φ]; infer_instance
+  have : IsIso φ.hom₂ := by dsimp [φ]; infer_instance
   have : IsIso φ.hom₃ := isIso₃_of_isIso₁₂ φ hT₁ hT₂ inferInstance inferInstance
   have : IsIso φ := by
     apply Triangle.isIso_of_isIsos
     all_goals infer_instance
-  exact ⟨asIso φ, by simp, by simp⟩
+  exact ⟨asIso φ, by simp [φ], by simp [φ]⟩
 
 /-- A choice of isomorphism `T₁ ≅ T₂` between two distinguished triangles
 when we are given two isomorphisms `e₁ : T₁.obj₁ ≅ T₂.obj₁` and `e₂ : T₁.obj₂ ≅ T₂.obj₂`. -/
feat(CategoryTheory/Triangulated): more API (#10527)

In this PR, it is shown that in order to show that a pretriangulated category is triangulated category, i.e. in order to check the octahedron axiom, it is possible to replace a given diagram by an isomorphic diagram. This shall be used in #9550 in order to show that the homotopy category of cochain complexes in an additive category is triangulated.

Diff
@@ -615,6 +615,33 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
       rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel'_right]
     exact ⟨_, this⟩
 
+lemma exists_iso_of_arrow_iso (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTriang C)
+    (hT₂ : T₂ ∈ distTriang C) (e : Arrow.mk T₁.mor₁ ≅ Arrow.mk T₂.mor₁) :
+    ∃ (e' : T₁ ≅ T₂), e'.hom.hom₁ = e.hom.left ∧ e'.hom.hom₂ = e.hom.right := by
+  let φ := completeDistinguishedTriangleMorphism T₁ T₂ hT₁ hT₂ e.hom.left e.hom.right e.hom.w.symm
+  have : IsIso φ.hom₁ := by dsimp; infer_instance
+  have : IsIso φ.hom₂ := by dsimp; infer_instance
+  have : IsIso φ.hom₃ := isIso₃_of_isIso₁₂ φ hT₁ hT₂ inferInstance inferInstance
+  have : IsIso φ := by
+    apply Triangle.isIso_of_isIsos
+    all_goals infer_instance
+  exact ⟨asIso φ, by simp, by simp⟩
+
+/-- A choice of isomorphism `T₁ ≅ T₂` between two distinguished triangles
+when we are given two isomorphisms `e₁ : T₁.obj₁ ≅ T₂.obj₁` and `e₂ : T₁.obj₂ ≅ T₂.obj₂`. -/
+@[simps! hom_hom₁ hom_hom₂ inv_hom₁ inv_hom₂]
+def isoTriangleOfIso₁₂ (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTriang C)
+    (hT₂ : T₂ ∈ distTriang C) (e₁ : T₁.obj₁ ≅ T₂.obj₁) (e₂ : T₁.obj₂ ≅ T₂.obj₂)
+    (comm : T₁.mor₁ ≫ e₂.hom = e₁.hom ≫ T₂.mor₁) : T₁ ≅ T₂ := by
+  have h := exists_iso_of_arrow_iso T₁ T₂ hT₁ hT₂ (Arrow.isoMk e₁ e₂ comm.symm)
+  exact Triangle.isoMk _ _ e₁ e₂ (Triangle.π₃.mapIso h.choose) comm (by
+    have eq := h.choose_spec.2
+    dsimp at eq ⊢
+    conv_rhs => rw [← eq, ← TriangleMorphism.comm₂]) (by
+    have eq := h.choose_spec.1
+    dsimp at eq ⊢
+    conv_lhs => rw [← eq, TriangleMorphism.comm₃])
+
 end Pretriangulated
 
 end CategoryTheory
feat(CategoryTheory): a product of distinguished triangles is distinguished (#7641)
Diff
@@ -531,6 +531,90 @@ lemma binaryProductTriangle_distinguished (X₁ X₂ : C) :
   isomorphic_distinguished _ (binaryBiproductTriangle_distinguished X₁ X₂) _
     (binaryProductTriangleIsoBinaryBiproductTriangle X₁ X₂)
 
+/-- A chosen extension of a commutative square into a morphism of distinguished triangles. -/
+@[simps hom₁ hom₂]
+def completeDistinguishedTriangleMorphism (T₁ T₂ : Triangle C)
+    (hT₁ : T₁ ∈ distTriang C) (hT₂ : T₂ ∈ distTriang C)
+    (a : T₁.obj₁ ⟶ T₂.obj₁) (b : T₁.obj₂ ⟶ T₂.obj₂) (comm : T₁.mor₁ ≫ b = a ≫ T₂.mor₁) :
+    T₁ ⟶ T₂ :=
+    have h := complete_distinguished_triangle_morphism _ _ hT₁ hT₂ a b comm
+    { hom₁ := a
+      hom₂ := b
+      hom₃ := h.choose
+      comm₁ := comm
+      comm₂ := h.choose_spec.1
+      comm₃ := h.choose_spec.2 }
+
+/-- A product of distinguished triangles is distinguished -/
+lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
+    (hT : ∀ j, T j ∈ distTriang C)
+    [HasProduct (fun j => (T j).obj₁)] [HasProduct (fun j => (T j).obj₂)]
+    [HasProduct (fun j => (T j).obj₃)] [HasProduct (fun j => (T j).obj₁⟦(1 : ℤ)⟧)] :
+    productTriangle T ∈ distTriang C := by
+  /- The proof proceeds by constructing a morphism of triangles
+    `φ' : T' ⟶ productTriangle T` with `T'` distinguished, and such that
+    `φ'.hom₁` and `φ'.hom₂` are identities. Then, it suffices to show that
+    `φ'.hom₃` is an isomorphism, which is achieved by using Yoneda's lemma
+    and diagram chases. -/
+  let f₁ := Pi.map (fun j => (T j).mor₁)
+  obtain ⟨Z, f₂, f₃, hT'⟩ := distinguished_cocone_triangle f₁
+  let T' := Triangle.mk f₁ f₂ f₃
+  change T' ∈ distTriang C at hT'
+  let φ : ∀ j, T' ⟶ T j := fun j => completeDistinguishedTriangleMorphism _ _
+    hT' (hT j) (Pi.π _ j) (Pi.π _ j) (by simp)
+  let φ' := productTriangle.lift _ φ
+  have h₁ : φ'.hom₁ = 𝟙 _ := by aesop_cat
+  have h₂ : φ'.hom₂ = 𝟙 _ := by aesop_cat
+  have : IsIso φ'.hom₁ := by rw [h₁]; infer_instance
+  have : IsIso φ'.hom₂ := by rw [h₂]; infer_instance
+  suffices IsIso φ'.hom₃ by
+    have : IsIso φ' := by
+      apply Triangle.isIso_of_isIsos
+      all_goals infer_instance
+    exact isomorphic_distinguished _ hT' _ (asIso φ').symm
+  refine' isIso_of_yoneda_map_bijective _ (fun A => ⟨_, _⟩)
+  /- the proofs by diagram chase start here -/
+  · suffices Mono φ'.hom₃ by
+      intro a₁ a₂ ha
+      simpa only [← cancel_mono φ'.hom₃] using ha
+    rw [mono_iff_cancel_zero]
+    intro A f hf
+    have hf' : f ≫ T'.mor₃ = 0 := by
+      rw [← cancel_mono (φ'.hom₁⟦1⟧'), zero_comp, assoc, φ'.comm₃, reassoc_of% hf, zero_comp]
+    obtain ⟨g, hg⟩ := T'.coyoneda_exact₃ hT' f hf'
+    have hg' : ∀ j, (g ≫ Pi.π _ j) ≫ (T j).mor₂ = 0 := fun j => by
+      have : g ≫ T'.mor₂ ≫ φ'.hom₃ ≫ Pi.π _ j = 0 :=
+        by rw [← reassoc_of% hg, reassoc_of% hf, zero_comp]
+      rw [φ'.comm₂_assoc, h₂, id_comp] at this
+      simpa using this
+    have hg'' := fun j => (T j).coyoneda_exact₂ (hT j) _ (hg' j)
+    let α := fun j => (hg'' j).choose
+    have hα : ∀ j, _ = α j ≫ _ := fun j => (hg'' j).choose_spec
+    have hg''' : g = Pi.lift α ≫ T'.mor₁ := by dsimp; ext j; rw [hα]; simp
+    rw [hg, hg''', assoc, comp_distTriang_mor_zero₁₂ _ hT', comp_zero]
+  · intro a
+    obtain ⟨a', ha'⟩ : ∃ (a' : A ⟶ Z), a' ≫ T'.mor₃ = a ≫ (productTriangle T).mor₃ := by
+      have zero : ((productTriangle T).mor₃) ≫ (shiftFunctor C 1).map T'.mor₁ = 0 := by
+        rw [← cancel_mono (φ'.hom₂⟦1⟧'), zero_comp, assoc, ← Functor.map_comp, φ'.comm₁, h₁,
+          id_comp, productTriangle.zero₃₁]
+        intro j
+        exact comp_distTriang_mor_zero₃₁ _ (hT j)
+      have ⟨g, hg⟩ := T'.coyoneda_exact₁ hT' (a ≫ (productTriangle T).mor₃) (by
+        rw [assoc, zero, comp_zero])
+      exact ⟨g, hg.symm⟩
+    have ha'' := fun (j : J) => (T j).coyoneda_exact₃ (hT j) ((a - a' ≫ φ'.hom₃) ≫ Pi.π _ j) (by
+      simp only [sub_comp, assoc]
+      erw [← (productTriangle.π T j).comm₃]
+      rw [← φ'.comm₃_assoc]
+      rw [reassoc_of% ha', sub_eq_zero, h₁, Functor.map_id, id_comp])
+    let b := fun j => (ha'' j).choose
+    have hb : ∀ j, _  = b j ≫ _ := fun j => (ha'' j).choose_spec
+    have hb' : a - a' ≫ φ'.hom₃ = Pi.lift b ≫ (productTriangle T).mor₂ :=
+      Limits.Pi.hom_ext _ _ (fun j => by rw [hb]; simp)
+    have : (a' + (by exact Pi.lift b) ≫ T'.mor₂) ≫ φ'.hom₃ = a := by
+      rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel'_right]
+    exact ⟨_, this⟩
+
 end Pretriangulated
 
 end CategoryTheory
feat: pretriangulated categories have finite biproducts (#7626)
Diff
@@ -1,9 +1,10 @@
 /-
 Copyright (c) 2021 Luke Kershaw. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
-Authors: Luke Kershaw
+Authors: Luke Kershaw, Joël Riou
 -/
 import Mathlib.CategoryTheory.Triangulated.TriangleShift
+import Mathlib.CategoryTheory.Limits.Constructions.FiniteProductsOfBinaryProducts
 
 #align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
 
@@ -457,10 +458,78 @@ lemma isIso₁_of_isIso₂₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
   isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_distTriang _ hT)
     (inv_rot_of_distTriang _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
 
-/-
-TODO: If `C` is pretriangulated with respect to a shift,
-then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
--/
+/-- Given a distinguished triangle `T` such that `T.mor₃ = 0` and the datum of morphisms
+`inr : T.obj₃ ⟶ T.obj₂` and `fst : T.obj₂ ⟶ T.obj₁` satisfying suitable relations, this
+is the binary biproduct data expressing that `T.obj₂` identifies to the binary
+biproduct of `T.obj₁` and `T.obj₃`.
+See also `exists_iso_binaryBiproduct_of_distTriang`. -/
+@[simps]
+def binaryBiproductData (T : Triangle C) (hT : T ∈ distTriang C) (hT₀ : T.mor₃ = 0)
+    (inr : T.obj₃ ⟶ T.obj₂) (inr_snd : inr ≫ T.mor₂ = 𝟙 _) (fst : T.obj₂ ⟶ T.obj₁)
+    (total : fst ≫ T.mor₁ + T.mor₂ ≫ inr = 𝟙 T.obj₂) :
+    BinaryBiproductData T.obj₁ T.obj₃ := by
+  have : Mono T.mor₁ := T.mono₁ hT hT₀
+  have eq : fst ≫ T.mor₁ = 𝟙 T.obj₂ - T.mor₂ ≫ inr := by rw [← total, add_sub_cancel]
+  exact
+    { bicone :=
+      { pt := T.obj₂
+        fst := fst
+        snd := T.mor₂
+        inl := T.mor₁
+        inr := inr
+        inl_fst := by
+          simp only [← cancel_mono T.mor₁, assoc, id_comp, eq, comp_sub, comp_id,
+            comp_distTriang_mor_zero₁₂_assoc _ hT, zero_comp, sub_zero]
+        inl_snd := comp_distTriang_mor_zero₁₂ _ hT
+        inr_fst := by
+          simp only [← cancel_mono T.mor₁, assoc, eq, comp_sub, reassoc_of% inr_snd,
+            comp_id, sub_self, zero_comp]
+        inr_snd := inr_snd }
+      isBilimit := isBinaryBilimitOfTotal _ total }
+
+instance : HasBinaryBiproducts C := ⟨fun X₁ X₃ => by
+  obtain ⟨X₂, inl, snd, mem⟩ := distinguished_cocone_triangle₂ (0 : X₃ ⟶ X₁⟦(1 : ℤ)⟧)
+  obtain ⟨inr : X₃ ⟶ X₂, inr_snd : 𝟙 _ = inr ≫ snd⟩ :=
+    Triangle.coyoneda_exact₃ _ mem (𝟙 X₃) (by simp)
+  obtain ⟨fst : X₂ ⟶ X₁, hfst : 𝟙 X₂ - snd ≫ inr = fst ≫ inl⟩ :=
+    Triangle.coyoneda_exact₂ _ mem (𝟙 X₂ - snd ≫ inr) (by
+      dsimp
+      simp only [sub_comp, assoc, id_comp, ← inr_snd, comp_id, sub_self])
+  refine' ⟨⟨binaryBiproductData _ mem rfl inr inr_snd.symm fst _⟩⟩
+  dsimp
+  simp only [← hfst, sub_add_cancel]⟩
+
+instance : HasFiniteProducts C := hasFiniteProducts_of_has_binary_and_terminal
+instance : HasFiniteCoproducts C := hasFiniteCoproducts_of_has_binary_and_initial
+instance : HasFiniteBiproducts C := HasFiniteBiproducts.of_hasFiniteProducts
+
+lemma exists_iso_binaryBiproduct_of_distTriang (T : Triangle C) (hT : T ∈ distTriang C)
+    (zero : T.mor₃ = 0) :
+    ∃ (e : T.obj₂ ≅ T.obj₁ ⊞ T.obj₃), T.mor₁ ≫ e.hom = biprod.inl ∧
+      T.mor₂ = e.hom ≫ biprod.snd := by
+  have := T.epi₂ hT zero
+  have := isSplitEpi_of_epi T.mor₂
+  obtain ⟨fst, hfst⟩ := T.coyoneda_exact₂ hT (𝟙 T.obj₂ - T.mor₂ ≫ section_ T.mor₂) (by simp)
+  let d := binaryBiproductData _ hT zero (section_ T.mor₂) (by simp) fst
+    (by simp only [← hfst, sub_add_cancel])
+  refine' ⟨biprod.uniqueUpToIso _ _ d.isBilimit, ⟨_, by simp⟩⟩
+  ext
+  · simpa using d.bicone.inl_fst
+  · simpa using d.bicone.inl_snd
+
+lemma binaryBiproductTriangle_distinguished (X₁ X₂ : C) :
+    binaryBiproductTriangle X₁ X₂ ∈ distTriang C := by
+  obtain ⟨Y, g, h, mem⟩ := distinguished_cocone_triangle₂ (0 : X₂ ⟶ X₁⟦(1 : ℤ)⟧)
+  obtain ⟨e, ⟨he₁, he₂⟩⟩ := exists_iso_binaryBiproduct_of_distTriang _ mem rfl
+  dsimp at he₁ he₂
+  refine' isomorphic_distinguished _ mem _ (Iso.symm _)
+  refine' Triangle.isoMk _ _ (Iso.refl _) e (Iso.refl _)
+    (by aesop_cat) (by aesop_cat) (by aesop_cat)
+
+lemma binaryProductTriangle_distinguished (X₁ X₂ : C) :
+    binaryProductTriangle X₁ X₂ ∈ distTriang C :=
+  isomorphic_distinguished _ (binaryBiproductTriangle_distinguished X₁ X₂) _
+    (binaryProductTriangleIsoBinaryBiproductTriangle X₁ X₂)
 
 end Pretriangulated
 
chore: remove nonterminal simp (#7580)

Removes nonterminal simps on lines looking like simp [...]

Diff
@@ -326,7 +326,7 @@ lemma isZero₂_iff : IsZero T.obj₂ ↔ (T.mor₁ = 0 ∧ T.mor₂ = 0) := by
 lemma isZero₁_iff : IsZero T.obj₁ ↔ (T.mor₁ = 0 ∧ T.mor₃ = 0) := by
   refine' (isZero₂_iff _ (inv_rot_of_distTriang _ hT)).trans _
   dsimp
-  simp [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
+  simp only [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
   tauto
 
 lemma isZero₃_iff : IsZero T.obj₃ ↔ (T.mor₂ = 0 ∧ T.mor₃ = 0) := by
chore(CategoryTheory.Triangulated): use more camelCase for distTriang (#7643)

This PR renames lemmas like rot_of_dist_triang as rot_of_distTriang.

Diff
@@ -100,17 +100,17 @@ lemma distinguished_iff_of_iso {T₁ T₂ : Triangle C} (e : T₁ ≅ T₂) :
 
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
-theorem rot_of_dist_triangle (T : Triangle C) (H : T ∈ distTriang C) : T.rotate ∈ distTriang C :=
+theorem rot_of_distTriang (T : Triangle C) (H : T ∈ distTriang C) : T.rotate ∈ distTriang C :=
   (rotate_distinguished_triangle T).mp H
-#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_distTriang
 
 /-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
 -/
-theorem inv_rot_of_dist_triangle (T : Triangle C) (H : T ∈ distTriang C) :
+theorem inv_rot_of_distTriang (T : Triangle C) (H : T ∈ distTriang C) :
     T.invRotate ∈ distTriang C :=
   (rotate_distinguished_triangle T.invRotate).mpr
     (isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
-#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_distTriang
 
 /-- Given any distinguished triangle
 ```
@@ -121,12 +121,12 @@ the composition `f ≫ g = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
 @[reassoc]
-theorem comp_dist_triangle_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor₁ ≫ T.mor₂ = 0 := by
+theorem comp_distTriang_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor₁ ≫ T.mor₂ = 0 := by
   obtain ⟨c, hc⟩ :=
     complete_distinguished_triangle_morphism _ _ (contractible_distinguished T.obj₁) H (𝟙 T.obj₁)
       T.mor₁ rfl
   simpa only [contractibleTriangle_mor₂, zero_comp] using hc.left.symm
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂
 
 /-- Given any distinguished triangle
 ```
@@ -137,10 +137,10 @@ the composition `g ≫ h = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
 @[reassoc]
-theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
+theorem comp_distTriang_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
     T.mor₂ ≫ T.mor₃ = 0 :=
-  comp_dist_triangle_mor_zero₁₂ T.rotate (rot_of_dist_triangle T H)
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+  comp_distTriang_mor_zero₁₂ T.rotate (rot_of_distTriang T H)
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃
 
 /-- Given any distinguished triangle
 ```
@@ -151,17 +151,17 @@ the composition `h ≫ f⟦1⟧ = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
 @[reassoc]
-theorem comp_dist_triangle_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
+theorem comp_distTriang_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
     T.mor₃ ≫ T.mor₁⟦1⟧' = 0 := by
-  have H₂ := rot_of_dist_triangle T.rotate (rot_of_dist_triangle T H)
-  simpa using comp_dist_triangle_mor_zero₁₂ T.rotate.rotate H₂
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+  have H₂ := rot_of_distTriang T.rotate (rot_of_distTriang T H)
+  simpa using comp_distTriang_mor_zero₁₂ T.rotate.rotate H₂
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁
 
 /-- Any morphism `Y ⟶ Z` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
 lemma distinguished_cocone_triangle₁ {Y Z : C} (g : Y ⟶ Z) :
     ∃ (X : C) (f : X ⟶ Y) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distTriang C := by
   obtain ⟨X', f', g', mem⟩ := distinguished_cocone_triangle g
-  exact ⟨_, _, _, inv_rot_of_dist_triangle _ mem⟩
+  exact ⟨_, _, _, inv_rot_of_distTriang _ mem⟩
 
 /-- Any morphism `Z ⟶ X⟦1⟧` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
 lemma distinguished_cocone_triangle₂ {Z X : C} (h : Z ⟶ X⟦(1 : ℤ)⟧) :
@@ -169,7 +169,7 @@ lemma distinguished_cocone_triangle₂ {Z X : C} (h : Z ⟶ X⟦(1 : ℤ)⟧) :
   obtain ⟨Y', f', g', mem⟩ := distinguished_cocone_triangle h
   let T' := (Triangle.mk h f' g').invRotate.invRotate
   refine' ⟨T'.obj₂, ((shiftEquiv C (1 : ℤ)).unitIso.app X).hom ≫ T'.mor₁, T'.mor₂,
-    isomorphic_distinguished _ (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ mem)) _ _⟩
+    isomorphic_distinguished _ (inv_rot_of_distTriang _ (inv_rot_of_distTriang _ mem)) _ _⟩
   exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
     (by aesop_cat) (by aesop_cat)
     (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
@@ -182,7 +182,7 @@ lemma complete_distinguished_triangle_morphism₁ (T₁ T₂ : Triangle C)
     ∃ (a : T₁.obj₁ ⟶ T₂.obj₁), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧
       T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃ := by
   obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
-    (rot_of_dist_triangle _ hT₁) (rot_of_dist_triangle _ hT₂) b c comm
+    (rot_of_distTriang _ hT₁) (rot_of_distTriang _ hT₂) b c comm
   refine' ⟨(shiftFunctor C (1 : ℤ)).preimage a, ⟨_, _⟩⟩
   · apply (shiftFunctor C (1 : ℤ)).map_injective
     dsimp at ha₂
@@ -197,7 +197,7 @@ lemma complete_distinguished_triangle_morphism₂ (T₁ T₂ : Triangle C)
     (c : T₁.obj₃ ⟶ T₂.obj₃) (comm : T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃) :
     ∃ (b : T₁.obj₂ ⟶ T₂.obj₂), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧ T₁.mor₂ ≫ c = b ≫ T₂.mor₂ := by
   obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
-    (inv_rot_of_dist_triangle _ hT₁) (inv_rot_of_dist_triangle _ hT₂) (c⟦(-1 : ℤ)⟧') a (by
+    (inv_rot_of_distTriang _ hT₁) (inv_rot_of_distTriang _ hT₂) (c⟦(-1 : ℤ)⟧') a (by
     dsimp
     simp only [neg_comp, comp_neg, ← Functor.map_comp_assoc, ← comm,
       Functor.map_comp, shift_shift_neg', Functor.id_obj, assoc, Iso.inv_hom_id_app, comp_id])
@@ -210,7 +210,7 @@ lemma complete_distinguished_triangle_morphism₂ (T₁ T₂ : Triangle C)
 lemma contractible_distinguished₁ (X : C) :
     Triangle.mk (0 : 0 ⟶ X) (𝟙 X) 0 ∈ distTriang C := by
   refine' isomorphic_distinguished _
-    (inv_rot_of_dist_triangle _ (contractible_distinguished X)) _ _
+    (inv_rot_of_distTriang _ (contractible_distinguished X)) _ _
   exact Triangle.isoMk _ _ (Functor.mapZeroObject _).symm (Iso.refl _) (Iso.refl _)
     (by aesop_cat) (by aesop_cat) (by aesop_cat)
 
@@ -218,7 +218,7 @@ lemma contractible_distinguished₁ (X : C) :
 lemma contractible_distinguished₂ (X : C) :
     Triangle.mk (0 : X ⟶ 0) 0 (𝟙 (X⟦1⟧)) ∈ distTriang C := by
   refine' isomorphic_distinguished _
-    (inv_rot_of_dist_triangle _ (contractible_distinguished₁ (X⟦(1 : ℤ)⟧))) _ _
+    (inv_rot_of_distTriang _ (contractible_distinguished₁ (X⟦(1 : ℤ)⟧))) _ _
   exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
     (by aesop_cat) (by aesop_cat)
     (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
@@ -235,7 +235,7 @@ lemma yoneda_exact₂ {X : C} (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) :
 
 lemma yoneda_exact₃ {X : C} (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) :
     ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
-  yoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+  yoneda_exact₂ _ (rot_of_distTriang _ hT) f hf
 
 lemma coyoneda_exact₂ {X : C} (f : X ⟶ T.obj₂) (hf : f ≫ T.mor₂ = 0) :
     ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
@@ -245,11 +245,11 @@ lemma coyoneda_exact₂ {X : C} (f : X ⟶ T.obj₂) (hf : f ≫ T.mor₂ = 0) :
 
 lemma coyoneda_exact₁ {X : C} (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) :
     ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
-  coyoneda_exact₂ _ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT)) f (by aesop_cat)
+  coyoneda_exact₂ _ (rot_of_distTriang _ (rot_of_distTriang _ hT)) f (by aesop_cat)
 
 lemma coyoneda_exact₃ {X : C} (f : X ⟶ T.obj₃) (hf : f ≫ T.mor₃ = 0) :
     ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
-  coyoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+  coyoneda_exact₂ _ (rot_of_distTriang _ hT) f hf
 
 lemma mor₃_eq_zero_iff_epi₂ : T.mor₃ = 0 ↔ Epi T.mor₂ := by
   constructor
@@ -259,15 +259,15 @@ lemma mor₃_eq_zero_iff_epi₂ : T.mor₃ = 0 ↔ Epi T.mor₂ := by
     obtain ⟨f, rfl⟩ := yoneda_exact₃ T hT g hg
     rw [h, zero_comp]
   · intro
-    rw [← cancel_epi T.mor₂, comp_dist_triangle_mor_zero₂₃ _ hT, comp_zero]
+    rw [← cancel_epi T.mor₂, comp_distTriang_mor_zero₂₃ _ hT, comp_zero]
 
 lemma mor₂_eq_zero_iff_epi₁ : T.mor₂ = 0 ↔ Epi T.mor₁ := by
-  have h := mor₃_eq_zero_iff_epi₂ _ (inv_rot_of_dist_triangle _ hT)
+  have h := mor₃_eq_zero_iff_epi₂ _ (inv_rot_of_distTriang _ hT)
   dsimp at h
   rw [← h, IsIso.comp_right_eq_zero]
 
 lemma mor₁_eq_zero_iff_epi₃ : T.mor₁ = 0 ↔ Epi T.mor₃ := by
-  have h := mor₃_eq_zero_iff_epi₂ _ (rot_of_dist_triangle _ hT)
+  have h := mor₃_eq_zero_iff_epi₂ _ (rot_of_distTriang _ hT)
   dsimp at h
   rw [← h, neg_eq_zero]
   constructor
@@ -292,13 +292,13 @@ lemma mor₁_eq_zero_iff_mono₂ : T.mor₁ = 0 ↔ Mono T.mor₂ := by
     obtain ⟨f, rfl⟩ := coyoneda_exact₂ T hT g hg
     rw [h, comp_zero]
   · intro
-    rw [← cancel_mono T.mor₂, comp_dist_triangle_mor_zero₁₂ _ hT, zero_comp]
+    rw [← cancel_mono T.mor₂, comp_distTriang_mor_zero₁₂ _ hT, zero_comp]
 
 lemma mor₂_eq_zero_iff_mono₃ : T.mor₂ = 0 ↔ Mono T.mor₃ :=
-  mor₁_eq_zero_iff_mono₂ _ (rot_of_dist_triangle _ hT)
+  mor₁_eq_zero_iff_mono₂ _ (rot_of_distTriang _ hT)
 
 lemma mor₃_eq_zero_iff_mono₁ : T.mor₃ = 0 ↔ Mono T.mor₁ := by
-  have h := mor₁_eq_zero_iff_mono₂ _ (inv_rot_of_dist_triangle _ hT)
+  have h := mor₁_eq_zero_iff_mono₂ _ (inv_rot_of_distTriang _ hT)
   dsimp at h
   rw [← h, neg_eq_zero, IsIso.comp_right_eq_zero]
   constructor
@@ -324,13 +324,13 @@ lemma isZero₂_iff : IsZero T.obj₂ ↔ (T.mor₁ = 0 ∧ T.mor₂ = 0) := by
     rw [IsZero.iff_id_eq_zero, hf, h₁, comp_zero]
 
 lemma isZero₁_iff : IsZero T.obj₁ ↔ (T.mor₁ = 0 ∧ T.mor₃ = 0) := by
-  refine' (isZero₂_iff _ (inv_rot_of_dist_triangle _ hT)).trans _
+  refine' (isZero₂_iff _ (inv_rot_of_distTriang _ hT)).trans _
   dsimp
   simp [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
   tauto
 
 lemma isZero₃_iff : IsZero T.obj₃ ↔ (T.mor₂ = 0 ∧ T.mor₃ = 0) := by
-  refine' (isZero₂_iff _ (rot_of_dist_triangle _ hT)).trans _
+  refine' (isZero₂_iff _ (rot_of_distTriang _ hT)).trans _
   dsimp
   tauto
 
@@ -343,7 +343,7 @@ lemma isZero₂_of_isZero₁₃ (h₁ : IsZero T.obj₁) (h₃ : IsZero T.obj₃
   exact ⟨h₁.eq_of_src _ _, h₃.eq_of_tgt _ _⟩
 
 lemma isZero₃_of_isZero₁₂ (h₁ : IsZero T.obj₁) (h₂ : IsZero T.obj₂) : IsZero T.obj₃ :=
-  isZero₂_of_isZero₁₃ _ (rot_of_dist_triangle _ hT) h₂ (by
+  isZero₂_of_isZero₁₃ _ (rot_of_distTriang _ hT) h₂ (by
     dsimp
     simp only [IsZero.iff_id_eq_zero] at h₁ ⊢
     rw [← Functor.map_id, h₁, Functor.map_zero])
@@ -361,10 +361,10 @@ lemma isZero₁_iff_isIso₂ :
     constructor <;> infer_instance
 
 lemma isZero₂_iff_isIso₃ : IsZero T.obj₂ ↔ IsIso T.mor₃ :=
-  isZero₁_iff_isIso₂ _ (rot_of_dist_triangle _ hT)
+  isZero₁_iff_isIso₂ _ (rot_of_distTriang _ hT)
 
 lemma isZero₃_iff_isIso₁ : IsZero T.obj₃ ↔ IsIso T.mor₁ := by
-  refine' Iff.trans _ (Triangle.isZero₁_iff_isIso₂ _ (inv_rot_of_dist_triangle _ hT))
+  refine' Iff.trans _ (Triangle.isZero₁_iff_isIso₂ _ (inv_rot_of_distTriang _ hT))
   dsimp
   simp only [IsZero.iff_id_eq_zero, ← Functor.map_id, Functor.map_eq_zero_iff]
 
@@ -381,12 +381,12 @@ lemma shift_distinguished (n : ℤ) :
   have H_zero : H 0 := fun T hT =>
     isomorphic_distinguished _ hT _ ((Triangle.shiftFunctorZero C).app T)
   have H_one : H 1 := fun T hT =>
-    isomorphic_distinguished _ (rot_of_dist_triangle _
-      (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT))) _
+    isomorphic_distinguished _ (rot_of_distTriang _
+      (rot_of_distTriang _ (rot_of_distTriang _ hT))) _
         ((rotateRotateRotateIso C).symm.app T)
   have H_neg_one : H (-1) := fun T hT =>
-    isomorphic_distinguished _ (inv_rot_of_dist_triangle _
-      (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ hT))) _
+    isomorphic_distinguished _ (inv_rot_of_distTriang _
+      (inv_rot_of_distTriang _ (inv_rot_of_distTriang _ hT))) _
         ((invRotateInvRotateInvRotateIso C).symm.app T)
   have H_add : ∀ {a b c : ℤ}, H a → H b → a + b = c → H c := fun {a b c} ha hb hc T hT =>
     isomorphic_distinguished _ (hb _ (ha _ hT)) _
@@ -423,14 +423,14 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
     obtain ⟨g, rfl⟩ := Triangle.coyoneda_exact₂ _ hT f
       (by rw [← cancel_mono φ.hom₃, assoc, φ.comm₂, reassoc_of% hf, zero_comp, zero_comp])
     rw [assoc] at hf
-    obtain ⟨h, hh⟩ := Triangle.coyoneda_exact₂ T'.invRotate (inv_rot_of_dist_triangle _ hT')
+    obtain ⟨h, hh⟩ := Triangle.coyoneda_exact₂ T'.invRotate (inv_rot_of_distTriang _ hT')
       (g ≫ φ.hom₁) (by dsimp; rw [assoc, ← φ.comm₁, hf])
     obtain ⟨k, rfl⟩ : ∃ (k : A ⟶ T.invRotate.obj₁), k ≫ T.invRotate.mor₁ = g := by
       refine' ⟨h ≫ inv (φ.hom₃⟦(-1 : ℤ)⟧'), _⟩
       have eq := ((invRotate C).map φ).comm₁
       dsimp only [invRotate] at eq
       rw [← cancel_mono φ.hom₁, assoc, assoc, eq, IsIso.inv_hom_id_assoc, hh]
-    erw [assoc, comp_dist_triangle_mor_zero₁₂ _ (inv_rot_of_dist_triangle _ hT), comp_zero]
+    erw [assoc, comp_distTriang_mor_zero₁₂ _ (inv_rot_of_distTriang _ hT), comp_zero]
   refine' isIso_of_yoneda_map_bijective _ (fun A => ⟨_, _⟩)
   · intro f₁ f₂ h
     simpa only [← cancel_mono φ.hom₂] using h
@@ -439,7 +439,7 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
       ⟨y₂ ≫ T'.mor₂ ≫ inv φ.hom₃, by simp⟩
     obtain ⟨x₂, hx₂⟩ := Triangle.coyoneda_exact₃ _ hT x₃
       (by rw [← cancel_mono (φ.hom₁⟦(1 : ℤ)⟧'), assoc, zero_comp, φ.comm₃, reassoc_of% hx₃,
-        comp_dist_triangle_mor_zero₂₃ _ hT', comp_zero])
+        comp_distTriang_mor_zero₂₃ _ hT', comp_zero])
     obtain ⟨y₁, hy₁⟩ := Triangle.coyoneda_exact₂ _ hT' (y₂ - x₂ ≫ φ.hom₂)
       (by rw [sub_comp, assoc, ← φ.comm₂, ← reassoc_of% hx₂, hx₃, sub_self])
     obtain ⟨x₁, hx₁⟩ : ∃ (x₁ : A ⟶ T.obj₁), x₁ ≫ φ.hom₁ = y₁ := ⟨y₁ ≫ inv φ.hom₁, by simp⟩
@@ -449,13 +449,13 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
 
 lemma isIso₃_of_isIso₁₂ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
     (hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₂ : IsIso φ.hom₂) : IsIso φ.hom₃ :=
-  isIso₂_of_isIso₁₃ ((rotate C).map φ) (rot_of_dist_triangle _ hT)
-    (rot_of_dist_triangle _ hT') h₂ (by dsimp; infer_instance)
+  isIso₂_of_isIso₁₃ ((rotate C).map φ) (rot_of_distTriang _ hT)
+    (rot_of_distTriang _ hT') h₂ (by dsimp; infer_instance)
 
 lemma isIso₁_of_isIso₂₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
     (hT' : T' ∈ distTriang C) (h₂ : IsIso φ.hom₂) (h₃ : IsIso φ.hom₃) : IsIso φ.hom₁ :=
-  isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_dist_triangle _ hT)
-    (inv_rot_of_dist_triangle _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
+  isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_distTriang _ hT)
+    (inv_rot_of_distTriang _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
 
 /-
 TODO: If `C` is pretriangulated with respect to a shift,
chore: cleanup some spaces (#7490)

Purely cosmetic PR

Diff
@@ -384,7 +384,7 @@ lemma shift_distinguished (n : ℤ) :
     isomorphic_distinguished _ (rot_of_dist_triangle _
       (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT))) _
         ((rotateRotateRotateIso C).symm.app T)
-  have H_neg_one : H (-1):= fun T hT =>
+  have H_neg_one : H (-1) := fun T hT =>
     isomorphic_distinguished _ (inv_rot_of_dist_triangle _
       (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ hT))) _
         ((invRotateInvRotateInvRotateIso C).symm.app T)
chore: only four spaces for subsequent lines (#7286)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -138,7 +138,7 @@ See <https://stacks.math.columbia.edu/tag/0146>
 -/
 @[reassoc]
 theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
-  T.mor₂ ≫ T.mor₃ = 0 :=
+    T.mor₂ ≫ T.mor₃ = 0 :=
   comp_dist_triangle_mor_zero₁₂ T.rotate (rot_of_dist_triangle T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
feat(CategoryTheory/Triangulated): shifting distinguished triangles and variations on the five lemma (#7053)

In this PR, it is shown that the shift of a distinguished triangle is a distinguished triangle. It is also shown that in a morphism between distinguished triangles, if two morphisms are isomorphisms, so is the third.

Diff
@@ -3,9 +3,7 @@ Copyright (c) 2021 Luke Kershaw. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
 -/
-import Mathlib.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathlib.CategoryTheory.Shift.Basic
-import Mathlib.CategoryTheory.Triangulated.Rotate
+import Mathlib.CategoryTheory.Triangulated.TriangleShift
 
 #align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
 
@@ -26,11 +24,7 @@ TODO: generalise this to n-angulated categories as in https://arxiv.org/abs/1006
 
 noncomputable section
 
-open CategoryTheory
-
-open CategoryTheory.Preadditive
-
-open CategoryTheory.Limits
+open CategoryTheory Preadditive Limits
 
 universe v v₀ v₁ v₂ u u₀ u₁ u₂
 
@@ -90,7 +84,7 @@ class Pretriangulated [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] where
 
 namespace Pretriangulated
 
-variable [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] [hC : Pretriangulated C]
+variable [∀ n : ℤ, Functor.Additive (CategoryTheory.shiftFunctor C n)] [hC : Pretriangulated C]
 
 -- porting note: increased the priority so that we can write `T ∈ distTriang C`, and
 -- not just `T ∈ (distTriang C)`
@@ -158,7 +152,7 @@ See <https://stacks.math.columbia.edu/tag/0146>
 -/
 @[reassoc]
 theorem comp_dist_triangle_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
-    T.mor₃ ≫ (shiftEquiv C 1).functor.map T.mor₁ = 0 := by
+    T.mor₃ ≫ T.mor₁⟦1⟧' = 0 := by
   have H₂ := rot_of_dist_triangle T.rotate (rot_of_dist_triangle T H)
   simpa using comp_dist_triangle_mor_zero₁₂ T.rotate.rotate H₂
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
@@ -378,6 +372,33 @@ lemma isZero₁_of_isIso₂ (h : IsIso T.mor₂) : IsZero T.obj₁ := (T.isZero
 lemma isZero₂_of_isIso₃ (h : IsIso T.mor₃) : IsZero T.obj₂ := (T.isZero₂_iff_isIso₃ hT).2 h
 lemma isZero₃_of_isIso₁ (h : IsIso T.mor₁) : IsZero T.obj₃ := (T.isZero₃_iff_isIso₁ hT).2 h
 
+lemma shift_distinguished (n : ℤ) :
+    (CategoryTheory.shiftFunctor (Triangle C) n).obj T ∈ distTriang C := by
+  revert T hT
+  let H : ℤ → Prop := fun n => ∀ (T : Triangle C) (_ : T ∈ distTriang C),
+    (Triangle.shiftFunctor C n).obj T ∈ distTriang C
+  change H n
+  have H_zero : H 0 := fun T hT =>
+    isomorphic_distinguished _ hT _ ((Triangle.shiftFunctorZero C).app T)
+  have H_one : H 1 := fun T hT =>
+    isomorphic_distinguished _ (rot_of_dist_triangle _
+      (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT))) _
+        ((rotateRotateRotateIso C).symm.app T)
+  have H_neg_one : H (-1):= fun T hT =>
+    isomorphic_distinguished _ (inv_rot_of_dist_triangle _
+      (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ hT))) _
+        ((invRotateInvRotateInvRotateIso C).symm.app T)
+  have H_add : ∀ {a b c : ℤ}, H a → H b → a + b = c → H c := fun {a b c} ha hb hc T hT =>
+    isomorphic_distinguished _ (hb _ (ha _ hT)) _
+      ((Triangle.shiftFunctorAdd' C _ _ _ hc).app T)
+  obtain (n|n) := n
+  · induction' n with n hn
+    · exact H_zero
+    · exact H_add hn H_one rfl
+  · induction' n with n hn
+    · exact H_neg_one
+    · exact H_add hn H_neg_one rfl
+
 end Triangle
 
 instance : SplitEpiCategory C where
@@ -394,6 +415,48 @@ instance : SplitMonoCategory C where
       rw [Triangle.mor₁_eq_zero_of_mono₂ _ hT hf, zero_comp])
     exact ⟨r, hr.symm⟩
 
+lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
+    (hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₃ : IsIso φ.hom₃) : IsIso φ.hom₂ := by
+  have : Mono φ.hom₂ := by
+    rw [mono_iff_cancel_zero]
+    intro A f hf
+    obtain ⟨g, rfl⟩ := Triangle.coyoneda_exact₂ _ hT f
+      (by rw [← cancel_mono φ.hom₃, assoc, φ.comm₂, reassoc_of% hf, zero_comp, zero_comp])
+    rw [assoc] at hf
+    obtain ⟨h, hh⟩ := Triangle.coyoneda_exact₂ T'.invRotate (inv_rot_of_dist_triangle _ hT')
+      (g ≫ φ.hom₁) (by dsimp; rw [assoc, ← φ.comm₁, hf])
+    obtain ⟨k, rfl⟩ : ∃ (k : A ⟶ T.invRotate.obj₁), k ≫ T.invRotate.mor₁ = g := by
+      refine' ⟨h ≫ inv (φ.hom₃⟦(-1 : ℤ)⟧'), _⟩
+      have eq := ((invRotate C).map φ).comm₁
+      dsimp only [invRotate] at eq
+      rw [← cancel_mono φ.hom₁, assoc, assoc, eq, IsIso.inv_hom_id_assoc, hh]
+    erw [assoc, comp_dist_triangle_mor_zero₁₂ _ (inv_rot_of_dist_triangle _ hT), comp_zero]
+  refine' isIso_of_yoneda_map_bijective _ (fun A => ⟨_, _⟩)
+  · intro f₁ f₂ h
+    simpa only [← cancel_mono φ.hom₂] using h
+  · intro y₂
+    obtain ⟨x₃, hx₃⟩ : ∃ (x₃ : A ⟶ T.obj₃), x₃ ≫ φ.hom₃ = y₂ ≫ T'.mor₂ :=
+      ⟨y₂ ≫ T'.mor₂ ≫ inv φ.hom₃, by simp⟩
+    obtain ⟨x₂, hx₂⟩ := Triangle.coyoneda_exact₃ _ hT x₃
+      (by rw [← cancel_mono (φ.hom₁⟦(1 : ℤ)⟧'), assoc, zero_comp, φ.comm₃, reassoc_of% hx₃,
+        comp_dist_triangle_mor_zero₂₃ _ hT', comp_zero])
+    obtain ⟨y₁, hy₁⟩ := Triangle.coyoneda_exact₂ _ hT' (y₂ - x₂ ≫ φ.hom₂)
+      (by rw [sub_comp, assoc, ← φ.comm₂, ← reassoc_of% hx₂, hx₃, sub_self])
+    obtain ⟨x₁, hx₁⟩ : ∃ (x₁ : A ⟶ T.obj₁), x₁ ≫ φ.hom₁ = y₁ := ⟨y₁ ≫ inv φ.hom₁, by simp⟩
+    refine' ⟨x₂ + x₁ ≫ T.mor₁, _⟩
+    dsimp
+    rw [add_comp, assoc, φ.comm₁, reassoc_of% hx₁, ← hy₁, add_sub_cancel'_right]
+
+lemma isIso₃_of_isIso₁₂ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
+    (hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₂ : IsIso φ.hom₂) : IsIso φ.hom₃ :=
+  isIso₂_of_isIso₁₃ ((rotate C).map φ) (rot_of_dist_triangle _ hT)
+    (rot_of_dist_triangle _ hT') h₂ (by dsimp; infer_instance)
+
+lemma isIso₁_of_isIso₂₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
+    (hT' : T' ∈ distTriang C) (h₂ : IsIso φ.hom₂) (h₃ : IsIso φ.hom₃) : IsIso φ.hom₁ :=
+  isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_dist_triangle _ hT)
+    (inv_rot_of_dist_triangle _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
+
 /-
 TODO: If `C` is pretriangulated with respect to a shift,
 then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
feat: basic results about epi/mono/iso in pretriangulated categories (#6815)

In this PR, it is shown that in pretriangulated categories, monomorphisms (and epimorphisms) split. In a distinguished triangle, a morphism is an isomorphism iff the third object is zero.

Diff
@@ -229,30 +229,171 @@ lemma contractible_distinguished₂ (X : C) :
     (by aesop_cat) (by aesop_cat)
     (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
 
-lemma yoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
-    (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) : ∃ (g : T.obj₃ ⟶ X), f = T.mor₂ ≫ g := by
+namespace Triangle
+
+variable (T : Triangle C) (hT : T ∈ distTriang C)
+
+lemma yoneda_exact₂ {X : C} (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) :
+    ∃ (g : T.obj₃ ⟶ X), f = T.mor₂ ≫ g := by
   obtain ⟨g, ⟨hg₁, _⟩⟩ := complete_distinguished_triangle_morphism T _ hT
     (contractible_distinguished₁ X) 0 f (by aesop_cat)
   exact ⟨g, by simpa using hg₁.symm⟩
 
-lemma yoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
-    (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) : ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
+lemma yoneda_exact₃ {X : C} (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) :
+    ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
   yoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
 
-lemma coyoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₂)
-    (hf : f ≫ T.mor₂ = 0) : ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
+lemma coyoneda_exact₂ {X : C} (f : X ⟶ T.obj₂) (hf : f ≫ T.mor₂ = 0) :
+    ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
   obtain ⟨a, ⟨ha₁, _⟩⟩ := complete_distinguished_triangle_morphism₁ _ T
     (contractible_distinguished X) hT f 0 (by aesop_cat)
   exact ⟨a, by simpa using ha₁⟩
 
-lemma coyoneda_exact₁ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
-    (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) : ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
+lemma coyoneda_exact₁ {X : C} (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) :
+    ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
   coyoneda_exact₂ _ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT)) f (by aesop_cat)
 
-lemma coyoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₃)
-    (hf : f ≫ T.mor₃ = 0) : ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
+lemma coyoneda_exact₃ {X : C} (f : X ⟶ T.obj₃) (hf : f ≫ T.mor₃ = 0) :
+    ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
   coyoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
 
+lemma mor₃_eq_zero_iff_epi₂ : T.mor₃ = 0 ↔ Epi T.mor₂ := by
+  constructor
+  · intro h
+    rw [epi_iff_cancel_zero]
+    intro X g hg
+    obtain ⟨f, rfl⟩ := yoneda_exact₃ T hT g hg
+    rw [h, zero_comp]
+  · intro
+    rw [← cancel_epi T.mor₂, comp_dist_triangle_mor_zero₂₃ _ hT, comp_zero]
+
+lemma mor₂_eq_zero_iff_epi₁ : T.mor₂ = 0 ↔ Epi T.mor₁ := by
+  have h := mor₃_eq_zero_iff_epi₂ _ (inv_rot_of_dist_triangle _ hT)
+  dsimp at h
+  rw [← h, IsIso.comp_right_eq_zero]
+
+lemma mor₁_eq_zero_iff_epi₃ : T.mor₁ = 0 ↔ Epi T.mor₃ := by
+  have h := mor₃_eq_zero_iff_epi₂ _ (rot_of_dist_triangle _ hT)
+  dsimp at h
+  rw [← h, neg_eq_zero]
+  constructor
+  · intro h
+    simp only [h, Functor.map_zero]
+  · intro h
+    rw [← (CategoryTheory.shiftFunctor C (1 : ℤ)).map_eq_zero_iff, h]
+
+lemma mor₃_eq_zero_of_epi₂ (h : Epi T.mor₂) : T.mor₃ = 0 := (T.mor₃_eq_zero_iff_epi₂ hT).2 h
+lemma mor₂_eq_zero_of_epi₁ (h : Epi T.mor₁) : T.mor₂ = 0 := (T.mor₂_eq_zero_iff_epi₁ hT).2 h
+lemma mor₁_eq_zero_of_epi₃ (h : Epi T.mor₃) : T.mor₁ = 0 := (T.mor₁_eq_zero_iff_epi₃ hT).2 h
+
+lemma epi₂ (h : T.mor₃ = 0) : Epi T.mor₂ := (T.mor₃_eq_zero_iff_epi₂ hT).1 h
+lemma epi₁ (h : T.mor₂ = 0) : Epi T.mor₁ := (T.mor₂_eq_zero_iff_epi₁ hT).1 h
+lemma epi₃ (h : T.mor₁ = 0) : Epi T.mor₃ := (T.mor₁_eq_zero_iff_epi₃ hT).1 h
+
+lemma mor₁_eq_zero_iff_mono₂ : T.mor₁ = 0 ↔ Mono T.mor₂ := by
+  constructor
+  · intro h
+    rw [mono_iff_cancel_zero]
+    intro X g hg
+    obtain ⟨f, rfl⟩ := coyoneda_exact₂ T hT g hg
+    rw [h, comp_zero]
+  · intro
+    rw [← cancel_mono T.mor₂, comp_dist_triangle_mor_zero₁₂ _ hT, zero_comp]
+
+lemma mor₂_eq_zero_iff_mono₃ : T.mor₂ = 0 ↔ Mono T.mor₃ :=
+  mor₁_eq_zero_iff_mono₂ _ (rot_of_dist_triangle _ hT)
+
+lemma mor₃_eq_zero_iff_mono₁ : T.mor₃ = 0 ↔ Mono T.mor₁ := by
+  have h := mor₁_eq_zero_iff_mono₂ _ (inv_rot_of_dist_triangle _ hT)
+  dsimp at h
+  rw [← h, neg_eq_zero, IsIso.comp_right_eq_zero]
+  constructor
+  · intro h
+    simp only [h, Functor.map_zero]
+  · intro h
+    rw [← (CategoryTheory.shiftFunctor C (-1 : ℤ)).map_eq_zero_iff, h]
+
+lemma mor₁_eq_zero_of_mono₂ (h : Mono T.mor₂) : T.mor₁ = 0 := (T.mor₁_eq_zero_iff_mono₂ hT).2 h
+lemma mor₂_eq_zero_of_mono₃ (h : Mono T.mor₃) : T.mor₂ = 0 := (T.mor₂_eq_zero_iff_mono₃ hT).2 h
+lemma mor₃_eq_zero_of_mono₁ (h : Mono T.mor₁) : T.mor₃ = 0 := (T.mor₃_eq_zero_iff_mono₁ hT).2 h
+
+lemma mono₂ (h : T.mor₁ = 0) : Mono T.mor₂ := (T.mor₁_eq_zero_iff_mono₂ hT).1 h
+lemma mono₃ (h : T.mor₂ = 0) : Mono T.mor₃ := (T.mor₂_eq_zero_iff_mono₃ hT).1 h
+lemma mono₁ (h : T.mor₃ = 0) : Mono T.mor₁ := (T.mor₃_eq_zero_iff_mono₁ hT).1 h
+
+lemma isZero₂_iff : IsZero T.obj₂ ↔ (T.mor₁ = 0 ∧ T.mor₂ = 0) := by
+  constructor
+  · intro h
+    exact ⟨h.eq_of_tgt _ _, h.eq_of_src _ _⟩
+  · intro ⟨h₁, h₂⟩
+    obtain ⟨f, hf⟩ := coyoneda_exact₂ T hT (𝟙 _) (by rw [h₂, comp_zero])
+    rw [IsZero.iff_id_eq_zero, hf, h₁, comp_zero]
+
+lemma isZero₁_iff : IsZero T.obj₁ ↔ (T.mor₁ = 0 ∧ T.mor₃ = 0) := by
+  refine' (isZero₂_iff _ (inv_rot_of_dist_triangle _ hT)).trans _
+  dsimp
+  simp [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
+  tauto
+
+lemma isZero₃_iff : IsZero T.obj₃ ↔ (T.mor₂ = 0 ∧ T.mor₃ = 0) := by
+  refine' (isZero₂_iff _ (rot_of_dist_triangle _ hT)).trans _
+  dsimp
+  tauto
+
+lemma isZero₁_of_isZero₂₃ (h₂ : IsZero T.obj₂) (h₃ : IsZero T.obj₃) : IsZero T.obj₁ := by
+  rw [T.isZero₁_iff hT]
+  exact ⟨h₂.eq_of_tgt _ _, h₃.eq_of_src _ _⟩
+
+lemma isZero₂_of_isZero₁₃ (h₁ : IsZero T.obj₁) (h₃ : IsZero T.obj₃) : IsZero T.obj₂ := by
+  rw [T.isZero₂_iff hT]
+  exact ⟨h₁.eq_of_src _ _, h₃.eq_of_tgt _ _⟩
+
+lemma isZero₃_of_isZero₁₂ (h₁ : IsZero T.obj₁) (h₂ : IsZero T.obj₂) : IsZero T.obj₃ :=
+  isZero₂_of_isZero₁₃ _ (rot_of_dist_triangle _ hT) h₂ (by
+    dsimp
+    simp only [IsZero.iff_id_eq_zero] at h₁ ⊢
+    rw [← Functor.map_id, h₁, Functor.map_zero])
+
+lemma isZero₁_iff_isIso₂ :
+    IsZero T.obj₁ ↔ IsIso T.mor₂ := by
+  rw [T.isZero₁_iff hT]
+  constructor
+  · intro ⟨h₁, h₃⟩
+    have := T.epi₂ hT h₃
+    obtain ⟨f, hf⟩ := yoneda_exact₂ T hT (𝟙 _) (by rw [h₁, zero_comp])
+    exact ⟨f, hf.symm, by rw [← cancel_epi T.mor₂, comp_id, ← reassoc_of% hf]⟩
+  · intro
+    rw [T.mor₁_eq_zero_iff_mono₂ hT, T.mor₃_eq_zero_iff_epi₂ hT]
+    constructor <;> infer_instance
+
+lemma isZero₂_iff_isIso₃ : IsZero T.obj₂ ↔ IsIso T.mor₃ :=
+  isZero₁_iff_isIso₂ _ (rot_of_dist_triangle _ hT)
+
+lemma isZero₃_iff_isIso₁ : IsZero T.obj₃ ↔ IsIso T.mor₁ := by
+  refine' Iff.trans _ (Triangle.isZero₁_iff_isIso₂ _ (inv_rot_of_dist_triangle _ hT))
+  dsimp
+  simp only [IsZero.iff_id_eq_zero, ← Functor.map_id, Functor.map_eq_zero_iff]
+
+lemma isZero₁_of_isIso₂ (h : IsIso T.mor₂) : IsZero T.obj₁ := (T.isZero₁_iff_isIso₂ hT).2 h
+lemma isZero₂_of_isIso₃ (h : IsIso T.mor₃) : IsZero T.obj₂ := (T.isZero₂_iff_isIso₃ hT).2 h
+lemma isZero₃_of_isIso₁ (h : IsIso T.mor₁) : IsZero T.obj₃ := (T.isZero₃_iff_isIso₁ hT).2 h
+
+end Triangle
+
+instance : SplitEpiCategory C where
+  isSplitEpi_of_epi f hf := by
+    obtain ⟨Z, g, h, hT⟩ := distinguished_cocone_triangle f
+    obtain ⟨r, hr⟩ := Triangle.coyoneda_exact₂ _ hT (𝟙 _)
+      (by rw [Triangle.mor₂_eq_zero_of_epi₁ _ hT hf, comp_zero])
+    exact ⟨r, hr.symm⟩
+
+instance : SplitMonoCategory C where
+  isSplitMono_of_mono f hf := by
+    obtain ⟨X, g, h, hT⟩ := distinguished_cocone_triangle₁ f
+    obtain ⟨r, hr⟩ := Triangle.yoneda_exact₂ _ hT (𝟙 _) (by
+      rw [Triangle.mor₁_eq_zero_of_mono₂ _ hT hf, zero_comp])
+    exact ⟨r, hr.symm⟩
+
 /-
 TODO: If `C` is pretriangulated with respect to a shift,
 then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
feat: more basic API for pretriangulated categories (#6377)

This PR slightly extends the basic API of pretriangulated categories.

Diff
@@ -36,16 +36,12 @@ universe v v₀ v₁ v₂ u u₀ u₁ u₂
 
 namespace CategoryTheory
 
-open Category Pretriangulated
+open Category Pretriangulated ZeroObject
 
 /-
 We work in a preadditive category `C` equipped with an additive shift.
 -/
 variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Preadditive C]
-  [∀ n : ℤ, Functor.Additive (shiftFunctor C n)]
-
-variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
-  [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
 
 /-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
 relative to that shift is called pretriangulated if the following hold:
@@ -68,7 +64,7 @@ relative to that shift is called pretriangulated if the following hold:
 
 See <https://stacks.math.columbia.edu/tag/0145>
 -/
-class Pretriangulated where
+class Pretriangulated [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] where
   /-- a class of triangle which are called `distinguished` -/
   distinguishedTriangles : Set (Triangle C)
   /-- a triangle that is isomorphic to a distinguished triangle is distinguished -/
@@ -78,7 +74,7 @@ class Pretriangulated where
   contractible_distinguished : ∀ X : C, contractibleTriangle X ∈ distinguishedTriangles
   /-- any morphism `X ⟶ Y` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
   distinguished_cocone_triangle :
-    ∀ (X Y : C) (f : X ⟶ Y),
+    ∀ {X Y : C} (f : X ⟶ Y),
       ∃ (Z : C) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguishedTriangles
   /-- a triangle is distinguished iff it is so after rotating it -/
   rotate_distinguished_triangle :
@@ -94,12 +90,19 @@ class Pretriangulated where
 
 namespace Pretriangulated
 
-variable [hC : Pretriangulated C]
+variable [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] [hC : Pretriangulated C]
 
 -- porting note: increased the priority so that we can write `T ∈ distTriang C`, and
 -- not just `T ∈ (distTriang C)`
 /-- distinguished triangles in a pretriangulated category -/
-notation:60 "distTriang " C => @distinguishedTriangles C _ _ _ _ _
+notation:60 "distTriang " C => @distinguishedTriangles C _ _ _ _ _ _
+
+variable {C}
+
+lemma distinguished_iff_of_iso {T₁ T₂ : Triangle C} (e : T₁ ≅ T₂) :
+    (T₁ ∈ distTriang C) ↔ T₂ ∈ distTriang C :=
+  ⟨fun hT₁ => isomorphic_distinguished _ hT₁ _ e.symm,
+    fun hT₂ => isomorphic_distinguished _ hT₂ _ e⟩
 
 /-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
 -/
@@ -123,6 +126,7 @@ theorem inv_rot_of_dist_triangle (T : Triangle C) (H : T ∈ distTriang C) :
 the composition `f ≫ g = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
+@[reassoc]
 theorem comp_dist_triangle_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor₁ ≫ T.mor₂ = 0 := by
   obtain ⟨c, hc⟩ :=
     complete_distinguished_triangle_morphism _ _ (contractible_distinguished T.obj₁) H (𝟙 T.obj₁)
@@ -138,9 +142,10 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor
 the composition `g ≫ h = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
+@[reassoc]
 theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
   T.mor₂ ≫ T.mor₃ = 0 :=
-  comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
+  comp_dist_triangle_mor_zero₁₂ T.rotate (rot_of_dist_triangle T H)
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
 
 /-- Given any distinguished triangle
@@ -151,12 +156,103 @@ theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang
 the composition `h ≫ f⟦1⟧ = 0`.
 See <https://stacks.math.columbia.edu/tag/0146>
 -/
+@[reassoc]
 theorem comp_dist_triangle_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
     T.mor₃ ≫ (shiftEquiv C 1).functor.map T.mor₁ = 0 := by
-  have H₂ := rot_of_dist_triangle C T.rotate (rot_of_dist_triangle C T H)
-  simpa using comp_dist_triangle_mor_zero₁₂ C T.rotate.rotate H₂
+  have H₂ := rot_of_dist_triangle T.rotate (rot_of_dist_triangle T H)
+  simpa using comp_dist_triangle_mor_zero₁₂ T.rotate.rotate H₂
 #align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
 
+/-- Any morphism `Y ⟶ Z` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
+lemma distinguished_cocone_triangle₁ {Y Z : C} (g : Y ⟶ Z) :
+    ∃ (X : C) (f : X ⟶ Y) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distTriang C := by
+  obtain ⟨X', f', g', mem⟩ := distinguished_cocone_triangle g
+  exact ⟨_, _, _, inv_rot_of_dist_triangle _ mem⟩
+
+/-- Any morphism `Z ⟶ X⟦1⟧` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
+lemma distinguished_cocone_triangle₂ {Z X : C} (h : Z ⟶ X⟦(1 : ℤ)⟧) :
+    ∃ (Y : C) (f : X ⟶ Y) (g : Y ⟶ Z), Triangle.mk f g h ∈ distTriang C := by
+  obtain ⟨Y', f', g', mem⟩ := distinguished_cocone_triangle h
+  let T' := (Triangle.mk h f' g').invRotate.invRotate
+  refine' ⟨T'.obj₂, ((shiftEquiv C (1 : ℤ)).unitIso.app X).hom ≫ T'.mor₁, T'.mor₂,
+    isomorphic_distinguished _ (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ mem)) _ _⟩
+  exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
+    (by aesop_cat) (by aesop_cat)
+    (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
+
+/-- A commutative square involving the morphisms `mor₂` of two distinguished triangles
+can be extended as morphism of triangles -/
+lemma complete_distinguished_triangle_morphism₁ (T₁ T₂ : Triangle C)
+    (hT₁ : T₁ ∈ distTriang C) (hT₂ : T₂ ∈ distTriang C) (b : T₁.obj₂ ⟶ T₂.obj₂)
+    (c : T₁.obj₃ ⟶ T₂.obj₃) (comm : T₁.mor₂ ≫ c = b ≫ T₂.mor₂) :
+    ∃ (a : T₁.obj₁ ⟶ T₂.obj₁), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧
+      T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃ := by
+  obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
+    (rot_of_dist_triangle _ hT₁) (rot_of_dist_triangle _ hT₂) b c comm
+  refine' ⟨(shiftFunctor C (1 : ℤ)).preimage a, ⟨_, _⟩⟩
+  · apply (shiftFunctor C (1 : ℤ)).map_injective
+    dsimp at ha₂
+    rw [neg_comp, comp_neg, neg_inj] at ha₂
+    simpa only [Functor.map_comp, Functor.image_preimage] using ha₂
+  · simpa only [Functor.image_preimage] using ha₁
+
+/-- A commutative square involving the morphisms `mor₃` of two distinguished triangles
+can be extended as morphism of triangles -/
+lemma complete_distinguished_triangle_morphism₂ (T₁ T₂ : Triangle C)
+    (hT₁ : T₁ ∈ distTriang C) (hT₂ : T₂ ∈ distTriang C) (a : T₁.obj₁ ⟶ T₂.obj₁)
+    (c : T₁.obj₃ ⟶ T₂.obj₃) (comm : T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃) :
+    ∃ (b : T₁.obj₂ ⟶ T₂.obj₂), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧ T₁.mor₂ ≫ c = b ≫ T₂.mor₂ := by
+  obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
+    (inv_rot_of_dist_triangle _ hT₁) (inv_rot_of_dist_triangle _ hT₂) (c⟦(-1 : ℤ)⟧') a (by
+    dsimp
+    simp only [neg_comp, comp_neg, ← Functor.map_comp_assoc, ← comm,
+      Functor.map_comp, shift_shift_neg', Functor.id_obj, assoc, Iso.inv_hom_id_app, comp_id])
+  refine' ⟨a, ⟨ha₁, _⟩⟩
+  dsimp only [Triangle.invRotate, Triangle.mk] at ha₂
+  rw [← cancel_mono ((shiftEquiv C (1 : ℤ)).counitIso.inv.app T₂.obj₃), assoc, assoc, ← ha₂]
+  simp only [shiftEquiv'_counitIso, shift_neg_shift', assoc, Iso.inv_hom_id_app_assoc]
+
+/-- Obvious triangles `0 ⟶ X ⟶ X ⟶ 0⟦1⟧` are distinguished -/
+lemma contractible_distinguished₁ (X : C) :
+    Triangle.mk (0 : 0 ⟶ X) (𝟙 X) 0 ∈ distTriang C := by
+  refine' isomorphic_distinguished _
+    (inv_rot_of_dist_triangle _ (contractible_distinguished X)) _ _
+  exact Triangle.isoMk _ _ (Functor.mapZeroObject _).symm (Iso.refl _) (Iso.refl _)
+    (by aesop_cat) (by aesop_cat) (by aesop_cat)
+
+/-- Obvious triangles `X ⟶ 0 ⟶ X⟦1⟧ ⟶ X⟦1⟧` are distinguished -/
+lemma contractible_distinguished₂ (X : C) :
+    Triangle.mk (0 : X ⟶ 0) 0 (𝟙 (X⟦1⟧)) ∈ distTriang C := by
+  refine' isomorphic_distinguished _
+    (inv_rot_of_dist_triangle _ (contractible_distinguished₁ (X⟦(1 : ℤ)⟧))) _ _
+  exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
+    (by aesop_cat) (by aesop_cat)
+    (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
+
+lemma yoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
+    (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) : ∃ (g : T.obj₃ ⟶ X), f = T.mor₂ ≫ g := by
+  obtain ⟨g, ⟨hg₁, _⟩⟩ := complete_distinguished_triangle_morphism T _ hT
+    (contractible_distinguished₁ X) 0 f (by aesop_cat)
+  exact ⟨g, by simpa using hg₁.symm⟩
+
+lemma yoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
+    (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) : ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
+  yoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+
+lemma coyoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₂)
+    (hf : f ≫ T.mor₂ = 0) : ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
+  obtain ⟨a, ⟨ha₁, _⟩⟩ := complete_distinguished_triangle_morphism₁ _ T
+    (contractible_distinguished X) hT f 0 (by aesop_cat)
+  exact ⟨a, by simpa using ha₁⟩
+
+lemma coyoneda_exact₁ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
+    (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) : ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
+  coyoneda_exact₂ _ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT)) f (by aesop_cat)
+
+lemma coyoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₃)
+    (hf : f ≫ T.mor₃ = 0) : ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
+  coyoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+
 /-
 TODO: If `C` is pretriangulated with respect to a shift,
 then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,16 +2,13 @@
 Copyright (c) 2021 Luke Kershaw. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
-
-! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Preadditive.AdditiveFunctor
 import Mathlib.CategoryTheory.Shift.Basic
 import Mathlib.CategoryTheory.Triangulated.Rotate
 
+#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
+
 /-!
 # Pretriangulated Categories
 
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -82,7 +82,7 @@ class Pretriangulated where
   /-- any morphism `X ⟶ Y` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
   distinguished_cocone_triangle :
     ∀ (X Y : C) (f : X ⟶ Y),
-      ∃ (Z : C)(g : Y ⟶ Z)(h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguishedTriangles
+      ∃ (Z : C) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguishedTriangles
   /-- a triangle is distinguished iff it is so after rotating it -/
   rotate_distinguished_triangle :
     ∀ T : Triangle C, T ∈ distinguishedTriangles ↔ T.rotate ∈ distinguishedTriangles
feat: port CategoryTheory.Triangulated.Pretriangulated (#3070)

Co-authored-by: Jeremy Tan Jie Rui <e0191785@u.nus.edu> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com> Co-authored-by: qawbecrdtey <qawbecrdtey@kaist.ac.kr> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Moritz Doll <moritz.doll@googlemail.com> Co-authored-by: Jon Eugster <eugster.jon@gmail.com> Co-authored-by: Amelia Livingston <101damnations@github.com> Co-authored-by: Adam Topaz <github@adamtopaz.com> Co-authored-by: thorimur <68410468+thorimur@users.noreply.github.com> Co-authored-by: Violeta Hernández <vi.hdz.p@gmail.com> Co-authored-by: Adam Topaz <adamtopaz@users.noreply.github.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Sebastian Zivota <loewenheim@mailbox.org>

Dependencies 3 + 303

304 files ported (99.0%)
122671 lines ported (99.2%)
Show graph

The unported dependencies are