Skip to content

Commit d19809e

Browse files
committed
feat(CategoryTheory): the opposite of a triangulated subcategory (#38650)
1 parent 2c9ce08 commit d19809e

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3410,6 +3410,7 @@ public import Mathlib.CategoryTheory.Triangulated.Opposite.Basic
34103410
public import Mathlib.CategoryTheory.Triangulated.Opposite.Functor
34113411
public import Mathlib.CategoryTheory.Triangulated.Opposite.OpOp
34123412
public import Mathlib.CategoryTheory.Triangulated.Opposite.Pretriangulated
3413+
public import Mathlib.CategoryTheory.Triangulated.Opposite.Subcategory
34133414
public import Mathlib.CategoryTheory.Triangulated.Opposite.Triangle
34143415
public import Mathlib.CategoryTheory.Triangulated.Opposite.Triangulated
34153416
public import Mathlib.CategoryTheory.Triangulated.Orthogonal
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/-
2+
Copyright (c) 2026 Joël Riou. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Joël Riou
5+
-/
6+
module
7+
8+
public import Mathlib.CategoryTheory.ObjectProperty.Opposite
9+
public import Mathlib.CategoryTheory.Triangulated.Opposite.Pretriangulated
10+
11+
/-!
12+
# The opposite of a triangulated subcategory
13+
14+
In this file, we show that if `P : ObjectProperty C` is a triangulated
15+
subcategory of a pretriangulated category `C`, then `P.op` is a
16+
triangulated subcategory of `Cᵒᵖ`.
17+
18+
-/
19+
20+
public section
21+
22+
namespace CategoryTheory
23+
24+
open Pretriangulated.Opposite Pretriangulated Limits
25+
26+
namespace ObjectProperty
27+
28+
variable {C : Type*} [Category* C]
29+
[HasShift C ℤ] [HasZeroObject C] [Preadditive C]
30+
[∀ (n : ℤ), (shiftFunctor C n).Additive] [Pretriangulated C]
31+
32+
instance (P : ObjectProperty C) [P.IsStableUnderShift ℤ] :
33+
P.op.IsStableUnderShift ℤ where
34+
isStableUnderShiftBy n := { le_shift _ hX := P.le_shift (-n) _ hX }
35+
36+
instance (P : ObjectProperty Cᵒᵖ) [P.IsStableUnderShift ℤ] :
37+
P.unop.IsStableUnderShift ℤ where
38+
isStableUnderShiftBy n :=
39+
{ le_shift X hX := by
40+
obtain ⟨m, rfl⟩ : ∃ m, n = -m := ⟨-n , by simp⟩
41+
exact P.le_shift m _ hX }
42+
43+
instance (P : ObjectProperty C) [P.IsTriangulatedClosed₂] : P.op.IsTriangulatedClosed₂ where
44+
ext₂' T hT h₁ h₃ := by
45+
rw [mem_distTriang_op_iff] at hT
46+
obtain ⟨X, hX, ⟨e⟩⟩ := P.ext_of_isTriangulatedClosed₂' _ hT h₃ h₁
47+
exact ⟨Opposite.op X, hX, ⟨e.symm.op⟩⟩
48+
49+
instance (P : ObjectProperty Cᵒᵖ) [P.IsTriangulatedClosed₂] : P.unop.IsTriangulatedClosed₂ where
50+
ext₂' T hT h₁ h₃ := by
51+
obtain ⟨X, hX, ⟨e⟩⟩ := P.ext_of_isTriangulatedClosed₂' _ (op_distinguished _ hT) h₃ h₁
52+
exact ⟨Opposite.unop X, hX, ⟨e.symm.unop⟩⟩
53+
54+
instance (P : ObjectProperty C) [P.IsTriangulated] : P.op.IsTriangulated where
55+
56+
instance (P : ObjectProperty Cᵒᵖ) [P.IsTriangulated] : P.unop.IsTriangulated where
57+
58+
lemma trW_of_op (P : ObjectProperty C) [P.IsTriangulated]
59+
{X Y : C} {f : X ⟶ Y} (hf : P.op.trW f.op) : P.trW f := by
60+
obtain ⟨Z, a, b, h₁, h₂⟩ := hf
61+
rw [ObjectProperty.trW_iff']
62+
exact ⟨_, _, _, Pretriangulated.unop_distinguished _ h₁, h₂⟩
63+
64+
lemma trW_of_unop (P : ObjectProperty Cᵒᵖ) [P.IsTriangulated]
65+
{X Y : Cᵒᵖ} {f : X ⟶ Y} (hf : P.unop.trW f.unop) : P.trW f := by
66+
obtain ⟨Z, a, b, h₁, h₂⟩ := hf
67+
rw [ObjectProperty.trW_iff']
68+
exact ⟨_, _, _, Pretriangulated.op_distinguished _ h₁, h₂⟩
69+
70+
lemma trW_op_iff (P : ObjectProperty C) [P.IsTriangulated] {X Y : Cᵒᵖ} {f : X ⟶ Y} :
71+
P.op.trW f ↔ P.trW f.unop :=
72+
⟨P.trW_of_op, P.op.trW_of_unop⟩
73+
74+
lemma trW_op (P : ObjectProperty C) [P.IsTriangulated] : P.op.trW = P.trW.op := by
75+
ext X Y f
76+
exact P.trW_op_iff
77+
78+
end ObjectProperty
79+
80+
end CategoryTheory

0 commit comments

Comments
 (0)