Dear GAP Forum,
Allan Adler asked for more details concerning Molien series.
Let us look at an example, the Molien series corresponding to
any of the irreducible degree 3 representations
of the alternating group on 5 points.
gap> G:= AlternatingGroup( 5 );; gap> psi:= First( Irr( G ), x -> Degree( x ) = 3 );; gap> molser:= MolienSeries( psi ); ( 1-z^2-z^3+z^6+z^7-z^9 ) / ( (1-z^5)*(1-z^3)*(1-z^2)^2 )
For GAP 4, this Molien series is first of all a rational function.
In the printed form, numerator and denominator are in general
not coprime; in this example, `1-z' divides is a common divisor.
The chosen denominator is minimal with the property
that it is a product of polynomials of the form `1-z^k'.
(This minimal denominator is determined by those cyclotomic
polynomials that necessarily divide the denominator.)
But this form of the Molien series does in general not reflect
the structure of the invariant ring.
In the example, this can be seen from the fact that some of the
coefficients in the numerator are negative.
One possibility to ``guess'' a denominator that encodes the
degrees of the primary invariants and such that the numerator
encodes the degrees of the secondary invariants
is to look at the first coefficients of the series.
gap> List( [ 0 .. 20 ], i -> ValueMolienSeries( molser, i ) ); [ 1, 0, 1, 0, 1, 0, 2, 0, 2, 0, 3, 0, 4, 0, 4, 1, 5, 1, 6, 1, 7 ]
We see that invariants of degrees 2, 6, 10, and 15 exist
that do not arise from invariants of smaller degrees.
So we try a representation of the Molien series with appropriately
larger denominator.
(This functionality was not available in GAP 3.)
gap> MolienSeriesWithGivenDenominator( molser, [ 2, 6, 10 ] ); ( 1+z^15 ) / ( (1-z^10)*(1-z^6)*(1-z^2) )
This is in fact a representation that reflects the structure
of the invariant ring.
Currently GAP does not provide other tools for finding
reasonable denominators of Molien series.
If more information about the handling of Molien series in GAP
is needed, only the GAP library code is available
(see the files `ctblmoli.gd' and `ctblmoli.gi').
In particular, the attribute `MolienSeriesInfo' might be interesting;
each rational function constructed by `MolienSeries' stores the
value of this attribute, and the functions `ValueMolienSeries'
and `MolienSeriesWithGivenDenominator' rely only on this value.
Kind regards,
Thomas