-
-
Notifications
You must be signed in to change notification settings - Fork 488
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
Implementation of finite Drinfeld modules #33713
Comments
This comment has been minimized.
This comment has been minimized.
comment:2
Some quick comments:
|
comment:4
Hi Xavier, thank you for your input. Ok for the methods instead of properties. For the parent/coercion, the paragraph Parents and Elements states I think it is quite nice, when in doubt about something, to be able to call Anyway, the most important thing is |
Commit: |
This comment has been minimized.
This comment has been minimized.
comment:6
|
Changed author from Antoine Leudière (antoine-leudiere) to Antoine Leudière |
comment:7
Il existe une hiérarchie : catégorie > parent > élément. Moralement, chaque parent est un ensemble. Par exemple, la catégorie "Groups", dans laquelle se placent les parents qui sont des groupes, ces parents ayant eux mêmes des éléments. Pour un parent donné, on peut demander sa catégorie par la méthode Peut-être qu'il n'est pas nécessaire de créer la catégorie "DrinfeldModules" maintenant. |
comment:8
Replying to @fchapoton:
Merci Frédéric ; c'est entendu, nous verrons plus tard. |
comment:9
Ah tiens, on parle français maintenant ici ? The difficulty, I think, with Drinfeld modules is that they exhibit as the same time aspects of elements and parents. IMO, the situation is quite similar to what we have for group representations, which can be viewed either as group morphisms |
comment:10
This is a good synthethis of the problem. It is true that most interesting That's why my initial idea was to make drinfeld modules children of some I plan on soon pushing a first draft of |
Branch pushed to git repo; I updated commit sha1. New commits:
|
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:13
Hi guys. I commited and pushed an elementary draft for You can try them now. The (incomplete and rudimentary) doctest gives you usage Any feedback would be greatly appreciated, so that I do not go in the wrong Summary:
|
Branch pushed to git repo; I updated commit sha1. New commits:
|
Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
|
comment:16
le linter (qui vérifie certains détails dans le code) est pas content:
|
comment:17
Thank you Frédéric for the reminder. I'll be sure to check that out. Replying to @fchapoton:
|
comment:19
Hello Antoine,
I think that this would improve the usage of this implementation for the end-user. Anyhow, I will be looking forward to this ticket and I will be glad to help you if you have any questions! |
comment:265
Hi, after a good night of sleep, I was thinking about the last example I brought up in my last comment and I think that I was a bit confused. In fact, it should be possible to consider such Drinfeld module even if the characteristic of the chosen Also, if a Drinfeld module defined over |
comment:267
Replying to Matthias Köppe:
Thanks for the tip; this looks like the way to go. Replying to David Ayotte:
Apologies for not making things clearer. The problem is the following. In this implementation, the base of a Drinfeld However, the class The definition of I tried to make the comment clearer, hope that's better. Replying to David Ayotte:
Replying to David Ayotte:
I think you are raising a crucial question. It shows that there is ambiguity in In my view, the ideal solution would be to instantiate a Drinfeld module As we saw in the early days of this ticket, this requires numerous lines of This means that a Drinfeld module whose coefficients lie in a finite field I amended the documentation to make it clearer. What do you think? |
comment:268
Replying to Antoine Leudière:
May I ask what are the advantages of considering a
Unless that I'm confused again, I think that by giving a morphism Do you think that the Drinfeld module constructor could parse the coefficients a little bit further by checking if they can be converted into an element of a finite field? For example:
|
comment:269
Replying to David Ayotte:
I propose to return Or, maybe even better, let |
comment:270
Replying to David Ayotte:
I think both points of view are very good, and I did not know about
Please let me know if I misunderstood something. I think coefficients of the Drinfeld module generator should always be seen as For example, if the Drinfeld module is defined using |
comment:271
No I don't think that you misunderstood something. In fact, I think you've made some good points. I was seeing this as a problem, but, looking back, I find that it is really just a matter of definition/convention. Therefore, I'm totally fine to leave it as it is. |
comment:272
Replying to David Ayotte:
Understood. Thank you for this discussion! |
Branch pushed to git repo; I updated commit sha1. New commits:
|
Dependencies: #34692 |
This comment has been minimized.
This comment has been minimized.
comment:276
After discussing this with Xavier Caruso, we suggest to remove the class Best, Antoine |
I just saw @kryzar give a talk on this at Sage Days 117, and I think it makes a lot more sense to have Drinfeld modules be a |
I think it's much better to just create a |
There's lots more that makes them sets. If you look at the majority of the code in I haven't read all of the long discussion on this ticket, but it looks like you already had an argument with Travis about this. From the point of view of convenience, I think it's reasonable to abuse Parents in this way. But I don't think we should change the documentation, and I don't think we should discourage others from using |
Yes, and I won ;) |
I have other projects to work on this week besides arguing about this, but I don't agree. |
Yes, that's the default before reading my argument. |
I still believe that the |
Edit (2022-09-27). A lot has changed since the original post. Here is a quick update.
What is a Drinfeld module?
Let
L
be a finite field extension of\Fq
and fix a ring morphism\gamma: \Fq[X] \to L
. Let\Ltau
be the ring of Ore polynomials with coefficients inL
and whose generator is the Frobenius endomorphism\tau: x \mapsto x^q
. A Drinfeld module over the morphism\gamma
\phi
is uniquely defined by an\Fq
-algebra morphism\Fq[X] \to \Ltau, P \mapsto \phi_P
, verifying\phi_X = \gamma(X) + a_1\tau + \dots + a_r\tau^r
andr > 0
.A morphism of Drinfeld modules
u: \phi \to \psi
is defined by an Ore polynomialu \in \Ltau
verifyingu \phi_X = \psi_X u
.Drinfeld modules and their morphisms are the object and morphisms of the category of Drinfeld modules defined over the morphism
\gamma
.A Drinfeld module induces an
\Fq[X]
-module law onL
, defined bya \star z = \phi_a(z)
, wherea \in \Fq[X]
andz \in L
. This is referred to as the Drinfeld module action induced by\phi
.Overview
We created:
DrinfeldModule(Parent, UniqueRepresentation)
;FiniteDrinfeldModule(DrinfeldModule)
;DrinfeldModuleAction(Action)
;DrinfeldModules(Category_over_base)
;DrinfeldModuleHomset(Homset)
;DrinfeldModuleMorphism(Morphism, UniqueRepresentation)
.Here is a short demo:
I would like to propose an implementation for finite Drinfeld modules. I
opened this ticket to discuss this idea and have feedback on implementation
directions, in order to comply with Sage's guidelines. Please feel free to express any doubt or criticism, or give ideas! I very much value the collaborative aspect of the SageMath community.
Motivation
A finite Drinfeld module is defined as follows. Let
Fq
be a finite fieldswith
q
elements, letL
be a finite extension ofFq
. Consider the\Fqbar
-linear endomorphism\tau: x \mapsto x^q
, and defineL\{\tau\}
asthe ring of Ore polynomials in
\tau
with coefficients inL
(see [ticket: 29629]). Also fix\omega
a non zero element ofL
. An\Fq
-Drinfeld module defined overL
is, by definition, an\Fq
-algebra morphism\phi: \Fq[X]\toL\{\tau\}
such that:\phi(X)
as constant coefficient\omega
,\phi(\Fq[X])
is not contained inL
.At the moment, there exists no such implementation in Sage.
Drinfeld modules are standard arithmetic tools in the theory of function
fields. See [Goss, Basic structures of function field arithmetic, 1998],
[Rosen, Number theory in function fields, 2002]. Good resources are also
[Gekeler, On finite Drinfeld modules, 1991], [Hayes, ''A brief introduction to
Drinfeld modules*, 1991] and [Caranay, Greenberg, Scheidler, *Computing modular
polynomials and isogenies of rank two Drinfeld modules'', 2020]. The author of
this ticket got interested in Drinfeld modules with isogeny-based cryptographic
applications in mind; see https://arxiv.org/abs/2203.06970.
I am a first-year PhD student working with
P.-J. Spaenlehauer and
E. Thomé.
Implementation details
I propose three classes:
FiniteDrinfeldModule
,FiniteDrinfeldModulesRankSet
and
FiniteDrinfeldModulesSet
.The
FiniteDrinfeldModule
classThis is the class for representing finite Drinfeld modules. It must be
instantiated with a polynomial ring and an Ore polynomial ring:
Here are the methods that I wish to add in the first version:
A crucial feature of finite Drinfeld module is that they endow the algebraic
closure
\Fqbar
with a structure of left-\Fq[X]
-module. I think the mostappropriate mechanism is to have a method
algebraic_closure_action
return aLeftModuleAction
(seehttps://doc.sagemath.org/html/en/reference/coercion/sage/structure/coerce_actions.html#sage.structure.coerce_actions.LeftModuleAction).
I am not yet sure if it is the best way to do it.
On top of this, the first version should be well doctested and include Sage's
own magic method (
_repr_
,_latex
, etc).In further versions, I wish to include:
Naturally, any input (especially negative) is more than welcome!
The
FiniteDrinfeldModulesRankSet
andFiniteDrinfeldModulesSet
classesTo comply with the coercion model (see
https://doc.sagemath.org/html/en/developer/coding_in_python.html#the-sage-coercion-model,
https://doc.sagemath.org/html/en/reference/coercion/index.html), any instance
of
FiniteDrinfeldModule
must have a parent. I was thinking about creating aclass
FiniteDrinfeldModulesRankSet
, representing the set of all finiteDrinfeld modules (with
FqX
,Ltau
andomega
fixed) with a prescribed rank.The class
FiniteDrinfeldModulesSet
is the same, except the rank can bearbitrary.
The details are not clear to me at this point.
Development environment
It is not clear to me yet in which environment I should work: tox virtual
environment, Docker ?.. Any advice is more than welcome.
Depends on #34692
CC: @xcaruso @mbombar @zimmermann6 @DavidAyotte @spaenlehauer
Component: number theory
Keywords: Drinfeld modules, Ore polynomials, Function fields
Author: Antoine Leudière
Branch/Commit: public/drinfeld_module @
6982ae0
Issue created by migration from https://trac.sagemath.org/ticket/33713
The text was updated successfully, but these errors were encountered: