Introduction to Drinfeld modular forms¶
This tutorial outlines the definitions, the notations, and the implementation of Drinfeld modular forms in SageMath. We assume that the reader has basic knowledge of classical modular forms, as we will often make analogies to this setting. We also assume little knowledge of Drinfeld modules; for this topic, the interested reader can consult the SageMath reference manual Drinfeld modules.
Preliminary notations
Let
Note
The above construction of
In SageMath, we create the rational function field by first creating a
univariate polynomial ring over
sage: A = GF(3)['T']
sage: K.<T> = Frac(A)
sage: K
Fraction Field of Univariate Polynomial Ring in T over Finite Field of size 3
sage: K.base() # returns A
Univariate Polynomial Ring in T over Finite Field of size 3
>>> from sage.all import *
>>> A = GF(Integer(3))['T']
>>> K = Frac(A, names=('T',)); (T,) = K._first_ngens(1)
>>> K
Fraction Field of Univariate Polynomial Ring in T over Finite Field of size 3
>>> K.base() # returns A
Univariate Polynomial Ring in T over Finite Field of size 3
Drinfeld period domain and action of
In the classical setting, the domain of any modular form is the complex
upper half plane
This space is a rigid analytic space and, after fixing an arbitrary
nonzero constant
We define a left action of
where
Universal Drinfeld module over
For any
An important result is that we have analytic uniformization which is the analogue of complex uniformization for elliptic curves. In our setting, elliptic curves are replaced by Drinfeld modules. In short, there exists a corresponding Drinfeld module
such that the exponential of
The Drinfeld module
where
In the rank two case, the expansion at infinity is of the form
where
A Drinfeld modular form of rank
such that
for all in and ; is holomorphic at infinity.
Without diving into the details, we mention that the second condition is
similar to the classical case. More specifically, in the rank two
situation, the expansion of
Lastly, we also mention that the integer
Note that all the above theory is covered in much greater details in part I of [BRP2018].
Ring of Drinfeld modular forms
Letting
to be the graded ring of all Drinfeld modular forms of type 0. The
graduation is given by the weight of a modular form. Similarly, we let
and
where
SageMath implementation
In SageMath, we model the ring of type 0 Drinfeld modular forms over
Hence, any ring element is seen as a formal algebraic combination of the
coefficient forms
To create the ring of type zero and rank DrinfeldModularForms
:
sage: A = GF(3)['T']
sage: K.<T> = Frac(A)
sage: M = DrinfeldModularForms(K, 3) # rank 3
sage: M
Ring of Drinfeld modular forms of rank 3 over Fraction Field of Univariate Polynomial Ring in T over Finite Field of size 3
>>> from sage.all import *
>>> A = GF(Integer(3))['T']
>>> K = Frac(A, names=('T',)); (T,) = K._first_ngens(1)
>>> M = DrinfeldModularForms(K, Integer(3)) # rank 3
>>> M
Ring of Drinfeld modular forms of rank 3 over Fraction Field of Univariate Polynomial Ring in T over Finite Field of size 3
To create the ring of arbitrary types modular forms, one passes the
keyword argument has_type=True
:
sage: M = DrinfeldModularForms(K, 4, has_type=True)
sage: M.gens()
[g1, g2, g3, h4]
sage: h4 = M.3
sage: h4.weight()
40
>>> from sage.all import *
>>> M = DrinfeldModularForms(K, Integer(4), has_type=True)
>>> M.gens()
[g1, g2, g3, h4]
>>> h4 = M.gen(3)
>>> h4.weight()
40
For more information about the functionalities of the implementation, one should consult the documentation of the main classes:
Parent class:
DrinfeldModularForms
Element class:
DrinfeldModularFormsElement
References
A good introduction to Drinfeld modular forms of rank 2, see Gekeler’s paper [Gek1988]. See also [BRP2018] for a detailed exposition of the arbitrary rank theory.