#### 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,x2z-y2z,x3y-xy3
    print(IS);
    ==> xyz,x2z-y2z,x3y-xy3

See also: irred_secondary_char0.

User manual for Singular version 4-0-3, 2016, generated by texi2html.