category_theory.triangulated.basicMathlib.CategoryTheory.Triangulated.Basic

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
@@ -3,7 +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 Data.Int.Basic
+import Algebra.Group.Int
 import CategoryTheory.Shift.Basic
 
 #align_import category_theory.triangulated.basic from "leanprover-community/mathlib"@"d64d67d000b974f0d86a2be7918cf800be6271c8"
Diff
@@ -3,8 +3,8 @@ 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.Data.Int.Basic
-import Mathbin.CategoryTheory.Shift.Basic
+import Data.Int.Basic
+import CategoryTheory.Shift.Basic
 
 #align_import category_theory.triangulated.basic from "leanprover-community/mathlib"@"d64d67d000b974f0d86a2be7918cf800be6271c8"
 
Diff
@@ -118,12 +118,6 @@ structure TriangleMorphism (T₁ : Triangle C) (T₂ : Triangle C) where
 #align category_theory.pretriangulated.triangle_morphism CategoryTheory.Pretriangulated.TriangleMorphism
 -/
 
-restate_axiom triangle_morphism.comm₁'
-
-restate_axiom triangle_morphism.comm₂'
-
-restate_axiom triangle_morphism.comm₃'
-
 attribute [simp, reassoc] triangle_morphism.comm₁ triangle_morphism.comm₂ triangle_morphism.comm₃
 
 #print CategoryTheory.Pretriangulated.triangleMorphismId /-
Diff
@@ -2,15 +2,12 @@
 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.basic
-! leanprover-community/mathlib commit d64d67d000b974f0d86a2be7918cf800be6271c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Data.Int.Basic
 import Mathbin.CategoryTheory.Shift.Basic
 
+#align_import category_theory.triangulated.basic from "leanprover-community/mathlib"@"d64d67d000b974f0d86a2be7918cf800be6271c8"
+
 /-!
 # Triangles
 
Diff
@@ -41,6 +41,7 @@ We work in a category `C` equipped with a shift.
 -/
 variable (C : Type u) [Category.{v} C] [HasShift C ℤ]
 
+#print CategoryTheory.Pretriangulated.Triangle /-
 /-- A triangle in `C` is a sextuple `(X,Y,Z,f,g,h)` where `X,Y,Z` are objects of `C`,
 and `f : X ⟶ Y`, `g : Y ⟶ Z`, `h : Z ⟶ X⟦1⟧` are morphisms in `C`.
 See <https://stacks.math.columbia.edu/tag/0144>.
@@ -53,9 +54,11 @@ structure Triangle where mk' ::
   mor₂ : obj₂ ⟶ obj₃
   mor₃ : obj₃ ⟶ obj₁⟦(1 : ℤ)⟧
 #align category_theory.pretriangulated.triangle CategoryTheory.Pretriangulated.Triangle
+-/
 
 variable {C}
 
+#print CategoryTheory.Pretriangulated.Triangle.mk /-
 /-- A triangle `(X,Y,Z,f,g,h)` in `C` is defined by the morphisms `f : X ⟶ Y`, `g : Y ⟶ Z`
 and `h : Z ⟶ X⟦1⟧`.
 -/
@@ -69,6 +72,7 @@ def Triangle.mk {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)
   mor₂ := g
   mor₃ := h
 #align category_theory.pretriangulated.triangle.mk CategoryTheory.Pretriangulated.Triangle.mk
+-/
 
 section
 
@@ -79,15 +83,18 @@ open scoped ZeroObject
 instance : Inhabited (Triangle C) :=
   ⟨⟨0, 0, 0, 0, 0, 0⟩⟩
 
+#print CategoryTheory.Pretriangulated.contractibleTriangle /-
 /-- For each object in `C`, there is a triangle of the form `(X,X,0,𝟙 X,0,0)`
 -/
 @[simps]
 def contractibleTriangle (X : C) : Triangle C :=
   Triangle.mk (𝟙 X) (0 : X ⟶ 0) 0
 #align category_theory.pretriangulated.contractible_triangle CategoryTheory.Pretriangulated.contractibleTriangle
+-/
 
 end
 
+#print CategoryTheory.Pretriangulated.TriangleMorphism /-
 /-- A morphism of triangles `(X,Y,Z,f,g,h) ⟶ (X',Y',Z',f',g',h')` in `C` is a triple of morphisms
 `a : X ⟶ X'`, `b : Y ⟶ Y'`, `c : Z ⟶ Z'` such that
 `a ≫ f' = f ≫ b`, `b ≫ g' = g ≫ c`, and `a⟦1⟧' ≫ h = h' ≫ c`.
@@ -112,6 +119,7 @@ structure TriangleMorphism (T₁ : Triangle C) (T₂ : Triangle C) where
   comm₂' : T₁.mor₂ ≫ hom₃ = hom₂ ≫ T₂.mor₂ := by obviously
   comm₃' : T₁.mor₃ ≫ hom₁⟦1⟧' = hom₃ ≫ T₂.mor₃ := by obviously
 #align category_theory.pretriangulated.triangle_morphism CategoryTheory.Pretriangulated.TriangleMorphism
+-/
 
 restate_axiom triangle_morphism.comm₁'
 
@@ -121,6 +129,7 @@ restate_axiom triangle_morphism.comm₃'
 
 attribute [simp, reassoc] triangle_morphism.comm₁ triangle_morphism.comm₂ triangle_morphism.comm₃
 
+#print CategoryTheory.Pretriangulated.triangleMorphismId /-
 /-- The identity triangle morphism.
 -/
 @[simps]
@@ -130,12 +139,14 @@ def triangleMorphismId (T : Triangle C) : TriangleMorphism T T
   hom₂ := 𝟙 T.obj₂
   hom₃ := 𝟙 T.obj₃
 #align category_theory.pretriangulated.triangle_morphism_id CategoryTheory.Pretriangulated.triangleMorphismId
+-/
 
 instance (T : Triangle C) : Inhabited (TriangleMorphism T T) :=
   ⟨triangleMorphismId T⟩
 
 variable {T₁ T₂ T₃ : Triangle C}
 
