-
-
Notifications
You must be signed in to change notification settings - Fork 559
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
A class for ring extensions #21413
Comments
Commit: |
Branch pushed to git repo; I updated commit sha1. New commits:
|
Branch pushed to git repo; I updated commit sha1. New commits:
|
This comment has been minimized.
This comment has been minimized.
comment:6
Wow, this is great Xavier! Sorry for not being more active before - I promise to look more at it tomorrow. I'm wondering whether it's a good idea to merge the "framework" before the first concrete instantiation? I.e. whether we should try to get the field-extension-algebra finished before considering this as mature? (I know you have bad experience with too large patches, but if we don't put too much stuff in the field extension as a first approximation, perhaps it's ok). Best, |
comment:7
In the following, the extension is A = L/K with L and K rings. Right now this What I had in mind after SD75 is that In that world, Other remarks that I got by looking at the code. Let's see where the above
Best, |
comment:8
Replying to @johanrosenkilde:
Maybe I misunderstand your proposal but I really think that a ring extension should be a parent because we really want to take advantage of the coercion stuff.
It is definitely.
I agree. But all of this has to be implemented in subclasses. For now, I just wrote a very general class which is supposed to deal with all algebras (possibly not free, not finite...) so it is of course difficult to implement concrete methods. But these methods clearly exist. Here is a far-from-exhaustive list: If you insist, I can put these methods in the general class and let them raise
The generator of an algebra is a well-defined mathematical notion: the algebra L/K is generated by x if
Well there does exist algebras which are not free. So the
Suppose that we create an algebra L/K with a defining morphism phi : K -> L which is not a coercion map. If K coerces to L/K through phi and L/K coerces to L, then we would derive that K coerces to L through phi. Such a situation really occurs in every day life (at least for people working in algebraic geometry). For instance, if K has characteristic p, these people often consider K as an algebra over itself through the Frobenius morphism (which is definitely not a coercion map).
Ok for both. I'll try to fix this.
It is not my fault :-). This method is needed by the coercion model.
Ok. I'll do it.
Sure, it is something we normally do... just as composing ring homomorphisms.
Ok for changing. I'm also not completed satisfied with these names. Do you have some propositions?
I definitely agree that it is not perfect, but I have not found something better :-).
It is one reason why I'm sure that we should inherit from
Ok. Xavier |
comment:9
Thanks for your careful explanations. I'm learning a lot here. Replying to @xcaruso:
OK, so "coercion stuff" is an argument in favour of a Parent. I guess you mean that many objects will magically coerce to the Do-What-I-Mean behaviour on methods. But if a weird/surprising behaviour follows from forcing it into the category framework, perhaps that's an argument against it. At least having a
OK, that makes sense. I can see why the general class would have very weak functionality then.
Perhaps that's not a bad idea: it's nicer that any algebra will have the methods you expect and then throw The doc-test can be on a more concrete class that does implement the method. If none exist for this ticket, the doc-test will just be one demonstrating the
Hmm, but couldn't there be multiple generators? E.g.
OK, argument accepted. But I think this kind of stuff reinforces that we should try to design the first concrete
Yikes! So we must disallow coercion from It seems to me that this is really dangerous territory - but perhaps Perhaps
Eew, yet another symptom that we're perhaps abusing the current hierarchy. Why doesn't
So it is something where established mathematical notation supports this
We should probably first figure out what to do hierarchy-wise. But perhaps
What do you mean "is the least we can do"? Why is this an argument to make left and right actions different? Couldn't you implement the same left/right action, namely mapping Best, |
comment:10
Replying to @johanrosenkilde:
OK. But, on the other hand, the list of possible methods is possibly quite long. Having a parent with 90% not implemented methods is also not that nice.
Yes, of course. For traditional rings, the current behaviour of
Is that normal?
I just do not want this ticket to become too big.
(First, let me emphasize that this issue only occurs when the defining morphism is not a coercion map.) Currently I agree that it is really confusing but the same confusion appears exactly in the same way in the "theory". So I assume that people who really wants to work with algebras whose defining morphisms are not coercion maps are very aware of this source of confusion! Why left action and not right action? Because usually scalars act on the left (for instance, we write Probably the best solution would be to have a completely different operator for the action of the base through the defining morphism. But which one? Is it a good idea to override the dot operator?
I think (but I'm not quite sure) that it is used when no coercing map is set from
I think that sometimes mathematicians may want to invoke Actually we probably prefer to use the "base_change" in that case. So maybe we can implement two methods: first
When we want to regard L as a K-algebra, a basic thing we want to have is the action of K on L defining the algebra. |
comment:11
I just found this ticket and I only have a vague idea about what this ticket does. I am curious if the present ticket would solve or at least help one solve each of the following problems (of mine)? I believe that these cases are not supported by Sage yet.
|
comment:12
Replying to @kwankyu:
That currently works fine, just try it. If you want to go from If you want to express
That also currently works fine. I just tested with
That seems more tricky to do. Note that it can easily be split into the composition of two homomorphisms:
The eval homomorphism can be created in the current Sage, but I don't know how to conveniently create Best, |
comment:13
Replying to @johanrosenkilde:
Nice. Good luck! |
comment:14
The following reference might be useful for the design of the class: Lattices of Compatibly Embedded Finite Fields - WIEB BOSMA, JOHN CANNON AND ALLAN STEEL 1997 as various extensions should be compatible to each other... |
Changed branch from u/caruso/21413/class_ring_extension to u/defeo/21413/class_ring_extension |
comment:16
Doctest failures:
New commits:
|
comment:17
Had you guys notice that there is this interface in Sage, which returns a mostly empty shell:
|
comment:18
Replying to @defeo:
In what sense would it be relevant for this ticket? |
comment:19
Hello, as you might have guessed, I'm trying to resurrect this ticket. My biggest concern is the same as Johan's: I find
However I think the fix is simple: explicit is better than implicit, get rid of the coercion
It could be useful if the left action was represented by an operator other than Or maybe just have the right action be the same as the left action, which apparently you already did. |
Branch pushed to git repo; I updated commit sha1. New commits:
|
Changed reviewer from David Roe to David Roe, Frédéric Chapoton |
comment:108
ok, let it be |
comment:109
Thanks. BTW, do you know why some patchbots report building errors? |
comment:110
I'm getting a lot of failures like this on 32-bit
|
comment:111
using id(self) for the hash may be a bad idea |
comment:112
We can certainly fix that problem, but neither Xavier nor I have access to a 32-bit machine, so I'm not sure what other problems might arise. |
comment:113
Replying to @roed314:
just to mention that the access is now available :-) |
comment:115
I'm trying with the function |
comment:117
did you check on a 32-bit machine ? If yes, you can set to positive on my name |
comment:118
I just ran |
Changed branch from u/caruso/21413/class_ring_extension to |
comment:120
Champagne! |
Changed commit from |
Sage provides a rich framework for dealing with all classical algebraic structures: rings, fields, algebras, etc.
Nevertheless, given (for instance) two fields K and L with K \subset L, it is not possible to build the extension L/K as a Sage object. However one can easily imagine methods related to this extension (e.g.
degree
,discriminant
,normal_basis
,decompose_on_basis
, etc.)With Bruno Grenet, Johan Rosenkilde and Luca De Feo, we raised this issue at Sage Days 75. A summary of our discussion is available
here.
This ticket implements a generic class for ring extensions, and more specific classes for finite free ring extensions (as finite degree field extensions).
Below is a small tutorial extracted from the documentation:
Depends on #26105
CC: @johanrosenkilde @defeo @bgrenet @nthiery @simon-king-jena @saraedum
Component: algebra
Keywords: sd75, padicBordeaux
Author: Xavier Caruso
Branch:
c43507c
Reviewer: David Roe, Frédéric Chapoton
Issue created by migration from https://trac.sagemath.org/ticket/21413
The text was updated successfully, but these errors were encountered: