module Solve:sig..end
typesolution =(Monome.term * Monome.Int.t) list
val split_solution : solution ->
Libzipperposition.Substs.t * solutionval diophant2 : Z.t -> Z.t -> Z.t -> Z.t * Z.t * Z.tFailure if the equation is unsolvableu, v, gcd such that for all int k,
u + b * k, v - a * k is solution of equation a * x + b * y = const.val diophant_l : Z.t list -> Z.t -> Z.t list * Z.tFailure if the equation is not solvableval coeffs_n : Z.t list -> Z.t -> Monome.term list -> Monome.Int.t listcoeffs_n l gcd, if length l = n, returns a function that
takes a list of n-1 terms k1, ..., k(n-1) and returns a list of
monomes m1, ..., mn that depend on k1, ..., k(n-1) such that the sum
l1 * m1 + l2 * m2 + ... + ln * mn = 0.
Note that the input list of the solution must have n-1 elements,
but that it returns a list of n elements!
val eq_zero : ?fresh_var:(Libzipperposition.Type.t -> Monome.term) ->
Monome.Int.t -> solution listfresh_var,
for diophantine equations. Returns the empty list if no solution is
found.
For instance, on the monome 2X + 3Y - 7, it may generate a new variable
Z and return the substitution X -> 3Z - 7, Y -> 2Z + 7
val lower_zero : ?fresh_var:(Libzipperposition.Type.t -> Monome.term) ->
strict:bool -> Monome.Int.t -> solution liststrict determines
whether the inequality is strict or not). This
may not return all solutions, but a subspace of itfresh_var : see solve_eq_zeroval lt_zero : ?fresh_var:(Libzipperposition.Type.t -> Monome.term) ->
Monome.Int.t -> solution list
val leq_zero : ?fresh_var:(Libzipperposition.Type.t -> Monome.term) ->
Monome.Int.t -> solution list
val neq_zero : ?fresh_var:(Libzipperposition.Type.t -> Monome.term) ->
Monome.Int.t -> solution listm < 0.