# Singular

#### D.8.1.2 PEsolve

Procedure from library ffsolve.lib (see ffsolve_lib).

Usage:
PEsolve(I[, i]); I ideal, i optional integer
solve I (system of multivariate equations) over a
finite field using an equvalence property when i is
not given or set to 2, otherwise if i is set to 0
then check whether common roots exists

Return:
list if optional parameter is not given or set to 2,
integer if optional is set to 0

Assume:
basering is a finite field of type (p^n,a)

Note:
When the optional parameter is set to 0, speoff only
checks if I has common roots, then return 1, otherwise
return 0.

Example:
 LIB "ffsolve.lib"; ring R = (2,a),x(1..3),lp; minpoly=a2+a+1; ideal I; I[1]=x(1)^2*x(2)+(a)*x(1)*x(2)^2+(a+1); I[2]=x(1)^2*x(2)*x(3)^2+(a)*x(1); I[3]=(a+1)*x(1)*x(3)+(a+1)*x(1); PEsolve(I); ==> // ** redefining I ( ideal I = defaultIdeal();) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> // ** redefining res ( ideal res;) ==> // ** redefining new ( list new = increment(start,i);) ==> // ** redefining l (int l=1;) ==> [1]: ==> _[1]=x(3)+1 ==> _[2]=x(2)+(a) ==> _[3]=x(1)+1 ==> [2]: ==> _[1]=x(3)+1 ==> _[2]=x(2)+(a+1) ==> _[3]=x(1)+(a+1)