do covariant constructions commute with WithBasis?

asked 2019-11-15 16:08:07 +0100

heluani gravatar image

updated 2019-11-17 12:35:53 +0100

I have a category Cs (which is a supercategory of VectorSpaces) which implements axioms FinitelyGeneratedAsCs and WithBasis. When I want to consider Graded objects of C I simply return GradedModulesCategory.category_of(self) as the implementations of graded vector spaces or similar do. This preserves the axiom FinitelyGeneratedAsCs, namely if I call Cs().FinitelyGeneratedAsCs().Graded() I obtain the same as Cs().Graded().FinitelyGeneratedAsCs() . However when I do this with WithBasisthe results differ. Given this TODO in https://doc.sagemath.org/html/en/refe...

Todo Explain why this does not commute with WithBasis()

I suppose that this is something that has come up even in the current stable Sage code. I thought of asking here what would be the cause admittedly without having looked deeper into Sage's code to see how this is implemented.

EDIT: I suppose this has to to with the fact that Cs().WithBasis().super_categories() returns VectorSpaces(QQ).WithBasis() and Cs() in that order, so calling Graded() applies the functor to each so that Cs().WithBasis().Graded().super_categories() lists first VectorSpaces(QQ).WithBasis().Graded() and then Cs().WithBasis() and Cs().Graded(), this latter one being a direct subcategory of VectorSpaces(QQ).Graded()

But I tried defining Cs.WithBasis._super_categories in the right order and failed anyway.

EDIT2: The following seems to be a workaround. I define Cs.Graded and then on Cs.WithBasis.SubcategoryMethods I have


def Graded(self):
    axioms = self.axioms()
    return self.base_category.Graded()._with_axioms(axioms)

The problem is that if this is called from a subcategory that is a join category it will fail.

edit retag flag offensive close merge delete