# Dickson Invariants¶

Dickson invariants $$Q_{n,s}\in \mathbb F_p[y_0,...,y_{n-1}]$$ are generators for the invariant ring of the full linear group $$GL(n,\mathbb F_p)$$, where $$s$$ ranges from $$0$$ to $$n$$, setting $$Q_{n,n} = 1$$, and $$p$$ is a prime.

NOTE:

We choose the indices such that $$\deg(Q_{n,s}) = p^n-p^s$$. There also occurs a different convention in the literature.

AUTHORS:

## THEORY:¶

According to [Wilkerson], the Dickson invariants $$Q_{n,s}$$ with $$s<n$$ can be defined as follows:

1. $$\prod_{v \in \mathbb F_p^n}(v+X) = X^{p^n} + \sum_{s=0}^{n-1} (-1)^{n-s} Q_{n,s} X^{p^s}$$

[Pham] provides the following recursion for $$Q_{n,s}$$:

• $$Q_{n,n} = 1$$
• $$Q_{n,0} = (V_1\cdot \dots \cdot V_n)^{p-1}$$
• $$Q_{n,s} = Q_{n-1,s}\cdot V_n^{p-1} + Q_{n-1,s-1}^p$$

where

1. $$V_k = \prod_{\lambda_i\in\mathbb Z_p} (\lambda_0y_0 + ... + \lambda_{k-2}y_{k-2} + y_{k-1})$$ for $$1\le k \le n$$

Apparently the definition of $$V_k$$ is a stumbling block in the recursion, as it is a product of $$p^{k-1}$$ polynomials. However, combining 1. and 2., one can express $$V_k$$ using Dickson invariants $$Q_{n,s}$$ of lower degrees. Namely, setting $$X = y_{k-1}$$ in 1., 2. becomes

• $$V_k = (y_{k-1}^{p^{k-1}} + \sum_{s=0}^{k-2} (-1)^{k-s-1}\cdot Q_{k-1,s} \cdot y_{k-1}^{p^{s}})$$ (in particular, $$V_1 = y_0$$).

The preceding formula, together with [Pham]’s recursion, allows for a convenient computation of the Dickson invariants: One computes $$Q_{n,s}$$ using $$Q_{n-1,s}$$, $$Q_{n-1,s-1}$$ and $$V_n$$, and one computes $$V_n$$ using $$Q_{n-1,0},...,Q_{n-1,n-2}$$.

class pGroupCohomology.dickson.DICKSON(p)

A factory for computing Dickson invariants.

Let $$p$$ be a prime number. Then, DICKSON(p) can compute the Dickson invariants over $$\mathbb F_p$$. See dickson for the theoretical background.

EXAMPLES:

sage: from pGroupCohomology.dickson import DICKSON
sage: D = DICKSON(3)
sage: d_3_1 = D(3,1)
sage: d_3_1
y0^18*y1^6 + y0^12*y1^12 + y0^6*y1^18 + y0^18*y1^4*y2^2 - y0^12*y1^10*y2^2 - y0^10*y1^12*y2^2 + y0^4*y1^18*y2^2 + y0^18*y1^2*y2^4 + y0^10*y1^10*y2^4 + y0^2*y1^18*y2^4 + y0^18*y2^6 + y0^12*y1^6*y2^6 + y0^6*y1^12*y2^6 + y1^18*y2^6 - y0^12*y1^2*y2^10 + y0^10*y1^4*y2^10 + y0^4*y1^10*y2^10 - y0^2*y1^12*y2^10 + y0^12*y2^12 - y0^10*y1^2*y2^12 + y0^6*y1^6*y2^12 - y0^2*y1^10*y2^12 + y1^12*y2^12 + y0^6*y2^18 + y0^4*y1^2*y2^18 + y0^2*y1^4*y2^18 + y1^6*y2^18
sage: d_3_1.parent()
Multivariate Polynomial Ring in y0, y1, y2 over Finite Field of size 3
sage: p_5_2 = D(5,2)
sage: p_5_2.degree() == 3^5-3^2
True
sage: len(p_5_2.coefficients())
8025

V(k, P)

Compute [Pham]’s $$V_k$$ polynomials.

See dickson for the theoretical background.

INPUT:

• k, an integer
• P, a polynomial ring over GF(p) with at least k generators.

EXAMPLES:

sage: from pGroupCohomology.dickson import DICKSON
sage: D3 = DICKSON(3)
sage: D5 = DICKSON(5)
sage: P = PolynomialRing(GF(3), 4, 'y')
sage: D3.V(3, P)
y0^6*y1^2*y2 + y0^4*y1^4*y2 + y0^2*y1^6*y2 - y0^6*y2^3 - y0^4*y1^2*y2^3 - y0^2*y1^4*y2^3 - y1^6*y2^3 + y2^9
sage: D3.V(5, P)
Traceback (most recent call last):
...
ValueError: The first argument must not exceed the number of generators of the second argument
sage: D5.V(3, P)
Traceback (most recent call last):
...
ValueError: The base ring of the second argument does not match Finite Field of size 5 over which self is defined