-
-
Notifications
You must be signed in to change notification settings - Fork 482
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 the logarithm and the exponential of a Drinfeld module #35260
Conversation
It should be possible to implement the exponential of a Drinfeld module once issue #35261 is fixed. EDIT (2023-03-13): I found a workaround to the issue mentioned above. Essentially, it consists in computing explicitely the coefficients of the exponential using the the fact that it is the compositional inverse of the logarithm. |
Codecov ReportPatch coverage:
Additional details and impacted files@@ Coverage Diff @@
## develop #35260 +/- ##
===========================================
- Coverage 88.62% 88.60% -0.03%
===========================================
Files 2148 2146 -2
Lines 398653 397860 -793
===========================================
- Hits 353308 352512 -796
- Misses 45345 45348 +3
... and 67 files with indirect coverage changes Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. ☔ View full report in Codecov by Sentry. |
Great! I'm not an expert but I'd be happy to review the code! |
If you want a good grasp of these objects, I suggest that you read the chapter on the Carlitz module of Goss's book (chapter 3) and then section 4.6 for the general case. |
Yes it works now, thanks! Beforehand I used your workaround by using the option |
Ok, thanks for the feedback, I have to explain the parameter better then in the Dichtring. For now: it is any lower bound on the minimal degree (aka valuation) of the series. It is mostly optional, in many cases the code will figure it out by itself. But if it is known it does not hurt to supply it. |
Do I understand correctly that the exponential of a Drinfeld module is not a Drinfeld module (but a sequence of Drinfeld modules)? |
Can you see a relation to |
Yes and no. The exponential of a Drinfeld module is not a Drinfeld module, but it is not a sequence of Drinfeld module either. Let In particular a Drinfeld Suppose that However, I did explained the things a bit backward here, because given a Drinfeld module described by I hope this gives you a better understanding of what's going on here! |
It's a bit unknown, but I mean the power series version of an Ore polynomial. However, I think this would require a bit of work to implement in SageMath.
What I don't really like about using this form |
Co-authored-by: Xavier Caruso <[email protected]>
Co-authored-by: Xavier Caruso <[email protected]>
Yes! |
Am I mistaken that the only thing you'd need to do is to put |
Can you expand a bit on this idea? Do you mean to do something like this:
|
What I meant is to use the generic completion of a graded algebra with basis. However, this does not work out of the box, because Then you can just say
However, I am not sure whether this would be against some unwritten policy in sage, because the polynomial rings aren't in this category either. On the other hand, it would be very easy to provide a specialised implementation, for example by adapting |
src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py
Outdated
Show resolved
Hide resolved
src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py
Outdated
Show resolved
Hide resolved
They were my last two comments. |
Co-authored-by: Xavier Caruso <[email protected]>
Co-authored-by: Xavier Caruso <[email protected]>
All tests pass. @kryzar Do you agree for giving a positive review to this ticket? |
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.
Apologies for delaying my review.
I approve the changes. I commented on two things which I think could be better next time. Those are important, but it is also important not to delay this PR any longer.
src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py
Outdated
Show resolved
Hide resolved
I refactored |
Documentation preview for this PR is ready! 🎉 |
OK! |
📚 Description
The goal of this PR is to implement the logarithm and the exponential of a Drinfeld module.
Background material
Let$\phi:T \mapsto \gamma(T) + g_1 \tau + \cdots + g_r \tau^r$ with $g_r\neq 0$ be a rank $r$ Drinfeld module and let $\Lambda\subset \mathbb{C}_{\infty}$ be the associated rank $r$ lattice. Then recall that the exponential $e_{\phi}:\mathbb{C}_{\infty} \rightarrow \mathbb{C}_{\infty}$ of the Drinfeld module $\phi$ is defined by:
It can be viewed as a power series in$z$ :
Moreover, it satisfies the following functional equation:
The logarithm of$\phi$ is defined to be the compositional inverse of $e_{\phi}$ , denoted $\mathrm{log}_{\phi}$ . By applying $\mathrm{log}_{\phi}$ on both side of the functional equation, we obtain the following recurrence relation:
where$\beta_k$ is the $q^k$ -th coefficient of $\mathrm{log}_{\phi}$ and $\beta_0 = 1$ .
Examples
Ideas
The idea here is to first compute the logarithm of a Drinfeld module using lazy power series and then compute its compositional inverse to find its exponential.
📝 Checklist
⌛ Dependencies
Depends on #35026 because this PR implements Drinfeld modules.
CC: @xcaruso @ymusleh @kryzar