| #### D.2.4.2 cgsdr Procedure from library `grobcov.lib` (see grobcov_lib). Usage: cgsdr(ideal F); F: ideal in Q[a][x] (a=parameters, x=variables) to be discussed. Computes a disjoint, reduced Comprehensive Groebner System (CGS). cgsdr is the starting point of the fundamental routine grobcov. The basering R, must be of the form Q[a][x], (a=parameters, x=variables), and should be defined previously. Return: Returns a list T describing a reduced and disjoint Comprehensive Groebner System (CGS). The output is a list of (full,hole,basis), where the ideals full and hole represent the segment V(full) \ V(hole). With option ("out",0) the segments are grouped by leading power products (lpp) of the reduced Groebner basis and given in P-representation. The returned list is of the form: [ [lpp, [num,basis,segment],..., [num,basis,segment],lpph], ... , [lpp, [num,basis,segment],..., [num,basis,segment],lpph] ]. The bases are the reduced Groebner bases (after normalization) for each point of the corresponding segment. The third element lpph of each lpp segment is the lpp of the homogenized ideal used ideal in the CGS as a string, that is shown only when option ("can",1) is used. With option ("can",0) the homogenized basis is used. With option ("can",1) the homogenized ideal is used. With option ("can",2) the given basis is used. With option ("out",1) (default) only KSW is applied and segments are given as difference of varieties and are not grouped The returned list is of the form: [[E,N,B],..[E,N,B]] E is the top variety N is the hole variety. Segment = V(E) \ V(N) B is the reduced Groebner basis Options: An option is a pair of arguments: string, integer. To modify the default options, pairs of arguments -option name, value- of valid options must be added to the call. Inside grobcov the default option is "can",1. It can be used also with option "can",0 but then the output is not the canonical Groebner Cover. grobcov cannot be used with option "can",2. When cgsdr is called directly, the options are "can",0-1-2: The default value is "can",2. In this case no homogenization is done. With option ("can",0) the given basis is homogenized, and with option ("can",1) the whole given ideal is homogenized before computing the cgs and dehomogenized after. With option ("can",0) the homogenized basis is used. With option ("can",1) the homogenized ideal is used. With option ("can",2) the given basis is used. "null",ideal E: The default is ("null",ideal(0)). "nonnull",ideal N: The default ("nonnull",ideal(1)). When options "null" and/or "nonnull" are given, then the parameter space is restricted to V(E) \ V(N). "comment",0-1: The default is ("comment",0). Setting ("comment",1) will provide information about the development of the computation. "out",0-1: (default is 1) the output segments are given as as difference of varieties. With option "out",0 the output segments are given in P-representation and the segments grouped by lpp. With options ("can",0) and ("can",1) the option ("out",1) is set to ("out",0) because it is not compatible. One can give none or whatever of these options. With the default options ("can",2,"out",1), only the Kapur-Sun-Wang algorithm is computed. The algorithm used is: D. Kapur, Y. Sun, and D.K. Wang "A New Algorithm for Computing Comprehensive Groebner Systems". Proceedings of ISSAC'2010, ACM Press, (2010), 29-36. It is very efficient but is only the starting point for the computation of grobcov. When grobcov is computed, the call to cgsdr inside uses specific options that are more expensive ("can",0-1,"out",0). Example:
    LIB "grobcov.lib";
    // EXAMPLE:
    // Casas conjecture for degree 4:
    // Casas-Alvero conjecture states that on a field of characteristic 0,
    // if a polynomial of degree n in x has a common root whith each of its
    // n-1 derivatives (not assumed to be the same), then it is of the form
    // P(x) = k(x + a)^n, i.e. the common roots must all be the same.
    if(defined(R)){kill R;}
    ring R=(0,a0,a1,a2,a3,a4),(x1,x2,x3),dp;
    short=0;
    ideal F=x1^4+(4*a3)*x1^3+(6*a2)*x1^2+(4*a1)*x1+(a0),
    x1^3+(3*a3)*x1^2+(3*a2)*x1+(a1),
    x2^4+(4*a3)*x2^3+(6*a2)*x2^2+(4*a1)*x2+(a0),
    x2^2+(2*a3)*x2+(a2),
    x3^4+(4*a3)*x3^3+(6*a2)*x3^2+(4*a1)*x3+(a0),
    x3+(a3);
    cgsdr(F);
    ==> [1]:
    ==>    [1]:
    ==>       _[1]=0
    ==>    [2]:
    ==>       _[1]=(-a2+a3^2)
    ==>       _[2]=(-a1*a2+a1*a3^2+3*a2^2*a3-5*a2*a3^3+2*a3^5)
    ==>       _[3]=(23*a1^2-138*a1*a2*a3+92*a1*a3^3+25*a2^3+132*a2^2*a3^2-201*a2*\
       a3^4+67*a3^6)
    ==>       _[4]=(a0-4*a1*a3+6*a2*a3^2-3*a3^4)
    ==>    [3]:
    ==>       _[1]=1
    ==> [2]:
    ==>    [1]:
    ==>       _[1]=(a2-a3^2)
    ==>       _[2]=(a1-a3^3)
    ==>       _[3]=(a0-a3^4)
    ==>    [2]:
    ==>       _[1]=1
    ==>    [3]:
    ==>       _[1]=x3+(a3)
    ==>       _[2]=x2^2+(2*a3)*x2+(a3^2)
    ==>       _[3]=x1^3+(3*a3)*x1^2+(3*a3^2)*x1+(a3^3)

User manual for Singular version 4.4.1, 2025, generated by texi2html.