Z3
Public Member Functions | Friends
expr Class Reference

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

+ Inheritance diagram for expr:

Public Member Functions

 expr (context &c)
 
 expr (context &c, Z3_ast n)
 
 expr (expr const &n)
 
exproperator= (expr const &n)
 
sort get_sort () const
 Return the sort of this expression. More...
 
bool is_bool () const
 Return true if this is a Boolean expression. More...
 
bool is_int () const
 Return true if this is an integer expression. More...
 
bool is_real () const
 Return true if this is a real expression. More...
 
bool is_arith () const
 Return true if this is an integer or real expression. More...
 
bool is_bv () const
 Return true if this is a Bit-vector expression. More...
 
bool is_array () const
 Return true if this is a Array expression. More...
 
bool is_datatype () const
 Return true if this is a Datatype expression. More...
 
bool is_relation () const
 Return true if this is a Relation expression. More...
 
bool is_seq () const
 Return true if this is a sequence expression. More...
 
bool is_re () const
 Return true if this is a regular expression. More...
 
bool is_finite_domain () const
 Return true if this is a Finite-domain expression. More...
 
bool is_fpa () const
 Return true if this is a FloatingPoint expression. . More...
 
bool is_numeral () const
 Return true if this expression is a numeral. Specialized functions also return representations for the numerals as small integers, 64 bit integers or rational or decimal strings. More...
 
bool is_numeral_i64 (int64_t &i) const
 
bool is_numeral_u64 (uint64_t &i) const
 
bool is_numeral_i (int &i) const
 
bool is_numeral_u (unsigned &i) const
 
bool is_numeral (std::string &s) const
 
bool is_numeral (std::string &s, unsigned precision) const
 
bool is_numeral (double &d) const
 
bool as_binary (std::string &s) const
 
bool is_app () const
 Return true if this expression is an application. More...
 
bool is_const () const
 Return true if this expression is a constant (i.e., an application with 0 arguments). More...
 
bool is_quantifier () const
 Return true if this expression is a quantifier. More...
 
bool is_forall () const
 Return true if this expression is a universal quantifier. More...
 
bool is_exists () const
 Return true if this expression is an existential quantifier. More...
 
bool is_lambda () const
 Return true if this expression is a lambda expression. More...
 
bool is_var () const
 Return true if this expression is a variable. More...
 
bool is_algebraic () const
 Return true if expression is an algebraic number. More...
 
bool is_well_sorted () const
 Return true if this expression is well sorted (aka type correct). More...
 
std::string get_decimal_string (int precision) const
 Return string representation of numeral or algebraic number This method assumes the expression is numeral or algebraic. More...
 
expr algebraic_lower (unsigned precision) const
 
expr algebraic_upper (unsigned precision) const
 
expr_vector algebraic_poly () const
 Return coefficients for p of an algebraic number (root-obj p i) More...
 
unsigned algebraic_i () const
 Return i of an algebraic number (root-obj p i) More...
 
unsigned id () const
 retrieve unique identifier for expression. More...
 
int get_numeral_int () const
 Return int value of numeral, throw if result cannot fit in machine int. More...
 
unsigned get_numeral_uint () const
 Return uint value of numeral, throw if result cannot fit in machine uint. More...
 
int64_t get_numeral_int64 () const
 Return int64_t value of numeral, throw if result cannot fit in int64_t. More...
 
uint64_t get_numeral_uint64 () const
 Return uint64_t value of numeral, throw if result cannot fit in uint64_t. More...
 
Z3_lbool bool_value () const
 
expr numerator () const
 
expr denominator () const
 
bool is_string_value () const
 Return true if this expression is a string literal. The string can be accessed using get_string() and get_escaped_string() More...
 
std::string get_escaped_string () const
 for a string value expression return an escaped or unescaped string value. More...
 
std::string get_string () const
 
 operator Z3_app () const
 
sort fpa_rounding_mode ()
 Return a RoundingMode sort. More...
 
func_decl decl () const
 Return the declaration associated with this application. This method assumes the expression is an application. More...
 
unsigned num_args () const
 Return the number of arguments in this application. This method assumes the expression is an application. More...
 
expr arg (unsigned i) const
 Return the i-th argument of this application. This method assumes the expression is an application. More...
 
expr body () const
 Return the 'body' of this quantifier. More...
 
bool is_true () const
 
bool is_false () const
 
bool is_not () const
 
bool is_and () const
 
bool is_or () const
 
bool is_xor () const
 
bool is_implies () const
 
bool is_eq () const
 
bool is_ite () const
 
bool is_distinct () const
 
expr rotate_left (unsigned i)
 
expr rotate_right (unsigned i)
 
expr repeat (unsigned i)
 
expr extract (unsigned hi, unsigned lo) const
 
unsigned lo () const
 
unsigned hi () const
 
expr extract (expr const &offset, expr const &length) const
 sequence and regular expression operations. More...
 
expr replace (expr const &src, expr const &dst) const
 
expr unit () const
 
expr contains (expr const &s)
 
expr at (expr const &index) const
 
expr nth (expr const &index) const
 
expr length () const
 
expr stoi () const
 
expr itos () const
 
expr loop (unsigned lo)
 create a looping regular expression. More...
 
expr loop (unsigned lo, unsigned hi)
 
expr operator[] (expr const &index) const
 
expr operator[] (expr_vector const &index) const
 
expr simplify () const
 Return a simplified version of this expression. More...
 
expr simplify (params const &p) const
 Return a simplified version of this expression. The parameter p is a set of parameters for the Z3 simplifier. More...
 
expr substitute (expr_vector const &src, expr_vector const &dst)
 Apply substitution. Replace src expressions by dst. More...
 
expr substitute (expr_vector const &dst)
 Apply substitution. Replace bound variables by expressions. More...
 
- Public Member Functions inherited from ast
 ast (context &c)
 
 ast (context &c, Z3_ast n)
 
 ast (ast const &s)
 
 ~ast ()
 
 operator Z3_ast () const
 
 operator bool () const
 
astoperator= (ast const &s)
 
Z3_ast_kind kind () const
 
unsigned hash () const
 
std::string to_string () const
 
- Public Member Functions inherited from object
 object (context &c)
 
 object (object const &s)
 
contextctx () const
 
Z3_error_code check_error () const
 

Friends

expr operator! (expr const &a)
 Return an expression representing not(a). More...
 
expr operator && (expr const &a, expr const &b)
 Return an expression representing a and b. More...
 
expr operator && (expr const &a, bool b)
 Return an expression representing a and b. The C++ Boolean value b is automatically converted into a Z3 Boolean constant. More...
 
expr operator && (bool a, expr const &b)
 Return an expression representing a and b. The C++ Boolean value a is automatically converted into a Z3 Boolean constant. More...
 
expr operator|| (expr const &a, expr const &b)
 Return an expression representing a or b. More...
 
expr operator|| (expr const &a, bool b)
 Return an expression representing a or b. The C++ Boolean value b is automatically converted into a Z3 Boolean constant. More...
 
expr operator|| (bool a, expr const &b)
 Return an expression representing a or b. The C++ Boolean value a is automatically converted into a Z3 Boolean constant. More...
 
expr implies (expr const &a, expr const &b)
 
expr implies (expr const &a, bool b)
 
expr implies (bool a, expr const &b)
 
expr mk_or (expr_vector const &args)
 
expr mk_and (expr_vector const &args)
 
expr ite (expr const &c, expr const &t, expr const &e)
 Create the if-then-else expression ite(c, t, e) More...
 
expr distinct (expr_vector const &args)
 
expr concat (expr const &a, expr const &b)
 
expr concat (expr_vector const &args)
 
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 sum (expr_vector const &args)
 
expr operator* (expr const &a, expr const &b)
 
expr operator* (expr const &a, int b)
 
