# Singular          #### D.4.28.6 syModStd

Procedure from library `symodstd.lib` (see symodstd_lib).

Usage:
syModStd(I,sigma); I ideal, sigma intvec

Assume:
size(sigma) = nvars(basering) and sigma(I) = I. If size(#) > 0, then # contains either 1, 2 or 4 integers such that
- # is the number of available processors for the computation,
- # is an optional parameter for the exactness of the computation, if # = 1, the procedure computes a standard basis for sure,
- # is the number of primes until the first lifting,
- # is the constant number of primes between two liftings until the computation stops.

Return:
ideal, a standard basis of I if no warning appears;

Note:
The procedure computes a standard basis of the ideal I (over the rational numbers) by using modular methods and the fact that I is invariant under the variable permutation sigma.
By default the procedure computes a standard basis of I for sure, but if the optional parameter # = 0, it computes a standard basis of I with high probability.
The procedure distinguishes between different variants for the standard basis computation in positive characteristic depending on the ordering of the basering, the parameter # and if the ideal I is homogeneous.
- variant = 1, if I is homogeneous,
- variant = 2, if I is not homogeneous, 1-block-ordering,
- variant = 3, if I is not homogeneous, complicated ordering (lp or > 1 block),
- variant = 4, if I is not homogeneous, ordering lp, dim(I) = 0.

Example:
 ```LIB "symodstd.lib"; ring R1 = 0, (x,y,z), dp; ideal I; I = -2xyz4+xz5+xz; I = -2xyz4+yz5+yz; intvec sigma = 2,1,3; ideal sI = syModStd(I,sigma); sI; ==> sI=x2yz-xy2z ==> sI=xz5-yz5+xz-yz ==> sI=xyz4-1/2yz5-1/2yz ==> sI=y2z5-1/2yz6-xyz+y2z-1/2yz2 ring R2 = 0, x(1..4), dp; ideal I = cyclic(4); I; ==> I=x(1)+x(2)+x(3)+x(4) ==> I=x(1)*x(2)+x(2)*x(3)+x(1)*x(4)+x(3)*x(4) ==> I=x(1)*x(2)*x(3)+x(1)*x(2)*x(4)+x(1)*x(3)*x(4)+x(2)*x(3)*x(4) ==> I=x(1)*x(2)*x(3)*x(4)-1 intvec pi = 2,3,4,1; ideal sJ1 = syModStd(I,pi,1); ideal sJ2 = syModStd(I,pi,1,0); size(reduce(sJ1,sJ2)); ==> 0 size(reduce(sJ2,sJ1)); ==> 0 ```

### Misc 