Z3
Data Structures | Typedefs | Enumerations | Functions
z3 Namespace Reference

Z3 C++ namespace. More...

Data Structures

class  cast_ast
 
class  ast_vector_tpl
 
class  exception
 Exception used to sign API usage errors. More...
 
class  config
 Z3 global configuration object. More...
 
class  context
 A Context manages all other Z3 objects, global configuration options, etc. More...
 
class  array
 
class  object
 
class  symbol
 
class  param_descrs
 
class  params
 
class  ast
 
class  sort
 A Z3 sort (aka type). Every expression (i.e., formula or term) in Z3 has a sort. More...
 
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  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  cast_ast< ast >
 
class  cast_ast< expr >
 
class  cast_ast< sort >
 
class  cast_ast< func_decl >
 
class  func_entry
 
class  func_interp
 
class  model
 
class  stats
 
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  solver
 
class  goal
 
class  apply_result
 
class  tactic
 
class  simplifier
 
class  probe
 
class  optimize
 
class  fixedpoint
 
class  constructor_list
 
class  constructors
 
class  on_clause
 
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 ()
 
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 More...
 
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) More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
expr ugt (expr const &a, int b)
 
expr ugt (int a, expr const &b)
 
expr udiv (expr const &a, expr const &b)
 unsigned division operator for bitvectors. More...
 
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 More...
 
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 More...
 
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 More...
 
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 More...
 
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 More...
 
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 More...
 
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. More...
 
expr bv2int (expr const &a, bool is_signed)
 bit-vector and integer conversions. More...
 
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 More...
 
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. More...
 
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 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 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 4268 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 135 of file z3++.h.

135  {
136  unsat, sat, unknown
137  };
@ unknown
Definition: z3++.h:136
@ sat
Definition: z3++.h:136
@ unsat
Definition: z3++.h:136

◆ rounding_mode

Enumerator
RNA 
RNE 
RTP 
RTN 
RTZ 

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

139  {
140  RNA,
141  RNE,
142  RTP,
143  RTN,
144  RTZ
145  };
@ RNE
Definition: z3++.h:141
@ RNA
Definition: z3++.h:140
@ RTZ
Definition: z3++.h:144
@ RTN
Definition: z3++.h:143
@ RTP
Definition: z3++.h:142

Function Documentation

◆ abs()

expr z3::abs ( expr const &  a)
inline

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

1995  {
1996  Z3_ast r;
1997  if (a.is_int()) {
1998  expr zero = a.ctx().int_val(0);
1999  expr ge = a >= zero;
2000  expr na = -a;
2001  r = Z3_mk_ite(a.ctx(), ge, a, na);
2002  }
2003  else if (a.is_real()) {
2004  expr zero = a.ctx().real_val(0);
2005  expr ge = a >= zero;
2006  expr na = -a;
2007  r = Z3_mk_ite(a.ctx(), ge, a, na);
2008  }
2009  else {
2010  r = Z3_mk_fpa_abs(a.ctx(), a);
2011  }
2012  a.check_error();
2013  return expr(a.ctx(), r);
2014  }
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.
System.IntPtr Z3_ast

◆ as_array()

expr z3::as_array ( func_decl f)
inline

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

3991  {
3992  Z3_ast r = Z3_mk_as_array(f.ctx(), f);
3993  f.check_error();
3994  return expr(f.ctx(), r);
3995  }
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 z3::ashr ( expr const &  a,
expr const &  b 
)
inline

arithmetic shift right operator for bitvectors

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

2221 { 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:2107

Referenced by ashr().

◆ ashr() [2/3]

expr z3::ashr ( expr const &  a,
int  b 
)
inline

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

2222 { return ashr(a, a.ctx().num_val(b, a.get_sort())); }
expr ashr(int a, expr const &b)
Definition: z3++.h:2223

◆ ashr() [3/3]

expr z3::ashr ( int  a,
expr const &  b 
)
inline

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

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

◆ atleast()

expr z3::atleast ( expr_vector const &  es,
unsigned  bound 
)
inline

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

2430  {
2431  assert(es.size() > 0);
2432  context& ctx = es[0u].ctx();
2433  array<Z3_ast> _es(es);
2434  Z3_ast r = Z3_mk_atleast(ctx, _es.size(), _es.ptr(), bound);
2435  ctx.check_error();
2436  return expr(ctx, r);
2437  }
Z3_ast Z3_API Z3_mk_atleast(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.

◆ atmost()

expr z3::atmost ( expr_vector const &  es,
unsigned  bound 
)
inline

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

2422  {
2423  assert(es.size() > 0);
2424  context& ctx = es[0u].ctx();
2425  array<Z3_ast> _es(es);
2426  Z3_ast r = Z3_mk_atmost(ctx, _es.size(), _es.ptr(), bound);
2427  ctx.check_error();
2428  return expr(ctx, r);
2429  }
Z3_ast Z3_API Z3_mk_atmost(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.

◆ bv2int()

expr z3::bv2int ( expr const &  a,
bool  is_signed 
)
inline

bit-vector and integer conversions.

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

2233 { 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 z3::bvadd_no_overflow ( expr const &  a,
expr const &  b,
bool  is_signed 
)
inline

bit-vector overflow/underflow checks

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

2239  {
2240  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);
2241  }
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.
void check_context(object const &a, object const &b)
Definition: z3++.h:478

◆ bvadd_no_underflow()

expr z3::bvadd_no_underflow ( expr const &  a,
expr const &  b 
)
inline

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

2242  {
2243  check_context(a, b); Z3_ast r = Z3_mk_bvadd_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2244  }
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 z3::bvmul_no_overflow ( expr const &  a,
expr const &  b,
bool  is_signed 
)
inline

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

2257  {
2258  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);
2259  }
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 z3::bvmul_no_underflow ( expr const &  a,
expr const &  b 
)
inline

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

2260  {
2261  check_context(a, b); Z3_ast r = Z3_mk_bvmul_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2262  }
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 z3::bvneg_no_overflow ( expr const &  a)
inline

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

2254  {
2255  Z3_ast r = Z3_mk_bvneg_no_overflow(a.ctx(), a); a.check_error(); return expr(a.ctx(), r);
2256  }
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 z3::bvredand ( expr const &  a)
inline

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

1989  {
1990  assert(a.is_bv());
1991  Z3_ast r = Z3_mk_bvredand(a.ctx(), a);
1992  a.check_error();
1993  return expr(a.ctx(), r);
1994  }
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 z3::bvredor ( expr const &  a)
inline

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

1983  {
1984  assert(a.is_bv());
1985  Z3_ast r = Z3_mk_bvredor(a.ctx(), a);
1986  a.check_error();
1987  return expr(a.ctx(), r);
1988  }
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 z3::bvsdiv_no_overflow ( expr const &  a,
expr const &  b 
)
inline

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

2251  {
2252  check_context(a, b); Z3_ast r = Z3_mk_bvsdiv_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2253  }
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 z3::bvsub_no_overflow ( expr const &  a,
expr const &  b 
)
inline

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

2245  {
2246  check_context(a, b); Z3_ast r = Z3_mk_bvsub_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2247  }
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 z3::bvsub_no_underflow ( expr const &  a,
expr const &  b,
bool  is_signed 
)
inline

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

2248  {
2249  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);
2250  }
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 z3::check_context ( object const &  a,
object const &  b 
)
inline

◆ concat() [1/2]

expr z3::concat ( expr const &  a,
expr const &  b 
)
inline

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

2456  {
2457  check_context(a, b);
2458  Z3_ast r;
2459  if (Z3_is_seq_sort(a.ctx(), a.get_sort())) {
2460  Z3_ast _args[2] = { a, b };
2461  r = Z3_mk_seq_concat(a.ctx(), 2, _args);
2462  }
2463  else if (Z3_is_re_sort(a.ctx(), a.get_sort())) {
2464  Z3_ast _args[2] = { a, b };
2465  r = Z3_mk_re_concat(a.ctx(), 2, _args);
2466  }
2467  else {
2468  r = Z3_mk_concat(a.ctx(), a, b);
2469  }
2470  a.ctx().check_error();
2471  return expr(a.ctx(), r);
2472  }
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.

◆ concat() [2/2]

expr z3::concat ( expr_vector const &  args)
inline

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

2474  {
2475  Z3_ast r;
2476  assert(args.size() > 0);
2477  if (args.size() == 1) {
2478  return args[0u];
2479  }
2480  context& ctx = args[0u].ctx();
2481  array<Z3_ast> _args(args);
2482  if (Z3_is_seq_sort(ctx, args[0u].get_sort())) {
2483  r = Z3_mk_seq_concat(ctx, _args.size(), _args.ptr());
2484  }
2485  else if (Z3_is_re_sort(ctx, args[0u].get_sort())) {
2486  r = Z3_mk_re_concat(ctx, _args.size(), _args.ptr());
2487  }
2488  else {
2489  r = _args[args.size()-1];
2490  for (unsigned i = args.size()-1; i > 0; ) {
2491  --i;
2492  r = Z3_mk_concat(ctx, _args[i], r);
2493  ctx.check_error();
2494  }
2495  }
2496  ctx.check_error();
2497  return expr(ctx, r);
2498  }

◆ cond()

tactic z3::cond ( probe const &  p,
tactic const &  t1,
tactic const &  t2 
)
inline

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

3471  {
3472  check_context(p, t1); check_context(p, t2);
3473  Z3_tactic r = Z3_tactic_cond(t1.ctx(), p, t1, t2);
3474  t1.check_error();
3475  return tactic(t1.ctx(), r);
3476  }
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 z3::const_array ( sort const &  d,
expr const &  v 
)
inline

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

4008  {
4009  MK_EXPR2(Z3_mk_const_array, d, v);
4010  }
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:4002

◆ distinct()

expr z3::distinct ( expr_vector const &  args)
inline

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

2447  {
2448  assert(args.size() > 0);
2449  context& ctx = args[0u].ctx();
2450  array<Z3_ast> _args(args);
2451  Z3_ast r = Z3_mk_distinct(ctx, _args.size(), _args.ptr());
2452  ctx.check_error();
2453  return expr(ctx, r);
2454  }
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 z3::empty ( sort const &  s)
inline

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

4064  {
4065  Z3_ast r = Z3_mk_seq_empty(s.ctx(), s);
4066  s.check_error();
4067  return expr(s.ctx(), r);
4068  }
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 z3::empty_set ( sort const &  s)
inline

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

4012  {
4014  }
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:3997

◆ eq()

bool z3::eq ( ast const &  a,
ast const &  b 
)
inline

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

584 { 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 z3::exists ( expr const &  x,
expr const &  b 
)
inline

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

2349  {
2350  check_context(x, b);
2351  Z3_app vars[] = {(Z3_app) x};
2352  Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 1, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2353  }
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.
System.IntPtr Z3_app

◆ exists() [2/5]

expr z3::exists ( expr const &  x1,
expr const &  x2,
expr const &  b 
)
inline

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

2354  {
2355  check_context(x1, b); check_context(x2, b);
2356  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2};
2357  Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 2, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2358  }

◆ exists() [3/5]

expr z3::exists ( expr const &  x1,
expr const &  x2,
expr const &  x3,
expr const &  b 
)
inline

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

2359  {
2360  check_context(x1, b); check_context(x2, b); check_context(x3, b);
2361  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3 };
2362  Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 3, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2363  }

