category_theory.triangulated.pretriangulated
⟷
Mathlib.CategoryTheory.Triangulated.Pretriangulated
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -52,7 +52,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
#print CategoryTheory.Pretriangulated /-
/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
* Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -97,7 +97,7 @@ variable [hC : Pretriangulated C]
notation:20 "dist_triang " C => distinguishedTriangles C
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.rot_of_distTriang /-
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
@@ -106,7 +106,7 @@ theorem rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_t
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_distTriang
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.inv_rot_of_distTriang /-
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
@@ -116,7 +116,7 @@ theorem inv_rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_distTriang
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂ /-
/-- Given any distinguished triangle
```
@@ -135,7 +135,7 @@ theorem comp_distTriang_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mor
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃ /-
/-- Given any distinguished triangle
```
@@ -150,7 +150,7 @@ theorem comp_distTriang_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁ /-
/-- Given any distinguished triangle
```
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -51,7 +51,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
#print CategoryTheory.Pretriangulated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -51,7 +51,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
#print CategoryTheory.Pretriangulated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
mathlib commit https://github.com/leanprover-community/mathlib/commit/b1abe23ae96fef89ad30d9f4362c307f72a55010
@@ -98,26 +98,26 @@ variable [hC : Pretriangulated C]
notation:20 "dist_triang " C => distinguishedTriangles C
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
+#print CategoryTheory.Pretriangulated.rot_of_distTriang /-
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
-theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
+theorem rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
(rotate_distinguished_triangle T).mp H
-#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_distTriang
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
+#print CategoryTheory.Pretriangulated.inv_rot_of_distTriang /-
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
-theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
+theorem inv_rot_of_distTriang (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
(rotate_distinguished_triangle T.invRotate).mpr
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
-#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_distTriang
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
+#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂ /-
/-- Given any distinguished triangle
```
f g h
@@ -126,17 +126,17 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
the composition `f ≫ g = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
-theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mor₁ ≫ T.mor₂ = 0 :=
+theorem comp_distTriang_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mor₁ ≫ T.mor₂ = 0 :=
by
obtain ⟨c, hc⟩ :=
complete_distinguished_triangle_morphism _ _ (contractible_distinguished T.obj₁) H (𝟙 T.obj₁)
T.mor₁ rfl
simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
+#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃ /-
/-- Given any distinguished triangle
```
f g h
@@ -145,13 +145,13 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
the composition `g ≫ h = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
-theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor₂ ≫ T.mor₃ = 0 :=
- comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+theorem comp_distTriang_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor₂ ≫ T.mor₃ = 0 :=
+ comp_distTriang_mor_zero₁₂ C T.rotate (rot_of_distTriang C T H)
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
-#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
+#print CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁ /-
/-- Given any distinguished triangle
```
f g h
@@ -160,12 +160,12 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
the composition `h ≫ f⟦1⟧ = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
-theorem comp_dist_triangle_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
+theorem comp_distTriang_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
T.mor₃ ≫ (shiftEquiv C 1).Functor.map T.mor₁ = 0 :=
by
- have H₂ := rot_of_dist_triangle C T.rotate (rot_of_dist_triangle C T H)
+ have H₂ := rot_of_distTriang C T.rotate (rot_of_distTriang C T H)
simpa using comp_dist_triangle_mor_zero₁₂ C T.rotate.rotate H₂
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁
-/
/-
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2021 Luke Kershaw. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw
-/
-import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathbin.CategoryTheory.Shift.Basic
-import Mathbin.CategoryTheory.Triangulated.Rotate
+import CategoryTheory.Preadditive.AdditiveFunctor
+import CategoryTheory.Shift.Basic
+import CategoryTheory.Triangulated.Rotate
#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
@@ -51,8 +51,8 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
#print CategoryTheory.Pretriangulated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
* Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -97,7 +97,7 @@ variable [hC : Pretriangulated C]
notation:20 "dist_triang " C => distinguishedTriangles C
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
@@ -106,7 +106,7 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
@@ -116,7 +116,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
/-- Given any distinguished triangle
```
@@ -135,7 +135,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
/-- Given any distinguished triangle
```
@@ -150,7 +150,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
/-- Given any distinguished triangle
```
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2021 Luke Kershaw. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw
-
-! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
import Mathbin.CategoryTheory.Shift.Basic
import Mathbin.CategoryTheory.Triangulated.Rotate
+#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e"
+
/-!
# Pretriangulated Categories
@@ -55,7 +52,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
#print CategoryTheory.Pretriangulated /-
/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
* Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -100,7 +97,7 @@ variable [hC : Pretriangulated C]
notation:20 "dist_triang " C => distinguishedTriangles C
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
@@ -109,7 +106,7 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
@@ -119,7 +116,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
/-- Given any distinguished triangle
```
@@ -138,7 +135,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
/-- Given any distinguished triangle
```
@@ -153,7 +150,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
/-- Given any distinguished triangle
```
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -53,7 +53,8 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+#print CategoryTheory.Pretriangulated /-
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
@@ -91,32 +92,35 @@ class Pretriangulated where
(a : T₁.obj₁ ⟶ T₂.obj₁) (b : T₁.obj₂ ⟶ T₂.obj₂) (comm₁ : T₁.mor₁ ≫ b = a ≫ T₂.mor₁),
∃ c : T₁.obj₃ ⟶ T₂.obj₃, T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧ T₁.mor₃ ≫ a⟦1⟧' = c ≫ T₂.mor₃
#align category_theory.pretriangulated CategoryTheory.Pretriangulated
+-/
namespace Pretriangulated
variable [hC : Pretriangulated C]
-include hC
-
--- mathport name: «exprdist_triang »
notation:20 "dist_triang " C => distinguishedTriangles C
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.rot_of_dist_triangle /-
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
(rotate_distinguished_triangle T).mp H
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle /-
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
(rotate_distinguished_triangle T.invRotate).mpr
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ /-
/-- Given any distinguished triangle
```
f g h
@@ -132,8 +136,10 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
T.mor₁ rfl
simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ /-
/-- Given any distinguished triangle
```
f g h
@@ -145,8 +151,10 @@ See <https://stacks.math.columbia.edu/tag/0146>
theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mor₂ ≫ T.mor₃ = 0 :=
comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+#print CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ /-
/-- Given any distinguished triangle
```
f g h
@@ -161,6 +169,7 @@ theorem comp_dist_triangle_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
have H₂ := rot_of_dist_triangle C T.rotate (rot_of_dist_triangle C T H)
simpa using comp_dist_triangle_mor_zero₁₂ C T.rotate.rotate H₂
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+-/
/-
TODO: If `C` is pretriangulated with respect to a shift,
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -54,7 +54,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
* Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -101,14 +101,14 @@ include hC
-- mathport name: «exprdist_triang »
notation:20 "dist_triang " C => distinguishedTriangles C
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
(rotate_distinguished_triangle T).mp H
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
@@ -116,7 +116,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
f g h
@@ -133,7 +133,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
f g h
@@ -146,7 +146,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
f g h
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -53,7 +53,7 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -83,7 +83,7 @@ class Pretriangulated where
contractible_distinguished : ∀ X : C, contractibleTriangle X ∈ distinguished_triangles
distinguished_cocone_triangle :
∀ (X Y : C) (f : X ⟶ Y),
- ∃ (Z : C)(g : Y ⟶ Z)(h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguished_triangles
+ ∃ (Z : C) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguished_triangles
rotate_distinguished_triangle :
∀ T : Triangle C, T ∈ distinguished_triangles ↔ T.rotate ∈ distinguished_triangles
complete_distinguished_triangle_morphism :
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -53,12 +53,6 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
-/- warning: category_theory.pretriangulated -> CategoryTheory.Pretriangulated is a dubious translation:
-lean 3 declaration is
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)], Sort.{max (succ u2) (succ u1)}
-but is expected to have type
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1], Sort.{max (succ u2) (succ u1)}
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated CategoryTheory.Pretriangulatedₓ'. -/
/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
@@ -107,12 +101,6 @@ include hC
-- mathport name: «exprdist_triang »
notation:20 "dist_triang " C => distinguishedTriangles C
-/- warning: category_theory.pretriangulated.rot_of_dist_triangle -> CategoryTheory.Pretriangulated.rot_of_dist_triangle is a dubious translation:
-lean 3 declaration is
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
-but is expected to have type
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 hC) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangleₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
@@ -120,12 +108,6 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
(rotate_distinguished_triangle T).mp H
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
-/- warning: category_theory.pretriangulated.inv_rot_of_dist_triangle -> CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle is a dubious translation:
-lean 3 declaration is
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
-but is expected to have type
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangleₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
@@ -134,12 +116,6 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
-/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ is a dubious translation:
-lean 3 declaration is
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T))))))
-but is expected to have type
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)))))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
@@ -157,12 +133,6 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
-/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ is a dubious translation:
-lean 3 declaration is
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)))))))
-but is expected to have type
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))))))
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
@@ -176,9 +146,6 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
-/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -177,10 +177,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ is a dubious translation:
-lean 3 declaration is
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)))))))
-but is expected to have type
- forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -59,7 +59,7 @@ lean 3 declaration is
but is expected to have type
forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1], Sort.{max (succ u2) (succ u1)}
Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated CategoryTheory.Pretriangulatedₓ'. -/
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw
! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
+! leanprover-community/mathlib commit 25a9423c6b2c8626e91c688bfd6c1d0a986a3e6e
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.CategoryTheory.Triangulated.Rotate
/-!
# Pretriangulated Categories
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file contains the definition of pretriangulated categories and triangulated functors
between them.
mathlib commit https://github.com/leanprover-community/mathlib/commit/284fdd2962e67d2932fa3a79ce19fcf92d38e228
@@ -50,6 +50,12 @@ variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Pread
variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
+/- warning: category_theory.pretriangulated -> CategoryTheory.Pretriangulated is a dubious translation:
+lean 3 declaration is
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)], Sort.{max (succ u2) (succ u1)}
+but is expected to have type
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1], Sort.{max (succ u2) (succ u1)}
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated CategoryTheory.Pretriangulatedₓ'. -/
/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
@@ -98,6 +104,12 @@ include hC
-- mathport name: «exprdist_triang »
notation:20 "dist_triang " C => distinguishedTriangles C
+/- warning: category_theory.pretriangulated.rot_of_dist_triangle -> CategoryTheory.Pretriangulated.rot_of_dist_triangle is a dubious translation:
+lean 3 declaration is
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
+but is expected to have type
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.rotate.{u1, u2} C _inst_1 _inst_4 _inst_3 hC) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangleₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
@@ -105,6 +117,12 @@ theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dis
(rotate_distinguished_triangle T).mp H
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+/- warning: category_theory.pretriangulated.inv_rot_of_dist_triangle -> CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle is a dubious translation:
+lean 3 declaration is
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC))
+but is expected to have type
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC)) -> (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (CategoryTheory.Pretriangulated.Triangle.invRotate.{u1, u2} C _inst_1 _inst_4 _inst_3 T) (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 hC))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangleₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
@@ -113,6 +131,12 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ is a dubious translation:
+lean 3 declaration is
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T))))))
+but is expected to have type
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC)))))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
@@ -130,6 +154,12 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ is a dubious translation:
+lean 3 declaration is
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (One.one.{0} Int Int.hasOne)) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)))))))
+but is expected to have type
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC)) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
@@ -143,6 +173,12 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+/- warning: category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ -> CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ is a dubious translation:
+lean 3 declaration is
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.addMonoid] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : forall (n : Int), CategoryTheory.Functor.Additive.{u2, u2, u1, u1} C C _inst_1 _inst_1 _inst_4 _inst_4 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 n)] [hC : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n)] (T : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.Mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.hasMem.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) T (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 (fun (n : Int) => _inst_5 n) hC)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.addMonoid _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.map.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (OfNat.ofNat.{0} Int 1 (OfNat.mk.{0} Int 1 (One.one.{0} Int Int.hasOne))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 T))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (OfNat.mk.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) 0 (Zero.zero.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T))) (CategoryTheory.Limits.HasZeroMorphisms.hasZero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 T) (CategoryTheory.Functor.obj.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.addGroup _inst_3 (One.one.{0} Int Int.hasOne))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 T)))))))
+but is expected to have type
+ forall (C : Type.{u2}) [_inst_1 : CategoryTheory.Category.{u1, u2} C] [_inst_2 : CategoryTheory.Limits.HasZeroObject.{u1, u2} C _inst_1] [_inst_3 : CategoryTheory.HasShift.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt] [_inst_4 : CategoryTheory.Preadditive.{u1, u2} C _inst_1] [_inst_5 : CategoryTheory.Pretriangulated.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4] (hC : CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3), (Membership.mem.{max u2 u1, max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3) (Set.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) (Set.instMembershipSet.{max u2 u1} (CategoryTheory.Pretriangulated.Triangle.{u1, u2} C _inst_1 _inst_3)) hC (CategoryTheory.Pretriangulated.distinguishedTriangles.{u1, u2} C _inst_1 _inst_2 _inst_3 _inst_4 _inst_5)) -> (Eq.{succ u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.CategoryStruct.comp.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.shiftFunctor.{u1, u2, 0} C Int _inst_1 Int.instAddMonoidInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1)))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC)) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC)) (CategoryTheory.Pretriangulated.Triangle.mor₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.map.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₁.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC) (CategoryTheory.Pretriangulated.Triangle.mor₁.{u1, u2} C _inst_1 _inst_3 hC))) (OfNat.ofNat.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) 0 (Zero.toOfNat0.{u1} (Quiver.Hom.{succ u1, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))) (CategoryTheory.Limits.HasZeroMorphisms.Zero.{u1, u2} C _inst_1 (CategoryTheory.Preadditive.preadditiveHasZeroMorphisms.{u1, u2} C _inst_1 _inst_4) (CategoryTheory.Pretriangulated.Triangle.obj₃.{u1, u2} C _inst_1 _inst_3 hC) (Prefunctor.obj.{succ u1, succ u1, u2, u2} C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) C (CategoryTheory.CategoryStruct.toQuiver.{u1, u2} C (CategoryTheory.Category.toCategoryStruct.{u1, u2} C _inst_1)) (CategoryTheory.Functor.toPrefunctor.{u1, u1, u2, u2} C _inst_1 C _inst_1 (CategoryTheory.Equivalence.functor.{u1, u1, u2, u2} C C _inst_1 _inst_1 (CategoryTheory.shiftEquiv.{u1, u2, 0} C Int _inst_1 Int.instAddGroupInt _inst_3 (OfNat.ofNat.{0} Int 1 (instOfNatInt 1))))) (CategoryTheory.Pretriangulated.Triangle.obj₂.{u1, u2} C _inst_1 _inst_3 hC))))))
+Case conversion may be inaccurate. Consider using '#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁ₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
mathlib commit https://github.com/leanprover-community/mathlib/commit/b685f506164f8d17a6404048bc4d696739c5d976
@@ -4,12 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw
! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 19786714ebe478f40b503acb4705fb058ba47303
+! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathbin.CategoryTheory.Shift
+import Mathbin.CategoryTheory.Shift.Basic
import Mathbin.CategoryTheory.Triangulated.Rotate
/-!
@@ -163,98 +163,6 @@ theorem comp_dist_triangle_mor_zero₃₁ (T) (_ : T ∈ (dist_triang C)) :
TODO: If `C` is pretriangulated with respect to a shift,
then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
-/
-omit hC
-
-/--
-The underlying structure of a triangulated functor between pretriangulated categories `C` and `D`
-is a functor `F : C ⥤ D` together with given functorial isomorphisms `ξ X : F(X⟦1⟧) ⟶ F(X)⟦1⟧`.
--/
-structure TriangulatedFunctorStruct extends C ⥤ D where
- commShift : shiftFunctor C (1 : ℤ) ⋙ to_functor ≅ to_functor ⋙ shiftFunctor D (1 : ℤ)
-#align category_theory.pretriangulated.triangulated_functor_struct CategoryTheory.Pretriangulated.TriangulatedFunctorStruct
-
-namespace TriangulatedFunctorStruct
-
-/-- The identity `triangulated_functor_struct`. -/
-def id : TriangulatedFunctorStruct C C where
- obj X := X
- map _ _ f := f
- commShift := by rfl
-#align category_theory.pretriangulated.triangulated_functor_struct.id CategoryTheory.Pretriangulated.TriangulatedFunctorStruct.id
-
-instance : Inhabited (TriangulatedFunctorStruct C C) :=
- ⟨id C⟩
-
-variable {C D}
-
-/-- Given a `triangulated_functor_struct` we can define a functor from triangles of `C` to
-triangles of `D`.
--/
-@[simps]
-def mapTriangle (F : TriangulatedFunctorStruct C D) : Triangle C ⥤ Triangle D
- where
- obj T := Triangle.mk (F.map T.mor₁) (F.map T.mor₂) (F.map T.mor₃ ≫ F.commShift.Hom.app T.obj₁)
- map S T f :=
- { hom₁ := F.map f.hom₁
- hom₂ := F.map f.hom₂
- hom₃ := F.map f.hom₃
- comm₁' := by
- dsimp
- simp only [← F.to_functor.map_comp, f.comm₁]
- comm₂' := by
- dsimp
- simp only [← F.to_functor.map_comp, f.comm₂]
- comm₃' := by
- dsimp
- erw [category.assoc, ← F.comm_shift.hom.naturality]
- simp only [functor.comp_map, ← F.to_functor.map_comp_assoc, f.comm₃] }
-#align category_theory.pretriangulated.triangulated_functor_struct.map_triangle CategoryTheory.Pretriangulated.TriangulatedFunctorStruct.mapTriangle
-
-end TriangulatedFunctorStruct
-
-include hC
-
-variable (C D) [Pretriangulated D]
-
-/-- A triangulated functor between pretriangulated categories `C` and `D` is a functor `F : C ⥤ D`
-together with given functorial isomorphisms `ξ X : F(X⟦1⟧) ⟶ F(X)⟦1⟧` such that for every
-distinguished triangle `(X,Y,Z,f,g,h)` of `C`, the triangle
-`(F(X), F(Y), F(Z), F(f), F(g), F(h) ≫ (ξ X))` is a distinguished triangle of `D`.
-See <https://stacks.math.columbia.edu/tag/014V>
--/
-structure TriangulatedFunctor extends TriangulatedFunctorStruct C D where
- map_distinguished' :
- ∀ T : Triangle C,
- T ∈ (dist_triang C) → to_triangulated_functor_struct.mapTriangle.obj T ∈ (dist_triang D)
-#align category_theory.pretriangulated.triangulated_functor CategoryTheory.Pretriangulated.TriangulatedFunctor
-
-instance : Inhabited (TriangulatedFunctor C C) :=
- ⟨{ obj := fun X => X
- map := fun _ _ f => f
- commShift := by rfl
- map_distinguished' := by
- rintro ⟨_, _, _, _⟩ Tdt
- dsimp at *
- rwa [category.comp_id] }⟩
-
-variable {C D}
-
-/--
-Given a `triangulated_functor` we can define a functor from triangles of `C` to triangles of `D`.
--/
-@[simps]
-def TriangulatedFunctor.mapTriangle (F : TriangulatedFunctor C D) : Triangle C ⥤ Triangle D :=
- F.toTriangulatedFunctorStruct.mapTriangle
-#align category_theory.pretriangulated.triangulated_functor.map_triangle CategoryTheory.Pretriangulated.TriangulatedFunctor.mapTriangle
-
-/-- Given a `triangulated_functor` and a distinguished triangle `T` of `C`, then the triangle it
-maps onto in `D` is also distinguished.
--/
-theorem TriangulatedFunctor.map_distinguished (F : TriangulatedFunctor C D) (T : Triangle C)
- (h : T ∈ (dist_triang C)) : F.mapTriangle.obj T ∈ (dist_triang D) :=
- F.map_distinguished' T h
-#align category_theory.pretriangulated.triangulated_functor.map_distinguished CategoryTheory.Pretriangulated.TriangulatedFunctor.map_distinguished
-
end Pretriangulated
end CategoryTheory
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -51,7 +51,7 @@ variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ]
[∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`distinguishedTriangles] [] -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T₂ «expr ≅ » T₁) -/
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
* Any triangle that is isomorphic to a distinguished triangle is also distinguished.
@@ -98,14 +98,14 @@ include hC
-- mathport name: «exprdist_triang »
notation:20 "dist_triang " C => distinguishedTriangles C
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
theorem rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.rotate ∈ (dist_triang C) :=
(rotate_distinguished_triangle T).mp H
#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate ∈ (dist_triang C) :=
@@ -113,7 +113,7 @@ theorem inv_rot_of_dist_triangle (T) (_ : T ∈ (dist_triang C)) : T.invRotate
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
f g h
@@ -130,7 +130,7 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (_ : T ∈ (dist_triang C)) : T.mo
simpa only [contractible_triangle_mor₂, zero_comp] using hc.left.symm
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
f g h
@@ -143,7 +143,7 @@ theorem comp_dist_triangle_mor_zero₂₃ (T) (_ : T ∈ (dist_triang C)) : T.mo
comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (T «expr ∈ » «exprdist_triang »(C)) -/
/-- Given any distinguished triangle
```
f g h
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
A functor F : C ⥤ A
from a pretriangulated category to an abelian category is homological iff it sends distinguished triangles in C
to exact sequences in A
. In this PR, we define the corresponding type class F.IsHomological
. If F
is a homological functor, we introduce the strictly full triangulated subcategory F.homologicalKernel
.
@@ -3,8 +3,9 @@ Copyright (c) 2021 Luke Kershaw. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw, Joël Riou
-/
-import Mathlib.CategoryTheory.Triangulated.TriangleShift
+import Mathlib.Algebra.Homology.ShortComplex.Basic
import Mathlib.CategoryTheory.Limits.Constructions.FiniteProductsOfBinaryProducts
+import Mathlib.CategoryTheory.Triangulated.TriangleShift
#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
@@ -158,6 +159,19 @@ theorem comp_distTriang_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C)
simpa using comp_distTriang_mor_zero₁₂ T.rotate.rotate H₂
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁
+/-- The short complex `T.obj₁ ⟶ T.obj₂ ⟶ T.obj₃` attached to a distinguished triangle. -/
+@[simps]
+def shortComplexOfDistTriangle (T : Triangle C) (hT : T ∈ distTriang C) : ShortComplex C :=
+ ShortComplex.mk T.mor₁ T.mor₂ (comp_distTriang_mor_zero₁₂ _ hT)
+
+/-- The isomorphism between the short complex attached to
+two isomorphic distinguished triangles. -/
+@[simps!]
+def shortComplexOfDistTriangleIsoOfIso {T T' : Triangle C} (e : T ≅ T') (hT : T ∈ distTriang C) :
+ shortComplexOfDistTriangle T hT ≅ shortComplexOfDistTriangle T'
+ (isomorphic_distinguished _ hT _ e.symm) :=
+ ShortComplex.isoMk (Triangle.π₁.mapIso e) (Triangle.π₂.mapIso e) (Triangle.π₃.mapIso e)
+
/-- Any morphism `Y ⟶ Z` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
lemma distinguished_cocone_triangle₁ {Y Z : C} (g : Y ⟶ Z) :
∃ (X : C) (f : X ⟶ Y) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distTriang C := by
Functor.Full
a Prop (#12449)
Before this PR, Functor.Full
contained the data of the preimage of maps by a full functor F
. This PR makes Functor.Full
a proposition. This is to prevent any diamond to appear.
The lemma Functor.image_preimage
is also renamed Functor.map_preimage
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -188,8 +188,8 @@ lemma complete_distinguished_triangle_morphism₁ (T₁ T₂ : Triangle C)
· apply (shiftFunctor C (1 : ℤ)).map_injective
dsimp at ha₂
rw [neg_comp, comp_neg, neg_inj] at ha₂
- simpa only [Functor.map_comp, Functor.image_preimage] using ha₂
- · simpa only [Functor.image_preimage] using ha₁
+ simpa only [Functor.map_comp, Functor.map_preimage] using ha₂
+ · simpa only [Functor.map_preimage] using ha₁
/-- A commutative square involving the morphisms `mor₃` of two distinguished triangles
can be extended as morphism of triangles -/
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -446,7 +446,7 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
obtain ⟨x₁, hx₁⟩ : ∃ (x₁ : A ⟶ T.obj₁), x₁ ≫ φ.hom₁ = y₁ := ⟨y₁ ≫ inv φ.hom₁, by simp⟩
refine' ⟨x₂ + x₁ ≫ T.mor₁, _⟩
dsimp
- rw [add_comp, assoc, φ.comm₁, reassoc_of% hx₁, ← hy₁, add_sub_cancel'_right]
+ rw [add_comp, assoc, φ.comm₁, reassoc_of% hx₁, ← hy₁, add_sub_cancel]
lemma isIso₃_of_isIso₁₂ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
(hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₂ : IsIso φ.hom₂) : IsIso φ.hom₃ :=
@@ -469,7 +469,7 @@ def binaryBiproductData (T : Triangle C) (hT : T ∈ distTriang C) (hT₀ : T.mo
(total : fst ≫ T.mor₁ + T.mor₂ ≫ inr = 𝟙 T.obj₂) :
BinaryBiproductData T.obj₁ T.obj₃ := by
have : Mono T.mor₁ := T.mono₁ hT hT₀
- have eq : fst ≫ T.mor₁ = 𝟙 T.obj₂ - T.mor₂ ≫ inr := by rw [← total, add_sub_cancel]
+ have eq : fst ≫ T.mor₁ = 𝟙 T.obj₂ - T.mor₂ ≫ inr := by rw [← total, add_sub_cancel_right]
exact
{ bicone :=
{ pt := T.obj₂
@@ -612,7 +612,7 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
have hb' : a - a' ≫ φ'.hom₃ = Pi.lift b ≫ (productTriangle T).mor₂ :=
Limits.Pi.hom_ext _ _ (fun j => by rw [hb]; simp)
have : (a' + (by exact Pi.lift b) ≫ T'.mor₂) ≫ φ'.hom₃ = a := by
- rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel'_right]
+ rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel]
exact ⟨_, this⟩
lemma exists_iso_of_arrow_iso (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTriang C)
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -87,7 +87,7 @@ namespace Pretriangulated
variable [∀ n : ℤ, Functor.Additive (CategoryTheory.shiftFunctor C n)] [hC : Pretriangulated C]
--- porting note: increased the priority so that we can write `T ∈ distTriang C`, and
+-- Porting note: increased the priority so that we can write `T ∈ distTriang C`, and
-- not just `T ∈ (distTriang C)`
/-- distinguished triangles in a pretriangulated category -/
notation:60 "distTriang " C => @distinguishedTriangles C _ _ _ _ _ _
@@ -512,10 +512,10 @@ lemma exists_iso_binaryBiproduct_of_distTriang (T : Triangle C) (hT : T ∈ dist
obtain ⟨fst, hfst⟩ := T.coyoneda_exact₂ hT (𝟙 T.obj₂ - T.mor₂ ≫ section_ T.mor₂) (by simp)
let d := binaryBiproductData _ hT zero (section_ T.mor₂) (by simp) fst
(by simp only [← hfst, sub_add_cancel])
- refine' ⟨biprod.uniqueUpToIso _ _ d.isBilimit, ⟨_, by simp⟩⟩
+ refine' ⟨biprod.uniqueUpToIso _ _ d.isBilimit, ⟨_, by simp [d]⟩⟩
ext
- · simpa using d.bicone.inl_fst
- · simpa using d.bicone.inl_snd
+ · simpa [d] using d.bicone.inl_fst
+ · simpa [d] using d.bicone.inl_snd
lemma binaryBiproductTriangle_distinguished (X₁ X₂ : C) :
binaryBiproductTriangle X₁ X₂ ∈ distTriang C := by
@@ -561,7 +561,7 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
let T' := Triangle.mk f₁ f₂ f₃
change T' ∈ distTriang C at hT'
let φ : ∀ j, T' ⟶ T j := fun j => completeDistinguishedTriangleMorphism _ _
- hT' (hT j) (Pi.π _ j) (Pi.π _ j) (by simp)
+ hT' (hT j) (Pi.π _ j) (Pi.π _ j) (by simp [f₁, T'])
let φ' := productTriangle.lift _ φ
have h₁ : φ'.hom₁ = 𝟙 _ := by aesop_cat
have h₂ : φ'.hom₂ = 𝟙 _ := by aesop_cat
@@ -590,7 +590,7 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
have hg'' := fun j => (T j).coyoneda_exact₂ (hT j) _ (hg' j)
let α := fun j => (hg'' j).choose
have hα : ∀ j, _ = α j ≫ _ := fun j => (hg'' j).choose_spec
- have hg''' : g = Pi.lift α ≫ T'.mor₁ := by dsimp; ext j; rw [hα]; simp
+ have hg''' : g = Pi.lift α ≫ T'.mor₁ := by dsimp [f₁, T']; ext j; rw [hα]; simp
rw [hg, hg''', assoc, comp_distTriang_mor_zero₁₂ _ hT', comp_zero]
· intro a
obtain ⟨a', ha'⟩ : ∃ (a' : A ⟶ Z), a' ≫ T'.mor₃ = a ≫ (productTriangle T).mor₃ := by
@@ -619,13 +619,13 @@ lemma exists_iso_of_arrow_iso (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTri
(hT₂ : T₂ ∈ distTriang C) (e : Arrow.mk T₁.mor₁ ≅ Arrow.mk T₂.mor₁) :
∃ (e' : T₁ ≅ T₂), e'.hom.hom₁ = e.hom.left ∧ e'.hom.hom₂ = e.hom.right := by
let φ := completeDistinguishedTriangleMorphism T₁ T₂ hT₁ hT₂ e.hom.left e.hom.right e.hom.w.symm
- have : IsIso φ.hom₁ := by dsimp; infer_instance
- have : IsIso φ.hom₂ := by dsimp; infer_instance
+ have : IsIso φ.hom₁ := by dsimp [φ]; infer_instance
+ have : IsIso φ.hom₂ := by dsimp [φ]; infer_instance
have : IsIso φ.hom₃ := isIso₃_of_isIso₁₂ φ hT₁ hT₂ inferInstance inferInstance
have : IsIso φ := by
apply Triangle.isIso_of_isIsos
all_goals infer_instance
- exact ⟨asIso φ, by simp, by simp⟩
+ exact ⟨asIso φ, by simp [φ], by simp [φ]⟩
/-- A choice of isomorphism `T₁ ≅ T₂` between two distinguished triangles
when we are given two isomorphisms `e₁ : T₁.obj₁ ≅ T₂.obj₁` and `e₂ : T₁.obj₂ ≅ T₂.obj₂`. -/
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.
@@ -615,6 +615,33 @@ lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel'_right]
exact ⟨_, this⟩
+lemma exists_iso_of_arrow_iso (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTriang C)
+ (hT₂ : T₂ ∈ distTriang C) (e : Arrow.mk T₁.mor₁ ≅ Arrow.mk T₂.mor₁) :
+ ∃ (e' : T₁ ≅ T₂), e'.hom.hom₁ = e.hom.left ∧ e'.hom.hom₂ = e.hom.right := by
+ let φ := completeDistinguishedTriangleMorphism T₁ T₂ hT₁ hT₂ e.hom.left e.hom.right e.hom.w.symm
+ have : IsIso φ.hom₁ := by dsimp; infer_instance
+ have : IsIso φ.hom₂ := by dsimp; infer_instance
+ have : IsIso φ.hom₃ := isIso₃_of_isIso₁₂ φ hT₁ hT₂ inferInstance inferInstance
+ have : IsIso φ := by
+ apply Triangle.isIso_of_isIsos
+ all_goals infer_instance
+ exact ⟨asIso φ, by simp, by simp⟩
+
+/-- A choice of isomorphism `T₁ ≅ T₂` between two distinguished triangles
+when we are given two isomorphisms `e₁ : T₁.obj₁ ≅ T₂.obj₁` and `e₂ : T₁.obj₂ ≅ T₂.obj₂`. -/
+@[simps! hom_hom₁ hom_hom₂ inv_hom₁ inv_hom₂]
+def isoTriangleOfIso₁₂ (T₁ T₂ : Triangle C) (hT₁ : T₁ ∈ distTriang C)
+ (hT₂ : T₂ ∈ distTriang C) (e₁ : T₁.obj₁ ≅ T₂.obj₁) (e₂ : T₁.obj₂ ≅ T₂.obj₂)
+ (comm : T₁.mor₁ ≫ e₂.hom = e₁.hom ≫ T₂.mor₁) : T₁ ≅ T₂ := by
+ have h := exists_iso_of_arrow_iso T₁ T₂ hT₁ hT₂ (Arrow.isoMk e₁ e₂ comm.symm)
+ exact Triangle.isoMk _ _ e₁ e₂ (Triangle.π₃.mapIso h.choose) comm (by
+ have eq := h.choose_spec.2
+ dsimp at eq ⊢
+ conv_rhs => rw [← eq, ← TriangleMorphism.comm₂]) (by
+ have eq := h.choose_spec.1
+ dsimp at eq ⊢
+ conv_lhs => rw [← eq, TriangleMorphism.comm₃])
+
end Pretriangulated
end CategoryTheory
@@ -531,6 +531,90 @@ lemma binaryProductTriangle_distinguished (X₁ X₂ : C) :
isomorphic_distinguished _ (binaryBiproductTriangle_distinguished X₁ X₂) _
(binaryProductTriangleIsoBinaryBiproductTriangle X₁ X₂)
+/-- A chosen extension of a commutative square into a morphism of distinguished triangles. -/
+@[simps hom₁ hom₂]
+def completeDistinguishedTriangleMorphism (T₁ T₂ : Triangle C)
+ (hT₁ : T₁ ∈ distTriang C) (hT₂ : T₂ ∈ distTriang C)
+ (a : T₁.obj₁ ⟶ T₂.obj₁) (b : T₁.obj₂ ⟶ T₂.obj₂) (comm : T₁.mor₁ ≫ b = a ≫ T₂.mor₁) :
+ T₁ ⟶ T₂ :=
+ have h := complete_distinguished_triangle_morphism _ _ hT₁ hT₂ a b comm
+ { hom₁ := a
+ hom₂ := b
+ hom₃ := h.choose
+ comm₁ := comm
+ comm₂ := h.choose_spec.1
+ comm₃ := h.choose_spec.2 }
+
+/-- A product of distinguished triangles is distinguished -/
+lemma productTriangle_distinguished {J : Type*} (T : J → Triangle C)
+ (hT : ∀ j, T j ∈ distTriang C)
+ [HasProduct (fun j => (T j).obj₁)] [HasProduct (fun j => (T j).obj₂)]
+ [HasProduct (fun j => (T j).obj₃)] [HasProduct (fun j => (T j).obj₁⟦(1 : ℤ)⟧)] :
+ productTriangle T ∈ distTriang C := by
+ /- The proof proceeds by constructing a morphism of triangles
+ `φ' : T' ⟶ productTriangle T` with `T'` distinguished, and such that
+ `φ'.hom₁` and `φ'.hom₂` are identities. Then, it suffices to show that
+ `φ'.hom₃` is an isomorphism, which is achieved by using Yoneda's lemma
+ and diagram chases. -/
+ let f₁ := Pi.map (fun j => (T j).mor₁)
+ obtain ⟨Z, f₂, f₃, hT'⟩ := distinguished_cocone_triangle f₁
+ let T' := Triangle.mk f₁ f₂ f₃
+ change T' ∈ distTriang C at hT'
+ let φ : ∀ j, T' ⟶ T j := fun j => completeDistinguishedTriangleMorphism _ _
+ hT' (hT j) (Pi.π _ j) (Pi.π _ j) (by simp)
+ let φ' := productTriangle.lift _ φ
+ have h₁ : φ'.hom₁ = 𝟙 _ := by aesop_cat
+ have h₂ : φ'.hom₂ = 𝟙 _ := by aesop_cat
+ have : IsIso φ'.hom₁ := by rw [h₁]; infer_instance
+ have : IsIso φ'.hom₂ := by rw [h₂]; infer_instance
+ suffices IsIso φ'.hom₃ by
+ have : IsIso φ' := by
+ apply Triangle.isIso_of_isIsos
+ all_goals infer_instance
+ exact isomorphic_distinguished _ hT' _ (asIso φ').symm
+ refine' isIso_of_yoneda_map_bijective _ (fun A => ⟨_, _⟩)
+ /- the proofs by diagram chase start here -/
+ · suffices Mono φ'.hom₃ by
+ intro a₁ a₂ ha
+ simpa only [← cancel_mono φ'.hom₃] using ha
+ rw [mono_iff_cancel_zero]
+ intro A f hf
+ have hf' : f ≫ T'.mor₃ = 0 := by
+ rw [← cancel_mono (φ'.hom₁⟦1⟧'), zero_comp, assoc, φ'.comm₃, reassoc_of% hf, zero_comp]
+ obtain ⟨g, hg⟩ := T'.coyoneda_exact₃ hT' f hf'
+ have hg' : ∀ j, (g ≫ Pi.π _ j) ≫ (T j).mor₂ = 0 := fun j => by
+ have : g ≫ T'.mor₂ ≫ φ'.hom₃ ≫ Pi.π _ j = 0 :=
+ by rw [← reassoc_of% hg, reassoc_of% hf, zero_comp]
+ rw [φ'.comm₂_assoc, h₂, id_comp] at this
+ simpa using this
+ have hg'' := fun j => (T j).coyoneda_exact₂ (hT j) _ (hg' j)
+ let α := fun j => (hg'' j).choose
+ have hα : ∀ j, _ = α j ≫ _ := fun j => (hg'' j).choose_spec
+ have hg''' : g = Pi.lift α ≫ T'.mor₁ := by dsimp; ext j; rw [hα]; simp
+ rw [hg, hg''', assoc, comp_distTriang_mor_zero₁₂ _ hT', comp_zero]
+ · intro a
+ obtain ⟨a', ha'⟩ : ∃ (a' : A ⟶ Z), a' ≫ T'.mor₃ = a ≫ (productTriangle T).mor₃ := by
+ have zero : ((productTriangle T).mor₃) ≫ (shiftFunctor C 1).map T'.mor₁ = 0 := by
+ rw [← cancel_mono (φ'.hom₂⟦1⟧'), zero_comp, assoc, ← Functor.map_comp, φ'.comm₁, h₁,
+ id_comp, productTriangle.zero₃₁]
+ intro j
+ exact comp_distTriang_mor_zero₃₁ _ (hT j)
+ have ⟨g, hg⟩ := T'.coyoneda_exact₁ hT' (a ≫ (productTriangle T).mor₃) (by
+ rw [assoc, zero, comp_zero])
+ exact ⟨g, hg.symm⟩
+ have ha'' := fun (j : J) => (T j).coyoneda_exact₃ (hT j) ((a - a' ≫ φ'.hom₃) ≫ Pi.π _ j) (by
+ simp only [sub_comp, assoc]
+ erw [← (productTriangle.π T j).comm₃]
+ rw [← φ'.comm₃_assoc]
+ rw [reassoc_of% ha', sub_eq_zero, h₁, Functor.map_id, id_comp])
+ let b := fun j => (ha'' j).choose
+ have hb : ∀ j, _ = b j ≫ _ := fun j => (ha'' j).choose_spec
+ have hb' : a - a' ≫ φ'.hom₃ = Pi.lift b ≫ (productTriangle T).mor₂ :=
+ Limits.Pi.hom_ext _ _ (fun j => by rw [hb]; simp)
+ have : (a' + (by exact Pi.lift b) ≫ T'.mor₂) ≫ φ'.hom₃ = a := by
+ rw [add_comp, assoc, φ'.comm₂, h₂, id_comp, ← hb', add_sub_cancel'_right]
+ exact ⟨_, this⟩
+
end Pretriangulated
end CategoryTheory
@@ -1,9 +1,10 @@
/-
Copyright (c) 2021 Luke Kershaw. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
-Authors: Luke Kershaw
+Authors: Luke Kershaw, Joël Riou
-/
import Mathlib.CategoryTheory.Triangulated.TriangleShift
+import Mathlib.CategoryTheory.Limits.Constructions.FiniteProductsOfBinaryProducts
#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
@@ -457,10 +458,78 @@ lemma isIso₁_of_isIso₂₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_distTriang _ hT)
(inv_rot_of_distTriang _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
-/-
-TODO: If `C` is pretriangulated with respect to a shift,
-then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
--/
+/-- Given a distinguished triangle `T` such that `T.mor₃ = 0` and the datum of morphisms
+`inr : T.obj₃ ⟶ T.obj₂` and `fst : T.obj₂ ⟶ T.obj₁` satisfying suitable relations, this
+is the binary biproduct data expressing that `T.obj₂` identifies to the binary
+biproduct of `T.obj₁` and `T.obj₃`.
+See also `exists_iso_binaryBiproduct_of_distTriang`. -/
+@[simps]
+def binaryBiproductData (T : Triangle C) (hT : T ∈ distTriang C) (hT₀ : T.mor₃ = 0)
+ (inr : T.obj₃ ⟶ T.obj₂) (inr_snd : inr ≫ T.mor₂ = 𝟙 _) (fst : T.obj₂ ⟶ T.obj₁)
+ (total : fst ≫ T.mor₁ + T.mor₂ ≫ inr = 𝟙 T.obj₂) :
+ BinaryBiproductData T.obj₁ T.obj₃ := by
+ have : Mono T.mor₁ := T.mono₁ hT hT₀
+ have eq : fst ≫ T.mor₁ = 𝟙 T.obj₂ - T.mor₂ ≫ inr := by rw [← total, add_sub_cancel]
+ exact
+ { bicone :=
+ { pt := T.obj₂
+ fst := fst
+ snd := T.mor₂
+ inl := T.mor₁
+ inr := inr
+ inl_fst := by
+ simp only [← cancel_mono T.mor₁, assoc, id_comp, eq, comp_sub, comp_id,
+ comp_distTriang_mor_zero₁₂_assoc _ hT, zero_comp, sub_zero]
+ inl_snd := comp_distTriang_mor_zero₁₂ _ hT
+ inr_fst := by
+ simp only [← cancel_mono T.mor₁, assoc, eq, comp_sub, reassoc_of% inr_snd,
+ comp_id, sub_self, zero_comp]
+ inr_snd := inr_snd }
+ isBilimit := isBinaryBilimitOfTotal _ total }
+
+instance : HasBinaryBiproducts C := ⟨fun X₁ X₃ => by
+ obtain ⟨X₂, inl, snd, mem⟩ := distinguished_cocone_triangle₂ (0 : X₃ ⟶ X₁⟦(1 : ℤ)⟧)
+ obtain ⟨inr : X₃ ⟶ X₂, inr_snd : 𝟙 _ = inr ≫ snd⟩ :=
+ Triangle.coyoneda_exact₃ _ mem (𝟙 X₃) (by simp)
+ obtain ⟨fst : X₂ ⟶ X₁, hfst : 𝟙 X₂ - snd ≫ inr = fst ≫ inl⟩ :=
+ Triangle.coyoneda_exact₂ _ mem (𝟙 X₂ - snd ≫ inr) (by
+ dsimp
+ simp only [sub_comp, assoc, id_comp, ← inr_snd, comp_id, sub_self])
+ refine' ⟨⟨binaryBiproductData _ mem rfl inr inr_snd.symm fst _⟩⟩
+ dsimp
+ simp only [← hfst, sub_add_cancel]⟩
+
+instance : HasFiniteProducts C := hasFiniteProducts_of_has_binary_and_terminal
+instance : HasFiniteCoproducts C := hasFiniteCoproducts_of_has_binary_and_initial
+instance : HasFiniteBiproducts C := HasFiniteBiproducts.of_hasFiniteProducts
+
+lemma exists_iso_binaryBiproduct_of_distTriang (T : Triangle C) (hT : T ∈ distTriang C)
+ (zero : T.mor₃ = 0) :
+ ∃ (e : T.obj₂ ≅ T.obj₁ ⊞ T.obj₃), T.mor₁ ≫ e.hom = biprod.inl ∧
+ T.mor₂ = e.hom ≫ biprod.snd := by
+ have := T.epi₂ hT zero
+ have := isSplitEpi_of_epi T.mor₂
+ obtain ⟨fst, hfst⟩ := T.coyoneda_exact₂ hT (𝟙 T.obj₂ - T.mor₂ ≫ section_ T.mor₂) (by simp)
+ let d := binaryBiproductData _ hT zero (section_ T.mor₂) (by simp) fst
+ (by simp only [← hfst, sub_add_cancel])
+ refine' ⟨biprod.uniqueUpToIso _ _ d.isBilimit, ⟨_, by simp⟩⟩
+ ext
+ · simpa using d.bicone.inl_fst
+ · simpa using d.bicone.inl_snd
+
+lemma binaryBiproductTriangle_distinguished (X₁ X₂ : C) :
+ binaryBiproductTriangle X₁ X₂ ∈ distTriang C := by
+ obtain ⟨Y, g, h, mem⟩ := distinguished_cocone_triangle₂ (0 : X₂ ⟶ X₁⟦(1 : ℤ)⟧)
+ obtain ⟨e, ⟨he₁, he₂⟩⟩ := exists_iso_binaryBiproduct_of_distTriang _ mem rfl
+ dsimp at he₁ he₂
+ refine' isomorphic_distinguished _ mem _ (Iso.symm _)
+ refine' Triangle.isoMk _ _ (Iso.refl _) e (Iso.refl _)
+ (by aesop_cat) (by aesop_cat) (by aesop_cat)
+
+lemma binaryProductTriangle_distinguished (X₁ X₂ : C) :
+ binaryProductTriangle X₁ X₂ ∈ distTriang C :=
+ isomorphic_distinguished _ (binaryBiproductTriangle_distinguished X₁ X₂) _
+ (binaryProductTriangleIsoBinaryBiproductTriangle X₁ X₂)
end Pretriangulated
Removes nonterminal simps on lines looking like simp [...]
@@ -326,7 +326,7 @@ lemma isZero₂_iff : IsZero T.obj₂ ↔ (T.mor₁ = 0 ∧ T.mor₂ = 0) := by
lemma isZero₁_iff : IsZero T.obj₁ ↔ (T.mor₁ = 0 ∧ T.mor₃ = 0) := by
refine' (isZero₂_iff _ (inv_rot_of_distTriang _ hT)).trans _
dsimp
- simp [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
+ simp only [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
tauto
lemma isZero₃_iff : IsZero T.obj₃ ↔ (T.mor₂ = 0 ∧ T.mor₃ = 0) := by
This PR renames lemmas like rot_of_dist_triang
as rot_of_distTriang
.
@@ -100,17 +100,17 @@ lemma distinguished_iff_of_iso {T₁ T₂ : Triangle C} (e : T₁ ≅ T₂) :
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
-theorem rot_of_dist_triangle (T : Triangle C) (H : T ∈ distTriang C) : T.rotate ∈ distTriang C :=
+theorem rot_of_distTriang (T : Triangle C) (H : T ∈ distTriang C) : T.rotate ∈ distTriang C :=
(rotate_distinguished_triangle T).mp H
-#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_dist_triangle
+#align category_theory.pretriangulated.rot_of_dist_triangle CategoryTheory.Pretriangulated.rot_of_distTriang
/-- Given any distinguished triangle `T`, then we know `T.inv_rotate` is also distinguished.
-/
-theorem inv_rot_of_dist_triangle (T : Triangle C) (H : T ∈ distTriang C) :
+theorem inv_rot_of_distTriang (T : Triangle C) (H : T ∈ distTriang C) :
T.invRotate ∈ distTriang C :=
(rotate_distinguished_triangle T.invRotate).mpr
(isomorphic_distinguished T H T.invRotate.rotate (invRotCompRot.app T))
-#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_dist_triangle
+#align category_theory.pretriangulated.inv_rot_of_dist_triangle CategoryTheory.Pretriangulated.inv_rot_of_distTriang
/-- Given any distinguished triangle
```
@@ -121,12 +121,12 @@ the composition `f ≫ g = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
@[reassoc]
-theorem comp_dist_triangle_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor₁ ≫ T.mor₂ = 0 := by
+theorem comp_distTriang_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor₁ ≫ T.mor₂ = 0 := by
obtain ⟨c, hc⟩ :=
complete_distinguished_triangle_morphism _ _ (contractible_distinguished T.obj₁) H (𝟙 T.obj₁)
T.mor₁ rfl
simpa only [contractibleTriangle_mor₂, zero_comp] using hc.left.symm
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₁₂
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₁₂ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂
/-- Given any distinguished triangle
```
@@ -137,10 +137,10 @@ the composition `g ≫ h = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
@[reassoc]
-theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
+theorem comp_distTriang_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
T.mor₂ ≫ T.mor₃ = 0 :=
- comp_dist_triangle_mor_zero₁₂ T.rotate (rot_of_dist_triangle T H)
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
+ comp_distTriang_mor_zero₁₂ T.rotate (rot_of_distTriang T H)
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₂₃
/-- Given any distinguished triangle
```
@@ -151,17 +151,17 @@ the composition `h ≫ f⟦1⟧ = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
@[reassoc]
-theorem comp_dist_triangle_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
+theorem comp_distTriang_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
T.mor₃ ≫ T.mor₁⟦1⟧' = 0 := by
- have H₂ := rot_of_dist_triangle T.rotate (rot_of_dist_triangle T H)
- simpa using comp_dist_triangle_mor_zero₁₂ T.rotate.rotate H₂
-#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+ have H₂ := rot_of_distTriang T.rotate (rot_of_distTriang T H)
+ simpa using comp_distTriang_mor_zero₁₂ T.rotate.rotate H₂
+#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₃₁
/-- Any morphism `Y ⟶ Z` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
lemma distinguished_cocone_triangle₁ {Y Z : C} (g : Y ⟶ Z) :
∃ (X : C) (f : X ⟶ Y) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distTriang C := by
obtain ⟨X', f', g', mem⟩ := distinguished_cocone_triangle g
- exact ⟨_, _, _, inv_rot_of_dist_triangle _ mem⟩
+ exact ⟨_, _, _, inv_rot_of_distTriang _ mem⟩
/-- Any morphism `Z ⟶ X⟦1⟧` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
lemma distinguished_cocone_triangle₂ {Z X : C} (h : Z ⟶ X⟦(1 : ℤ)⟧) :
@@ -169,7 +169,7 @@ lemma distinguished_cocone_triangle₂ {Z X : C} (h : Z ⟶ X⟦(1 : ℤ)⟧) :
obtain ⟨Y', f', g', mem⟩ := distinguished_cocone_triangle h
let T' := (Triangle.mk h f' g').invRotate.invRotate
refine' ⟨T'.obj₂, ((shiftEquiv C (1 : ℤ)).unitIso.app X).hom ≫ T'.mor₁, T'.mor₂,
- isomorphic_distinguished _ (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ mem)) _ _⟩
+ isomorphic_distinguished _ (inv_rot_of_distTriang _ (inv_rot_of_distTriang _ mem)) _ _⟩
exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
(by aesop_cat) (by aesop_cat)
(by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
@@ -182,7 +182,7 @@ lemma complete_distinguished_triangle_morphism₁ (T₁ T₂ : Triangle C)
∃ (a : T₁.obj₁ ⟶ T₂.obj₁), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧
T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃ := by
obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
- (rot_of_dist_triangle _ hT₁) (rot_of_dist_triangle _ hT₂) b c comm
+ (rot_of_distTriang _ hT₁) (rot_of_distTriang _ hT₂) b c comm
refine' ⟨(shiftFunctor C (1 : ℤ)).preimage a, ⟨_, _⟩⟩
· apply (shiftFunctor C (1 : ℤ)).map_injective
dsimp at ha₂
@@ -197,7 +197,7 @@ lemma complete_distinguished_triangle_morphism₂ (T₁ T₂ : Triangle C)
(c : T₁.obj₃ ⟶ T₂.obj₃) (comm : T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃) :
∃ (b : T₁.obj₂ ⟶ T₂.obj₂), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧ T₁.mor₂ ≫ c = b ≫ T₂.mor₂ := by
obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
- (inv_rot_of_dist_triangle _ hT₁) (inv_rot_of_dist_triangle _ hT₂) (c⟦(-1 : ℤ)⟧') a (by
+ (inv_rot_of_distTriang _ hT₁) (inv_rot_of_distTriang _ hT₂) (c⟦(-1 : ℤ)⟧') a (by
dsimp
simp only [neg_comp, comp_neg, ← Functor.map_comp_assoc, ← comm,
Functor.map_comp, shift_shift_neg', Functor.id_obj, assoc, Iso.inv_hom_id_app, comp_id])
@@ -210,7 +210,7 @@ lemma complete_distinguished_triangle_morphism₂ (T₁ T₂ : Triangle C)
lemma contractible_distinguished₁ (X : C) :
Triangle.mk (0 : 0 ⟶ X) (𝟙 X) 0 ∈ distTriang C := by
refine' isomorphic_distinguished _
- (inv_rot_of_dist_triangle _ (contractible_distinguished X)) _ _
+ (inv_rot_of_distTriang _ (contractible_distinguished X)) _ _
exact Triangle.isoMk _ _ (Functor.mapZeroObject _).symm (Iso.refl _) (Iso.refl _)
(by aesop_cat) (by aesop_cat) (by aesop_cat)
@@ -218,7 +218,7 @@ lemma contractible_distinguished₁ (X : C) :
lemma contractible_distinguished₂ (X : C) :
Triangle.mk (0 : X ⟶ 0) 0 (𝟙 (X⟦1⟧)) ∈ distTriang C := by
refine' isomorphic_distinguished _
- (inv_rot_of_dist_triangle _ (contractible_distinguished₁ (X⟦(1 : ℤ)⟧))) _ _
+ (inv_rot_of_distTriang _ (contractible_distinguished₁ (X⟦(1 : ℤ)⟧))) _ _
exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
(by aesop_cat) (by aesop_cat)
(by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
@@ -235,7 +235,7 @@ lemma yoneda_exact₂ {X : C} (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) :
lemma yoneda_exact₃ {X : C} (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) :
∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
- yoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+ yoneda_exact₂ _ (rot_of_distTriang _ hT) f hf
lemma coyoneda_exact₂ {X : C} (f : X ⟶ T.obj₂) (hf : f ≫ T.mor₂ = 0) :
∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
@@ -245,11 +245,11 @@ lemma coyoneda_exact₂ {X : C} (f : X ⟶ T.obj₂) (hf : f ≫ T.mor₂ = 0) :
lemma coyoneda_exact₁ {X : C} (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) :
∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
- coyoneda_exact₂ _ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT)) f (by aesop_cat)
+ coyoneda_exact₂ _ (rot_of_distTriang _ (rot_of_distTriang _ hT)) f (by aesop_cat)
lemma coyoneda_exact₃ {X : C} (f : X ⟶ T.obj₃) (hf : f ≫ T.mor₃ = 0) :
∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
- coyoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+ coyoneda_exact₂ _ (rot_of_distTriang _ hT) f hf
lemma mor₃_eq_zero_iff_epi₂ : T.mor₃ = 0 ↔ Epi T.mor₂ := by
constructor
@@ -259,15 +259,15 @@ lemma mor₃_eq_zero_iff_epi₂ : T.mor₃ = 0 ↔ Epi T.mor₂ := by
obtain ⟨f, rfl⟩ := yoneda_exact₃ T hT g hg
rw [h, zero_comp]
· intro
- rw [← cancel_epi T.mor₂, comp_dist_triangle_mor_zero₂₃ _ hT, comp_zero]
+ rw [← cancel_epi T.mor₂, comp_distTriang_mor_zero₂₃ _ hT, comp_zero]
lemma mor₂_eq_zero_iff_epi₁ : T.mor₂ = 0 ↔ Epi T.mor₁ := by
- have h := mor₃_eq_zero_iff_epi₂ _ (inv_rot_of_dist_triangle _ hT)
+ have h := mor₃_eq_zero_iff_epi₂ _ (inv_rot_of_distTriang _ hT)
dsimp at h
rw [← h, IsIso.comp_right_eq_zero]
lemma mor₁_eq_zero_iff_epi₃ : T.mor₁ = 0 ↔ Epi T.mor₃ := by
- have h := mor₃_eq_zero_iff_epi₂ _ (rot_of_dist_triangle _ hT)
+ have h := mor₃_eq_zero_iff_epi₂ _ (rot_of_distTriang _ hT)
dsimp at h
rw [← h, neg_eq_zero]
constructor
@@ -292,13 +292,13 @@ lemma mor₁_eq_zero_iff_mono₂ : T.mor₁ = 0 ↔ Mono T.mor₂ := by
obtain ⟨f, rfl⟩ := coyoneda_exact₂ T hT g hg
rw [h, comp_zero]
· intro
- rw [← cancel_mono T.mor₂, comp_dist_triangle_mor_zero₁₂ _ hT, zero_comp]
+ rw [← cancel_mono T.mor₂, comp_distTriang_mor_zero₁₂ _ hT, zero_comp]
lemma mor₂_eq_zero_iff_mono₃ : T.mor₂ = 0 ↔ Mono T.mor₃ :=
- mor₁_eq_zero_iff_mono₂ _ (rot_of_dist_triangle _ hT)
+ mor₁_eq_zero_iff_mono₂ _ (rot_of_distTriang _ hT)
lemma mor₃_eq_zero_iff_mono₁ : T.mor₃ = 0 ↔ Mono T.mor₁ := by
- have h := mor₁_eq_zero_iff_mono₂ _ (inv_rot_of_dist_triangle _ hT)
+ have h := mor₁_eq_zero_iff_mono₂ _ (inv_rot_of_distTriang _ hT)
dsimp at h
rw [← h, neg_eq_zero, IsIso.comp_right_eq_zero]
constructor
@@ -324,13 +324,13 @@ lemma isZero₂_iff : IsZero T.obj₂ ↔ (T.mor₁ = 0 ∧ T.mor₂ = 0) := by
rw [IsZero.iff_id_eq_zero, hf, h₁, comp_zero]
lemma isZero₁_iff : IsZero T.obj₁ ↔ (T.mor₁ = 0 ∧ T.mor₃ = 0) := by
- refine' (isZero₂_iff _ (inv_rot_of_dist_triangle _ hT)).trans _
+ refine' (isZero₂_iff _ (inv_rot_of_distTriang _ hT)).trans _
dsimp
simp [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
tauto
lemma isZero₃_iff : IsZero T.obj₃ ↔ (T.mor₂ = 0 ∧ T.mor₃ = 0) := by
- refine' (isZero₂_iff _ (rot_of_dist_triangle _ hT)).trans _
+ refine' (isZero₂_iff _ (rot_of_distTriang _ hT)).trans _
dsimp
tauto
@@ -343,7 +343,7 @@ lemma isZero₂_of_isZero₁₃ (h₁ : IsZero T.obj₁) (h₃ : IsZero T.obj₃
exact ⟨h₁.eq_of_src _ _, h₃.eq_of_tgt _ _⟩
lemma isZero₃_of_isZero₁₂ (h₁ : IsZero T.obj₁) (h₂ : IsZero T.obj₂) : IsZero T.obj₃ :=
- isZero₂_of_isZero₁₃ _ (rot_of_dist_triangle _ hT) h₂ (by
+ isZero₂_of_isZero₁₃ _ (rot_of_distTriang _ hT) h₂ (by
dsimp
simp only [IsZero.iff_id_eq_zero] at h₁ ⊢
rw [← Functor.map_id, h₁, Functor.map_zero])
@@ -361,10 +361,10 @@ lemma isZero₁_iff_isIso₂ :
constructor <;> infer_instance
lemma isZero₂_iff_isIso₃ : IsZero T.obj₂ ↔ IsIso T.mor₃ :=
- isZero₁_iff_isIso₂ _ (rot_of_dist_triangle _ hT)
+ isZero₁_iff_isIso₂ _ (rot_of_distTriang _ hT)
lemma isZero₃_iff_isIso₁ : IsZero T.obj₃ ↔ IsIso T.mor₁ := by
- refine' Iff.trans _ (Triangle.isZero₁_iff_isIso₂ _ (inv_rot_of_dist_triangle _ hT))
+ refine' Iff.trans _ (Triangle.isZero₁_iff_isIso₂ _ (inv_rot_of_distTriang _ hT))
dsimp
simp only [IsZero.iff_id_eq_zero, ← Functor.map_id, Functor.map_eq_zero_iff]
@@ -381,12 +381,12 @@ lemma shift_distinguished (n : ℤ) :
have H_zero : H 0 := fun T hT =>
isomorphic_distinguished _ hT _ ((Triangle.shiftFunctorZero C).app T)
have H_one : H 1 := fun T hT =>
- isomorphic_distinguished _ (rot_of_dist_triangle _
- (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT))) _
+ isomorphic_distinguished _ (rot_of_distTriang _
+ (rot_of_distTriang _ (rot_of_distTriang _ hT))) _
((rotateRotateRotateIso C).symm.app T)
have H_neg_one : H (-1) := fun T hT =>
- isomorphic_distinguished _ (inv_rot_of_dist_triangle _
- (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ hT))) _
+ isomorphic_distinguished _ (inv_rot_of_distTriang _
+ (inv_rot_of_distTriang _ (inv_rot_of_distTriang _ hT))) _
((invRotateInvRotateInvRotateIso C).symm.app T)
have H_add : ∀ {a b c : ℤ}, H a → H b → a + b = c → H c := fun {a b c} ha hb hc T hT =>
isomorphic_distinguished _ (hb _ (ha _ hT)) _
@@ -423,14 +423,14 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
obtain ⟨g, rfl⟩ := Triangle.coyoneda_exact₂ _ hT f
(by rw [← cancel_mono φ.hom₃, assoc, φ.comm₂, reassoc_of% hf, zero_comp, zero_comp])
rw [assoc] at hf
- obtain ⟨h, hh⟩ := Triangle.coyoneda_exact₂ T'.invRotate (inv_rot_of_dist_triangle _ hT')
+ obtain ⟨h, hh⟩ := Triangle.coyoneda_exact₂ T'.invRotate (inv_rot_of_distTriang _ hT')
(g ≫ φ.hom₁) (by dsimp; rw [assoc, ← φ.comm₁, hf])
obtain ⟨k, rfl⟩ : ∃ (k : A ⟶ T.invRotate.obj₁), k ≫ T.invRotate.mor₁ = g := by
refine' ⟨h ≫ inv (φ.hom₃⟦(-1 : ℤ)⟧'), _⟩
have eq := ((invRotate C).map φ).comm₁
dsimp only [invRotate] at eq
rw [← cancel_mono φ.hom₁, assoc, assoc, eq, IsIso.inv_hom_id_assoc, hh]
- erw [assoc, comp_dist_triangle_mor_zero₁₂ _ (inv_rot_of_dist_triangle _ hT), comp_zero]
+ erw [assoc, comp_distTriang_mor_zero₁₂ _ (inv_rot_of_distTriang _ hT), comp_zero]
refine' isIso_of_yoneda_map_bijective _ (fun A => ⟨_, _⟩)
· intro f₁ f₂ h
simpa only [← cancel_mono φ.hom₂] using h
@@ -439,7 +439,7 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
⟨y₂ ≫ T'.mor₂ ≫ inv φ.hom₃, by simp⟩
obtain ⟨x₂, hx₂⟩ := Triangle.coyoneda_exact₃ _ hT x₃
(by rw [← cancel_mono (φ.hom₁⟦(1 : ℤ)⟧'), assoc, zero_comp, φ.comm₃, reassoc_of% hx₃,
- comp_dist_triangle_mor_zero₂₃ _ hT', comp_zero])
+ comp_distTriang_mor_zero₂₃ _ hT', comp_zero])
obtain ⟨y₁, hy₁⟩ := Triangle.coyoneda_exact₂ _ hT' (y₂ - x₂ ≫ φ.hom₂)
(by rw [sub_comp, assoc, ← φ.comm₂, ← reassoc_of% hx₂, hx₃, sub_self])
obtain ⟨x₁, hx₁⟩ : ∃ (x₁ : A ⟶ T.obj₁), x₁ ≫ φ.hom₁ = y₁ := ⟨y₁ ≫ inv φ.hom₁, by simp⟩
@@ -449,13 +449,13 @@ lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ di
lemma isIso₃_of_isIso₁₂ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
(hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₂ : IsIso φ.hom₂) : IsIso φ.hom₃ :=
- isIso₂_of_isIso₁₃ ((rotate C).map φ) (rot_of_dist_triangle _ hT)
- (rot_of_dist_triangle _ hT') h₂ (by dsimp; infer_instance)
+ isIso₂_of_isIso₁₃ ((rotate C).map φ) (rot_of_distTriang _ hT)
+ (rot_of_distTriang _ hT') h₂ (by dsimp; infer_instance)
lemma isIso₁_of_isIso₂₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
(hT' : T' ∈ distTriang C) (h₂ : IsIso φ.hom₂) (h₃ : IsIso φ.hom₃) : IsIso φ.hom₁ :=
- isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_dist_triangle _ hT)
- (inv_rot_of_dist_triangle _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
+ isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_distTriang _ hT)
+ (inv_rot_of_distTriang _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
/-
TODO: If `C` is pretriangulated with respect to a shift,
@@ -384,7 +384,7 @@ lemma shift_distinguished (n : ℤ) :
isomorphic_distinguished _ (rot_of_dist_triangle _
(rot_of_dist_triangle _ (rot_of_dist_triangle _ hT))) _
((rotateRotateRotateIso C).symm.app T)
- have H_neg_one : H (-1):= fun T hT =>
+ have H_neg_one : H (-1) := fun T hT =>
isomorphic_distinguished _ (inv_rot_of_dist_triangle _
(inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ hT))) _
((invRotateInvRotateInvRotateIso C).symm.app T)
@@ -138,7 +138,7 @@ See <https://stacks.math.columbia.edu/tag/0146>
-/
@[reassoc]
theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
- T.mor₂ ≫ T.mor₃ = 0 :=
+ T.mor₂ ≫ T.mor₃ = 0 :=
comp_dist_triangle_mor_zero₁₂ T.rotate (rot_of_dist_triangle T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
In this PR, it is shown that the shift of a distinguished triangle is a distinguished triangle. It is also shown that in a morphism between distinguished triangles, if two morphisms are isomorphisms, so is the third.
@@ -3,9 +3,7 @@ Copyright (c) 2021 Luke Kershaw. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw
-/
-import Mathlib.CategoryTheory.Preadditive.AdditiveFunctor
-import Mathlib.CategoryTheory.Shift.Basic
-import Mathlib.CategoryTheory.Triangulated.Rotate
+import Mathlib.CategoryTheory.Triangulated.TriangleShift
#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
@@ -26,11 +24,7 @@ TODO: generalise this to n-angulated categories as in https://arxiv.org/abs/1006
noncomputable section
-open CategoryTheory
-
-open CategoryTheory.Preadditive
-
-open CategoryTheory.Limits
+open CategoryTheory Preadditive Limits
universe v v₀ v₁ v₂ u u₀ u₁ u₂
@@ -90,7 +84,7 @@ class Pretriangulated [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] where
namespace Pretriangulated
-variable [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] [hC : Pretriangulated C]
+variable [∀ n : ℤ, Functor.Additive (CategoryTheory.shiftFunctor C n)] [hC : Pretriangulated C]
-- porting note: increased the priority so that we can write `T ∈ distTriang C`, and
-- not just `T ∈ (distTriang C)`
@@ -158,7 +152,7 @@ See <https://stacks.math.columbia.edu/tag/0146>
-/
@[reassoc]
theorem comp_dist_triangle_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
- T.mor₃ ≫ (shiftEquiv C 1).functor.map T.mor₁ = 0 := by
+ T.mor₃ ≫ T.mor₁⟦1⟧' = 0 := by
have H₂ := rot_of_dist_triangle T.rotate (rot_of_dist_triangle T H)
simpa using comp_dist_triangle_mor_zero₁₂ T.rotate.rotate H₂
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
@@ -378,6 +372,33 @@ lemma isZero₁_of_isIso₂ (h : IsIso T.mor₂) : IsZero T.obj₁ := (T.isZero
lemma isZero₂_of_isIso₃ (h : IsIso T.mor₃) : IsZero T.obj₂ := (T.isZero₂_iff_isIso₃ hT).2 h
lemma isZero₃_of_isIso₁ (h : IsIso T.mor₁) : IsZero T.obj₃ := (T.isZero₃_iff_isIso₁ hT).2 h
+lemma shift_distinguished (n : ℤ) :
+ (CategoryTheory.shiftFunctor (Triangle C) n).obj T ∈ distTriang C := by
+ revert T hT
+ let H : ℤ → Prop := fun n => ∀ (T : Triangle C) (_ : T ∈ distTriang C),
+ (Triangle.shiftFunctor C n).obj T ∈ distTriang C
+ change H n
+ have H_zero : H 0 := fun T hT =>
+ isomorphic_distinguished _ hT _ ((Triangle.shiftFunctorZero C).app T)
+ have H_one : H 1 := fun T hT =>
+ isomorphic_distinguished _ (rot_of_dist_triangle _
+ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT))) _
+ ((rotateRotateRotateIso C).symm.app T)
+ have H_neg_one : H (-1):= fun T hT =>
+ isomorphic_distinguished _ (inv_rot_of_dist_triangle _
+ (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ hT))) _
+ ((invRotateInvRotateInvRotateIso C).symm.app T)
+ have H_add : ∀ {a b c : ℤ}, H a → H b → a + b = c → H c := fun {a b c} ha hb hc T hT =>
+ isomorphic_distinguished _ (hb _ (ha _ hT)) _
+ ((Triangle.shiftFunctorAdd' C _ _ _ hc).app T)
+ obtain (n|n) := n
+ · induction' n with n hn
+ · exact H_zero
+ · exact H_add hn H_one rfl
+ · induction' n with n hn
+ · exact H_neg_one
+ · exact H_add hn H_neg_one rfl
+
end Triangle
instance : SplitEpiCategory C where
@@ -394,6 +415,48 @@ instance : SplitMonoCategory C where
rw [Triangle.mor₁_eq_zero_of_mono₂ _ hT hf, zero_comp])
exact ⟨r, hr.symm⟩
+lemma isIso₂_of_isIso₁₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
+ (hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₃ : IsIso φ.hom₃) : IsIso φ.hom₂ := by
+ have : Mono φ.hom₂ := by
+ rw [mono_iff_cancel_zero]
+ intro A f hf
+ obtain ⟨g, rfl⟩ := Triangle.coyoneda_exact₂ _ hT f
+ (by rw [← cancel_mono φ.hom₃, assoc, φ.comm₂, reassoc_of% hf, zero_comp, zero_comp])
+ rw [assoc] at hf
+ obtain ⟨h, hh⟩ := Triangle.coyoneda_exact₂ T'.invRotate (inv_rot_of_dist_triangle _ hT')
+ (g ≫ φ.hom₁) (by dsimp; rw [assoc, ← φ.comm₁, hf])
+ obtain ⟨k, rfl⟩ : ∃ (k : A ⟶ T.invRotate.obj₁), k ≫ T.invRotate.mor₁ = g := by
+ refine' ⟨h ≫ inv (φ.hom₃⟦(-1 : ℤ)⟧'), _⟩
+ have eq := ((invRotate C).map φ).comm₁
+ dsimp only [invRotate] at eq
+ rw [← cancel_mono φ.hom₁, assoc, assoc, eq, IsIso.inv_hom_id_assoc, hh]
+ erw [assoc, comp_dist_triangle_mor_zero₁₂ _ (inv_rot_of_dist_triangle _ hT), comp_zero]
+ refine' isIso_of_yoneda_map_bijective _ (fun A => ⟨_, _⟩)
+ · intro f₁ f₂ h
+ simpa only [← cancel_mono φ.hom₂] using h
+ · intro y₂
+ obtain ⟨x₃, hx₃⟩ : ∃ (x₃ : A ⟶ T.obj₃), x₃ ≫ φ.hom₃ = y₂ ≫ T'.mor₂ :=
+ ⟨y₂ ≫ T'.mor₂ ≫ inv φ.hom₃, by simp⟩
+ obtain ⟨x₂, hx₂⟩ := Triangle.coyoneda_exact₃ _ hT x₃
+ (by rw [← cancel_mono (φ.hom₁⟦(1 : ℤ)⟧'), assoc, zero_comp, φ.comm₃, reassoc_of% hx₃,
+ comp_dist_triangle_mor_zero₂₃ _ hT', comp_zero])
+ obtain ⟨y₁, hy₁⟩ := Triangle.coyoneda_exact₂ _ hT' (y₂ - x₂ ≫ φ.hom₂)
+ (by rw [sub_comp, assoc, ← φ.comm₂, ← reassoc_of% hx₂, hx₃, sub_self])
+ obtain ⟨x₁, hx₁⟩ : ∃ (x₁ : A ⟶ T.obj₁), x₁ ≫ φ.hom₁ = y₁ := ⟨y₁ ≫ inv φ.hom₁, by simp⟩
+ refine' ⟨x₂ + x₁ ≫ T.mor₁, _⟩
+ dsimp
+ rw [add_comp, assoc, φ.comm₁, reassoc_of% hx₁, ← hy₁, add_sub_cancel'_right]
+
+lemma isIso₃_of_isIso₁₂ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
+ (hT' : T' ∈ distTriang C) (h₁ : IsIso φ.hom₁) (h₂ : IsIso φ.hom₂) : IsIso φ.hom₃ :=
+ isIso₂_of_isIso₁₃ ((rotate C).map φ) (rot_of_dist_triangle _ hT)
+ (rot_of_dist_triangle _ hT') h₂ (by dsimp; infer_instance)
+
+lemma isIso₁_of_isIso₂₃ {T T' : Triangle C} (φ : T ⟶ T') (hT : T ∈ distTriang C)
+ (hT' : T' ∈ distTriang C) (h₂ : IsIso φ.hom₂) (h₃ : IsIso φ.hom₃) : IsIso φ.hom₁ :=
+ isIso₂_of_isIso₁₃ ((invRotate C).map φ) (inv_rot_of_dist_triangle _ hT)
+ (inv_rot_of_dist_triangle _ hT') (by dsimp; infer_instance) (by dsimp; infer_instance)
+
/-
TODO: If `C` is pretriangulated with respect to a shift,
then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
In this PR, it is shown that in pretriangulated categories, monomorphisms (and epimorphisms) split. In a distinguished triangle, a morphism is an isomorphism iff the third object is zero.
@@ -229,30 +229,171 @@ lemma contractible_distinguished₂ (X : C) :
(by aesop_cat) (by aesop_cat)
(by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
-lemma yoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
- (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) : ∃ (g : T.obj₃ ⟶ X), f = T.mor₂ ≫ g := by
+namespace Triangle
+
+variable (T : Triangle C) (hT : T ∈ distTriang C)
+
+lemma yoneda_exact₂ {X : C} (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) :
+ ∃ (g : T.obj₃ ⟶ X), f = T.mor₂ ≫ g := by
obtain ⟨g, ⟨hg₁, _⟩⟩ := complete_distinguished_triangle_morphism T _ hT
(contractible_distinguished₁ X) 0 f (by aesop_cat)
exact ⟨g, by simpa using hg₁.symm⟩
-lemma yoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
- (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) : ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
+lemma yoneda_exact₃ {X : C} (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) :
+ ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
yoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
-lemma coyoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₂)
- (hf : f ≫ T.mor₂ = 0) : ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
+lemma coyoneda_exact₂ {X : C} (f : X ⟶ T.obj₂) (hf : f ≫ T.mor₂ = 0) :
+ ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
obtain ⟨a, ⟨ha₁, _⟩⟩ := complete_distinguished_triangle_morphism₁ _ T
(contractible_distinguished X) hT f 0 (by aesop_cat)
exact ⟨a, by simpa using ha₁⟩
-lemma coyoneda_exact₁ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
- (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) : ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
+lemma coyoneda_exact₁ {X : C} (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) :
+ ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
coyoneda_exact₂ _ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT)) f (by aesop_cat)
-lemma coyoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₃)
- (hf : f ≫ T.mor₃ = 0) : ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
+lemma coyoneda_exact₃ {X : C} (f : X ⟶ T.obj₃) (hf : f ≫ T.mor₃ = 0) :
+ ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
coyoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+lemma mor₃_eq_zero_iff_epi₂ : T.mor₃ = 0 ↔ Epi T.mor₂ := by
+ constructor
+ · intro h
+ rw [epi_iff_cancel_zero]
+ intro X g hg
+ obtain ⟨f, rfl⟩ := yoneda_exact₃ T hT g hg
+ rw [h, zero_comp]
+ · intro
+ rw [← cancel_epi T.mor₂, comp_dist_triangle_mor_zero₂₃ _ hT, comp_zero]
+
+lemma mor₂_eq_zero_iff_epi₁ : T.mor₂ = 0 ↔ Epi T.mor₁ := by
+ have h := mor₃_eq_zero_iff_epi₂ _ (inv_rot_of_dist_triangle _ hT)
+ dsimp at h
+ rw [← h, IsIso.comp_right_eq_zero]
+
+lemma mor₁_eq_zero_iff_epi₃ : T.mor₁ = 0 ↔ Epi T.mor₃ := by
+ have h := mor₃_eq_zero_iff_epi₂ _ (rot_of_dist_triangle _ hT)
+ dsimp at h
+ rw [← h, neg_eq_zero]
+ constructor
+ · intro h
+ simp only [h, Functor.map_zero]
+ · intro h
+ rw [← (CategoryTheory.shiftFunctor C (1 : ℤ)).map_eq_zero_iff, h]
+
+lemma mor₃_eq_zero_of_epi₂ (h : Epi T.mor₂) : T.mor₃ = 0 := (T.mor₃_eq_zero_iff_epi₂ hT).2 h
+lemma mor₂_eq_zero_of_epi₁ (h : Epi T.mor₁) : T.mor₂ = 0 := (T.mor₂_eq_zero_iff_epi₁ hT).2 h
+lemma mor₁_eq_zero_of_epi₃ (h : Epi T.mor₃) : T.mor₁ = 0 := (T.mor₁_eq_zero_iff_epi₃ hT).2 h
+
+lemma epi₂ (h : T.mor₃ = 0) : Epi T.mor₂ := (T.mor₃_eq_zero_iff_epi₂ hT).1 h
+lemma epi₁ (h : T.mor₂ = 0) : Epi T.mor₁ := (T.mor₂_eq_zero_iff_epi₁ hT).1 h
+lemma epi₃ (h : T.mor₁ = 0) : Epi T.mor₃ := (T.mor₁_eq_zero_iff_epi₃ hT).1 h
+
+lemma mor₁_eq_zero_iff_mono₂ : T.mor₁ = 0 ↔ Mono T.mor₂ := by
+ constructor
+ · intro h
+ rw [mono_iff_cancel_zero]
+ intro X g hg
+ obtain ⟨f, rfl⟩ := coyoneda_exact₂ T hT g hg
+ rw [h, comp_zero]
+ · intro
+ rw [← cancel_mono T.mor₂, comp_dist_triangle_mor_zero₁₂ _ hT, zero_comp]
+
+lemma mor₂_eq_zero_iff_mono₃ : T.mor₂ = 0 ↔ Mono T.mor₃ :=
+ mor₁_eq_zero_iff_mono₂ _ (rot_of_dist_triangle _ hT)
+
+lemma mor₃_eq_zero_iff_mono₁ : T.mor₃ = 0 ↔ Mono T.mor₁ := by
+ have h := mor₁_eq_zero_iff_mono₂ _ (inv_rot_of_dist_triangle _ hT)
+ dsimp at h
+ rw [← h, neg_eq_zero, IsIso.comp_right_eq_zero]
+ constructor
+ · intro h
+ simp only [h, Functor.map_zero]
+ · intro h
+ rw [← (CategoryTheory.shiftFunctor C (-1 : ℤ)).map_eq_zero_iff, h]
+
+lemma mor₁_eq_zero_of_mono₂ (h : Mono T.mor₂) : T.mor₁ = 0 := (T.mor₁_eq_zero_iff_mono₂ hT).2 h
+lemma mor₂_eq_zero_of_mono₃ (h : Mono T.mor₃) : T.mor₂ = 0 := (T.mor₂_eq_zero_iff_mono₃ hT).2 h
+lemma mor₃_eq_zero_of_mono₁ (h : Mono T.mor₁) : T.mor₃ = 0 := (T.mor₃_eq_zero_iff_mono₁ hT).2 h
+
+lemma mono₂ (h : T.mor₁ = 0) : Mono T.mor₂ := (T.mor₁_eq_zero_iff_mono₂ hT).1 h
+lemma mono₃ (h : T.mor₂ = 0) : Mono T.mor₃ := (T.mor₂_eq_zero_iff_mono₃ hT).1 h
+lemma mono₁ (h : T.mor₃ = 0) : Mono T.mor₁ := (T.mor₃_eq_zero_iff_mono₁ hT).1 h
+
+lemma isZero₂_iff : IsZero T.obj₂ ↔ (T.mor₁ = 0 ∧ T.mor₂ = 0) := by
+ constructor
+ · intro h
+ exact ⟨h.eq_of_tgt _ _, h.eq_of_src _ _⟩
+ · intro ⟨h₁, h₂⟩
+ obtain ⟨f, hf⟩ := coyoneda_exact₂ T hT (𝟙 _) (by rw [h₂, comp_zero])
+ rw [IsZero.iff_id_eq_zero, hf, h₁, comp_zero]
+
+lemma isZero₁_iff : IsZero T.obj₁ ↔ (T.mor₁ = 0 ∧ T.mor₃ = 0) := by
+ refine' (isZero₂_iff _ (inv_rot_of_dist_triangle _ hT)).trans _
+ dsimp
+ simp [neg_eq_zero, IsIso.comp_right_eq_zero, Functor.map_eq_zero_iff]
+ tauto
+
+lemma isZero₃_iff : IsZero T.obj₃ ↔ (T.mor₂ = 0 ∧ T.mor₃ = 0) := by
+ refine' (isZero₂_iff _ (rot_of_dist_triangle _ hT)).trans _
+ dsimp
+ tauto
+
+lemma isZero₁_of_isZero₂₃ (h₂ : IsZero T.obj₂) (h₃ : IsZero T.obj₃) : IsZero T.obj₁ := by
+ rw [T.isZero₁_iff hT]
+ exact ⟨h₂.eq_of_tgt _ _, h₃.eq_of_src _ _⟩
+
+lemma isZero₂_of_isZero₁₃ (h₁ : IsZero T.obj₁) (h₃ : IsZero T.obj₃) : IsZero T.obj₂ := by
+ rw [T.isZero₂_iff hT]
+ exact ⟨h₁.eq_of_src _ _, h₃.eq_of_tgt _ _⟩
+
+lemma isZero₃_of_isZero₁₂ (h₁ : IsZero T.obj₁) (h₂ : IsZero T.obj₂) : IsZero T.obj₃ :=
+ isZero₂_of_isZero₁₃ _ (rot_of_dist_triangle _ hT) h₂ (by
+ dsimp
+ simp only [IsZero.iff_id_eq_zero] at h₁ ⊢
+ rw [← Functor.map_id, h₁, Functor.map_zero])
+
+lemma isZero₁_iff_isIso₂ :
+ IsZero T.obj₁ ↔ IsIso T.mor₂ := by
+ rw [T.isZero₁_iff hT]
+ constructor
+ · intro ⟨h₁, h₃⟩
+ have := T.epi₂ hT h₃
+ obtain ⟨f, hf⟩ := yoneda_exact₂ T hT (𝟙 _) (by rw [h₁, zero_comp])
+ exact ⟨f, hf.symm, by rw [← cancel_epi T.mor₂, comp_id, ← reassoc_of% hf]⟩
+ · intro
+ rw [T.mor₁_eq_zero_iff_mono₂ hT, T.mor₃_eq_zero_iff_epi₂ hT]
+ constructor <;> infer_instance
+
+lemma isZero₂_iff_isIso₃ : IsZero T.obj₂ ↔ IsIso T.mor₃ :=
+ isZero₁_iff_isIso₂ _ (rot_of_dist_triangle _ hT)
+
+lemma isZero₃_iff_isIso₁ : IsZero T.obj₃ ↔ IsIso T.mor₁ := by
+ refine' Iff.trans _ (Triangle.isZero₁_iff_isIso₂ _ (inv_rot_of_dist_triangle _ hT))
+ dsimp
+ simp only [IsZero.iff_id_eq_zero, ← Functor.map_id, Functor.map_eq_zero_iff]
+
+lemma isZero₁_of_isIso₂ (h : IsIso T.mor₂) : IsZero T.obj₁ := (T.isZero₁_iff_isIso₂ hT).2 h
+lemma isZero₂_of_isIso₃ (h : IsIso T.mor₃) : IsZero T.obj₂ := (T.isZero₂_iff_isIso₃ hT).2 h
+lemma isZero₃_of_isIso₁ (h : IsIso T.mor₁) : IsZero T.obj₃ := (T.isZero₃_iff_isIso₁ hT).2 h
+
+end Triangle
+
+instance : SplitEpiCategory C where
+ isSplitEpi_of_epi f hf := by
+ obtain ⟨Z, g, h, hT⟩ := distinguished_cocone_triangle f
+ obtain ⟨r, hr⟩ := Triangle.coyoneda_exact₂ _ hT (𝟙 _)
+ (by rw [Triangle.mor₂_eq_zero_of_epi₁ _ hT hf, comp_zero])
+ exact ⟨r, hr.symm⟩
+
+instance : SplitMonoCategory C where
+ isSplitMono_of_mono f hf := by
+ obtain ⟨X, g, h, hT⟩ := distinguished_cocone_triangle₁ f
+ obtain ⟨r, hr⟩ := Triangle.yoneda_exact₂ _ hT (𝟙 _) (by
+ rw [Triangle.mor₁_eq_zero_of_mono₂ _ hT hf, zero_comp])
+ exact ⟨r, hr.symm⟩
+
/-
TODO: If `C` is pretriangulated with respect to a shift,
then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
This PR slightly extends the basic API of pretriangulated categories.
@@ -36,16 +36,12 @@ universe v v₀ v₁ v₂ u u₀ u₁ u₂
namespace CategoryTheory
-open Category Pretriangulated
+open Category Pretriangulated ZeroObject
/-
We work in a preadditive category `C` equipped with an additive shift.
-/
variable (C : Type u) [Category.{v} C] [HasZeroObject C] [HasShift C ℤ] [Preadditive C]
- [∀ n : ℤ, Functor.Additive (shiftFunctor C n)]
-
-variable (D : Type u₂) [Category.{v₂} D] [HasZeroObject D] [HasShift D ℤ] [Preadditive D]
- [∀ n : ℤ, Functor.Additive (shiftFunctor D n)]
/-- A preadditive category `C` with an additive shift, and a class of "distinguished triangles"
relative to that shift is called pretriangulated if the following hold:
@@ -68,7 +64,7 @@ relative to that shift is called pretriangulated if the following hold:
See <https://stacks.math.columbia.edu/tag/0145>
-/
-class Pretriangulated where
+class Pretriangulated [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] where
/-- a class of triangle which are called `distinguished` -/
distinguishedTriangles : Set (Triangle C)
/-- a triangle that is isomorphic to a distinguished triangle is distinguished -/
@@ -78,7 +74,7 @@ class Pretriangulated where
contractible_distinguished : ∀ X : C, contractibleTriangle X ∈ distinguishedTriangles
/-- any morphism `X ⟶ Y` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
distinguished_cocone_triangle :
- ∀ (X Y : C) (f : X ⟶ Y),
+ ∀ {X Y : C} (f : X ⟶ Y),
∃ (Z : C) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguishedTriangles
/-- a triangle is distinguished iff it is so after rotating it -/
rotate_distinguished_triangle :
@@ -94,12 +90,19 @@ class Pretriangulated where
namespace Pretriangulated
-variable [hC : Pretriangulated C]
+variable [∀ n : ℤ, Functor.Additive (shiftFunctor C n)] [hC : Pretriangulated C]
-- porting note: increased the priority so that we can write `T ∈ distTriang C`, and
-- not just `T ∈ (distTriang C)`
/-- distinguished triangles in a pretriangulated category -/
-notation:60 "distTriang " C => @distinguishedTriangles C _ _ _ _ _
+notation:60 "distTriang " C => @distinguishedTriangles C _ _ _ _ _ _
+
+variable {C}
+
+lemma distinguished_iff_of_iso {T₁ T₂ : Triangle C} (e : T₁ ≅ T₂) :
+ (T₁ ∈ distTriang C) ↔ T₂ ∈ distTriang C :=
+ ⟨fun hT₁ => isomorphic_distinguished _ hT₁ _ e.symm,
+ fun hT₂ => isomorphic_distinguished _ hT₂ _ e⟩
/-- Given any distinguished triangle `T`, then we know `T.rotate` is also distinguished.
-/
@@ -123,6 +126,7 @@ theorem inv_rot_of_dist_triangle (T : Triangle C) (H : T ∈ distTriang C) :
the composition `f ≫ g = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
+@[reassoc]
theorem comp_dist_triangle_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor₁ ≫ T.mor₂ = 0 := by
obtain ⟨c, hc⟩ :=
complete_distinguished_triangle_morphism _ _ (contractible_distinguished T.obj₁) H (𝟙 T.obj₁)
@@ -138,9 +142,10 @@ theorem comp_dist_triangle_mor_zero₁₂ (T) (H : T ∈ (distTriang C)) : T.mor
the composition `g ≫ h = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
+@[reassoc]
theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang C) :
T.mor₂ ≫ T.mor₃ = 0 :=
- comp_dist_triangle_mor_zero₁₂ C T.rotate (rot_of_dist_triangle C T H)
+ comp_dist_triangle_mor_zero₁₂ T.rotate (rot_of_dist_triangle T H)
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₂₃ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₂₃
/-- Given any distinguished triangle
@@ -151,12 +156,103 @@ theorem comp_dist_triangle_mor_zero₂₃ (T : Triangle C) (H : T ∈ distTriang
the composition `h ≫ f⟦1⟧ = 0`.
See <https://stacks.math.columbia.edu/tag/0146>
-/
+@[reassoc]
theorem comp_dist_triangle_mor_zero₃₁ (T : Triangle C) (H : T ∈ distTriang C) :
T.mor₃ ≫ (shiftEquiv C 1).functor.map T.mor₁ = 0 := by
- have H₂ := rot_of_dist_triangle C T.rotate (rot_of_dist_triangle C T H)
- simpa using comp_dist_triangle_mor_zero₁₂ C T.rotate.rotate H₂
+ have H₂ := rot_of_dist_triangle T.rotate (rot_of_dist_triangle T H)
+ simpa using comp_dist_triangle_mor_zero₁₂ T.rotate.rotate H₂
#align category_theory.pretriangulated.comp_dist_triangle_mor_zero₃₁ CategoryTheory.Pretriangulated.comp_dist_triangle_mor_zero₃₁
+/-- Any morphism `Y ⟶ Z` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
+lemma distinguished_cocone_triangle₁ {Y Z : C} (g : Y ⟶ Z) :
+ ∃ (X : C) (f : X ⟶ Y) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distTriang C := by
+ obtain ⟨X', f', g', mem⟩ := distinguished_cocone_triangle g
+ exact ⟨_, _, _, inv_rot_of_dist_triangle _ mem⟩
+
+/-- Any morphism `Z ⟶ X⟦1⟧` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
+lemma distinguished_cocone_triangle₂ {Z X : C} (h : Z ⟶ X⟦(1 : ℤ)⟧) :
+ ∃ (Y : C) (f : X ⟶ Y) (g : Y ⟶ Z), Triangle.mk f g h ∈ distTriang C := by
+ obtain ⟨Y', f', g', mem⟩ := distinguished_cocone_triangle h
+ let T' := (Triangle.mk h f' g').invRotate.invRotate
+ refine' ⟨T'.obj₂, ((shiftEquiv C (1 : ℤ)).unitIso.app X).hom ≫ T'.mor₁, T'.mor₂,
+ isomorphic_distinguished _ (inv_rot_of_dist_triangle _ (inv_rot_of_dist_triangle _ mem)) _ _⟩
+ exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
+ (by aesop_cat) (by aesop_cat)
+ (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
+
+/-- A commutative square involving the morphisms `mor₂` of two distinguished triangles
+can be extended as morphism of triangles -/
+lemma complete_distinguished_triangle_morphism₁ (T₁ T₂ : Triangle C)
+ (hT₁ : T₁ ∈ distTriang C) (hT₂ : T₂ ∈ distTriang C) (b : T₁.obj₂ ⟶ T₂.obj₂)
+ (c : T₁.obj₃ ⟶ T₂.obj₃) (comm : T₁.mor₂ ≫ c = b ≫ T₂.mor₂) :
+ ∃ (a : T₁.obj₁ ⟶ T₂.obj₁), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧
+ T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃ := by
+ obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
+ (rot_of_dist_triangle _ hT₁) (rot_of_dist_triangle _ hT₂) b c comm
+ refine' ⟨(shiftFunctor C (1 : ℤ)).preimage a, ⟨_, _⟩⟩
+ · apply (shiftFunctor C (1 : ℤ)).map_injective
+ dsimp at ha₂
+ rw [neg_comp, comp_neg, neg_inj] at ha₂
+ simpa only [Functor.map_comp, Functor.image_preimage] using ha₂
+ · simpa only [Functor.image_preimage] using ha₁
+
+/-- A commutative square involving the morphisms `mor₃` of two distinguished triangles
+can be extended as morphism of triangles -/
+lemma complete_distinguished_triangle_morphism₂ (T₁ T₂ : Triangle C)
+ (hT₁ : T₁ ∈ distTriang C) (hT₂ : T₂ ∈ distTriang C) (a : T₁.obj₁ ⟶ T₂.obj₁)
+ (c : T₁.obj₃ ⟶ T₂.obj₃) (comm : T₁.mor₃ ≫ a⟦(1 : ℤ)⟧' = c ≫ T₂.mor₃) :
+ ∃ (b : T₁.obj₂ ⟶ T₂.obj₂), T₁.mor₁ ≫ b = a ≫ T₂.mor₁ ∧ T₁.mor₂ ≫ c = b ≫ T₂.mor₂ := by
+ obtain ⟨a, ⟨ha₁, ha₂⟩⟩ := complete_distinguished_triangle_morphism _ _
+ (inv_rot_of_dist_triangle _ hT₁) (inv_rot_of_dist_triangle _ hT₂) (c⟦(-1 : ℤ)⟧') a (by
+ dsimp
+ simp only [neg_comp, comp_neg, ← Functor.map_comp_assoc, ← comm,
+ Functor.map_comp, shift_shift_neg', Functor.id_obj, assoc, Iso.inv_hom_id_app, comp_id])
+ refine' ⟨a, ⟨ha₁, _⟩⟩
+ dsimp only [Triangle.invRotate, Triangle.mk] at ha₂
+ rw [← cancel_mono ((shiftEquiv C (1 : ℤ)).counitIso.inv.app T₂.obj₃), assoc, assoc, ← ha₂]
+ simp only [shiftEquiv'_counitIso, shift_neg_shift', assoc, Iso.inv_hom_id_app_assoc]
+
+/-- Obvious triangles `0 ⟶ X ⟶ X ⟶ 0⟦1⟧` are distinguished -/
+lemma contractible_distinguished₁ (X : C) :
+ Triangle.mk (0 : 0 ⟶ X) (𝟙 X) 0 ∈ distTriang C := by
+ refine' isomorphic_distinguished _
+ (inv_rot_of_dist_triangle _ (contractible_distinguished X)) _ _
+ exact Triangle.isoMk _ _ (Functor.mapZeroObject _).symm (Iso.refl _) (Iso.refl _)
+ (by aesop_cat) (by aesop_cat) (by aesop_cat)
+
+/-- Obvious triangles `X ⟶ 0 ⟶ X⟦1⟧ ⟶ X⟦1⟧` are distinguished -/
+lemma contractible_distinguished₂ (X : C) :
+ Triangle.mk (0 : X ⟶ 0) 0 (𝟙 (X⟦1⟧)) ∈ distTriang C := by
+ refine' isomorphic_distinguished _
+ (inv_rot_of_dist_triangle _ (contractible_distinguished₁ (X⟦(1 : ℤ)⟧))) _ _
+ exact Triangle.isoMk _ _ ((shiftEquiv C (1 : ℤ)).unitIso.app X) (Iso.refl _) (Iso.refl _)
+ (by aesop_cat) (by aesop_cat)
+ (by dsimp; simp only [shift_shiftFunctorCompIsoId_inv_app, id_comp])
+
+lemma yoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
+ (f : T.obj₂ ⟶ X) (hf : T.mor₁ ≫ f = 0) : ∃ (g : T.obj₃ ⟶ X), f = T.mor₂ ≫ g := by
+ obtain ⟨g, ⟨hg₁, _⟩⟩ := complete_distinguished_triangle_morphism T _ hT
+ (contractible_distinguished₁ X) 0 f (by aesop_cat)
+ exact ⟨g, by simpa using hg₁.symm⟩
+
+lemma yoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
+ (f : T.obj₃ ⟶ X) (hf : T.mor₂ ≫ f = 0) : ∃ (g : T.obj₁⟦(1 : ℤ)⟧ ⟶ X), f = T.mor₃ ≫ g :=
+ yoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+
+lemma coyoneda_exact₂ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₂)
+ (hf : f ≫ T.mor₂ = 0) : ∃ (g : X ⟶ T.obj₁), f = g ≫ T.mor₁ := by
+ obtain ⟨a, ⟨ha₁, _⟩⟩ := complete_distinguished_triangle_morphism₁ _ T
+ (contractible_distinguished X) hT f 0 (by aesop_cat)
+ exact ⟨a, by simpa using ha₁⟩
+
+lemma coyoneda_exact₁ (T : Triangle C) (hT : T ∈ distTriang C) {X : C}
+ (f : X ⟶ T.obj₁⟦(1 : ℤ)⟧) (hf : f ≫ T.mor₁⟦1⟧' = 0) : ∃ (g : X ⟶ T.obj₃), f = g ≫ T.mor₃ :=
+ coyoneda_exact₂ _ (rot_of_dist_triangle _ (rot_of_dist_triangle _ hT)) f (by aesop_cat)
+
+lemma coyoneda_exact₃ (T : Triangle C) (hT : T ∈ distTriang C) {X : C} (f : X ⟶ T.obj₃)
+ (hf : f ≫ T.mor₃ = 0) : ∃ (g : X ⟶ T.obj₂), f = g ≫ T.mor₂ :=
+ coyoneda_exact₂ _ (rot_of_dist_triangle _ hT) f hf
+
/-
TODO: If `C` is pretriangulated with respect to a shift,
then `Cᵒᵖ` is pretriangulated with respect to the inverse shift.
@@ -2,16 +2,13 @@
Copyright (c) 2021 Luke Kershaw. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Luke Kershaw
-
-! This file was ported from Lean 3 source module category_theory.triangulated.pretriangulated
-! leanprover-community/mathlib commit 6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.Preadditive.AdditiveFunctor
import Mathlib.CategoryTheory.Shift.Basic
import Mathlib.CategoryTheory.Triangulated.Rotate
+#align_import category_theory.triangulated.pretriangulated from "leanprover-community/mathlib"@"6876fa15e3158ff3e4a4e2af1fb6e1945c6e8803"
+
/-!
# Pretriangulated Categories
@@ -82,7 +82,7 @@ class Pretriangulated where
/-- any morphism `X ⟶ Y` is part of a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X⟦1⟧` -/
distinguished_cocone_triangle :
∀ (X Y : C) (f : X ⟶ Y),
- ∃ (Z : C)(g : Y ⟶ Z)(h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguishedTriangles
+ ∃ (Z : C) (g : Y ⟶ Z) (h : Z ⟶ X⟦(1 : ℤ)⟧), Triangle.mk f g h ∈ distinguishedTriangles
/-- a triangle is distinguished iff it is so after rotating it -/
rotate_distinguished_triangle :
∀ T : Triangle C, T ∈ distinguishedTriangles ↔ T.rotate ∈ distinguishedTriangles
Co-authored-by: Jeremy Tan Jie Rui <e0191785@u.nus.edu> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com> Co-authored-by: qawbecrdtey <qawbecrdtey@kaist.ac.kr> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Moritz Doll <moritz.doll@googlemail.com> Co-authored-by: Jon Eugster <eugster.jon@gmail.com> Co-authored-by: Amelia Livingston <101damnations@github.com> Co-authored-by: Adam Topaz <github@adamtopaz.com> Co-authored-by: thorimur <68410468+thorimur@users.noreply.github.com> Co-authored-by: Violeta Hernández <vi.hdz.p@gmail.com> Co-authored-by: Adam Topaz <adamtopaz@users.noreply.github.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Sebastian Zivota <loewenheim@mailbox.org>
The unported dependencies are