Z3
Data Structures | Public Member Functions | Friends
solver Class Reference
+ Inheritance diagram for solver:

Data Structures

class  cube_generator
 
class  cube_iterator
 
struct  simple
 
struct  translate
 

Public Member Functions

 solver (context &c)
 
 solver (context &c, simple)
 
 solver (context &c, Z3_solver s)
 
 solver (context &c, char const *logic)
 
 solver (context &c, solver const &src, translate)
 
 solver (solver const &s)
 
 ~solver ()
 
 operator Z3_solver () const
 
solveroperator= (solver const &s)
 
void set (params const &p)
 
void set (char const *k, bool v)
 
void set (char const *k, unsigned v)
 
void set (char const *k, double v)
 
void set (char const *k, symbol const &v)
 
void set (char const *k, char const *v)
 
void push ()
 
void pop (unsigned n=1)
 
void reset ()
 
void add (expr const &e)
 
void add (expr const &e, expr const &p)
 
void add (expr const &e, char const *p)
 
void add (expr_vector const &v)
 
void from_file (char const *file)
 
void from_string (char const *s)
 
check_result check ()
 
check_result check (unsigned n, expr *const assumptions)
 
check_result check (expr_vector const &assumptions)
 
model get_model () const
 
check_result consequences (expr_vector &assumptions, expr_vector &vars, expr_vector &conseq)
 
std::string reason_unknown () const
 
stats statistics () const
 
expr_vector unsat_core () const
 
expr_vector assertions () const
 
expr_vector non_units () const
 
expr_vector units () const
 
expr_vector trail () const
 
expr_vector trail (array< unsigned > &levels) const
 
expr proof () const
 
std::string to_smt2 (char const *status="unknown")
 
std::string dimacs (bool include_names=true) const
 
param_descrs get_param_descrs ()
 
expr_vector cube (expr_vector &vars, unsigned cutoff)
 
cube_generator cubes ()
 
cube_generator cubes (expr_vector &vars)
 
- Public Member Functions inherited from object
 object (context &c)
 
contextctx () const
 
Z3_error_code check_error () const
 

Friends

std::ostream & operator<< (std::ostream &out, solver const &s)
 

Additional Inherited Members

- Protected Attributes inherited from object
contextm_ctx
 

Detailed Description

Definition at line 2619 of file z3++.h.

Constructor & Destructor Documentation

solver ( context c)
inline

Definition at line 2628 of file z3++.h.

2628 :object(c) { init(Z3_mk_solver(c)); }
Z3_solver Z3_API Z3_mk_solver(Z3_context c)
Create a new solver. This solver is a "combined solver" (see combined_solver module) that internally ...
object(context &c)
Definition: z3++.h:427
solver ( context c,
simple   
)
inline

Definition at line 2629 of file z3++.h.

2629 :object(c) { init(Z3_mk_simple_solver(c)); }
object(context &c)
Definition: z3++.h:427
Z3_solver Z3_API Z3_mk_simple_solver(Z3_context c)
Create a new incremental solver.
solver ( context c,
Z3_solver  s 
)
inline

Definition at line 2630 of file z3++.h.

2630 :object(c) { init(s); }
object(context &c)
Definition: z3++.h:427
solver ( context c,
char const *  logic 
)
inline

Definition at line 2631 of file z3++.h.

2631 :object(c) { init(Z3_mk_solver_for_logic(c, c.str_symbol(logic))); }
Z3_solver Z3_API Z3_mk_solver_for_logic(Z3_context c, Z3_symbol logic)
Create a new solver customized for the given logic. It behaves like Z3_mk_solver if the logic is unkn...
object(context &c)
Definition: z3++.h:427
solver ( context c,
solver const &  src,
translate   
)
inline

Definition at line 2632 of file z3++.h.

2632 : object(c) { init(Z3_solver_translate(src.ctx(), src, c)); }
Z3_solver Z3_API Z3_solver_translate(Z3_context source, Z3_solver s, Z3_context target)
Copy a solver s from the context source to the context target.
object(context &c)
Definition: z3++.h:427
solver ( solver const &  s)
inline

Definition at line 2633 of file z3++.h.

2633 :object(s) { init(s.m_solver); }
object(context &c)
Definition: z3++.h:427
~solver ( )
inline

Definition at line 2634 of file z3++.h.

