Home Online Manual
Top
Back: finalcases
Forward: rcgs
FastBack:
FastForward:
Up: redcgs_lib
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

D.2.9.11 mrcgs

Procedure from library redcgs.lib (see redcgs_lib).

Usage:
mrcgs(F);
F is the ideal from which to obtain the Minimal Reduced CGS. Alternatively, as option:
mrcgs(F,L);
where L is a list of the null conditions ideal N, and W the set of non-null polynomials (ideal). If this option is set, the ideals N and W must depend only on the parameters and the parameter space is reduced to V(N) \ V(h), where h=prod(w), for w in W.
A reduced specification of (N,W) will be computed and used to restrict the parameter-space. The output will omit the known restrictions given as option.

Return:
The list representing the Minimal Reduced CGS.
The description given here is identical for rcgs and crcgs. The elements of the list T computed by mrcgs are lists representing a rooted tree.
Each element has as the two first entries with the following content:
[1]: The label (intvec) representing the position in the rooted tree: 0 for the root (and this is a special element) i for the root of the segment i
(i,...) for the children of the segment i
[2]: the number of children (int) of the vertex.
There thus three kind of vertices:
1) the root (first element labelled 0),
2) the vertices labelled with a single integer i,
3) the rest of vertices labelled with more indices.
Description of the root. Vertex type 1)
There is a special vertex (the first one) whose content is the following:
[3] lpp of the given ideal
[4] the given ideal
[5] the red-spec of the (optional) given null and non-null conditions (see redspec for the description)
[6] MRCGS (to remember which algorithm has been used). If the algorithm used is rcgs of crcgs then this will be stated at this vertex (RCGS or CRCGS).
Description of vertices type 2). These are the vertices that initiate a segment, and are labelled with a single integer. [3] lpp (ideal) of the reduced basis. If they are repeated lpp's this will correspond to a sheaf.
[4] the reduced basis (ideal) of the segment.
Description of vertices type 3). These vertices have as first label i and descend form vertex i in the position of the label (i,...). They contain moreover a unique prime ideal in the parameters and form ascending chains of ideals.
How is to be read the mrcgs tree? The vertices with an even number of integers in the label are to be considered as additive and those with an odd number of integers in the label are to be considered as subtraction. As an example consider the following vertices: v1=((i),2,lpp,B),
v2=((i,1),2,P_{(i,1)}),
v3=((i,1,1),2,P_{(i,1,1)},
v4=((i,1,1,1),1,P_{(i,1,1,1)},
v5=((i,1,1,1,1),0,P_{(i,1,1,1,1)},
v6=((i,1,1,2),1,P_{(i,1,1,2)},
v7=((i,1,1,2,1),0,P_{(i,1,1,2,1)},
v8=((i,1,2),0,P_{(i,1,2)},
v9=((i,2),1,P_{(i,2)},
v10=((i,2,1),0,P_{(i,2,1)},
They represent the segment:
(V(i,1)\(((V(i,1,1) \ ((V(i,1,1,1) \ V(i,1,1,1,1)) u (V(i,1,1,2) \ V(i,1,1,2,1))))) u V(i,1,2)) u (V(i,2) \ V(i,2,1))
and can also be represented by
(V(i,1) \ (V(i,1,1) u V(i,1,2))) u
(V(i,1,1,1) \ V(i,1,1,1)) u
(V(i,1,1,2) \ V(i,1,1,2,1)) u
(V(i,2) \ V(i,2,1))
where V(i,j,..) = V(P_{(i,j,..)}

Note:
There are three fundamental routines in the library: mrcgs, rcgs and crcgs. mrcgs (Minimal Reduced CGS) is an algorithm that packs so much as it is able to do (using algorithms adhoc) the segments with the same lpp, obtaining the minimal number of segments. The hypothesis is that this is also canonical, but for the moment there is no proof of the uniqueness of that minimal packing. Moreover, the segments that are obtained are not locally closed, i.e. there are not always the difference of two varieties, but can be a union of differences.
The output can be visualized using cantreetoMaple, that will write a file with the content of mrcgs that can be read in Maple and plotted using the Maple plotcantree routine of the Monte's dpgb library You can also try the routine cantodiffcgs when the segments are all difference of two varieties to have a simpler view of the output. But it will give an error if the output is not locally closed.

Example:
 
LIB "redcgs.lib";
ring R=(0,b,c,d,e,f),(x,y),dp;
ideal F=x^2+b*y^2+2*c*x*y+2*d*x+2*e*y+f, 2*x+2*c*y+2*d, 2*b*y+2*c*x+2*e;
def T=mrcgs(F);
T;
==> [1]:
==>    [1]:
==>       0
==>    [2]:
==>       3
==>    [3]:
==>       _[1]=x2
==>       _[2]=x
==>       _[3]=x
==>    [4]:
==>       _[1]=x2+(2c)*xy+(b)*y2+(2d)*x+(2e)*y+(f)
==>       _[2]=2*x+(2c)*y+(2d)
==>       _[3]=(2c)*x+(2b)*y+(2e)
==>    [5]:
==>       [1]:
==>          _[1]=0
==>       [2]:
==>          _[1]=0
==>       [3]:
==>          [1]:
==>             _[1]=0
==>    [6]:
==>       MRCGS
==> [2]:
==>    [1]:
==>       1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=1
==>    [4]:
==>       _[1]=1
==> [3]:
==>    [1]:
==>       1,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=0
==> [4]:
==>    [1]:
==>       1,1,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(bd2-bf+c2f-2cde+e2)
==> [5]:
==>    [1]:
==>       1,1,1,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(cd-e)
==>       _[2]=(b-c2)
==> [6]:
==>    [1]:
==>       1,1,1,1,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=(d2-f)
==>       _[2]=(cf-de)
==>       _[3]=(cd-e)
==>       _[4]=(b-c2)
==> [7]:
==>    [1]:
==>       2
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=y
==>       _[2]=x
==>    [4]:
==>       _[1]=(b-c2)*y+(-cd+e)
==>       _[2]=(-b+c2)*x+(-bd+ce)
==> [8]:
==>    [1]:
==>       2,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(bd2-bf+c2f-2cde+e2)
==> [9]:
==>    [1]:
==>       2,1,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=(cd-e)
==>       _[2]=(b-c2)
==> [10]:
==>    [1]:
==>       3
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=x
==>    [4]:
==>       _[1]=x+(c)*y+(d)
==> [11]:
==>    [1]:
==>       3,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(d2-f)
==>       _[2]=(cf-de)
==>       _[3]=(cd-e)
==>       _[4]=(b-c2)
==> [12]:
==>    [1]:
==>       3,1,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=1
cantreetoMaple(T,"Tm","Tm.txt");
//cantodiffcgs(T); // has non locally closed segments
ring R=(0,a1,a2,a3,a4),(x1,x2,x3,x4),dp;
==> // ** redefining R (ring R=(0,a1,a2,a3,a4),(x1,x2,x3,x4),dp;) ./examples/\
   mrcgs.sing:8
ideal F2=x4-a4+a2, x1+x2+x3+x4-a1-a3-a4, x1*x3*x4-a1*a3*a4, x1*x3+x1*x4+x2*x3+x3*x4-a1*a4-a1*a3-a3*a4;
def T2=mrcgs(F2);
==> // ** redefining @R (  exportto(Top,@R);      // global ring K[a][x])
==> // ** redefining @P (  exportto(Top,@P);      // global ring K[a])
==> // ** redefining @RP (  exportto(Top,@RP);     // global ring K[x,a] with\
    product order)
T2;
==> [1]:
==>    [1]:
==>       0
==>    [2]:
==>       3
==>    [3]:
==>       _[1]=x4
==>       _[2]=x1
==>       _[3]=x1*x3*x4
==>       _[4]=x1*x3
==>    [4]:
==>       _[1]=x4+(a2-a4)
==>       _[2]=x1+x2+x3+x4+(-a1-a3-a4)
==>       _[3]=x1*x3*x4+(-a1*a3*a4)
==>       _[4]=x1*x3+x2*x3+x1*x4+x3*x4+(-a1*a3-a1*a4-a3*a4)
==>    [5]:
==>       [1]:
==>          _[1]=0
==>       [2]:
==>          _[1]=0
==>       [3]:
==>          [1]:
==>             _[1]=0
==>    [6]:
==>       MRCGS
==> [2]:
==>    [1]:
==>       1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=x4
==>       _[2]=x1
==>       _[3]=x3^2
==>       _[4]=x2*x3
==>       _[5]=x2^2
==>    [4]:
==>       _[1]=x4+(a2-a4)
==>       _[2]=-x1-x2-x3+(a1+a2+a3)
==>       _[3]=x3^2+(-a2+a4)*x2+(-a1-a2-a3)*x3+(a1*a2+a1*a3+a2^2+a2*a3-a2*a4)
==>       _[4]=(a2-a4)*x2*x3+(a2^2-2*a2*a4+a4^2)*x2+(-a1*a2^2-a1*a2*a3+a1*a2*\
   a4-a2^3-a2^2*a3+2*a2^2*a4+a2*a3*a4-a2*a4^2)
==>       _[5]=(a2^2-2*a2*a4+a4^2)*x2^2+(-2*a1*a2^2-a1*a2*a3+3*a1*a2*a4+a1*a3\
   *a4-a1*a4^2-3*a2^3-2*a2^2*a3+7*a2^2*a4+3*a2*a3*a4-5*a2*a4^2-a3*a4^2+a4^3)\
   *x2+(-a1*a2^2-a1*a2*a3+a1*a2*a4-a2^3-a2^2*a3+2*a2^2*a4+a2*a3*a4-a2*a4^2)*\
   x3+(a1^2*a2^2+a1^2*a2*a3-a1^2*a2*a4+3*a1*a2^3+4*a1*a2^2*a3-5*a1*a2^2*a4+a\
   1*a2*a3^2-3*a1*a2*a3*a4+2*a1*a2*a4^2+2*a2^4+3*a2^3*a3-5*a2^3*a4+a2^2*a3^2\
   -5*a2^2*a3*a4+4*a2^2*a4^2-a2*a3^2*a4+2*a2*a3*a4^2-a2*a4^3)
==> [3]:
==>    [1]:
==>       1,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=0
==> [4]:
==>    [1]:
==>       1,1,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=(a2-a4)
==> [5]:
==>    [1]:
==>       2
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=1
==>    [4]:
==>       _[1]=1
==> [6]:
==>    [1]:
==>       2,1
==>    [2]:
==>       3
==>    [3]:
==>       _[1]=(a2-a4)
==> [7]:
==>    [1]:
==>       2,1,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=(a4)
==>       _[2]=(a2)
==> [8]:
==>    [1]:
==>       2,1,2
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=(a3)
==>       _[2]=(a2-a4)
==> [9]:
==>    [1]:
==>       2,1,3
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=(a2-a4)
==>       _[2]=(a1)
==> [10]:
==>    [1]:
==>       3
==>    [2]:
==>       3
==>    [3]:
==>       _[1]=x4
==>       _[2]=x1
==>       _[3]=x3^2
==>    [4]:
==>       _[1]=x4
==>       _[2]=-x1-x2-x3+(a1+a3+a4)
==>       _[3]=x3^2+(-a1-a3-a4)*x3+(a1*a3+a1*a4+a3*a4)
==> [11]:
==>    [1]:
==>       3,1
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(a4)
==>       _[2]=(a2)
==> [12]:
==>    [1]:
==>       3,1,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=1
==> [13]:
==>    [1]:
==>       3,2
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(a3)
==>       _[2]=(a2-a4)
==> [14]:
==>    [1]:
==>       3,2,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=1
==> [15]:
==>    [1]:
==>       3,3
==>    [2]:
==>       1
==>    [3]:
==>       _[1]=(a2-a4)
==>       _[2]=(a1)
==> [16]:
==>    [1]:
==>       3,3,1
==>    [2]:
==>       0
==>    [3]:
==>       _[1]=1
cantreetoMaple(T2,"T2m","T2m.txt");
cantodiffcgs(T2);
==> // ** redefining NP (    def NP=imap(RR,N);) redcgs.lib::cantodiffcgs:396\
   0
==> // ** redefining MP (    def MP=imap(RR,M);) redcgs.lib::cantodiffcgs:396\
   1
==> // ** redefining NP (    def NP=imap(RR,N);) redcgs.lib::cantodiffcgs:396\
   0
==> // ** redefining MP (    def MP=imap(RR,M);) redcgs.lib::cantodiffcgs:396\
   1
==> // ** redefining NP (    def NP=imap(RR,N);) redcgs.lib::cantodiffcgs:396\
   0
==> // ** redefining MP (    def MP=imap(RR,M);) redcgs.lib::cantodiffcgs:396\
   1
==> [1]:
==>    [1]:
==>       0
==>    [2]:
==>       3
==>    [3]:
==>       _[1]=x4
==>       _[2]=x1
==>       _[3]=x1*x3*x4
==>       _[4]=x1*x3
==>    [4]:
==>       _[1]=x4+(a2-a4)
==>       _[2]=x1+x2+x3+x4+(-a1-a3-a4)
==>       _[3]=x1*x3*x4+(-a1*a3*a4)
==>       _[4]=x1*x3+x2*x3+x1*x4+x3*x4+(-a1*a3-a1*a4-a3*a4)
==>    [5]:
==>       [1]:
==>          _[1]=0
==>       [2]:
==>          _[1]=0
==>       [3]:
==>          [1]:
==>             _[1]=0
==>    [6]:
==>       MRCGS
==> [2]:
==>    [1]:
==>       _[1]=x4
==>       _[2]=x1
==>       _[3]=x3^2
==>       _[4]=x2*x3
==>       _[5]=x2^2
==>    [2]:
==>       _[1]=x4+(a2-a4)
==>       _[2]=-x1-x2-x3+(a1+a2+a3)
==>       _[3]=x3^2+(-a2+a4)*x2+(-a1-a2-a3)*x3+(a1*a2+a1*a3+a2^2+a2*a3-a2*a4)
==>       _[4]=(a2-a4)*x2*x3+(a2^2-2*a2*a4+a4^2)*x2+(-a1*a2^2-a1*a2*a3+a1*a2*\
   a4-a2^3-a2^2*a3+2*a2^2*a4+a2*a3*a4-a2*a4^2)
==>       _[5]=(a2^2-2*a2*a4+a4^2)*x2^2+(-2*a1*a2^2-a1*a2*a3+3*a1*a2*a4+a1*a3\
   *a4-a1*a4^2-3*a2^3-2*a2^2*a3+7*a2^2*a4+3*a2*a3*a4-5*a2*a4^2-a3*a4^2+a4^3)\
   *x2+(-a1*a2^2-a1*a2*a3+a1*a2*a4-a2^3-a2^2*a3+2*a2^2*a4+a2*a3*a4-a2*a4^2)*\
   x3+(a1^2*a2^2+a1^2*a2*a3-a1^2*a2*a4+3*a1*a2^3+4*a1*a2^2*a3-5*a1*a2^2*a4+a\
   1*a2*a3^2-3*a1*a2*a3*a4+2*a1*a2*a4^2+2*a2^4+3*a2^3*a3-5*a2^3*a4+a2^2*a3^2\
   -5*a2^2*a3*a4+4*a2^2*a4^2-a2*a3^2*a4+2*a2*a3*a4^2-a2*a4^3)
==>    [3]:
==>       _[1]=0
==>    [4]:
==>       _[1]=(a2-a4)
==> [3]:
==>    [1]:
==>       _[1]=1
==>    [2]:
==>       _[1]=1
==>    [3]:
==>       _[1]=(a2-a4)
==>    [4]:
==>       _[1]=(a2-a4)
==>       _[2]=(a1*a3*a4)
==> [4]:
==>    [1]:
==>       _[1]=x4
==>       _[2]=x1
==>       _[3]=x3^2
==>    [2]:
==>       _[1]=x4
==>       _[2]=-x1-x2-x3+(a1+a3+a4)
==>       _[3]=x3^2+(-a1-a3-a4)*x3+(a1*a3+a1*a4+a3*a4)
==>    [3]:
==>       _[1]=(a2-a4)
==>       _[2]=(a1*a3*a4)
==>    [4]:
==>       _[1]=1