expr operator* (int 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 rem (expr const &a, expr const &b)
 
expr rem (expr const &a, int b)
 
expr rem (int a, expr const &b)
 
expr is_int (expr const &e)
 
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, 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 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 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 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 abs (expr const &a)
 
expr sqrt (expr const &a, expr const &rm)
 
expr operator~ (expr const &a)
 
expr fma (expr const &a, expr const &b, expr const &c, expr const &rm)
 FloatingPoint fused multiply-add. More...
 
expr range (expr const &lo, expr const &hi)
 

Additional Inherited Members

- Protected Attributes inherited from ast
Z3_ast m_ast
 
- Protected Attributes inherited from object
contextm_ctx
 

Detailed Description

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.

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

Constructor & Destructor Documentation

◆ expr() [1/3]

expr ( context c)
inline

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

748 :ast(c) {}
ast(context &c)
Definition: z3++.h:500

◆ expr() [2/3]

expr ( context c,
Z3_ast  n 
)
inline

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

749 :ast(c, reinterpret_cast<Z3_ast>(n)) {}
ast(context &c)
Definition: z3++.h:500

◆ expr() [3/3]

expr ( expr const &  n)
inline

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

750 :ast(n) {}
ast(context &c)
Definition: z3++.h:500

Member Function Documentation

◆ algebraic_i()

unsigned algebraic_i ( ) const
inline

Return i of an algebraic number (root-obj p i)

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

909  {
910  assert(is_algebraic());
911  unsigned i = Z3_algebraic_get_i(ctx(), m_ast);
912  check_error();
913  return i;
914  }
Z3_error_code check_error() const
Definition: z3++.h:419
bool is_algebraic() const
Return true if expression is an algebraic number.
Definition: z3++.h:861
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498
unsigned Z3_API Z3_algebraic_get_i(Z3_context c, Z3_ast a)
Return which root of the polynomial the algebraic number represents.

◆ algebraic_lower()

expr algebraic_lower ( unsigned  precision) const
inline

Retrieve lower and upper bounds for algebraic numerals based on a decimal precision

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

882  {
883  assert(is_algebraic());
884  Z3_ast r = Z3_get_algebraic_number_lower(ctx(), m_ast, precision);
885  check_error();
886  return expr(ctx(), r);
887  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
bool is_algebraic() const
Return true if expression is an algebraic number.
Definition: z3++.h:861
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498
Z3_ast Z3_API Z3_get_algebraic_number_lower(Z3_context c, Z3_ast a, unsigned precision)
Return a lower bound for the given real algebraic number. The interval isolating the number is smalle...

◆ algebraic_poly()

expr_vector algebraic_poly ( ) const
inline

Return coefficients for p of an algebraic number (root-obj p i)

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

899  {
900  assert(is_algebraic());
901  Z3_ast_vector r = Z3_algebraic_get_poly(ctx(), m_ast);
902  check_error();
903  return expr_vector(ctx(), r);
904  }
Z3_error_code check_error() const
Definition: z3++.h:419
bool is_algebraic() const
Return true if expression is an algebraic number.
Definition: z3++.h:861
context & ctx() const
Definition: z3++.h:418
Z3_ast_vector Z3_API Z3_algebraic_get_poly(Z3_context c, Z3_ast a)
Return the coefficients of the defining polynomial.
Z3_ast m_ast
Definition: z3++.h:498
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:72

◆ algebraic_upper()

expr algebraic_upper ( unsigned  precision) const
inline

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

889  {
890  assert(is_algebraic());
891  Z3_ast r = Z3_get_algebraic_number_upper(ctx(), m_ast, precision);
892  check_error();
893  return expr(ctx(), r);
894  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
bool is_algebraic() const
Return true if expression is an algebraic number.
Definition: z3++.h:861
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_get_algebraic_number_upper(Z3_context c, Z3_ast a, unsigned precision)
Return a upper bound for the given real algebraic number. The interval isolating the number is smalle...
Z3_ast m_ast
Definition: z3++.h:498

◆ arg()

expr arg ( unsigned  i) const
inline

Return the i-th argument of this application. This method assumes the expression is an application.

Precondition
is_app()
i < num_args()

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

1075 { Z3_ast r = Z3_get_app_arg(ctx(), *this, i); check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_get_app_arg(Z3_context c, Z3_app a, unsigned i)
Return the i-th argument of the given application.
context & ctx() const
Definition: z3++.h:418

◆ as_binary()

bool as_binary ( std::string &  s) const
inline

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

826 { if (!is_numeral()) return false; s = Z3_get_numeral_binary_string(ctx(), m_ast); check_error(); return true; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
Z3_string Z3_API Z3_get_numeral_binary_string(Z3_context c, Z3_ast a)
Return numeral value, as a binary string of a numeric constant term.
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ at()

expr at ( expr const &  index) const
inline

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

1301  {
1302  check_context(*this, index);
1303  Z3_ast r = Z3_mk_seq_at(ctx(), *this, index);
1304  check_error();
1305  return expr(ctx(), r);
1306  }
Z3_error_code check_error() const
Definition: z3++.h:419
Z3_ast Z3_API Z3_mk_seq_at(Z3_context c, Z3_ast s, Z3_ast index)
Retrieve from s the unit sequence positioned at position index. The sequence is empty if the index is...
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ body()

expr body ( ) const
inline

Return the 'body' of this quantifier.

Precondition
is_quantifier()

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

1082 { assert(is_quantifier()); Z3_ast r = Z3_get_quantifier_body(ctx(), *this); check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_get_quantifier_body(Z3_context c, Z3_ast a)
Return body of quantifier.
bool is_quantifier() const
Return true if this expression is a quantifier.
Definition: z3++.h:839

◆ bool_value()

Z3_lbool bool_value ( ) const
inline

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

995  {
996  return Z3_get_bool_value(ctx(), m_ast);
997  }
context & ctx() const
Definition: z3++.h:418
Z3_lbool Z3_API Z3_get_bool_value(Z3_context c, Z3_ast a)
Return Z3_L_TRUE if a is true, Z3_L_FALSE if it is false, and Z3_L_UNDEF otherwise.
Z3_ast m_ast
Definition: z3++.h:498

◆ contains()

expr contains ( expr const &  s)
inline

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

1295  {
1296  check_context(*this, s);
1297  Z3_ast r = Z3_mk_seq_contains(ctx(), *this, s);
1298  check_error();
1299  return expr(ctx(), r);
1300  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_seq_contains(Z3_context c, Z3_ast container, Z3_ast containee)
Check if container contains containee.

◆ decl()

func_decl decl ( ) const
inline

Return the declaration associated with this application. This method assumes the expression is an application.

Precondition
is_app()

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

1060 { Z3_func_decl f = Z3_get_app_decl(ctx(), *this); check_error(); return func_decl(ctx(), f); }
Z3_error_code check_error() const
Definition: z3++.h:419
Z3_func_decl Z3_API Z3_get_app_decl(Z3_context c, Z3_app a)
Return the declaration of a constant or function application.
context & ctx() const
Definition: z3++.h:418

◆ denominator()

expr denominator ( ) const
inline

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

1007  {
1008  assert(is_numeral());
1009  Z3_ast r = Z3_get_denominator(ctx(), m_ast);
1010  check_error();
1011  return expr(ctx(),r);
1012  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818
Z3_ast Z3_API Z3_get_denominator(Z3_context c, Z3_ast a)
Return the denominator (as a numeral AST) of a numeral AST of sort Real.

◆ extract() [1/2]

expr extract ( unsigned  hi,
unsigned  lo 
) const
inline

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

1266 { Z3_ast r = Z3_mk_extract(ctx(), hi, lo, *this); ctx().check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition: z3++.h:187
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
unsigned lo() const
Definition: z3++.h:1267
unsigned hi() const
Definition: z3++.h:1268
Z3_ast Z3_API Z3_mk_extract(Z3_context c, unsigned high, unsigned low, Z3_ast t1)
Extract the bits high down to low from a bit-vector of size m to yield a new bit-vector of size n...

◆ extract() [2/2]

expr extract ( expr const &  offset,
expr const &  length 
) const
inline

sequence and regular expression operations.

  • is overloaded as sequence concatenation and regular expression union. concat is overloaded to handle sequences and regular expressions

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

1280  {
1281  check_context(*this, offset); check_context(offset, length);
1282  Z3_ast r = Z3_mk_seq_extract(ctx(), *this, offset, length); check_error(); return expr(ctx(), r);
1283  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
expr length() const
Definition: z3++.h:1313
context & ctx() const
Definition: z3++.h:418
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_seq_extract(Z3_context c, Z3_ast s, Z3_ast offset, Z3_ast length)
Extract subsequence starting at offset of length.

◆ fpa_rounding_mode()

sort fpa_rounding_mode ( )
inline

Return a RoundingMode sort.

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

1046  {
1047  assert(is_fpa());
1048  Z3_sort s = ctx().fpa_rounding_mode();
1049  check_error();
1050  return sort(ctx(), s);
1051  }
Z3_error_code check_error() const
Definition: z3++.h:419
sort fpa_rounding_mode()
Return a RoundingMode sort.
Definition: z3++.h:3016
context & ctx() const
Definition: z3++.h:418
bool is_fpa() const
Return true if this is a FloatingPoint expression. .
Definition: z3++.h:811

◆ get_decimal_string()

std::string get_decimal_string ( int  precision) const
inline

Return string representation of numeral or algebraic number This method assumes the expression is numeral or algebraic.

Precondition
is_numeral() || is_algebraic()

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

874  {
875  assert(is_numeral() || is_algebraic());
876  return std::string(Z3_get_numeral_decimal_string(ctx(), m_ast, precision));
877  }
bool is_algebraic() const
Return true if expression is an algebraic number.
Definition: z3++.h:861
context & ctx() const
Definition: z3++.h:418
Z3_string Z3_API Z3_get_numeral_decimal_string(Z3_context c, Z3_ast a, unsigned precision)
Return numeral as a string in decimal notation. The result has at most precision decimal places...
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ get_escaped_string()

std::string get_escaped_string ( ) const
inline

for a string value expression return an escaped or unescaped string value.

Precondition
expression is for a string value.

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

1026  {
1027  assert(is_string_value());
1028  char const* s = Z3_get_string(ctx(), m_ast);
1029  check_error();
1030  return std::string(s);
1031  }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
Z3_string Z3_API Z3_get_string(Z3_context c, Z3_ast s)
Retrieve the string constant stored in s.
bool is_string_value() const
Return true if this expression is a string literal. The string can be accessed using get_string() and...
Definition: z3++.h:1019
Z3_ast m_ast
Definition: z3++.h:498

◆ get_numeral_int()

int get_numeral_int ( ) const
inline

Return int value of numeral, throw if result cannot fit in machine int.

It only makes sense to use this function if the caller can ensure that the result is an integer or if exceptions are enabled. If exceptions are disabled, then use the is_numeral_i function.

Precondition
is_numeral()

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

931  {
932  int result = 0;
933  if (!is_numeral_i(result)) {
934  assert(ctx().enable_exceptions());
935  if (!ctx().enable_exceptions()) return 0;
936  Z3_THROW(exception("numeral does not fit in machine int"));
937  }
938  return result;
939  }
#define Z3_THROW(x)
Definition: z3++.h:99
context & ctx() const
Definition: z3++.h:418
bool is_numeral_i(int &i) const
Definition: z3++.h:821

◆ get_numeral_int64()

int64_t get_numeral_int64 ( ) const
inline

Return int64_t value of numeral, throw if result cannot fit in int64_t.

Precondition
is_numeral()

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

967  {
968  assert(is_numeral());
969  int64_t result = 0;
970  if (!is_numeral_i64(result)) {
971  assert(ctx().enable_exceptions());
972  if (!ctx().enable_exceptions()) return 0;
973  Z3_THROW(exception("numeral does not fit in machine int64_t"));
974  }
975  return result;
976  }
#define Z3_THROW(x)
Definition: z3++.h:99
bool is_numeral_i64(int64_t &i) const
Definition: z3++.h:819
context & ctx() const
Definition: z3++.h:418
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ get_numeral_uint()

unsigned get_numeral_uint ( ) const
inline

Return uint value of numeral, throw if result cannot fit in machine uint.

It only makes sense to use this function if the caller can ensure that the result is an integer or if exceptions are enabled. If exceptions are disabled, then use the is_numeral_u function.

Precondition
is_numeral()

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

950  {
951  assert(is_numeral());
952  unsigned result = 0;
953  if (!is_numeral_u(result)) {
954  assert(ctx().enable_exceptions());
955  if (!ctx().enable_exceptions()) return 0;
956  Z3_THROW(exception("numeral does not fit in machine uint"));
957  }
958  return result;
959  }
#define Z3_THROW(x)
Definition: z3++.h:99
context & ctx() const
Definition: z3++.h:418
bool is_numeral_u(unsigned &i) const
Definition: z3++.h:822
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ get_numeral_uint64()

uint64_t get_numeral_uint64 ( ) const
inline

Return uint64_t value of numeral, throw if result cannot fit in uint64_t.

Precondition
is_numeral()

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

984  {
985  assert(is_numeral());
986  uint64_t result = 0;
987  if (!is_numeral_u64(result)) {
988  assert(ctx().enable_exceptions());
989  if (!ctx().enable_exceptions()) return 0;
990  Z3_THROW(exception("numeral does not fit in machine uint64_t"));
991  }
992  return result;
993  }
#define Z3_THROW(x)
Definition: z3++.h:99
context & ctx() const
Definition: z3++.h:418
bool is_numeral_u64(uint64_t &i) const
Definition: z3++.h:820
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ get_sort()

sort get_sort ( ) const
inline

Return the sort of this expression.

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

Referenced by z3::ashr(), z3::concat(), z3::lshr(), z3::mod(), z3::operator &(), z3::operator!=(), z3::operator*(), z3::operator+(), z3::operator-(), z3::operator/(), z3::operator<(), z3::operator<=(), z3::operator==(), z3::operator>(), z3::operator>=(), z3::operator^(), z3::operator|(), z3::pw(), z3::rem(), z3::select(), z3::shl(), z3::sle(), z3::slt(), z3::smod(), z3::srem(), z3::store(), z3::udiv(), z3::uge(), z3::ugt(), z3::ule(), z3::ult(), and z3::urem().

756 { Z3_sort s = Z3_get_sort(*m_ctx, m_ast); check_error(); return sort(*m_ctx, s); }
Z3_error_code check_error() const
Definition: z3++.h:419
Z3_ast m_ast
Definition: z3++.h:498
Z3_sort Z3_API Z3_get_sort(Z3_context c, Z3_ast a)
Return the sort of an AST node.
context * m_ctx
Definition: z3++.h:414

◆ get_string()

std::string get_string ( ) const
inline

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

1033  {
1034  assert(is_string_value());
1035  unsigned n;
1036  char const* s = Z3_get_lstring(ctx(), m_ast, &n);
1037  check_error();
1038  return std::string(s, n);
1039  }
Z3_error_code check_error() const
Definition: z3++.h:419
Z3_char_ptr Z3_API Z3_get_lstring(Z3_context c, Z3_ast s, unsigned *length)
Retrieve the unescaped string constant stored in s.
context & ctx() const
Definition: z3++.h:418
bool is_string_value() const
Return true if this expression is a string literal. The string can be accessed using get_string() and...
Definition: z3++.h:1019
Z3_ast m_ast
Definition: z3++.h:498

◆ hi()

unsigned hi ( ) const
inline

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

1268 { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 0)); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
unsigned Z3_API Z3_get_decl_num_parameters(Z3_context c, Z3_func_decl d)
Return the number of parameters associated with a declaration.
context & ctx() const
Definition: z3++.h:418
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831
int Z3_API Z3_get_decl_int_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the integer value associated with an integer parameter.

◆ id()

unsigned id ( ) const
inline

retrieve unique identifier for expression.

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

919 { unsigned r = Z3_get_ast_id(ctx(), m_ast); check_error(); return r; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
unsigned Z3_API Z3_get_ast_id(Z3_context c, Z3_ast t)
Return a unique identifier for t. The identifier is unique up to structural equality. Thus, two ast nodes created by the same context and having the same children and same function symbols have the same identifiers. Ast nodes created in the same context, but having different children or different functions have different identifiers. Variables and quantifiers are also assigned different identifiers according to their structure.
Z3_ast m_ast
Definition: z3++.h:498

◆ is_algebraic()

bool is_algebraic ( ) const
inline

Return true if expression is an algebraic number.

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

861 { return Z3_is_algebraic_number(ctx(), m_ast); }
bool Z3_API Z3_is_algebraic_number(Z3_context c, Z3_ast a)
Return true if the given AST is a real algebraic number.
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498

◆ is_and()

bool is_and ( ) const
inline

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

1150 { return is_app() && Z3_OP_AND == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_app()

bool is_app ( ) const
inline

Return true if this expression is an application.

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

831 { return kind() == Z3_APP_AST || kind() == Z3_NUMERAL_AST; }
Z3_ast_kind kind() const
Definition: z3++.h:507

◆ is_arith()

bool is_arith ( ) const
inline

Return true if this is an integer or real expression.

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

Referenced by z3::max(), z3::min(), z3::operator!=(), z3::operator*(), z3::operator+(), z3::operator-(), z3::operator/(), z3::operator<(), z3::operator<=(), z3::operator==(), z3::operator>(), and z3::operator>=().

773 { return get_sort().is_arith(); }
bool is_arith() const
Return true if this sort is the Integer or Real sort.
Definition: z3++.h:636
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_array()

bool is_array ( ) const
inline

Return true if this is a Array expression.

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

781 { return get_sort().is_array(); }
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756
bool is_array() const
Return true if this sort is a Array sort.
Definition: z3++.h:644

◆ is_bool()

bool is_bool ( ) const
inline

Return true if this is a Boolean expression.

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

Referenced by solver::add(), optimize::add(), optimize::add_soft(), z3::implies(), z3::ite(), z3::nand(), z3::nor(), z3::operator &(), z3::operator &&(), z3::operator!(), z3::operator^(), z3::operator|(), z3::operator||(), and z3::xnor().

761 { return get_sort().is_bool(); }
bool is_bool() const
Return true if this sort is the Boolean sort.
Definition: z3++.h:624
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_bv()

bool is_bv ( ) const
inline

Return true if this is a Bit-vector expression.

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

Referenced by z3::max(), z3::min(), z3::mod(), z3::operator!=(), z3::operator*(), z3::operator+(), z3::operator-(), z3::operator/(), z3::operator<(), z3::operator<=(), z3::operator==(), z3::operator>(), and z3::operator>=().

777 { return get_sort().is_bv(); }
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756
bool is_bv() const
Return true if this sort is a Bit-vector sort.
Definition: z3++.h:640

◆ is_const()

bool is_const ( ) const
inline

Return true if this expression is a constant (i.e., an application with 0 arguments).

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

Referenced by solver::add().

835 { return is_app() && num_args() == 0; }
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831
unsigned num_args() const
Return the number of arguments in this application. This method assumes the expression is an applicat...
Definition: z3++.h:1067

◆ is_datatype()

bool is_datatype ( ) const
inline

Return true if this is a Datatype expression.

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

785 { return get_sort().is_datatype(); }
bool is_datatype() const
Return true if this sort is a Datatype sort.
Definition: z3++.h:648
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_distinct()

bool is_distinct ( ) const
inline

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

1156 { return is_app() && Z3_OP_DISTINCT == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_eq()

bool is_eq ( ) const
inline

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

1154 { return is_app() && Z3_OP_EQ == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_exists()

bool is_exists ( ) const
inline

Return true if this expression is an existential quantifier.

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

848 { return Z3_is_quantifier_exists(ctx(), m_ast); }
bool Z3_API Z3_is_quantifier_exists(Z3_context c, Z3_ast a)
Determine if ast is an existential quantifier.
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498

◆ is_false()

bool is_false ( ) const
inline

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

1148 { return is_app() && Z3_OP_FALSE == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_finite_domain()

bool is_finite_domain ( ) const
inline

Return true if this is a Finite-domain expression.

Remarks
Finite-domain is special kind of interpreted sort: is_bool(), is_bv() and is_finite_domain() are mutually exclusive.

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

807 { return get_sort().is_finite_domain(); }
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756
bool is_finite_domain() const
Return true if this sort is a Finite domain sort.
Definition: z3++.h:664

◆ is_forall()

bool is_forall ( ) const
inline

Return true if this expression is a universal quantifier.

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

844 { return Z3_is_quantifier_forall(ctx(), m_ast); }
context & ctx() const
Definition: z3++.h:418
bool Z3_API Z3_is_quantifier_forall(Z3_context c, Z3_ast a)
Determine if an ast is a universal quantifier.
Z3_ast m_ast
Definition: z3++.h:498

◆ is_fpa()

bool is_fpa ( ) const
inline

Return true if this is a FloatingPoint expression. .

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

Referenced by z3::fma(), z3::max(), z3::min(), z3::operator!=(), z3::operator*(), z3::operator+(), z3::operator-(), z3::operator/(), z3::operator<(), z3::operator<=(), z3::operator==(), z3::operator>(), z3::rem(), and z3::sqrt().

811 { return get_sort().is_fpa(); }
bool is_fpa() const
Return true if this sort is a Floating point sort.
Definition: z3++.h:668
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_implies()

bool is_implies ( ) const
inline

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

1153 { return is_app() && Z3_OP_IMPLIES == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_int()

bool is_int ( ) const
inline

Return true if this is an integer expression.

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

Referenced by z3::abs().

765 { return get_sort().is_int(); }
bool is_int() const
Return true if this sort is the Integer sort.
Definition: z3++.h:628
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_ite()

bool is_ite ( ) const
inline

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

1155 { return is_app() && Z3_OP_ITE == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_lambda()

bool is_lambda ( ) const
inline

Return true if this expression is a lambda expression.

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

852 { return Z3_is_lambda(ctx(), m_ast); }
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498
bool Z3_API Z3_is_lambda(Z3_context c, Z3_ast a)
Determine if ast is a lambda expression.

◆ is_not()

bool is_not ( ) const
inline

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

1149 { return is_app() && Z3_OP_NOT == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_numeral() [1/4]

bool is_numeral ( ) const
inline

Return true if this expression is a numeral. Specialized functions also return representations for the numerals as small integers, 64 bit integers or rational or decimal strings.

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

818 { return kind() == Z3_NUMERAL_AST; }
Z3_ast_kind kind() const
Definition: z3++.h:507

◆ is_numeral() [2/4]

bool is_numeral ( std::string &  s) const
inline

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

Referenced by expr::is_numeral().

823 { if (!is_numeral()) return false; s = Z3_get_numeral_string(ctx(), m_ast); check_error(); return true; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
Z3_string Z3_API Z3_get_numeral_string(Z3_context c, Z3_ast a)
Return numeral value, as a decimal string of a numeric constant term.
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ is_numeral() [3/4]

bool is_numeral ( std::string &  s,
unsigned  precision 
) const
inline

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

Referenced by expr::is_numeral().

824 { if (!is_numeral()) return false; s = Z3_get_numeral_decimal_string(ctx(), m_ast, precision); check_error(); return true; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
Z3_string Z3_API Z3_get_numeral_decimal_string(Z3_context c, Z3_ast a, unsigned precision)
Return numeral as a string in decimal notation. The result has at most precision decimal places...
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ is_numeral() [4/4]

bool is_numeral ( double &  d) const
inline

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

Referenced by expr::is_numeral().

825 { if (!is_numeral()) return false; d = Z3_get_numeral_double(ctx(), m_ast); check_error(); return true; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
double Z3_API Z3_get_numeral_double(Z3_context c, Z3_ast a)
Return numeral as a double.
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ is_numeral_i()

bool is_numeral_i ( int &  i) const
inline

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

821 { bool r = Z3_get_numeral_int(ctx(), m_ast, &i); check_error(); return r;}
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
bool Z3_API Z3_get_numeral_int(Z3_context c, Z3_ast v, int *i)
Similar to Z3_get_numeral_string, but only succeeds if the value can fit in a machine int...
Z3_ast m_ast
Definition: z3++.h:498

◆ is_numeral_i64()

bool is_numeral_i64 ( int64_t &  i) const
inline

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

819 { bool r = Z3_get_numeral_int64(ctx(), m_ast, &i); check_error(); return r;}
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
bool Z3_API Z3_get_numeral_int64(Z3_context c, Z3_ast v, int64_t *i)
Similar to Z3_get_numeral_string, but only succeeds if the value can fit in a machine int64_t int...
Z3_ast m_ast
Definition: z3++.h:498

◆ is_numeral_u()

bool is_numeral_u ( unsigned &  i) const
inline

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

822 { bool r = Z3_get_numeral_uint(ctx(), m_ast, &i); check_error(); return r;}
bool Z3_API Z3_get_numeral_uint(Z3_context c, Z3_ast v, unsigned *u)
Similar to Z3_get_numeral_string, but only succeeds if the value can fit in a machine unsigned int...
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498

◆ is_numeral_u64()

bool is_numeral_u64 ( uint64_t &  i) const
inline

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

820 { bool r = Z3_get_numeral_uint64(ctx(), m_ast, &i); check_error(); return r;}
Z3_error_code check_error() const
Definition: z3++.h:419
bool Z3_API Z3_get_numeral_uint64(Z3_context c, Z3_ast v, uint64_t *u)
Similar to Z3_get_numeral_string, but only succeeds if the value can fit in a machine uint64_t int...
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498

◆ is_or()

bool is_or ( ) const
inline

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

1151 { return is_app() && Z3_OP_OR == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_quantifier()

bool is_quantifier ( ) const
inline

Return true if this expression is a quantifier.

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

839 { return kind() == Z3_QUANTIFIER_AST; }
Z3_ast_kind kind() const
Definition: z3++.h:507

◆ is_re()

bool is_re ( ) const
inline

Return true if this is a regular expression.

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

Referenced by z3::operator+().

797 { return get_sort().is_re(); }
bool is_re() const
Return true if this sort is a regular expression sort.
Definition: z3++.h:660
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_real()

bool is_real ( ) const
inline

Return true if this is a real expression.

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

Referenced by z3::abs().

769 { return get_sort().is_real(); }
bool is_real() const
Return true if this sort is the Real sort.
Definition: z3++.h:632
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_relation()

bool is_relation ( ) const
inline

Return true if this is a Relation expression.

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

789 { return get_sort().is_relation(); }
bool is_relation() const
Return true if this sort is a Relation sort.
Definition: z3++.h:652
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756

◆ is_seq()

bool is_seq ( ) const
inline

Return true if this is a sequence expression.

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

Referenced by z3::operator+().

793 { return get_sort().is_seq(); }
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756
bool is_seq() const
Return true if this sort is a Sequence sort.
Definition: z3++.h:656

◆ is_string_value()

bool is_string_value ( ) const
inline

Return true if this expression is a string literal. The string can be accessed using get_string() and get_escaped_string()

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

1019 { return Z3_is_string(ctx(), m_ast); }
context & ctx() const
Definition: z3++.h:418
bool Z3_API Z3_is_string(Z3_context c, Z3_ast s)
Determine if s is a string constant.
Z3_ast m_ast
Definition: z3++.h:498

◆ is_true()

bool is_true ( ) const
inline

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

1147 { return is_app() && Z3_OP_TRUE == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ is_var()

bool is_var ( ) const
inline

Return true if this expression is a variable.

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

857 { return kind() == Z3_VAR_AST; }
Z3_ast_kind kind() const
Definition: z3++.h:507

◆ is_well_sorted()

bool is_well_sorted ( ) const
inline

Return true if this expression is well sorted (aka type correct).

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

866 { bool r = Z3_is_well_sorted(ctx(), m_ast); check_error(); return r; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498
bool Z3_API Z3_is_well_sorted(Z3_context c, Z3_ast t)
Return true if the given expression t is well sorted.

◆ is_xor()

bool is_xor ( ) const
inline

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

1152 { return is_app() && Z3_OP_XOR == decl().decl_kind(); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
Z3_decl_kind decl_kind() const
Definition: z3++.h:715
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831

◆ itos()

expr itos ( ) const
inline

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

1323  {
1324  Z3_ast r = Z3_mk_int_to_str(ctx(), *this);
1325  check_error();
1326  return expr(ctx(), r);
1327  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_int_to_str(Z3_context c, Z3_ast s)
Integer to string conversion.

◆ length()

expr length ( ) const
inline

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

1313  {
1314  Z3_ast r = Z3_mk_seq_length(ctx(), *this);
1315  check_error();
1316  return expr(ctx(), r);
1317  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_seq_length(Z3_context c, Z3_ast s)
Return the length of the sequence s.
context & ctx() const
Definition: z3++.h:418

◆ lo()

unsigned lo ( ) const
inline

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

1267 { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 1)); }
func_decl decl() const
Return the declaration associated with this application. This method assumes the expression is an app...
Definition: z3++.h:1060
unsigned Z3_API Z3_get_decl_num_parameters(Z3_context c, Z3_func_decl d)
Return the number of parameters associated with a declaration.
context & ctx() const
Definition: z3++.h:418
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831
int Z3_API Z3_get_decl_int_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the integer value associated with an integer parameter.

◆ loop() [1/2]

expr loop ( unsigned  lo)
inline

create a looping regular expression.

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

1333  {
1334  Z3_ast r = Z3_mk_re_loop(ctx(), m_ast, lo, 0);
1335  check_error();
1336  return expr(ctx(), r);
1337  }
Z3_ast Z3_API Z3_mk_re_loop(Z3_context c, Z3_ast r, unsigned lo, unsigned hi)
Create a regular expression loop. The supplied regular expression r is repeated between lo and hi tim...
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
unsigned lo() const
Definition: z3++.h:1267
Z3_ast m_ast
Definition: z3++.h:498

◆ loop() [2/2]

expr loop ( unsigned  lo,
unsigned  hi 
)
inline

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

1338  {
1339  Z3_ast r = Z3_mk_re_loop(ctx(), m_ast, lo, hi);
1340  check_error();
1341  return expr(ctx(), r);
1342  }
Z3_ast Z3_API Z3_mk_re_loop(Z3_context c, Z3_ast r, unsigned lo, unsigned hi)
Create a regular expression loop. The supplied regular expression r is repeated between lo and hi tim...
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
unsigned lo() const
Definition: z3++.h:1267
unsigned hi() const
Definition: z3++.h:1268
Z3_ast m_ast
Definition: z3++.h:498

◆ nth()

expr nth ( expr const &  index) const
inline

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

1307  {
1308  check_context(*this, index);
1309  Z3_ast r = Z3_mk_seq_nth(ctx(), *this, index);
1310  check_error();
1311  return expr(ctx(), r);
1312  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_seq_nth(Z3_context c, Z3_ast s, Z3_ast index)
Retrieve from s the element positioned at position index. The function is under-specified if the inde...
context & ctx() const
Definition: z3++.h:418
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ num_args()

unsigned num_args ( ) const
inline

Return the number of arguments in this application. This method assumes the expression is an application.

Precondition
is_app()

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

1067 { unsigned r = Z3_get_app_num_args(ctx(), *this); check_error(); return r; }
Z3_error_code check_error() const
Definition: z3++.h:419
context & ctx() const
Definition: z3++.h:418
unsigned Z3_API Z3_get_app_num_args(Z3_context c, Z3_app a)
Return the number of argument of an application. If t is an constant, then the number of arguments is...

◆ numerator()

expr numerator ( ) const
inline

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

999  {
1000  assert(is_numeral());
1001  Z3_ast r = Z3_get_numerator(ctx(), m_ast);
1002  check_error();
1003  return expr(ctx(),r);
1004  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_get_numerator(Z3_context c, Z3_ast a)
Return the numerator (as a numeral AST) of a numeral AST of sort Real.
Z3_ast m_ast
Definition: z3++.h:498
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:818

◆ operator Z3_app()

operator Z3_app ( ) const
inline

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

1041 { assert(is_app()); return reinterpret_cast<Z3_app>(m_ast); }
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:831
Z3_ast m_ast
Definition: z3++.h:498

◆ operator=()

expr& operator= ( expr const &  n)
inline

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

751 { return static_cast<expr&>(ast::operator=(n)); }
expr(context &c)
Definition: z3++.h:748
ast & operator=(ast const &s)
Definition: z3++.h:506

◆ operator[]() [1/2]

expr operator[] ( expr const &  index) const
inline

index operator defined on arrays and sequences.

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

1347  {
1348  assert(is_array() || is_seq());
1349  if (is_array()) {
1350  return select(*this, index);
1351  }
1352  return nth(index);
1353  }
bool is_array() const
Return true if this is a Array expression.
Definition: z3++.h:781
expr nth(expr const &index) const
Definition: z3++.h:1307
expr select(expr const &a, expr const &i)
forward declarations
Definition: z3++.h:3343
bool is_seq() const
Return true if this is a sequence expression.
Definition: z3++.h:793

◆ operator[]() [2/2]

expr operator[] ( expr_vector const &  index) const
inline

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

1355  {
1356  return select(*this, index);
1357  }
expr select(expr const &a, expr const &i)
forward declarations
Definition: z3++.h:3343

◆ repeat()

expr repeat ( unsigned  i)
inline

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

1260 { Z3_ast r = Z3_mk_repeat(ctx(), i, *this); ctx().check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition: z3++.h:187
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_repeat(Z3_context c, unsigned i, Z3_ast t1)
Repeat the given bit-vector up length i.

◆ replace()

expr replace ( expr const &  src,
expr const &  dst 
) const
inline

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

1284  {
1285  check_context(*this, src); check_context(src, dst);
1286  Z3_ast r = Z3_mk_seq_replace(ctx(), *this, src, dst);
1287  check_error();
1288  return expr(ctx(), r);
1289  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_seq_replace(Z3_context c, Z3_ast s, Z3_ast src, Z3_ast dst)
Replace the first occurrence of src with dst in s.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ rotate_left()

expr rotate_left ( unsigned  i)
inline

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

1258 { Z3_ast r = Z3_mk_rotate_left(ctx(), i, *this); ctx().check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition: z3++.h:187
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_rotate_left(Z3_context c, unsigned i, Z3_ast t1)
Rotate bits of t1 to the left i times.

◆ rotate_right()

expr rotate_right ( unsigned  i)
inline

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

1259 { Z3_ast r = Z3_mk_rotate_right(ctx(), i, *this); ctx().check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition: z3++.h:187
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_rotate_right(Z3_context c, unsigned i, Z3_ast t1)
Rotate bits of t1 to the right i times.

◆ simplify() [1/2]

expr simplify ( ) const
inline

Return a simplified version of this expression.

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

1362 { Z3_ast r = Z3_simplify(ctx(), m_ast); check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_simplify(Z3_context c, Z3_ast a)
Interface to simplifier.
Z3_ast m_ast
Definition: z3++.h:498

◆ simplify() [2/2]

expr simplify ( params const &  p) const
inline

Return a simplified version of this expression. The parameter p is a set of parameters for the Z3 simplifier.

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

1366 { Z3_ast r = Z3_simplify_ex(ctx(), m_ast, p); check_error(); return expr(ctx(), r); }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_simplify_ex(Z3_context c, Z3_ast a, Z3_params p)
Interface to simplifier.
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498

◆ stoi()

expr stoi ( ) const
inline

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

1318  {
1319  Z3_ast r = Z3_mk_str_to_int(ctx(), *this);
1320  check_error();
1321  return expr(ctx(), r);
1322  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_str_to_int(Z3_context c, Z3_ast s)
Convert string to integer.
context & ctx() const
Definition: z3++.h:418

◆ substitute() [1/2]

expr substitute ( expr_vector const &  src,
expr_vector const &  dst 
)
inline

Apply substitution. Replace src expressions by dst.

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

3575  {
3576  assert(src.size() == dst.size());
3577  array<Z3_ast> _src(src.size());
3578  array<Z3_ast> _dst(dst.size());
3579  for (unsigned i = 0; i < src.size(); ++i) {
3580  _src[i] = src[i];
3581  _dst[i] = dst[i];
3582  }
3583  Z3_ast r = Z3_substitute(ctx(), m_ast, src.size(), _src.ptr(), _dst.ptr());
3584  check_error();
3585  return expr(ctx(), r);
3586  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_substitute(Z3_context c, Z3_ast a, unsigned num_exprs, Z3_ast const from[], Z3_ast const to[])
Substitute every occurrence of from[i] in a with to[i], for i smaller than num_exprs. The result is the new AST. The arrays from and to must have size num_exprs. For every i smaller than num_exprs, we must have that sort of from[i] must be equal to sort of to[i].
context & ctx() const
Definition: z3++.h:418
Z3_ast m_ast
Definition: z3++.h:498

◆ substitute() [2/2]

expr substitute ( expr_vector const &  dst)
inline

Apply substitution. Replace bound variables by expressions.

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

3588  {
3589  array<Z3_ast> _dst(dst.size());
3590  for (unsigned i = 0; i < dst.size(); ++i) {
3591  _dst[i] = dst[i];
3592  }
3593  Z3_ast r = Z3_substitute_vars(ctx(), m_ast, dst.size(), _dst.ptr());
3594  check_error();
3595  return expr(ctx(), r);
3596  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_substitute_vars(Z3_context c, Z3_ast a, unsigned num_exprs, Z3_ast const to[])
Substitute the free variables in a with the expressions in to. For every i smaller than num_exprs...
Z3_ast m_ast
Definition: z3++.h:498

◆ unit()

expr unit ( ) const
inline

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

1290  {
1291  Z3_ast r = Z3_mk_seq_unit(ctx(), *this);
1292  check_error();
1293  return expr(ctx(), r);
1294  }
Z3_error_code check_error() const
Definition: z3++.h:419
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_seq_unit(Z3_context c, Z3_ast a)
Create a unit sequence of a.

Friends And Related Function Documentation

◆ abs

expr abs ( expr const &  a)
friend

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

1732  {
1733  Z3_ast r;
1734  if (a.is_int()) {
1735  expr zero = a.ctx().int_val(0);
1736  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, zero), a, -a);
1737  }
1738  else if (a.is_real()) {
1739  expr zero = a.ctx().real_val(0);
1740  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, zero), a, -a);
1741  }
1742  else {
1743  r = Z3_mk_fpa_abs(a.ctx(), a);
1744  }
1745  a.check_error();
1746  return expr(a.ctx(), r);
1747  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_fpa_abs(Z3_context c, Z3_ast t)
Floating-point absolute value.
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_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).

◆ atleast

expr atleast ( expr_vector const &  es,
unsigned  bound 
)
friend

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

2097  {
2098  assert(es.size() > 0);
2099  context& ctx = es[0].ctx();
2100  array<Z3_ast> _es(es);
2101  Z3_ast r = Z3_mk_atleast(ctx, _es.size(), _es.ptr(), bound);
2102  ctx.check_error();
2103  return expr(ctx, r);
2104  }
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_atleast(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.

◆ atmost

expr atmost ( expr_vector const &  es,
unsigned  bound 
)
friend

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

2089  {
2090  assert(es.size() > 0);
2091  context& ctx = es[0].ctx();
2092  array<Z3_ast> _es(es);
2093  Z3_ast r = Z3_mk_atmost(ctx, _es.size(), _es.ptr(), bound);
2094  ctx.check_error();
2095  return expr(ctx, r);
2096  }
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_atmost(Z3_context c, unsigned num_args, Z3_ast const args[], unsigned k)
Pseudo-Boolean relations.

◆ bv2int

expr bv2int ( expr const &  a,
bool  is_signed 
)
friend

bit-vector and integer conversions.

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

1898 { Z3_ast r = Z3_mk_bv2int(a.ctx(), a, is_signed); a.check_error(); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bv2int(Z3_context c, Z3_ast t1, bool is_signed)
Create an integer from the bit-vector argument t1. If is_signed is false, then the bit-vector t1 is t...

◆ bvadd_no_overflow

expr bvadd_no_overflow ( expr const &  a,
expr const &  b,
bool  is_signed 
)
friend

bit-vector overflow/underflow checks

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

1904  {
1905  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);
1906  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvadd_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise addition of t1 and t2 does not overflow.

◆ bvadd_no_underflow

expr bvadd_no_underflow ( expr const &  a,
expr const &  b 
)
friend

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

1907  {
1908  check_context(a, b); Z3_ast r = Z3_mk_bvadd_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
1909  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvadd_no_underflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed addition of t1 and t2 does not underflow...

◆ bvmul_no_overflow

expr bvmul_no_overflow ( expr const &  a,
expr const &  b,
bool  is_signed 
)
friend

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

1922  {
1923  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);
1924  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvmul_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2, bool is_signed)
Create a predicate that checks that the bit-wise multiplication of t1 and t2 does not overflow...

◆ bvmul_no_underflow

expr bvmul_no_underflow ( expr const &  a,
expr const &  b 
)
friend

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

1925  {
1926  check_context(a, b); Z3_ast r = Z3_mk_bvmul_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
1927  }
expr(context &c)
Definition: z3++.h:748
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...
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ bvneg_no_overflow

expr bvneg_no_overflow ( expr const &  a)
friend

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

1919  {
1920  Z3_ast r = Z3_mk_bvneg_no_overflow(a.ctx(), a); a.check_error(); return expr(a.ctx(), r);
1921  }
expr(context &c)
Definition: z3++.h:748
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...

◆ bvsdiv_no_overflow

expr bvsdiv_no_overflow ( expr const &  a,
expr const &  b 
)
friend

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

1916  {
1917  check_context(a, b); Z3_ast r = Z3_mk_bvsdiv_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
1918  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvsdiv_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed division of t1 and t2 does not overflow...

◆ bvsub_no_overflow

expr bvsub_no_overflow ( expr const &  a,
expr const &  b 
)
friend

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

1910  {
1911  check_context(a, b); Z3_ast r = Z3_mk_bvsub_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
1912  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvsub_no_overflow(Z3_context c, Z3_ast t1, Z3_ast t2)
Create a predicate that checks that the bit-wise signed subtraction of t1 and t2 does not overflow...

◆ bvsub_no_underflow

expr bvsub_no_underflow ( expr const &  a,
expr const &  b,
bool  is_signed 
)
friend

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

1913  {
1914  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);
1915  }
expr(context &c)
Definition: z3++.h:748
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...
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ concat [1/2]

expr concat ( expr const &  a,
expr const &  b 
)
friend

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

2123  {
2124  check_context(a, b);
2125  Z3_ast r;
2126  if (Z3_is_seq_sort(a.ctx(), a.get_sort())) {
2127  Z3_ast _args[2] = { a, b };
2128  r = Z3_mk_seq_concat(a.ctx(), 2, _args);
2129  }
2130  else if (Z3_is_re_sort(a.ctx(), a.get_sort())) {
2131  Z3_ast _args[2] = { a, b };
2132  r = Z3_mk_re_concat(a.ctx(), 2, _args);
2133  }
2134  else {
2135  r = Z3_mk_concat(a.ctx(), a, b);
2136  }
2137  a.ctx().check_error();
2138  return expr(a.ctx(), r);
2139  }
Z3_ast Z3_API Z3_mk_seq_concat(Z3_context c, unsigned n, Z3_ast const args[])
Concatenate sequences.
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_concat(Z3_context c, Z3_ast t1, Z3_ast t2)
Concatenate the given bit-vectors.
Z3_ast Z3_API Z3_mk_re_concat(Z3_context c, unsigned n, Z3_ast const args[])
Create the concatenation of the regular languages.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
bool Z3_API Z3_is_seq_sort(Z3_context c, Z3_sort s)
Check if s is a sequence sort.
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 concat ( expr_vector const &  args)
friend

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

2141  {
2142  Z3_ast r;
2143  assert(args.size() > 0);
2144  if (args.size() == 1) {
2145  return args[0];
2146  }
2147  context& ctx = args[0].ctx();
2148  array<Z3_ast> _args(args);
2149  if (Z3_is_seq_sort(ctx, args[0].get_sort())) {
2150  r = Z3_mk_seq_concat(ctx, _args.size(), _args.ptr());
2151  }
2152  else if (Z3_is_re_sort(ctx, args[0].get_sort())) {
2153  r = Z3_mk_re_concat(ctx, _args.size(), _args.ptr());
2154  }
2155  else {
2156  r = _args[args.size()-1];
2157  for (unsigned i = args.size()-1; i > 0; ) {
2158  --i;
2159  r = Z3_mk_concat(ctx, _args[i], r);
2160  ctx.check_error();
2161  }
2162  }
2163  ctx.check_error();
2164  return expr(ctx, r);
2165  }
Z3_ast Z3_API Z3_mk_seq_concat(Z3_context c, unsigned n, Z3_ast const args[])
Concatenate sequences.
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_concat(Z3_context c, Z3_ast t1, Z3_ast t2)
Concatenate the given bit-vectors.
Z3_ast Z3_API Z3_mk_re_concat(Z3_context c, unsigned n, Z3_ast const args[])
Create the concatenation of the regular languages.
context & ctx() const
Definition: z3++.h:418
sort get_sort() const
Return the sort of this expression.
Definition: z3++.h:756
bool Z3_API Z3_is_seq_sort(Z3_context c, Z3_sort s)
Check if s is a sequence sort.
bool Z3_API Z3_is_re_sort(Z3_context c, Z3_sort s)
Check if s is a regular expression sort.

◆ distinct

expr distinct ( expr_vector const &  args)
friend

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

2114  {
2115  assert(args.size() > 0);
2116  context& ctx = args[0].ctx();
2117  array<Z3_ast> _args(args);
2118  Z3_ast r = Z3_mk_distinct(ctx, _args.size(), _args.ptr());
2119  ctx.check_error();
2120  return expr(ctx, r);
2121  }
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]).
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418

◆ fma

expr fma ( expr const &  a,
expr const &  b,
expr const &  c,
expr const &  rm 
)
friend

FloatingPoint fused multiply-add.

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

1757  {
1758  check_context(a, b); check_context(a, c); check_context(a, rm);
1759  assert(a.is_fpa() && b.is_fpa() && c.is_fpa());
1760  Z3_ast r = Z3_mk_fpa_fma(a.ctx(), rm, a, b, c);
1761  a.check_error();
1762  return expr(a.ctx(), r);
1763  }
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.
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ implies [1/3]

expr implies ( expr const &  a,
expr const &  b 
)
friend

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

1387  {
1388  assert(a.is_bool() && b.is_bool());
1389  _Z3_MK_BIN_(a, b, Z3_mk_implies);
1390  }
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:1380

◆ implies [2/3]

expr implies ( expr const &  a,
bool  b 
)
friend

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

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

◆ implies [3/3]

expr implies ( bool  a,
expr const &  b 
)
friend

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

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

◆ int2bv

expr int2bv ( unsigned  n,
expr const &  a 
)
friend

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

1899 { Z3_ast r = Z3_mk_int2bv(a.ctx(), n, a); a.check_error(); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_int2bv(Z3_context c, unsigned n, Z3_ast t1)
Create an n bit bit-vector from the integer argument t1.

◆ is_int

expr is_int ( expr const &  e)
friend

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

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

◆ ite

expr ite ( expr const &  c,
expr const &  t,
expr const &  e 
)
friend

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

Precondition
c.is_bool()

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

1771  {
1772  check_context(c, t); check_context(c, e);
1773  assert(c.is_bool());
1774  Z3_ast r = Z3_mk_ite(c.ctx(), c, t, e);
1775  c.check_error();
1776  return expr(c.ctx(), r);
1777  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
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).

◆ max

expr max ( expr const &  a,
expr const &  b 
)
friend

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

1717  {
1718  check_context(a, b);
1719  Z3_ast r;
1720  if (a.is_arith()) {
1721  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), a, b);
1722  }
1723  else if (a.is_bv()) {
1724  r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), a, b);
1725  }
1726  else {
1727  assert(a.is_fpa());
1728  r = Z3_mk_fpa_max(a.ctx(), a, b);
1729  }
1730  return expr(a.ctx(), r);
1731  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvuge(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned 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_ge(Z3_context c, Z3_ast t1, Z3_ast t2)
Create greater than or equal to.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
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).

◆ min

expr min ( expr const &  a,
expr const &  b 
)
friend

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

1702  {
1703  check_context(a, b);
1704  Z3_ast r;
1705  if (a.is_arith()) {
1706  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), b, a);
1707  }
1708  else if (a.is_bv()) {
1709  r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), b, a);
1710  }
1711  else {
1712  assert(a.is_fpa());
1713  r = Z3_mk_fpa_min(a.ctx(), a, b);
1714  }
1715  return expr(a.ctx(), r);
1716  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvuge(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned greater than or equal to.
Z3_ast Z3_API Z3_mk_ge(Z3_context c, Z3_ast t1, Z3_ast t2)
Create greater than or equal to.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
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_min(Z3_context c, Z3_ast t1, Z3_ast t2)
Minimum of floating-point numbers.

◆ mk_and

expr mk_and ( expr_vector const &  args)
friend

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

2173  {
2174  array<Z3_ast> _args(args);
2175  Z3_ast r = Z3_mk_and(args.ctx(), _args.size(), _args.ptr());
2176  args.check_error();
2177  return expr(args.ctx(), r);
2178  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_and(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] and ... and args[num_args-1].

◆ mk_or

expr mk_or ( expr_vector const &  args)
friend

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

2167  {
2168  array<Z3_ast> _args(args);
2169  Z3_ast r = Z3_mk_or(args.ctx(), _args.size(), _args.ptr());
2170  args.check_error();
2171  return expr(args.ctx(), r);
2172  }
expr(context &c)
Definition: z3++.h:748
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].

◆ mod [1/3]

expr mod ( expr const &  a,
expr const &  b 
)
friend

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

1399  {
1400  if (a.is_bv()) {
1401  _Z3_MK_BIN_(a, b, Z3_mk_bvsmod);
1402  }
1403  else {
1404  _Z3_MK_BIN_(a, b, Z3_mk_mod);
1405  }
1406  }
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&#39;s complement signed remainder (sign follows divisor).
#define _Z3_MK_BIN_(a, b, binop)
Definition: z3++.h:1380

◆ mod [2/3]

expr mod ( expr const &  a,
int  b 
)
friend

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

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

◆ mod [3/3]

expr mod ( int  a,
expr const &  b 
)
friend

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

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

◆ nand

expr nand ( expr const &  a,
expr const &  b 
)
friend

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

1699 { if (a.is_bool()) return !(a && b); check_context(a, b); Z3_ast r = Z3_mk_bvnand(a.ctx(), a, b); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvnand(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise nand.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ nor

expr nor ( expr const &  a,
expr const &  b 
)
friend

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

1700 { if (a.is_bool()) return !(a || b); check_context(a, b); Z3_ast r = Z3_mk_bvnor(a.ctx(), a, b); return expr(a.ctx(), r); }
Z3_ast Z3_API Z3_mk_bvnor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise nor.
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ operator & [1/3]

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

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

1687 { if (a.is_bool()) return a && b; check_context(a, b); Z3_ast r = Z3_mk_bvand(a.ctx(), a, b); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvand(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise and.

◆ operator & [2/3]

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

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

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

◆ operator & [3/3]

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

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

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

◆ operator && [1/3]

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

Return an expression representing a and b.

Precondition
a.is_bool()
b.is_bool()

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

1439  {
1440  check_context(a, b);
1441  assert(a.is_bool() && b.is_bool());
1442  Z3_ast args[2] = { a, b };
1443  Z3_ast r = Z3_mk_and(a.ctx(), 2, args);
1444  a.check_error();
1445  return expr(a.ctx(), r);
1446  }
expr(context &c)
Definition: z3++.h:748
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].
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ operator && [2/3]

expr operator&& ( expr const &  a,
bool  b 
)
friend

Return an expression representing a and b. The C++ Boolean value b is automatically converted into a Z3 Boolean constant.

Precondition
a.is_bool()

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

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

◆ operator && [3/3]

expr operator&& ( bool  a,
expr const &  b 
)
friend

Return an expression representing a and b. The C++ Boolean value a is automatically converted into a Z3 Boolean constant.

Precondition
b.is_bool()

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

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

◆ operator!

expr operator! ( expr const &  a)
friend

Return an expression representing not(a).

Precondition
a.is_bool()

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

1433 { assert(a.is_bool()); _Z3_MK_UN_(a, Z3_mk_not); }
#define _Z3_MK_UN_(a, mkun)
Definition: z3++.h:1427
Z3_ast Z3_API Z3_mk_not(Z3_context c, Z3_ast a)
Create an AST node representing not(a).

◆ operator!= [1/3]

expr operator!= ( expr const &  a,
expr const &  b 
)
friend

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

1473  {
1474  check_context(a, b);
1475  Z3_ast args[2] = { a, b };
1476  Z3_ast r = Z3_mk_distinct(a.ctx(), 2, args);
1477  a.check_error();
1478  return expr(a.ctx(), r);
1479  }
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]).
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ operator!= [2/3]

expr operator!= ( expr const &  a,
int  b 
)
friend

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

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

◆ operator!= [3/3]

expr operator!= ( int  a,
expr const &  b 
)
friend

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

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

◆ operator* [1/3]

expr operator* ( expr const &  a,
expr const &  b 
)
friend

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

1513  {
1514  check_context(a, b);
1515  Z3_ast r = 0;
1516  if (a.is_arith() && b.is_arith()) {
1517  Z3_ast args[2] = { a, b };
1518  r = Z3_mk_mul(a.ctx(), 2, args);
1519  }
1520  else if (a.is_bv() && b.is_bv()) {
1521  r = Z3_mk_bvmul(a.ctx(), a, b);
1522  }
1523  else if (a.is_fpa() && b.is_fpa()) {
1524  r = Z3_mk_fpa_mul(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1525  }
1526  else {
1527  // operator is not supported by given arguments.
1528  assert(false);
1529  }
1530  a.check_error();
1531  return expr(a.ctx(), r);
1532  }
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].
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_fpa_mul(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point multiplication.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvmul(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two&#39;s complement multiplication.

◆ operator* [2/3]

expr operator* ( expr const &  a,
int  b 
)
friend

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

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

◆ operator* [3/3]

expr operator* ( int  a,
expr const &  b 
)
friend

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

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

◆ operator+ [1/3]

expr operator+ ( expr const &  a,
expr const &  b 
)
friend

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

1483  {
1484  check_context(a, b);
1485  Z3_ast r = 0;
1486  if (a.is_arith() && b.is_arith()) {
1487  Z3_ast args[2] = { a, b };
1488  r = Z3_mk_add(a.ctx(), 2, args);
1489  }
1490  else if (a.is_bv() && b.is_bv()) {
1491  r = Z3_mk_bvadd(a.ctx(), a, b);
1492  }
1493  else if (a.is_seq() && b.is_seq()) {
1494  return concat(a, b);
1495  }
1496  else if (a.is_re() && b.is_re()) {
1497  Z3_ast _args[2] = { a, b };
1498  r = Z3_mk_re_union(a.ctx(), 2, _args);
1499  }
1500  else if (a.is_fpa() && b.is_fpa()) {
1501  r = Z3_mk_fpa_add(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1502  }
1503  else {
1504  // operator is not supported by given arguments.
1505  assert(false);
1506  }
1507  a.check_error();
1508  return expr(a.ctx(), r);
1509  }
expr(context &c)
Definition: z3++.h:748
friend expr concat(expr const &a, expr const &b)
Definition: z3++.h:2123
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].
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
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_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&#39;s complement addition.

◆ operator+ [2/3]

expr operator+ ( expr const &  a,
int  b 
)
friend

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

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

◆ operator+ [3/3]

expr operator+ ( int  a,
expr const &  b 
)
friend

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

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

◆ operator- [1/4]

expr operator- ( expr const &  a)
friend

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

1576  {
1577  Z3_ast r = 0;
1578  if (a.is_arith()) {
1579  r = Z3_mk_unary_minus(a.ctx(), a);
1580  }
1581  else if (a.is_bv()) {
1582  r = Z3_mk_bvneg(a.ctx(), a);
1583  }
1584  else if (a.is_fpa()) {
1585  r = Z3_mk_fpa_neg(a.ctx(), a);
1586  }
1587  else {
1588  // operator is not supported by given arguments.
1589  assert(false);
1590  }
1591  a.check_error();
1592  return expr(a.ctx(), r);
1593  }
Z3_ast Z3_API Z3_mk_unary_minus(Z3_context c, Z3_ast arg)
Create an AST node representing - arg.
expr(context &c)
Definition: z3++.h:748
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&#39;s complement unary minus.

◆ operator- [2/4]

expr operator- ( expr const &  a,
expr const &  b 
)
friend

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

1595  {
1596  check_context(a, b);
1597  Z3_ast r = 0;
1598  if (a.is_arith() && b.is_arith()) {
1599  Z3_ast args[2] = { a, b };
1600  r = Z3_mk_sub(a.ctx(), 2, args);
1601  }
1602  else if (a.is_bv() && b.is_bv()) {
1603  r = Z3_mk_bvsub(a.ctx(), a, b);
1604  }
1605  else if (a.is_fpa() && b.is_fpa()) {
1606  r = Z3_mk_fpa_sub(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1607  }
1608  else {
1609  // operator is not supported by given arguments.
1610  assert(false);
1611  }
1612  a.check_error();
1613  return expr(a.ctx(), r);
1614  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
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].
Z3_ast Z3_API Z3_mk_bvsub(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two&#39;s complement subtraction.
Z3_ast Z3_API Z3_mk_fpa_sub(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point subtraction.

◆ operator- [3/4]

expr operator- ( expr const &  a,
int  b 
)
friend

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

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

◆ operator- [4/4]

expr operator- ( int  a,
expr const &  b 
)
friend

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

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

◆ operator/ [1/3]

expr operator/ ( expr const &  a,
expr const &  b 
)
friend

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

1554  {
1555  check_context(a, b);
1556  Z3_ast r = 0;
1557  if (a.is_arith() && b.is_arith()) {
1558  r = Z3_mk_div(a.ctx(), a, b);
1559  }
1560  else if (a.is_bv() && b.is_bv()) {
1561  r = Z3_mk_bvsdiv(a.ctx(), a, b);
1562  }
1563  else if (a.is_fpa() && b.is_fpa()) {
1564  r = Z3_mk_fpa_div(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1565  }
1566  else {
1567  // operator is not supported by given arguments.
1568  assert(false);
1569  }
1570  a.check_error();
1571  return expr(a.ctx(), r);
1572  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvsdiv(Z3_context c, Z3_ast t1, Z3_ast t2)
Two&#39;s complement signed division.
Z3_ast Z3_API Z3_mk_div(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 div arg2.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_fpa_div(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point division.

◆ operator/ [2/3]

expr operator/ ( expr const &  a,
int  b 
)
friend

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

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

◆ operator/ [3/3]

expr operator/ ( int  a,
expr const &  b 
)
friend

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

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

◆ operator< [1/3]

expr operator< ( expr const &  a,
expr const &  b 
)
friend

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

1643  {
1644  check_context(a, b);
1645  Z3_ast r = 0;
1646  if (a.is_arith() && b.is_arith()) {
1647  r = Z3_mk_lt(a.ctx(), a, b);
1648  }
1649  else if (a.is_bv() && b.is_bv()) {
1650  r = Z3_mk_bvslt(a.ctx(), a, b);
1651  }
1652  else if (a.is_fpa() && b.is_fpa()) {
1653  r = Z3_mk_fpa_lt(a.ctx(), a, b);
1654  }
1655  else {
1656  // operator is not supported by given arguments.
1657  assert(false);
1658  }
1659  a.check_error();
1660  return expr(a.ctx(), r);
1661  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvslt(Z3_context c, Z3_ast t1, Z3_ast t2)
Two&#39;s complement signed less than.
Z3_ast Z3_API Z3_mk_lt(Z3_context c, Z3_ast t1, Z3_ast t2)
Create less than.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_fpa_lt(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point less than.

◆ operator< [2/3]

expr operator< ( expr const &  a,
int  b 
)
friend

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

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

◆ operator< [3/3]

expr operator< ( int  a,
expr const &  b 
)
friend

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

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

◆ operator<= [1/3]

expr operator<= ( expr const &  a,
expr const &  b 
)
friend

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

1618  {
1619  check_context(a, b);
1620  Z3_ast r = 0;
1621  if (a.is_arith() && b.is_arith()) {
1622  r = Z3_mk_le(a.ctx(), a, b);
1623  }
1624  else if (a.is_bv() && b.is_bv()) {
1625  r = Z3_mk_bvsle(a.ctx(), a, b);
1626  }
1627  else if (a.is_fpa() && b.is_fpa()) {
1628  r = Z3_mk_fpa_leq(a.ctx(), a, b);
1629  }
1630  else {
1631  // operator is not supported by given arguments.
1632  assert(false);
1633  }
1634  a.check_error();
1635  return expr(a.ctx(), r);
1636  }
expr(context &c)
Definition: z3++.h:748
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_bvsle(Z3_context c, Z3_ast t1, Z3_ast t2)
Two&#39;s complement signed less than or equal to.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_fpa_leq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point less than or equal.

◆ operator<= [2/3]

expr operator<= ( expr const &  a,
int  b 
)
friend

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

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

◆ operator<= [3/3]

expr operator<= ( int  a,
expr const &  b 
)
friend

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

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

◆ operator== [1/3]

expr operator== ( expr const &  a,
expr const &  b 
)
friend

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

1464  {
1465  check_context(a, b);
1466  Z3_ast r = Z3_mk_eq(a.ctx(), a, b);
1467  a.check_error();
1468  return expr(a.ctx(), r);
1469  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_eq(Z3_context c, Z3_ast l, Z3_ast r)
Create an AST node representing l = r.

◆ operator== [2/3]

expr operator== ( expr const &  a,
int  b 
)
friend

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

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

◆ operator== [3/3]

expr operator== ( int  a,
expr const &  b 
)
friend

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

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

◆ operator> [1/3]

expr operator> ( expr const &  a,
expr const &  b 
)
friend

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

1665  {
1666  check_context(a, b);
1667  Z3_ast r = 0;
1668  if (a.is_arith() && b.is_arith()) {
1669  r = Z3_mk_gt(a.ctx(), a, b);
1670  }
1671  else if (a.is_bv() && b.is_bv()) {
1672  r = Z3_mk_bvsgt(a.ctx(), a, b);
1673  }
1674  else if (a.is_fpa() && b.is_fpa()) {
1675  r = Z3_mk_fpa_gt(a.ctx(), a, b);
1676  }
1677  else {
1678  // operator is not supported by given arguments.
1679  assert(false);
1680  }
1681  a.check_error();
1682  return expr(a.ctx(), r);
1683  }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvsgt(Z3_context c, Z3_ast t1, Z3_ast t2)
Two&#39;s complement signed greater than.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_gt(Z3_context c, Z3_ast t1, Z3_ast t2)
Create greater than.
Z3_ast Z3_API Z3_mk_fpa_gt(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point greater than.

◆ operator> [2/3]

expr operator> ( expr const &  a,
int  b 
)
friend

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

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

◆ operator> [3/3]

expr operator> ( int  a,
expr const &  b 
)
friend

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

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

◆ operator>= [1/3]

expr operator>= ( expr const &  a,
expr const &  b 
)
friend

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

1537  {
1538  check_context(a, b);
1539  Z3_ast r = 0;
1540  if (a.is_arith() && b.is_arith()) {
1541  r = Z3_mk_ge(a.ctx(), a, b);
1542  }
1543  else if (a.is_bv() && b.is_bv()) {
1544  r = Z3_mk_bvsge(a.ctx(), a, b);
1545  }
1546  else {
1547  // operator is not supported by given arguments.
1548  assert(false);
1549  }
1550  a.check_error();
1551  return expr(a.ctx(), r);
1552  }
expr(context &c)
Definition: z3++.h:748
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_bvsge(Z3_context c, Z3_ast t1, Z3_ast t2)
Two&#39;s complement signed greater than or equal to.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ operator>= [2/3]

expr operator>= ( expr const &  a,
int  b 
)
friend

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

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

◆ operator>= [3/3]

expr operator>= ( int  a,
expr const &  b 
)
friend

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

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

◆ operator^ [1/3]

expr operator^ ( expr const &  a,
expr const &  b 
)
friend

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

1691 { check_context(a, b); Z3_ast r = a.is_bool() ? Z3_mk_xor(a.ctx(), a, b) : Z3_mk_bvxor(a.ctx(), a, b); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_xor(Z3_context c, Z3_ast t1, Z3_ast t2)
Create an AST node representing t1 xor t2.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvxor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise exclusive-or.

◆ operator^ [2/3]

expr operator^ ( expr const &  a,
int  b 
)
friend

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

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

◆ operator^ [3/3]

expr operator^ ( int  a,
expr const &  b 
)
friend

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

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

◆ operator| [1/3]

expr operator| ( expr const &  a,
expr const &  b 
)
friend

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

1695 { if (a.is_bool()) return a || b; check_context(a, b); Z3_ast r = Z3_mk_bvor(a.ctx(), a, b); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_bvor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise or.

◆ operator| [2/3]

expr operator| ( expr const &  a,
int  b 
)
friend

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

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

◆ operator| [3/3]

expr operator| ( int  a,
expr const &  b 
)
friend

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

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

◆ operator|| [1/3]

expr operator|| ( expr const &  a,
expr const &  b 
)
friend

Return an expression representing a or b.

Precondition
a.is_bool()
b.is_bool()

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

1451  {
1452  check_context(a, b);
1453  assert(a.is_bool() && b.is_bool());
1454  Z3_ast args[2] = { a, b };
1455  Z3_ast r = Z3_mk_or(a.ctx(), 2, args);
1456  a.check_error();
1457  return expr(a.ctx(), r);
1458  }
expr(context &c)
Definition: z3++.h:748
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].
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422

◆ operator|| [2/3]

expr operator|| ( expr const &  a,
bool  b 
)
friend

Return an expression representing a or b. The C++ Boolean value b is automatically converted into a Z3 Boolean constant.

Precondition
a.is_bool()

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

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

◆ operator|| [3/3]

expr operator|| ( bool  a,
expr const &  b 
)
friend

Return an expression representing a or b. The C++ Boolean value a is automatically converted into a Z3 Boolean constant.

Precondition
b.is_bool()

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

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

◆ operator~

expr operator~ ( expr const &  a)
friend

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

1755 { Z3_ast r = Z3_mk_bvnot(a.ctx(), a); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvnot(Z3_context c, Z3_ast t1)
Bitwise negation.

◆ pbeq

expr pbeq ( expr_vector const &  es,
int const *  coeffs,
int  bound 
)
friend

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

2081  {
2082  assert(es.size() > 0);
2083  context& ctx = es[0].ctx();
2084  array<Z3_ast> _es(es);
2085  Z3_ast r = Z3_mk_pbeq(ctx, _es.size(), _es.ptr(), coeffs, bound);
2086  ctx.check_error();
2087  return expr(ctx, r);
2088  }
expr(context &c)
Definition: z3++.h:748
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.
context & ctx() const
Definition: z3++.h:418

◆ pbge

expr pbge ( expr_vector const &  es,
int const *  coeffs,
int  bound 
)
friend

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

2073  {
2074  assert(es.size() > 0);
2075  context& ctx = es[0].ctx();
2076  array<Z3_ast> _es(es);
2077  Z3_ast r = Z3_mk_pbge(ctx, _es.size(), _es.ptr(), coeffs, bound);
2078  ctx.check_error();
2079  return expr(ctx, r);
2080  }
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
Z3_ast Z3_API Z3_mk_pbge(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.

◆ pble

expr pble ( expr_vector const &  es,
int const *  coeffs,
int  bound 
)
friend

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

2065  {
2066  assert(es.size() > 0);
2067  context& ctx = es[0].ctx();
2068  array<Z3_ast> _es(es);
2069  Z3_ast r = Z3_mk_pble(ctx, _es.size(), _es.ptr(), coeffs, bound);
2070  ctx.check_error();
2071  return expr(ctx, r);
2072  }
expr(context &c)
Definition: z3++.h:748
context & ctx() const
Definition: z3++.h:418
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.

◆ pw [1/3]

expr pw ( expr const &  a,
expr const &  b 
)
friend

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

1395 { _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.
#define _Z3_MK_BIN_(a, b, binop)
Definition: z3++.h:1380

◆ pw [2/3]

expr pw ( expr const &  a,
int  b 
)
friend

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

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

◆ pw [3/3]

expr pw ( int  a,
expr const &  b 
)
friend

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

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

◆ range

expr range ( expr const &  lo,
expr const &  hi 
)
friend

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

3518  {
3519  check_context(lo, hi);
3520  Z3_ast r = Z3_mk_re_range(lo.ctx(), lo, hi);
3521  lo.check_error();
3522  return expr(lo.ctx(), r);
3523  }
expr(context &c)
Definition: z3++.h:748
unsigned lo() const
Definition: z3++.h:1267
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
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.
unsigned hi() const
Definition: z3++.h:1268

◆ rem [1/3]

expr rem ( expr const &  a,
expr const &  b 
)
friend

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

1415  {
1416  if (a.is_fpa() && b.is_fpa()) {
1417  _Z3_MK_BIN_(a, b, Z3_mk_fpa_rem);
1418  } else {
1419  _Z3_MK_BIN_(a, b, Z3_mk_rem);
1420  }
1421  }
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.
#define _Z3_MK_BIN_(a, b, binop)
Definition: z3++.h:1380

◆ rem [2/3]

expr rem ( expr const &  a,
int  b 
)
friend

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

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

◆ rem [3/3]

expr rem ( int  a,
expr const &  b 
)
friend

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

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

◆ sqrt

expr sqrt ( expr const &  a,
expr const &  rm 
)
friend

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

1748  {
1749  check_context(a, rm);
1750  assert(a.is_fpa());
1751  Z3_ast r = Z3_mk_fpa_sqrt(a.ctx(), rm, a);
1752  a.check_error();
1753  return expr(a.ctx(), r);
1754  }
expr(context &c)
Definition: z3++.h:748
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422
Z3_ast Z3_API Z3_mk_fpa_sqrt(Z3_context c, Z3_ast rm, Z3_ast t)
Floating-point square root.

◆ sum

expr sum ( expr_vector const &  args)
friend

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

2105  {
2106  assert(args.size() > 0);
2107  context& ctx = args[0].ctx();
2108  array<Z3_ast> _args(args);
2109  Z3_ast r = Z3_mk_add(ctx, _args.size(), _args.ptr());
2110  ctx.check_error();
2111  return expr(ctx, r);
2112  }
expr(context &c)
Definition: z3++.h:748
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].
context & ctx() const
Definition: z3++.h:418

◆ xnor

expr xnor ( expr const &  a,
expr const &  b 
)
friend

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

1701 { if (a.is_bool()) return !(a ^ b); check_context(a, b); Z3_ast r = Z3_mk_bvxnor(a.ctx(), a, b); return expr(a.ctx(), r); }
expr(context &c)
Definition: z3++.h:748
Z3_ast Z3_API Z3_mk_bvxnor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise xnor.
friend void check_context(object const &a, object const &b)
Definition: z3++.h:422