2634 { Z3_solver_dec_ref(ctx(), m_solver); }
context & ctx() const
Definition: z3++.h:428
void Z3_API Z3_solver_dec_ref(Z3_context c, Z3_solver s)
Decrement the reference counter of the given solver.

Member Function Documentation

void add ( expr const &  e)
inline

Definition at line 2652 of file z3++.h.

Referenced by solver::add().

2652 { assert(e.is_bool()); Z3_solver_assert(ctx(), m_solver, e); check_error(); }
Z3_error_code check_error() const
Definition: z3++.h:429
void Z3_API Z3_solver_assert(Z3_context c, Z3_solver s, Z3_ast a)
Assert a constraint into the solver.
context & ctx() const
Definition: z3++.h:428
void add ( expr const &  e,
expr const &  p 
)
inline

Definition at line 2653 of file z3++.h.

2653  {
2654  assert(e.is_bool()); assert(p.is_bool()); assert(p.is_const());
2655  Z3_solver_assert_and_track(ctx(), m_solver, e, p);
2656  check_error();
2657  }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
void Z3_API Z3_solver_assert_and_track(Z3_context c, Z3_solver s, Z3_ast a, Z3_ast p)
Assert a constraint a into the solver, and track it (in the unsat) core using the Boolean constant p...
void add ( expr const &  e,
char const *  p 
)
inline

Definition at line 2658 of file z3++.h.

2658  {
2659  add(e, ctx().bool_const(p));
2660  }
context & ctx() const
Definition: z3++.h:428
void add(expr const &e)
Definition: z3++.h:2652
void add ( expr_vector const &  v)
inline

Definition at line 2661 of file z3++.h.

2661  {
2662  check_context(*this, v);
2663  for (unsigned i = 0; i < v.size(); ++i)
2664  add(v[i]);
2665  }
void add(expr const &e)
Definition: z3++.h:2652
friend void check_context(object const &a, object const &b)
Definition: z3++.h:432
expr_vector assertions ( ) const
inline

Definition at line 2700 of file z3++.h.

Referenced by solver::to_smt2().

2700 { Z3_ast_vector r = Z3_solver_get_assertions(ctx(), m_solver); check_error(); return expr_vector(ctx(), r); }
Z3_ast_vector Z3_API Z3_solver_get_assertions(Z3_context c, Z3_solver s)
Return the set of asserted formulas on the solver.
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73
check_result check ( )
inline

Definition at line 2669 of file z3++.h.

2669 { Z3_lbool r = Z3_solver_check(ctx(), m_solver); check_error(); return to_check_result(r); }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition: z3_api.h:101
Z3_lbool Z3_API Z3_solver_check(Z3_context c, Z3_solver s)
Check whether the assertions in a given solver are consistent or not.
check_result to_check_result(Z3_lbool l)
Definition: z3++.h:144
check_result check ( unsigned  n,
expr *const  assumptions 
)
inline

Definition at line 2670 of file z3++.h.

2670  {
2671  array<Z3_ast> _assumptions(n);
2672  for (unsigned i = 0; i < n; i++) {
2673  check_context(*this, assumptions[i]);
2674  _assumptions[i] = assumptions[i];
2675  }
2676  Z3_lbool r = Z3_solver_check_assumptions(ctx(), m_solver, n, _assumptions.ptr());
2677  check_error();
2678  return to_check_result(r);
2679  }
Z3_lbool Z3_API Z3_solver_check_assumptions(Z3_context c, Z3_solver s, unsigned num_assumptions, Z3_ast const assumptions[])
Check whether the assertions in the given solver and optional assumptions are consistent or not...
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition: z3_api.h:101
friend void check_context(object const &a, object const &b)
Definition: z3++.h:432
check_result to_check_result(Z3_lbool l)
Definition: z3++.h:144
check_result check ( expr_vector const &  assumptions)
inline

Definition at line 2680 of file z3++.h.

2680  {
2681  unsigned n = assumptions.size();
2682  array<Z3_ast> _assumptions(n);
2683  for (unsigned i = 0; i < n; i++) {
2684  check_context(*this, assumptions[i]);
2685  _assumptions[i] = assumptions[i];
2686  }
2687  Z3_lbool r = Z3_solver_check_assumptions(ctx(), m_solver, n, _assumptions.ptr());
2688  check_error();
2689  return to_check_result(r);
2690  }
Z3_lbool Z3_API Z3_solver_check_assumptions(Z3_context c, Z3_solver s, unsigned num_assumptions, Z3_ast const assumptions[])
Check whether the assertions in the given solver and optional assumptions are consistent or not...
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition: z3_api.h:101
friend void check_context(object const &a, object const &b)
Definition: z3++.h:432
check_result to_check_result(Z3_lbool l)
Definition: z3++.h:144
check_result consequences ( expr_vector assumptions,
expr_vector vars,
expr_vector conseq 
)
inline

