#### D.8.3.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

User manual for Singular version 4.4.1, 2025, generated by texi2html.