|
D.4.5.2 elimRing
Procedure from library elim.lib (see elim_lib).
- Usage:
- elimRing(vars [,w,str]); vars = product of variables to be eliminated
(type poly), w = intvec (specifying weights for all variables),
str = string either "a" or "b" (default: w=ringweights, str="a")
- Return:
- a list, say L, with R:=L[1] a ring and L[2] an intvec.
The ordering in R is an elimination ordering for the variables
appearing in vars depending on "a" resp. "b". Let w1 (resp. w2)
be the intvec of weights of the variables to be eliminated (resp. not
to be eliminated).
The monomial ordering of R has always 2 blocks, the first
block corresponds to the (given) variables to be eliminated.
If str = "a" the first block is a(w1,0..0) and the second block is
wp(w) resp. ws(w) if the first variable not to be eliminated is local.
If str = "b" the 1st block has ordering wp(w1) and the 2nd block
is wp(w2) resp. ws(w2) if the first variable not to be eliminated is
local.
If the basering is a quotient ring P/Q, then R is also a quotient ring
with Q replaced by a standard basis of Q w.r.t. the new ordering
(parameters are not touched).
The intvec L[2] is the intvec of variable weights (or the given w)
with weights <= 0 replaced by 1.
- Purpose:
- Prepare a ring for eliminating vars from an ideal/module by
computing a standard basis in R with a fast monomial ordering.
This procedure is used by the procedure elim.
Example:
| LIB "elim.lib";
ring R = 0,(x,y,z,u,v),(c,lp);
def P = elimRing(yu); P;
==> [1]:
==> // coefficients: QQ
==> // number of vars : 5
==> // block 1 : ordering a
==> // : names y u x z v
==> // : weights 1 1 0 0 0
==> // block 2 : ordering dp
==> // : names y u x z v
==> // block 3 : ordering C
==> [2]:
==> 1,1,1,1,1
intvec w = 1,1,3,4,5;
elimRing(yu,w);
==> [1]:
==> // coefficients: QQ
==> // number of vars : 5
==> // block 1 : ordering a
==> // : names y u x z v
==> // : weights 1 4 0 0 0
==> // block 2 : ordering wp
==> // : names y u x z v
==> // : weights 1 1 3 4 5
==> // block 3 : ordering C
==> [2]:
==> 1,1,3,4,5
ring S = (0,a),(x,y,z,u,v),ws(1,2,3,4,5);
minpoly = a2+1;
qring T = std(ideal(x+y2+v3,(x+v)^2));
def Q = elimRing(yv)[1];
setring Q; Q;
==> // coefficients: QQ[a]/(a2+1)
==> // number of vars : 5
==> // block 1 : ordering a
==> // : names y v x z u
==> // : weights 2 5 0 0 0
==> // block 2 : ordering ws
==> // : names y v x z u
==> // : weights 1 2 3 4 5
==> // block 3 : ordering C
==> // quotient ring from ideal
==> _[1]=y2+2*yu+u2
==> _[2]=v2+y+u3
|
|