
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 Prepresentation.
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",012: 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",01: The default is ("comment",0).
Setting ("comment",1) will provide information
about the development of the computation.
"out",01: (default is 1) the output segments are
given as as difference of varieties.
With option "out",0 the output segments are
given in Prepresentation 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 KapurSunWang 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), 2936.
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",01,"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*a35*a2*a3^3+2*a3^5)
==> _[3]=(23*a1^2138*a1*a2*a3+92*a1*a3^3+25*a2^3+132*a2^2*a3^2201*a2*\
a3^4+67*a3^6)
==> _[4]=(a04*a1*a3+6*a2*a3^23*a3^4)
==> [3]:
==> _[1]=1
==> [2]:
==> [1]:
==> _[1]=(a2a3^2)
==> _[2]=(a1a3^3)
==> _[3]=(a0a3^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)

