Module Minisat

Bindings to Minisat.

type t

An instance of minisat (stateful)

type 'a printer = Stdlib.Format.formatter -> 'a -> unit
module Lit : sig ... end
type assumptions = Lit.t array
val create : unit -> t

Create a fresh solver state.

val okay : t -> bool

true if the solver isn't known to be in an unsat state

  • since 0.6
exception Unsat
val ensure_lit_exists : t -> Lit.t -> unit

Make sure the solver decides this literal.

  • since 0.6
val add_clause_l : t -> Lit.t list -> unit

Add a clause (as a list of literals) to the solver state.

  • raises Unsat

    if the problem is unsat.

val add_clause_a : t -> Lit.t array -> unit

Add a clause (as an array of literals) to the solver state.

  • raises Unsat

    if the problem is unsat.

val pp_clause : Lit.t list printer
val simplify : t -> unit

Perform simplifications on the solver state. Speeds up later manipulations on the solver state, e.g. calls to solve.

  • raises Unsat

    if the problem is unsat.

val solve : ?assumptions:assumptions -> t -> unit

Check whether the current solver state is satisfiable, additionally assuming that the literals provided in assumptions are assigned to true. After solve terminates (raising Unsat or not), the solver state is unchanged: the literals in assumptions are only considered to be true for the duration of the query.

  • raises Unsat

    if the problem is unsat.

type value =
  1. | V_undef
  2. | V_true
  3. | V_false
val string_of_value : value -> string
  • since 0.5
val pp_value : value printer
  • since 0.5
val value : t -> Lit.t -> value

Returns the assignation of a literal in the solver state. This must only be called after a call to solve that returned successfully without raising Unsat.

val value_at_level_0 : t -> Lit.t -> value

Returns the assignment level for this literal at level 0, if assigned there, or V_undef. If lit is not assigned at level 0, this returns V_undef even when the literal has a value in the current model.

  • since 0.6
val unsat_core : t -> Lit.t array

Returns the subset of assumptions of a solver that returned "unsat" when called with solve ~assumptions s.

  • since 0.6
val set_verbose : t -> int -> unit

Verbose mode.

val interrupt : t -> unit

Interrupt the solver, typically from another thread.

  • since 0.6
val clear_interrupt : t -> unit

Clear interrupt flag so that we can use the solver again.

  • since 0.6
val n_clauses : t -> int
  • since 0.6
val n_vars : t -> int
  • since 0.6
val n_conflicts : t -> int
  • since 0.6
module Debug : sig ... end