# Singular

#### D.2.4.3 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 null variety
N is the nonnull 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. There, it cannot be used with option "can",2. Ehen 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. This 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"; // Casas conjecture for degree 4: 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) ```