Home Online Manual
Back: locusdg
Forward: locusto
Up: grobcov_lib
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

D.2.4.15 envelop

Procedure from library grobcov.lib (see grobcov_lib).

envelop(poly F,ideal C[,options]);
poly F must represent the family of hyper-surfaces for which on want to compute its envelop. ideal C must be the ideal of restrictions on the variables defining the family, and should contain less polynomials than the number of variables.
(x_1,..,x_n) are the variables of the hyper-surfaces of F, that are considered as parameters of the parametric ring. (u_1,..,u_m) are the parameteres of the hyper-surfaces, that are considered as variables of the parametric ring. Calling sequence:
ring R=(0,x_1,..,x_n),(u_1,..,u_m),lp;
poly F=F(x_1,..,x_n,u_1,..,u_m);
ideal C=g_1(u_1,..u_m),..,g_s(u_1,..u_m);
envelop(F,C[,options]); where s<m.

The output is a list of the components [C_1, .. , C_n] of the locus. Each component is given by Ci=[pi,[pi1,..pi_s_i],type_i,level_i]
where the first element is the canonical P-representation of the subset. The type is one of "Normal", "Special", "Accumulation" or "Degenerate", and level is the depth of the segment in the constructible set of the locus. Generally it is 1, because the locus components are locally closed. The locus is divided into two class of subsets: the normal and the non-normal locus. The Normal locus has two kind of components: "Normal" and "Special". The Non-normal locus has two kind of components: "Accumulation" and "Degenerate". Normal component is n-1-dimensional component, where each point in the component has 0-dimensional antiimage, and the anti-image depends on the point in the component. Special component is n-1-dimensional component, where each point in the component has 0-dimensional antiimage, and the anti-image does not depend on the point in it. The Special components return more information, namely the antiimage of the component, that is 0-dimensional, and is independent of the point in the locus component.
Accumulation component is of dimension less that n-1 (less than an hyper-surface) whose anti-image is non-zero dimensional.
Degenerate components is n-1-dimensional component, and each point in the component has non-zero- dimensional anti-image.
The level is the depth of the segment of the constructible locus subset (normal and non-normal subsets). If all levels of a locus are 1, then all subsets are locally closed.

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. The algorithm allows the following options as pair of arguments: "vmov", ideal(mover variables) : by default vmov are u_1,..,u_m. But it can be restricted by the user to the more convenient ones.
"version", v : There are two versions of the algorithm. ("version",1) is a full algorithm that always distinguishes correctly between "Normal" and "Special" components, whereas ("version",0) can declare a component as "Normal" being really "Special", but is more effective. By default ("version",1) is used when the number of variables is less than 4 and 0 if not. The user can force to use one or other version, but it is not recommended.
"comments", c: by default it is 0, but it can be set to 1.

grobcov and locus are called internally.
The basering R, must be of the form Q[a][x] (a=parameters, x=variables). This routine uses the generalized definition of envelop introduced in the book A. Montes. "Discussing Parametric Polynomial Systems: The Groebner Cover" not yet published.

LIB "grobcov.lib";
// Steiner Deltoid
// 1. Consider the circle x1^2+y1^2-1=0, and a mover point M(x1,y1) on it.
// 2. Consider the triangle A(0,1), B(-1,0), C(1,0).
// 3. Consider lines passing through M perpendicular to two sides of ABC triangle.
// 4. Obtain the envelop of the lines above.
if(defined(R)){kill R;}
ring R=(0,x,y),(x1,y1,x2,y2),lp;
ideal C=(x1)^2+(y1)^2-1,
matrix M[3][3]=x,y,1,x2,y2,1,x1,0,1;
poly F=det(M);
// Curves Family F
==> -x1*y2+(y)*x1+(-y)*x2+(x)*y2
// Conditions C=
==> C[1]=x1^2+y1^2-1
==> C[2]=x2+y2-1
==> C[3]=-x1+y1+x2-y2
==> [1]:
==>    [1]:
==>       _[1]=(x^4+2*x^2*y^2+10*x^2*y-x^2+y^4-6*y^3+12*y^2-8*y)
==>    [2]:
==>       [1]:
==>          _[1]=1
==>    [3]:
==>       Normal
==>    [4]:
==>       1
==> [2]:
==>    [1]:
==>       _[1]=(x+y-1)
==>    [2]:
==>       [1]:
==>          _[1]=1
==>    [3]:
==>       [1]:
==>          Special
==>       [2]:
==>          y2,x2-1,y1,x1-1
==>    [4]:
==>       1