# Singular

### 5.1.79 liftstd

`Syntax:`
`liftstd (` ideal_expression`,` matrix_name `)`
`liftstd (` module_expression`,` matrix_name `)`
`liftstd (` ideal_expression`,` matrix_name`,` module_name `)`
`liftstd (` module_expression`,` matrix_name`,` module_name `)`
`liftstd (` ideal_expression`,` matrix_name`,` module_name`,` string_expression `)`
`liftstd (` module_expression`,` matrix_name`,` module_name`,` string_expression `)`
`Type:`
ideal or module
`Purpose:`
returns a standard basis of an ideal or module and the transformation matrix from the given ideal, resp. module, to the standard basis.
That is, if `m` is the ideal or module, `sm` the standard basis returned by `liftstd`, and `T` the transformation matrix then `matrix(sm)=matrix(m)*T` and `sm=ideal(matrix(m)*T)`, resp. `sm=module(matrix(m)*T)`.
In an optional third argument the syzygy module will be returned. if working in a quotient ring, then `matrix(sm)=reduce(matrix(m)*T,0)` and `sm=reduce(ideal(matrix(m)*T),0)`.
An optional 4th argument specifies the Groebner base algorith to use. Possible values are `"std"` and `"slimgb"`.
`Example:`
 ``` ring R=0,(x,y,z),dp; poly f=x3+y7+z2+xyz; ideal i=jacob(f); matrix T; ideal sm=liftstd(i,T); sm; ==> sm[1]=xy+2z ==> sm[2]=3x2+yz ==> sm[3]=yz2+3048192z3 ==> sm[4]=3024xz2-yz2 ==> sm[5]=y2z-6xz ==> sm[6]=3097158156288z4+2016z3 ==> sm[7]=7y6+xz print(T); ==> 0,1,T[1,3], T[1,4],y, T[1,6],0, ==> 0,0,-3x+3024z,3x, 0, T[2,6],1, ==> 1,0,T[3,3], T[3,4],-3x,T[3,6],0 matrix(sm)-matrix(i)*T; ==> _[1,1]=0 ==> _[1,2]=0 ==> _[1,3]=0 ==> _[1,4]=0 ==> _[1,5]=0 ==> _[1,6]=0 ==> _[1,7]=0 module s; sm=liftstd(i,T,s); print(s); ==> -xy-2z,7y6+xz, -7056y6-1008xz, ==> 0, -3x2-yz,3024x2-xy+1008yz-2z, ==> 3x2+yz,0, 7y6+xz ```
See division; ideal; lift; matrix; option; ring; std; syz.