Solver.Make_cdcl_tmodule Th : Solver_intf.PLUGIN_CDCL_TThese are the internal modules used, you should probably not use them if you're not familiar with the internals of mSAT.
type lit = Th.litliterals
module Lit = Th.Littype theory = Th.ttype proof = Th.proofA representation of a full proof
type proof_step = Th.proof_stepmodule Clause : sig ... endmodule Proof = Th.ProofA module to manipulate proofs.
type t = solverMain solver type, containing all state for solving.
val create : ?on_conflict:(t -> Clause.t -> unit) -> ?on_decision:(t -> lit -> unit) ->
?on_learnt:(t -> Clause.t -> unit) -> ?on_gc:(t -> lit array -> unit) -> ?stat:Sidekick_util.Stat.t ->
?size:[ `Tiny | `Small | `Big ] -> proof:Proof.t -> theory -> tCreate new solver
val stat : t -> Sidekick_util.Stat.tStatistics
Clause pools.
A clause pool holds/owns a set of clauses, and is responsible for managing their lifetime. We only expose an id, not a private type.
val clause_pool_descr : t -> clause_pool_id -> stringval new_clause_pool_gc_fixed_size : descr:string -> size:int -> t -> clause_pool_idAllocate a new clause pool that GC's its clauses when its size goes above size. It keeps half of the clauses.
type res = | Sat of lit Solver_intf.sat_state | (* Returned when the solver reaches SAT, with a model *) |
| Unsat of (lit, clause, proof_step) Solver_intf.unsat_state | (* Returned when the solver reaches UNSAT, with a proof *) |
Result type for the solver
Exception raised by the evaluating functions when a literal has not yet been assigned a value.
Add the list of clauses to the current set of assumptions. Modifies the sat solver state in place.
val add_clause : t -> lit list -> proof_step -> unitLower level addition of clauses
val add_clause_a : t -> lit array -> proof_step -> unitLower level addition of clauses
Like add_clause but with the justification of being an input clause
Like add_clause_a but with justification of being an input clause
val add_clause_in_pool : t -> pool:clause_pool_id -> lit list -> proof_step -> unitLike add_clause but using a specific clause pool
val add_clause_a_in_pool : t -> pool:clause_pool_id -> lit array -> proof_step -> unitLike add_clause_a but using a specific clause pool
Ensure the SAT solver handles this particular literal, ie add a boolean variable for it if it's not already there.
Set default polarity for the given boolean variable. Sign of the literal is ignored.
true_at_level0 a returns true if a was proved at level0, i.e. it must hold in all models
val eval_lit : t -> lit -> Solver_intf.lboolEvaluate atom in current state