Module type Solver.S
Safe external interface of solvers.
Internal modules
These are the internal modules used, you should probably not use them if you're not familiar with the internals of mSAT.
include Msat.Solver_intf.EXPR
module Term : sig ... endmodule Value : sig ... endmodule Formula : Msat.Solver_intf.FORMULAtype term= Term.tuser terms
type formula= Formula.tuser formulas
type atomThe type of atoms given by the module argument for formulas. An atom is a user-defined atomic formula whose truth value is picked by Msat.
module Atom : sig ... endmodule Clause : sig ... endmodule Proof : Msat.Solver_intf.PROOF with type clause = clause and type atom = atom and type formula = formula and type lemma = lemma and type t = proofA module to manipulate proofs.
type t= solverMain solver type, containing all state for solving.
val create : ?store_proof:bool -> ?size:[ `Tiny | `Small | `Big ] -> theory -> tCreate new solver
- parameter theory
the theory
- parameter store_proof
if true, stores proof (default
true). Otherwise the functions that return proofs will fail withNo_proof
- parameter size
the initial size of internal data structures. The bigger, the faster, but also the more RAM it uses.
Types
type res=|Sat of (term, formula, Value.t) Msat.Solver_intf.sat_stateReturned when the solver reaches SAT, with a model
|Unsat of (atom, clause, Proof.t) Msat.Solver_intf.unsat_stateReturned when the solver reaches UNSAT, with a proof
Result type for the solver
Base operations
val assume : t -> formula list list -> lemma -> unitAdd the list of clauses to the current set of assumptions. Modifies the sat solver state in place.
val solve : ?assumptions:atom list -> t -> resTry and solves the current set of clauses.
- parameter assumptions
additional atomic assumptions to be temporarily added. The assumptions are just used for this call to
solve, they are not saved in the solver's state.
val make_term : t -> term -> unitAdd a new term (i.e. decision variable) to the solver. This term will be decided on at some point during solving, wether it appears in clauses or not.
val make_atom : t -> formula -> atomAdd a new atom (i.e propositional formula) to the solver. This formula will be decided on at some point during solving, wether it appears in clauses or not.
val true_at_level0 : t -> atom -> booltrue_at_level0 areturnstrueifawas proved at level0, i.e. it must hold in all models
val eval_atom : t -> atom -> Msat.Solver_intf.lboolEvaluate atom in current state
val export : t -> clause Msat.Solver_intf.export