
D.2.4.13 locus
Procedure from library grobcov.lib (see grobcov_lib).
 Usage:
 locus(list G[,options])
The list G must be the output of grobcov. Calling sequence: locus(grobcov(S))[,options]);
The input must be the grobcov of a parametrical ideal in Q[a][x], (a=parameters, x=variables). In practice
a must be the tracer coordinates and x the mover coordinates and remaining auxiliary variables. (Invert the
concept of parameters and variables of the ring).
Special routine for determining the locus of points of geometrical constructions. Given a parametric ideal J
representing the system determining the locus of points (a) which verify certain properties, the call to locus
on the output of grobcov(J) determines the different classes of locus components, following the taxonomy
defined in
Abanades, Botana, Montes, Recio:
"An Algebraic Taxonomy for Locus Computation in Dynamic Geometry".
ComputerAided Design 56 (2014) 2233.
The components can be "Normal", "Special", "Accumulation" or "Degenerate".
 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.
The algorithm allows the following options as pair of arguments:
"vmov", ideal(mover variables) : by default vmov are the last n variables, where n is the number of parameters
of the ring (tracer variables plus extra parameters). Thus, if the mover coordinates are not indicated, locus
algorithm will assume that they are the last n ring variables.
When locus is called internally by envelop, by default, the mover variables are assumed to be all the ring variables.
"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 to be "Normal" being in fact "Special", but it 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.
Usually locus problems have mover coordinates, variables and tracer coordinates.
Example of option call:
locus(S,"version",1,"vmov",ideal(x1,y1))
 Return:
 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 Prepresentation 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 nonnormal locus.
The Normal locus has two kind of components: "Normal" and "Special".
The Nonnormal locus has two kind of components: "Accumulation" and "Degenerate".
Normal component is n1dimensional component, where each point in the component has 0dimensional
antiimage, and the antiimage depends on the point in the component.
Special component is n1dimensional component, where each point in the component has 0dimensional
antiimage, and the antiimage does not depend on the point in it. The Special components return more
information, namely the antiimage of the component, that is 0dimensional, and is independent of the point
in the locus component.
Accumulation component is of dimension less that n1 (less than an hypersurface) whose antiimage is
nonzero dimensional.
Degenerate components is n1dimensional component, and each point in the component has nonzero
dimensional antiimage.
The level is the depth of the segment of the constructible locus subset (normal and nonnormal subsets).
If all levels of a locus are 1, then all subsets are locally closed.
 Note:
 The input must be the grobcov of the locus system in generic representation ("ext",0), which is the default.
Example:
 LIB "grobcov.lib";
if(defined(R)){kill R;}
ring R=(0,a,b),(x,y),dp;
short=0;
// Concoid
ideal S96=x^2+y^24,(b2)*xa*y+2*a,(ax)^2+(by)^21;
S96;
==> S96[1]=x^2+y^24
==> S96[2]=(b2)*x+(a)*y+(2*a)
==> S96[3]=x^2+y^2+(2*a)*x+(2*b)*y+(a^2+b^21)
locus(grobcov(S96));
==> [1]:
==> [1]:
==> _[1]=(a^4+2*a^2*b^29*a^2+b^49*b^2+4*b+12)
==> [2]:
==> [1]:
==> _[1]=1
==> [3]:
==> Normal
==> [4]:
==> 1
==> [2]:
==> [1]:
==> _[1]=(a^2+b^24*b+3)
==> [2]:
==> [1]:
==> _[1]=1
==> [3]:
==> [1]:
==> Special
==> [2]:
==> y2,x
==> [4]:
==> 1

