Fundamental Invariants#
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\).
- FundamentalInvariants(R): RngInvar -> [ RngMPolElt ]#
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 [King, 2007]; 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
Alto"MinPrimSec". If the fundamental invariants are known to be bounded by degree \(d\), then the parameterMaxDegreemay be set to \(d\) to assist the King algorithm with an early stopping condition in the non-modular case.
- Example: Fundamental Invariants (ex-4519e0)#
We construct fundamental invariants for the invariant ring \(R\) of the group \(G\) over \({\mathbb{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 ]
- Example: Transitive Groups Degree7 (ex-ea0676)#
As in [King, 2007], 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 \({\bf F}_{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
- Example: S5Degree10 (ex-b8dda0)#
We compute fundamental invariants of a degree-10 representation of \(S_5\) acting on pairs. See [King, 2007, 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