Module Msat.Solver_intf
Interface for Solvers
This modules defines the safe external interface for solvers. Solvers that implements this interface can be obtained using the Make functor in Solver or Mcsolver.
type 'a printer= Format.formatter -> 'a -> unittype ('term, 'form, 'value) sat_state={}The type of values returned when the solver reaches a SAT state.
type ('atom, 'clause, 'proof) unsat_state={}The type of values returned when the solver reaches an UNSAT state.
type negated=|Negatedchanged sign
|Same_signkept sign
This type is used during the normalisation of formulas. See
Expr_intf.S.norm for more details.
type 'term eval_res=The type of evaluation results for a given formula. For instance, let's suppose we want to evaluate the formula
x * y = 0, the following result are correct:Unknownif neitherxnoryare assigned to a valueValued (true, [x])ifxis assigned to0Valued (true, [y])ifyis assigned to0Valued (false, [x; y])ifxandyare assigned to 1 (or any non-zero number)
type ('term, 'formula, 'value) assumption=|Lit of 'formulaThe given formula is asserted true by the solver
|Assign of 'term * 'valueThe term is assigned to the value
Asusmptions made by the core SAT solver.
type ('term, 'formula, 'proof) reason=The type of reasons for propagations of a formula
f.
type lbool=|L_true|L_false|L_undefinedValuation of an atom
type ('term, 'formula, 'value, 'proof) acts={acts_iter_assumptions : (('term, 'formula, 'value) assumption -> unit) -> unit;Traverse the new assumptions on the boolean trail.
acts_eval_lit : 'formula -> lbool;Obtain current value of the given literal
acts_mk_lit : 'formula -> unit;Map the given formula to a literal, which will be decided by the SAT solver.
acts_mk_term : 'term -> unit;Map the given term (and its subterms) to decision variables, for the MCSAT solver to decide.
acts_add_clause : ?keep:bool -> 'formula list -> 'proof -> unit;Add a clause to the solver.
- parameter keep
if true, the clause will be kept by the solver. Otherwise the solver is allowed to GC the clause and propose this partial model again.
acts_raise_conflict : b. 'formula list -> 'proof -> 'b;Raise a conflict, yielding control back to the solver. The list of atoms must be a valid theory lemma that is false in the current trail.
acts_propagate : 'formula -> ('term, 'formula, 'proof) reason -> unit;Propagate a formula, i.e. the theory can evaluate the formula to be true (see the definition of
eval_res}The type for a slice of assertions to assume/propagate in the theory.
type ('a, 'b) gadt_eq=|GADT_EQ : ('a, 'a) gadt_eqtype void= (unit, bool) gadt_eqA provably empty type
module type FORMULA = sig ... endmodule type EXPR = sig ... endFormulas and Terms required for mcSAT
module type PLUGIN_CDCL_T = sig ... endSignature for theories to be given to the CDCL(T) solver
module type PLUGIN_MCSAT = sig ... endSignature for theories to be given to the Model Constructing Solver.
module type PLUGIN_SAT = sig ... endSignature for pure SAT solvers
module type PROOF = sig ... endmodule type S = sig ... endThe external interface implemented by safe solvers, such as the one created by the
Solver.Make andMcsolver.Make functors.