package msat
Install
Dune Dependency
Authors
Maintainers
Sources
md5=c02d63bf45357aa1d1b85846da373f48
sha512=e6f0d7f6e4fe69938ec2cc3233b0cb72dd577bfb4cc4824afe8247f5db0b6ffea2d38d73a65e7ede500d21ff8db27ed12f2c4f3245df4451d02864260ae2ddaf
doc/msat/Msat/Solver_intf/index.html
Module Msat.Solver_intf
Source
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 ('term, 'form, 'value) sat_state = {
eval : 'form -> bool;
(*Returns the valuation of a formula in the current state of the sat solver.
*)eval_level : 'form -> bool * int;
(*Return the current assignement of the literals, as well as its decision level. If the level is 0, then it is necessary for the atom to have this value; otherwise it is due to choices that can potentially be backtracked.
*)iter_trail : ('form -> unit) -> ('term -> unit) -> unit;
(*Iter thorugh the formulas and terms in order of decision/propagation (starting from the first propagation, to the last propagation).
*)model : unit -> ('term * 'value) list;
(*Returns the model found if the formula is satisfiable.
*)
}
The type of values returned when the solver reaches a SAT state.
type ('atom, 'clause, 'proof) unsat_state = {
unsat_conflict : unit -> 'clause;
(*Returns the unsat clause found at the toplevel
*)get_proof : unit -> 'proof;
(*returns a persistent proof of the empty clause from the Unsat result.
*)unsat_assumptions : unit -> 'atom list;
(*Subset of assumptions responsible for "unsat"
*)
}
The type of values returned when the solver reaches an UNSAT state.
This type is used during the normalisation of formulas. See Expr_intf.S.norm
for more details.
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:
Unknown
if neitherx
nory
are assigned to a valueValued (true, [x])
ifx
is assigned to0
Valued (true, [y])
ify
is assigned to0
Valued (false, [x; y])
ifx
andy
are assigned to 1 (or any non-zero number)
Asusmptions made by the core SAT solver.
type ('term, 'formula, 'proof) reason =
| Eval of 'term list
(*The formula can be evalutaed using the terms in the list
*)| Consequence of unit -> 'formula list * 'proof
(*Consequence (l, p)
means that the formulas inl
imply the propagated formulaf
. The proof should be a proof of the clause "l
impliesf
".invariant: in
Consequence (fun () -> l,p)
, all elements ofl
must be true in the current trail.note on lazyiness: the justification is suspended (using
*)unit -> …
) to avoid potentially costly computations that might never be used if this literal is backtracked without participating in a conflict. Therefore the function that produces(l,p)
needs only be safe in trails (partial models) that are conservative extensions of the current trail. If the theory isn't robust w.r.t. extensions of the trail (e.g. if its internal state undergoes significant changes), it can be easier to produce the explanation eagerly when propagating, and then useConsequence (fun () -> expl, proof)
with the already produced(expl,proof)
tuple.
The type of reasons for propagations of a formula f
.
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.
*)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.
Signature for theories to be given to the CDCL(T) solver
Signature for theories to be given to the Model Constructing Solver.
Signature for pure SAT solvers
Signature for a module handling proof by resolution from sat solving traces