
D.7.1.26 secondary_char0
Procedure from library finvar.lib (see finvar_lib).
 Usage:
 secondary_char0(P,REY,M[,v][,"old"]);
P: a 1xn <matrix> with homogeneous primary invariants, where
n is the number of variables of the basering;
REY: a gxn <matrix> representing the Reynolds operator, where
g the size of the corresponding group;
M: a 1x2 <matrix> giving numerator and denominator of the Molien
series;
v: an optional <int>;
"old": if this string occurs as (optional) parameter, then an
old version of secondary_char0 is used (for downward
compatibility)
 Assume:
 The characteristic of basering is zero;
REY is the 1st return value of group_reynolds(), reynolds_molien() or
the second one of primary_invariants();
M is the return value of molien()
or the second one of reynolds_molien() or the third one of
primary_invariants()
 Return:
 Homogeneous secondary invariants and irreducible secondary
invariants of the invariant ring (both type <matrix>)
 Display:
 Information on the progress of the computations if v is an integer
different from 0.
 Theory:
 The secondary invariants are calculated by finding a basis (in terms
of monomials) of the basering modulo the primary invariants, mapping
those to invariants with the Reynolds operator. Among these images
or their power products we pick secondary invariants using Groebner
basis techniques (see S. King: Fast Computation of Secondary
Invariants).
The size of this set can be read off from the Molien series.
 Note:
 Secondary invariants are not uniquely determined by the given data.
Specifically, the output of secondary_char0(P,REY,M,"old") will
differ from the output of secondary_char0(P,REY,M). However, the
ideal generated by the irreducible homogeneous
secondary invariants will be the same in both cases.
There are three internal parameters "pieces", "MonStep" and "IrrSwitch".
The default values of the parameters should be fine in most cases. However,
in some cases, different values may provide a better balance of memory
consumption (smaller values) and speed (bigger values).
Example:
 LIB "finvar.lib";
ring R=0,(x,y,z),dp;
matrix A[3][3]=0,1,0,1,0,0,0,0,1;
list L=primary_invariants(A);
matrix S,IS=secondary_char0(L[1..3],1);
==>
==> We need to find
==> 1 secondary invariant in degree 0
==> 0 secondary invariants in degree 1
==> 0 secondary invariants in degree 2
==> 2 secondary invariants in degree 3
==> 1 secondary invariant in degree 4
==> In degree 0 we have: 1
==>
==> Searching in degree 3 , we need to find 2 invariant(s)...
==> Looking for Power Products...
==> There are 2 irreducible secondary invariants in degree 3
==> We found all 2 irreducibles in degree 3
==>
==> Searching in degree 4 , we need to find 1 invariant(s)...
==> Looking for Power Products...
==> There are 1 irreducible secondary invariants in degree 4
==> We found all 1 irreducibles in degree 4
==>
==> We're done!
==>
print(S);
==> 1,xyz,x2zy2z,x3yxy3
print(IS);
==> xyz,x2zy2z,x3yxy3
 See also:
irred_secondary_char0.