+#print CategoryTheory.Pretriangulated.TriangleMorphism.comp /-
 /-- Composition of triangle morphisms gives a triangle morphism.
 -/
 @[simps]
@@ -145,7 +156,9 @@ def TriangleMorphism.comp (f : TriangleMorphism T₁ T₂) (g : TriangleMorphism
   hom₂ := f.hom₂ ≫ g.hom₂
   hom₃ := f.hom₃ ≫ g.hom₃
 #align category_theory.pretriangulated.triangle_morphism.comp CategoryTheory.Pretriangulated.TriangleMorphism.comp
+-/
 
+#print CategoryTheory.Pretriangulated.triangleCategory /-
 /-- Triangles with triangle morphisms form a category.
 -/
 @[simps]
@@ -155,7 +168,9 @@ instance triangleCategory : Category (Triangle C)
   id A := triangleMorphismId A
   comp A B C f g := f.comp g
 #align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategory
+-/
 
+#print CategoryTheory.Pretriangulated.Triangle.homMk /-
 /-- a constructor for morphisms of triangles -/
 @[simps]
 def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ : A.obj₂ ⟶ B.obj₂)
@@ -168,7 +183,9 @@ def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ :
     comm₂' := comm₂
     comm₃' := comm₃ }
 #align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMk
+-/
 
+#print CategoryTheory.Pretriangulated.Triangle.isoMk /-
 /-- a constructor for isomorphisms of triangles -/
 @[simps]
 def Triangle.isoMk (A B : Triangle C) (iso₁ : A.obj₁ ≅ B.obj₁) (iso₂ : A.obj₂ ≅ B.obj₂)
@@ -189,6 +206,7 @@ def Triangle.isoMk (A B : Triangle C) (iso₁ : A.obj₁ ≅ B.obj₁) (iso₂ :
         simp only [← cancel_mono (iso₁.hom⟦(1 : ℤ)⟧'), assoc, ← functor.map_comp, iso.inv_hom_id,
           CategoryTheory.Functor.map_id, comp_id, comm₃, iso.inv_hom_id_assoc])
 #align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMk
+-/
 
 end CategoryTheory.Pretriangulated
 
Diff
@@ -74,7 +74,7 @@ section
 
 variable [HasZeroObject C] [HasZeroMorphisms C]
 
-open ZeroObject
+open scoped ZeroObject
 
 instance : Inhabited (Triangle C) :=
   ⟨⟨0, 0, 0, 0, 0, 0⟩⟩
Diff
@@ -41,12 +41,6 @@ We work in a category `C` equipped with a shift.
 -/
 variable (C : Type u) [Category.{v} C] [HasShift C ℤ]
 
-/- warning: category_theory.pretriangulated.triangle -> CategoryTheory.Pretriangulated.Triangle is a dubious translation:
-lean 3 declaration is
-  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid], 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.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt], Sort.{max (succ u2) (succ u1)}
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle CategoryTheory.Pretriangulated.Triangleₓ'. -/
 /-- A triangle in `C` is a sextuple `(X,Y,Z,f,g,h)` where `X,Y,Z` are objects of `C`,
 and `f : X ⟶ Y`, `g : Y ⟶ Z`, `h : Z ⟶ X⟦1⟧` are morphisms in `C`.
 See <https://stacks.math.columbia.edu/tag/0144>.
@@ -62,12 +56,6 @@ structure Triangle where mk' ::
 
 variable {C}
 
-/- warning: category_theory.pretriangulated.triangle.mk -> CategoryTheory.Pretriangulated.Triangle.mk is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] {X : C} {Y : C} {Z : C}, (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z (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_2 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) X)) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] {X : C} {Y : C} {Z : C}, (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) X)) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.mk CategoryTheory.Pretriangulated.Triangle.mkₓ'. -/
 /-- A triangle `(X,Y,Z,f,g,h)` in `C` is defined by the morphisms `f : X ⟶ Y`, `g : Y ⟶ Z`
 and `h : Z ⟶ X⟦1⟧`.
 -/
@@ -91,12 +79,6 @@ open ZeroObject
 instance : Inhabited (Triangle C) :=
   ⟨⟨0, 0, 0, 0, 0, 0⟩⟩
 
-/- warning: category_theory.pretriangulated.contractible_triangle -> CategoryTheory.Pretriangulated.contractibleTriangle is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_3 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_4 : CategoryTheory.Limits.HasZeroMorphisms.{u1, u2} C _inst_1], C -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_3 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_4 : CategoryTheory.Limits.HasZeroMorphisms.{u1, u2} C _inst_1], C -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.contractible_triangle CategoryTheory.Pretriangulated.contractibleTriangleₓ'. -/
 /-- For each object in `C`, there is a triangle of the form `(X,X,0,𝟙 X,0,0)`
 -/
 @[simps]
@@ -106,12 +88,6 @@ def contractibleTriangle (X : C) : Triangle C :=
 
 end
 
-/- warning: category_theory.pretriangulated.triangle_morphism -> CategoryTheory.Pretriangulated.TriangleMorphism is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid], (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> Type.{u1}
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt], (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> Type.{u1}
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_morphism CategoryTheory.Pretriangulated.TriangleMorphismₓ'. -/
 /-- A morphism of triangles `(X,Y,Z,f,g,h) ⟶ (X',Y',Z',f',g',h')` in `C` is a triple of morphisms
 `a : X ⟶ X'`, `b : Y ⟶ Y'`, `c : Z ⟶ Z'` such that
 `a ≫ f' = f ≫ b`, `b ≫ g' = g ≫ c`, and `a⟦1⟧' ≫ h = h' ≫ c`.
@@ -145,12 +121,6 @@ restate_axiom triangle_morphism.comm₃'
 
 attribute [simp, reassoc] triangle_morphism.comm₁ triangle_morphism.comm₂ triangle_morphism.comm₃
 
-/- warning: category_theory.pretriangulated.triangle_morphism_id -> CategoryTheory.Pretriangulated.triangleMorphismId is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2), CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T T
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2), CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T T
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_morphism_id CategoryTheory.Pretriangulated.triangleMorphismIdₓ'. -/
 /-- The identity triangle morphism.
 -/
 @[simps]
