Singular

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
"An Algebraic Taxonomy for Locus Computation in Dynamic Geometry". Computer-Aided Design 56 (2014) 22-33.
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 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.

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^2-4,(b-2)*x-a*y+2*a,(a-x)^2+(b-y)^2-1; S96; ==> S96[1]=x^2+y^2-4 ==> S96[2]=(b-2)*x+(-a)*y+(2*a) ==> S96[3]=x^2+y^2+(-2*a)*x+(-2*b)*y+(a^2+b^2-1) locus(grobcov(S96)); ==> [1]: ==> [1]: ==> _[1]=(a^4+2*a^2*b^2-9*a^2+b^4-9*b^2+4*b+12) ==> [2]: ==> [1]: ==> _[1]=1 ==> [3]: ==> Normal ==> [4]: ==> 1 ==> [2]: ==> [1]: ==> _[1]=(a^2+b^2-4*b+3) ==> [2]: ==> [1]: ==> _[1]=1 ==> [3]: ==> [1]: ==> Special ==> [2]: ==> y-2,x ==> [4]: ==> 1