-
Notifications
You must be signed in to change notification settings - Fork 1.3k
[Merged by Bors] - feat(CategoryTheory/Triangulated): definition of localising subcategories #38987
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
joelriou
wants to merge
5
commits into
leanprover-community:master
from
joelriou:localizing-subcategory-0
Closed
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
6f5fcab
feat(CategoryTheory/Triangulated): definition of localising subcatego…
joelriou 17715c1
ref
joelriou abd00d9
added TODO
joelriou a957b73
IsVerdierLeft/RightLocalising
joelriou 0370797
Merge remote-tracking branch 'origin/master' into localizing-subcateg…
joelriou File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
156 changes: 156 additions & 0 deletions
156
Mathlib/CategoryTheory/Triangulated/LocalizingSubcategory.lean
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,156 @@ | ||
| /- | ||
| Copyright (c) 2026 Joël Riou. All rights reserved. | ||
| Released under Apache 2.0 license as described in the file LICENSE. | ||
| Authors: Joël Riou | ||
| -/ | ||
| module | ||
|
|
||
| public import Mathlib.CategoryTheory.Triangulated.Opposite.Subcategory | ||
| public import Mathlib.CategoryTheory.Triangulated.Opposite.Triangulated | ||
|
|
||
| /-! | ||
| # Localizing subcategories | ||
|
|
||
| Let `C` be a pretriangulated category. If `A` and `B` are triangulated | ||
| subcategories of `C`, we define predicates (typeclasses | ||
| `IsVerdierRightLocalizing` and `IsVerdierLeftLocalizing`) | ||
| saying that `A` is right `B`-localizing (or left `B`-localizing). | ||
| When `B` is closed under isomorphisms, we shall show that this implies that | ||
| the functor from the Verdier quotient `A/(A ⊓ B)` to `C/B` is fully | ||
| faithful (TODO @joelriou). | ||
|
|
||
| ## References | ||
| * [Jean-Louis Verdier, *Des catégories dérivées des catégories abéliennes*, | ||
| Proposition 2.3.5, Chapitre II][verdier1996] | ||
|
|
||
| -/ | ||
|
|
||
| @[expose] public section | ||
|
|
||
| namespace CategoryTheory | ||
|
|
||
| open Category Limits Pretriangulated Opposite | ||
|
|
||
| namespace ObjectProperty | ||
|
|
||
| variable {C D D' : Type*} [Category* C] [Category* D] [Category* D'] | ||
|
|
||
| /-- If `A` and `B` are triangulated subcategories of a (pre)triangulated | ||
| category `C` (with `B` closed under isomorphisms), we say that `A` is | ||
| right `B`-localizing if any morphism `X ⟶ Y` with `X` in `B` and | ||
| `Y` in `A` factors through an object that is in `A` and `B`. | ||
| Note that the definition does not use the (pre)triangulated structure: | ||
| see `isVerdierRightLocalizing_iff` for a characterization which | ||
| relies on it. -/ | ||
| class IsVerdierRightLocalizing (A B : ObjectProperty C) : Prop where | ||
| fac {X Y : C} (f : X ⟶ Y) (hX : B X) (hY : A Y) : | ||
| ∃ (Z : C) (a : X ⟶ Z) (b : Z ⟶ Y), A Z ∧ B Z ∧ a ≫ b = f | ||
|
|
||
| /-- If `A` and `B` are triangulated subcategories of a (pre)triangulated | ||
| category `C` (with `B` closed under isomorphisms), we say that `A` is | ||
| left `B`-localizing if any morphism `X ⟶ Y` with `X` in `A` and | ||
| `Y` in `B` factors through an object that is in `A` and `B`. | ||
| Note that the definition does not use the (pre)triangulated structure: | ||
| see `isVerdierLeftLocalizing_iff` for a characterization which | ||
| relies on it. -/ | ||
| class IsVerdierLeftLocalizing (A B : ObjectProperty C) : Prop where | ||
| fac {X Y : C} (f : X ⟶ Y) (hX : A X) (hY : B Y) : | ||
| ∃ (Z : C) (a : X ⟶ Z) (b : Z ⟶ Y), A Z ∧ B Z ∧ a ≫ b = f | ||
|
|
||
| instance (A B : ObjectProperty C) [A.IsVerdierLeftLocalizing B] : | ||
| A.op.IsVerdierRightLocalizing B.op where | ||
| fac f hX hY := by | ||
| obtain ⟨Z, a, b, h₁, h₂, fac⟩ := | ||
| IsVerdierLeftLocalizing.fac f.unop hY hX | ||
| exact ⟨_, b.op, a.op, h₁, h₂, Quiver.Hom.unop_inj fac⟩ | ||
|
|
||
| instance (A B : ObjectProperty Cᵒᵖ) [A.IsVerdierLeftLocalizing B] : | ||
| A.unop.IsVerdierRightLocalizing B.unop where | ||
| fac f hX hY := by | ||
| obtain ⟨Z, a, b, h₁, h₂, fac⟩ := IsVerdierLeftLocalizing.fac f.op hY hX | ||
| exact ⟨_, b.unop, a.unop, h₁, h₂, Quiver.Hom.op_inj fac⟩ | ||
|
|
||
| instance (A B : ObjectProperty C) [A.IsVerdierRightLocalizing B] : | ||
| A.op.IsVerdierLeftLocalizing B.op where | ||
| fac f hX hY := by | ||
| obtain ⟨Z, a, b, h₁, h₂, fac⟩ := IsVerdierRightLocalizing.fac f.unop hY hX | ||
| exact ⟨_, b.op, a.op, h₁, h₂, Quiver.Hom.unop_inj fac⟩ | ||
|
|
||
| instance (A B : ObjectProperty Cᵒᵖ) [A.IsVerdierRightLocalizing B] : | ||
| A.unop.IsVerdierLeftLocalizing B.unop where | ||
| fac f hX hY := by | ||
| obtain ⟨Z, a, b, h₁, h₂, fac⟩ := IsVerdierRightLocalizing.fac f.op hY hX | ||
| exact ⟨_, b.unop, a.unop, h₁, h₂, Quiver.Hom.op_inj fac⟩ | ||
|
|
||
| variable (A B : ObjectProperty C) | ||
|
|
||
| lemma isVerdierLeftLocalizing_op_iff : | ||
| A.op.IsVerdierLeftLocalizing B.op ↔ A.IsVerdierRightLocalizing B := | ||
| ⟨fun _ ↦ inferInstanceAs (A.op.unop.IsVerdierRightLocalizing B.op.unop), | ||
| fun _ ↦ inferInstance⟩ | ||
|
|
||
| lemma isVerdierRightLocalizing_op_iff : | ||
| A.op.IsVerdierRightLocalizing B.op ↔ A.IsVerdierLeftLocalizing B := | ||
| ⟨fun _ ↦ inferInstanceAs (A.op.unop.IsVerdierLeftLocalizing B.op.unop), | ||
| fun _ ↦ inferInstance⟩ | ||
|
|
||
| variable [HasZeroObject C] [HasShift C ℤ] [Preadditive C] | ||
| [∀ (n : ℤ), (shiftFunctor C n).Additive] [Pretriangulated C] | ||
|
|
||
| lemma isVerdierRightLocalizing_iff [A.IsTriangulated] [B.IsTriangulated] | ||
| [B.IsClosedUnderIsomorphisms] : | ||
| A.IsVerdierRightLocalizing B ↔ | ||
| ∀ ⦃X Y : C⦄ (s : X ⟶ Y) (_ : A X) (_ : B.trW s), | ||
| ∃ (Z : C) (s' : X ⟶ Z) (b : Y ⟶ Z), A Z ∧ (A ⊓ B).trW s' ∧ s ≫ b = s' := by | ||
| refine ⟨fun _ X Y s hX hs ↦ ?_, fun hA ↦ ⟨fun {X Y} f hX hY ↦ ?_⟩⟩ | ||
| · rw [ObjectProperty.trW_iff'] at hs | ||
| obtain ⟨W, a, b, hT, hW⟩ := hs | ||
| obtain ⟨W', c, d, h₁, h₂, fac⟩ := IsVerdierRightLocalizing.fac a hW hX | ||
| obtain ⟨U, hU, e, f, hT'⟩ := A.distinguished_cocone_triangle d h₁ hX | ||
| obtain ⟨g, hg, _⟩ := complete_distinguished_triangle_morphism _ _ hT hT' | ||
| c (𝟙 _) (by cat_disch) | ||
| refine ⟨U, e, g, hU, ?_, by cat_disch⟩ | ||
| rw [ObjectProperty.trW_iff'] | ||
| exact ⟨_, _, _, hT', h₁, h₂⟩ | ||
| · obtain ⟨Z, s, b, hT⟩ := Pretriangulated.distinguished_cocone_triangle f | ||
| have hs : B.trW s := by | ||
| rw [trW_iff'] | ||
| exact ⟨_, _, _, hT, hX⟩ | ||
| obtain ⟨W, s', g, hW, hs', fac⟩ := hA s hY hs | ||
| obtain ⟨U, hU, a, c, hT'⟩ := A.distinguished_cocone_triangle₁ s' hY hW | ||
| obtain ⟨t, ht, ht'⟩ := | ||
| complete_distinguished_triangle_morphism₁ _ _ hT hT' (𝟙 Y) g (by cat_disch) | ||
| exact ⟨U, t, a, hU, (B.trW_iff_of_distinguished' _ hT').1 (trW_monotone (by simp) _ hs'), | ||
| by cat_disch⟩ | ||
|
|
||
| variable {A B} in | ||
| lemma IsVerdierRightLocalizing.fac' | ||
| [A.IsTriangulated] [B.IsTriangulated] [B.IsClosedUnderIsomorphisms] | ||
| [A.IsVerdierRightLocalizing B] | ||
| {X Y : C} (s : X ⟶ Y) (hX : A X) (hs : B.trW s) : | ||
| ∃ (Z : C) (s' : X ⟶ Z) (b : Y ⟶ Z), A Z ∧ (A ⊓ B).trW s' ∧ s ≫ b = s' := | ||
| (isVerdierRightLocalizing_iff A B).1 inferInstance s hX hs | ||
|
|
||
| lemma isVerdierLeftLocalizing_iff [A.IsTriangulated] [B.IsTriangulated] | ||
| [B.IsClosedUnderIsomorphisms] : | ||
| A.IsVerdierLeftLocalizing B ↔ | ||
| ∀ ⦃X Y : C⦄ (s : X ⟶ Y) (_ : A Y) (_ : B.trW s), | ||
| ∃ (Z : C) (s' : Z ⟶ Y) (a : Z ⟶ X), A Z ∧ (A ⊓ B).trW s' ∧ a ≫ s = s' := by | ||
| rw [← isVerdierRightLocalizing_op_iff, isVerdierRightLocalizing_iff] | ||
| refine ⟨fun hA X Y s hY hs ↦ ?_, fun hA X Y s hX hs ↦ ?_⟩ | ||
| · obtain ⟨Z', s', b, hZ', hs', fac⟩ := hA s.op hY (by simpa [trW_op_iff]) | ||
| exact ⟨Z'.unop, s'.unop, b.unop, hZ', trW_of_op _ hs', by cat_disch⟩ | ||
| · obtain ⟨Z', s', b, hZ', hs', fac⟩ := hA s.unop hX (trW_of_op _ hs) | ||
| exact ⟨_, s'.op, b.op, hZ', trW_of_unop _ hs', by cat_disch⟩ | ||
|
|
||
| variable {A B} in | ||
| lemma IsVerdierLeftLocalizing.fac' | ||
| [A.IsTriangulated] [B.IsTriangulated] [B.IsClosedUnderIsomorphisms] | ||
| [A.IsVerdierLeftLocalizing B] | ||
| {X Y : C} (s : X ⟶ Y) (hY : A Y) (hs : B.trW s) : | ||
| ∃ (Z : C) (s' : Z ⟶ Y) (a : Z ⟶ X), A Z ∧ (A ⊓ B).trW s' ∧ a ≫ s = s' := | ||
| (isVerdierLeftLocalizing_iff A B).1 inferInstance s hY hs | ||
|
|
||
| end ObjectProperty | ||
|
|
||
| end CategoryTheory | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.