package bitwuzla

  1. Overview
  2. Docs

Create a new Bitwuzla session in incremental mode while enabling unsatifiable core generation.

Parameters

Signature

include sig ... end
type bv = [
  1. | `Bv
]

The bit-vector kind.

type rm = [
  1. | `Rm
]

The rounding-mode kind.

type fp = [
  1. | `Fp
]

The floating-point kind.

type (!'a, !'b) ar = [
  1. | `Ar of 'a -> 'b
] constraint 'a = [< `Bv | `Fp | `Rm ] constraint 'b = [< `Bv | `Fp | `Rm ]

The array kind with 'a index and 'b element.

Both index and element should be of bit-vector, rounding-mode or floating-point kind

type (!'a0, !'b) fn = [
  1. | `Fn of 'a -> 'b
] constraint 'b = [< bv ]

The function kind taking 'a argument and returning 'b element.

Functions accept only bit-vector, rounding-mode or floating-point as argument and return only bit-vector.

type 'a sort

A sort of 'a kind.

type 'a term

A term of 'a kind.

type 'a0 value = private 'a term

A value of 'a kind.

Values are subtype of terms and can be downcasted using :> operator.

module Sort : sig ... end
module Term : sig ... end
val assert' : ?name:string -> bv term -> unit

assert' ~name t assert that the condition t is true.

t must be a boolean term (bv term of size 1).

  • parameter name

    The name of the assertion, if any.

  • parameter t

    The formula term to assert.

type result =
  1. | Sat
    (*

    sat

    *)
  2. | Unsat
    (*

    unsat

    *)
  3. | Unknown
    (*

    unknown

    *)

A satisfiability result.

val pp_result : Stdlib.Format.formatter -> result -> unit

pp formatter result pretty print result.

  • parameter formatter

    The output formatter.

  • parameter result

    The result to print.

val check_sat : ?interrupt:(('a -> int) * 'a) -> unit -> result

check_sat ~interrupt () check satisfiability of current input formula.

  • parameter interrupt

    Stop the research and return Unknown if the callback function returns a positive value. Run into completion otherwise.

  • returns

    Sat if the input formula is satisfiable and Unsat if it is unsatisfiable, and Unknown when neither satistifiability nor unsatisfiability was determined, for instance when it was terminated by timeout.

val timeout : float -> (?interrupt:((float -> int) * float) -> 'b) -> 'b

timeout t f configure the interruptible function f with a timeout of t seconds.

timeout can be used to limit the time spend on check_sat or check_sat_assuming. For instance, for a 1 second time credit, use:

  • (timeout 1. check_sat) ()
  • (timeout 1. check_sat_assuming) assumptions
  • parameter t

    Timeout in second.

  • parameter f

    The function to configure.

  • returns

    An interruptible function configured to stop on timeout.

val get_value : 'a term -> 'a value

get_value t get a term representing the model value of a given term.

Requires that the last check_sat query returned Sat.

  • parameter t

    The term to query a model value for.

  • returns

    A term representing the model value of term t.

val unsafe_close : unit -> unit

unafe_close () close the session.

UNSAFE: call this ONLY to release the resources earlier if the session is about to be garbage collected.

val push : int -> unit

push nlevels push context levels.

  • parameter nlevels

    The number of context levels to push.

val pop : int -> unit

pop nlevels pop context levels.

  • parameter nlevels

    The number of context levels to pop.

val check_sat_assuming : ?interrupt:(('a -> int) * 'a) -> ?names:string array -> bv term array -> result

check_sat_assuming ~interrupt ~names assumptions check satisfiability of current input formula, with the search for a solution guided by the given assumptions.

An input formula consists of assertions added via assert' combined with assumptions via Boolean and. Unsatifiable assumptions can be queried via get_unsat_assumptions.

  • parameter interrupt

    Stop the research and return Unknown if the callback function returns a positive value. Run into completion otherwise.

  • parameter names

    The assumption names, if any.

  • parameter assumption

    The set of assumptions guiding the research of solutions.

  • returns

    Sat if the input formula is satisfiable and Unsat if it is unsatisfiable, and Unknown when neither satistifiability nor unsatisfiability was determined, for instance when it was terminated by timeout.

val get_unsat_assumptions : unit -> bv term array

get_unsat_assumptions () get the set of unsat assumptions.

Unsat assumptions are assumptions that force an input formula to become unsatisfiable. Unsat assumptions handling in Bitwuzla is analogous to failed assumptions in MiniSAT.

Requires that the last check_sat query returned Unsat.

  • returns

    An array with unsat assumptions.

val get_unsat_core : unit -> bv term array

get_unsat_core () get the set unsat core (unsat assertions).

The unsat core consists of the set of assertions that force an input formula to become unsatisfiable.

Requires that the last check_sat query returned Unsat.

  • returns

    An array with unsat assertions.