|  |  D.2.4.2 cgsdr Procedure from librarygrobcov.lib(see  grobcov_lib).
 
Example: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).
 
 |  | 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)
 | 
 
 |