-
Notifications
You must be signed in to change notification settings - Fork 231
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
LeftIdeal (take two) #3020
base: development
Are you sure you want to change the base?
LeftIdeal (take two) #3020
Conversation
I still don't understand why we care about left ideals (or right ideals, for that matter), cf my comment in the other PR. |
In the ideal world (pun intended), one may not care about ideals. Left, right, or two-sided --- all of them are modules (as we know and as you stressed). At some future point, once all kinds of modules are present --- left, right, two-sided, perhaps ones with multiple left/right actions --- one can come back to the discussion of not having ideals (or having all of the ideal types derived from module types). |
I don't understand. Which core GB functionality is implemented for left ideals specifically, or even ideals for that matter? I think the only GB related methods used in With that in mind, an alternative way to "correct the latter" could be to directly define left modules (for now only modules that are the image of a 1-by-n matrix), add a new subtype called |
M2/Macaulay2/m2/matrix1.m2
Outdated
if numRows f === 1 | ||
then f % gb I | ||
else | ||
error "not implemented (defined for two-sided ideals; see `code (symbol %, Matrix, Ideal)`)" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is a comment in the two-sided code that says:
we should have an engine routine to reduce each entry of a matrix modulo an ideal, to make this faster
If RingElement % LeftIdeal
is defined, why not just run that on every element? Or better yet, like this:
Matrix % LeftIdeal := Matrix => ((f,I) -> map(target f, source f, apply(entries f, row -> matrix row % gb I))) @@ samering
@d-torrance , I'm having problems reproducing the errors (which relate to RInterface) in the builds. I'm using |
That bug was fixed in #3034, so merging/rebasing onto |
f3e4276
to
7ebb872
Compare
…, but not for BernsteinSato yet
for backward compatibility; Matrix % LeftIdeal convenience implementation (no good meaning for the output as a map of one-sided Modules)
7ebb872
to
e181bf0
Compare
My (possibly biased) summary of the discussion we've had. The main concern is the fact that people who only care about commutative algebra (which is probably 95% of users at the moment) could be confused by the lack of methods for |
Oh, I couldn't attend the meeting, but I don't think this is ready to be merged either. |
I agree with Paul's assessment. |
Then mark it as a draft. |
(I think I converted it back to "Draft".)
makes @mahrud, yesterday we talked about this as a general issue: my example, similar to |
I thought a little bit about how to make i1 : X = new Type of HashTable;
i2 : Y = new Type of X;
i3 : f = method();
i4 : f(X, X) := (x,y) -> 1;
i5 : f(X, Y) := (x,y) -> 2;
i6 : f(Y, X) := (x,y) -> 3;
i7 : f(Y, Y) := (x,y) -> 4;
i8 : unique \\ join \\ toSequence \\ methods \ ancestors Y
o8 = {0 => (f, X, Y) }
{1 => (f, Y, X) }
{2 => (f, Y, Y) }
{3 => (f, X, X) }
{4 => (#, HashTable) }
... Ideally, we'd remove |
|
At least in Dummit & Foote (where I first learned these things from), left ideal and right ideal are more general than ideal:
Of course, if we want the inheritance in Macaulay2 to work the same way as the mathematical definitions, we have some issues:
|
Module. What is the reason for differentiating them? |
The parent of LeftIdeal would be LeftModule, and the parent of RightIdeal would be |
What would their parents be? Presumably |
The parents of LeftModule and RightModule would be ImmutableType. If we introduce BiModule, then that would inherit from LeftModule and RightModule. |
We don't have "QuotientModule" and "FreeModule" and "ImageModule" and "SubquotientModule". We just have "Module". I'll explain more on Zulip soon. |
Yes, but we have to decide whether Module means left module or right module, and convert to LeftModule or RightModule. We can always introduce BiModule if we wish. |
No, it can mean both! For the same reason that |
No, it can't. Consider the method for |
Either return an error or only define the method on left or right modules. |
If |
I guess we could have an optional argument LeftModules, or RightModules (or something similar). |
It would return a module with both left and right R-module structures. |
The problem is that it eats either the left module structure, or the right module structure, leaving only the other (in the non-commutative case). |
I don't understand this comment. I presume you meant the left and right actions on M and N are the same, in which case the left Hom and right Hom should be identical, no? Otherwise, like I said before, don't define The point is that methods installed on an abstract module type are exactly those that don't care whether it's a left or right module. If Hom cares, then it should only be defined on the appropriate specializations. |
So is the idea that Module is the (possibly abstract) class of all modules, LeftModule, RightModule, and perhaps Bimodule, all inherit from Module (maybe Bimodule inherits from both LeftModule, RightModule, maybe not)? We would need Hom(LeftModule, LeftModule), Hom(RightModule, RightModule), and various versions with Bimodule. Actually, if the arguments are 2 bimodules, we would need a way of dis-ambiguating which Hom we wish to consider. |
Yes, exactly. |
(This is a fresh take on #2912)
Ideal
is a type ofLeftIdeal
now.LeftIdeal
;ideal
constructs an ideal typical for the given ring: e.g.,LeftIdeal
for a Weyl algebra andIdeal
for all other algebras: e.g., polynomial ring, skew-commutative ring,AssociativeAlgebra
, etc.Current state:
Ideal
toLeftIdeal
; currently#methods Ideal
is 223 and# methods LeftIdeal
is 66needsPackage "BernsteinSato"
)#methods Ideal
is 271 and# methods LeftIdeal
is 151Whoever is interested in noncommutative things, please look at this.