|
| 1 | +/- |
| 2 | +Copyright (c) 2023 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.Triangulated.Opposite.Pretriangulated |
| 9 | + |
| 10 | +/-! |
| 11 | +# The opposite of a triangulated category is triangulated |
| 12 | +
|
| 13 | +The pretriangulated structure on `Cᵒᵖ` was constructed in the file |
| 14 | +`CategoryTheory.Triangulated.Opposite.Pretriangulated`. Here, we show |
| 15 | +that `Cᵒᵖ` is triangulated if `C` is triangulated. |
| 16 | +
|
| 17 | +## References |
| 18 | +* [Jean-Louis Verdier, *Des catégories dérivées des catégories abéliennes*][verdier1996] |
| 19 | +
|
| 20 | +-/ |
| 21 | + |
| 22 | +@[expose] public section |
| 23 | + |
| 24 | +namespace CategoryTheory |
| 25 | + |
| 26 | +open Preadditive Limits |
| 27 | + |
| 28 | +namespace Pretriangulated |
| 29 | + |
| 30 | +variable (C : Type*) [Category C] [HasShift C ℤ] [HasZeroObject C] [Preadditive C] |
| 31 | + [∀ (n : ℤ), (shiftFunctor C n).Additive] [Pretriangulated C] |
| 32 | + |
| 33 | +namespace Opposite |
| 34 | + |
| 35 | +scoped instance [IsTriangulated C] : IsTriangulated Cᵒᵖ := by |
| 36 | + have : ∀ ⦃X₁ X₂ X₃ : C⦄ (u₁₂ : X₁ ⟶ X₂) (u₂₃ : X₂ ⟶ X₃), |
| 37 | + ∃ (Z₁₂ Z₂₃ Z₁₃ : C) |
| 38 | + (v₁₂ : Z₁₂ ⟶ X₁) (w₁₂ : X₂ ⟶ Z₁₂⟦(1 : ℤ)⟧) (h₁₂ : Triangle.mk v₁₂ u₁₂ w₁₂ ∈ distTriang C) |
| 39 | + (v₂₃ : Z₂₃ ⟶ X₂) (w₂₃ : X₃ ⟶ Z₂₃⟦(1 : ℤ)⟧) (h₂₃ : Triangle.mk v₂₃ u₂₃ w₂₃ ∈ distTriang C) |
| 40 | + (v₁₃ : Z₁₃ ⟶ X₁) (w₁₃ : X₃ ⟶ Z₁₃⟦(1 : ℤ)⟧) |
| 41 | + (h₁₃ : Triangle.mk v₁₃ (u₁₂ ≫ u₂₃) w₁₃ ∈ distTriang C), |
| 42 | + Nonempty (Triangulated.Octahedron rfl (rot_of_distTriang _ h₁₂) |
| 43 | + (rot_of_distTriang _ h₂₃) (rot_of_distTriang _ h₁₃)) := by |
| 44 | + intro X₁ X₂ X₃ u₁₂ u₂₃ |
| 45 | + obtain ⟨Z₁₂, v₁₂, w₁₂, h₁₂⟩ := distinguished_cocone_triangle₁ u₁₂ |
| 46 | + obtain ⟨Z₂₃, v₂₃, w₂₃, h₂₃⟩ := distinguished_cocone_triangle₁ u₂₃ |
| 47 | + obtain ⟨Z₁₃, v₁₃, w₁₃, h₁₃⟩ := distinguished_cocone_triangle₁ (u₁₂ ≫ u₂₃) |
| 48 | + exact ⟨_, _, _, _, _, h₁₂, _, _, h₂₃, _, _, h₁₃, ⟨Triangulated.someOctahedron _ _ _ _⟩⟩ |
| 49 | + refine IsTriangulated.mk' (fun X₁ X₂ X₃ u₁₂ u₂₃ ↦ ?_) |
| 50 | + obtain ⟨Z₁₂, Z₂₃, Z₁₃, v₁₂, w₁₂, h₁₂, v₂₃, w₂₃, h₂₃, v₁₃, w₁₃, h₁₃, ⟨H⟩⟩ := |
| 51 | + this u₂₃.unop u₁₂.unop |
| 52 | + refine ⟨X₁, X₂, X₃, _, _, _, u₁₂, u₂₃, Iso.refl _, Iso.refl _, Iso.refl _, by simp, by simp, |
| 53 | + v₂₃.op, opShiftFunctorEquivalenceSymmHomEquiv w₂₃.op, ?_, |
| 54 | + v₁₂.op, opShiftFunctorEquivalenceSymmHomEquiv w₁₂.op, ?_, |
| 55 | + v₁₃.op, opShiftFunctorEquivalenceSymmHomEquiv w₁₃.op, ?_, ?_⟩ |
| 56 | + · rw [mem_distTriang_op_iff] |
| 57 | + refine Pretriangulated.isomorphic_distinguished _ h₂₃ _ ?_ |
| 58 | + refine Triangle.isoMk _ _ (Iso.refl _) (Iso.refl _) (Iso.refl _) (by simp) (by simp) ?_ |
| 59 | + simpa using opShiftFunctorEquivalenceSymmHomEquiv_left_inv w₂₃.op |
| 60 | + · rw [mem_distTriang_op_iff] |
| 61 | + refine Pretriangulated.isomorphic_distinguished _ h₁₂ _ ?_ |
| 62 | + refine Triangle.isoMk _ _ (Iso.refl _) (Iso.refl _) (Iso.refl _) (by simp) (by simp) ?_ |
| 63 | + simpa using opShiftFunctorEquivalenceSymmHomEquiv_left_inv w₁₂.op |
| 64 | + · rw [mem_distTriang_op_iff] |
| 65 | + refine Pretriangulated.isomorphic_distinguished _ h₁₃ _ ?_ |
| 66 | + refine Triangle.isoMk _ _ (Iso.refl _) (Iso.refl _) (Iso.refl _) (by simp) (by simp) ?_ |
| 67 | + simpa using opShiftFunctorEquivalenceSymmHomEquiv_left_inv w₁₃.op |
| 68 | + · obtain ⟨m₁, hm₁⟩ := (shiftFunctor C (1 : ℤ)).map_surjective H.m₃ |
| 69 | + obtain ⟨m₃, hm₃⟩ := (shiftFunctor C (1 : ℤ)).map_surjective H.m₁ |
| 70 | + exact ⟨{ |
| 71 | + m₁ := m₁.op |
| 72 | + m₃ := m₃.op |
| 73 | + comm₁ := Quiver.Hom.unop_inj ((shiftFunctor C (1 : ℤ)).map_injective (by |
| 74 | + simpa [hm₁] using H.comm₄.symm)) |
| 75 | + comm₂ := Quiver.Hom.unop_inj ((shiftFunctor C (1 : ℤ)).map_injective (by |
| 76 | + have := H.comm₃ |
| 77 | + dsimp at this ⊢ |
| 78 | + rw [← hm₁] at this |
| 79 | + rw [Functor.map_comp, shift_opShiftFunctorEquivalenceSymmHomEquiv_unop_assoc, |
| 80 | + shift_opShiftFunctorEquivalenceSymmHomEquiv_unop, |
| 81 | + Quiver.Hom.unop_op, Quiver.Hom.unop_op, this])) |
| 82 | + comm₃ := Quiver.Hom.unop_inj ((shiftFunctor C (1 : ℤ)).map_injective (by |
| 83 | + simpa [hm₃] using H.comm₂)) |
| 84 | + comm₄ := Quiver.Hom.unop_inj ((shiftFunctor C (1 : ℤ)).map_injective (by |
| 85 | + have := H.comm₁ |
| 86 | + rw [← hm₃] at this |
| 87 | + dsimp at this ⊢ |
| 88 | + rw [Functor.map_comp, Functor.map_comp, |
| 89 | + shift_opShiftFunctorEquivalenceSymmHomEquiv_unop_assoc, |
| 90 | + shift_opShiftFunctorEquivalenceSymmHomEquiv_unop, |
| 91 | + Quiver.Hom.unop_op, Quiver.Hom.unop_op, this, |
| 92 | + ← unop_comp_assoc, opShiftFunctorEquivalence_unitIso_hom_naturality, |
| 93 | + unop_comp_assoc, Quiver.Hom.unop_op])) |
| 94 | + mem := by |
| 95 | + rw [← Triangle.shift_distinguished_iff _ (-1), mem_distTriang_op_iff'] |
| 96 | + refine ⟨_, H.mem, ⟨Triangle.isoMk _ _ |
| 97 | + ((shiftFunctorOpIso C _ _ (neg_add_cancel 1)).app _) |
| 98 | + (-((shiftFunctorOpIso C _ _ (neg_add_cancel 1)).app _)) |
| 99 | + ((shiftFunctorOpIso C _ _ (neg_add_cancel 1)).app _) |
| 100 | + (by simp [← hm₁]) (by simp [← hm₃]) ?_⟩⟩ |
| 101 | + have h₁ := (shiftFunctorComm Cᵒᵖ 1 (-1)).hom.naturality v₂₃.op |
| 102 | + have h₂ := (shiftFunctorComm Cᵒᵖ 1 (-1)).hom.naturality w₁₂.op |
| 103 | + dsimp at h₁ h₂ ⊢ |
| 104 | + simp only [Int.negOnePow_neg, Int.negOnePow_one, Functor.map_comp, Category.assoc, |
| 105 | + Units.neg_smul, one_smul, neg_comp, Functor.map_neg, comp_neg, neg_inj] |
| 106 | + rw [reassoc_of% h₁, shiftFunctor_op_map _ _ (neg_add_cancel 1) v₂₃.op, |
| 107 | + ← Functor.map_comp, Category.assoc, Category.assoc, Iso.inv_hom_id_app, |
| 108 | + Functor.map_comp, opShiftFunctorEquivalenceSymmHomEquiv_apply, |
| 109 | + Functor.map_comp_assoc, reassoc_of% h₂, |
| 110 | + shift_opShiftFunctorEquivalence_counitIso_inv_app _ _ _ (neg_add_cancel 1)] |
| 111 | + simp [← Functor.map_comp]}⟩ |
| 112 | + |
| 113 | +end Opposite |
| 114 | + |
| 115 | +end Pretriangulated |
| 116 | + |
| 117 | +end CategoryTheory |
0 commit comments