Home Online Manual
Top
Back: grobcov_lib
Forward: cgsdr
FastBack:
FastForward:
Up: grobcov_lib
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

D.2.4.1 grobcov

Procedure from library grobcov.lib (see grobcov_lib).

Usage:
grobcov(ideal F[,options]);
F: ideal in Q[a][x] (a=parameters, x=variables) to be
discussed.This is the fundamental routine of the
library. It computes the Groebner Cover of a parametric ideal F in Q[a][x]. See
A. Montes , M. Wibmer, "Groebner Bases for Polynomial
Systems with parameters".
JSC 45 (2010) 1391-1425.)
or the not yet published book
A. Montes. " The Groebner Cover" (Discussing
Parametric Polynomial Systems).
The Groebner Cover of a parametric ideal F consist
of a set of pairs(S_i,B_i), where the S_i are disjoint locally closed segments of the parameter space,
and the B_i are the reducedGroebner bases of the
ideal on every point of S_i. The ideal F must be
defined on a parametric ring Q[a][x] (a=parameters,
x=variables).

Return:
The list [[lpp_1,basis_1,segment_1], ...,
[lpp_s,basis_s,segment_s]]
optionally [[ lpp_1,basis_1,segment_1,lpph_1], ..., [lpp_s,basis_s,segment_s,lpph_s]]
The lpp are constant over a segment and
correspond to the set of lpp of the reduced
Groebner basis for each point of the segment.
With option ("showhom",1) the lpph will be
shown: The lpph corresponds to the lpp of the
homogenized ideal and is different for each
segment. It is given as a string, and shown
only for information. With the default option
"can",1, the segments have different lpph.
Basis: to each element of lpp corresponds
an I-regular function given in full
representation (by option ("ext",1)) or
in generic representation (default option ("ext",0)). The I-regular function is the corresponding
element of the reduced Groebner basis for
each point of the segment with the given lpp.
For each point in the segment, the polynomial
or the set of polynomials representing it,
if they do not specialize to 0, then after
normalization, specializes to the corresponding
element of the reduced Groebner basis.
In the full representation at least one of the
polynomials representing the I-regular function
specializes to non-zero.
With the default option ("rep",0) the
representation of the segment is the
P-representation.
With option ("rep",1) the representation
of the segment is the C-representation.
With option ("rep",2) both representations
of the segment are given.
The P-representation of a segment is of the form
[[p_1,[p_11,..,p_1k1]],..,[p_r,[p_r1,..,p_rkr]]]
representing the segment
Union_i ( V(p_i) \ ( Union_j V(p_ij) ) ),
where the p's are prime ideals.
The C-representation of a segment is of the form
(E,N) representing V(E) \ V(N), and the ideals E
and N are radical and N contains E.

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.
"null",ideal E: The default is ("null",ideal(0)).
"nonnull",ideal N: The default is
("nonnull",ideal(1)).
When options "null" and/or "nonnull" are given,
then the parameter space is restricted to V(E) \ V(N). "can",0-1: The default is ("can",1).
With the default option the homogenized
ideal is computed before obtaining the Groebner
Cover, so that the result is the canonical Groebner
Cover. Setting ("can",0) only homogenizes the
basis so the result is not exactly canonical,
but the computation is shorter.
"ext",0-1: The default is ("ext",0).
With the default ("ext",0), only the generic
representation of the bases is computed
(single polynomials, but not specializing
to non-zero for every point of the segment.
With option ("ext",1) the full representation
of the bases is computed (possible sheaves)
and sometimes a simpler result is obtained,
but the computation is more time consuming.
"rep",0-1-2: The default is ("rep",0)
and then the segments are given in canonical
P-representation.
Option ("rep",1) represents the segments
in canonical C-representation, and
option ("rep",2) gives both representations.
"comment",0-3: The default is ("comment",0).
Setting "comment" higher will provide
information about the development of the
computation.
"showhom",0-1: The default is ("showhom",0).
Setting "showhom",1 will output the set
of lpp of the homogenized ideal of each segment
as last element. One can give none or whatever
of these options.

Note:
The basering R, must be of the form Q[a][x],
(a=parameters, x=variables), and
should be defined previously. The ideal
must be defined on R.

Example:
 
LIB "grobcov.lib";
// EXAMPLE 1:
// 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);
grobcov(F);
==> [1]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=0
==>          [2]:
==>             [1]:
==>                _[1]=(a2-a3^2)
==>                _[2]=(a1-a3^3)
==>                _[3]=(a0-a3^4)
==> [2]:
==>    [1]:
==>       _[1]=x3
==>       _[2]=x2^2
==>       _[3]=x1^3
==>    [2]:
==>       _[1]=x3+(a3)
==>       _[2]=x2^2+(2*a3)*x2+(a3^2)
==>       _[3]=x1^3+(3*a3)*x1^2+(3*a3^2)*x1+(a3^3)
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(a2-a3^2)
==>             _[2]=(a1-a3^3)
==>             _[3]=(a0-a3^4)
==>          [2]:
==>             [1]:
==>                _[1]=1
// EXAMPLE 2
// M. Rychlik robot;
// Complexity and Applications of Parametric Algorithms of
// Computational Algebraic Geometry.;
// In: Dynamics of Algorithms, R. de la Llave, L. Petzold and J. Lorenz eds.;
// IMA Volumes in Mathematics and its Applications,
// Springer-Verlag 118: 1-29 (2000).;
// (18. Mathematical robotics: Problem 4, two-arm robot).
if (defined(R)){kill R;}
ring R=(0,a,b,l2,l3),(c3,s3,c1,s1), dp;
short=0;
ideal S12=a-l3*c3-l2*c1,b-l3*s3-l2*s1,c1^2+s1^2-1,c3^2+s3^2-1;
S12;
==> S12[1]=(-l3)*c3+(-l2)*c1+(a)
==> S12[2]=(-l3)*s3+(-l2)*s1+(b)
==> S12[3]=c1^2+s1^2-1
==> S12[4]=c3^2+s3^2-1
grobcov(S12);
==> [1]:
==>    [1]:
==>       _[1]=c1
==>       _[2]=s3
==>       _[3]=c3
==>       _[4]=s1^2
==>    [2]:
==>       _[1]=(2*a*l2)*c1+(2*b*l2)*s1+(-a^2-b^2-l2^2+l3^2)
==>       _[2]=(l3)*s3+(l2)*s1+(-b)
==>       _[3]=(2*a*l3)*c3+(-2*b*l2)*s1+(-a^2+b^2+l2^2-l3^2)
==>       _[4]=(4*a^2*l2^2+4*b^2*l2^2)*s1^2+(-4*a^2*b*l2-4*b^3*l2-4*b*l2^3+4*\
   b*l2*l3^2)*s1+(a^4+2*a^2*b^2-2*a^2*l2^2-2*a^2*l3^2+b^4+2*b^2*l2^2-2*b^2*l\
   3^2+l2^4-2*l2^2*l3^2+l3^4)
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=0
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>             [2]:
==>                _[1]=(l2)
==>             [3]:
==>                _[1]=(a^2+b^2)
==>             [4]:
==>                _[1]=(a)
==> [2]:
==>    [1]:
==>       _[1]=s1
==>       _[2]=s3
==>       _[3]=c3
==>       _[4]=c1^2
==>    [2]:
==>       _[1]=(2*b*l2)*s1+(-b^2-l2^2+l3^2)
==>       _[2]=(2*b*l3)*s3+(-b^2+l2^2-l3^2)
==>       _[3]=(l3)*c3+(l2)*c1
==>       _[4]=(4*b^2*l2^2)*c1^2+(b^4-2*b^2*l2^2-2*b^2*l3^2+l2^4-2*l2^2*l3^2+\
   l3^4)
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(a)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(a)
==>             [2]:
==>                _[1]=(l2)
==>                _[2]=(a)
==>             [3]:
==>                _[1]=(b)
==>                _[2]=(a)
==> [3]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(b)
==>             _[2]=(a)
==>          [2]:
==>             [1]:
==>                _[1]=(l2+l3)
==>                _[2]=(b)
==>                _[3]=(a)
==>             [2]:
==>                _[1]=(l3)
==>                _[2]=(b)
==>                _[3]=(a)
==>             [3]:
==>                _[1]=(l2-l3)
==>                _[2]=(b)
==>                _[3]=(a)
==>       [2]:
==>          [1]:
==>             _[1]=(l2)
==>          [2]:
==>             [1]:
==>                _[1]=(l2)
==>                _[2]=(a^2+b^2-l3^2)
==>             [2]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==> [4]:
==>    [1]:
==>       _[1]=s3
==>       _[2]=c3
==>       _[3]=c1^2
==>    [2]:
==>       _[1]=(l2^2*l3+2*l2^2-l3^3)*s3+(2*l2*l3)*s1+(b*l3^2)
==>       _[2]=(l2^2*l3+2*l2^2-l3^3)*c3+(2*l2*l3)*c1+(a*l3^2)
==>       _[3]=c1^2+s1^2-1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l2-l3)
==>             _[2]=(b)
==>             _[3]=(a)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(b)
==>                _[4]=(a)
==>       [2]:
==>          [1]:
==>             _[1]=(l2+l3)
==>             _[2]=(b)
==>             _[3]=(a)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(b)
==>                _[4]=(a)
==>       [3]:
==>          [1]:
==>             _[1]=(l2)
==>             _[2]=(a^2+b^2-l3^2)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(a^2+b^2)
==> [5]:
==>    [1]:
==>       _[1]=c1^2
==>       _[2]=c3^2
==>    [2]:
==>       _[1]=c1^2+s1^2-1
==>       _[2]=c3^2+s3^2-1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l3)
==>             _[2]=(l2)
==>             _[3]=(b)
==>             _[4]=(a)
==>          [2]:
==>             [1]:
==>                _[1]=1
==> [6]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l3)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(a^2+b^2-l2^2)
==>             [2]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==> [7]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l3)
==>             _[2]=(l2)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(a^2+b^2)
==> [8]:
==>    [1]:
==>       _[1]=s1
==>       _[2]=c1
==>       _[3]=c3^2
==>    [2]:
==>       _[1]=(l2)*s1+(-b)
==>       _[2]=(l2)*c1+(-a)
==>       _[3]=c3^2+s3^2-1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l3)
==>             _[2]=(a^2+b^2-l2^2)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(a^2+b^2)
==> [9]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l3)
==>             _[2]=(l2)
==>             _[3]=(a^2+b^2)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(b)
==>                _[4]=(a)
==> [10]:
==>    [1]:
==>       _[1]=s1
==>       _[2]=c1
==>       _[3]=s3
==>       _[4]=c3
==>    [2]:
==>       _[1]=(4*b*l2^3-4*b*l2*l3^2)*s1+(-4*b^2*l2^2-l2^4+2*l2^2*l3^2-l3^4)
==>       _[2]=(4*b^2*l2^3-4*b^2*l2*l3^2)*c1+(-4*a*b^2*l2^2+a*l2^4-2*a*l2^2*l\
   3^2+a*l3^4)
