-
-
Notifications
You must be signed in to change notification settings - Fork 491
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
Implement GradedModulesWithBasis(R).Subobjects() and FilteredModulesWithBasis(R).Subobjects() #33321
Comments
comment:2
Can you please add some examples that illustrate what you would like to happen? |
comment:3
The current behavior is correct because there is no guarantee that an arbitrary submodule is spanned by homogeneous elements. For a simple example, take the submodule spanned by Now we could do something where we check to see if the spanning elements are homogeneous and then use the ambient grading. This then likely has a solution at the category level by creating the category of subobjects of graded modules with basis and graded modules (with basis). (Note as I argue above, this is a strict subcategory of subobjects of graded modules with basis.) This might be slightly subtle as, in principle, by saying an object is graded, you are suppose to specify what graded structure you want. Thus doing it automatically is perhaps not quite mathematically valid. Perhaps the better solution would be to provide a For your immediate computational purposes, you can monkey patch in a degree by def degree(self):
return self.lift().degree() Note, as mentioned above, you have told the object that it is a graded module without specifying what the graded structure is. So this is a reasonable hack until a more long-term solution is implemented. The situation for filtered modules is perhaps easier as we do not need to contend with homogeneity issues. |
comment:4
+1 on developing it both for filtered and for graded modules |
comment:5
Replying to @tscrim:
Would it make sense to use 'maximal_degree' for the grading for the submodule by default? |
This comment has been minimized.
This comment has been minimized.
comment:7
Replying to @louisng114:
Not for graded modules: take |
This comment has been minimized.
This comment has been minimized.
comment:9
I am still -1 on having by default a submodule inherit a grading. There is no reason to slow down code to test for homogeneity. If you want to inherit a grading, it should be a separate method (which returns a separate (sub)class). I would be very upset if I couldn't build a submodule of a graded module of nonhomogeneous elements as this is a natural thing to do. |
comment:10
Replying to @tscrim:
But this is only for when we specify the category of the submodule to be graded. |
comment:11
Replying to @louisng114:
Still -1 because passing that category means I am promising to provide a grading, not have it inherited. Basically I could not create a submodue of nonhomogeneous elements that I provide a different grading to. Again, it does not make sense mathematically to do this. Thinking about how it would be coded further reinforces that to me. It also makes it easier to construct the object you want as you don't have to pass the category. For free modules over a graded algebra, we also have different constructions if we want the module to be graded or not (although this was very recently merged #32505 and should appear in the next beta). |
This comment has been minimized.
This comment has been minimized.
Branch: public/33321 |
New commits:
|
Commit: |
comment:13
In this docstring (and the next):
it should say "filtered". Is the condition of being homogeneous needed in this case? |
This comment has been minimized.
This comment has been minimized.
comment:14
You have a contradiction: the category has a default grading and a special method saying inherit the grading. This is telling you that the category should not have the default grading. Let me again say that you need to create a separate class for the graded module and for filtered modules you can do this at the category level. However, I was thinking a bit more, and there is a subtle issue with my example in comment:7. That is in the direct product, but the standard graded module is a direct sum. So there is a way to define a grading by the minimal or maximal degree of any element. However, because there are two incompatible ways of doing it, we should not do it in general for the graded case. A particular class/method is different than at the category level because you are explicitly saying "I want this specific object in the category." Note that formal power series is still a filtered module. For filtered modules, there is a unique way to do this because for any |
comment:15
Replying to @tscrim:
You are saying that a parent in the category of subobjects of graded modules is not necessarily graded as it is in Louis' code? |
comment:16
In the generic case, that is correct. Restricting to the homogeneously generated case, it is, but that is an additional restriction that would need an additional category. Although it is such a special case that IMO it is easier to understand and maintain as a particular parent class in the categories we already have. |
comment:17
Well, more precisely it is graded (since it is a direct sum), but not in a canonical way. |
comment:18
Isn't it the very definition of a graded submodule that the elements of the submodule have the same degree as upstairs? |
comment:19
I also don't know what you mean by "generic". |
comment:20
In fact, I don't think there's such a thing as a graded submodule that cannot be generated by homogeneous generators. |
comment:21
As a concrete example, take a polynomial ring as a graded module over its ground ring. Then take the submodule spanned by 1 + x. This is a submodule that has 2 natural gradings (that also extends to rings), one where it has degree 0 (min deg) and the other has degree 1 (max deg). This is a graded submodule in the sense that it is a submodule and it is graded, but not one that respects the ambient space grading. This is a natural submodule to construct IMO and needs to be supported. However, I see the point you are making, and there seems to be an ambiguity in the definition. We need to be very precise about what category we are in. We need to allow the construction above, and so I would not want the subobjects of a graded category to have to respect the ambient grading. I think we should have an explicit hook when we want to have something that respects the ambient grading. |
comment:22
Replying to @tscrim:
Yes, but it is in the join category of "subobjects of modules with basis" and "graded modules", not in the category that we're talking about. |
comment:35
I'm not sure I can process all of the discussion right now, but given that disclaimer, here is my take: if you are explicitly working with an instance of I think this is consistent with the recent comments. |
comment:37
Here is my proposal based upon our discussion. I decided to let the specified category override the filtered default in case someone wants to consider the object without the filtration (say, for doing morphisms). I also extended the allowed input for |
Author: Louis Ng, Travis Scrimshaw |
comment:38
Great! In this doctest:
it looks like the category is not quite right yet. Apart from the confusion with "Join of ... finite-dimensional modules, vector spaces" that is unrelated to this ticket, shouldn't it be at least in the category of subobjects of modules? |
comment:39
The subobjects of modules is the join of subobjects of sets and vector spaces. We just do not have that specific category defined (hence the join of those two). Likewise for adding the finite dimensional axiom. I added this doctest to show that it does not automatically inherent the graded/filtered structure when the category passed does not include it. |
comment:40
Replying to @tscrim:
OK, that makes sense. |
comment:41
There are a number of trivial doctest failures that I will need to fix from the change in categories. However, some non-trivial ones from the invariant rings of Orlik-!Solomon/Terao algebras from the input-standardization change. I will have to look more closely. (The |
comment:43
I fixed the bug, which came down to not getting the correct type for the generator input to Most of the other doctests are trivial updating. I think there are some new doctests added since beta1 (which is what I am currently using to work on this branch) to update. I still need to do that, which I probably won't do until tomorrow. However, two notable changes:
|
comment:44
Replying to @tscrim:
Yes, I agree |
comment:46
Here are the fixes. |
comment:47
Bot was morally green using beta3 and passes all tests (other than known failures) run on my machine for beta4. |
comment:48
Looks good to me. Refinements and generalizations can be done in follow-up tickets. Thanks for this work! |
Reviewer: Matthias Koeppe |
comment:49
Thank you. I hope this also works for the application you have in mind Louis. If not or if you have other questions, feel free to email me directly to discuss things further. |
Changed branch from public/33321 to |
Currently, graded submodules do not inherit grading from its ambient:
We implement this by fulfilling the regressive category construction requirement for the
GradedModules().Subobjects()
category. We also do this for filtered modules (every submodule of a filtered module has a natural filtration inherited from the ambient module).Want: In the case where the generators are not from homogeneous but can made homogeneous by row reducing, it inherits its degrees. If the basis elements cannot be made homogeneous by row reduction, raise an error when trying to use
graded_submodule
. For example,CC: @mkoeppe @tscrim @jhpalmieri
Component: categories
Keywords: submodule
Author: Louis Ng, Travis Scrimshaw
Branch/Commit:
e5901b5
Reviewer: Matthias Koeppe
Issue created by migration from https://trac.sagemath.org/ticket/33321
The text was updated successfully, but these errors were encountered: