Z3
 
Loading...
Searching...
No Matches
Data Structures | Typedefs | Enumerations | Functions
z3 Namespace Reference

Z3 C++ namespace. More...

Data Structures

class  apply_result
 
class  array
 
class  ast
 
class  ast_vector_tpl
 
class  cast_ast
 
class  cast_ast< ast >
 
class  cast_ast< expr >
 
class  cast_ast< func_decl >
 
class  cast_ast< sort >
 
class  config
 Z3 global configuration object. More...
 
class  constructor_list
 
class  constructors
 
class  context
 A Context manages all other Z3 objects, global configuration options, etc. More...
 
class  exception
 Exception used to sign API usage errors. More...
 
class  expr
 A Z3 expression is used to represent formulas and terms. For Z3, a formula is any expression of sort Boolean. Every expression has a sort. More...
 
class  fixedpoint
 
class  func_decl
 Function declaration (aka function definition). It is the signature of interpreted and uninterpreted functions in Z3. The basic building block in Z3 is the function application. More...
 
class  func_entry
 
class  func_interp
 
class  goal
 
class  model
 
class  object
 
class  on_clause
 
class  optimize
 
class  param_descrs
 
class  parameter
 class for auxiliary parameters associated with func_decl The class is initialized with a func_decl or application expression and an index The accessor get_expr, get_sort, ... is available depending on the value of kind(). The caller is responsible to check that the kind of the parameter aligns with the call (get_expr etc). More...
 
class  params
 
class  probe
 
class  simplifier
 
class  solver
 
class  sort
 A Z3 sort (aka type). Every expression (i.e., formula or term) in Z3 has a sort. More...
 
class  stats
 
class  symbol
 
class  tactic
 
class  user_propagator_base
 

Typedefs

typedef ast_vector_tpl< astast_vector
 
typedef ast_vector_tpl< exprexpr_vector
 
typedef ast_vector_tpl< sortsort_vector
 
typedef ast_vector_tpl< func_declfunc_decl_vector
 
typedef std::function< void(expr const &proof, std::vector< unsigned > const &deps, expr_vector const &clause)> on_clause_eh_t
 

Enumerations

enum  check_result { unsat , sat , unknown }
 
enum  rounding_mode {
  RNA , RNE , RTP , RTN ,
  RTZ
}
 

Functions

void set_param (char const *param, char const *value)
 
void set_param (char const *param, bool value)
 
void set_param (char const *param, int value)
 
void reset_params ()
 
void get_version (unsigned &major, unsigned &minor, unsigned &build_number, unsigned &revision_number)
 Return Z3 version number information.
 
std::string get_full_version ()
 Return a string that fully describes the version of Z3 in use.
 
void enable_trace (char const *tag)
 Enable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.
 
void disable_trace (char const *tag)
 Disable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.
 
std::ostream & operator<< (std::ostream &out, exception const &e)
 
check_result to_check_result (Z3_lbool l)
 
void check_context (object const &a, object const &b)
 
std::ostream & operator<< (std::ostream &out, symbol const &s)
 
std::ostream & operator<< (std::ostream &out, param_descrs const &d)
 
std::ostream & operator<< (std::ostream &out, params const &p)
 
std::ostream & operator<< (std::ostream &out, ast const &n)
 
bool eq (ast const &a, ast const &b)
 
expr select (expr const &a, expr const &i)
 forward declarations
 
expr select (expr const &a, expr_vector const &i)
 
expr implies (expr const &a, expr const &b)
 
expr implies (expr const &a, bool b)
 
expr implies (bool a, expr const &b)
 
expr pw (expr const &a, expr const &b)
 
expr pw (expr const &a, int b)
 
expr pw (int a, expr const &b)
 
expr mod (expr const &a, expr const &b)
 
expr mod (expr const &a, int b)
 
expr mod (int a, expr const &b)
 
expr operator% (expr const &a, expr const &b)
 
expr operator% (expr const &a, int b)
 
expr operator% (int a, expr const &b)
 
expr rem (expr const &a, expr const &b)
 
expr rem (expr const &a, int b)
 
expr rem (int a, expr const &b)
 
expr operator! (expr const &a)
 
expr is_int (expr const &e)
 
expr operator&& (expr const &a, expr const &b)
 
expr operator&& (expr const &a, bool b)
 
expr operator&& (bool a, expr const &b)
 
expr operator|| (expr const &a, expr const &b)
 
expr operator|| (expr const &a, bool b)
 
expr operator|| (bool a, expr const &b)
 
expr operator== (expr const &a, expr const &b)
 
expr operator== (expr const &a, int b)
 
expr operator== (int a, expr const &b)
 
expr operator== (expr const &a, double b)
 
expr operator== (double a, expr const &b)
 
expr operator!= (expr const &a, expr const &b)
 
expr operator!= (expr const &a, int b)
 
expr operator!= (int a, expr const &b)
 
expr operator!= (expr const &a, double b)
 
expr operator!= (double a, expr const &b)
 
expr operator+ (expr const &a, expr const &b)
 
expr operator+ (expr const &a, int b)
 
expr operator+ (int a, expr const &b)
 
expr operator* (expr const &a, expr const &b)
 
expr operator* (expr const &a, int b)
 
expr operator* (int a, expr const &b)
 
expr operator>= (expr const &a, expr const &b)
 
expr operator/ (expr const &a, expr const &b)
 
expr operator/ (expr const &a, int b)
 
expr operator/ (int a, expr const &b)
 
expr operator- (expr const &a)
 
expr operator- (expr const &a, expr const &b)
 
expr operator- (expr const &a, int b)
 
expr operator- (int a, expr const &b)
 
expr operator<= (expr const &a, expr const &b)
 
expr operator<= (expr const &a, int b)
 
expr operator<= (int a, expr const &b)
 
expr operator>= (expr const &a, int b)
 
expr operator>= (int a, expr const &b)
 
expr operator< (expr const &a, expr const &b)
 
expr operator< (expr const &a, int b)
 
expr operator< (int a, expr const &b)
 
expr operator> (expr const &a, expr const &b)
 
expr operator> (expr const &a, int b)
 
expr operator> (int a, expr const &b)
 
expr operator& (expr const &a, expr const &b)
 
expr operator& (expr const &a, int b)
 
expr operator& (int a, expr const &b)
 
expr operator^ (expr const &a, expr const &b)
 
expr operator^ (expr const &a, int b)
 
expr operator^ (int a, expr const &b)
 
expr operator| (expr const &a, expr const &b)
 
expr operator| (expr const &a, int b)
 
expr operator| (int a, expr const &b)
 
expr nand (expr const &a, expr const &b)
 
expr nor (expr const &a, expr const &b)
 
expr xnor (expr const &a, expr const &b)
 
expr min (expr const &a, expr const &b)
 
expr max (expr const &a, expr const &b)
 
expr bvredor (expr const &a)
 
expr bvredand (expr const &a)
 
expr abs (expr const &a)
 
expr sqrt (expr const &a, expr const &rm)
 
expr fp_eq (expr const &a, expr const &b)
 
expr operator~ (expr const &a)
 
expr fma (expr const &a, expr const &b, expr const &c, expr const &rm)
 
expr fpa_fp (expr const &sgn, expr const &exp, expr const &sig)
 
expr fpa_to_sbv (expr const &t, unsigned sz)
 
expr fpa_to_ubv (expr const &t, unsigned sz)
 
expr sbv_to_fpa (expr const &t, sort s)
 
expr ubv_to_fpa (expr const &t, sort s)
 
expr fpa_to_fpa (expr const &t, sort s)
 
expr round_fpa_to_closest_integer (expr const &t)
 
expr ite (expr const &c, expr const &t, expr const &e)
 Create the if-then-else expression ite(c, t, e)
 
expr to_expr (context &c, Z3_ast a)
 Wraps a Z3_ast as an expr object. It also checks for errors. This function allows the user to use the whole C API with the C++ layer defined in this file.
 
sort to_sort (context &c, Z3_sort s)
 
func_decl to_func_decl (context &c, Z3_func_decl f)
 
expr sle (expr const &a, expr const &b)
 signed less than or equal to operator for bitvectors.
 
expr sle (expr const &a, int b)
 
expr sle (int a, expr const &b)
 
expr slt (expr const &a, expr const &b)
 signed less than operator for bitvectors.
 
expr slt (expr const &a, int b)
 
expr slt (int a, expr const &b)
 
expr sge (expr const &a, expr const &b)
 signed greater than or equal to operator for bitvectors.
 
expr sge (expr const &a, int b)
 
expr sge (int a, expr const &b)
 
expr sgt (expr const &a, expr const &b)
 signed greater than operator for bitvectors.
 
expr sgt (expr const &a, int b)
 
expr sgt (int a, expr const &b)
 
expr ule (expr const &a, expr const &b)
 unsigned less than or equal to operator for bitvectors.
 
expr ule (expr const &a, int b)
 
expr ule (int a, expr const &b)
 
expr ult (expr const &a, expr const &b)
 unsigned less than operator for bitvectors.
 
expr ult (expr const &a, int b)
 
expr ult (int a, expr const &b)
 
expr uge (expr const &a, expr const &b)
 unsigned greater than or equal to operator for bitvectors.
 
expr uge (expr const &a, int b)
 
expr uge (int a, expr const &b)
 
expr ugt (expr const &a, expr const &b)
 unsigned greater than operator for bitvectors.
 
expr ugt (expr const &a, int b)
 
expr ugt (int a, expr const &b)
 
expr sdiv (expr const &a, expr const &b)
 signed division operator for bitvectors.
 
expr sdiv (expr const &a, int b)
 
expr sdiv (int a, expr const &b)
 
expr udiv (expr const &a, expr const &b)
 unsigned division operator for bitvectors.
 
expr udiv (expr const &a, int b)
 
expr udiv (int a, expr const &b)
 
expr srem (expr const &a, expr const &b)
 signed remainder operator for bitvectors
 
expr srem (expr const &a, int b)
 
expr srem (int a, expr const &b)
 
expr smod (expr const &a, expr const &b)
 signed modulus operator for bitvectors
 
expr smod (expr const &a, int b)
 
expr smod (int a, expr const &b)
 
expr urem (expr const &a, expr const &b)
 unsigned reminder operator for bitvectors
 
expr urem (expr const &a, int b)
 
expr urem (int a, expr const &b)
 
expr shl (expr const &a, expr const &b)
 shift left operator for bitvectors
 
expr shl (expr const &a, int b)
 
expr shl (int a, expr const &b)
 
expr lshr (expr const &a, expr const &b)
 logic shift right operator for bitvectors
 
expr lshr (expr const &a, int b)
 
expr lshr (int a, expr const &b)
 
expr ashr (expr const &a, expr const &b)
 arithmetic shift right operator for bitvectors
 
expr ashr (expr const &a, int b)
 
expr ashr (int a, expr const &b)
 
expr zext (expr const &a, unsigned i)
 Extend the given bit-vector with zeros to the (unsigned) equivalent bitvector of size m+i, where m is the size of the given bit-vector.
 
expr bv2int (expr const &a, bool is_signed)
 bit-vector and integer conversions.
 
expr int2bv (unsigned n, expr const &a)
 
expr bvadd_no_overflow (expr const &a, expr const &b, bool is_signed)
 bit-vector overflow/underflow checks
 
expr bvadd_no_underflow (expr const &a, expr const &b)
 
expr bvsub_no_overflow (expr const &a, expr const &b)
 
expr bvsub_no_underflow (expr const &a, expr const &b, bool is_signed)
 
expr bvsdiv_no_overflow (expr const &a, expr const &b)
 
expr bvneg_no_overflow (expr const &a)
 
expr bvmul_no_overflow (expr const &a, expr const &b, bool is_signed)
 
expr bvmul_no_underflow (expr const &a, expr const &b)
 
expr sext (expr const &a, unsigned i)
 Sign-extend of the given bit-vector to the (signed) equivalent bitvector of size m+i, where m is the size of the given bit-vector.
 
func_decl linear_order (sort const &a, unsigned index)
 
func_decl partial_order (sort const &a, unsigned index)
 
func_decl piecewise_linear_order (sort const &a, unsigned index)
 
func_decl tree_order (sort const &a, unsigned index)
 
expr_vector polynomial_subresultants (expr const &p, expr const &q, expr const &x)
 Return the nonzero subresultants of p and q with respect to the "variable" x.
 
expr forall (expr const &x, expr const &b)
 
expr forall (expr const &x1, expr const &x2, expr const &b)
 
expr forall (expr const &x1, expr const &x2, expr const &x3, expr const &b)
 
expr forall (expr const &x1, expr const &x2, expr const &x3, expr const &x4, expr const &b)
 
expr forall (expr_vector const &xs, expr const &b)
 
expr exists (expr const &x, expr const &b)
 
expr exists (expr const &x1, expr const &x2, expr const &b)
 
expr exists (expr const &x1, expr const &x2, expr const &x3, expr const &b)
 
expr exists (expr const &x1, expr const &x2, expr const &x3, expr const &x4, expr const &b)
 
expr exists (expr_vector const &xs, expr const &b)
 
expr lambda (expr const &x, expr const &b)
 
expr lambda (expr const &x1, expr const &x2, expr const &b)
 
expr lambda (expr const &x1, expr const &x2, expr const &x3, expr const &b)
 
expr lambda (expr const &x1, expr const &x2, expr const &x3, expr const &x4, expr const &b)
 
expr lambda (expr_vector const &xs, expr const &b)
 
expr pble (expr_vector const &es, int const *coeffs, int bound)
 
expr pbge (expr_vector const &es, int const *coeffs, int bound)
 
expr pbeq (expr_vector const &es, int const *coeffs, int bound)
 
expr atmost (expr_vector const &es, unsigned bound)
 
expr atleast (expr_vector const &es, unsigned bound)
 
expr sum (expr_vector const &args)
 
expr distinct (expr_vector const &args)
 
expr concat (expr const &a, expr const &b)
 
expr concat (expr_vector const &args)
 
expr map (expr const &f, expr const &list)
 
expr mapi (expr const &f, expr const &i, expr const &list)
 
expr foldl (expr const &f, expr const &a, expr const &list)
 
expr foldli (expr const &f, expr const &i, expr const &a, expr const &list)
 
expr mk_or (expr_vector const &args)
 
expr mk_and (expr_vector const &args)
 
expr mk_xor (expr_vector const &args)
 
std::ostream & operator<< (std::ostream &out, model const &m)
 
std::ostream & operator<< (std::ostream &out, stats const &s)
 
std::ostream & operator<< (std::ostream &out, check_result r)
 
std::ostream & operator<< (std::ostream &out, solver const &s)
 
std::ostream & operator<< (std::ostream &out, goal const &g)
 
std::ostream & operator<< (std::ostream &out, apply_result const &r)
 
tactic operator& (tactic const &t1, tactic const &t2)
 
tactic operator| (tactic const &t1, tactic const &t2)
 
tactic repeat (tactic const &t, unsigned max=UINT_MAX)
 
tactic with (tactic const &t, params const &p)
 
tactic try_for (tactic const &t, unsigned ms)
 
tactic par_or (unsigned n, tactic const *tactics)
 
tactic par_and_then (tactic const &t1, tactic const &t2)
 
simplifier operator& (simplifier const &t1, simplifier const &t2)
 
simplifier with (simplifier const &t, params const &p)
 
probe operator<= (probe const &p1, probe const &p2)
 
probe operator<= (probe const &p1, double p2)
 
probe operator<= (double p1, probe const &p2)
 
probe operator>= (probe const &p1, probe const &p2)
 
probe operator>= (probe const &p1, double p2)
 
probe operator>= (double p1, probe const &p2)
 
probe operator< (probe const &p1, probe const &p2)
 
probe operator< (probe const &p1, double p2)
 
probe operator< (double p1, probe const &p2)
 
probe operator> (probe const &p1, probe const &p2)
 
probe operator> (probe const &p1, double p2)
 
probe operator> (double p1, probe const &p2)
 
probe operator== (probe const &p1, probe const &p2)
 
probe operator== (probe const &p1, double p2)
 
probe operator== (double p1, probe const &p2)
 
probe operator&& (probe const &p1, probe const &p2)
 
probe operator|| (probe const &p1, probe const &p2)
 
probe operator! (probe const &p)
 
std::ostream & operator<< (std::ostream &out, optimize const &s)
 
std::ostream & operator<< (std::ostream &out, fixedpoint const &f)
 
tactic fail_if (probe const &p)
 
tactic when (probe const &p, tactic const &t)
 
tactic cond (probe const &p, tactic const &t1, tactic const &t2)
 
expr to_real (expr const &a)
 
func_decl function (symbol const &name, unsigned arity, sort const *domain, sort const &range)
 
func_decl function (char const *name, unsigned arity, sort const *domain, sort const &range)
 
func_decl function (char const *name, sort const &domain, sort const &range)
 
func_decl function (char const *name, sort const &d1, sort const &d2, sort const &range)
 
func_decl function (char const *name, sort const &d1, sort const &d2, sort const &d3, sort const &range)
 
func_decl function (char const *name, sort const &d1, sort const &d2, sort const &d3, sort const &d4, sort const &range)
 
func_decl function (char const *name, sort const &d1, sort const &d2, sort const &d3, sort const &d4, sort const &d5, sort const &range)
 
func_decl function (char const *name, sort_vector const &domain, sort const &range)
 
func_decl function (std::string const &name, sort_vector const &domain, sort const &range)
 
func_decl recfun (symbol const &name, unsigned arity, sort const *domain, sort const &range)
 
func_decl recfun (char const *name, unsigned arity, sort const *domain, sort const &range)
 
func_decl recfun (char const *name, sort const &d1, sort const &range)
 
func_decl recfun (char const *name, sort const &d1, sort const &d2, sort const &range)
 
expr select (expr const &a, int i)
 
expr store (expr const &a, expr const &i, expr const &v)
 
expr store (expr const &a, int i, expr const &v)
 
expr store (expr const &a, expr i, int v)
 
expr store (expr const &a, int i, int v)
 
expr store (expr const &a, expr_vector const &i, expr const &v)
 
expr as_array (func_decl &f)
 
expr array_default (expr const &a)
 
expr array_ext (expr const &a, expr const &b)
 
expr const_array (sort const &d, expr const &v)
 
expr empty_set (sort const &s)
 
expr full_set (sort const &s)
 
expr set_add (expr const &s, expr const &e)
 
expr set_del (expr const &s, expr const &e)
 
expr set_union (expr const &a, expr const &b)
 
expr set_intersect (expr const &a, expr const &b)
 
expr set_difference (expr const &a, expr const &b)
 
expr set_complement (expr const &a)
 
expr set_member (expr const &s, expr const &e)
 
expr set_subset (expr const &a, expr const &b)
 
expr empty (sort const &s)
 
expr suffixof (expr const &a, expr const &b)
 
expr prefixof (expr const &a, expr const &b)
 
expr indexof (expr const &s, expr const &substr, expr const &offset)
 
expr last_indexof (expr const &s, expr const &substr)
 
expr to_re (expr const &s)
 
expr in_re (expr const &s, expr const &re)
 
expr plus (expr const &re)
 
expr option (expr const &re)
 
expr star (expr const &re)
 
expr re_empty (sort const &s)
 
expr re_full (sort const &s)
 
expr re_intersect (expr_vector const &args)
 
expr re_diff (expr const &a, expr const &b)
 
expr re_complement (expr const &a)
 
expr range (expr const &lo, expr const &hi)
 

Detailed Description

Z3 C++ namespace.

Typedef Documentation

◆ ast_vector

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

◆ expr_vector

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

◆ func_decl_vector

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

◆ on_clause_eh_t

typedef std::function<void(expr const& proof, std::vector<unsigned> const& deps, expr_vector const& clause)> on_clause_eh_t

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

◆ sort_vector

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

Enumeration Type Documentation

◆ check_result

Enumerator
unsat 
sat 
unknown 

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

165 {
166 unsat, sat, unknown
167 };

◆ rounding_mode

Enumerator
RNA 
RNE 
RTP 
RTN 
RTZ 

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

169 {
170 RNA,
171 RNE,
172 RTP,
173 RTN,
174 RTZ
175 };
@ RNE
Definition z3++.h:171
@ RNA
Definition z3++.h:170
@ RTZ
Definition z3++.h:174
@ RTN
Definition z3++.h:173
@ RTP
Definition z3++.h:172

Function Documentation

◆ abs()

expr abs ( expr const a)
inline

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

2052 {
2053 Z3_ast r;
2054 if (a.is_int()) {
2055 expr zero = a.ctx().int_val(0);
2056 expr ge = a >= zero;
2057 expr na = -a;
2058 r = Z3_mk_ite(a.ctx(), ge, a, na);
2059 }
2060 else if (a.is_real()) {
2061 expr zero = a.ctx().real_val(0);
2062 expr ge = a >= zero;
2063 expr na = -a;
2064 r = Z3_mk_ite(a.ctx(), ge, a, na);
2065 }
2066 else {
2067 r = Z3_mk_fpa_abs(a.ctx(), a);
2068 }
2069 a.check_error();
2070 return expr(a.ctx(), r);
2071 }
A Z3 expression is used to represent formulas and terms. For Z3, a formula is any expression of sort ...
Definition z3++.h:858
Z3_ast Z3_API Z3_mk_ite(Z3_context c, Z3_ast t1, Z3_ast t2, Z3_ast t3)
Create an AST node representing an if-then-else: ite(t1, t2, t3).
Z3_ast Z3_API Z3_mk_fpa_abs(Z3_context c, Z3_ast t)
Floating-point absolute value.

◆ array_default()

expr array_default ( expr const a)
inline

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

4141 {
4142 Z3_ast r = Z3_mk_array_default(a.ctx(), a);
4143 a.check_error();
4144 return expr(a.ctx(), r);
4145 }
Z3_ast Z3_API Z3_mk_array_default(Z3_context c, Z3_ast array)
Access the array default value. Produces the default range value, for arrays that can be represented ...

◆ array_ext()

expr array_ext ( expr const a,
expr const b 
)
inline

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

4147 {
4148 check_context(a, b);
4149 Z3_ast r = Z3_mk_array_ext(a.ctx(), a, b);
4150 a.check_error();
4151 return expr(a.ctx(), r);
4152 }
Z3_ast Z3_API Z3_mk_array_ext(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create array extensionality index given two arrays with the same sort. The meaning is given by the ax...
void check_context(object const &a, object const &b)
Definition z3++.h:525

◆ as_array()

expr as_array ( func_decl f)
inline

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

4135 {
4136 Z3_ast r = Z3_mk_as_array(f.ctx(), f);
4137 f.check_error();
4138 return expr(f.ctx(), r);
4139 }
Z3_error_code check_error() const
Definition z3++.h:522
context & ctx() const
Definition z3++.h:521
Z3_ast Z3_API Z3_mk_as_array(Z3_context c, Z3_func_decl f)
Create array with the same interpretation as a function. The array satisfies the property (f x) = (se...

◆ ashr() [1/3]

expr ashr ( expr const a,
expr const b 
)
inline

arithmetic shift right operator for bitvectors

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

2286{ return to_expr(a.ctx(), Z3_mk_bvashr(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvashr(Z3_context c, Z3_ast t1, Z3_ast t2)
Arithmetic shift right.
expr to_expr(context &c, Z3_ast a)
Wraps a Z3_ast as an expr object. It also checks for errors. This function allows the user to use the...
Definition z3++.h:2164

Referenced by ashr(), and ashr().

◆ ashr() [2/3]

expr ashr ( expr const a,
int  b 
)
inline

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

2287{ return ashr(a, a.ctx().num_val(b, a.get_sort())); }
expr ashr(expr const &a, expr const &b)
arithmetic shift right operator for bitvectors
Definition z3++.h:2286

◆ ashr() [3/3]

expr ashr ( int  a,
expr const b 
)
inline

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

2288{ return ashr(b.ctx().num_val(a, b.get_sort()), b); }

◆ atleast()

expr atleast ( expr_vector const es,
unsigned  bound 
)
inline

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

2508 {
2509 assert(es.size() > 0);
2510 context& ctx = es[0u].ctx();
2512 Z3_ast r = Z3_mk_atleast(ctx, _es.size(), _es.ptr(), bound);
2513 ctx.check_error();
2514 return expr(ctx, r);
2515 }
A Context manages all other Z3 objects, global configuration options, etc.
Definition z3++.h:190
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition z3++.h:222
Z3_ast Z3_API Z3_mk_atleast(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.

◆ atmost()

expr atmost ( expr_vector const es,
unsigned  bound 
)
inline

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

2500 {
2501 assert(es.size() > 0);
2502 context& ctx = es[0u].ctx();
2504 Z3_ast r = Z3_mk_atmost(ctx, _es.size(), _es.ptr(), bound);
2505 ctx.check_error();
2506 return expr(ctx, r);
2507 }
Z3_ast Z3_API Z3_mk_atmost(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.

◆ bv2int()

expr bv2int ( expr const a,
bool  is_signed 
)
inline

bit-vector and integer conversions.

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

2298{ Z3_ast r = Z3_mk_bv2int(a.ctx(), a, is_signed); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bv2int(Z3_context c, Z3_ast t1, bool is_signed)
Create an integer from the bit-vector argument t1. If is_signed is false, then the bit-vector t1 is t...

◆ bvadd_no_overflow()

expr bvadd_no_overflow ( expr const a,
expr const b,
bool  is_signed 
)
inline

bit-vector overflow/underflow checks

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

2304 {
2305 check_context(a, b); Z3_ast r = Z3_mk_bvadd_no_overflow(a.ctx(), a, b, is_signed); a.check_error(); return expr(a.ctx(), r);
2306 }
Z3_ast Z3_API Z3_mk_bvadd_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise addition of t1 and t2 does not overflow.

◆ bvadd_no_underflow()

expr bvadd_no_underflow ( expr const a,
expr const b 
)
inline

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

2307 {
2308 check_context(a, b); Z3_ast r = Z3_mk_bvadd_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2309 }
Z3_ast Z3_API Z3_mk_bvadd_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed addition of t1 and t2 does not underflow.

◆ bvmul_no_overflow()

expr bvmul_no_overflow ( expr const a,
expr const b,
bool  is_signed 
)
inline

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

2322 {
2323 check_context(a, b); Z3_ast r = Z3_mk_bvmul_no_overflow(a.ctx(), a, b, is_signed); a.check_error(); return expr(a.ctx(), r);
2324 }
Z3_ast Z3_API Z3_mk_bvmul_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise multiplication of t1 and t2 does not overflow.

◆ bvmul_no_underflow()

expr bvmul_no_underflow ( expr const a,
expr const b 
)
inline

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

2325 {
2326 check_context(a, b); Z3_ast r = Z3_mk_bvmul_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2327 }
Z3_ast Z3_API Z3_mk_bvmul_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed multiplication of t1 and t2 does not underflo...

◆ bvneg_no_overflow()

expr bvneg_no_overflow ( expr const a)
inline

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

2319 {
2320 Z3_ast r = Z3_mk_bvneg_no_overflow(a.ctx(), a); a.check_error(); return expr(a.ctx(), r);
2321 }
Z3_ast Z3_API Z3_mk_bvneg_no_overflow(Z3_context c, Z3_ast t1)
Check that bit-wise negation does not overflow when t1 is interpreted as a signed bit-vector.

◆ bvredand()

expr bvredand ( expr const a)
inline

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

2046 {
2047 assert(a.is_bv());
2048 Z3_ast r = Z3_mk_bvredand(a.ctx(), a);
2049 a.check_error();
2050 return expr(a.ctx(), r);
2051 }
Z3_ast Z3_API Z3_mk_bvredand(Z3_context c, Z3_ast t1)
Take conjunction of bits in vector, return vector of length 1.

◆ bvredor()

expr bvredor ( expr const a)
inline

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

2040 {
2041 assert(a.is_bv());
2042 Z3_ast r = Z3_mk_bvredor(a.ctx(), a);
2043 a.check_error();
2044 return expr(a.ctx(), r);
2045 }
Z3_ast Z3_API Z3_mk_bvredor(Z3_context c, Z3_ast t1)
Take disjunction of bits in vector, return vector of length 1.

◆ bvsdiv_no_overflow()

expr bvsdiv_no_overflow ( expr const a,
expr const b 
)
inline

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

2316 {
2317 check_context(a, b); Z3_ast r = Z3_mk_bvsdiv_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2318 }
Z3_ast Z3_API Z3_mk_bvsdiv_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed division of t1 and t2 does not overflow.

◆ bvsub_no_overflow()

expr bvsub_no_overflow ( expr const a,
expr const b 
)
inline

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

2310 {
2311 check_context(a, b); Z3_ast r = Z3_mk_bvsub_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2312 }
Z3_ast Z3_API Z3_mk_bvsub_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed subtraction of t1 and t2 does not overflow.

◆ bvsub_no_underflow()

expr bvsub_no_underflow ( expr const a,
expr const b,
bool  is_signed 
)
inline

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

2313 {
2314 check_context(a, b); Z3_ast r = Z3_mk_bvsub_no_underflow(a.ctx(), a, b, is_signed); a.check_error(); return expr(a.ctx(), r);
2315 }
Z3_ast Z3_API Z3_mk_bvsub_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise subtraction of t1 and t2 does not underflow.

◆ check_context()

void check_context ( object const a,
object const b 
)
inline

◆ concat() [1/2]

expr concat ( expr const a,
expr const b 
)
inline

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

2534 {
2535 check_context(a, b);
2536 Z3_ast r;
2537 if (Z3_is_seq_sort(a.ctx(), a.get_sort())) {
2538 Z3_ast _args[2] = { a, b };
2539 r = Z3_mk_seq_concat(a.ctx(), 2, _args);
2540 }
2541 else if (Z3_is_re_sort(a.ctx(), a.get_sort())) {
2542 Z3_ast _args[2] = { a, b };
2543 r = Z3_mk_re_concat(a.ctx(), 2, _args);
2544 }
2545 else {
2546 r = Z3_mk_concat(a.ctx(), a, b);
2547 }
2548 a.ctx().check_error();
2549 return expr(a.ctx(), r);
2550 }
bool Z3_API Z3_is_seq_sort(Z3_context c, Z3_sort s)
Check if s is a sequence sort.
Z3_ast Z3_API Z3_mk_seq_concat(Z3_context c, unsigned n, Z3_ast const args[])
Concatenate sequences.
Z3_ast Z3_API Z3_mk_re_concat(Z3_context c, unsigned n, Z3_ast const args[])
Create the concatenation of the regular languages.
Z3_ast Z3_API Z3_mk_concat(Z3_context c, Z3_ast t1, Z3_ast t2)
Concatenate the given bit-vectors.
bool Z3_API Z3_is_re_sort(Z3_context c, Z3_sort s)
Check if s is a regular expression sort.
System.IntPtr Z3_ast

◆ concat() [2/2]

expr concat ( expr_vector const args)
inline

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

2552 {
2553 Z3_ast r;
2554 assert(args.size() > 0);
2555 if (args.size() == 1) {
2556 return args[0u];
2557 }
2558 context& ctx = args[0u].ctx();
2559 array<Z3_ast> _args(args);
2560 if (Z3_is_seq_sort(ctx, args[0u].get_sort())) {
2561 r = Z3_mk_seq_concat(ctx, _args.size(), _args.ptr());
2562 }
2563 else if (Z3_is_re_sort(ctx, args[0u].get_sort())) {
2564 r = Z3_mk_re_concat(ctx, _args.size(), _args.ptr());
2565 }
2566 else {
2567 r = _args[args.size()-1];
2568 for (unsigned i = args.size()-1; i > 0; ) {
2569 --i;
2570 r = Z3_mk_concat(ctx, _args[i], r);
2571 ctx.check_error();
2572 }
2573 }
2574 ctx.check_error();
2575 return expr(ctx, r);
2576 }

◆ cond()

tactic cond ( probe const p,
tactic const t1,
tactic const t2 
)
inline

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

3598 {
3600 Z3_tactic r = Z3_tactic_cond(t1.ctx(), p, t1, t2);
3601 t1.check_error();
3602 return tactic(t1.ctx(), r);
3603 }
Z3_tactic Z3_API Z3_tactic_cond(Z3_context c, Z3_probe p, Z3_tactic t1, Z3_tactic t2)
Return a tactic that applies t1 to a given goal if the probe p evaluates to true, and t2 if p evaluat...

◆ const_array()

expr const_array ( sort const d,
expr const v 
)
inline

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

4165 {
4167 }
Z3_ast Z3_API Z3_mk_const_array(Z3_context c, Z3_sort domain, Z3_ast v)
Create the constant array.
#define MK_EXPR2(_fn, _arg1, _arg2)
Definition z3++.h:4159

◆ disable_trace()

void disable_trace ( char const tag)
inline

Disable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.

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

111 {
113 }
void Z3_API Z3_disable_trace(Z3_string tag)
Disable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.

◆ distinct()

expr distinct ( expr_vector const args)
inline

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

2525 {
2526 assert(args.size() > 0);
2527 context& ctx = args[0u].ctx();
2528 array<Z3_ast> _args(args);
2529 Z3_ast r = Z3_mk_distinct(ctx, _args.size(), _args.ptr());
2530 ctx.check_error();
2531 return expr(ctx, r);
2532 }
Z3_ast Z3_API Z3_mk_distinct(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing distinct(args[0], ..., args[num_args-1]).

◆ empty()

expr empty ( sort const s)
inline

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

4221 {
4222 Z3_ast r = Z3_mk_seq_empty(s.ctx(), s);
4223 s.check_error();
4224 return expr(s.ctx(), r);
4225 }
Z3_ast Z3_API Z3_mk_seq_empty(Z3_context c, Z3_sort seq)
Create an empty sequence of the sequence sort seq.

◆ empty_set()

expr empty_set ( sort const s)
inline

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

4169 {
4171 }
Z3_ast Z3_API Z3_mk_empty_set(Z3_context c, Z3_sort domain)
Create the empty set.
#define MK_EXPR1(_fn, _arg)
Definition z3++.h:4154

◆ enable_trace()

void enable_trace ( char const tag)
inline

Enable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.

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

103 {
105 }
void Z3_API Z3_enable_trace(Z3_string tag)
Enable tracing messages tagged as tag when Z3 is compiled in debug mode. It is a NOOP otherwise.

◆ eq()

bool eq ( ast const a,
ast const b 
)
inline

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

631{ return Z3_is_eq_ast(a.ctx(), a, b); }
bool Z3_API Z3_is_eq_ast(Z3_context c, Z3_ast t1, Z3_ast t2)
Compare terms.

◆ exists() [1/5]

expr exists ( expr const x,
expr const b 
)
inline

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

2427 {
2428 check_context(x, b);
2429 Z3_app vars[] = {(Z3_app) x};
2430 Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 1, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2431 }
Z3_ast Z3_API Z3_mk_exists_const(Z3_context c, unsigned weight, unsigned num_bound, Z3_app const bound[], unsigned num_patterns, Z3_pattern const patterns[], Z3_ast body)
Similar to Z3_mk_forall_const.

◆ exists() [2/5]

expr exists ( expr const x1,
expr const x2,
expr const b 
)
inline

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

2432 {
2434 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2};
2435 Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 2, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2436 }

◆ exists() [3/5]

expr exists ( expr const x1,
expr const x2,
expr const x3,
expr const b 
)
inline

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

2437 {
2439 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3 };
2440 Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 3, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2441 }

◆ exists() [4/5]

expr exists ( expr const x1,
expr const x2,
expr const x3,
expr const x4,
expr const b 
)
inline

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

2442 {
2444 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3, (Z3_app) x4 };
2445 Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 4, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2446 }

◆ exists() [5/5]

expr exists ( expr_vector const xs,
expr const b 
)
inline

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

2447 {
2448 array<Z3_app> vars(xs);
2449 Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, vars.size(), vars.ptr(), 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2450 }

◆ fail_if()

tactic fail_if ( probe const p)
inline

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

3587 {
3588 Z3_tactic r = Z3_tactic_fail_if(p.ctx(), p);
3589 p.check_error();
3590 return tactic(p.ctx(), r);
3591 }
Z3_tactic Z3_API Z3_tactic_fail_if(Z3_context c, Z3_probe p)
Return a tactic that fails if the probe p evaluates to false.

◆ fma()

expr fma ( expr const a,
expr const b,
expr const c,
expr const rm 
)
inline

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

2088 {
2090 assert(a.is_fpa() && b.is_fpa() && c.is_fpa());
2091 Z3_ast r = Z3_mk_fpa_fma(a.ctx(), rm, a, b, c);
2092 a.check_error();
2093 return expr(a.ctx(), r);
2094 }
Z3_ast Z3_API Z3_mk_fpa_fma(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2, Z3_ast t3)
Floating-point fused multiply-add.

◆ foldl()

expr foldl ( expr const f,
expr const a,
expr const list 
)
inline

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

2592 {
2593 context& ctx = f.ctx();
2594 Z3_ast r = Z3_mk_seq_foldl(ctx, f, a, list);
2595 ctx.check_error();
2596 return expr(ctx, r);
2597 }
Z3_ast Z3_API Z3_mk_seq_foldl(Z3_context c, Z3_ast f, Z3_ast a, Z3_ast s)
Create a fold of the function f over the sequence s with accumulator a.

◆ foldli()

expr foldli ( expr const f,
expr const i,
expr const a,
expr const list 
)
inline

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

2599 {
2600 context& ctx = f.ctx();
2601 Z3_ast r = Z3_mk_seq_foldli(ctx, f, i, a, list);
2602 ctx.check_error();
2603 return expr(ctx, r);
2604 }
Z3_ast Z3_API Z3_mk_seq_foldli(Z3_context c, Z3_ast f, Z3_ast i, Z3_ast a, Z3_ast s)
Create a fold with index tracking of the function f over the sequence s with accumulator a starting a...

◆ forall() [1/5]

expr forall ( expr const x,
expr const b 
)
inline

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

2403 {
2404 check_context(x, b);
2405 Z3_app vars[] = {(Z3_app) x};
2406 Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 1, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2407 }
Z3_ast Z3_API Z3_mk_forall_const(Z3_context c, unsigned weight, unsigned num_bound, Z3_app const bound[], unsigned num_patterns, Z3_pattern const patterns[], Z3_ast body)
Create a universal quantifier using a list of constants that will form the set of bound variables.

◆ forall() [2/5]

expr forall ( expr const x1,
expr const x2,
expr const b 
)
inline

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

2408 {
2410 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2};
2411 Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 2, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2412 }

◆ forall() [3/5]

expr forall ( expr const x1,
expr const x2,
expr const x3,
expr const b 
)
inline

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

2413 {
2415 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3 };
2416 Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 3, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2417 }

◆ forall() [4/5]

expr forall ( expr const x1,
expr const x2,
expr const x3,
expr const x4,
expr const b 
)
inline

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

2418 {
2420 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3, (Z3_app) x4 };
2421 Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 4, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2422 }

◆ forall() [5/5]

expr forall ( expr_vector const xs,
expr const b 
)
inline

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

2423 {
2424 array<Z3_app> vars(xs);
2425 Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, vars.size(), vars.ptr(), 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2426 }

◆ fp_eq()

expr fp_eq ( expr const a,
expr const b 
)
inline

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

2079 {
2080 check_context(a, b);
2081 assert(a.is_fpa());
2082 Z3_ast r = Z3_mk_fpa_eq(a.ctx(), a, b);
2083 a.check_error();
2084 return expr(a.ctx(), r);
2085 }
Z3_ast Z3_API Z3_mk_fpa_eq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point equality.

◆ fpa_fp()

expr fpa_fp ( expr const sgn,
expr const exp,
expr const sig 
)
inline

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

2096 {
2098 assert(sgn.is_bv() && exp.is_bv() && sig.is_bv());
2099 Z3_ast r = Z3_mk_fpa_fp(sgn.ctx(), sgn, exp, sig);
2100 sgn.check_error();
2101 return expr(sgn.ctx(), r);
2102 }
Z3_ast Z3_API Z3_mk_fpa_fp(Z3_context c, Z3_ast sgn, Z3_ast exp, Z3_ast sig)
Create an expression of FloatingPoint sort from three bit-vector expressions.

◆ fpa_to_fpa()

expr fpa_to_fpa ( expr const t,
sort  s 
)
inline

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

2132 {
2133 assert(t.is_fpa());
2134 Z3_ast r = Z3_mk_fpa_to_fp_float(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2135 t.check_error();
2136 return expr(t.ctx(), r);
2137 }
Z3_ast Z3_API Z3_mk_fpa_to_fp_float(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a FloatingPoint term into another term of different FloatingPoint sort.

◆ fpa_to_sbv()

expr fpa_to_sbv ( expr const t,
unsigned  sz 
)
inline

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

2104 {
2105 assert(t.is_fpa());
2106 Z3_ast r = Z3_mk_fpa_to_sbv(t.ctx(), t.ctx().fpa_rounding_mode(), t, sz);
2107 t.check_error();
2108 return expr(t.ctx(), r);
2109 }
Z3_ast Z3_API Z3_mk_fpa_to_sbv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz)
Conversion of a floating-point term into a signed bit-vector.

◆ fpa_to_ubv()

expr fpa_to_ubv ( expr const t,
unsigned  sz 
)
inline

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

2111 {
2112 assert(t.is_fpa());
2113 Z3_ast r = Z3_mk_fpa_to_ubv(t.ctx(), t.ctx().fpa_rounding_mode(), t, sz);
2114 t.check_error();
2115 return expr(t.ctx(), r);
2116 }
Z3_ast Z3_API Z3_mk_fpa_to_ubv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz)
Conversion of a floating-point term into an unsigned bit-vector.

◆ full_set()

expr full_set ( sort const s)
inline

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

4173 {
4175 }
Z3_ast Z3_API Z3_mk_full_set(Z3_context c, Z3_sort domain)
Create the full set.

◆ function() [1/9]

func_decl function ( char const name,
sort const d1,
sort const d2,
sort const d3,
sort const d4,
sort const d5,
sort const range 
)
inline

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

4075 {
4076 return range.ctx().function(name, d1, d2, d3, d4, d5, range);
4077 }
func_decl function(symbol const &name, unsigned arity, sort const *domain, sort const &range)
Definition z3++.h:3778
expr range(expr const &lo, expr const &hi)
Definition z3++.h:4293

◆ function() [2/9]

func_decl function ( char const name,
sort const d1,
sort const d2,
sort const d3,
sort const d4,
sort const range 
)
inline

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

4072 {
4073 return range.ctx().function(name, d1, d2, d3, d4, range);
4074 }

◆ function() [3/9]

func_decl function ( char const name,
sort const d1,
sort const d2,
sort const d3,
sort const range 
)
inline

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

4069 {
4070 return range.ctx().function(name, d1, d2, d3, range);
4071 }

◆ function() [4/9]

func_decl function ( char const name,
sort const d1,
sort const d2,
sort const range 
)
inline

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

4066 {
4067 return range.ctx().function(name, d1, d2, range);
4068 }

◆ function() [5/9]

func_decl function ( char const name,
sort const domain,
sort const range 
)
inline

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

4063 {
4064 return range.ctx().function(name, domain, range);
4065 }

◆ function() [6/9]

func_decl function ( char const name,
sort_vector const domain,
sort const range 
)
inline

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

4078 {
4079 return range.ctx().function(name, domain, range);
4080 }

◆ function() [7/9]

func_decl function ( char const name,
unsigned  arity,
sort const domain,
sort const range 
)
inline

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

4060 {
4061 return range.ctx().function(name, arity, domain, range);
4062 }

◆ function() [8/9]

func_decl function ( std::string const name,
sort_vector const domain,
sort const range 
)
inline

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

4081 {
4082 return range.ctx().function(name.c_str(), domain, range);
4083 }

◆ function() [9/9]

func_decl function ( symbol const name,
unsigned  arity,
sort const domain,
sort const range 
)
inline

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

4057 {
4058 return range.ctx().function(name, arity, domain, range);
4059 }

◆ get_full_version()

std::string get_full_version ( )
inline

Return a string that fully describes the version of Z3 in use.

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

95 {
96 return std::string(Z3_get_full_version());
97 }
Z3_string Z3_API Z3_get_full_version(void)
Return a string that fully describes the version of Z3 in use.

◆ get_version()

void get_version ( unsigned &  major,
unsigned &  minor,
unsigned &  build_number,
unsigned &  revision_number 
)
inline

Return Z3 version number information.

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

88 {
90 }
void Z3_API Z3_get_version(unsigned *major, unsigned *minor, unsigned *build_number, unsigned *revision_number)
Return Z3 version number information.

◆ implies() [1/3]

expr implies ( bool  a,
expr const b 
)
inline

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

1691{ return implies(b.ctx().bool_val(a), b); }
expr implies(expr const &a, expr const &b)
Definition z3++.h:1686

◆ implies() [2/3]

expr implies ( expr const a,
bool  b 
)
inline

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

1690{ return implies(a, a.ctx().bool_val(b)); }

◆ implies() [3/3]

expr implies ( expr const a,
expr const b 
)
inline

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

1686 {
1687 assert(a.is_bool() && b.is_bool());
1689 }
Z3_ast Z3_API Z3_mk_implies(Z3_context c, Z3_ast t1, Z3_ast t2)
Create an AST node representing t1 implies t2.
#define _Z3_MK_BIN_(a, b, binop)
Definition z3++.h:1679

◆ in_re()

expr in_re ( expr const s,
expr const re 
)
inline

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

4253 {
4255 }
Z3_ast Z3_API Z3_mk_seq_in_re(Z3_context c, Z3_ast seq, Z3_ast re)
Check if seq is in the language generated by the regular expression re.

◆ indexof()

expr indexof ( expr const s,
expr const substr,
expr const offset 
)
inline

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

4238 {
4240 Z3_ast r = Z3_mk_seq_index(s.ctx(), s, substr, offset);
4241 s.check_error();
4242 return expr(s.ctx(), r);
4243 }
Z3_ast Z3_API Z3_mk_seq_index(Z3_context c, Z3_ast s, Z3_ast substr, Z3_ast offset)
Return index of the first occurrence of substr in s starting from offset offset. If s does not contai...

◆ int2bv()

expr int2bv ( unsigned  n,
expr const a 
)
inline

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

2299{ Z3_ast r = Z3_mk_int2bv(a.ctx(), n, a); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_int2bv(Z3_context c, unsigned n, Z3_ast t1)
Create an n bit bit-vector from the integer argument t1.

◆ is_int()

expr is_int ( expr const e)
inline

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

1734{ _Z3_MK_UN_(e, Z3_mk_is_int); }
Z3_ast Z3_API Z3_mk_is_int(Z3_context c, Z3_ast t1)
Check if a real number is an integer.
#define _Z3_MK_UN_(a, mkun)
Definition z3++.h:1726

◆ ite()

expr ite ( expr const c,
expr const t,
expr const e 
)
inline

Create the if-then-else expression ite(c, t, e)

Precondition
c.is_bool()

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

2151 {
2152 check_context(c, t); check_context(c, e);
2153 assert(c.is_bool());
2154 Z3_ast r = Z3_mk_ite(c.ctx(), c, t, e);
2155 c.check_error();
2156 return expr(c.ctx(), r);
2157 }

◆ lambda() [1/5]

expr lambda ( expr const x,
expr const b 
)
inline

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

2451 {
2452 check_context(x, b);
2453 Z3_app vars[] = {(Z3_app) x};
2454 Z3_ast r = Z3_mk_lambda_const(b.ctx(), 1, vars, b); b.check_error(); return expr(b.ctx(), r);
2455 }
Z3_ast Z3_API Z3_mk_lambda_const(Z3_context c, unsigned num_bound, Z3_app const bound[], Z3_ast body)
Create a lambda expression using a list of constants that form the set of bound variables.

◆ lambda() [2/5]

expr lambda ( expr const x1,
expr const x2,
expr const b 
)
inline

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

2456 {
2458 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2};
2459 Z3_ast r = Z3_mk_lambda_const(b.ctx(), 2, vars, b); b.check_error(); return expr(b.ctx(), r);
2460 }

◆ lambda() [3/5]

expr lambda ( expr const x1,
expr const x2,
expr const x3,
expr const b 
)
inline

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

2461 {
2463 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3 };
2464 Z3_ast r = Z3_mk_lambda_const(b.ctx(), 3, vars, b); b.check_error(); return expr(b.ctx(), r);
2465 }

◆ lambda() [4/5]

expr lambda ( expr const x1,
expr const x2,
expr const x3,
expr const x4,
expr const b 
)
inline

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

2466 {
2468 Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3, (Z3_app) x4 };
2469 Z3_ast r = Z3_mk_lambda_const(b.ctx(), 4, vars, b); b.check_error(); return expr(b.ctx(), r);
2470 }

◆ lambda() [5/5]

expr lambda ( expr_vector const xs,
expr const b 
)
inline

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

2471 {
2472 array<Z3_app> vars(xs);
2473 Z3_ast r = Z3_mk_lambda_const(b.ctx(), vars.size(), vars.ptr(), b); b.check_error(); return expr(b.ctx(), r);
2474 }

◆ last_indexof()

expr last_indexof ( expr const s,
expr const substr 
)
inline

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

4244 {
4245 check_context(s, substr);
4246 Z3_ast r = Z3_mk_seq_last_index(s.ctx(), s, substr);
4247 s.check_error();
4248 return expr(s.ctx(), r);
4249 }
Z3_ast Z3_API Z3_mk_seq_last_index(Z3_context c, Z3_ast s, Z3_ast substr)
Return index of the last occurrence of substr in s. If s does not contain substr, then the value is -...

◆ linear_order()

func_decl linear_order ( sort const a,
unsigned  index 
)
inline

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

2335 {
2336 return to_func_decl(a.ctx(), Z3_mk_linear_order(a.ctx(), a, index));
2337 }
Z3_func_decl Z3_API Z3_mk_linear_order(Z3_context c, Z3_sort a, unsigned id)
create a linear ordering relation over signature a. The relation is identified by the index id.
func_decl to_func_decl(context &c, Z3_func_decl f)
Definition z3++.h:2178

◆ lshr() [1/3]

expr lshr ( expr const a,
expr const b 
)
inline

logic shift right operator for bitvectors

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

2279{ return to_expr(a.ctx(), Z3_mk_bvlshr(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvlshr(Z3_context c, Z3_ast t1, Z3_ast t2)
Logical shift right.

Referenced by lshr(), and lshr().

◆ lshr() [2/3]

expr lshr ( expr const a,
int  b 
)
inline

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

2280{ return lshr(a, a.ctx().num_val(b, a.get_sort())); }
expr lshr(expr const &a, expr const &b)
logic shift right operator for bitvectors
Definition z3++.h:2279

◆ lshr() [3/3]

expr lshr ( int  a,
expr const b 
)
inline

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

2281{ return lshr(b.ctx().num_val(a, b.get_sort()), b); }

◆ map()

expr map ( expr const f,
expr const list 
)
inline

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

2578 {
2579 context& ctx = f.ctx();
2580 Z3_ast r = Z3_mk_seq_map(ctx, f, list);
2581 ctx.check_error();
2582 return expr(ctx, r);
2583 }
Z3_ast Z3_API Z3_mk_seq_map(Z3_context c, Z3_ast f, Z3_ast s)
Create a map of the function f over the sequence s.

◆ mapi()

expr mapi ( expr const f,
expr const i,
expr const list 
)
inline

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

2585 {
2586 context& ctx = f.ctx();
2587 Z3_ast r = Z3_mk_seq_mapi(ctx, f, i, list);
2588 ctx.check_error();
2589 return expr(ctx, r);
2590 }
Z3_ast Z3_API Z3_mk_seq_mapi(Z3_context c, Z3_ast f, Z3_ast i, Z3_ast s)
Create a map of the function f over the sequence s starting at index i.

◆ max()

expr max ( expr const a,
expr const b 
)
inline

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

2024 {
2025 check_context(a, b);
2026 Z3_ast r;
2027 if (a.is_arith()) {
2028 r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), a, b);
2029 }
2030 else if (a.is_bv()) {
2031 r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), a, b);
2032 }
2033 else {
2034 assert(a.is_fpa());
2035 r = Z3_mk_fpa_max(a.ctx(), a, b);
2036 }
2037 a.check_error();
2038 return expr(a.ctx(), r);
2039 }
Z3_ast Z3_API Z3_mk_ge(Z3_context c, Z3_ast t1, Z3_ast t2)
Create greater than or equal to.
Z3_ast Z3_API Z3_mk_fpa_max(Z3_context c, Z3_ast t1, Z3_ast t2)
Maximum of floating-point numbers.
Z3_ast Z3_API Z3_mk_bvuge(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned greater than or equal to.

◆ min()

expr min ( expr const a,
expr const b 
)
inline

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

2008 {
2009 check_context(a, b);
2010 Z3_ast r;
2011 if (a.is_arith()) {
2012 r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), b, a);
2013 }
2014 else if (a.is_bv()) {
2015 r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), b, a);
2016 }
2017 else {
2018 assert(a.is_fpa());
2019 r = Z3_mk_fpa_min(a.ctx(), a, b);
2020 }
2021 a.check_error();
2022 return expr(a.ctx(), r);
2023 }
Z3_ast Z3_API Z3_mk_fpa_min(Z3_context c, Z3_ast t1, Z3_ast t2)
Minimum of floating-point numbers.

◆ mk_and()

expr mk_and ( expr_vector const args)
inline

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

2612 {
2613 array<Z3_ast> _args(args);
2614 Z3_ast r = Z3_mk_and(args.ctx(), _args.size(), _args.ptr());
2615 args.check_error();
2616 return expr(args.ctx(), r);
2617 }
Z3_ast Z3_API Z3_mk_and(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] and ... and args[num_args-1].

◆ mk_or()

expr mk_or ( expr_vector const args)
inline

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

2606 {
2607 array<Z3_ast> _args(args);
2608 Z3_ast r = Z3_mk_or(args.ctx(), _args.size(), _args.ptr());
2609 args.check_error();
2610 return expr(args.ctx(), r);
2611 }
Z3_ast Z3_API Z3_mk_or(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] or ... or args[num_args-1].

◆ mk_xor()

expr mk_xor ( expr_vector const args)
inline

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

2618 {
2619 if (args.empty())
2620 return args.ctx().bool_val(false);
2621 expr r = args[0u];
2622 for (unsigned i = 1; i < args.size(); ++i)
2623 r = r ^ args[i];
2624 return r;
2625 }

◆ mod() [1/3]

expr mod ( expr const a,
expr const b 
)
inline

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

1698 {
1699 if (a.is_bv()) {
1701 }
1702 else {
1703 _Z3_MK_BIN_(a, b, Z3_mk_mod);
1704 }
1705 }
Z3_ast Z3_API Z3_mk_mod(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 mod arg2.
Z3_ast Z3_API Z3_mk_bvsmod(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed remainder (sign follows divisor).

Referenced by operator%(), operator%(), and operator%().

◆ mod() [2/3]

expr mod ( expr const a,
int  b 
)
inline

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

1706{ return mod(a, a.ctx().num_val(b, a.get_sort())); }
expr mod(expr const &a, expr const &b)
Definition z3++.h:1698

◆ mod() [3/3]

expr mod ( int  a,
expr const b 
)
inline

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

1707{ return mod(b.ctx().num_val(a, b.get_sort()), b); }

◆ nand()

expr nand ( expr const a,
expr const b 
)
inline

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

2005{ if (a.is_bool()) return !(a && b); check_context(a, b); Z3_ast r = Z3_mk_bvnand(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvnand(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise nand.

◆ nor()

expr nor ( expr const a,
expr const b 
)
inline

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

2006{ if (a.is_bool()) return !(a || b); check_context(a, b); Z3_ast r = Z3_mk_bvnor(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvnor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise nor.

◆ operator!() [1/2]

expr operator! ( expr const a)
inline
Precondition
a.is_bool()

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

1732{ assert(a.is_bool()); _Z3_MK_UN_(a, Z3_mk_not); }
Z3_ast Z3_API Z3_mk_not(Z3_context c, Z3_ast a)
Create an AST node representing not(a).

◆ operator!() [2/2]

probe operator! ( probe const p)
inline

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

3403 {
3404 Z3_probe r = Z3_probe_not(p.ctx(), p); p.check_error(); return probe(p.ctx(), r);
3405 }
Z3_probe Z3_API Z3_probe_not(Z3_context x, Z3_probe p)
Return a probe that evaluates to "true" when p does not evaluate to true.

◆ operator!=() [1/5]

expr operator!= ( double  a,
expr const b 
)
inline

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

1784{ assert(b.is_fpa()); return b.ctx().fpa_val(a) != b; }

◆ operator!=() [2/5]

expr operator!= ( expr const a,
double  b 
)
inline

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

1783{ assert(a.is_fpa()); return a != a.ctx().fpa_val(b); }

◆ operator!=() [3/5]

expr operator!= ( expr const a,
expr const b 
)
inline

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

1774 {
1775 check_context(a, b);
1776 Z3_ast args[2] = { a, b };
1777 Z3_ast r = Z3_mk_distinct(a.ctx(), 2, args);
1778 a.check_error();
1779 return expr(a.ctx(), r);
1780 }

◆ operator!=() [4/5]

expr operator!= ( expr const a,
int  b 
)
inline

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

1781{ assert(a.is_arith() || a.is_bv() || a.is_fpa()); return a != a.ctx().num_val(b, a.get_sort()); }

◆ operator!=() [5/5]

expr operator!= ( int  a,
expr const b 
)
inline

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

1782{ assert(b.is_arith() || b.is_bv() || b.is_fpa()); return b.ctx().num_val(a, b.get_sort()) != b; }

◆ operator%() [1/3]

expr operator% ( expr const a,
expr const b 
)
inline

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

1709{ return mod(a, b); }

◆ operator%() [2/3]

expr operator% ( expr const a,
int  b 
)
inline

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

1710{ return mod(a, b); }

◆ operator%() [3/3]

expr operator% ( int  a,
expr const b 
)
inline

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

1711{ return mod(a, b); }

◆ operator&() [1/5]

expr operator& ( expr const a,
expr const b 
)
inline

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

1993{ if (a.is_bool()) return a && b; check_context(a, b); Z3_ast r = Z3_mk_bvand(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvand(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise and.

◆ operator&() [2/5]

expr operator& ( expr const a,
int  b 
)
inline

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

1994{ return a & a.ctx().num_val(b, a.get_sort()); }

◆ operator&() [3/5]

expr operator& ( int  a,
expr const b 
)
inline

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

1995{ return b.ctx().num_val(a, b.get_sort()) & b; }

◆ operator&() [4/5]

simplifier operator& ( simplifier const t1,
simplifier const t2 
)
inline

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

3317 {
3319 Z3_simplifier r = Z3_simplifier_and_then(t1.ctx(), t1, t2);
3320 t1.check_error();
3321 return simplifier(t1.ctx(), r);
3322 }
Z3_simplifier Z3_API Z3_simplifier_and_then(Z3_context c, Z3_simplifier t1, Z3_simplifier t2)
Return a simplifier that applies t1 to a given goal and t2 to every subgoal produced by t1.

◆ operator&() [5/5]

tactic operator& ( tactic const t1,
tactic const t2 
)
inline

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

3243 {
3245 Z3_tactic r = Z3_tactic_and_then(t1.ctx(), t1, t2);
3246 t1.check_error();
3247 return tactic(t1.ctx(), r);
3248 }
Z3_tactic Z3_API Z3_tactic_and_then(Z3_context c, Z3_tactic t1, Z3_tactic t2)
Return a tactic that applies t1 to a given goal and t2 to every subgoal produced by t1.

◆ operator&&() [1/4]

expr operator&& ( bool  a,
expr const b 
)
inline
Precondition
b.is_bool()

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

1748{ return b.ctx().bool_val(a) && b; }

◆ operator&&() [2/4]

expr operator&& ( expr const a,
bool  b 
)
inline
Precondition
a.is_bool()

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

1747{ return a && a.ctx().bool_val(b); }

◆ operator&&() [3/4]

expr operator&& ( expr const a,
expr const b 
)
inline
Precondition
a.is_bool()
b.is_bool()

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

1738 {
1739 check_context(a, b);
1740 assert(a.is_bool() && b.is_bool());
1741 Z3_ast args[2] = { a, b };
1742 Z3_ast r = Z3_mk_and(a.ctx(), 2, args);
1743 a.check_error();
1744 return expr(a.ctx(), r);
1745 }

◆ operator&&() [4/4]

probe operator&& ( probe const p1,
probe const p2 
)
inline

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

3397 {
3398 check_context(p1, p2); Z3_probe r = Z3_probe_and(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3399 }
Z3_probe Z3_API Z3_probe_and(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when p1 and p2 evaluates to true.

◆ operator*() [1/3]

expr operator* ( expr const a,
expr const b 
)
inline

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

1816 {
1817 check_context(a, b);
1818 Z3_ast r = 0;
1819 if (a.is_arith() && b.is_arith()) {
1820 Z3_ast args[2] = { a, b };
1821 r = Z3_mk_mul(a.ctx(), 2, args);
1822 }
1823 else if (a.is_bv() && b.is_bv()) {
1824 r = Z3_mk_bvmul(a.ctx(), a, b);
1825 }
1826 else if (a.is_fpa() && b.is_fpa()) {
1827 r = Z3_mk_fpa_mul(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1828 }
1829 else {
1830 // operator is not supported by given arguments.
1831 assert(false);
1832 }
1833 a.check_error();
1834 return expr(a.ctx(), r);
1835 }
Z3_ast Z3_API Z3_mk_mul(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] * ... * args[num_args-1].
Z3_ast Z3_API Z3_mk_bvmul(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two's complement multiplication.
Z3_ast Z3_API Z3_mk_fpa_mul(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point multiplication.

◆ operator*() [2/3]

expr operator* ( expr const a,
int  b 
)
inline

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

1836{ return a * a.ctx().num_val(b, a.get_sort()); }

◆ operator*() [3/3]

expr operator* ( int  a,
expr const b 
)
inline

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

1837{ return b.ctx().num_val(a, b.get_sort()) * b; }

◆ operator+() [1/3]

expr operator+ ( expr const a,
expr const b 
)
inline

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

1786 {
1787 check_context(a, b);
1788 Z3_ast r = 0;
1789 if (a.is_arith() && b.is_arith()) {
1790 Z3_ast args[2] = { a, b };
1791 r = Z3_mk_add(a.ctx(), 2, args);
1792 }
1793 else if (a.is_bv() && b.is_bv()) {
1794 r = Z3_mk_bvadd(a.ctx(), a, b);
1795 }
1796 else if (a.is_seq() && b.is_seq()) {
1797 return concat(a, b);
1798 }
1799 else if (a.is_re() && b.is_re()) {
1800 Z3_ast _args[2] = { a, b };
1801 r = Z3_mk_re_union(a.ctx(), 2, _args);
1802 }
1803 else if (a.is_fpa() && b.is_fpa()) {
1804 r = Z3_mk_fpa_add(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1805 }
1806 else {
1807 // operator is not supported by given arguments.
1808 assert(false);
1809 }
1810 a.check_error();
1811 return expr(a.ctx(), r);
1812 }
Z3_ast Z3_API Z3_mk_re_union(Z3_context c, unsigned n, Z3_ast const args[])
Create the union of the regular languages.
Z3_ast Z3_API Z3_mk_bvadd(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two's complement addition.
Z3_ast Z3_API Z3_mk_fpa_add(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point addition.
Z3_ast Z3_API Z3_mk_add(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] + ... + args[num_args-1].
expr concat(expr const &a, expr const &b)
Definition z3++.h:2534

◆ operator+() [2/3]

expr operator+ ( expr const a,
int  b 
)
inline

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

1813{ return a + a.ctx().num_val(b, a.get_sort()); }

◆ operator+() [3/3]

expr operator+ ( int  a,
expr const b 
)
inline

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

1814{ return b.ctx().num_val(a, b.get_sort()) + b; }

◆ operator-() [1/4]

expr operator- ( expr const a)
inline

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

1882 {
1883 Z3_ast r = 0;
1884 if (a.is_arith()) {
1885 r = Z3_mk_unary_minus(a.ctx(), a);
1886 }
1887 else if (a.is_bv()) {
1888 r = Z3_mk_bvneg(a.ctx(), a);
1889 }
1890 else if (a.is_fpa()) {
1891 r = Z3_mk_fpa_neg(a.ctx(), a);
1892 }
1893 else {
1894 // operator is not supported by given arguments.
1895 assert(false);
1896 }
1897 a.check_error();
1898 return expr(a.ctx(), r);
1899 }
Z3_ast Z3_API Z3_mk_unary_minus(Z3_context c, Z3_ast arg)
Create an AST node representing - arg.
Z3_ast Z3_API Z3_mk_fpa_neg(Z3_context c, Z3_ast t)
Floating-point negation.
Z3_ast Z3_API Z3_mk_bvneg(Z3_context c, Z3_ast t1)
Standard two's complement unary minus.

◆ operator-() [2/4]

expr operator- ( expr const a,
expr const b 
)
inline

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

1901 {
1902 check_context(a, b);
1903 Z3_ast r = 0;
1904 if (a.is_arith() && b.is_arith()) {
1905 Z3_ast args[2] = { a, b };
1906 r = Z3_mk_sub(a.ctx(), 2, args);
1907 }
1908 else if (a.is_bv() && b.is_bv()) {
1909 r = Z3_mk_bvsub(a.ctx(), a, b);
1910 }
1911 else if (a.is_fpa() && b.is_fpa()) {
1912 r = Z3_mk_fpa_sub(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1913 }
1914 else {
1915 // operator is not supported by given arguments.
1916 assert(false);
1917 }
1918 a.check_error();
1919 return expr(a.ctx(), r);
1920 }
Z3_ast Z3_API Z3_mk_fpa_sub(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point subtraction.
Z3_ast Z3_API Z3_mk_bvsub(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two's complement subtraction.
Z3_ast Z3_API Z3_mk_sub(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] - ... - args[num_args - 1].

◆ operator-() [3/4]

expr operator- ( expr const a,
int  b 
)
inline

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

1921{ return a - a.ctx().num_val(b, a.get_sort()); }

◆ operator-() [4/4]

expr operator- ( int  a,
expr const b 
)
inline

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

1922{ return b.ctx().num_val(a, b.get_sort()) - b; }

◆ operator/() [1/3]

expr operator/ ( expr const a,
expr const b 
)
inline

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

1860 {
1861 check_context(a, b);
1862 Z3_ast r = 0;
1863 if (a.is_arith() && b.is_arith()) {
1864 r = Z3_mk_div(a.ctx(), a, b);
1865 }
1866 else if (a.is_bv() && b.is_bv()) {
1867 r = Z3_mk_bvsdiv(a.ctx(), a, b);
1868 }
1869 else if (a.is_fpa() && b.is_fpa()) {
1870 r = Z3_mk_fpa_div(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1871 }
1872 else {
1873 // operator is not supported by given arguments.
1874 assert(false);
1875 }
1876 a.check_error();
1877 return expr(a.ctx(), r);
1878 }
Z3_ast Z3_API Z3_mk_div(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 div arg2.
Z3_ast Z3_API Z3_mk_bvsdiv(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed division.
Z3_ast Z3_API Z3_mk_fpa_div(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point division.

◆ operator/() [2/3]

expr operator/ ( expr const a,
int  b 
)
inline

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

1879{ return a / a.ctx().num_val(b, a.get_sort()); }

◆ operator/() [3/3]

expr operator/ ( int  a,
expr const b 
)
inline

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

1880{ return b.ctx().num_val(a, b.get_sort()) / b; }

◆ operator<() [1/6]

probe operator< ( double  p1,
probe const p2 
)
inline

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

3386{ return probe(p2.ctx(), p1) < p2; }

◆ operator<() [2/6]

expr operator< ( expr const a,
expr const b 
)
inline

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

1949 {
1950 check_context(a, b);
1951 Z3_ast r = 0;
1952 if (a.is_arith() && b.is_arith()) {
1953 r = Z3_mk_lt(a.ctx(), a, b);
1954 }
1955 else if (a.is_bv() && b.is_bv()) {
1956 r = Z3_mk_bvslt(a.ctx(), a, b);
1957 }
1958 else if (a.is_fpa() && b.is_fpa()) {
1959 r = Z3_mk_fpa_lt(a.ctx(), a, b);
1960 }
1961 else {
1962 // operator is not supported by given arguments.
1963 assert(false);
1964 }
1965 a.check_error();
1966 return expr(a.ctx(), r);
1967 }
Z3_ast Z3_API Z3_mk_bvslt(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed less than.
Z3_ast Z3_API Z3_mk_lt(Z3_context c, Z3_ast t1, Z3_ast t2)
Create less than.
Z3_ast Z3_API Z3_mk_fpa_lt(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point less than.

◆ operator<() [3/6]

expr operator< ( expr const a,
int  b 
)
inline

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

1968{ return a < a.ctx().num_val(b, a.get_sort()); }

◆ operator<() [4/6]

expr operator< ( int  a,
expr const b 
)
inline

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

1969{ return b.ctx().num_val(a, b.get_sort()) < b; }

◆ operator<() [5/6]

probe operator< ( probe const p1,
double  p2 
)
inline

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

3385{ return p1 < probe(p1.ctx(), p2); }

◆ operator<() [6/6]

probe operator< ( probe const p1,
probe const p2 
)
inline

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

3382 {
3383 check_context(p1, p2); Z3_probe r = Z3_probe_lt(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3384 }
Z3_probe Z3_API Z3_probe_lt(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when the value returned by p1 is less than the value returned...

◆ operator<<() [1/13]

std::ostream & operator<< ( std::ostream &  out,
apply_result const r 
)
inline

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

3201{ out << Z3_apply_result_to_string(r.ctx(), r); return out; }
Z3_string Z3_API Z3_apply_result_to_string(Z3_context c, Z3_apply_result r)
Convert the Z3_apply_result object returned by Z3_tactic_apply into a string.

◆ operator<<() [2/13]

std::ostream & operator<< ( std::ostream &  out,
ast const n 
)
inline

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

627 {
628 out << Z3_ast_to_string(n.ctx(), n.m_ast); return out;
629 }
Z3_string Z3_API Z3_ast_to_string(Z3_context c, Z3_ast a)
Convert the given AST node into a string.

◆ operator<<() [3/13]

std::ostream & operator<< ( std::ostream &  out,
check_result  r 
)
inline

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

2817 {
2818 if (r == unsat) out << "unsat";
2819 else if (r == sat) out << "sat";
2820 else out << "unknown";
2821 return out;
2822 }

◆ operator<<() [4/13]

std::ostream & operator<< ( std::ostream &  out,
exception const e 
)
inline

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

127{ out << e.msg(); return out; }

◆ operator<<() [5/13]

std::ostream & operator<< ( std::ostream &  out,
fixedpoint const f 
)
inline

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

3585{ return out << Z3_fixedpoint_to_string(f.ctx(), f, 0, 0); }
Z3_string Z3_API Z3_fixedpoint_to_string(Z3_context c, Z3_fixedpoint f, unsigned num_queries, Z3_ast queries[])
Print the current rules and background axioms as a string.

◆ operator<<() [6/13]

std::ostream & operator<< ( std::ostream &  out,
goal const g 
)
inline

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

3177{ out << Z3_goal_to_string(g.ctx(), g); return out; }
Z3_string Z3_API Z3_goal_to_string(Z3_context c, Z3_goal g)
Convert a goal into a string.

◆ operator<<() [7/13]

std::ostream & operator<< ( std::ostream &  out,
model const m 
)
inline

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

2785{ return out << m.to_string(); }

◆ operator<<() [8/13]

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

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

3527{ out << Z3_optimize_to_string(s.ctx(), s.m_opt); return out; }
Z3_string Z3_API Z3_optimize_to_string(Z3_context c, Z3_optimize o)
Print the current context as a string.

◆ operator<<() [9/13]

std::ostream & operator<< ( std::ostream &  out,
param_descrs const d 
)
inline

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

570{ return out << d.to_string(); }

◆ operator<<() [10/13]

std::ostream & operator<< ( std::ostream &  out,
params const p 
)
inline

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

594 {
595 out << Z3_params_to_string(p.ctx(), p); return out;
596 }
Z3_string Z3_API Z3_params_to_string(Z3_context c, Z3_params p)
Convert a parameter set into a string. This function is mainly used for printing the contents of a pa...

◆ operator<<() [11/13]

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

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

3118{ 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.

◆ operator<<() [12/13]

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

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

2814{ out << Z3_stats_to_string(s.ctx(), s); return out; }
Z3_string Z3_API Z3_stats_to_string(Z3_context c, Z3_stats s)
Convert a statistics into a string.

◆ operator<<() [13/13]

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

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

538 {
539 if (s.kind() == Z3_INT_SYMBOL)
540 out << "k!" << s.to_int();
541 else
542 out << s.str();
543 return out;
544 }
@ Z3_INT_SYMBOL
Definition z3_api.h:73

◆ operator<=() [1/6]

probe operator<= ( double  p1,
probe const p2 
)
inline

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

3376{ return probe(p2.ctx(), p1) <= p2; }

◆ operator<=() [2/6]

expr operator<= ( expr const a,
expr const b 
)
inline

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

1924 {
1925 check_context(a, b);
1926 Z3_ast r = 0;
1927 if (a.is_arith() && b.is_arith()) {
1928 r = Z3_mk_le(a.ctx(), a, b);
1929 }
1930 else if (a.is_bv() && b.is_bv()) {
1931 r = Z3_mk_bvsle(a.ctx(), a, b);
1932 }
1933 else if (a.is_fpa() && b.is_fpa()) {
1934 r = Z3_mk_fpa_leq(a.ctx(), a, b);
1935 }
1936 else {
1937 // operator is not supported by given arguments.
1938 assert(false);
1939 }
1940 a.check_error();
1941 return expr(a.ctx(), r);
1942 }
Z3_ast Z3_API Z3_mk_bvsle(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed less than or equal to.
Z3_ast Z3_API Z3_mk_le(Z3_context c, Z3_ast t1, Z3_ast t2)
Create less than or equal to.
Z3_ast Z3_API Z3_mk_fpa_leq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point less than or equal.

◆ operator<=() [3/6]

expr operator<= ( expr const a,
int  b 
)
inline

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

1943{ return a <= a.ctx().num_val(b, a.get_sort()); }

◆ operator<=() [4/6]

expr operator<= ( int  a,
expr const b 
)
inline

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

1944{ return b.ctx().num_val(a, b.get_sort()) <= b; }

◆ operator<=() [5/6]

probe operator<= ( probe const p1,
double  p2 
)
inline

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

3375{ return p1 <= probe(p1.ctx(), p2); }

◆ operator<=() [6/6]

probe operator<= ( probe const p1,
probe const p2 
)
inline

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

3372 {
3373 check_context(p1, p2); Z3_probe r = Z3_probe_le(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3374 }
Z3_probe Z3_API Z3_probe_le(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when the value returned by p1 is less than or equal to the va...

◆ operator==() [1/8]

expr operator== ( double  a,
expr const b 
)
inline

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

1772{ assert(b.is_fpa()); return b.ctx().fpa_val(a) == b; }

◆ operator==() [2/8]

probe operator== ( double  p1,
probe const p2 
)
inline

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

3396{ return probe(p2.ctx(), p1) == p2; }

◆ operator==() [3/8]

expr operator== ( expr const a,
double  b 
)
inline

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

1771{ assert(a.is_fpa()); return a == a.ctx().fpa_val(b); }

◆ operator==() [4/8]

expr operator== ( expr const a,
expr const b 
)
inline

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

1763 {
1764 check_context(a, b);
1765 Z3_ast r = Z3_mk_eq(a.ctx(), a, b);
1766 a.check_error();
1767 return expr(a.ctx(), r);
1768 }
Z3_ast Z3_API Z3_mk_eq(Z3_context c, Z3_ast l, Z3_ast r)
Create an AST node representing l = r.

◆ operator==() [5/8]

expr operator== ( expr const a,
int  b 
)
inline

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

1769{ assert(a.is_arith() || a.is_bv() || a.is_fpa()); return a == a.ctx().num_val(b, a.get_sort()); }

◆ operator==() [6/8]

expr operator== ( int  a,
expr const b 
)
inline

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

1770{ assert(b.is_arith() || b.is_bv() || b.is_fpa()); return b.ctx().num_val(a, b.get_sort()) == b; }

◆ operator==() [7/8]

probe operator== ( probe const p1,
double  p2 
)
inline

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

3395{ return p1 == probe(p1.ctx(), p2); }

◆ operator==() [8/8]

probe operator== ( probe const p1,
probe const p2 
)
inline

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

3392 {
3393 check_context(p1, p2); Z3_probe r = Z3_probe_eq(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3394 }
Z3_probe Z3_API Z3_probe_eq(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when the value returned by p1 is equal to the value returned ...

◆ operator>() [1/6]

probe operator> ( double  p1,
probe const p2 
)
inline

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

3391{ return probe(p2.ctx(), p1) > p2; }

◆ operator>() [2/6]

expr operator> ( expr const a,
expr const b 
)
inline

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

1971 {
1972 check_context(a, b);
1973 Z3_ast r = 0;
1974 if (a.is_arith() && b.is_arith()) {
1975 r = Z3_mk_gt(a.ctx(), a, b);
1976 }
1977 else if (a.is_bv() && b.is_bv()) {
1978 r = Z3_mk_bvsgt(a.ctx(), a, b);
1979 }
1980 else if (a.is_fpa() && b.is_fpa()) {
1981 r = Z3_mk_fpa_gt(a.ctx(), a, b);
1982 }
1983 else {
1984 // operator is not supported by given arguments.
1985 assert(false);
1986 }
1987 a.check_error();
1988 return expr(a.ctx(), r);
1989 }
Z3_ast Z3_API Z3_mk_bvsgt(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed greater than.
Z3_ast Z3_API Z3_mk_fpa_gt(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point greater than.
Z3_ast Z3_API Z3_mk_gt(Z3_context c, Z3_ast t1, Z3_ast t2)
Create greater than.

◆ operator>() [3/6]

expr operator> ( expr const a,
int  b 
)
inline

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

1990{ return a > a.ctx().num_val(b, a.get_sort()); }

◆ operator>() [4/6]

expr operator> ( int  a,
expr const b 
)
inline

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

1991{ return b.ctx().num_val(a, b.get_sort()) > b; }

◆ operator>() [5/6]

probe operator> ( probe const p1,
double  p2 
)
inline

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

3390{ return p1 > probe(p1.ctx(), p2); }

◆ operator>() [6/6]

probe operator> ( probe const p1,
probe const p2 
)
inline

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

3387 {
3388 check_context(p1, p2); Z3_probe r = Z3_probe_gt(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3389 }
Z3_probe Z3_API Z3_probe_gt(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when the value returned by p1 is greater than the value retur...

◆ operator>=() [1/6]

probe operator>= ( double  p1,
probe const p2 
)
inline

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

3381{ return probe(p2.ctx(), p1) >= p2; }

◆ operator>=() [2/6]

expr operator>= ( expr const a,
expr const b 
)
inline

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

1840 {
1841 check_context(a, b);
1842 Z3_ast r = 0;
1843 if (a.is_arith() && b.is_arith()) {
1844 r = Z3_mk_ge(a.ctx(), a, b);
1845 }
1846 else if (a.is_bv() && b.is_bv()) {
1847 r = Z3_mk_bvsge(a.ctx(), a, b);
1848 }
1849 else if (a.is_fpa() && b.is_fpa()) {
1850 r = Z3_mk_fpa_geq(a.ctx(), a, b);
1851 }
1852 else {
1853 // operator is not supported by given arguments.
1854 assert(false);
1855 }
1856 a.check_error();
1857 return expr(a.ctx(), r);
1858 }
Z3_ast Z3_API Z3_mk_bvsge(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed greater than or equal to.
Z3_ast Z3_API Z3_mk_fpa_geq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point greater than or equal.

◆ operator>=() [3/6]

expr operator>= ( expr const a,
int  b 
)
inline

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

1946{ return a >= a.ctx().num_val(b, a.get_sort()); }

◆ operator>=() [4/6]

expr operator>= ( int  a,
expr const b 
)
inline

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

1947{ return b.ctx().num_val(a, b.get_sort()) >= b; }

◆ operator>=() [5/6]

probe operator>= ( probe const p1,
double  p2 
)
inline

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

3380{ return p1 >= probe(p1.ctx(), p2); }

◆ operator>=() [6/6]

probe operator>= ( probe const p1,
probe const p2 
)
inline

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

3377 {
3378 check_context(p1, p2); Z3_probe r = Z3_probe_ge(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3379 }
Z3_probe Z3_API Z3_probe_ge(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when the value returned by p1 is greater than or equal to the...

◆ operator^() [1/3]

expr operator^ ( expr const a,
expr const b 
)
inline

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

1997{ check_context(a, b); Z3_ast r = a.is_bool() ? Z3_mk_xor(a.ctx(), a, b) : Z3_mk_bvxor(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvxor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise exclusive-or.
Z3_ast Z3_API Z3_mk_xor(Z3_context c, Z3_ast t1, Z3_ast t2)
Create an AST node representing t1 xor t2.

◆ operator^() [2/3]

expr operator^ ( expr const a,
int  b 
)
inline

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

1998{ return a ^ a.ctx().num_val(b, a.get_sort()); }

◆ operator^() [3/3]

expr operator^ ( int  a,
expr const b 
)
inline

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

1999{ return b.ctx().num_val(a, b.get_sort()) ^ b; }

◆ operator|() [1/4]

expr operator| ( expr const a,
expr const b 
)
inline

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

2001{ if (a.is_bool()) return a || b; check_context(a, b); Z3_ast r = Z3_mk_bvor(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise or.

◆ operator|() [2/4]

expr operator| ( expr const a,
int  b 
)
inline

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

2002{ return a | a.ctx().num_val(b, a.get_sort()); }

◆ operator|() [3/4]

expr operator| ( int  a,
expr const b 
)
inline

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

2003{ return b.ctx().num_val(a, b.get_sort()) | b; }

◆ operator|() [4/4]

tactic operator| ( tactic const t1,
tactic const t2 
)
inline

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

3250 {
3252 Z3_tactic r = Z3_tactic_or_else(t1.ctx(), t1, t2);
3253 t1.check_error();
3254 return tactic(t1.ctx(), r);
3255 }
Z3_tactic Z3_API Z3_tactic_or_else(Z3_context c, Z3_tactic t1, Z3_tactic t2)
Return a tactic that first applies t1 to a given goal, if it fails then returns the result of t2 appl...

◆ operator||() [1/4]

expr operator|| ( bool  a,
expr const b 
)
inline
Precondition
b.is_bool()

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

1761{ return b.ctx().bool_val(a) || b; }

◆ operator||() [2/4]

expr operator|| ( expr const a,
bool  b 
)
inline
Precondition
a.is_bool()

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

1759{ return a || a.ctx().bool_val(b); }

◆ operator||() [3/4]

expr operator|| ( expr const a,
expr const b 
)
inline
Precondition
a.is_bool()
b.is_bool()

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

1750 {
1751 check_context(a, b);
1752 assert(a.is_bool() && b.is_bool());
1753 Z3_ast args[2] = { a, b };
1754 Z3_ast r = Z3_mk_or(a.ctx(), 2, args);
1755 a.check_error();
1756 return expr(a.ctx(), r);
1757 }

◆ operator||() [4/4]

probe operator|| ( probe const p1,
probe const p2 
)
inline

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

3400 {
3401 check_context(p1, p2); Z3_probe r = Z3_probe_or(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3402 }
Z3_probe Z3_API Z3_probe_or(Z3_context x, Z3_probe p1, Z3_probe p2)
Return a probe that evaluates to "true" when p1 or p2 evaluates to true.

◆ operator~()

expr operator~ ( expr const a)
inline

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

2086{ Z3_ast r = Z3_mk_bvnot(a.ctx(), a); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvnot(Z3_context c, Z3_ast t1)
Bitwise negation.

◆ option()

expr option ( expr const re)
inline

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

4259 {
4261 }
Z3_ast Z3_API Z3_mk_re_option(Z3_context c, Z3_ast re)
Create the regular language [re].

◆ par_and_then()

tactic par_and_then ( tactic const t1,
tactic const t2 
)
inline

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

3282 {
3284 Z3_tactic r = Z3_tactic_par_and_then(t1.ctx(), t1, t2);
3285 t1.check_error();
3286 return tactic(t1.ctx(), r);
3287 }
Z3_tactic Z3_API Z3_tactic_par_and_then(Z3_context c, Z3_tactic t1, Z3_tactic t2)
Return a tactic that applies t1 to a given goal and then t2 to every subgoal produced by t1....

◆ par_or()

tactic par_or ( unsigned  n,
tactic const tactics 
)
inline

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

3273 {
3274 if (n == 0) {
3275 Z3_THROW(exception("a non-zero number of tactics need to be passed to par_or"));
3276 }
3277 array<Z3_tactic> buffer(n);
3278 for (unsigned i = 0; i < n; ++i) buffer[i] = tactics[i];
3279 return tactic(tactics[0u].ctx(), Z3_tactic_par_or(tactics[0u].ctx(), n, buffer.ptr()));
3280 }
Exception used to sign API usage errors.
Definition z3++.h:118
Z3_tactic Z3_API Z3_tactic_par_or(Z3_context c, unsigned num, Z3_tactic const ts[])
Return a tactic that applies the given tactics in parallel.
#define Z3_THROW(x)
Definition z3++.h:133

◆ partial_order()

func_decl partial_order ( sort const a,
unsigned  index 
)
inline

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

2338 {
2339 return to_func_decl(a.ctx(), Z3_mk_partial_order(a.ctx(), a, index));
2340 }
Z3_func_decl Z3_API Z3_mk_partial_order(Z3_context c, Z3_sort a, unsigned id)
create a partial ordering relation over signature a and index id.

◆ pbeq()

expr pbeq ( expr_vector const es,
int const coeffs,
int  bound 
)
inline

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

2492 {
2493 assert(es.size() > 0);
2494 context& ctx = es[0u].ctx();
2496 Z3_ast r = Z3_mk_pbeq(ctx, _es.size(), _es.ptr(), coeffs, bound);
2497 ctx.check_error();
2498 return expr(ctx, r);
2499 }
Z3_ast Z3_API Z3_mk_pbeq(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.

◆ pbge()

expr pbge ( expr_vector const es,
int const coeffs,
int  bound 
)
inline

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

2484 {
2485 assert(es.size() > 0);
2486 context& ctx = es[0u].ctx();
2488 Z3_ast r = Z3_mk_pbge(ctx, _es.size(), _es.ptr(), coeffs, bound);
2489 ctx.check_error();
2490 return expr(ctx, r);
2491 }
Z3_ast Z3_API Z3_mk_pbge(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.

◆ pble()

expr pble ( expr_vector const es,
int const coeffs,
int  bound 
)
inline

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

2476 {
2477 assert(es.size() > 0);
2478 context& ctx = es[0u].ctx();
2480 Z3_ast r = Z3_mk_pble(ctx, _es.size(), _es.ptr(), coeffs, bound);
2481 ctx.check_error();
2482 return expr(ctx, r);
2483 }
Z3_ast Z3_API Z3_mk_pble(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.

◆ piecewise_linear_order()

func_decl piecewise_linear_order ( sort const a,
unsigned  index 
)
inline

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

2341 {
2342 return to_func_decl(a.ctx(), Z3_mk_piecewise_linear_order(a.ctx(), a, index));
2343 }
Z3_func_decl Z3_API Z3_mk_piecewise_linear_order(Z3_context c, Z3_sort a, unsigned id)
create a piecewise linear ordering relation over signature a and index id.

◆ plus()

expr plus ( expr const re)
inline

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

4256 {
4258 }
Z3_ast Z3_API Z3_mk_re_plus(Z3_context c, Z3_ast re)
Create the regular language re+.

◆ polynomial_subresultants()

expr_vector polynomial_subresultants ( expr const p,
expr const q,
expr const x 
)
inline

Return the nonzero subresultants of p and q with respect to the "variable" x.

Precondition
p, q and x are Z3 expressions where p and q are arithmetic terms. Note that, any subterm that cannot be viewed as a polynomial is assumed to be a variable.

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

2354 {
2355 check_context(p, q); check_context(p, x);
2356 Z3_ast_vector r = Z3_polynomial_subresultants(p.ctx(), p, q, x);
2357 p.check_error();
2358 return expr_vector(p.ctx(), r);
2359 }
Z3_ast_vector Z3_API Z3_polynomial_subresultants(Z3_context c, Z3_ast p, Z3_ast q, Z3_ast x)
Return the nonzero subresultants of p and q with respect to the "variable" x.

◆ prefixof()

expr prefixof ( expr const a,
expr const b 
)
inline

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

4232 {
4233 check_context(a, b);
4234 Z3_ast r = Z3_mk_seq_prefix(a.ctx(), a, b);
4235 a.check_error();
4236 return expr(a.ctx(), r);
4237 }
Z3_ast Z3_API Z3_mk_seq_prefix(Z3_context c, Z3_ast prefix, Z3_ast s)
Check if prefix is a prefix of s.

◆ pw() [1/3]

expr pw ( expr const a,
expr const b 
)
inline

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

1694{ _Z3_MK_BIN_(a, b, Z3_mk_power); }
Z3_ast Z3_API Z3_mk_power(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 ^ arg2.

◆ pw() [2/3]

expr pw ( expr const a,
int  b 
)
inline

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

1695{ return pw(a, a.ctx().num_val(b, a.get_sort())); }
expr pw(expr const &a, expr const &b)
Definition z3++.h:1694

◆ pw() [3/3]

expr pw ( int  a,
expr const b 
)
inline

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

1696{ return pw(b.ctx().num_val(a, b.get_sort()), b); }

◆ range()

expr range ( expr const lo,
expr const hi 
)
inline

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

4293 {
4294 check_context(lo, hi);
4295 Z3_ast r = Z3_mk_re_range(lo.ctx(), lo, hi);
4296 lo.check_error();
4297 return expr(lo.ctx(), r);
4298 }
Z3_ast Z3_API Z3_mk_re_range(Z3_context c, Z3_ast lo, Z3_ast hi)
Create the range regular expression over two sequences of length 1.

Referenced by context::function(), function(), context::function(), function(), context::function(), function(), context::function(), function(), context::function(), function(), context::function(), function(), context::function(), function(), function(), context::function(), context::function(), function(), context::recfun(), recfun(), recfun(), context::recfun(), context::recfun(), context::recfun(), recfun(), context::recfun(), context::recfun(), recfun(), and context::user_propagate_function().

◆ re_complement()

expr re_complement ( expr const a)
inline

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

4290 {
4292 }
Z3_ast Z3_API Z3_mk_re_complement(Z3_context c, Z3_ast re)
Create the complement of the regular language re.

◆ re_diff()

expr re_diff ( expr const a,
expr const b 
)
inline

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

4283 {
4284 check_context(a, b);
4285 context& ctx = a.ctx();
4286 Z3_ast r = Z3_mk_re_diff(ctx, a, b);
4287 ctx.check_error();
4288 return expr(ctx, r);
4289 }
Z3_ast Z3_API Z3_mk_re_diff(Z3_context c, Z3_ast re1, Z3_ast re2)
Create the difference of regular expressions.

◆ re_empty()

expr re_empty ( sort const s)
inline

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

4265 {
4266 Z3_ast r = Z3_mk_re_empty(s.ctx(), s);
4267 s.check_error();
4268 return expr(s.ctx(), r);
4269 }
Z3_ast Z3_API Z3_mk_re_empty(Z3_context c, Z3_sort re)
Create an empty regular expression of sort re.

◆ re_full()

expr re_full ( sort const s)
inline

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

4270 {
4271 Z3_ast r = Z3_mk_re_full(s.ctx(), s);
4272 s.check_error();
4273 return expr(s.ctx(), r);
4274 }
Z3_ast Z3_API Z3_mk_re_full(Z3_context c, Z3_sort re)
Create an universal regular expression of sort re.

◆ re_intersect()

expr re_intersect ( expr_vector const args)
inline

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

4275 {
4276 assert(args.size() > 0);
4277 context& ctx = args[0u].ctx();
4278 array<Z3_ast> _args(args);
4279 Z3_ast r = Z3_mk_re_intersect(ctx, _args.size(), _args.ptr());
4280 ctx.check_error();
4281 return expr(ctx, r);
4282 }
Z3_ast Z3_API Z3_mk_re_intersect(Z3_context c, unsigned n, Z3_ast const args[])
Create the intersection of the regular languages.

◆ recfun() [1/4]

func_decl recfun ( char const name,
sort const d1,
sort const d2,
sort const range 
)
inline

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

4094 {
4095 return range.ctx().recfun(name, d1, d2, range);
4096 }
func_decl recfun(symbol const &name, unsigned arity, sort const *domain, sort const &range)
Definition z3++.h:3849

◆ recfun() [2/4]

func_decl recfun ( char const name,
sort const d1,
sort const range 
)
inline

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

4091 {
4092 return range.ctx().recfun(name, d1, range);
4093 }

◆ recfun() [3/4]

func_decl recfun ( char const name,
unsigned  arity,
sort const domain,
sort const range 
)
inline

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

4088 {
4089 return range.ctx().recfun(name, arity, domain, range);
4090 }

◆ recfun() [4/4]

func_decl recfun ( symbol const name,
unsigned  arity,
sort const domain,
sort const range 
)
inline

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

4085 {
4086 return range.ctx().recfun(name, arity, domain, range);
4087 }

◆ rem() [1/3]

expr rem ( expr const a,
expr const b 
)
inline

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

1714 {
1715 if (a.is_fpa() && b.is_fpa()) {
1717 } else {
1718 _Z3_MK_BIN_(a, b, Z3_mk_rem);
1719 }
1720 }
Z3_ast Z3_API Z3_mk_fpa_rem(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point remainder.
Z3_ast Z3_API Z3_mk_rem(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 rem arg2.

◆ rem() [2/3]

expr rem ( expr const a,
int  b 
)
inline

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

1721{ return rem(a, a.ctx().num_val(b, a.get_sort())); }
expr rem(expr const &a, expr const &b)
Definition z3++.h:1714

◆ rem() [3/3]

expr rem ( int  a,
expr const b 
)
inline

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

1722{ return rem(b.ctx().num_val(a, b.get_sort()), b); }

◆ repeat()

tactic repeat ( tactic const t,
unsigned  max = UINT_MAX 
)
inline

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

3257 {
3258 Z3_tactic r = Z3_tactic_repeat(t.ctx(), t, max);
3259 t.check_error();
3260 return tactic(t.ctx(), r);
3261 }
Z3_tactic Z3_API Z3_tactic_repeat(Z3_context c, Z3_tactic t, unsigned max)
Return a tactic that keeps applying t until the goal is not modified anymore or the maximum number of...

◆ reset_params()

void reset_params ( )
inline

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

void Z3_API Z3_global_param_reset_all(void)
Restore the value of all global (and module) parameters. This command will not affect already created...

◆ round_fpa_to_closest_integer()

expr round_fpa_to_closest_integer ( expr const t)
inline

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

2139 {
2140 assert(t.is_fpa());
2141 Z3_ast r = Z3_mk_fpa_round_to_integral(t.ctx(), t.ctx().fpa_rounding_mode(), t);
2142 t.check_error();
2143 return expr(t.ctx(), r);
2144 }
Z3_ast Z3_API Z3_mk_fpa_round_to_integral(Z3_context c, Z3_ast rm, Z3_ast t)
Floating-point roundToIntegral. Rounds a floating-point number to the closest integer,...

◆ sbv_to_fpa()

expr sbv_to_fpa ( expr const t,
sort  s 
)
inline

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

2118 {
2119 assert(t.is_bv());
2120 Z3_ast r = Z3_mk_fpa_to_fp_signed(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2121 t.check_error();
2122 return expr(t.ctx(), r);
2123 }
Z3_ast Z3_API Z3_mk_fpa_to_fp_signed(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a 2's complement signed bit-vector term into a term of FloatingPoint sort.

◆ sdiv() [1/3]

expr sdiv ( expr const a,
expr const b 
)
inline

signed division operator for bitvectors.

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

2237{ return to_expr(a.ctx(), Z3_mk_bvsdiv(a.ctx(), a, b)); }

Referenced by sdiv(), and sdiv().

◆ sdiv() [2/3]

expr sdiv ( expr const a,
int  b 
)
inline

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

2238{ return sdiv(a, a.ctx().num_val(b, a.get_sort())); }
expr sdiv(expr const &a, expr const &b)
signed division operator for bitvectors.
Definition z3++.h:2237

◆ sdiv() [3/3]

expr sdiv ( int  a,
expr const b 
)
inline

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

2239{ return sdiv(b.ctx().num_val(a, b.get_sort()), b); }

◆ select() [1/3]

expr select ( expr const a,
expr const i 
)
inline

forward declarations

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

4098 {
4099 check_context(a, i);
4100 Z3_ast r = Z3_mk_select(a.ctx(), a, i);
4101 a.check_error();
4102 return expr(a.ctx(), r);
4103 }
Z3_ast Z3_API Z3_mk_select(Z3_context c, Z3_ast a, Z3_ast i)
Array read. The argument a is the array and i is the index of the array that gets read.

Referenced by expr::operator[](), expr::operator[](), and select().

◆ select() [2/3]

expr select ( expr const a,
expr_vector const i 
)
inline

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

4107 {
4108 check_context(a, i);
4110 Z3_ast r = Z3_mk_select_n(a.ctx(), a, idxs.size(), idxs.ptr());
4111 a.check_error();
4112 return expr(a.ctx(), r);
4113 }
Z3_ast Z3_API Z3_mk_select_n(Z3_context c, Z3_ast a, unsigned n, Z3_ast const *idxs)
n-ary Array read. The argument a is the array and idxs are the indices of the array that gets read.

◆ select() [3/3]

expr select ( expr const a,
int  i 
)
inline

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

4104 {
4105 return select(a, a.ctx().num_val(i, a.get_sort().array_domain()));
4106 }
expr select(expr const &a, expr const &i)
forward declarations
Definition z3++.h:4098

◆ set_add()

expr set_add ( expr const s,
expr const e 
)
inline

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

4177 {
4178 MK_EXPR2(Z3_mk_set_add, s, e);
4179 }
Z3_ast Z3_API Z3_mk_set_add(Z3_context c, Z3_ast set, Z3_ast elem)
Add an element to a set.

◆ set_complement()

expr set_complement ( expr const a)
inline

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

4205 {
4207 }
Z3_ast Z3_API Z3_mk_set_complement(Z3_context c, Z3_ast arg)
Take the complement of a set.

◆ set_del()

expr set_del ( expr const s,
expr const e 
)
inline

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

4181 {
4182 MK_EXPR2(Z3_mk_set_del, s, e);
4183 }
Z3_ast Z3_API Z3_mk_set_del(Z3_context c, Z3_ast set, Z3_ast elem)
Remove an element to a set.

◆ set_difference()

expr set_difference ( expr const a,
expr const b 
)
inline

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

4201 {
4203 }
Z3_ast Z3_API Z3_mk_set_difference(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Take the set difference between two sets.

◆ set_intersect()

expr set_intersect ( expr const a,
expr const b 
)
inline

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

4193 {
4194 check_context(a, b);
4195 Z3_ast es[2] = { a, b };
4196 Z3_ast r = Z3_mk_set_intersect(a.ctx(), 2, es);
4197 a.check_error();
4198 return expr(a.ctx(), r);
4199 }
Z3_ast Z3_API Z3_mk_set_intersect(Z3_context c, unsigned num_args, Z3_ast const args[])
Take the intersection of a list of sets.

◆ set_member()

expr set_member ( expr const s,
expr const e 
)
inline

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

4209 {
4211 }
Z3_ast Z3_API Z3_mk_set_member(Z3_context c, Z3_ast elem, Z3_ast set)
Check for set membership.

◆ set_param() [1/3]

void set_param ( char const param,
bool  value 
)
inline

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

81{ Z3_global_param_set(param, value ? "true" : "false"); }
void Z3_API Z3_global_param_set(Z3_string param_id, Z3_string param_value)
Set a global (or module) parameter. This setting is shared by all Z3 contexts.

◆ set_param() [2/3]

void set_param ( char const param,
char const value 
)
inline

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

80{ Z3_global_param_set(param, value); }

◆ set_param() [3/3]

void set_param ( char const param,
int  value 
)
inline

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

82{ auto str = std::to_string(value); Z3_global_param_set(param, str.c_str()); }

◆ set_subset()

expr set_subset ( expr const a,
expr const b 
)
inline

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

4213 {
4215 }
Z3_ast Z3_API Z3_mk_set_subset(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Check for subsetness of sets.

◆ set_union()

expr set_union ( expr const a,
expr const b 
)
inline

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

4185 {
4186 check_context(a, b);
4187 Z3_ast es[2] = { a, b };
4188 Z3_ast r = Z3_mk_set_union(a.ctx(), 2, es);
4189 a.check_error();
4190 return expr(a.ctx(), r);
4191 }
Z3_ast Z3_API Z3_mk_set_union(Z3_context c, unsigned num_args, Z3_ast const args[])
Take the union of a list of sets.

◆ sext()

expr sext ( expr const a,
unsigned  i 
)
inline

Sign-extend of the given bit-vector to the (signed) equivalent bitvector of size m+i, where m is the size of the given bit-vector.

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

2333{ return to_expr(a.ctx(), Z3_mk_sign_ext(a.ctx(), i, a)); }
Z3_ast Z3_API Z3_mk_sign_ext(Z3_context c, unsigned i, Z3_ast t1)
Sign-extend of the given bit-vector to the (signed) equivalent bit-vector of size m+i,...

◆ sge() [1/3]

expr sge ( expr const a,
expr const b 
)
inline

signed greater than or equal to operator for bitvectors.

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

2198{ return to_expr(a.ctx(), Z3_mk_bvsge(a.ctx(), a, b)); }

Referenced by sge(), and sge().

◆ sge() [2/3]

expr sge ( expr const a,
int  b 
)
inline

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

2199{ return sge(a, a.ctx().num_val(b, a.get_sort())); }
expr sge(expr const &a, expr const &b)
signed greater than or equal to operator for bitvectors.
Definition z3++.h:2198

◆ sge() [3/3]

expr sge ( int  a,
expr const b 
)
inline

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

2200{ return sge(b.ctx().num_val(a, b.get_sort()), b); }

◆ sgt() [1/3]

expr sgt ( expr const a,
expr const b 
)
inline

signed greater than operator for bitvectors.

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

2204{ return to_expr(a.ctx(), Z3_mk_bvsgt(a.ctx(), a, b)); }

Referenced by sgt(), and sgt().

◆ sgt() [2/3]

expr sgt ( expr const a,
int  b 
)
inline

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

2205{ return sgt(a, a.ctx().num_val(b, a.get_sort())); }
expr sgt(expr const &a, expr const &b)
signed greater than operator for bitvectors.
Definition z3++.h:2204

◆ sgt() [3/3]

expr sgt ( int  a,
expr const b 
)
inline

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

2206{ return sgt(b.ctx().num_val(a, b.get_sort()), b); }

◆ shl() [1/3]

expr shl ( expr const a,
expr const b 
)
inline

shift left operator for bitvectors

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

2272{ return to_expr(a.ctx(), Z3_mk_bvshl(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvshl(Z3_context c, Z3_ast t1, Z3_ast t2)
Shift left.

Referenced by shl(), and shl().

◆ shl() [2/3]

expr shl ( expr const a,
int  b 
)
inline

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

2273{ return shl(a, a.ctx().num_val(b, a.get_sort())); }
expr shl(expr const &a, expr const &b)
shift left operator for bitvectors
Definition z3++.h:2272

◆ shl() [3/3]

expr shl ( int  a,
expr const b 
)
inline

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

2274{ return shl(b.ctx().num_val(a, b.get_sort()), b); }

◆ sle() [1/3]

expr sle ( expr const a,
expr const b 
)
inline

signed less than or equal to operator for bitvectors.

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

2186{ return to_expr(a.ctx(), Z3_mk_bvsle(a.ctx(), a, b)); }

Referenced by sle(), and sle().

◆ sle() [2/3]

expr sle ( expr const a,
int  b 
)
inline

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

2187{ return sle(a, a.ctx().num_val(b, a.get_sort())); }
expr sle(expr const &a, expr const &b)
signed less than or equal to operator for bitvectors.
Definition z3++.h:2186

◆ sle() [3/3]

expr sle ( int  a,
expr const b 
)
inline

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

2188{ return sle(b.ctx().num_val(a, b.get_sort()), b); }

◆ slt() [1/3]

expr slt ( expr const a,
expr const b 
)
inline

signed less than operator for bitvectors.

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

2192{ return to_expr(a.ctx(), Z3_mk_bvslt(a.ctx(), a, b)); }

Referenced by slt(), and slt().

◆ slt() [2/3]

expr slt ( expr const a,
int  b 
)
inline

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

2193{ return slt(a, a.ctx().num_val(b, a.get_sort())); }
expr slt(expr const &a, expr const &b)
signed less than operator for bitvectors.
Definition z3++.h:2192

◆ slt() [3/3]

expr slt ( int  a,
expr const b 
)
inline

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

2194{ return slt(b.ctx().num_val(a, b.get_sort()), b); }

◆ smod() [1/3]

expr smod ( expr const a,
expr const b 
)
inline

signed modulus operator for bitvectors

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

2258{ return to_expr(a.ctx(), Z3_mk_bvsmod(a.ctx(), a, b)); }

Referenced by smod(), and smod().

◆ smod() [2/3]

expr smod ( expr const a,
int  b 
)
inline

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

2259{ return smod(a, a.ctx().num_val(b, a.get_sort())); }
expr smod(expr const &a, expr const &b)
signed modulus operator for bitvectors
Definition z3++.h:2258

◆ smod() [3/3]

expr smod ( int  a,
expr const b 
)
inline

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

2260{ return smod(b.ctx().num_val(a, b.get_sort()), b); }

◆ sqrt()

expr sqrt ( expr const a,
expr const rm 
)
inline

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

2072 {
2073 check_context(a, rm);
2074 assert(a.is_fpa());
2075 Z3_ast r = Z3_mk_fpa_sqrt(a.ctx(), rm, a);
2076 a.check_error();
2077 return expr(a.ctx(), r);
2078 }
Z3_ast Z3_API Z3_mk_fpa_sqrt(Z3_context c, Z3_ast rm, Z3_ast t)
Floating-point square root.

◆ srem() [1/3]

expr srem ( expr const a,
expr const b 
)
inline

signed remainder operator for bitvectors

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

2251{ return to_expr(a.ctx(), Z3_mk_bvsrem(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvsrem(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed remainder (sign follows dividend).

Referenced by srem(), and srem().

◆ srem() [2/3]

expr srem ( expr const a,
int  b 
)
inline

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

2252{ return srem(a, a.ctx().num_val(b, a.get_sort())); }
expr srem(expr const &a, expr const &b)
signed remainder operator for bitvectors
Definition z3++.h:2251

◆ srem() [3/3]

expr srem ( int  a,
expr const b 
)
inline

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

2253{ return srem(b.ctx().num_val(a, b.get_sort()), b); }

◆ star()

expr star ( expr const re)
inline

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

4262 {
4264 }
Z3_ast Z3_API Z3_mk_re_star(Z3_context c, Z3_ast re)
Create the regular language re*.

◆ store() [1/5]

expr store ( expr const a,
expr const i,
expr const v 
)
inline

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

4115 {
4117 Z3_ast r = Z3_mk_store(a.ctx(), a, i, v);
4118 a.check_error();
4119 return expr(a.ctx(), r);
4120 }
Z3_ast Z3_API Z3_mk_store(Z3_context c, Z3_ast a, Z3_ast i, Z3_ast v)
Array update.

Referenced by store(), store(), and store().

◆ store() [2/5]

expr store ( expr const a,
expr  i,
int  v 
)
inline

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

4123{ return store(a, i, a.ctx().num_val(v, a.get_sort().array_range())); }
expr store(expr const &a, expr const &i, expr const &v)
Definition z3++.h:4115

◆ store() [3/5]

expr store ( expr const a,
expr_vector const i,
expr const v 
)
inline

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

4127 {
4130 Z3_ast r = Z3_mk_store_n(a.ctx(), a, idxs.size(), idxs.ptr(), v);
4131 a.check_error();
4132 return expr(a.ctx(), r);
4133 }
Z3_ast Z3_API Z3_mk_store_n(Z3_context c, Z3_ast a, unsigned n, Z3_ast const *idxs, Z3_ast v)
n-ary Array update.

◆ store() [4/5]

expr store ( expr const a,
int  i,
expr const v 
)
inline

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

4122{ return store(a, a.ctx().num_val(i, a.get_sort().array_domain()), v); }

◆ store() [5/5]

expr store ( expr const a,
int  i,
int  v 
)
inline

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

4124 {
4125 return store(a, a.ctx().num_val(i, a.get_sort().array_domain()), a.ctx().num_val(v, a.get_sort().array_range()));
4126 }

◆ suffixof()

expr suffixof ( expr const a,
expr const b 
)
inline

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

4226 {
4227 check_context(a, b);
4228 Z3_ast r = Z3_mk_seq_suffix(a.ctx(), a, b);
4229 a.check_error();
4230 return expr(a.ctx(), r);
4231 }
Z3_ast Z3_API Z3_mk_seq_suffix(Z3_context c, Z3_ast suffix, Z3_ast s)
Check if suffix is a suffix of s.

◆ sum()

expr sum ( expr_vector const args)
inline

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

2516 {
2517 assert(args.size() > 0);
2518 context& ctx = args[0u].ctx();
2519 array<Z3_ast> _args(args);
2520 Z3_ast r = Z3_mk_add(ctx, _args.size(), _args.ptr());
2521 ctx.check_error();
2522 return expr(ctx, r);
2523 }

◆ to_check_result()

check_result to_check_result ( Z3_lbool  l)
inline

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

177 {
178 if (l == Z3_L_TRUE) return sat;
179 else if (l == Z3_L_FALSE) return unsat;
180 return unknown;
181 }
@ Z3_L_TRUE
Definition z3_api.h:61
@ Z3_L_FALSE
Definition z3_api.h:59

Referenced by solver::check(), optimize::check(), optimize::check(), solver::check(), solver::check(), solver::consequences(), fixedpoint::query(), and fixedpoint::query().

◆ to_expr()

expr to_expr ( context c,
Z3_ast  a 
)
inline

Wraps a Z3_ast as an expr object. It also checks for errors. This function allows the user to use the whole C API with the C++ layer defined in this file.

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

2164 {
2165 c.check_error();
2168 Z3_get_ast_kind(c, a) == Z3_VAR_AST ||
2170 return expr(c, a);
2171 }
Z3_ast_kind Z3_API Z3_get_ast_kind(Z3_context c, Z3_ast a)
Return the kind of the given AST.
@ Z3_APP_AST
Definition z3_api.h:144
@ Z3_VAR_AST
Definition z3_api.h:145
@ Z3_NUMERAL_AST
Definition z3_api.h:143
@ Z3_QUANTIFIER_AST
Definition z3_api.h:146

Referenced by ashr(), lshr(), sdiv(), sext(), sge(), sgt(), shl(), sle(), slt(), smod(), srem(), udiv(), uge(), ugt(), ule(), ult(), urem(), and zext().

◆ to_func_decl()

func_decl to_func_decl ( context c,
Z3_func_decl  f 
)
inline

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

2178 {
2179 c.check_error();
2180 return func_decl(c, f);
2181 }
Function declaration (aka function definition). It is the signature of interpreted and uninterpreted ...
Definition z3++.h:807

Referenced by linear_order(), partial_order(), piecewise_linear_order(), and tree_order().

◆ to_re()

expr to_re ( expr const s)
inline

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

4250 {
4252 }
Z3_ast Z3_API Z3_mk_seq_to_re(Z3_context c, Z3_ast seq)
Create a regular expression that accepts the sequence seq.

◆ to_real()

expr to_real ( expr const a)
inline

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

4055{ Z3_ast r = Z3_mk_int2real(a.ctx(), a); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_int2real(Z3_context c, Z3_ast t1)
Coerce an integer to a real.

◆ to_sort()

sort to_sort ( context c,
Z3_sort  s 
)
inline

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

2173 {
2174 c.check_error();
2175 return sort(c, s);
2176 }
A Z3 sort (aka type). Every expression (i.e., formula or term) in Z3 has a sort.
Definition z3++.h:704

Referenced by context::enumeration_sort(), context::tuple_sort(), context::uninterpreted_sort(), and context::uninterpreted_sort().

◆ tree_order()

func_decl tree_order ( sort const a,
unsigned  index 
)
inline

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

2344 {
2345 return to_func_decl(a.ctx(), Z3_mk_tree_order(a.ctx(), a, index));
2346 }
Z3_func_decl Z3_API Z3_mk_tree_order(Z3_context c, Z3_sort a, unsigned id)
create a tree ordering relation over signature a identified using index id.

◆ try_for()

tactic try_for ( tactic const t,
unsigned  ms 
)
inline

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

3268 {
3269 Z3_tactic r = Z3_tactic_try_for(t.ctx(), t, ms);
3270 t.check_error();
3271 return tactic(t.ctx(), r);
3272 }
Z3_tactic Z3_API Z3_tactic_try_for(Z3_context c, Z3_tactic t, unsigned ms)
Return a tactic that applies t to a given goal for ms milliseconds. If t does not terminate in ms mil...

◆ ubv_to_fpa()

expr ubv_to_fpa ( expr const t,
sort  s 
)
inline

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

2125 {
2126 assert(t.is_bv());
2127 Z3_ast r = Z3_mk_fpa_to_fp_unsigned(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2128 t.check_error();
2129 return expr(t.ctx(), r);
2130 }
Z3_ast Z3_API Z3_mk_fpa_to_fp_unsigned(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a 2's complement unsigned bit-vector term into a term of FloatingPoint sort.

◆ udiv() [1/3]

expr udiv ( expr const a,
expr const b 
)
inline

unsigned division operator for bitvectors.

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

2244{ return to_expr(a.ctx(), Z3_mk_bvudiv(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvudiv(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned division.

Referenced by udiv(), and udiv().

◆ udiv() [2/3]

expr udiv ( expr const a,
int  b 
)
inline

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

2245{ return udiv(a, a.ctx().num_val(b, a.get_sort())); }
expr udiv(expr const &a, expr const &b)
unsigned division operator for bitvectors.
Definition z3++.h:2244

◆ udiv() [3/3]

expr udiv ( int  a,
expr const b 
)
inline

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

2246{ return udiv(b.ctx().num_val(a, b.get_sort()), b); }

◆ uge() [1/3]

expr uge ( expr const a,
expr const b 
)
inline

unsigned greater than or equal to operator for bitvectors.

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

2224{ return to_expr(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b)); }

Referenced by uge(), and uge().

◆ uge() [2/3]

expr uge ( expr const a,
int  b 
)
inline

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

2225{ return uge(a, a.ctx().num_val(b, a.get_sort())); }
expr uge(expr const &a, expr const &b)
unsigned greater than or equal to operator for bitvectors.
Definition z3++.h:2224

◆ uge() [3/3]

expr uge ( int  a,
expr const b 
)
inline

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

2226{ return uge(b.ctx().num_val(a, b.get_sort()), b); }

◆ ugt() [1/3]

expr ugt ( expr const a,
expr const b 
)
inline

unsigned greater than operator for bitvectors.

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

2230{ return to_expr(a.ctx(), Z3_mk_bvugt(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvugt(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned greater than.

Referenced by ugt(), and ugt().

◆ ugt() [2/3]

expr ugt ( expr const a,
int  b 
)
inline

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

2231{ return ugt(a, a.ctx().num_val(b, a.get_sort())); }
expr ugt(expr const &a, expr const &b)
unsigned greater than operator for bitvectors.
Definition z3++.h:2230

◆ ugt() [3/3]

expr ugt ( int  a,
expr const b 
)
inline

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

2232{ return ugt(b.ctx().num_val(a, b.get_sort()), b); }

◆ ule() [1/3]

expr ule ( expr const a,
expr const b 
)
inline

unsigned less than or equal to operator for bitvectors.

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

2212{ return to_expr(a.ctx(), Z3_mk_bvule(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvule(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned less than or equal to.

Referenced by ule(), and ule().

◆ ule() [2/3]

expr ule ( expr const a,
int  b 
)
inline

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

2213{ return ule(a, a.ctx().num_val(b, a.get_sort())); }
expr ule(expr const &a, expr const &b)
unsigned less than or equal to operator for bitvectors.
Definition z3++.h:2212

◆ ule() [3/3]

expr ule ( int  a,
expr const b 
)
inline

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

2214{ return ule(b.ctx().num_val(a, b.get_sort()), b); }

◆ ult() [1/3]

expr ult ( expr const a,
expr const b 
)
inline

unsigned less than operator for bitvectors.

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

2218{ return to_expr(a.ctx(), Z3_mk_bvult(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvult(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned less than.

Referenced by ult(), and ult().

◆ ult() [2/3]

expr ult ( expr const a,
int  b 
)
inline

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

2219{ return ult(a, a.ctx().num_val(b, a.get_sort())); }
expr ult(expr const &a, expr const &b)
unsigned less than operator for bitvectors.
Definition z3++.h:2218

◆ ult() [3/3]

expr ult ( int  a,
expr const b 
)
inline

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

2220{ return ult(b.ctx().num_val(a, b.get_sort()), b); }

◆ urem() [1/3]

expr urem ( expr const a,
expr const b 
)
inline

unsigned reminder operator for bitvectors

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

2265{ return to_expr(a.ctx(), Z3_mk_bvurem(a.ctx(), a, b)); }
Z3_ast Z3_API Z3_mk_bvurem(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned remainder.

Referenced by urem(), and urem().

◆ urem() [2/3]

expr urem ( expr const a,
int  b 
)
inline

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

2266{ return urem(a, a.ctx().num_val(b, a.get_sort())); }
expr urem(expr const &a, expr const &b)
unsigned reminder operator for bitvectors
Definition z3++.h:2265

◆ urem() [3/3]

expr urem ( int  a,
expr const b 
)
inline

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

2267{ return urem(b.ctx().num_val(a, b.get_sort()), b); }

◆ when()

tactic when ( probe const p,
tactic const t 
)
inline

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

3592 {
3593 check_context(p, t);
3594 Z3_tactic r = Z3_tactic_when(t.ctx(), p, t);
3595 t.check_error();
3596 return tactic(t.ctx(), r);
3597 }
Z3_tactic Z3_API Z3_tactic_when(Z3_context c, Z3_probe p, Z3_tactic t)
Return a tactic that applies t to a given goal is the probe p evaluates to true. If p evaluates to fa...

◆ with() [1/2]

simplifier with ( simplifier const t,
params const p 
)
inline

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

3324 {
3325 Z3_simplifier r = Z3_simplifier_using_params(t.ctx(), t, p);
3326 t.check_error();
3327 return simplifier(t.ctx(), r);
3328 }
Z3_simplifier Z3_API Z3_simplifier_using_params(Z3_context c, Z3_simplifier t, Z3_params p)
Return a simplifier that applies t using the given set of parameters.

◆ with() [2/2]

tactic with ( tactic const t,
params const p 
)
inline

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

3263 {
3264 Z3_tactic r = Z3_tactic_using_params(t.ctx(), t, p);
3265 t.check_error();
3266 return tactic(t.ctx(), r);
3267 }
Z3_tactic Z3_API Z3_tactic_using_params(Z3_context c, Z3_tactic t, Z3_params p)
Return a tactic that applies t using the given set of parameters.

◆ xnor()

expr xnor ( expr const a,
expr const b 
)
inline

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

2007{ if (a.is_bool()) return !(a ^ b); check_context(a, b); Z3_ast r = Z3_mk_bvxnor(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvxnor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise xnor.

◆ zext()

expr zext ( expr const a,
unsigned  i 
)
inline

Extend the given bit-vector with zeros to the (unsigned) equivalent bitvector of size m+i, where m is the size of the given bit-vector.

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

2293{ return to_expr(a.ctx(), Z3_mk_zero_ext(a.ctx(), i, a)); }
Z3_ast Z3_API Z3_mk_zero_ext(Z3_context c, unsigned i, Z3_ast t1)
Extend the given bit-vector with zeros to the (unsigned) equivalent bit-vector of size m+i,...