◆ exists() [4/5]

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

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

2364  {
2365  check_context(x1, b); check_context(x2, b); check_context(x3, b); check_context(x4, b);
2366  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3, (Z3_app) x4 };
2367  Z3_ast r = Z3_mk_exists_const(b.ctx(), 0, 4, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2368  }

◆ exists() [5/5]

expr z3::exists ( expr_vector const &  xs,
expr const &  b 
)
inline

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

2369  {
2370  array<Z3_app> vars(xs);
2371  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);
2372  }

◆ fail_if()

tactic z3::fail_if ( probe const &  p)
inline

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

3460  {
3461  Z3_tactic r = Z3_tactic_fail_if(p.ctx(), p);
3462  p.check_error();
3463  return tactic(p.ctx(), r);
3464  }
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 z3::fma ( expr const &  a,
expr const &  b,
expr const &  c,
expr const &  rm 
)
inline

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

2031  {
2032  check_context(a, b); check_context(a, c); check_context(a, rm);
2033  assert(a.is_fpa() && b.is_fpa() && c.is_fpa());
2034  Z3_ast r = Z3_mk_fpa_fma(a.ctx(), rm, a, b, c);
2035  a.check_error();
2036  return expr(a.ctx(), r);
2037  }
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 z3::foldl ( expr const &  f,
expr const &  a,
expr const &  list 
)
inline

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

2514  {
2515  context& ctx = f.ctx();
2516  Z3_ast r = Z3_mk_seq_foldl(ctx, f, a, list);
2517  ctx.check_error();
2518  return expr(ctx, r);
2519  }
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 z3::foldli ( expr const &  f,
expr const &  i,
expr const &  a,
expr const &  list 
)
inline

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

2521  {
2522  context& ctx = f.ctx();
2523  Z3_ast r = Z3_mk_seq_foldli(ctx, f, i, a, list);
2524  ctx.check_error();
2525  return expr(ctx, r);
2526  }
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 z3::forall ( expr const &  x,
expr const &  b 
)
inline

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

2325  {
2326  check_context(x, b);
2327  Z3_app vars[] = {(Z3_app) x};
2328  Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 1, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2329  }
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 z3::forall ( expr const &  x1,
expr const &  x2,
expr const &  b 
)
inline

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

2330  {
2331  check_context(x1, b); check_context(x2, b);
2332  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2};
2333  Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 2, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2334  }

◆ forall() [3/5]

expr z3::forall ( expr const &  x1,
expr const &  x2,
expr const &  x3,
expr const &  b 
)
inline

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

2335  {
2336  check_context(x1, b); check_context(x2, b); check_context(x3, b);
2337  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3 };
2338  Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 3, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2339  }

◆ forall() [4/5]

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

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

2340  {
2341  check_context(x1, b); check_context(x2, b); check_context(x3, b); check_context(x4, b);
2342  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3, (Z3_app) x4 };
2343  Z3_ast r = Z3_mk_forall_const(b.ctx(), 0, 4, vars, 0, 0, b); b.check_error(); return expr(b.ctx(), r);
2344  }

◆ forall() [5/5]

expr z3::forall ( expr_vector const &  xs,
expr const &  b 
)
inline

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

2345  {
2346  array<Z3_app> vars(xs);
2347  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);
2348  }

◆ fp_eq()

expr z3::fp_eq ( expr const &  a,
expr const &  b 
)
inline

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

2022  {
2023  check_context(a, b);
2024  assert(a.is_fpa());
2025  Z3_ast r = Z3_mk_fpa_eq(a.ctx(), a, b);
2026  a.check_error();
2027  return expr(a.ctx(), r);
2028  }
Z3_ast Z3_API Z3_mk_fpa_eq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point equality.

◆ fpa_fp()

expr z3::fpa_fp ( expr const &  sgn,
expr const &  exp,
expr const &  sig 
)
inline

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

2039  {
2040  check_context(sgn, exp); check_context(exp, sig);
2041  assert(sgn.is_bv() && exp.is_bv() && sig.is_bv());
2042  Z3_ast r = Z3_mk_fpa_fp(sgn.ctx(), sgn, exp, sig);
2043  sgn.check_error();
2044  return expr(sgn.ctx(), r);
2045  }
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 z3::fpa_to_fpa ( expr const &  t,
sort  s 
)
inline

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

2075  {
2076  assert(t.is_fpa());
2077  Z3_ast r = Z3_mk_fpa_to_fp_float(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2078  t.check_error();
2079  return expr(t.ctx(), r);
2080  }
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 z3::fpa_to_sbv ( expr const &  t,
unsigned  sz 
)
inline

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

2047  {
2048  assert(t.is_fpa());
2049  Z3_ast r = Z3_mk_fpa_to_sbv(t.ctx(), t.ctx().fpa_rounding_mode(), t, sz);
2050  t.check_error();
2051  return expr(t.ctx(), r);
2052  }
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 z3::fpa_to_ubv ( expr const &  t,
unsigned  sz 
)
inline

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

2054  {
2055  assert(t.is_fpa());
2056  Z3_ast r = Z3_mk_fpa_to_ubv(t.ctx(), t.ctx().fpa_rounding_mode(), t, sz);
2057  t.check_error();
2058  return expr(t.ctx(), r);
2059  }
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 z3::full_set ( sort const &  s)
inline

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

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

◆ function() [1/9]

func_decl z3::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 3931 of file z3++.h.

3931  {
3932  return range.ctx().function(name, d1, d2, d3, d4, d5, range);
3933  }
func_decl function(symbol const &name, unsigned arity, sort const *domain, sort const &range)
Definition: z3++.h:3634
context & ctx() const
Definition: z3++.h:474
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:4136

◆ function() [2/9]

func_decl z3::function ( char const *  name,
sort const &  d1,
sort const &  d2,
sort const &  d3,
sort const &  d4,
sort const &  range 
)
inline

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

3928  {
3929  return range.ctx().function(name, d1, d2, d3, d4, range);
3930  }

◆ function() [3/9]

func_decl z3::function ( char const *  name,
sort const &  d1,
sort const &  d2,
sort const &  d3,
sort const &  range 
)
inline

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

3925  {
3926  return range.ctx().function(name, d1, d2, d3, range);
3927  }

◆ function() [4/9]

func_decl z3::function ( char const *  name,
sort const &  d1,
sort const &  d2,
sort const &  range 
)
inline

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

3922  {
3923  return range.ctx().function(name, d1, d2, range);
3924  }

◆ function() [5/9]

func_decl z3::function ( char const *  name,
sort const &  domain,
sort const &  range 
)
inline

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

3919  {
3920  return range.ctx().function(name, domain, range);
3921  }

◆ function() [6/9]

func_decl z3::function ( char const *  name,
sort_vector const &  domain,
sort const &  range 
)
inline

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

3934  {
3935  return range.ctx().function(name, domain, range);
3936  }

◆ function() [7/9]

func_decl z3::function ( char const *  name,
unsigned  arity,
sort const *  domain,
sort const &  range 
)
inline

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

3916  {
3917  return range.ctx().function(name, arity, domain, range);
3918  }

◆ function() [8/9]

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

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

3937  {
3938  return range.ctx().function(name.c_str(), domain, range);
3939  }

◆ function() [9/9]

func_decl z3::function ( symbol const &  name,
unsigned  arity,
sort const *  domain,
sort const &  range 
)
inline

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

3913  {
3914  return range.ctx().function(name, arity, domain, range);
3915  }

◆ implies() [1/3]

expr z3::implies ( bool  a,
expr const &  b 
)
inline

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

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

◆ implies() [2/3]

expr z3::implies ( expr const &  a,
bool  b 
)
inline

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

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

◆ implies() [3/3]

expr z3::implies ( expr const &  a,
expr const &  b 
)
inline

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

1629  {
1630  assert(a.is_bool() && b.is_bool());
1631  _Z3_MK_BIN_(a, b, Z3_mk_implies);
1632  }
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:1622

◆ in_re()

expr z3::in_re ( expr const &  s,
expr const &  re 
)
inline

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

4096  {
4097  MK_EXPR2(Z3_mk_seq_in_re, s, re);
4098  }
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 z3::indexof ( expr const &  s,
expr const &  substr,
expr const &  offset 
)
inline

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

4081  {
4082  check_context(s, substr); check_context(s, offset);
4083  Z3_ast r = Z3_mk_seq_index(s.ctx(), s, substr, offset);
4084  s.check_error();
4085  return expr(s.ctx(), r);
4086  }
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 z3::int2bv ( unsigned  n,
expr const &  a 
)
inline

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

2234 { 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 z3::is_int ( expr const &  e)
inline

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

1677 { _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:1669

◆ ite()

expr z3::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 2094 of file z3++.h.

2094  {
2095  check_context(c, t); check_context(c, e);
2096  assert(c.is_bool());
2097  Z3_ast r = Z3_mk_ite(c.ctx(), c, t, e);
2098  c.check_error();
2099  return expr(c.ctx(), r);
2100  }

◆ lambda() [1/5]

expr z3::lambda ( expr const &  x,
expr const &  b 
)
inline

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

2373  {
2374  check_context(x, b);
2375  Z3_app vars[] = {(Z3_app) x};
2376  Z3_ast r = Z3_mk_lambda_const(b.ctx(), 1, vars, b); b.check_error(); return expr(b.ctx(), r);
2377  }
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 z3::lambda ( expr const &  x1,
expr const &  x2,
expr const &  b 
)
inline

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

2378  {
2379  check_context(x1, b); check_context(x2, b);
2380  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2};
2381  Z3_ast r = Z3_mk_lambda_const(b.ctx(), 2, vars, b); b.check_error(); return expr(b.ctx(), r);
2382  }

◆ lambda() [3/5]

expr z3::lambda ( expr const &  x1,
expr const &  x2,
expr const &  x3,
expr const &  b 
)
inline

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

2383  {
2384  check_context(x1, b); check_context(x2, b); check_context(x3, b);
2385  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3 };
2386  Z3_ast r = Z3_mk_lambda_const(b.ctx(), 3, vars, b); b.check_error(); return expr(b.ctx(), r);
2387  }

◆ lambda() [4/5]

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

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

2388  {
2389  check_context(x1, b); check_context(x2, b); check_context(x3, b); check_context(x4, b);
2390  Z3_app vars[] = {(Z3_app) x1, (Z3_app) x2, (Z3_app) x3, (Z3_app) x4 };
2391  Z3_ast r = Z3_mk_lambda_const(b.ctx(), 4, vars, b); b.check_error(); return expr(b.ctx(), r);
2392  }

◆ lambda() [5/5]

expr z3::lambda ( expr_vector const &  xs,
expr const &  b 
)
inline

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

2393  {
2394  array<Z3_app> vars(xs);
2395  Z3_ast r = Z3_mk_lambda_const(b.ctx(), vars.size(), vars.ptr(), b); b.check_error(); return expr(b.ctx(), r);
2396  }

◆ last_indexof()

expr z3::last_indexof ( expr const &  s,
expr const &  substr 
)
inline

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

4087  {
4088  check_context(s, substr);
4089  Z3_ast r = Z3_mk_seq_last_index(s.ctx(), s, substr);
4090  s.check_error();
4091  return expr(s.ctx(), r);
4092  }
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 z3::linear_order ( sort const &  a,
unsigned  index 
)
inline

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

2270  {
2271  return to_func_decl(a.ctx(), Z3_mk_linear_order(a.ctx(), a, index));
2272  }
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:2121

◆ lshr() [1/3]

expr z3::lshr ( expr const &  a,
expr const &  b 
)
inline

logic shift right operator for bitvectors

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

2214 { 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().

◆ lshr() [2/3]

expr z3::lshr ( expr const &  a,
int  b 
)
inline

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

2215 { return lshr(a, a.ctx().num_val(b, a.get_sort())); }
expr lshr(int a, expr const &b)
Definition: z3++.h:2216

◆ lshr() [3/3]

expr z3::lshr ( int  a,
expr const &  b 
)
inline

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

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

◆ map()

expr z3::map ( expr const &  f,
expr const &  list 
)
inline

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

2500  {
2501  context& ctx = f.ctx();
2502  Z3_ast r = Z3_mk_seq_map(ctx, f, list);
2503  ctx.check_error();
2504  return expr(ctx, r);
2505  }
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 z3::mapi ( expr const &  f,
expr const &  i,
expr const &  list 
)
inline

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

2507  {
2508  context& ctx = f.ctx();
2509  Z3_ast r = Z3_mk_seq_mapi(ctx, f, i, list);
2510  ctx.check_error();
2511  return expr(ctx, r);
2512  }
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 z3::max ( expr const &  a,
expr const &  b 
)
inline

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

1967  {
1968  check_context(a, b);
1969  Z3_ast r;
1970  if (a.is_arith()) {
1971  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), a, b);
1972  }
1973  else if (a.is_bv()) {
1974  r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), a, b);
1975  }
1976  else {
1977  assert(a.is_fpa());
1978  r = Z3_mk_fpa_max(a.ctx(), a, b);
1979  }
1980  a.check_error();
1981  return expr(a.ctx(), r);
1982  }
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.

Referenced by Context::repeat(), and Context::Repeat().

◆ min()

expr z3::min ( expr const &  a,
expr const &  b 
)
inline

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

1951  {
1952  check_context(a, b);
1953  Z3_ast r;
1954  if (a.is_arith()) {
1955  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), b, a);
1956  }
1957  else if (a.is_bv()) {
1958  r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), b, a);
1959  }
1960  else {
1961  assert(a.is_fpa());
1962  r = Z3_mk_fpa_min(a.ctx(), a, b);
1963  }
1964  a.check_error();
1965  return expr(a.ctx(), r);
1966  }
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 z3::mk_and ( expr_vector const &  args)
inline

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

2534  {
2535  array<Z3_ast> _args(args);
2536  Z3_ast r = Z3_mk_and(args.ctx(), _args.size(), _args.ptr());
2537  args.check_error();
2538  return expr(args.ctx(), r);
2539  }
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 z3::mk_or ( expr_vector const &  args)
inline

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

2528  {
2529  array<Z3_ast> _args(args);
2530  Z3_ast r = Z3_mk_or(args.ctx(), _args.size(), _args.ptr());
2531  args.check_error();
2532  return expr(args.ctx(), r);
2533  }
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 z3::mk_xor ( expr_vector const &  args)
inline

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

2540  {
2541  if (args.empty())
2542  return args.ctx().bool_val(false);
2543  expr r = args[0u];
2544  for (unsigned i = 1; i < args.size(); ++i)
2545  r = r ^ args[i];
2546  return r;
2547  }

◆ mod() [1/3]

expr z3::mod ( expr const &  a,
expr const &  b 
)
inline

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

1641  {
1642  if (a.is_bv()) {
1643  _Z3_MK_BIN_(a, b, Z3_mk_bvsmod);
1644  }
1645  else {
1646  _Z3_MK_BIN_(a, b, Z3_mk_mod);
1647  }
1648  }
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%().

◆ mod() [2/3]

expr z3::mod ( expr const &  a,
int  b 
)
inline

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

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

◆ mod() [3/3]

expr z3::mod ( int  a,
expr const &  b 
)
inline

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

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

◆ nand()

expr z3::nand ( expr const &  a,
expr const &  b 
)
inline

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

1948 { 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 z3::nor ( expr const &  a,
expr const &  b 
)
inline

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

1949 { 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 z3::operator! ( expr const &  a)
inline
Precondition
a.is_bool()

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

1675 { 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 z3::operator! ( probe const &  p)
inline

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

3283  {
3284  Z3_probe r = Z3_probe_not(p.ctx(), p); p.check_error(); return probe(p.ctx(), r);
3285  }
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 z3::operator!= ( double  a,
expr const &  b 
)
inline

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

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

◆ operator!=() [2/5]

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

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

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

◆ operator!=() [3/5]

expr z3::operator!= ( expr const &  a,
expr const &  b 
)
inline

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

1717  {
1718  check_context(a, b);
1719  Z3_ast args[2] = { a, b };
1720  Z3_ast r = Z3_mk_distinct(a.ctx(), 2, args);
1721  a.check_error();
1722  return expr(a.ctx(), r);
1723  }

◆ operator!=() [4/5]

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

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

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

◆ operator!=() [5/5]

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

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

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

◆ operator%() [1/3]

expr z3::operator% ( expr const &  a,
expr const &  b 
)
inline

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

1652 { return mod(a, b); }

◆ operator%() [2/3]

expr z3::operator% ( expr const &  a,
int  b 
)
inline

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

1653 { return mod(a, b); }

◆ operator%() [3/3]

expr z3::operator% ( int  a,
expr const &  b 
)
inline

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

1654 { return mod(a, b); }

◆ operator&() [1/5]

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

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

1936 { 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 z3::operator& ( expr const &  a,
int  b 
)
inline

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

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

◆ operator&() [3/5]

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

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

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

◆ operator&() [4/5]

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

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

3197  {
3198  check_context(t1, t2);
3199  Z3_simplifier r = Z3_simplifier_and_then(t1.ctx(), t1, t2);
3200  t1.check_error();
3201  return simplifier(t1.ctx(), r);
3202  }
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 z3::operator& ( tactic const &  t1,
tactic const &  t2 
)
inline

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

3123  {
3124  check_context(t1, t2);
3125  Z3_tactic r = Z3_tactic_and_then(t1.ctx(), t1, t2);
3126  t1.check_error();
3127  return tactic(t1.ctx(), r);
3128  }
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 z3::operator&& ( bool  a,
expr const &  b 
)
inline
Precondition
b.is_bool()

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

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

◆ operator&&() [2/4]

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

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

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

◆ operator&&() [3/4]

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

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

1681  {
1682  check_context(a, b);
1683  assert(a.is_bool() && b.is_bool());
1684  Z3_ast args[2] = { a, b };
1685  Z3_ast r = Z3_mk_and(a.ctx(), 2, args);
1686  a.check_error();
1687  return expr(a.ctx(), r);
1688  }

◆ operator&&() [4/4]

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

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

3277  {
3278  check_context(p1, p2); Z3_probe r = Z3_probe_and(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3279  }
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 z3::operator* ( expr const &  a,
expr const &  b 
)
inline

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

1759  {
1760  check_context(a, b);
1761  Z3_ast r = 0;
1762  if (a.is_arith() && b.is_arith()) {
1763  Z3_ast args[2] = { a, b };
1764  r = Z3_mk_mul(a.ctx(), 2, args);
1765  }
1766  else if (a.is_bv() && b.is_bv()) {
1767  r = Z3_mk_bvmul(a.ctx(), a, b);
1768  }
1769  else if (a.is_fpa() && b.is_fpa()) {
1770  r = Z3_mk_fpa_mul(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1771  }
1772  else {
1773  // operator is not supported by given arguments.
1774  assert(false);
1775  }
1776  a.check_error();
1777  return expr(a.ctx(), r);
1778  }
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 z3::operator* ( expr const &  a,
int  b 
)
inline

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

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

◆ operator*() [3/3]

expr z3::operator* ( int  a,
expr const &  b 
)
inline

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

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

◆ operator+() [1/3]

expr z3::operator+ ( expr const &  a,
expr const &  b 
)
inline

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

1729  {
1730  check_context(a, b);
1731  Z3_ast r = 0;
1732  if (a.is_arith() && b.is_arith()) {
1733  Z3_ast args[2] = { a, b };
1734  r = Z3_mk_add(a.ctx(), 2, args);
1735  }
1736  else if (a.is_bv() && b.is_bv()) {
1737  r = Z3_mk_bvadd(a.ctx(), a, b);
1738  }
1739  else if (a.is_seq() && b.is_seq()) {
1740  return concat(a, b);
1741  }
1742  else if (a.is_re() && b.is_re()) {
1743  Z3_ast _args[2] = { a, b };
1744  r = Z3_mk_re_union(a.ctx(), 2, _args);
1745  }
1746  else if (a.is_fpa() && b.is_fpa()) {
1747  r = Z3_mk_fpa_add(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1748  }
1749  else {
1750  // operator is not supported by given arguments.
1751  assert(false);
1752  }
1753  a.check_error();
1754  return expr(a.ctx(), r);
1755  }
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_vector const &args)
Definition: z3++.h:2474

◆ operator+() [2/3]

expr z3::operator+ ( expr const &  a,
int  b 
)
inline

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

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

◆ operator+() [3/3]

expr z3::operator+ ( int  a,
expr const &  b 
)
inline

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

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

◆ operator-() [1/4]

expr z3::operator- ( expr const &  a)
inline

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

1825  {
1826  Z3_ast r = 0;
1827  if (a.is_arith()) {
1828  r = Z3_mk_unary_minus(a.ctx(), a);
1829  }
1830  else if (a.is_bv()) {
1831  r = Z3_mk_bvneg(a.ctx(), a);
1832  }
1833  else if (a.is_fpa()) {
1834  r = Z3_mk_fpa_neg(a.ctx(), a);
1835  }
1836  else {
1837  // operator is not supported by given arguments.
1838  assert(false);
1839  }
1840  a.check_error();
1841  return expr(a.ctx(), r);
1842  }
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 z3::operator- ( expr const &  a,
expr const &  b 
)
inline

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

1844  {
1845  check_context(a, b);
1846  Z3_ast r = 0;
1847  if (a.is_arith() && b.is_arith()) {
1848  Z3_ast args[2] = { a, b };
1849  r = Z3_mk_sub(a.ctx(), 2, args);
1850  }
1851  else if (a.is_bv() && b.is_bv()) {
1852  r = Z3_mk_bvsub(a.ctx(), a, b);
1853  }
1854  else if (a.is_fpa() && b.is_fpa()) {
1855  r = Z3_mk_fpa_sub(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1856  }
1857  else {
1858  // operator is not supported by given arguments.
1859  assert(false);
1860  }
1861  a.check_error();
1862  return expr(a.ctx(), r);
1863  }
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 z3::operator- ( expr const &  a,
int  b 
)
inline

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

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

◆ operator-() [4/4]

expr z3::operator- ( int  a,
expr const &  b 
)
inline

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

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

◆ operator/() [1/3]

expr z3::operator/ ( expr const &  a,
expr const &  b 
)
inline

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

1803  {
1804  check_context(a, b);
1805  Z3_ast r = 0;
1806  if (a.is_arith() && b.is_arith()) {
1807  r = Z3_mk_div(a.ctx(), a, b);
1808  }
1809  else if (a.is_bv() && b.is_bv()) {
1810  r = Z3_mk_bvsdiv(a.ctx(), a, b);
1811  }
1812  else if (a.is_fpa() && b.is_fpa()) {
1813  r = Z3_mk_fpa_div(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1814  }
1815  else {
1816  // operator is not supported by given arguments.
1817  assert(false);
1818  }
1819  a.check_error();
1820  return expr(a.ctx(), r);
1821  }
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 z3::operator/ ( expr const &  a,
int  b 
)
inline

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

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

◆ operator/() [3/3]

expr z3::operator/ ( int  a,
expr const &  b 
)
inline

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

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

◆ operator<() [1/6]

probe z3::operator< ( double  p1,
probe const &  p2 
)
inline

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

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

◆ operator<() [2/6]

expr z3::operator< ( expr const &  a,
expr const &  b 
)
inline

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

1892  {
1893  check_context(a, b);
1894  Z3_ast r = 0;
1895  if (a.is_arith() && b.is_arith()) {
1896  r = Z3_mk_lt(a.ctx(), a, b);
1897  }
1898  else if (a.is_bv() && b.is_bv()) {
1899  r = Z3_mk_bvslt(a.ctx(), a, b);
1900  }
1901  else if (a.is_fpa() && b.is_fpa()) {
1902  r = Z3_mk_fpa_lt(a.ctx(), a, b);
1903  }
1904  else {
1905  // operator is not supported by given arguments.
1906  assert(false);
1907  }
1908  a.check_error();
1909  return expr(a.ctx(), r);
1910  }
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 z3::operator< ( expr const &  a,
int  b 
)
inline

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

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

◆ operator<() [4/6]

expr z3::operator< ( int  a,
expr const &  b 
)
inline

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

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

◆ operator<() [5/6]

probe z3::operator< ( probe const &  p1,
double  p2 
)
inline

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

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

◆ operator<() [6/6]

probe z3::operator< ( probe const &  p1,
probe const &  p2 
)
inline

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

3262  {
3263  check_context(p1, p2); Z3_probe r = Z3_probe_lt(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3264  }
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& z3::operator<< ( std::ostream &  out,
apply_result const &  r 
)
inline

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

3081 { 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& z3::operator<< ( std::ostream &  out,
ast const &  n 
)
inline

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

580  {
581  out << Z3_ast_to_string(n.ctx(), n.m_ast); return out;
582  }
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& z3::operator<< ( std::ostream &  out,
check_result  r 
)
inline

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

2716  {
2717  if (r == unsat) out << "unsat";
2718  else if (r == sat) out << "sat";
2719  else out << "unknown";
2720  return out;
2721  }

◆ operator<<() [4/13]

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

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

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

◆ operator<<() [5/13]

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

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

3458 { 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& z3::operator<< ( std::ostream &  out,
goal const &  g 
)
inline

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

3057 { 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& z3::operator<< ( std::ostream &  out,
model const &  m 
)
inline

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

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

◆ operator<<() [8/13]

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

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

3400 { 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& z3::operator<< ( std::ostream &  out,
param_descrs const &  d 
)
inline

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

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

◆ operator<<() [10/13]

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

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

547  {
548  out << Z3_params_to_string(p.ctx(), p); return out;
549  }
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& z3::operator<< ( std::ostream &  out,
solver const &  s 
)
inline

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

2998 { 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& z3::operator<< ( std::ostream &  out,
stats const &  s 
)
inline

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

2713 { 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& z3::operator<< ( std::ostream &  out,
symbol const &  s 
)
inline

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

491  {
492  if (s.kind() == Z3_INT_SYMBOL)
493  out << "k!" << s.to_int();
494  else
495  out << s.str();
496  return out;
497  }
@ Z3_INT_SYMBOL
Definition: z3_api.h:76

◆ operator<=() [1/6]

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

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

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

◆ operator<=() [2/6]

expr z3::operator<= ( expr const &  a,
expr const &  b 
)
inline

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

1867  {
1868  check_context(a, b);
1869  Z3_ast r = 0;
1870  if (a.is_arith() && b.is_arith()) {
1871  r = Z3_mk_le(a.ctx(), a, b);
1872  }
1873  else if (a.is_bv() && b.is_bv()) {
1874  r = Z3_mk_bvsle(a.ctx(), a, b);
1875  }
1876  else if (a.is_fpa() && b.is_fpa()) {
1877  r = Z3_mk_fpa_leq(a.ctx(), a, b);
1878  }
1879  else {
1880  // operator is not supported by given arguments.
1881  assert(false);
1882  }
1883  a.check_error();
1884  return expr(a.ctx(), r);
1885  }
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 z3::operator<= ( expr const &  a,
int  b 
)
inline

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

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

◆ operator<=() [4/6]

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

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

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

◆ operator<=() [5/6]

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

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

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

◆ operator<=() [6/6]

probe z3::operator<= ( probe const &  p1,
probe const &  p2 
)
inline

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

3252  {
3253  check_context(p1, p2); Z3_probe r = Z3_probe_le(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3254  }
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 z3::operator== ( double  a,
expr const &  b 
)
inline

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

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

◆ operator==() [2/8]

probe z3::operator== ( double  p1,
probe const &  p2 
)
inline

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

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

◆ operator==() [3/8]

expr z3::operator== ( expr const &  a,
double  b 
)
inline

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

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

◆ operator==() [4/8]

expr z3::operator== ( expr const &  a,
expr const &  b 
)
inline

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

1706  {
1707  check_context(a, b);
1708  Z3_ast r = Z3_mk_eq(a.ctx(), a, b);
1709  a.check_error();
1710  return expr(a.ctx(), r);
1711  }
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 z3::operator== ( expr const &  a,
int  b 
)
inline

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

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

◆ operator==() [6/8]

expr z3::operator== ( int  a,
expr const &  b 
)
inline

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

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

◆ operator==() [7/8]

probe z3::operator== ( probe const &  p1,
double  p2 
)
inline

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

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

◆ operator==() [8/8]

probe z3::operator== ( probe const &  p1,
probe const &  p2 
)
inline

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

3272  {
3273  check_context(p1, p2); Z3_probe r = Z3_probe_eq(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3274  }
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 z3::operator> ( double  p1,
probe const &  p2 
)
inline

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

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

◆ operator>() [2/6]

expr z3::operator> ( expr const &  a,
expr const &  b 
)
inline

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

1914  {
1915  check_context(a, b);
1916  Z3_ast r = 0;
1917  if (a.is_arith() && b.is_arith()) {
1918  r = Z3_mk_gt(a.ctx(), a, b);
1919  }
1920  else if (a.is_bv() && b.is_bv()) {
1921  r = Z3_mk_bvsgt(a.ctx(), a, b);
1922  }
1923  else if (a.is_fpa() && b.is_fpa()) {
1924  r = Z3_mk_fpa_gt(a.ctx(), a, b);
1925  }
1926  else {
1927  // operator is not supported by given arguments.
1928  assert(false);
1929  }
1930  a.check_error();
1931  return expr(a.ctx(), r);
1932  }
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 z3::operator> ( expr const &  a,
int  b 
)
inline

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

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

◆ operator>() [4/6]

expr z3::operator> ( int  a,
expr const &  b 
)
inline

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

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

◆ operator>() [5/6]

probe z3::operator> ( probe const &  p1,
double  p2 
)
inline

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

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

◆ operator>() [6/6]

probe z3::operator> ( probe const &  p1,
probe const &  p2 
)
inline

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

3267  {
3268  check_context(p1, p2); Z3_probe r = Z3_probe_gt(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3269  }
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 z3::operator>= ( double  p1,
probe const &  p2 
)
inline

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

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

◆ operator>=() [2/6]

expr z3::operator>= ( expr const &  a,
expr const &  b 
)
inline

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

1783  {
1784  check_context(a, b);
1785  Z3_ast r = 0;
1786  if (a.is_arith() && b.is_arith()) {
1787  r = Z3_mk_ge(a.ctx(), a, b);
1788  }
1789  else if (a.is_bv() && b.is_bv()) {
1790  r = Z3_mk_bvsge(a.ctx(), a, b);
1791  }
1792  else if (a.is_fpa() && b.is_fpa()) {
1793  r = Z3_mk_fpa_geq(a.ctx(), a, b);
1794  }
1795  else {
1796  // operator is not supported by given arguments.
1797  assert(false);
1798  }
1799  a.check_error();
1800  return expr(a.ctx(), r);
1801  }
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 z3::operator>= ( expr const &  a,
int  b 
)
inline

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

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

◆ operator>=() [4/6]

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

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

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

◆ operator>=() [5/6]

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

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

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

◆ operator>=() [6/6]

probe z3::operator>= ( probe const &  p1,
probe const &  p2 
)
inline

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

3257  {
3258  check_context(p1, p2); Z3_probe r = Z3_probe_ge(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3259  }
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 z3::operator^ ( expr const &  a,
expr const &  b 
)
inline

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

1940 { 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 z3::operator^ ( expr const &  a,
int  b 
)
inline

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

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

◆ operator^() [3/3]

expr z3::operator^ ( int  a,
expr const &  b 
)
inline

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

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

◆ operator|() [1/4]

expr z3::operator| ( expr const &  a,
expr const &  b 
)
inline

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

1944 { 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 z3::operator| ( expr const &  a,
int  b 
)
inline

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

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

◆ operator|() [3/4]

expr z3::operator| ( int  a,
expr const &  b 
)
inline

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

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

◆ operator|() [4/4]

tactic z3::operator| ( tactic const &  t1,
tactic const &  t2 
)
inline

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

3130  {
3131  check_context(t1, t2);
3132  Z3_tactic r = Z3_tactic_or_else(t1.ctx(), t1, t2);
3133  t1.check_error();
3134  return tactic(t1.ctx(), r);
3135  }
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 z3::operator|| ( bool  a,
expr const &  b 
)
inline
Precondition
b.is_bool()

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

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

◆ operator||() [2/4]

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

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

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

◆ operator||() [3/4]

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

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

1693  {
1694  check_context(a, b);
1695  assert(a.is_bool() && b.is_bool());
1696  Z3_ast args[2] = { a, b };
1697  Z3_ast r = Z3_mk_or(a.ctx(), 2, args);
1698  a.check_error();
1699  return expr(a.ctx(), r);
1700  }

◆ operator||() [4/4]

probe z3::operator|| ( probe const &  p1,
probe const &  p2 
)
inline

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

3280  {
3281  check_context(p1, p2); Z3_probe r = Z3_probe_or(p1.ctx(), p1, p2); p1.check_error(); return probe(p1.ctx(), r);
3282  }
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 z3::operator~ ( expr const &  a)
inline

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

2029 { 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 z3::option ( expr const &  re)
inline

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

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

◆ par_and_then()

tactic z3::par_and_then ( tactic const &  t1,
tactic const &  t2 
)
inline

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

3162  {
3163  check_context(t1, t2);
3164  Z3_tactic r = Z3_tactic_par_and_then(t1.ctx(), t1, t2);
3165  t1.check_error();
3166  return tactic(t1.ctx(), r);
3167  }
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 z3::par_or ( unsigned  n,
tactic const *  tactics 
)
inline

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

3153  {
3154  if (n == 0) {
3155  Z3_THROW(exception("a non-zero number of tactics need to be passed to par_or"));
3156  }
3157  array<Z3_tactic> buffer(n);
3158  for (unsigned i = 0; i < n; ++i) buffer[i] = tactics[i];
3159  return tactic(tactics[0u].ctx(), Z3_tactic_par_or(tactics[0u].ctx(), n, buffer.ptr()));
3160  }
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.
def tactics(ctx=None)
Definition: z3py.py:8582
#define Z3_THROW(x)
Definition: z3++.h:103

◆ partial_order()

func_decl z3::partial_order ( sort const &  a,
unsigned  index 
)
inline

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

2273  {
2274  return to_func_decl(a.ctx(), Z3_mk_partial_order(a.ctx(), a, index));
2275  }
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 z3::pbeq ( expr_vector const &  es,
int const *  coeffs,
int  bound 
)
inline

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

2414  {
2415  assert(es.size() > 0);
2416  context& ctx = es[0u].ctx();
2417  array<Z3_ast> _es(es);
2418  Z3_ast r = Z3_mk_pbeq(ctx, _es.size(), _es.ptr(), coeffs, bound);
2419  ctx.check_error();
2420  return expr(ctx, r);
2421  }
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 z3::pbge ( expr_vector const &  es,
int const *  coeffs,
int  bound 
)
inline

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

2406  {
2407  assert(es.size() > 0);
2408  context& ctx = es[0u].ctx();
2409  array<Z3_ast> _es(es);
2410  Z3_ast r = Z3_mk_pbge(ctx, _es.size(), _es.ptr(), coeffs, bound);
2411  ctx.check_error();
2412  return expr(ctx, r);
2413  }
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 z3::pble ( expr_vector const &  es,
int const *  coeffs,
int  bound 
)
inline

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

2398  {
2399  assert(es.size() > 0);
2400  context& ctx = es[0u].ctx();
2401  array<Z3_ast> _es(es);
2402  Z3_ast r = Z3_mk_pble(ctx, _es.size(), _es.ptr(), coeffs, bound);
2403  ctx.check_error();
2404  return expr(ctx, r);
2405  }
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 z3::piecewise_linear_order ( sort const &  a,
unsigned  index 
)
inline

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

2276  {
2277  return to_func_decl(a.ctx(), Z3_mk_piecewise_linear_order(a.ctx(), a, index));
2278  }
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 z3::plus ( expr const &  re)
inline

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

4099  {
4100  MK_EXPR1(Z3_mk_re_plus, re);
4101  }
Z3_ast Z3_API Z3_mk_re_plus(Z3_context c, Z3_ast re)
Create the regular language re+.

◆ prefixof()

expr z3::prefixof ( expr const &  a,
expr const &  b 
)
inline

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

4075  {
4076  check_context(a, b);
4077  Z3_ast r = Z3_mk_seq_prefix(a.ctx(), a, b);
4078  a.check_error();
4079  return expr(a.ctx(), r);
4080  }
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 z3::pw ( expr const &  a,
expr const &  b 
)
inline

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

1637 { _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 z3::pw ( expr const &  a,
int  b 
)
inline

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

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

◆ pw() [3/3]

expr z3::pw ( int  a,
expr const &  b 
)
inline

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

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

◆ range()

expr z3::range ( expr const &  lo,
expr const &  hi 
)
inline

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

4136  {
4137  check_context(lo, hi);
4138  Z3_ast r = Z3_mk_re_range(lo.ctx(), lo, hi);
4139  lo.check_error();
4140  return expr(lo.ctx(), r);
4141  }
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 AstVector::__getitem__(), z3py::AndThen(), z3py::ArraySort(), Goal::as_expr(), ApplyResult::as_expr(), FuncEntry::as_list(), FuncInterp::as_list(), NativeSolver::AssertInjective(), z3py::AtLeast(), z3py::BoolVector(), Solver::check(), Optimize::check(), ExprRef::children(), z3py::Concat(), Solver::consequences(), z3py::CreateDatatypes(), ModelRef::decls(), z3py::describe_probes(), z3py::DisjointSum(), z3py::EnumSort(), z3py::eq(), z3py::FreshFunction(), z3py::Function(), context::function(), function(), Statistics::get_key_value(), z3py::Intersect(), z3py::IntVector(), z3py::is_quantifier(), Statistics::keys(), z3py::Lambda(), Context::mkArrayConst(), Context::MkArrayConst(), Context::mkArraySort(), Context::MkArraySort(), NativeContext::MkArraySort(), NativeContext::MkConst(), Context::mkConst(), Context::MkConst(), NativeContext::MkConstDecl(), Context::mkConstDecl(), Context::MkConstDecl(), Context::mkFreshConst(), Context::MkFreshConst(), Context::mkFreshConstDecl(), Context::MkFreshConstDecl(), Context::mkFreshFuncDecl(), Context::MkFreshFuncDecl(), NativeContext::MkFreshFuncDecl(), NativeContext::MkFuncDecl(), Context::mkFuncDecl(), Context::MkFuncDecl(), Context::mkPropagateFunction(), Context::MkRecFuncDecl(), Context::mkRecFuncDecl(), Context::MkUserPropagatorFuncDecl(), z3py::on_clause_eh(), z3py::OrElse(), z3py::ParOr(), z3py::probes(), z3py::PropagateFunction(), z3py::RealVarVector(), z3py::RealVector(), z3py::RecAddDefinition(), context::recfun(), recfun(), z3py::RecFunction(), z3py::set_default_fp_sort(), Fixedpoint::set_predicate_representation(), ModelRef::sorts(), z3py::substitute(), z3py::substitute_funs(), z3py::substitute_vars(), z3py::tactics(), Solver::to_smt2(), z3py::TupleSort(), z3py::Union(), z3py::Update(), ModelRef::update_value(), and context::user_propagate_function().

◆ re_complement()

expr z3::re_complement ( expr const &  a)
inline

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

4133  {
4135  }
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 z3::re_diff ( expr const &  a,
expr const &  b 
)
inline

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

4126  {
4127  check_context(a, b);
4128  context& ctx = a.ctx();
4129  Z3_ast r = Z3_mk_re_diff(ctx, a, b);
4130  ctx.check_error();
4131  return expr(ctx, r);
4132  }
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 z3::re_empty ( sort const &  s)
inline

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

4108  {
4109  Z3_ast r = Z3_mk_re_empty(s.ctx(), s);
4110  s.check_error();
4111  return expr(s.ctx(), r);
4112  }
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 z3::re_full ( sort const &  s)
inline

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

4113  {
4114  Z3_ast r = Z3_mk_re_full(s.ctx(), s);
4115  s.check_error();
4116  return expr(s.ctx(), r);
4117  }
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 z3::re_intersect ( expr_vector const &  args)
inline

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

4118  {
4119  assert(args.size() > 0);
4120  context& ctx = args[0u].ctx();
4121  array<Z3_ast> _args(args);
4122  Z3_ast r = Z3_mk_re_intersect(ctx, _args.size(), _args.ptr());
4123  ctx.check_error();
4124  return expr(ctx, r);
4125  }
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 z3::recfun ( char const *  name,
sort const &  d1,
sort const &  d2,
sort const &  range 
)
inline

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

3950  {
3951  return range.ctx().recfun(name, d1, d2, range);
3952  }
func_decl recfun(symbol const &name, unsigned arity, sort const *domain, sort const &range)
Definition: z3++.h:3705

◆ recfun() [2/4]

func_decl z3::recfun ( char const *  name,
sort const &  d1,
sort const &  range 
)
inline

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

3947  {
3948  return range.ctx().recfun(name, d1, range);
3949  }

◆ recfun() [3/4]

func_decl z3::recfun ( char const *  name,
unsigned  arity,
sort const *  domain,
sort const &  range 
)
inline

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

3944  {
3945  return range.ctx().recfun(name, arity, domain, range);
3946  }

◆ recfun() [4/4]

func_decl z3::recfun ( symbol const &  name,
unsigned  arity,
sort const *  domain,
sort const &  range 
)
inline

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

3941  {
3942  return range.ctx().recfun(name, arity, domain, range);
3943  }

◆ rem() [1/3]

expr z3::rem ( expr const &  a,
expr const &  b 
)
inline

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

1657  {
1658  if (a.is_fpa() && b.is_fpa()) {
1659  _Z3_MK_BIN_(a, b, Z3_mk_fpa_rem);
1660  } else {
1661  _Z3_MK_BIN_(a, b, Z3_mk_rem);
1662  }
1663  }
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 z3::rem ( expr const &  a,
int  b 
)
inline

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

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

◆ rem() [3/3]

expr z3::rem ( int  a,
expr const &  b 
)
inline

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

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

◆ repeat()

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

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

3137  {
3138  Z3_tactic r = Z3_tactic_repeat(t.ctx(), t, max);
3139  t.check_error();
3140  return tactic(t.ctx(), r);
3141  }
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...
expr max(expr const &a, expr const &b)
Definition: z3++.h:1967

◆ reset_params()

void z3::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 z3::round_fpa_to_closest_integer ( expr const &  t)
inline

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

2082  {
2083  assert(t.is_fpa());
2084  Z3_ast r = Z3_mk_fpa_round_to_integral(t.ctx(), t.ctx().fpa_rounding_mode(), t);
2085  t.check_error();
2086  return expr(t.ctx(), r);
2087  }
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 z3::sbv_to_fpa ( expr const &  t,
sort  s 
)
inline

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

2061  {
2062  assert(t.is_bv());
2063  Z3_ast r = Z3_mk_fpa_to_fp_signed(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2064  t.check_error();
2065  return expr(t.ctx(), r);
2066  }
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.

◆ select() [1/3]

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

forward declarations

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

3954  {
3955  check_context(a, i);
3956  Z3_ast r = Z3_mk_select(a.ctx(), a, i);
3957  a.check_error();
3958  return expr(a.ctx(), r);
3959  }
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[](), and select().

◆ select() [2/3]

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

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

3963  {
3964  check_context(a, i);
3965  array<Z3_ast> idxs(i);
3966  Z3_ast r = Z3_mk_select_n(a.ctx(), a, idxs.size(), idxs.ptr());
3967  a.check_error();
3968  return expr(a.ctx(), r);
3969  }
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 z3::select ( expr const &  a,
int  i 
)
inline

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

3960  {
3961  return select(a, a.ctx().num_val(i, a.get_sort().array_domain()));
3962  }
expr select(expr const &a, int i)
Definition: z3++.h:3960

◆ set_add()

expr z3::set_add ( expr const &  s,
expr const &  e 
)
inline

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

4020  {
4021  MK_EXPR2(Z3_mk_set_add, s, e);
4022  }
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 z3::set_complement ( expr const &  a)
inline

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

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

◆ set_del()

expr z3::set_del ( expr const &  s,
expr const &  e 
)
inline

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

4024  {
4025  MK_EXPR2(Z3_mk_set_del, s, e);
4026  }
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 z3::set_difference ( expr const &  a,
expr const &  b 
)
inline

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

4044  {
4046  }
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 z3::set_intersect ( expr const &  a,
expr const &  b 
)
inline

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

4036  {
4037  check_context(a, b);
4038  Z3_ast es[2] = { a, b };
4039  Z3_ast r = Z3_mk_set_intersect(a.ctx(), 2, es);
4040  a.check_error();
4041  return expr(a.ctx(), r);
4042  }
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 z3::set_member ( expr const &  s,
expr const &  e 
)
inline

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

4052  {
4053  MK_EXPR2(Z3_mk_set_member, s, e);
4054  }
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 z3::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 z3::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 z3::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 z3::set_subset ( expr const &  a,
expr const &  b 
)
inline

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

4056  {
4057  MK_EXPR2(Z3_mk_set_subset, a, b);
4058  }
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 z3::set_union ( expr const &  a,
expr const &  b 
)
inline

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

4028  {
4029  check_context(a, b);
4030  Z3_ast es[2] = { a, b };
4031  Z3_ast r = Z3_mk_set_union(a.ctx(), 2, es);
4032  a.check_error();
4033  return expr(a.ctx(), r);
4034  }
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 z3::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 2268 of file z3++.h.

2268 { 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 z3::sge ( expr const &  a,
expr const &  b 
)
inline

signed greater than or equal to operator for bitvectors.

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

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

Referenced by sge().

◆ sge() [2/3]

expr z3::sge ( expr const &  a,
int  b 
)
inline

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

2142 { return sge(a, a.ctx().num_val(b, a.get_sort())); }
expr sge(int a, expr const &b)
Definition: z3++.h:2143

◆ sge() [3/3]

expr z3::sge ( int  a,
expr const &  b 
)
inline

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

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

◆ sgt() [1/3]

expr z3::sgt ( expr const &  a,
expr const &  b 
)
inline

signed greater than operator for bitvectors.

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

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

Referenced by sgt().

◆ sgt() [2/3]

expr z3::sgt ( expr const &  a,
int  b 
)
inline

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

2148 { return sgt(a, a.ctx().num_val(b, a.get_sort())); }
expr sgt(int a, expr const &b)
Definition: z3++.h:2149

◆ sgt() [3/3]

expr z3::sgt ( int  a,
expr const &  b 
)
inline

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

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

◆ shl() [1/3]

expr z3::shl ( expr const &  a,
expr const &  b 
)
inline

shift left operator for bitvectors

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

2207 { 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().

◆ shl() [2/3]

expr z3::shl ( expr const &  a,
int  b 
)
inline

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

2208 { return shl(a, a.ctx().num_val(b, a.get_sort())); }
expr shl(int a, expr const &b)
Definition: z3++.h:2209

◆ shl() [3/3]

expr z3::shl ( int  a,
expr const &  b 
)
inline

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

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

◆ sle() [1/3]

expr z3::sle ( expr const &  a,
expr const &  b 
)
inline

signed less than or equal to operator for bitvectors.

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

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

Referenced by sle().

◆ sle() [2/3]

expr z3::sle ( expr const &  a,
int  b 
)
inline

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

2130 { return sle(a, a.ctx().num_val(b, a.get_sort())); }
expr sle(int a, expr const &b)
Definition: z3++.h:2131

◆ sle() [3/3]

expr z3::sle ( int  a,
expr const &  b 
)
inline

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

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

◆ slt() [1/3]

expr z3::slt ( expr const &  a,
expr const &  b 
)
inline

signed less than operator for bitvectors.

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

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

Referenced by slt().

◆ slt() [2/3]

expr z3::slt ( expr const &  a,
int  b 
)
inline

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

2136 { return slt(a, a.ctx().num_val(b, a.get_sort())); }
expr slt(int a, expr const &b)
Definition: z3++.h:2137

◆ slt() [3/3]

expr z3::slt ( int  a,
expr const &  b 
)
inline

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

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

◆ smod() [1/3]

expr z3::smod ( expr const &  a,
expr const &  b 
)
inline

signed modulus operator for bitvectors

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

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

Referenced by smod().

◆ smod() [2/3]

expr z3::smod ( expr const &  a,
int  b 
)
inline

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

2194 { return smod(a, a.ctx().num_val(b, a.get_sort())); }
expr smod(int a, expr const &b)
Definition: z3++.h:2195

◆ smod() [3/3]

expr z3::smod ( int  a,
expr const &  b 
)
inline

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

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

◆ sqrt()

expr z3::sqrt ( expr const &  a,
expr const &  rm 
)
inline

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

2015  {
2016  check_context(a, rm);
2017  assert(a.is_fpa());
2018  Z3_ast r = Z3_mk_fpa_sqrt(a.ctx(), rm, a);
2019  a.check_error();
2020  return expr(a.ctx(), r);
2021  }
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 z3::srem ( expr const &  a,
expr const &  b 
)
inline

signed remainder operator for bitvectors

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

2186 { 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().

◆ srem() [2/3]

expr z3::srem ( expr const &  a,
int  b 
)
inline

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

2187 { return srem(a, a.ctx().num_val(b, a.get_sort())); }
expr srem(int a, expr const &b)
Definition: z3++.h:2188

◆ srem() [3/3]

expr z3::srem ( int  a,
expr const &  b 
)
inline

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

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

◆ star()

expr z3::star ( expr const &  re)
inline

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

4105  {
4106  MK_EXPR1(Z3_mk_re_star, re);
4107  }
Z3_ast Z3_API Z3_mk_re_star(Z3_context c, Z3_ast re)
Create the regular language re*.

◆ store() [1/5]

expr z3::store ( expr const &  a,
expr const &  i,
expr const &  v 
)
inline

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

3971  {
3972  check_context(a, i); check_context(a, v);
3973  Z3_ast r = Z3_mk_store(a.ctx(), a, i, v);
3974  a.check_error();
3975  return expr(a.ctx(), r);
3976  }
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() [2/5]

expr z3::store ( expr const &  a,
expr  i,
int  v 
)
inline

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

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

◆ store() [3/5]

expr z3::store ( expr const &  a,
expr_vector const &  i,
expr const &  v 
)
inline

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

3983  {
3984  check_context(a, i); check_context(a, v);
3985  array<Z3_ast> idxs(i);
3986  Z3_ast r = Z3_mk_store_n(a.ctx(), a, idxs.size(), idxs.ptr(), v);
3987  a.check_error();
3988  return expr(a.ctx(), r);
3989  }
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 z3::store ( expr const &  a,
int  i,
expr const &  v 
)
inline

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

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

◆ store() [5/5]

expr z3::store ( expr const &  a,
int  i,
int  v 
)
inline

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

3980  {
3981  return store(a, a.ctx().num_val(i, a.get_sort().array_domain()), a.ctx().num_val(v, a.get_sort().array_range()));
3982  }

◆ suffixof()

expr z3::suffixof ( expr const &  a,
expr const &  b 
)
inline

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

4069  {
4070  check_context(a, b);
4071  Z3_ast r = Z3_mk_seq_suffix(a.ctx(), a, b);
4072  a.check_error();
4073  return expr(a.ctx(), r);
4074  }
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 z3::sum ( expr_vector const &  args)
inline

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

2438  {
2439  assert(args.size() > 0);
2440  context& ctx = args[0u].ctx();
2441  array<Z3_ast> _args(args);
2442  Z3_ast r = Z3_mk_add(ctx, _args.size(), _args.ptr());
2443  ctx.check_error();
2444  return expr(ctx, r);
2445  }

◆ to_check_result()

check_result z3::to_check_result ( Z3_lbool  l)
inline

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

147  {
148  if (l == Z3_L_TRUE) return sat;
149  else if (l == Z3_L_FALSE) return unsat;
150  return unknown;
151  }
@ Z3_L_TRUE
Definition: z3_api.h:64
@ Z3_L_FALSE
Definition: z3_api.h:62

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

◆ to_expr()

expr z3::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 2107 of file z3++.h.

2107  {
2108  c.check_error();
2109  assert(Z3_get_ast_kind(c, a) == Z3_APP_AST ||
2110  Z3_get_ast_kind(c, a) == Z3_NUMERAL_AST ||
2111  Z3_get_ast_kind(c, a) == Z3_VAR_AST ||
2113  return expr(c, a);
2114  }
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:143
@ Z3_VAR_AST
Definition: z3_api.h:144
@ Z3_NUMERAL_AST
Definition: z3_api.h:142
@ Z3_QUANTIFIER_AST
Definition: z3_api.h:145

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

◆ to_func_decl()

func_decl z3::to_func_decl ( context c,
Z3_func_decl  f 
)
inline

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

2121  {
2122  c.check_error();
2123  return func_decl(c, f);
2124  }

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

◆ to_re()

expr z3::to_re ( expr const &  s)
inline

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

4093  {
4095  }
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 z3::to_real ( expr const &  a)
inline

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

3911 { 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 z3::to_sort ( context c,
Z3_sort  s 
)
inline

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

2116  {
2117  c.check_error();
2118  return sort(c, s);
2119  }

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

◆ tree_order()

func_decl z3::tree_order ( sort const &  a,
unsigned  index 
)
inline

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

2279  {
2280  return to_func_decl(a.ctx(), Z3_mk_tree_order(a.ctx(), a, index));
2281  }
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 z3::try_for ( tactic const &  t,
unsigned  ms 
)
inline

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

3148  {
3149  Z3_tactic r = Z3_tactic_try_for(t.ctx(), t, ms);
3150  t.check_error();
3151  return tactic(t.ctx(), r);
3152  }
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 z3::ubv_to_fpa ( expr const &  t,
sort  s 
)
inline

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

2068  {
2069  assert(t.is_bv());
2070  Z3_ast r = Z3_mk_fpa_to_fp_unsigned(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2071  t.check_error();
2072  return expr(t.ctx(), r);
2073  }
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 z3::udiv ( expr const &  a,
expr const &  b 
)
inline

unsigned division operator for bitvectors.

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

2179 { 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().

◆ udiv() [2/3]

expr z3::udiv ( expr const &  a,
int  b 
)
inline

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

2180 { return udiv(a, a.ctx().num_val(b, a.get_sort())); }
expr udiv(int a, expr const &b)
Definition: z3++.h:2181

◆ udiv() [3/3]

expr z3::udiv ( int  a,
expr const &  b 
)
inline

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

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

◆ uge() [1/3]

expr z3::uge ( expr const &  a,
expr const &  b 
)
inline

unsigned greater than or equal to operator for bitvectors.

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

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

Referenced by uge().

◆ uge() [2/3]

expr z3::uge ( expr const &  a,
int  b 
)
inline

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

2168 { return uge(a, a.ctx().num_val(b, a.get_sort())); }
expr uge(int a, expr const &b)
Definition: z3++.h:2169

◆ uge() [3/3]

expr z3::uge ( int  a,
expr const &  b 
)
inline

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

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

◆ ugt() [1/3]

expr z3::ugt ( expr const &  a,
expr const &  b 
)
inline

unsigned greater than operator for bitvectors.

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

2173 { 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().

◆ ugt() [2/3]

expr z3::ugt ( expr const &  a,
int  b 
)
inline

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

2174 { return ugt(a, a.ctx().num_val(b, a.get_sort())); }
expr ugt(int a, expr const &b)
Definition: z3++.h:2175

◆ ugt() [3/3]

expr z3::ugt ( int  a,
expr const &  b 
)
inline

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

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

◆ ule() [1/3]

expr z3::ule ( expr const &  a,
expr const &  b 
)
inline

unsigned less than or equal to operator for bitvectors.

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

2155 { 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().

◆ ule() [2/3]

expr z3::ule ( expr const &  a,
int  b 
)
inline

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

2156 { return ule(a, a.ctx().num_val(b, a.get_sort())); }
expr ule(int a, expr const &b)
Definition: z3++.h:2157

◆ ule() [3/3]

expr z3::ule ( int  a,
expr const &  b 
)
inline

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

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

◆ ult() [1/3]

expr z3::ult ( expr const &  a,
expr const &  b 
)
inline

unsigned less than operator for bitvectors.

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

2161 { 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().

◆ ult() [2/3]

expr z3::ult ( expr const &  a,
int  b 
)
inline

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

2162 { return ult(a, a.ctx().num_val(b, a.get_sort())); }
expr ult(int a, expr const &b)
Definition: z3++.h:2163

◆ ult() [3/3]

expr z3::ult ( int  a,
expr const &  b 
)
inline

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

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

◆ urem() [1/3]

expr z3::urem ( expr const &  a,
expr const &  b 
)
inline

unsigned reminder operator for bitvectors

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

2200 { 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().

◆ urem() [2/3]

expr z3::urem ( expr const &  a,
int  b 
)
inline

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

2201 { return urem(a, a.ctx().num_val(b, a.get_sort())); }
expr urem(int a, expr const &b)
Definition: z3++.h:2202

◆ urem() [3/3]

expr z3::urem ( int  a,
expr const &  b 
)
inline

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

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

◆ when()

tactic z3::when ( probe const &  p,
tactic const &  t 
)
inline

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

3465  {
3466  check_context(p, t);
3467  Z3_tactic r = Z3_tactic_when(t.ctx(), p, t);
3468  t.check_error();
3469  return tactic(t.ctx(), r);
3470  }
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 z3::with ( simplifier const &  t,
params const &  p 
)
inline

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

3204  {
3205  Z3_simplifier r = Z3_simplifier_using_params(t.ctx(), t, p);
3206  t.check_error();
3207  return simplifier(t.ctx(), r);
3208  }
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 z3::with ( tactic const &  t,
params const &  p 
)
inline

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

3143  {
3144  Z3_tactic r = Z3_tactic_using_params(t.ctx(), t, p);
3145  t.check_error();
3146  return tactic(t.ctx(), r);
3147  }
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 z3::xnor ( expr const &  a,
expr const &  b 
)
inline

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

1950 { 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 z3::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 2228 of file z3++.h.

2228 { 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,...