# 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

$\phi_T = T + g_1 \tau + \cdots + g_{r} \tau^r.$

Then, there exists a power series

$e_{\phi}(z) = z + \sum_{i = 1}^{\infty} \alpha_i z^{q^i}$

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

$\mathrm{log}_{\phi}(z) = z + \sum_{i = 1}^{\infty} \beta_i z^{q^i}$

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

$G_n(X) = X\left(G_{n-1}(X) \sum_{i = 1}^{\lfloor \mathrm{log}_q(n)\rfloor}\alpha_i G_{k - q^i}(X)\right)$

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)