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:
Simon King <simon.king@uni-jena.de>
THEORY:¶
According to [Wilkerson], the Dickson invariants \(Q_{n,s}\) with \(s<n\) can be defined as follows:
\(\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
\(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\). Seedickson
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 integerP
, a polynomial ring overGF(p)
with at leastk
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
-