Skip to content

Conversation

DavidAyotte
Copy link
Member

This PR aims to implement Drinfeld modular forms into SageMath. These special types of modular forms live in the function field theory and are linked with Drinfeld modules.

Definitions

Without going too much into the details, we give some definitions and insight of what is going on here. Let $K = \mathbb{F}_q(T)$ together with the $1/T$-adic norm and $A = \mathbb{F}_q[T]$. We define $K_{\infty} = \mathbb{F}_q((1/T))$ be the completion of $K$ and let $\mathbb{C}_{\infty}$ be the completion of an algebraic closure of $K_{\infty}$. In this specific setting, the Drinfeld period domain of rank $r$ is

$$ \Omega^r(\mathbb{C}_{\infty}) := \lbrace (w_1, \ldots, w_{r-1}, 1)\in \mathbb{C}_{\infty}^r : \text{the }w_i \text{'s are }K_{\infty}\text{-linearly independant} \rbrace. $$

(this period domain is to be seen as the analogue of the complex upper half plane)

So, for each $w = (w_1, \ldots, w_{r-1}, 1)\in \Omega^r(\mathbb{C}_{\infty})$, we have an associated $A$-lattice (i.e. a discrete projective $A$-module of rank r): $\Lambda_w = A w_1 + \ldots A w_{r-1} + A$.

The analytic theory of Drinfeld modules tells us that, for each such $w$, there exist a Drinfeld module

$$ \phi^w_T : T \mapsto T + g_1(w) \tau + \ldots + g_{r-1}(w) \tau^{r-1} + g_r(w) \tau^r $$

associated with this lattice. This association is what we call the universal Drinfeld module over $\Omega^r(\mathbb{C}_{\infty})$. We see the coefficients as functions $g_i : \Omega^r(\mathbb{C}_{\infty}) \rightarrow \mathbb{C}_{\infty}$. These functions satisfy modular transformation property under the action of the group $\mathrm{GL}_r(A)$:

$$ g_i(\gamma(w)) = j(\gamma, w)^i g_i(w) $$

where $j$ is some automorphic factor.

The ring of Drinfeld modular forms for $\mathrm{GL}_r(A)$ is

$$ \mathcal{M}_{\bullet} = \mathbb{C}_{\infty}[g_1, \ldots g_{r-1}, g_r]. $$

Implementations details

In this implementation, we create a new parent DrinfeldModularForms which represents the polynomial ring $K[g_1,\ldots, g_{r-1}, g_r]$ and a new element class DrinfeldModularFormsElement. Then, for arbitrary rank, we only see a Drinfeld modular form symbolically as a multivariate polynomial in $g_1, \ldots, g_r$, the coefficients forms. In the special case when the rank is two, we aim to implement algorithms for computing the expansion at infinity of any Drinfeld modular forms. These expansions are analogues of the usual $q$-expansion of classcial modular forms. This will be achieved via the Lopez-Petrov nonstandard expansion theory.

We note that this implementation was initially done as a pip-installable package:

https://davidayotte.github.io/drinfeld_modular_forms

This work has been an ongoing project for almost two years now and since the addition of Drinfeld modules in SageMath, the author has seen an interest in the implementation of Drinfeld modular forms to SageMath. In the rank two case, the ability to compute their expansion at infinity shows some interesting computational properties of these objects.

We are aware that this is a quite specialized topic, so we aim to make this implementation as convivial as possible for the user and well documented. Any comments and suggestions are welcome!

CC: @xcaruso @kryzar @ymusleh

📝 Checklist

  • The title is concise, informative, and self-explanatory.
  • The description explains in detail what this PR is about.
  • I have linked a relevant issue or discussion.
  • I have created tests covering the changes.
  • I have updated the documentation accordingly.

⌛ Dependencies

@github-actions
Copy link

github-actions bot commented Oct 25, 2023

Documentation preview for this PR (built with commit 01fd19c; changes) is ready! 🎉
This preview will update shortly after each push to this PR.

@xcaruso
Copy link
Contributor

xcaruso commented Oct 26, 2023

Great addition, thanks David!

I noticed that you added special classes for Drinfeld modular forms of rank 2 but those are basically empty. Is it normal?

@DavidAyotte
Copy link
Member Author

I noticed that you added special classes for Drinfeld modular forms of rank 2 but those are basically empty. Is it normal?

Yes these are currently just placeholder, but I plan to implement them in this PR. If you want to get familiar with the expansion theory I'm going to implement, I recommend reading chapter 7 of my thesis and/or the associated reference by Petrov and Lopez:

I was recently thinking about some implementation details and wondering whether or not it would be desirable to implement a specific class for the $A$-expansion, but in the end, I don't think I will go this way because I'm not sure if this will really add something.

@xcaruso
Copy link
Contributor

xcaruso commented Oct 27, 2023

I suggest actually to split your contribution in two separate PR. It would be easier for review.

@DavidAyotte
Copy link
Member Author

I suggest actually to split your contribution in two separate PR. It would be easier for review.

OK, that's a good advice, I will do that. In this current PR I will only implement arbitrary ranks Drinfeld modular forms and in a seperate PR I will implement rank 2 specific stuff.

@DavidAyotte DavidAyotte marked this pull request as ready for review November 6, 2023 19:25
@DavidAyotte
Copy link
Member Author

DavidAyotte commented May 12, 2024

The CI tests are all green now! Don't hesitate if you have more comments (I prefer to fix thing right now instead of later).

@kryzar
Copy link
Contributor

kryzar commented May 15, 2024

If Xavier is happy with the changes, then so am I (I had already given green flag previously).

Copy link
Contributor

@xcaruso xcaruso left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few additional (or not) small comments.

@DavidAyotte
Copy link
Member Author

I'm not sure I understand why all the following doctests run fail:

sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/groups/misc_gps/argument_groups.py  # 6 doctests failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/interfaces/gp.py  # 1 doctest failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/libs/pari/tests.py  # 2 doctests failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/rings/lazy_series.py  # 2 doctests failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/rings/lazy_series_ring.py  # 2 doctests failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/rings/padics/padic_generic_element.pyx  # 2 doctests failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/rings/qqbar.py  # 1 doctest failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/stats/basic_stats.py  # 2 doctests failed
sage -t --long --random-seed=286735480429121101562228604801325644303 src/sage/stats/distributions/discrete_gaussian_lattice.py  # Timed out

@xcaruso
Copy link
Contributor

xcaruso commented May 26, 2024

I'm not sure but I think they are all unrelated to this PR.
So, I give a positive review.

@DavidAyotte
Copy link
Member Author

Yay! Thank you @xcaruso and @kryzar for your reviews!

vbraun pushed a commit to vbraun/sage that referenced this pull request May 27, 2024
sagemathgh-36538: Implement Drinfeld modular forms
    
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes sagemath#1234" use "Introduce new method to
calculate 1+1"
-->
<!-- Describe your changes here in detail -->

<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes sagemath#12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->

This PR aims to implement Drinfeld modular forms into SageMath. These
special types of modular forms live in the function field theory and are
linked with Drinfeld modules.

#### Definitions

Without going too much into the details, we give some definitions and
insight of what is going on here. Let $K = \mathbb{F}_q(T)$ together
with the $1/T$-adic norm and $A = \mathbb{F}_q[T]$. We define
$K\_{\infty} = \mathbb{F}_q((1/T))$ be the completion of $K$ and let
$\mathbb{C}\_{\infty}$ be the completion of an algebraic closure of
$K\_{\infty}$. In this specific setting, the *Drinfeld period domain* of
rank $r$ is

$$
\Omega^r(\mathbb{C}\_{\infty}) := \lbrace (w_1, \ldots, w_{r-1}, 1)\in
\mathbb{C}\_{\infty}^r : \text{the }w_i \text{'s are
}K\_{\infty}\text{-linearly independant} \rbrace.
$$

(this period domain is to be seen as the analogue of the complex upper
half plane)

So, for each $w = (w_1, \ldots, w_{r-1}, 1)\in
\Omega^r(\mathbb{C}\_{\infty})$, we have an associated $A$-lattice (i.e.
a discrete projective $A$-module of rank r): $\Lambda_w = A w_1 + \ldots
A w_{r-1} + A$.

The analytic theory of Drinfeld modules tells us that, for each such
$w$, there exist a Drinfeld module

$$
\phi^w_T : T \mapsto T + g\_1(w) \tau + \ldots + g\_{r-1}(w) \tau^{r-1}
+ g\_r(w) \tau^r
$$

associated with this lattice. This association is what we call the
universal Drinfeld module over $\Omega^r(\mathbb{C}\_{\infty})$. We see
the coefficients as functions $g_i : \Omega^r(\mathbb{C}\_{\infty})
\rightarrow \mathbb{C}\_{\infty}$. These functions satisfy modular
transformation property under the action of the group
$\mathrm{GL}_r(A)$:

$$
g_i(\gamma(w)) = j(\gamma, w)^i g_i(w)
$$

where $j$ is some automorphic factor.

The ring of Drinfeld modular forms for $\mathrm{GL}_r(A)$ is

$$
\mathcal{M}\_{\bullet} = \mathbb{C}\_{\infty}[g_1, \ldots g_{r-1}, g_r].
$$

#### Implementations details

In this implementation, we create a new parent `DrinfeldModularForms`
which represents the polynomial ring $K[g_1,\ldots, g_{r-1}, g_r]$ and a
new element class `DrinfeldModularFormsElement`. Then, for arbitrary
rank, we only see a Drinfeld modular form symbolically as a multivariate
polynomial in $g_1, \ldots, g_r$, the coefficients forms. In the special
case when the rank is two, we aim to implement algorithms for computing
the expansion at infinity of any Drinfeld modular forms. These
expansions are analogues of the usual $q$-expansion of classcial modular
forms. This will be achieved via the Lopez-Petrov nonstandard expansion
theory.

We note that this implementation was initially done as a pip-installable
package:

https://davidayotte.github.io/drinfeld_modular_forms

This work has been an ongoing project for almost two years now and since
the addition of Drinfeld modules in SageMath, the author has seen an
interest in the implementation of Drinfeld modular forms to SageMath. In
the rank two case, the ability to compute their expansion at infinity
shows some interesting computational properties of these objects.

We are aware that this is a quite specialized topic, so we aim to make
this implementation as convivial as possible for the user and well
documented. Any comments and suggestions are welcome!

CC: @xcaruso @kryzar @ymusleh

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on
- sagemath#12345: short description why this is a dependency
- sagemath#34567: ...
-->

<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
    
URL: sagemath#36538
Reported by: David Ayotte
Reviewer(s): Antoine Leudière, David Ayotte, Xavier Caruso
@kryzar
Copy link
Contributor

kryzar commented May 27, 2024

Yay! Thank you @xcaruso and @kryzar for your reviews!

You did the hard work. Merci !

vbraun pushed a commit to vbraun/sage that referenced this pull request May 29, 2024
sagemathgh-36538: Implement Drinfeld modular forms
    
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes sagemath#1234" use "Introduce new method to
calculate 1+1"
-->
<!-- Describe your changes here in detail -->

<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes sagemath#12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->

This PR aims to implement Drinfeld modular forms into SageMath. These
special types of modular forms live in the function field theory and are
linked with Drinfeld modules.

#### Definitions

Without going too much into the details, we give some definitions and
insight of what is going on here. Let $K = \mathbb{F}_q(T)$ together
with the $1/T$-adic norm and $A = \mathbb{F}_q[T]$. We define
$K\_{\infty} = \mathbb{F}_q((1/T))$ be the completion of $K$ and let
$\mathbb{C}\_{\infty}$ be the completion of an algebraic closure of
$K\_{\infty}$. In this specific setting, the *Drinfeld period domain* of
rank $r$ is

$$
\Omega^r(\mathbb{C}\_{\infty}) := \lbrace (w_1, \ldots, w_{r-1}, 1)\in
\mathbb{C}\_{\infty}^r : \text{the }w_i \text{'s are
}K\_{\infty}\text{-linearly independant} \rbrace.
$$

(this period domain is to be seen as the analogue of the complex upper
half plane)

So, for each $w = (w_1, \ldots, w_{r-1}, 1)\in
\Omega^r(\mathbb{C}\_{\infty})$, we have an associated $A$-lattice (i.e.
a discrete projective $A$-module of rank r): $\Lambda_w = A w_1 + \ldots
A w_{r-1} + A$.

The analytic theory of Drinfeld modules tells us that, for each such
$w$, there exist a Drinfeld module

$$
\phi^w_T : T \mapsto T + g\_1(w) \tau + \ldots + g\_{r-1}(w) \tau^{r-1}
+ g\_r(w) \tau^r
$$

associated with this lattice. This association is what we call the
universal Drinfeld module over $\Omega^r(\mathbb{C}\_{\infty})$. We see
the coefficients as functions $g_i : \Omega^r(\mathbb{C}\_{\infty})
\rightarrow \mathbb{C}\_{\infty}$. These functions satisfy modular
transformation property under the action of the group
$\mathrm{GL}_r(A)$:

$$
g_i(\gamma(w)) = j(\gamma, w)^i g_i(w)
$$

where $j$ is some automorphic factor.

The ring of Drinfeld modular forms for $\mathrm{GL}_r(A)$ is

$$
\mathcal{M}\_{\bullet} = \mathbb{C}\_{\infty}[g_1, \ldots g_{r-1}, g_r].
$$

#### Implementations details

In this implementation, we create a new parent `DrinfeldModularForms`
which represents the polynomial ring $K[g_1,\ldots, g_{r-1}, g_r]$ and a
new element class `DrinfeldModularFormsElement`. Then, for arbitrary
rank, we only see a Drinfeld modular form symbolically as a multivariate
polynomial in $g_1, \ldots, g_r$, the coefficients forms. In the special
case when the rank is two, we aim to implement algorithms for computing
the expansion at infinity of any Drinfeld modular forms. These
expansions are analogues of the usual $q$-expansion of classcial modular
forms. This will be achieved via the Lopez-Petrov nonstandard expansion
theory.

We note that this implementation was initially done as a pip-installable
package:

https://davidayotte.github.io/drinfeld_modular_forms

This work has been an ongoing project for almost two years now and since
the addition of Drinfeld modules in SageMath, the author has seen an
interest in the implementation of Drinfeld modular forms to SageMath. In
the rank two case, the ability to compute their expansion at infinity
shows some interesting computational properties of these objects.

We are aware that this is a quite specialized topic, so we aim to make
this implementation as convivial as possible for the user and well
documented. Any comments and suggestions are welcome!

CC: @xcaruso @kryzar @ymusleh

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on
- sagemath#12345: short description why this is a dependency
- sagemath#34567: ...
-->

<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
    
URL: sagemath#36538
Reported by: David Ayotte
Reviewer(s): Antoine Leudière, David Ayotte, Xavier Caruso
@vbraun vbraun merged commit 515e272 into sagemath:develop Jun 1, 2024
@kryzar
Copy link
Contributor

kryzar commented Jun 3, 2024

Yeaaaah, congrats @DavidAyotte!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants