#### 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.