feat(CategoryTheory/Abelian/TorsionTheory): Introduce torsion theory for abelian categories#36744
feat(CategoryTheory/Abelian/TorsionTheory): Introduce torsion theory for abelian categories#36744farmanb wants to merge 19 commits intoleanprover-community:masterfrom
Conversation
farmanb
commented
Mar 16, 2026
PR summary b6118399e6Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
|
WIP |
| /-- A Torsion Theory in an abelian category consists of two classes, `T` and `F`, of | ||
| torsion and torsion-free objects, respectively, such that `T` is the left orthogonal | ||
| of `F` and `F` is the right orthogonal of `T`. -/ | ||
| class TorsionTheory (T F : ObjectProperty C) : Prop where |
…d rewrote as a structure.
…tensions, and coproducts.
|
It would be useful to show this: lemma gc_rightOrthogonal_leftOrthogonal :
GaloisConnection (OrderDual.toDual (α := ObjectProperty C) ∘ rightOrthogonal)
(leftOrthogonal ∘ OrderDual.ofDual) :=
fun _ _ ↦ ⟨fun h _ hX _ _ hY ↦ h _ hY _ hX, fun h _ hX _ _ hY ↦ h _ hY _ hX⟩ |
…struction of a maximal subobject possible.
| lemma isClosedUnderCoproducts_of_torsionTheory {T F : ObjectProperty C} (hTF : TorsionTheory T F) : | ||
| ∀ {J : Type w}, T.IsClosedUnderColimitsOfShape (Discrete J) := by |
There was a problem hiding this comment.
This should hold for colimits of any shape, and this should even be an instance for MorphismProperty.leftOrthogonal (and there is a dual statement for rightOrthogonal).
In general, from the various lemmas, could you extract the statements (instances) which hold for any left or right orthogonal?
…otients, extensions, and coproducts in a locally small and well-powered category C, then P = P.rightOrthogonal.leftOrthogonal. This is basically the characterization of a torsion class.
| (X : C) : | ||
| P (Subobject.sSup {A : Subobject X | P (A : C)}) := by | ||
| let subobjs := {A : Subobject X | P (A : C)} | ||
| let I := equivShrink (Subobject X) '' subobjs |
There was a problem hiding this comment.
Here, you may probably simplify the proof a little bit by showing that C has coproducts of shape subobjs (and P is stable under such coproducts) by transporting the assumptions through an equivalence of discrete categories (also given by equivShrink, but once these instance are around, equivShrink will no longer be necessary in the rest of the code).
There was a problem hiding this comment.
I took a stab at this. I'm not sure it's actually simpler. I can't see a way to avoid using equivShrink since sSup subobjs is defined to be the image of smallCoproductDesc subobjs, which in turn is defined via equivShrink. The colimit over the subobjs-indexed functor is isomorphic but not definitionally equal to the coproduct inside sSup, so it appears necessary to build the bridge between them explicitly. I'm not sure if you see something that I don't, or if I've misunderstood your intent...
There was a problem hiding this comment.
It is even more simple:
lemma prop_sSup_subobjectOf (P : ObjectProperty C)
[P.IsClosedUnderQuotients] [∀ J : Type w, P.IsClosedUnderColimitsOfShape (Discrete J)]
[LocallySmall.{w} C] [WellPowered.{w} C] [HasCoproducts.{w} C]
(X : C) : P (Subobject.sSup {A : Subobject X | P (A : C)}) :=
P.prop_of_iso (Subobject.underlyingIso
(Limits.image.ι (Subobject.smallCoproductDesc _))).symm
(P.prop_of_epi (factorThruImage _)
((ObjectProperty.prop_colimit _ _ (fun ⟨j⟩ ↦ by
dsimp
obtain ⟨S, hS, hj⟩ := j.2
simpa [← hj] using hS))))… replace construction of SES in hcok
…ftOrthogonal if and only if P is closed under quotients, extensions, and coproducts.