|
Let R=K[V]G be the invariant ring of the group G over the field K and
suppose the degree of G is n. A set of fundamental invariants
for R is a generating set of R as an algebra over K.
Al: MonStgElt Default: "King"
MaxDegree: RngIntElt Default: 0
Construct fundamental invariants for the invariant ring R=K[V]G
as a sorted sequence (with increasing degrees) of polynomials of R.
As of V2.15, if R is non-modular, then by default the fundamental
invariants are computed via the algorithm of S.King [Kin07]; the
alternative algorithm (always used in the modular case), which computes
the fundamental invariants by minimalizing the union of the primary and
secondary invariants of R, may be selected by setting the parameter
Al to "MinPrimSec".
If the fundamental invariants are known to be bounded by degree d,
then the parameter MaxDegree may be set to d to assist the
King algorithm with an early stopping condition in the non-modular
case.
We construct fundamental invariants for the invariant ring R of the
group G over Q, where G is permutation group consisting of two parallel
copies of S 3 in degree 6. Notice that the sequence of fundamental
invariants is shorter and simpler than the sequence consisting of the
primary invariants combined with the secondary invariants.
> K := RationalField();
> G := PermutationGroup<6 | (1,2,3)(4,5,6), (1,2)(4,5)>;
> R := InvariantRing(G, K);
> PrimaryInvariants(R);
[
x1 + x2 + x3,
x4 + x5 + x6,
x1^2 + x2^2 + x3^2,
x4^2 + x5^2 + x6^2,
x1^3 + x2^3 + x3^3,
x4^3 + x5^3 + x6^3
]
> SecondaryInvariants(R);
[
1,
x1*x4 + x2*x5 + x3*x6,
x1^2*x4 + x2^2*x5 + x3^2*x6,
x1*x4^2 + x2*x5^2 + x3*x6^2,
x1^2*x4^2 + 2*x1*x2*x4*x5 + 2*x1*x3*x4*x6 + x2^2*x5^2 + 2*x2*x3*x5*x6 +
x3^2*x6^2,
x1^3*x4^3 + x1^2*x2*x4*x5^2 + x1^2*x3*x4*x6^2 + x1*x2^2*x4^2*x5 +
x1*x3^2*x4^2*x6 + x2^3*x5^3 + x2^2*x3*x5*x6^2 + x2*x3^2*x5^2*x6 +
x3^3*x6^3
]
> FundamentalInvariants(R);
[
x1 + x2 + x3,
x4 + x5 + x6,
x1^2 + x2^2 + x3^2,
x1*x4 + x2*x5 + x3*x6,
x4^2 + x5^2 + x6^2,
x1^3 + x2^3 + x3^3,
x1^2*x4 + x2^2*x5 + x3^2*x6,
x1*x4^2 + x2*x5^2 + x3*x6^2,
x4^3 + x5^3 + x6^3
]
As in [Kin07], we compute fundamental invariants for the invariant
rings for all transitive groups of degree 7 (in characteristic zero).
For each group, we print its order and a summary of the degrees (where
the i-th element of the sequence gives the number of fundamental
invariants of degree i).
> function deg_summary(B)
> degs := [TotalDegree(f): f in B];
> return [#[j: j in degs | j eq d]: d in [1 .. Max(degs)]];
> end function;
>
> d := 7;
> time for i := 1 to NumberOfTransitiveGroups(d) do
> G := TransitiveGroup(d, i);
> R := InvariantRing(G, RationalField());
> F := FundamentalInvariants(R);
> printf "%o: Order: %o, Degrees: %o n", i, #G, deg_summary(F);
> end for;
1: Order: 7, Degrees: [ 1, 3, 8, 12, 12, 6, 6 ]
2: Order: 14, Degrees: [ 1, 3, 4, 6, 6, 3, 3 ]
3: Order: 21, Degrees: [ 1, 1, 4, 5, 8, 8, 6 ]
4: Order: 42, Degrees: [ 1, 1, 2, 3, 4, 7, 7, 5, 1 ]
5: Order: 168, Degrees: [ 1, 1, 2, 2, 2, 2, 2 ]
6: Order: 2520, Degrees: [ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]
7: Order: 5040, Degrees: [ 1, 1, 1, 1, 1, 1, 1 ]
Time: 1.610
Instead of computing over the rational field, for each group G we
can instead compute over GF(p), where p is the smallest prime which does
not divide the order of G. This is faster, and it is conjectured
that the resulting degrees are always the same as for the computation
over the rationals.
> d := 7;
> time for i := 1 to NumberOfTransitiveGroups(d) do
> G := TransitiveGroup(d, i);
> p := rep{p: p in [2 .. #G] | IsPrime(p) and #G mod p ne 0};
> R := InvariantRing(G, GF(p));
> F := FundamentalInvariants(R);
> printf "%o: Order: %o, Degrees: %o n", i, #G, deg_summary(F);
> end for;
1: Order: 7, Degrees: [ 1, 3, 8, 12, 12, 6, 6 ]
2: Order: 14, Degrees: [ 1, 3, 4, 6, 6, 3, 3 ]
3: Order: 21, Degrees: [ 1, 1, 4, 5, 8, 8, 6 ]
4: Order: 42, Degrees: [ 1, 1, 2, 3, 4, 7, 7, 5, 1 ]
5: Order: 168, Degrees: [ 1, 1, 2, 2, 2, 2, 2 ]
6: Order: 2520, Degrees: [ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]
7: Order: 5040, Degrees: [ 1, 1, 1, 1, 1, 1, 1 ]
Time: 0.790
Finally, we can do the same for all transitive groups of degree 8 in
about 2 minutes.
> d := 8;
> time for i := 1 to NumberOfTransitiveGroups(d) do
> G := TransitiveGroup(d, i);
> p := rep{p: p in [2 .. #G] | IsPrime(p) and #G mod p ne 0};
> R := InvariantRing(G, GF(p));
> F := FundamentalInvariants(R);
> printf "%o: Order: %o, Degrees: %o n", i, #G, deg_summary(F);
> end for;
1: Order: 8, Degrees: [ 1, 4, 10, 18, 16, 8, 4, 4 ]
2: Order: 8, Degrees: [ 1, 5, 9, 16, 8 ]
3: Order: 8, Degrees: [ 1, 7, 7, 7 ]
4: Order: 8, Degrees: [ 1, 6, 8, 12, 5 ]
5: Order: 8, Degrees: [ 1, 4, 10, 19, 15, 7 ]
6: Order: 16, Degrees: [ 1, 4, 5, 9, 8, 4, 2, 2 ]
7: Order: 16, Degrees: [ 1, 3, 7, 12, 13, 9, 4, 4 ]
8: Order: 16, Degrees: [ 1, 3, 6, 11, 12, 7, 2, 2 ]
9: Order: 16, Degrees: [ 1, 5, 5, 8, 4 ]
10: Order: 16, Degrees: [ 1, 4, 6, 11, 7, 2 ]
11: Order: 16, Degrees: [ 1, 4, 6, 11, 7, 3 ]
12: Order: 24, Degrees: [ 1, 2, 4, 8, 11, 12, 7 ]
13: Order: 24, Degrees: [ 1, 3, 3, 7, 8, 11, 7 ]
14: Order: 24, Degrees: [ 1, 3, 3, 8, 7, 9, 6, 1, 1 ]
15: Order: 32, Degrees: [ 1, 3, 4, 7, 6, 4, 2, 2 ]
16: Order: 32, Degrees: [ 1, 3, 5, 8, 7, 7, 4, 4 ]
17: Order: 32, Degrees: [ 1, 3, 4, 7, 6, 4, 2, 2 ]
18: Order: 32, Degrees: [ 1, 4, 4, 7, 3 ]
19: Order: 32, Degrees: [ 1, 3, 3, 7, 6, 7, 5, 1 ]
20: Order: 32, Degrees: [ 1, 3, 5, 9, 6, 4, 2, 1 ]
21: Order: 32, Degrees: [ 1, 4, 4, 6, 4, 3, 2, 1 ]
22: Order: 32, Degrees: [ 1, 4, 4, 7, 3, 1 ]
23: Order: 48, Degrees: [ 1, 2, 3, 5, 6, 6, 5, 2 ]
24: Order: 48, Degrees: [ 1, 3, 3, 6, 4, 3, 1 ]
25: Order: 56, Degrees: [ 1, 1, 1, 4, 6, 13, 18, 23, 18, 6 ]
26: Order: 64, Degrees: [ 1, 3, 3, 5, 3, 3, 2, 3, 1 ]
27: Order: 64, Degrees: [ 1, 3, 5, 8, 6, 4, 2, 2 ]
28: Order: 64, Degrees: [ 1, 3, 3, 5, 4, 4, 2, 2 ]
29: Order: 64, Degrees: [ 1, 3, 3, 6, 3, 2, 1 ]
30: Order: 64, Degrees: [ 1, 3, 3, 5, 3, 2, 3, 4, 3, 2, 1, 1 ]
31: Order: 64, Degrees: [ 1, 4, 4, 6, 3, 1 ]
32: Order: 96, Degrees: [ 1, 2, 2, 4, 3, 5, 4, 2, 2, 1, 1, 1 ]
33: Order: 96, Degrees: [ 1, 2, 2, 4, 3, 6, 5, 5, 3 ]
34: Order: 96, Degrees: [ 1, 2, 2, 5, 2, 5, 4, 3, 3 ]
35: Order: 128, Degrees: [ 1, 3, 3, 5, 3, 2, 1, 1 ]
36: Order: 168, Degrees: [ 1, 1, 1, 2, 2, 5, 6, 8, 10, 11, 8 ]
37: Order: 168, Degrees: [ 1, 1, 1, 3, 1, 5, 5, 8, 9, 9, 7 ]
38: Order: 192, Degrees: [ 1, 2, 2, 3, 3, 5, 4, 3, 2, 1, 1, 1 ]
39: Order: 192, Degrees: [ 1, 2, 2, 4, 2, 2, 1 ]
40: Order: 192, Degrees: [ 1, 2, 2, 3, 2, 2, 1, 1, 1, 3, 3, 2, 2, 1, 1, 1 ]
41: Order: 192, Degrees: [ 1, 2, 2, 4, 2, 3, 2, 2, 1 ]
42: Order: 288, Degrees: [ 1, 2, 2, 3, 2, 3, 2, 2, 1, 1 ]
43: Order: 336, Degrees: [ 1, 1, 1, 2, 1, 3, 3, 5, 4, 6, 5, 4, 2 ]
44: Order: 384, Degrees: [ 1, 2, 2, 3, 2, 2, 1, 1 ]
45: Order: 576, Degrees: [ 1, 2, 2, 3, 2, 2, 1, 1, 0, 0, 0, 1 ]
46: Order: 576, Degrees: [ 1, 2, 2, 3, 2, 2, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 ]
47: Order: 1152, Degrees: [ 1, 2, 2, 3, 2, 2, 1, 1 ]
48: Order: 1344, Degrees: [ 1, 1, 1, 2, 1, 2, 2, 2, 1, 1 ]
49: Order: 20160, Degrees: [ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]
50: Order: 40320, Degrees: [ 1, 1, 1, 1, 1, 1, 1, 1 ]
Time: 128.030
We compute fundamental invariants of a degree-10 representation of
S 5 acting on pairs. See [Kin07, p.11--12].
First we compute the fundamental invariants mod 7 of the permutation
representation (very difficult in practice hitherto).
> G := PermutationGroup<10 | (2,5)(3,6)(4,7),(1,5,8,10,4)(2,6,9,3,7)>;
> #G;
120
> R := InvariantRing(G, GF(7));
> time F := FundamentalInvariants(R);
Time: 29.310
> {* Degree(f): f in F *};
{* 1, 2^^2, 3^^4, 4^^7, 5^^10, 6^^13, 7^^13, 8^^4, 9^^2 *}
Finally, we can compute a matrix representation of G as a direct sum
of irreducible representations of degrees 1, 4 and 5. We then compute
the fundamental invariants of the invariant ring of this representation
mod 7.
> Q := RationalField();
> R0 := InvariantRing(G, Q);
> P0 := PolynomialRing(R0);
> M := GModule(G, Q);
> Gl := MatrixGroup(M);
> C := CharacterTable(Gl);
> Pi := [&+[Q!Integers()!c(g)*MatrixAlgebra(Q, 10)!g: g in Gl]/#G: c in C];
> Pi := [p: p in Pi | p ne 0];
> L := [sub<M | Image(p)>: p in Pi];
> G := MatrixGroup(DirectSum(DirectSum(L[1],L[2]),L[3]));
> G;
MatrixGroup(10, Rational Field)
Generators:
[ 1 0 0 0 0 0 0 0 0 0]
[ 0 1 1/3 1/3 1/3 0 0 0 0 0]
[ 0 0 1/3 -2/3 -2/3 0 0 0 0 0]
[ 0 0 -2/3 1/3 -2/3 0 0 0 0 0]
[ 0 0 -2/3 -2/3 1/3 0 0 0 0 0]
[ 0 0 0 0 0 1 0 0 0 0]
[ 0 0 0 0 0 0 0 0 1 0]
[ 0 0 0 0 0 0 0 0 0 1]
[ 0 0 0 0 0 0 1 0 0 0]
[ 0 0 0 0 0 0 0 1 0 0]
[ 1 0 0 0 0 0 0 0 0 0]
[ 0 0 1/3 -2/3 -2/3 0 0 0 0 0]
[ 0 0 -2/3 1/3 -2/3 0 0 0 0 0]
[ 0 0 -2/3 -2/3 1/3 0 0 0 0 0]
[ 0 1 1/3 1/3 1/3 0 0 0 0 0]
[ 0 0 0 0 0 -1 -1 1 1 0]
[ 0 0 0 0 0 -1 0 0 0 1]
[ 0 0 0 0 0 -1 0 1 0 0]
[ 0 0 0 0 0 0 -1 0 0 0]
[ 0 0 0 0 0 0 -1 1 0 0]
> Gp := ChangeRing(G, GF(7));
> #Gp;
120
> Rp := InvariantRing(Gp);
> time Fp := FundamentalInvariants(Rp);
Time: 35.380
> {* Degree(f): f in Fp *};
{* 1, 2^^2, 3^^4, 4^^7, 5^^10, 6^^13, 7^^13, 8^^4, 9^^2 *}
> [Degree(f): f in F] eq [Degree(f): f in Fp];
true
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|