@@ -166,12 +136,6 @@ instance (T : Triangle C) : Inhabited (TriangleMorphism T T) :=
 
 variable {T₁ T₂ T₃ : Triangle C}
 
-/- warning: category_theory.pretriangulated.triangle_morphism.comp -> CategoryTheory.Pretriangulated.TriangleMorphism.comp is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] {T₁ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₂ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₃ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2}, (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₂) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₂ T₃) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₃)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] {T₁ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₂ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₃ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2}, (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₂) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₂ T₃) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₃)
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_morphism.comp CategoryTheory.Pretriangulated.TriangleMorphism.compₓ'. -/
 /-- Composition of triangle morphisms gives a triangle morphism.
 -/
 @[simps]
@@ -182,12 +146,6 @@ def TriangleMorphism.comp (f : TriangleMorphism T₁ T₂) (g : TriangleMorphism
   hom₃ := f.hom₃ ≫ g.hom₃
 #align category_theory.pretriangulated.triangle_morphism.comp CategoryTheory.Pretriangulated.TriangleMorphism.comp
 
-/- warning: category_theory.pretriangulated.triangle_category -> CategoryTheory.Pretriangulated.triangleCategory is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid], CategoryTheory.Category.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt], CategoryTheory.Category.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategoryₓ'. -/
 /-- Triangles with triangle morphisms form a category.
 -/
 @[simps]
@@ -198,9 +156,6 @@ instance triangleCategory : Category (Triangle C)
   comp A B C f g := f.comp g
 #align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategory
 
-/- warning: category_theory.pretriangulated.triangle.hom_mk -> CategoryTheory.Pretriangulated.Triangle.homMk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMkₓ'. -/
 /-- a constructor for morphisms of triangles -/
 @[simps]
 def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ : A.obj₂ ⟶ B.obj₂)
@@ -214,9 +169,6 @@ def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ :
     comm₃' := comm₃ }
 #align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMk
 
-/- warning: category_theory.pretriangulated.triangle.iso_mk -> CategoryTheory.Pretriangulated.Triangle.isoMk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMkₓ'. -/
 /-- a constructor for isomorphisms of triangles -/
 @[simps]
 def Triangle.isoMk (A B : Triangle C) (iso₁ : A.obj₁ ≅ B.obj₁) (iso₂ : A.obj₂ ≅ B.obj₂)
Diff
@@ -199,10 +199,7 @@ instance triangleCategory : Category (Triangle C)
 #align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategory
 
 /- warning: category_theory.pretriangulated.triangle.hom_mk -> CategoryTheory.Pretriangulated.Triangle.homMk is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (hom₁ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (hom₂ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (hom₃ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) hom₂) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) hom₁ (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) hom₃) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) hom₂ (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (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_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (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_2 A)) (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_2 (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_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_2 (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) hom₁)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (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_2 B)) hom₃ (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2))) A B)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (hom₁ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (hom₂ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (hom₃ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) hom₂) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) hom₁ (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) hom₃) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) hom₂ (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A)) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (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.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) hom₁)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) hom₃ (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2))) A B)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMkₓ'. -/
 /-- a constructor for morphisms of triangles -/
 @[simps]
@@ -218,10 +215,7 @@ def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ :
 #align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMk
 
 /- warning: category_theory.pretriangulated.triangle.iso_mk -> CategoryTheory.Pretriangulated.Triangle.isoMk is a dubious translation:
-lean 3 declaration is
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (iso₁ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (iso₂ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (iso₃ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (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_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (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_2 A)) (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_2 (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_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_2 (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (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_2 B)) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2) A B)
-but is expected to have type
-  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (iso₁ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (iso₂ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (iso₃ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A)) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (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.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2) A B)
+<too large>
 Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMkₓ'. -/
 /-- a constructor for isomorphisms of triangles -/
 @[simps]
Diff
@@ -143,7 +143,7 @@ restate_axiom triangle_morphism.comm₂'
 
 restate_axiom triangle_morphism.comm₃'
 
-attribute [simp, reassoc.1] triangle_morphism.comm₁ triangle_morphism.comm₂ triangle_morphism.comm₃
+attribute [simp, reassoc] triangle_morphism.comm₁ triangle_morphism.comm₂ triangle_morphism.comm₃
 
 /- warning: category_theory.pretriangulated.triangle_morphism_id -> CategoryTheory.Pretriangulated.triangleMorphismId is a dubious translation:
 lean 3 declaration is
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.basic
-! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
+! leanprover-community/mathlib commit d64d67d000b974f0d86a2be7918cf800be6271c8
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.Shift.Basic
 /-!
 # Triangles
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file contains the definition of triangles in an additive category with an additive shift.
 It also defines morphisms between these triangles.
 
Diff
@@ -38,6 +38,12 @@ We work in a category `C` equipped with a shift.
 -/
 variable (C : Type u) [Category.{v} C] [HasShift C ℤ]
 
+/- warning: category_theory.pretriangulated.triangle -> CategoryTheory.Pretriangulated.Triangle is a dubious translation:
+lean 3 declaration is
+  forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid], 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.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt], Sort.{max (succ u2) (succ u1)}
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle CategoryTheory.Pretriangulated.Triangleₓ'. -/
 /-- A triangle in `C` is a sextuple `(X,Y,Z,f,g,h)` where `X,Y,Z` are objects of `C`,
 and `f : X ⟶ Y`, `g : Y ⟶ Z`, `h : Z ⟶ X⟦1⟧` are morphisms in `C`.
 See <https://stacks.math.columbia.edu/tag/0144>.
@@ -53,6 +59,12 @@ structure Triangle where mk' ::
 
 variable {C}
 
+/- warning: category_theory.pretriangulated.triangle.mk -> CategoryTheory.Pretriangulated.Triangle.mk is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] {X : C} {Y : C} {Z : C}, (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z (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_2 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) X)) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] {X : C} {Y : C} {Z : C}, (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) X Y) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Y Z) -> (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) Z (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) X)) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.mk CategoryTheory.Pretriangulated.Triangle.mkₓ'. -/
 /-- A triangle `(X,Y,Z,f,g,h)` in `C` is defined by the morphisms `f : X ⟶ Y`, `g : Y ⟶ Z`
 and `h : Z ⟶ X⟦1⟧`.
 -/
