Zulip Chat Archive

Stream: new members

Topic: Subfunctors


VayusElytra (Jul 15 2024 at 19:46):

I have the following code to define subfunctors into ModuleCat:

open CategoryTheory

--Persistence modules over some (small) category C.
abbrev FunctCat (C : Type*) [Category C] (K : Type*) [DivisionRing K]
   := (C  ModuleCat K)

structure Subfunctor (R : Type) [DivisionRing R] (C : Type) [Category C]
  (F : FunctCat C R) where
  BaseFunctor : FunctCat C R
  sub_obj (X : C) : --I want to express that BaseFunctor.obj(X) is a subset
  -- of F.obj X

How can I express the condition that BaseFunctor.obj(X) is a submodule of F.obj X? I had a look at the submodule structure, but I can't do something like sub_obj (X : C) := (BaseFunctor.obj X : Submodule R (F.obj X)) since that causes a type mismatch. How can I work around this?

Kevin Buzzard (Jul 15 2024 at 19:58):

A submodule is a term, not a type. Just write down an injective R-module hom instead?

Adam Topaz (Jul 15 2024 at 20:24):

See also CategoryTheory.NatTrans.mono_iff_mono_app

Joël Riou (Jul 15 2024 at 21:10):

You may use a variant of docs#CategoryTheory.GrothendieckTopology.Subpresheaf, or as Adam implies, you may consider monomorphisms in the functor category.

VayusElytra (Jul 17 2024 at 12:56):

Thank you all. Is something like this what you had in mind?

structure Subfunctor (R : Type) [DivisionRing R] (C : Type) [Category C]
  (F : FunctCat C R) where
  baseFunctor : FunctCat C R
  targetFunctor := F
  injection (X : C) : (baseFunctor.obj X →ₗ[R] F.obj X)
  inj_cond (X : C) : Function.Injective (injection X)
  restriction (f : X  Y) :  (x : baseFunctor.obj X),
    ((baseFunctor.map f)  (injection Y)) x = ((asHom (injection X))  (F.map f)) x
    --careful with asHom! This breaks if you use asHom injection Y instead.

Joël Riou (Jul 17 2024 at 13:44):

No, what I intended was a variation of

structure Subpresheaf (F : Cᵒᵖ  Type w) where
  /-- If `G` is a sub-presheaf of `F`, then the sections of `G` on `U` forms a subset of sections of
    `F` on `U`. -/
  obj :  U, Set (F.obj U)
  /-- If `G` is a sub-presheaf of `F` and `i : U ⟶ V`, then for each `G`-sections on `U` `x`,
    `F i x` is in `F(V)`. -/
  map :  {U V : Cᵒᵖ} (i : U  V), obj U  F.map i ⁻¹' obj V

Instead of Set (which in mathlib means "subset of"), it would be Submodule.

Alternatives would be MonoOver F which is the category of monomorphisms with target object F, or the variant Subobject F.


Last updated: May 02 2025 at 03:31 UTC