No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
BDD @ 8b3d1bc


Build Status Coverage Status

Q3B is an SMT solver for the quantified bit-vector formulas which uses BDDs. In a nutshell, it simplifies the input formula, converts it to the equivalent BDD, and answers sat if there is a satisfying path in the BDD. Q3B can also use approximations of formulas to solve some formulas containing complicated arithmetic, which can be hard to solve using BDDS.

Details of the approach can be found in the paper Solving Quantified Bit-Vector Formulas Using Binary Decision Diagrams.


  • Z3 API (to parse the formula and to perform some of simplifications)
  • CUDD BDD library


Q3B can be compiled by running

mkdir build
cd build
cmake ..


To process the file file.smt2 in the SMT-LIB 2.5 format, run

./q3b file.smt2

Variable bit-width approximations

If the input formula contains non-linear multiplication, you might want to try underapproximations or overapproximations of variables, since otherwise the conversion to BDD is unlikely to terminate in reasonable time. If variable approximations are enabled, Q3B will fix some bits of chosen variables, which can result in smaller BDDs.

To run the solver in parallel with underapproximations and overapproximations, run

./q3b -A file.smt2

To run only underapproximations or only overapproximations, run

./q3b -U file.smt2


./q3b -O file.smt2

Abstractions of bit-vector operations

In addition to the mentioned variable approximations, Q3B also offers abstractions of bit-vector operations. If these abstractions are enabled, Q3B will compute only several bits of results of operations like addition or multiplication. It may be the case that only several result bits are necessary to decide satisfiability of the formula. To run the solver with abstractions of bit-vector operations, run

./q3b -m operations

Operation abstractions may be combined with variable approximations by calling

./q3b -A -m both

Unconstrained variables

Q3B also employs simplifications of formulas with unconstrained variables (i.e. variables that occur only once in the formula), as described in the paper On Simplification of Formulas with Unconstrained Variables and Quantifiers. To enable these simplifications, use the parameter --propagate-unconstrained.