Singular

D.7.1.27 irred_secondary_char0

Procedure from library `finvar.lib` (see finvar_lib).

Usage:
irred_secondary_char0(P,REY,M[,v][,"PP"]);
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>;
"PP": if this string occurs as (optional) parameter, then in all degrees power products of irr. sec. inv. will be computed.

Return:
Irreducible homogeneous secondary invariants of the invariant ring (type <matrix>)

Assume:
We are in the non-modular case, i.e., the characteristic of the basering does not divide the group order;
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()

Display:
Information on the progress of computations if v does not equal 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. Here, only irreducible secondary invariants are explicitly computed, which saves time and memory.
Moreover, if no irr. sec. inv. in degree d-1 have been found and unless the last optional paramter "PP" is used, a Groebner basis of primary invariants and irreducible secondary invariants up to degree d-2 is computed, which allows to detect irr. sec. inv. in degree d without computing power products.
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, (a,b,c,d,e,f),dp; matrix A1[6][6] = 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0; matrix A2[6][6] = 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0; list L = primary_invariants(A1,A2); matrix IS = irred_secondary_char0(L[1],L[2],L[3],0); IS; ==> IS[1,1]=ab+cd+ef ==> IS[1,2]=a2d+ad2+b2e+be2+c2f+cf2 ==> IS[1,3]=ac2+b2d+a2e+ce2+d2f+bf2 ==> IS[1,4]=b2c+bc2+d2e+de2+a2f+af2 ==> IS[1,5]=a2c+bd2+c2e+ae2+b2f+df2 ==> IS[1,6]=a2cd+abd2+abe2+b2ef+c2ef+cdf2 ==> IS[1,7]=ab2d+ac2d+a2be+cd2f+ce2f+bef2 ==> IS[1,8]=a2bd+acd2+ab2e+c2df+be2f+cef2 ==> IS[1,9]=a3d+ad3+b3e+be3+c3f+cf3 ```