Elimination is the algebraic counterpart of the geometric concept of
is a polynomial map,
the Zariski-closure of the image is the zero-set of the ideal
that is, of the ideal j obtained from J by eliminating the variables
.This can be done by computing a Groebner basis for J with respect to a
(global) product ordering where the block of t-variables precedes the block of
x-variables, and then selecting those polynomials which do not contain
any t. Alternatively, we may use a global monomial ordering with extra
weight vector (see Extra weight vector), assigning to the
t-variables a positive weight and to the x-variables weight 0.
Since elimination is expensive, it may be useful to use a Hilbert-driven
approach to the elimination problem (see Groebner basis conversion):
First compute the Hilbert function of the ideal w.r.t.
a fast ordering (e.g.,
dp), then make use of it to speed up the
computation by a Hilbert-driven elimination which uses the
intvec provided as
In SINGULAR the most convenient way is to use the
In contrast to the first method, with
eliminate the result needs not be a
standard basis in the given ordering.
Hence, there may be cases where the first method is the preferred one.
WARNING: In the case of a local or a mixed ordering,
elimination needs special care. f may be considered as a map of germs
if this map germ is finite, we are in general not able to compute the image
germ because for this we would need an implementation of the Weierstrass
preparation theorem. What we can compute, and what
actually does, is the following: let V(J) be the zero-set of J in
closure of the image of V(J) under the projection
can be computed.(Note that this germ contains also those components
of V(J) which meet the fiber of pr outside the origin.)
This is achieved by an ordering with the block of t-variables having a
global ordering (and preceding the x-variables) and the x-variables having
a local ordering.
In any case, if the input is weighted homogeneous (=quasihomogeneous),
the weights given to the variables should be chosen accordingly.
SINGULAR offers a function
weight which proposes,
given an ideal or module, integer weights for the variables, such that
the ideal, resp. module, is as homogeneous as possible with respect to these weights.
The function finds correct weights, if the input is weighted homogeneous
(but is rather slow for many variables). In order to check, whether the
input is quasihomogeneous, use the function
qhweight, which returns
intvec of correct weights if the input is quasihomogeneous and an
of zeros otherwise.
Let us give three examples:
First we compute the equations of the simple space curve 'T'
consisting of two tangential cusps given in parametric form.
We compute weights for the equations such that the
equations are quasihomogeneous w.r.t. these weights.
Then we compute the tangent developable of the rational
normal curve in
// 1. Compute equations of curve given in parametric form:
// Two transversal cusps in (k^3,0):
ring r1 = 0,(t,x,y,z),ls;
ideal i1 = x-t2,y-t3,z; // parametrization of the first branch
ideal i2 = y-t2,z-t3,x; // parametrization of the second branch
ideal j1 = eliminate(i1,t);
j1; // equations of the first branch
ideal j2 = eliminate(i2,t);
j2; // equations of the second branch
// Now map to a ring with only x,y,z as variables and compute the
// intersection of j1 and j2 there:
ring r2 = 0,(x,y,z),ds;
ideal j1= imap(r1,j1); // imap is a convenient ringmap for
ideal j2= imap(r1,j2); // inclusions and projections of rings
ideal i = intersect(j1,j2);
i; // equations of both branches
// 2. Compute the weights:
intvec v= qhweight(i); // compute weights
// 3. Compute the tangent developable
// The tangent developable of a projective variety given parametrically
// by F=(f1,...,fn) : P^r --> P^n is the union of all tangent spaces
// of the image. The tangent space at a smooth point F(t1,...,tr)
// is given as the image of the tangent space at (t1,...,tr) under
// the tangent map (affine coordinates)
// T(t1,...,tr): (y1,...,yr) --> jacob(f)*transpose((y1,...,yr))
// where jacob(f) denotes the jacobian matrix of f with respect to the
// t's evaluated at the point (t1,...,tr).
// Hence we have to create the graph of this map and then to eliminate
// the t's and y's.
// The rational normal curve in P^4 is given as the image of
// F(s,t) = (s4,s3t,s2t2,st3,t4)
// each component being homogeneous of degree 4.
ring P = 0,(s,t,x,y,a,b,c,d,e),dp;
ideal M = maxideal(1);
ideal F = M[1..2]; // take the 1st two generators of M
// simplify(...,2); deletes 0-columns
matrix jac = simplify(jacob(F),2);
ideal T = x,y;
ideal J = jac*transpose(T);
ideal H = M[5..9];
ideal i = matrix(H)-matrix(J);// this is tricky: difference between two
// ideals is not defined, but between two
// matrices. By type conversion
// the ideals are converted to matrices,
// subtracted and afterwards converted
// to an ideal. Note that '+' is defined
// and adds (concatenates) two ideals
// Now we define a ring with product ordering and weights 4
// for the variables a,...,e.
// Then we map i from P to P1 and eliminate s,t,x,y from i.
ring P1 = 0,(s,t,x,y,a,b,c,d,e),(dp(4),wp(4,4,4,4,4));
ideal i = fetch(P,i);
ideal j= eliminate(i,stxy); // equations of tangent developable
// We can use the product ordering to eliminate s,t,x,y from i
// by a std-basis computation.
// We need proc 'nselect' from elim.lib.
j = std(i); // compute a std basis j
j = nselect(j,1..4); // select generators from j not
j; // containing variable 1,...,4