@@ -76,6 +88,12 @@ open ZeroObject
 instance : Inhabited (Triangle C) :=
   ⟨⟨0, 0, 0, 0, 0, 0⟩⟩
 
+/- warning: category_theory.pretriangulated.contractible_triangle -> CategoryTheory.Pretriangulated.contractibleTriangle is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_3 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_4 : CategoryTheory.Limits.HasZeroMorphisms.{u1, u2} C _inst_1], C -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_3 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_4 : CategoryTheory.Limits.HasZeroMorphisms.{u1, u2} C _inst_1], C -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.contractible_triangle CategoryTheory.Pretriangulated.contractibleTriangleₓ'. -/
 /-- For each object in `C`, there is a triangle of the form `(X,X,0,𝟙 X,0,0)`
 -/
 @[simps]
@@ -85,6 +103,12 @@ def contractibleTriangle (X : C) : Triangle C :=
 
 end
 
+/- warning: category_theory.pretriangulated.triangle_morphism -> CategoryTheory.Pretriangulated.TriangleMorphism is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid], (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> Type.{u1}
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt], (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) -> Type.{u1}
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_morphism CategoryTheory.Pretriangulated.TriangleMorphismₓ'. -/
 /-- A morphism of triangles `(X,Y,Z,f,g,h) ⟶ (X',Y',Z',f',g',h')` in `C` is a triple of morphisms
 `a : X ⟶ X'`, `b : Y ⟶ Y'`, `c : Z ⟶ Z'` such that
 `a ≫ f' = f ≫ b`, `b ≫ g' = g ≫ c`, and `a⟦1⟧' ≫ h = h' ≫ c`.
@@ -118,6 +142,12 @@ restate_axiom triangle_morphism.comm₃'
 
 attribute [simp, reassoc.1] triangle_morphism.comm₁ triangle_morphism.comm₂ triangle_morphism.comm₃
 
+/- warning: category_theory.pretriangulated.triangle_morphism_id -> CategoryTheory.Pretriangulated.triangleMorphismId is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2), CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T T
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2), CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T T
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_morphism_id CategoryTheory.Pretriangulated.triangleMorphismIdₓ'. -/
 /-- The identity triangle morphism.
 -/
 @[simps]
@@ -133,6 +163,12 @@ instance (T : Triangle C) : Inhabited (TriangleMorphism T T) :=
 
 variable {T₁ T₂ T₃ : Triangle C}
 
+/- warning: category_theory.pretriangulated.triangle_morphism.comp -> CategoryTheory.Pretriangulated.TriangleMorphism.comp is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] {T₁ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₂ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₃ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2}, (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₂) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₂ T₃) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₃)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] {T₁ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₂ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2} {T₃ : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2}, (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₂) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₂ T₃) -> (CategoryTheory.Pretriangulated.TriangleMorphism.{u1, u2} C _inst_1 _inst_2 T₁ T₃)
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_morphism.comp CategoryTheory.Pretriangulated.TriangleMorphism.compₓ'. -/
 /-- Composition of triangle morphisms gives a triangle morphism.
 -/
 @[simps]
@@ -143,6 +179,12 @@ def TriangleMorphism.comp (f : TriangleMorphism T₁ T₂) (g : TriangleMorphism
   hom₃ := f.hom₃ ≫ g.hom₃
 #align category_theory.pretriangulated.triangle_morphism.comp CategoryTheory.Pretriangulated.TriangleMorphism.comp
 
+/- warning: category_theory.pretriangulated.triangle_category -> CategoryTheory.Pretriangulated.triangleCategory is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid], CategoryTheory.Category.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt], CategoryTheory.Category.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategoryₓ'. -/
 /-- Triangles with triangle morphisms form a category.
 -/
 @[simps]
@@ -153,6 +195,12 @@ instance triangleCategory : Category (Triangle C)
   comp A B C f g := f.comp g
 #align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategory
 
+/- warning: category_theory.pretriangulated.triangle.hom_mk -> CategoryTheory.Pretriangulated.Triangle.homMk is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (hom₁ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (hom₂ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (hom₃ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) hom₂) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) hom₁ (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) hom₃) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) hom₂ (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (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_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (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_2 A)) (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_2 (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_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_2 (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) hom₁)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (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_2 B)) hom₃ (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2))) A B)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (hom₁ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (hom₂ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (hom₃ : 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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) hom₂) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) hom₁ (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) hom₃) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) hom₂ (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A)) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (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.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) hom₁)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) hom₃ (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (Quiver.Hom.{succ u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Category.toCategoryStruct.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2))) A B)
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMkₓ'. -/
 /-- a constructor for morphisms of triangles -/
 @[simps]
 def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ : A.obj₂ ⟶ B.obj₂)
@@ -166,6 +214,12 @@ def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ :
     comm₃' := comm₃ }
 #align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMk
 
