Th_lra.SimpSolvermodule V : Sidekick_simplex.VARmodule Z : Sidekick_simplex.INTmodule Q : Sidekick_simplex.RATIONAL with type bigint = Z.ttype num = Q.tNumbers
module Constraint : sig ... endmodule Subst : sig ... endval create : ?stat:Sidekick_util.Stat.t -> unit -> tCreate a new simplex.
val push_level : t -> unitval pop_levels : t -> int -> unitDefine a basic variable in terms of other variables. This is useful to "name" a linear expression and get back a variable that can be used in a Constraint.t
module Unsat_cert : sig ... endexception E_unsat of Unsat_cert.tval add_constraint :
?keep_on_backtracking:bool ->
?is_int:bool ->
on_propagate:ev_on_propagate ->
t ->
Constraint.t ->
V.lit ->
unitAdd a constraint to the simplex.
This is removed upon backtracking by default.
val declare_bound : ?is_int:bool -> t -> Constraint.t -> V.lit -> unitDeclare that this constraint exists and map it to a literal, so we can possibly propagate it later. Unlike add_constraint this does NOT assert that the constraint is true
Check the whole simplex for satisfiability.
Call check_exn and return a model or a proof of unsat. This does NOT enforce that integer variables map to integer values.
val check_branch_and_bound :
on_propagate:( V.lit -> reason:V.lit list -> unit ) ->
max_tree_nodes:int ->
t ->
result optionTry to solve and respect the integer constraints.
val n_vars : t -> intval n_rows : t -> int