# Singular

#### D.7.1.28 secondary_charp

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

Usage:
secondary_charp(P,REY,ringname[,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;
ringname: a <string> giving the name of a ring of characteristic 0 containing a 1x2 <matrix> M 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 not zero;
REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants();
`ringname` is the name of a ring of characteristic 0 that has been created by molien() or reynolds_molien() or primary_invariants()

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

Display:
information 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.

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); matrix S,IS=secondary_charp(L[1..size(L)],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,x2z-y2z,x3y-xy3 print(IS); ==> xyz,x2z-y2z,x3y-xy3 ```