# Singular

#### D.8.2.3 elimpart

Procedure from library `presolve.lib` (see presolve_lib).

Usage:
elimpart(i [,n,e] ); i=ideal, n,e=integers
n : only the first n vars are considered for substitution,
e =0: substitute from linear part of i (same as elimlinearpart)
e!=0: eliminate also by direct substitution
(default: n = nvars(basering), e = 1)

Return:
list of 5 objects:
 ``` [1]: ideal obtained by substituting from the first n variables those from i, which appear in the linear part of i (or, if e!=0, which can be expressed directly in the remaining vars) [2]: ideal, variables which have been substituted [3]: ideal, i-th element defines substitution of i-th var in [2] [4]: ideal of variables of basering, substituted ones are set to 0 [5]: ideal, describing the map from the basering, say k[x(1..m)], to itself onto k[..variables from [4]..] and [1] is the image of i ```
The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5] maps [3] to 0, hence induces an isomorphism
 ``` k[x(1..m)]/i -> k[..variables from [4]..]/[1] ```

Note:
Applying elimpart to interred(i) may result in more substitutions. However, interred may be more expansive than elimpart for big ideals

Example:
 ```LIB "presolve.lib"; ring s=0,(u,x,y,z),dp; ideal i = xy2-xu4-x+y2,x2y2+z3+zy,y+z2+1,y+u2; elimpart(i); ==> [1]: ==> _[1]=u2-z2-1 ==> _[2]=u12-u2z+z3 ==> [2]: ==> _[1]=y ==> _[2]=x ==> [3]: ==> _[1]=u2+y ==> _[2]=-u4+x ==> [4]: ==> _[1]=u ==> _[2]=0 ==> _[3]=0 ==> _[4]=z ==> [5]: ==> _[1]=u ==> _[2]=u4 ==> _[3]=-u2 ==> _[4]=z i = interred(i); i; ==> i[1]=z2+y+1 ==> i[2]=y2-x ==> i[3]=u2+y ==> i[4]=x3+z3+yz elimpart(i); ==> [1]: ==> _[1]=u2-z2-1 ==> _[2]=u12-u2z+z3 ==> [2]: ==> _[1]=x ==> _[2]=y ==> [3]: ==> _[1]=-y2+x ==> _[2]=u2+y ==> [4]: ==> _[1]=u ==> _[2]=0 ==> _[3]=0 ==> _[4]=z ==> [5]: ==> _[1]=u ==> _[2]=u4 ==> _[3]=-u2 ==> _[4]=z elimpart(i,2); ==> [1]: ==> _[1]=z2+y+1 ==> _[2]=u2+y ==> _[3]=y6+z3+yz ==> [2]: ==> _[1]=x ==> [3]: ==> _[1]=-y2+x ==> [4]: ==> _[1]=u ==> _[2]=0 ==> _[3]=y ==> _[4]=z ==> [5]: ==> _[1]=u ==> _[2]=y2 ==> _[3]=y ==> _[4]=z ```