# Singular

#### D.7.1.29 secondary_no_molien

Procedure from library finvar.lib (see finvar_lib).

Usage:
secondary_no_molien(P,REY[,deg_vec,v]);
P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix> representing the Reynolds operator, deg_vec: an optional <intvec> listing some degrees where no non-trivial homogeneous invariants can be found, v: an optional <int>

Assume:
n is the number of variables of the basering, g the size of the group, REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants(), deg_vec is the second return value of primary_char0_no_molien(), primary_charp_no_molien(), primary_char0_no_molien_random() or primary_charp_no_molien_random()

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

Display:
information if v does not equal 0

Theory:
Secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo primary invariants, mapping those to invariants with the Reynolds operator and using these images as candidates for secondary invariants. We have the Reynolds operator, hence, we are in the non-modular case. Therefore, the invariant ring is Cohen-Macaulay, hence the number of secondary invariants is the product of the degrees of primary invariants divided by the group order.

Note:
<secondary_and_irreducibles_no_molien> should usually be faster and of more useful functionality.

Example:
 LIB "finvar.lib"; ring R=3,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A,intvec(1,1,0)); // In that example, there are no secondary invariants // in degree 1 or 2. matrix S=secondary_no_molien(L[1..2],intvec(1,2),1); ==> ==> We need to find 4 secondary invariants. ==> ==> In degree 0 we have: 1 ==> ==> Searching in degree 3 ... ==> We found sec. inv. number 2 in degree 3 ==> We found sec. inv. number 3 in degree 3 ==> Searching in degree 4 ... ==> We found sec. inv. number 4 in degree 4 ==> ==> We're done! ==> print(S); ==> 1,xyz,x2z-y2z,x3y-xy3