Dickson Invariants — "p_group_cohomology" 3.3.2 documentation

# 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:

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

2. \(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