+/- warning: category_theory.pretriangulated.triangle.iso_mk -> CategoryTheory.Pretriangulated.Triangle.isoMk is a dubious translation:
+lean 3 declaration is
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (iso₁ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (iso₂ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (iso₃ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (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_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (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_2 A)) (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_2 (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_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_2 (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (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_2 B)) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2) A B)
+but is expected to have type
+  forall {C : Type.{u2}} [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] (A : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (B : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (iso₁ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (iso₂ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (iso₃ : CategoryTheory.Iso.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)), (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_2 B) iso₂) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_2 B))) -> (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_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A)) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 A) (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.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B) iso₁))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) (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_2 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_2 B)) (CategoryTheory.Iso.hom.{u1, u2} C _inst_1 (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 A) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_2 B) iso₃) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_2 B))) -> (CategoryTheory.Iso.{u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_2) (CategoryTheory.Pretriangulated.triangleCategory.{u1, u2} C _inst_1 _inst_2) A B)
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMkₓ'. -/
 /-- a constructor for isomorphisms of triangles -/
 @[simps]
 def Triangle.isoMk (A B : Triangle C) (iso₁ : A.obj₁ ≅ B.obj₁) (iso₂ : A.obj₂ ≅ B.obj₂)
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.basic
-! leanprover-community/mathlib commit f7707875544ef1f81b32cb68c79e0e24e45a0e76
+! 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.Data.Int.Basic
-import Mathbin.CategoryTheory.Shift
+import Mathbin.CategoryTheory.Shift.Basic
 
 /-!
 # Triangles
@@ -153,5 +153,39 @@ instance triangleCategory : Category (Triangle C)
   comp A B C f g := f.comp g
 #align category_theory.pretriangulated.triangle_category CategoryTheory.Pretriangulated.triangleCategory
 
