invariantRing makes use of the functions primaryInvariants, secondaryInvariants and generateGroup in order to compute the invariant ring of a finite group. Apart from IsGroup, all of the optional arguments of invariantRing play the same role as for these three functions. Note that if IsGroup is set to false then the second argument in generateGroup will be set to the coefficientRing of the polynomial ring R. The function invariantRing calls upon primaryInvariants, with the optional argument Dade set to false, to compute a set of primary invariants, resulting in Kemper's 'optimal' algorithm being used (see hsop algorithms for more information).
The example below computes a set of primary and secondary invariants for an action of the cyclic group of order 4 on QQ[x,y].
i1 : C4=generateGroup({matrix{{0,-1},{1,0}}},QQ) o1 = {| 1 0 |, | 0 -1 |, | -1 0 |, | 0 1 |} | 0 1 | | 1 0 | | 0 -1 | | -1 0 | o1 : List |
i2 : invariantRing(QQ[x,y],C4) 2 2 4 4 3 3 o2 = ({x + y , x + y }, {1, x y - x*y }) o2 : Sequence |
From the output one sees that QQ[x,y]C4=QQ[f1f2]⊕QQ[f1f2](x4+y4), where f1=x2+y2 and f2=xy3-x3y.
Alternatively, one can calculate the invariant ring just by specifying the generator of the cyclic group and setting the optional argument IsGroup to false.
i3 : invariantRing(QQ[x,y],{sub(matrix{{0,-1},{1,0}},QQ)},IsGroup=>false) 2 2 2 2 3 3 o3 = ({x + y , x y }, {1, x y - x*y }) o3 : Sequence |
This function is provided by the package InvariantRing.