Micromega_plugin.LinsolveThe purpose of the solver is to generate *all* the integer solutions of a system of linear equations of the following form: 1- all the variables are positive 2- all the coefficients are positive
We expect the systems and the number of solutions to be small. This motivates a simple solver which performs 1 - interval analysis 2 - substitutions 3 - enumeration
system represents a system of equation. Each equation is indexed by a unique identifier id (an integer).
An equation eqn is of the form a1.x1 + ... + an.xn = a0 where the ai are integer coefficients and xi are variables.
val output_equations : Stdlib.out_channel -> eqn list -> unitoutput_equations o l prints the list of equations
val empty : systemempty is the system with no equation
set_constant i c s returns the equation i of the system s where the constant a0 is set to c
make_mon i x a s augments the system s with the equation a.x = 0 indexed by i
merge s1 s2 returns a system s such that the equation i is obtained by adding of the equations s1(i) and s2(i) i.e. s(i) = s1(i) + s2(i) NB: the operation is only well-defined if the variables in s1(i) and s2(i) is disjoint
type solution = (var * int) listsolution assigns a value to each variable
val output_solutions : Stdlib.out_channel -> solution list -> unitoutput_solutions o l outputs the list of solutions