+/-- a constructor for morphisms of triangles -/
+@[simps]
+def Triangle.homMk (A B : Triangle C) (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ : A.obj₂ ⟶ B.obj₂)
+    (hom₃ : A.obj₃ ⟶ B.obj₃) (comm₁ : A.mor₁ ≫ hom₂ = hom₁ ≫ B.mor₁)
+    (comm₂ : A.mor₂ ≫ hom₃ = hom₂ ≫ B.mor₂) (comm₃ : A.mor₃ ≫ hom₁⟦1⟧' = hom₃ ≫ B.mor₃) : A ⟶ B :=
+  { hom₁
+    hom₂
+    hom₃
+    comm₁' := comm₁
+    comm₂' := comm₂
+    comm₃' := comm₃ }
+#align category_theory.pretriangulated.triangle.hom_mk CategoryTheory.Pretriangulated.Triangle.homMk
+
+/-- a constructor for isomorphisms of triangles -/
+@[simps]
+def Triangle.isoMk (A B : Triangle C) (iso₁ : A.obj₁ ≅ B.obj₁) (iso₂ : A.obj₂ ≅ B.obj₂)
+    (iso₃ : A.obj₃ ≅ B.obj₃) (comm₁ : A.mor₁ ≫ iso₂.Hom = iso₁.Hom ≫ B.mor₁)
+    (comm₂ : A.mor₂ ≫ iso₃.Hom = iso₂.Hom ≫ B.mor₂)
+    (comm₃ : A.mor₃ ≫ iso₁.Hom⟦1⟧' = iso₃.Hom ≫ B.mor₃) : A ≅ B
+    where
+  Hom := Triangle.homMk _ _ iso₁.Hom iso₂.Hom iso₃.Hom comm₁ comm₂ comm₃
+  inv :=
+    Triangle.homMk _ _ iso₁.inv iso₂.inv iso₃.inv
+      (by
+        simp only [← cancel_mono iso₂.hom, assoc, iso.inv_hom_id, comp_id, comm₁,
+          iso.inv_hom_id_assoc])
+      (by
+        simp only [← cancel_mono iso₃.hom, assoc, iso.inv_hom_id, comp_id, comm₂,
+          iso.inv_hom_id_assoc])
+      (by
+        simp only [← cancel_mono (iso₁.hom⟦(1 : ℤ)⟧'), assoc, ← functor.map_comp, iso.inv_hom_id,
+          CategoryTheory.Functor.map_id, comp_id, comm₃, iso.inv_hom_id_assoc])
+#align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMk
+
 end CategoryTheory.Pretriangulated
 

Changes in mathlib4

mathlib3
mathlib4
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
@@ -331,4 +331,36 @@ lemma productTriangle.zero₃₁ [HasZeroMorphisms C]
 
 end
 
+namespace Triangle
+
+/-- The first projection `Triangle C ⥤ C`. -/
+@[simps]
+def π₁ : Triangle C ⥤ C where
+  obj T := T.obj₁
+  map f := f.hom₁
+
+/-- The second projection `Triangle C ⥤ C`. -/
+@[simps]
+def π₂ : Triangle C ⥤ C where
+  obj T := T.obj₂
+  map f := f.hom₂
+
+/-- The third projection `Triangle C ⥤ C`. -/
+@[simps]
+def π₃ : Triangle C ⥤ C where
+  obj T := T.obj₃
+  map f := f.hom₃
+
+section
+
+variable {A B : Triangle C} (φ : A ⟶ B) [IsIso φ]
+
+instance : IsIso φ.hom₁ := (inferInstance : IsIso (π₁.map φ))
+instance : IsIso φ.hom₂ := (inferInstance : IsIso (π₂.map φ))
+instance : IsIso φ.hom₃ := (inferInstance : IsIso (π₃.map φ))
+
+end
+
+end Triangle
+
 end CategoryTheory.Pretriangulated
feat(Algebra/Homology/HomotopyCategory): various prerequisites for the triangulated structure (#9592)

This PR adds various small prerequisites for the construction of the triangulated structure on the homotopy category of cochain complexes.

Diff
@@ -162,6 +162,23 @@ lemma Triangle.hom_ext {A B : Triangle C} (f g : A ⟶ B)
     (h₁ : f.hom₁ = g.hom₁) (h₂ : f.hom₂ = g.hom₂) (h₃ : f.hom₃ = g.hom₃) : f = g :=
   TriangleMorphism.ext _ _ h₁ h₂ h₃
 
+@[simp]
+lemma id_hom₁ (A : Triangle C) : TriangleMorphism.hom₁ (𝟙 A) = 𝟙 _ := rfl
+@[simp]
+lemma id_hom₂ (A : Triangle C) : TriangleMorphism.hom₂ (𝟙 A) = 𝟙 _ := rfl
+@[simp]
+lemma id_hom₃ (A : Triangle C) : TriangleMorphism.hom₃ (𝟙 A) = 𝟙 _ := rfl
+
+@[simp, reassoc]
+lemma comp_hom₁ {X Y Z : Triangle C} (f : X ⟶ Y) (g : Y ⟶ Z) :
+    (f ≫ g).hom₁ = f.hom₁ ≫ g.hom₁ := rfl
+@[simp, reassoc]
+lemma comp_hom₂ {X Y Z : Triangle C} (f : X ⟶ Y) (g : Y ⟶ Z) :
+    (f ≫ g).hom₂ = f.hom₂ ≫ g.hom₂ := rfl
+@[simp, reassoc]
+lemma comp_hom₃ {X Y Z : Triangle C} (f : X ⟶ Y) (g : Y ⟶ Z) :
+    (f ≫ g).hom₃ = f.hom₃ ≫ g.hom₃ := rfl
+
 @[simps]
 def Triangle.homMk (A B : Triangle C)
     (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ : A.obj₂ ⟶ B.obj₂) (hom₃ : A.obj₃ ⟶ B.obj₃)
@@ -200,6 +217,26 @@ lemma Triangle.isIso_of_isIsos {A B : Triangle C} (f : A ⟶ B)
     (by simp) (by simp) (by simp)
   exact (inferInstance : IsIso e.hom)
 
+@[reassoc (attr := simp)]
+lemma _root_.CategoryTheory.Iso.hom_inv_id_triangle_hom₁ {A B : Triangle C} (e : A ≅ B) :
+    e.hom.hom₁ ≫ e.inv.hom₁ = 𝟙 _ := by rw [← comp_hom₁, e.hom_inv_id, id_hom₁]
+@[reassoc (attr := simp)]
+lemma _root_.CategoryTheory.Iso.hom_inv_id_triangle_hom₂ {A B : Triangle C} (e : A ≅ B) :
+    e.hom.hom₂ ≫ e.inv.hom₂ = 𝟙 _ := by rw [← comp_hom₂, e.hom_inv_id, id_hom₂]
+@[reassoc (attr := simp)]
+lemma _root_.CategoryTheory.Iso.hom_inv_id_triangle_hom₃ {A B : Triangle C} (e : A ≅ B) :
+    e.hom.hom₃ ≫ e.inv.hom₃ = 𝟙 _ := by rw [← comp_hom₃, e.hom_inv_id, id_hom₃]
+
+@[reassoc (attr := simp)]
+lemma _root_.CategoryTheory.Iso.inv_hom_id_triangle_hom₁ {A B : Triangle C} (e : A ≅ B) :
+    e.inv.hom₁ ≫ e.hom.hom₁ = 𝟙 _ := by rw [← comp_hom₁, e.inv_hom_id, id_hom₁]
+@[reassoc (attr := simp)]
+lemma _root_.CategoryTheory.Iso.inv_hom_id_triangle_hom₂ {A B : Triangle C} (e : A ≅ B) :
+    e.inv.hom₂ ≫ e.hom.hom₂ = 𝟙 _ := by rw [← comp_hom₂, e.inv_hom_id, id_hom₂]
+@[reassoc (attr := simp)]
+lemma _root_.CategoryTheory.Iso.inv_hom_id_triangle_hom₃ {A B : Triangle C} (e : A ≅ B) :
+    e.inv.hom₃ ≫ e.hom.hom₃ = 𝟙 _ := by rw [← comp_hom₃, e.inv_hom_id, id_hom₃]
+
 lemma Triangle.eqToHom_hom₁ {A B : Triangle C} (h : A = B) :
     (eqToHom h).hom₁ = eqToHom (by subst h; rfl) := by subst h; rfl
 lemma Triangle.eqToHom_hom₂ {A B : Triangle C} (h : A = B) :
feat(CategoryTheory): a product of distinguished triangles is distinguished (#7641)
Diff
@@ -3,7 +3,8 @@ 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.Data.Int.Basic
+import Mathlib.CategoryTheory.Adjunction.Limits
+import Mathlib.CategoryTheory.Limits.Preserves.Shapes.Products
 import Mathlib.CategoryTheory.Limits.Shapes.Biproducts
 import Mathlib.CategoryTheory.Shift.Basic
 
@@ -193,6 +194,12 @@ def Triangle.isoMk (A B : Triangle C)
       Functor.map_id, Category.comp_id])
 #align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMk
 
+lemma Triangle.isIso_of_isIsos {A B : Triangle C} (f : A ⟶ B)
+    (h₁ : IsIso f.hom₁) (h₂ : IsIso f.hom₂) (h₃ : IsIso f.hom₃) : IsIso f := by
+  let e := Triangle.isoMk A B (asIso f.hom₁) (asIso f.hom₂) (asIso f.hom₃)
+    (by simp) (by simp) (by simp)
+  exact (inferInstance : IsIso e.hom)
+
 lemma Triangle.eqToHom_hom₁ {A B : Triangle C} (h : A = B) :
     (eqToHom h).hom₁ = eqToHom (by subst h; rfl) := by subst h; rfl
 lemma Triangle.eqToHom_hom₂ {A B : Triangle C} (h : A = B) :
@@ -221,4 +228,70 @@ def binaryProductTriangleIsoBinaryBiproductTriangle
   Triangle.isoMk _ _ (Iso.refl _) (biprod.isoProd X₁ X₂).symm (Iso.refl _)
     (by aesop_cat) (by aesop_cat) (by aesop_cat)
 
+section
+
+variable {J : Type*} (T : J → Triangle 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 : ℤ)⟧)]
+
+/-- The product of a family of triangles. -/
+@[simps!]
+def productTriangle : Triangle C :=
+  Triangle.mk (Pi.map (fun j => (T j).mor₁))
+    (Pi.map (fun j => (T j).mor₂))
+    (Pi.map (fun j => (T j).mor₃) ≫ inv (piComparison _ _))
+
+/-- A projection from the product of a family of triangles. -/
+@[simps]
+def productTriangle.π (j : J) :
+    productTriangle T ⟶ T j where
+  hom₁ := Pi.π _ j
+  hom₂ := Pi.π _ j
+  hom₃ := Pi.π _ j
+  comm₃ := by
+    dsimp
+    rw [← piComparison_comp_π, assoc, IsIso.inv_hom_id_assoc]
+    simp only [limMap_π, Discrete.natTrans_app]
+
+/-- The fan given by `productTriangle T`. -/
+@[simp]
+def productTriangle.fan : Fan T := Fan.mk (productTriangle T) (productTriangle.π T)
+
+/-- A family of morphisms `T' ⟶ T j` lifts to a morphism `T' ⟶ productTriangle T`. -/
+@[simps]
+def productTriangle.lift {T' : Triangle C} (φ : ∀ j, T' ⟶ T j) :
+    T' ⟶ productTriangle T where
+  hom₁ := Pi.lift (fun j => (φ j).hom₁)
+  hom₂ := Pi.lift (fun j => (φ j).hom₂)
+  hom₃ := Pi.lift (fun j => (φ j).hom₃)
+  comm₃ := by
+    dsimp
+    rw [← cancel_mono (piComparison _ _), assoc, assoc, assoc, IsIso.inv_hom_id, comp_id]
+    aesop_cat
+
+/-- The triangle `productTriangle T` satisfies the universal property of the categorical
+product of the triangles `T`. -/
+def productTriangle.isLimitFan : IsLimit (productTriangle.fan T) :=
+  mkFanLimit _ (fun s => productTriangle.lift T s.proj) (fun s j => by aesop_cat) (by
+    intro s m hm
+    ext1
+    all_goals
+      exact Pi.hom_ext _ _ (fun j => (by simp [← hm])))
+
+lemma productTriangle.zero₃₁ [HasZeroMorphisms C]
+    (h : ∀ j, (T j).mor₃ ≫ (T j).mor₁⟦(1 : ℤ)⟧' = 0) :
+    (productTriangle T).mor₃ ≫ (productTriangle T).mor₁⟦1⟧' = 0 := by
+  have : HasProduct (fun j => (T j).obj₂⟦(1 : ℤ)⟧) :=
+    ⟨_, isLimitFanMkObjOfIsLimit (shiftFunctor C (1 : ℤ)) _ _
+      (productIsProduct (fun j => (T j).obj₂))⟩
+  dsimp
+  change _ ≫ (Pi.lift (fun j => Pi.π _ j ≫ (T j).mor₁))⟦(1 : ℤ)⟧' = 0
+  rw [assoc, ← cancel_mono (piComparison _ _), zero_comp, assoc, assoc]
+  ext j
+  simp only [map_lift_piComparison, assoc, limit.lift_π, Fan.mk_π_app, zero_comp,
+    Functor.map_comp, ← piComparison_comp_π_assoc, IsIso.inv_hom_id_assoc,
+    limMap_π_assoc, Discrete.natTrans_app, h j, comp_zero]
+
+end
+
 end CategoryTheory.Pretriangulated
feat: pretriangulated categories have finite biproducts (#7626)
Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Luke Kershaw
 -/
 import Mathlib.Data.Int.Basic
+import Mathlib.CategoryTheory.Limits.Shapes.Biproducts
 import Mathlib.CategoryTheory.Shift.Basic
 
 #align_import category_theory.triangulated.basic from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
@@ -199,4 +200,25 @@ lemma Triangle.eqToHom_hom₂ {A B : Triangle C} (h : A = B) :
 lemma Triangle.eqToHom_hom₃ {A B : Triangle C} (h : A = B) :
     (eqToHom h).hom₃ = eqToHom (by subst h; rfl) := by subst h; rfl
 
+/-- The obvious triangle `X₁ ⟶ X₁ ⊞ X₂ ⟶ X₂ ⟶ X₁⟦1⟧`. -/
+@[simps!]
+def binaryBiproductTriangle (X₁ X₂ : C) [HasZeroMorphisms C] [HasBinaryBiproduct X₁ X₂] :
+    Triangle C :=
+  Triangle.mk biprod.inl (Limits.biprod.snd : X₁ ⊞ X₂ ⟶ _) 0
+
+/-- The obvious triangle `X₁ ⟶ X₁ ⨯ X₂ ⟶ X₂ ⟶ X₁⟦1⟧`. -/
+@[simps!]
+def binaryProductTriangle (X₁ X₂ : C) [HasZeroMorphisms C] [HasBinaryProduct X₁ X₂] :
+    Triangle C :=
+  Triangle.mk ((Limits.prod.lift (𝟙 X₁) 0)) (Limits.prod.snd : X₁ ⨯ X₂ ⟶ _) 0
+
+/-- The canonical isomorphism of triangles
+`binaryProductTriangle X₁ X₂ ≅ binaryBiproductTriangle X₁ X₂`. -/
+@[simps!]
+def binaryProductTriangleIsoBinaryBiproductTriangle
+    (X₁ X₂ : C) [HasZeroMorphisms C] [HasBinaryBiproduct X₁ X₂] :
+    binaryProductTriangle X₁ X₂ ≅ binaryBiproductTriangle X₁ X₂ :=
+  Triangle.isoMk _ _ (Iso.refl _) (biprod.isoProd X₁ X₂).symm (Iso.refl _)
+    (by aesop_cat) (by aesop_cat) (by aesop_cat)
+
 end CategoryTheory.Pretriangulated
chore: exactly 4 spaces in theorems (#7328)

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

Diff
@@ -157,7 +157,7 @@ instance triangleCategory : Category (Triangle C)
 
 @[ext]
 lemma Triangle.hom_ext {A B : Triangle C} (f g : A ⟶ B)
-  (h₁ : f.hom₁ = g.hom₁) (h₂ : f.hom₂ = g.hom₂) (h₃ : f.hom₃ = g.hom₃) : f = g :=
+    (h₁ : f.hom₁ = g.hom₁) (h₂ : f.hom₂ = g.hom₂) (h₃ : f.hom₃ = g.hom₃) : f = g :=
   TriangleMorphism.ext _ _ h₁ h₂ h₃
 
 @[simps]
feat: the shift on the category of triangles (#6688)

If a preadditive category C is equipped with a shift by the integers, then the category of triangles in C is also equipped with a shift.

Diff
@@ -192,4 +192,11 @@ def Triangle.isoMk (A B : Triangle C)
       Functor.map_id, Category.comp_id])
 #align category_theory.pretriangulated.triangle.iso_mk CategoryTheory.Pretriangulated.Triangle.isoMk
 
+lemma Triangle.eqToHom_hom₁ {A B : Triangle C} (h : A = B) :
+    (eqToHom h).hom₁ = eqToHom (by subst h; rfl) := by subst h; rfl
+lemma Triangle.eqToHom_hom₂ {A B : Triangle C} (h : A = B) :
+    (eqToHom h).hom₂ = eqToHom (by subst h; rfl) := by subst h; rfl
+lemma Triangle.eqToHom_hom₃ {A B : Triangle C} (h : A = B) :
+    (eqToHom h).hom₃ = eqToHom (by subst h; rfl) := by subst h; rfl
+
 end CategoryTheory.Pretriangulated
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,15 +2,12 @@
 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.basic
-! 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.Data.Int.Basic
 import Mathlib.CategoryTheory.Shift.Basic
 
+#align_import category_theory.triangulated.basic from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
+
 /-!
 # Triangles
 
chore: review of automation in category theory (#4793)

Clean up of automation in the category theory library. Leaving out unnecessary proof steps, or fields done by aesop_cat, and making more use of available autoparameters.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -23,9 +23,7 @@ TODO: generalise this to n-angles in n-angulated categories as in https://arxiv.
 
 noncomputable section
 
-open CategoryTheory
-
-open CategoryTheory.Limits
+open CategoryTheory Limits
 
 universe v v₀ v₁ v₂ u u₀ u₁ u₂
 
@@ -168,8 +166,9 @@ lemma Triangle.hom_ext {A B : Triangle C} (f g : A ⟶ B)
 @[simps]
 def Triangle.homMk (A B : Triangle C)
     (hom₁ : A.obj₁ ⟶ B.obj₁) (hom₂ : A.obj₂ ⟶ B.obj₂) (hom₃ : A.obj₃ ⟶ B.obj₃)
-    (comm₁ : A.mor₁ ≫ hom₂ = hom₁ ≫ B.mor₁) (comm₂ : A.mor₂ ≫ hom₃ = hom₂ ≫ B.mor₂)
-    (comm₃ : A.mor₃ ≫ hom₁⟦1⟧' = hom₃ ≫ B.mor₃) :
+    (comm₁ : A.mor₁ ≫ hom₂ = hom₁ ≫ B.mor₁ := by aesop_cat)
+    (comm₂ : A.mor₂ ≫ hom₃ = hom₂ ≫ B.mor₂ := by aesop_cat)
+    (comm₃ : A.mor₃ ≫ hom₁⟦1⟧' = hom₃ ≫ B.mor₃ := by aesop_cat) :
     A ⟶ B where
   hom₁ := hom₁
   hom₂ := hom₂
@@ -182,9 +181,9 @@ def Triangle.homMk (A B : Triangle C)
 @[simps]
 def Triangle.isoMk (A B : Triangle C)
     (iso₁ : A.obj₁ ≅ B.obj₁) (iso₂ : A.obj₂ ≅ B.obj₂) (iso₃ : A.obj₃ ≅ B.obj₃)
-    (comm₁ : A.mor₁ ≫ iso₂.hom = iso₁.hom ≫ B.mor₁)
-    (comm₂ : A.mor₂ ≫ iso₃.hom = iso₂.hom ≫ B.mor₂)
-    (comm₃ : A.mor₃ ≫ iso₁.hom⟦1⟧' = iso₃.hom ≫ B.mor₃) : A ≅ B where
+    (comm₁ : A.mor₁ ≫ iso₂.hom = iso₁.hom ≫ B.mor₁ := by aesop_cat)
+    (comm₂ : A.mor₂ ≫ iso₃.hom = iso₂.hom ≫ B.mor₂ := by aesop_cat)
+    (comm₃ : A.mor₃ ≫ iso₁.hom⟦1⟧' = iso₃.hom ≫ B.mor₃ := by aesop_cat) : A ≅ B where
   hom := Triangle.homMk _ _ iso₁.hom iso₂.hom iso₃.hom comm₁ comm₂ comm₃
   inv := Triangle.homMk _ _ iso₁.inv iso₂.inv iso₃.inv
     (by simp only [← cancel_mono iso₂.hom, assoc, Iso.inv_hom_id, comp_id,
feat: port CategoryTheory.Triangulated.Triangulated (#3072)

Also actually corrects the SHA that was incorrectly corrected in #3346; the stupid example was in CategoryTheory.Triangulated.Rotate and not CategoryTheory.Triangulated.Basic.

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: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Chris Hughes <chrishughes24@gmail.com> Co-authored-by: Jon Eugster <eugster.jon@gmail.com> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: qawbecrdtey <qawbecrdtey@kaist.ac.kr> Co-authored-by: Jeremy Tan Jie Rui <e0191785@u.nus.edu> Co-authored-by: Sebastian Zivota <loewenheim@mailbox.org> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>

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.basic
-! leanprover-community/mathlib commit 94d4e70e97c36c896cb70fb42821acfed040de60
+! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
chore: update SHA in CategoryTheory.Triangulated.Basic (#3346)

The stupid example (https://github.com/leanprover-community/mathlib/pull/18701) wasn't ported and thus doesn't need to be removed.

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.basic
-! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
+! leanprover-community/mathlib commit 94d4e70e97c36c896cb70fb42821acfed040de60
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
feat: port CategoryTheory.Triangulated.Basic (#3046)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: adamtopaz <github@adamtopaz.com> Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Dependencies 137

138 files ported (100.0%)
57108 lines ported (100.0%)

All dependencies are ported!