==>       _[3]=(4*b*l2^2*l3-4*b*l3^3)*s3+(4*b^2*l3^2+l2^4-2*l2^2*l3^2+l3^4)
==>       _[4]=(4*b^2*l2^2*l3-4*b^2*l3^3)*c3+(4*a*b^2*l3^2-a*l2^4+2*a*l2^2*l3\
   ^2-a*l3^4)
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(a^2+b^2)
==>          [2]:
==>             [1]:
==>                _[1]=(l2+l3)
==>                _[2]=(a^2+b^2)
==>             [2]:
==>                _[1]=(l3)
==>                _[2]=(a^2+b^2)
==>             [3]:
==>                _[1]=(l2-l3)
==>                _[2]=(a^2+b^2)
==>             [4]:
==>                _[1]=(l2)
==>                _[2]=(a^2+b^2)
==>             [5]:
==>                _[1]=(b)
==>                _[2]=(a)
==> [11]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       [1]:
==>          [1]:
==>             _[1]=(l2-l3)
==>             _[2]=(a^2+b^2)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(a^2+b^2)
==>             [2]:
==>                _[1]=(l2-l3)
==>                _[2]=(b)
==>                _[3]=(a)
==>       [2]:
==>          [1]:
==>             _[1]=(l2+l3)
==>             _[2]=(a^2+b^2)
==>          [2]:
==>             [1]:
==>                _[1]=(l3)
==>                _[2]=(l2)
==>                _[3]=(a^2+b^2)
==>             [2]:
==>                _[1]=(l2+l3)
==>                _[2]=(b)
==>                _[3]=(a)