Goss polynomials and exponentials#
Functions for computing Goss polynomials and exponentials of Drinfeld \(\mathbb{F}_q[T]\)-modules over fields of generic characteristics.
Exponentials and logarithms
Let \(\phi\) be a Drinfeld \(\mathbb{F}_q[T]\)-module of rank \(r\) over \(\mathbb{F}_q(T)\) defined by
Then, there exists a power series
such that the functional equation is satisfied \(e_{\phi}(az) = \phi_a(e_{\phi}(z))\). The power series \(e_{\phi}\) is called the exponential of \(\phi\).
The compositional inverse of \(e_{\phi}\) is denoted
and is called the logarithm of \(\phi\).
One can show the following recursive formulas:
\(\beta_k = \frac{1}{T - T^{q^k}}\sum_{i = 0}^{k - 1} \beta_i g_{k - i}^{q^i}\);
\(\alpha_k = - \sum_{i = 0}^{k - 1} \alpha_i \beta_{k - i}^{q^i}\).
Goss polynomials
Let \((\alpha_i)_{i\geq 0}\) the sequence representing the coefficients of the exponential of a Drinfeld module \(\phi\). The \(n\)-th Goss polynomial of \(\phi\) is defined by the recursive formula
where \(G_n(X) = X^n\) if \(n \leq q\).
The \(n\)-th Goss polynomial is monic of degree \(n\) and satisfies \(G_{pn}(X) = (G_n(X))^p\) if \(q = p^e\). Moreover, it satisfies the relation \(X^2G_n'(X) = nG_{n+1}(X)\).
AUTHORS:
David Ayotte (2022): initial version
- drinfeld_modular_forms.goss_polynomials.bracket(n, K)#
Return the element \([n] = T^{q^n} - T\) where \(T\) is the generator of the polynomial ring.
EXAMPLES:
sage: from drinfeld_modular_forms import bracket sage: A.<T> = GF(3)['T'] sage: bracket(1, A) T^3 + 2*T sage: bracket(2, A) T^9 + 2*T sage: bracket(0, A) Traceback (most recent call last): ... ValueError: the integer n (=0) must be postive.
- drinfeld_modular_forms.goss_polynomials.drinfeld_exponential(coeffs, name='z')#
Return the exponential of the Drinfeld module defined by the list
coeffs
.Warning: the method does not check if the list
coeffs
is valid.INPUT:
coeffs
(list) – a list of coefficients in a field of finite characteristic representing a Drinfeld \(\mathbb{F}_q[T]\)-module.name
(str, default:'z'
) – the name of the lazy power series ring.
OUTPUT: a lazy power series in
name
.EXAMPLES:
sage: from drinfeld_modular_forms import drinfeld_exponential sage: A = GF(3)['T'] sage: K.<T> = Frac(A) sage: coeffs = [T, K.one()] # Carlitz module sage: drinfeld_exponential(coeffs) z + ((1/(T^3+2*T))*z^3) + O(z^8)
sage: coeffs = [T, T^5 + T^2 + 2, 1/T, T^3] sage: drinfeld_exponential(coeffs) z + (((T^5+T^2+2)/(T^3+2*T))*z^3) + O(z^8)
- drinfeld_modular_forms.goss_polynomials.drinfeld_logarithm(coeffs, name='z')#
Return the logarithm of the Drinfeld module defined by the list
coeffs
.Warning: the method does not check if the list
coeffs
is valid.INPUT:
coeffs
(list) – a list of coefficients in a field of finite characteristic representing a Drinfeld \(\mathbb{F}_q[T]\)-module.name
(str, default:'z'
) – the name of the lazy power series ring.
OUTPUT: a lazy power series in
name
.EXAMPLES:
sage: from drinfeld_modular_forms import drinfeld_logarithm sage: A = GF(3)['T'] sage: K.<T> = Frac(A) sage: coeffs = [T, K.one()] # Carlitz module sage: drinfeld_logarithm(coeffs) z + ((2/(T^3+2*T))*z^3) + O(z^8)
sage: coeffs = [T, T^5 + T^2 + 2, 1/T, T^3] sage: drinfeld_logarithm(coeffs) z + (((2*T^5+2*T^2+1)/(T^3+2*T))*z^3) + O(z^8)
- drinfeld_modular_forms.goss_polynomials.goss_polynomial(coeffs, n, name='X')#
Return the \(n\)-th Goss polynomial of the Drinfeld module defined by the list
coeffs
.Warning: the method does not check if the list
coeffs
is valid.INPUT:
coeffs
(list) – a list of coefficients in a field of finite characteristic representing a Drinfeld \(\mathbb{F}_q[T]\)-module.n
(integer) – the index of the Goss polynomial.name
(str, default:'X'
) – the name of polynomial variable.
OUTPUT: a univariate polynomial in
name
.EXAMPLES:
sage: from drinfeld_modular_forms import goss_polynomial sage: A = GF(3)['T'] sage: K.<T> = Frac(A) sage: coeffs = [T, K.one()] # Carlitz module sage: goss_polynomial(coeffs, 1) X sage: goss_polynomial(coeffs, 2) X^2 sage: goss_polynomial(coeffs, 4) X^4 + (1/(T^3 + 2*T))*X^2 sage: goss_polynomial(coeffs, 5) X^5 + (2/(T^3 + 2*T))*X^3 sage: goss_polynomial(coeffs, 10) X^10 + (1/(T^3 + 2*T))*X^8 + (1/(T^6 + T^4 + T^2))*X^6 + (1/(T^9 + 2*T^3))*X^4 + (1/(T^18 + 2*T^12 + 2*T^10 + T^4))*X^2
sage: coeffs = [T, 1/(T^2 + 1), T^10 + T^5 + 1, T^2 + 2] sage: goss_polynomial(coeffs, 10) X^10 + (1/(T^5 + 2*T))*X^8 + (1/(T^10 + T^6 + T^2))*X^6 + (1/(T^15 + 2*T^3))*X^4 + ((T^25 + 2*T^24 + 2*T^22 + T^21 + 2*T^20 + 2*T^19 + T^18 + T^17 + 2*T^15 + T^14 + T^13 + 2*T^8 + T^7 + T^5 + 2*T^4 + T^3 + T^2 + 2*T + 2)/(T^24 + 2*T^23 + 2*T^21 + T^20 + T^19 + T^17 + T^16 + 2*T^12 + T^11 + T^9 + 2*T^8 + 2*T^7 + 2*T^5 + 2*T^4))*X^2
- drinfeld_modular_forms.goss_polynomials.lcm_of_monic_polynomials(n, polynomial_ring)#
Return the least common multiple of all monic polynomials of degree \(n\).
EXAMPLES:
sage: from drinfeld_modular_forms import lcm_of_monic_polynomials sage: A.<T> = GF(3)['T'] sage: lcm_of_monic_polynomials(1, A) T^3 + 2*T sage: lcm_of_monic_polynomials(2, A) T^12 + 2*T^10 + 2*T^4 + T^2 sage: lcm_of_monic_polynomials(3, A) T^39 + 2*T^37 + 2*T^31 + T^29 + 2*T^13 + T^11 + T^5 + 2*T^3
- drinfeld_modular_forms.goss_polynomials.product_of_monic_polynomials(n, K)#
Return the product of all monic polynomials of degree \(n\).
EXAMPLES:
sage: from drinfeld_modular_forms import product_of_monic_polynomials sage: A.<T> = GF(3)['T'] sage: product_of_monic_polynomials(0, A) 1 sage: product_of_monic_polynomials(1, A) T^3 + 2*T sage: f = product_of_monic_polynomials(2, A); f T^18 + 2*T^12 + 2*T^10 + T^4 sage: f.factor() T^4 * (T + 1)^4 * (T + 2)^4 * (T^2 + 1) * (T^2 + T + 2) * (T^2 + 2*T + 2)