Definition at line 2692 of file z3++.h.

2692  {
2693  Z3_lbool r = Z3_solver_get_consequences(ctx(), m_solver, assumptions, vars, conseq);
2694  check_error();
2695  return to_check_result(r);
2696  }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_lbool
Lifted Boolean type: false, undefined, true.
Definition: z3_api.h:101
check_result to_check_result(Z3_lbool l)
Definition: z3++.h:144
Z3_lbool Z3_API Z3_solver_get_consequences(Z3_context c, Z3_solver s, Z3_ast_vector assumptions, Z3_ast_vector variables, Z3_ast_vector consequences)
retrieve consequences from solver that determine values of the supplied function symbols.
expr_vector cube ( expr_vector vars,
unsigned  cutoff 
)
inline

Definition at line 2742 of file z3++.h.

2742  {
2743  Z3_ast_vector r = Z3_solver_cube(ctx(), m_solver, vars, cutoff);
2744  check_error();
2745  return expr_vector(ctx(), r);
2746  }
Z3_error_code check_error() const
Definition: z3++.h:429
Z3_ast_vector Z3_API Z3_solver_cube(Z3_context c, Z3_solver s, Z3_ast_vector vars, unsigned backtrack_level)
extract a next cube for a solver. The last cube is the constant true or false. The number of (non-con...
context & ctx() const
Definition: z3++.h:428
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73
cube_generator cubes ( )
inline

Definition at line 2829 of file z3++.h.

2829 { return cube_generator(*this); }
cube_generator cubes ( expr_vector vars)
inline

Definition at line 2830 of file z3++.h.

2830 { return cube_generator(*this, vars); }
std::string dimacs ( bool  include_names = true) const
inline

Definition at line 2737 of file z3++.h.

2737 { return std::string(Z3_solver_to_dimacs_string(ctx(), m_solver, include_names)); }
context & ctx() const
Definition: z3++.h:428
Z3_string Z3_API Z3_solver_to_dimacs_string(Z3_context c, Z3_solver s, bool include_names)
Convert a solver into a DIMACS formatted string.
void from_file ( char const *  file)
inline

Definition at line 2666 of file z3++.h.

2666 { Z3_solver_from_file(ctx(), m_solver, file); ctx().check_parser_error(); }
void check_parser_error() const
Definition: z3++.h:195
context & ctx() const
Definition: z3++.h:428
void Z3_API Z3_solver_from_file(Z3_context c, Z3_solver s, Z3_string file_name)
load solver assertions from a file.
void from_string ( char const *  s)
inline

Definition at line 2667 of file z3++.h.

2667 { Z3_solver_from_string(ctx(), m_solver, s); ctx().check_parser_error(); }
void check_parser_error() const
Definition: z3++.h:195
void Z3_API Z3_solver_from_string(Z3_context c, Z3_solver s, Z3_string file_name)
load solver assertions from a string.
context & ctx() const
Definition: z3++.h:428
model get_model ( ) const
inline

Definition at line 2691 of file z3++.h.

2691 { Z3_model m = Z3_solver_get_model(ctx(), m_solver); check_error(); return model(ctx(), m); }
Z3_error_code check_error() const
Definition: z3++.h:429
Z3_model Z3_API Z3_solver_get_model(Z3_context c, Z3_solver s)
Retrieve the model for the last Z3_solver_check or Z3_solver_check_assumptions.
context & ctx() const
Definition: z3++.h:428
param_descrs get_param_descrs ( )
inline

Definition at line 2739 of file z3++.h.

2739 { return param_descrs(ctx(), Z3_solver_get_param_descrs(ctx(), m_solver)); }
context & ctx() const
Definition: z3++.h:428
Z3_param_descrs Z3_API Z3_solver_get_param_descrs(Z3_context c, Z3_solver s)
Return the parameter description set for the given solver object.
expr_vector non_units ( ) const
inline

Definition at line 2701 of file z3++.h.

2701 { Z3_ast_vector r = Z3_solver_get_non_units(ctx(), m_solver); check_error(); return expr_vector(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_ast_vector Z3_API Z3_solver_get_non_units(Z3_context c, Z3_solver s)
Return the set of non units in the solver state.
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73
operator Z3_solver ( ) const
inline

Definition at line 2635 of file z3++.h.

2635 { return m_solver; }
solver& operator= ( solver const &  s)
inline

Definition at line 2636 of file z3++.h.

2636  {
2637  Z3_solver_inc_ref(s.ctx(), s.m_solver);
2638  Z3_solver_dec_ref(ctx(), m_solver);
2639  object::operator=(s);
2640  m_solver = s.m_solver;
2641  return *this;
2642  }
void Z3_API Z3_solver_inc_ref(Z3_context c, Z3_solver s)
Increment the reference counter of the given solver.
context & ctx() const
Definition: z3++.h:428
void Z3_API Z3_solver_dec_ref(Z3_context c, Z3_solver s)
Decrement the reference counter of the given solver.
void pop ( unsigned  n = 1)
inline

Definition at line 2650 of file z3++.h.

2650 { Z3_solver_pop(ctx(), m_solver, n); check_error(); }
void Z3_API Z3_solver_pop(Z3_context c, Z3_solver s, unsigned n)
Backtrack n backtracking points.
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
expr proof ( ) const
inline

Definition at line 2714 of file z3++.h.

2714 { Z3_ast r = Z3_solver_get_proof(ctx(), m_solver); check_error(); return expr(ctx(), r); }
Z3_ast Z3_API Z3_solver_get_proof(Z3_context c, Z3_solver s)
Retrieve the proof for the last Z3_solver_check or Z3_solver_check_assumptions.
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
void push ( )
inline

Definition at line 2649 of file z3++.h.

2649 { Z3_solver_push(ctx(), m_solver); check_error(); }
void Z3_API Z3_solver_push(Z3_context c, Z3_solver s)
Create a backtracking point.
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
std::string reason_unknown ( ) const
inline

Definition at line 2697 of file z3++.h.

2697 { Z3_string r = Z3_solver_get_reason_unknown(ctx(), m_solver); check_error(); return r; }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_string Z3_API Z3_solver_get_reason_unknown(Z3_context c, Z3_solver s)
Return a brief justification for an "unknown" result (i.e., Z3_L_UNDEF) for the commands Z3_solver_ch...
const char * Z3_string
Z3 string type. It is just an alias for const char *.
Definition: z3_api.h:84
void reset ( )
inline

Definition at line 2651 of file z3++.h.

2651 { Z3_solver_reset(ctx(), m_solver); check_error(); }
void Z3_API Z3_solver_reset(Z3_context c, Z3_solver s)
Remove all assertions from the solver.
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
void set ( params const &  p)
inline

Definition at line 2643 of file z3++.h.

2643 { Z3_solver_set_params(ctx(), m_solver, p); check_error(); }
void Z3_API Z3_solver_set_params(Z3_context c, Z3_solver s, Z3_params p)
Set the given solver using the given parameters.
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
void set ( char const *  k,
bool  v 
)
inline

Definition at line 2644 of file z3++.h.

Referenced by solver::set().

2644 { params p(ctx()); p.set(k, v); set(p); }
context & ctx() const
Definition: z3++.h:428
void set(params const &p)
Definition: z3++.h:2643
void set ( char const *  k,
unsigned  v 
)
inline

Definition at line 2645 of file z3++.h.

Referenced by solver::set().

2645 { params p(ctx()); p.set(k, v); set(p); }
context & ctx() const
Definition: z3++.h:428
void set(params const &p)
Definition: z3++.h:2643
void set ( char const *  k,
double  v 
)
inline

Definition at line 2646 of file z3++.h.

Referenced by solver::set().

2646 { params p(ctx()); p.set(k, v); set(p); }
context & ctx() const
Definition: z3++.h:428
void set(params const &p)
Definition: z3++.h:2643
void set ( char const *  k,
symbol const &  v 
)
inline

Definition at line 2647 of file z3++.h.

Referenced by solver::set().

2647 { params p(ctx()); p.set(k, v); set(p); }
context & ctx() const
Definition: z3++.h:428
void set(params const &p)
Definition: z3++.h:2643
void set ( char const *  k,
char const *  v 
)
inline

Definition at line 2648 of file z3++.h.

Referenced by solver::set().

2648 { params p(ctx()); p.set(k, v); set(p); }
context & ctx() const
Definition: z3++.h:428
void set(params const &p)
Definition: z3++.h:2643
stats statistics ( ) const
inline

Definition at line 2698 of file z3++.h.

2698 { Z3_stats r = Z3_solver_get_statistics(ctx(), m_solver); check_error(); return stats(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:429
Z3_stats Z3_API Z3_solver_get_statistics(Z3_context c, Z3_solver s)
Return statistics for the given solver.
context & ctx() const
Definition: z3++.h:428
std::string to_smt2 ( char const *  status = "unknown")
inline

Definition at line 2717 of file z3++.h.

2717  {
2718  array<Z3_ast> es(assertions());
2719  Z3_ast const* fmls = es.ptr();
2720  Z3_ast fml = 0;
2721  unsigned sz = es.size();
2722  if (sz > 0) {
2723  --sz;
2724  fml = fmls[sz];
2725  }
2726  else {
2727  fml = ctx().bool_val(true);
2728  }
2729  return std::string(Z3_benchmark_to_smtlib_string(
2730  ctx(),
2731  "", "", status, "",
2732  sz,
2733  fmls,
2734  fml));
2735  }
context & ctx() const
Definition: z3++.h:428
expr_vector assertions() const
Definition: z3++.h:2700
expr bool_val(bool b)
Definition: z3++.h:3456
Z3_string Z3_API Z3_benchmark_to_smtlib_string(Z3_context c, Z3_string name, Z3_string logic, Z3_string status, Z3_string attributes, unsigned num_assumptions, Z3_ast const assumptions[], Z3_ast formula)
Convert the given benchmark into SMT-LIB formatted string.
expr_vector trail ( ) const
inline

Definition at line 2703 of file z3++.h.

2703 { Z3_ast_vector r = Z3_solver_get_trail(ctx(), m_solver); check_error(); return expr_vector(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73
Z3_ast_vector Z3_API Z3_solver_get_trail(Z3_context c, Z3_solver s)
Return the trail modulo model conversion, in order of decision level The decision level can be retrie...
expr_vector trail ( array< unsigned > &  levels) const
inline

Definition at line 2704 of file z3++.h.

2704  {
2705  Z3_ast_vector r = Z3_solver_get_trail(ctx(), m_solver);
2706  check_error();
2707  expr_vector result(ctx(), r);
2708  unsigned sz = result.size();
2709  levels.resize(sz);
2710  Z3_solver_get_levels(ctx(), m_solver, r, sz, levels.ptr());
2711  check_error();
2712  return result;
2713  }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
void Z3_API Z3_solver_get_levels(Z3_context c, Z3_solver s, Z3_ast_vector literals, unsigned sz, unsigned levels[])
retrieve the decision depth of Boolean literals (variables or their negations). Assumes a check-sat c...
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73
Z3_ast_vector Z3_API Z3_solver_get_trail(Z3_context c, Z3_solver s)
Return the trail modulo model conversion, in order of decision level The decision level can be retrie...
expr_vector units ( ) const
inline

Definition at line 2702 of file z3++.h.

2702 { Z3_ast_vector r = Z3_solver_get_units(ctx(), m_solver); check_error(); return expr_vector(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:429
Z3_ast_vector Z3_API Z3_solver_get_units(Z3_context c, Z3_solver s)
Return the set of units modulo model conversion.
context & ctx() const
Definition: z3++.h:428
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73
expr_vector unsat_core ( ) const
inline

Definition at line 2699 of file z3++.h.

2699 { Z3_ast_vector r = Z3_solver_get_unsat_core(ctx(), m_solver); check_error(); return expr_vector(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:429
context & ctx() const
Definition: z3++.h:428
Z3_ast_vector Z3_API Z3_solver_get_unsat_core(Z3_context c, Z3_solver s)
Retrieve the unsat core for the last Z3_solver_check_assumptions The unsat core is a subset of the as...
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  out,
solver const &  s 
)
friend

Definition at line 2833 of file z3++.h.

2833 { out << Z3_solver_to_string(s.ctx(), s); return out; }
Z3_string Z3_API Z3_solver_to_string(Z3_context c, Z3_solver s)
Convert a solver into a string.