up previous next
GLPK.RIPCSolve

Solves a system of polynomial equations over F_2 for one solution in F_2^n.
Syntax
          
GLPK.RIPCSolve(F:LIST, Rule1:INT, Rule2:INT, MinMax:STRING):LIST

          

Description
Please note: The function(s) explained on this page is/are using the ApCoCoAServer. You will have to start the ApCoCoAServer in order to use it/them.

This function finds one solution (if exists) in F_2^n of a system of polynomial equations over the field F_2. This function uses Integer Polynomial Conversion (IPC) along with some standard rules, for linearizein 0-1 nonlinear polynomial functions into 0-1 linear polynomials, to model the solution of system F as a mixed integer linear programming problem. The linearization involves adding two kind of 0-1 linear constraints. Rule1 and Rule2 handle the first and the second kind of constriants respectively. Afterwards, the mixed integer linear programming problem is solved using glpk. Finally, an inverse conversion is applied to obtain the solution of the system F.

Example
Use Z/(2)[x[1..4]];
F:=[
    x[1]x[2] + x[2]x[3] + x[2]x[4] + x[3]x[4] + x[1] + x[3] + 1, 
    x[1]x[2] + x[1]x[3] + x[1]x[4] + x[3]x[4] + x[2] + x[3] + 1, 
    x[1]x[2] + x[1]x[3] + x[2]x[3] + x[3]x[4] + x[1] + x[4] + 1, 
    x[1]x[3] + x[2]x[3] + x[1]x[4] + x[2]x[4] + 1
    ];

Rule1:=0;
Rule2:=0;
MinMax:="Max";

-- Then we compute the solution with

GLPK.RIPCSolve(F, Rule1, Rule2, MinMax);

-- The result will be the following:
Input ok...
Modelling the system as a mixed integer programming problem. 
Rule1: 0, Rule2: 0.
Model is ready to solve with GLPK...

Solution Status: INTEGER OPTIMAL
Value of objective function: 2

[0, 1, 0, 1]
-------------------------------


Example
Use S::=Z/(2)[x[1..5]];
F:=[
 x[1]x[5] + x[3]x[5] + x[4]x[5] + x[1] + x[4],
 x[1]x[2] + x[1]x[4] + x[3]x[4] + x[1]x[5] + x[2]x[5] + x[3]x[5] + x[1] + x[4] + x[5] + 1,
 x[1]x[2] + x[4]x[5] + x[1] + x[2] + x[4],
 x[1]x[4] + x[3]x[4] + x[2]x[5] + x[1] + x[2] + x[4] + x[5] + 1,
 x[1]x[4] + x[2]x[4] + x[3]x[4] + x[2]x[5] + x[4]x[5] + x[1] + x[2] + x[4] + x[5]
];


Rule1:=1;
Rule2:=0;
MinMax:="Max";

-- Then we compute the solution with

GLPK.RIPCSolve(F, Rule1, Rule2, MinMax);

-- The result will be the following:
Input ok...
Modelling the system as a mixed integer programming problem. 
Rule1: 1, Rule2: 0.
Model is ready to solve with GLPK...
Solution Status: INTEGER OPTIMAL
Value of objective function: 4

[1, 1, 1, 1, 0]
-------------------------------


Example
Use ZZ/(2)[x[1..3]];
F := [ x[1]x[2]x[3] + x[1]x[2] + x[2]x[3] + x[1] + x[3] +1,
       x[1]x[2]x[3] + x[1]x[2] + x[2]x[3] + x[1] + x[2],
       x[1]x[2] + x[2]x[3] + x[2]
     ];


Rule1:=0;
Rule2:=1;
MinMax:="Max";

-- Then we compute the solution with

GLPK.RIPCSolve(F, Rule1, Rule2, MinMax);

-- The result will be the following:
Input ok...
Modelling the system as a mixed integer programming problem. 
Rule1: 0, Rule2: 1.
Model is ready to solve with GLPK...

Solution Status: INTEGER OPTIMAL
Value of objective function: 1

[0, 0, 1]
-------------------------------