Singular

5.1.124 reduce

`Syntax:`
`reduce (` poly_expression`,` ideal_expression `)`
`reduce (` poly_expression`,` ideal_expression`,` int_expression `)`
`reduce (` poly_expression`,` poly_expression`,` ideal_expression `)`
`reduce (` vector_expression`,` ideal_expression `)`
`reduce (` vector_expression`,` ideal_expression`,` int_expression `)`
`reduce (` vector_expression`,` module_expression `)`
`reduce (` vector_expression`,` module_expression`,` int_expression `)`
`reduce (` vector_expression`,` poly_expression`,` module_expression `)`
`reduce (` ideal_expression`,` ideal_expression `)`
`reduce (` ideal_expression`,` ideal_expression`,` int_expression `)`
`reduce (` ideal_expression`,` matrix_expression`,` ideal_expression `)`
`reduce (` module_expression`,` ideal_expression `)`
`reduce (` module_expression`,` ideal_expression`,` int_expression `)`
`reduce (` module_expression`,` module_expression `)`
`reduce (` module_expression`,` module_expression`,` int_expression `)`
`reduce (` module_expression`,` matrix_expression`,` module_expression `)`
`reduce (` poly/vector/ideal/module`,` ideal/module`,` int`,` intvec `)`
`reduce (` ideal`,` matrix`,` ideal`,` int `)`
`reduce (` poly`,` poly`,` ideal`,` int `)`
`reduce (` poly`,` poly`,` ideal`,` int`,` intvec `)`
`Type:`
the type of the first argument
`Purpose:`
reduces a polynomial, vector, ideal or module to its normal form with respect to an ideal or module represented by a standard basis. Returns 0 if and only if the polynomial (resp. vector, ideal, module) is an element (resp. subideal, submodule) of the ideal (resp. module). The result may have no meaning if the second argument is not a standard basis.
The third (optional) argument of type int modifies the behavior:
• 0 default
• 1 consider only the leading term and do no tail reduction.
• 2 reduce also with bad ecart (in the local case)
• 4 reduce without division, return possibly a non-zero constant multiple of the remainder

If a second argument `u` of type poly or matrix is given, the first argument `p` is replaced by `p/u`. This works only for zero dimensional ideals (resp. modules) in the third argument and gives, even in a local ring, a reduced normal form which is the projection to the quotient by the ideal (resp. module). One may give a degree bound in the fourth argument with respect to a weight vector in the fifth argument in order have a finite computation. If some of the weights are zero, the procedure may not terminate!
`Note:`
The commands `reduce` and `NF` are synonymous.
`Example:`
 ``` ring r1 = 0,(z,y,x),ds; poly s1=2x5y+7x2y4+3x2yz3; poly s2=1x2y2z2+3z8; poly s3=4xy5+2x2y2z3+11x10; ideal i=s1,s2,s3; ideal j=std(i); reduce(3z3yx2+7y4x2+yx5+z12y2x2,j); ==> -yx5+2401/81y14x2+2744/81y11x5+392/27y8x8+224/81y5x11+16/81y2x14 reduce(3z3yx2+7y4x2+yx5+z12y2x2,j,1); ==> -yx5+z12y2x2 // 4 arguments: ring rs=0,x,ds; // normalform of 1/(1+x) w.r.t. (x3) up to degree 5 reduce(poly(1),1+x,ideal(x3),5); ==> // ** _ is no standard basis ==> 1-x+x2 ```
See ideal; module; std; vector.