
D.7.1.9 molien
Procedure from library finvar.lib (see finvar_lib).
 Usage:
 molien(G1,G2,...[,ringname,lcm,flags]);
G1,G2,...: nxn <matrices>, all elements of a finite matrix group,
ringname: a <string> giving a name for a new ring of characteristic 0
for the Molien series in case of prime characteristic, lcm: an <int>
giving the lowest common multiple of the elements' orders in case of
prime characteristic, minpoly==0 and a noncyclic group, flags: an
optional <intvec> with three components: if the first element is not
equal to 0 characteristic 0 is simulated, i.e. the Molien series is
computed as if the base field were characteristic 0 (the user must
choose a field of large prime characteristic, e.g. 32003), the second
component should give the size of intervals between canceling common
factors in the expansion of the Molien series, 0 (the default) means
only once after generating all terms, in prime characteristic also a
negative number can be given to indicate that common factors should
always be canceled when the expansion is simple (the root of the
extension field does not occur among the coefficients)
 Assume:
 n is the number of variables of the basering, G1,G2... are the group
elements generated by group_reynolds(), lcm is the second return value
of group_reynolds()
 Return:
 in case of characteristic 0 a 1x2 <matrix> giving enumerator and
denominator of Molien series; in case of prime characteristic a ring
with the name `ringname` of characteristic 0 is created where the same
Molien series (named M) is stored
 Display:
 information if the third component of flags does not equal 0
 Theory:
 In characteristic 0 the terms 1/det(1xE) for all group elements of
the Molien series are computed in a straight forward way. In prime
characteristic a Brauer lift is involved. The returned matrix gives
enumerator and denominator of the expanded version where common
factors have been canceled.
Example:
 LIB "finvar.lib";
" note the case of prime characteristic";
==> note the case of prime characteristic
ring R=0,(x,y,z),dp;
matrix A[3][3]=0,1,0,1,0,0,0,0,1;
list L=group_reynolds(A);
matrix M=molien(L[2..size(L)]);
print(M);
==> x3+x2x+1,x7+x6+x5x4+x3x2x+1
ring S=3,(x,y,z),dp;
string newring="alksdfjlaskdjf";
matrix A[3][3]=0,1,0,1,0,0,0,0,1;
list L=group_reynolds(A);
molien(L[2..size(L)],newring);
setring Finvar::alksdfjlaskdjf;
print(M);
==> x3+x2x+1,x7+x6+x5x4+x3x2x+1
setring S;
kill Finvar::alksdfjlaskdjf;

