Z3
Data Structures | 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:

Data Structures

class  iterator
 

Public Member Functions

 expr (context &c)
 
 expr (context &c, Z3_ast 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
 
double as_double () const
 
uint64_t as_uint64 () const
 
int64_t as_int64 () 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...
 
expr mk_is_inf () const
 Return Boolean expression to test for whether an FP expression is inf. More...
 
expr mk_is_nan () const
 Return Boolean expression to test for whether an FP expression is a NaN. More...
 
expr mk_is_normal () const
 Return Boolean expression to test for whether an FP expression is a normal. More...
 
expr mk_is_subnormal () const
 Return Boolean expression to test for whether an FP expression is a subnormal. More...
 
expr mk_is_zero () const
 Return Boolean expression to test for whether an FP expression is a zero. More...
 
expr mk_to_ieee_bv () const
 Convert this fpa into an IEEE BV. More...
 
expr mk_from_ieee_bv (sort const &s) const
 Convert this IEEE BV into a fpa. 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_string () const
 for a string value expression return an escaped string value. More...
 
std::u32string get_u32string () const
 for a string value expression return an unespaced string value. More...
 
 operator Z3_app () const
 
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) const
 
expr at (expr const &index) const
 
expr nth (expr const &index) const
 
expr length () const
 
expr stoi () const
 
expr itos () const
 
expr ubvtos () const
 
expr sbvtos () const
 
expr char_to_int () const
 
expr char_to_bv () const
 
expr char_from_bv () const
 
expr is_digit () 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...
 
iterator begin ()
 
iterator end ()
 
- 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)
 
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_xor (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 bvredor (expr const &a)
 
expr bvredand (expr const &a)
 
expr abs (expr const &a)
 
expr sqrt (expr const &a, expr const &rm)
 
expr fp_eq (expr const &a, expr const &b)
 
expr operator~ (expr const &a)
 
expr fma (expr const &a, expr const &b, expr const &c, expr const &rm)
 FloatingPoint fused multiply-add. More...
 
expr fpa_fp (expr const &sgn, expr const &exp, expr const &sig)
 Create an expression of FloatingPoint sort from three bit-vector expressions. More...
 
expr fpa_to_sbv (expr const &t, unsigned sz)
 Conversion of a floating-point term into a signed bit-vector. More...
 
expr fpa_to_ubv (expr const &t, unsigned sz)
 Conversion of a floating-point term into an unsigned bit-vector. More...
 
expr sbv_to_fpa (expr const &t, sort s)
 Conversion of a signed bit-vector term into a floating-point. More...
 
expr ubv_to_fpa (expr const &t, sort s)
 Conversion of an unsigned bit-vector term into a floating-point. More...
 
expr fpa_to_fpa (expr const &t, sort s)
 Conversion of a floating-point term into another floating-point. More...
 
expr round_fpa_to_closest_integer (expr const &t)
 Round a floating-point term into its closest integer. 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 756 of file z3++.h.

Constructor & Destructor Documentation

◆ expr() [1/2]

expr ( context c)
inline

◆ expr() [2/2]

expr ( context c,
Z3_ast  n 
)
inline

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

759 :ast(c, reinterpret_cast<Z3_ast>(n)) {}

Member Function Documentation

◆ algebraic_i()

unsigned algebraic_i ( ) const
inline

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

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

992  {
993  assert(is_algebraic());
994  unsigned i = Z3_algebraic_get_i(ctx(), m_ast);
995  check_error();
996  return i;
997  }
Z3_ast m_ast
Definition: z3++.h:507
bool is_algebraic() const
Return true if expression is an algebraic number.
Definition: z3++.h:874
context & ctx() const
Definition: z3++.h:429
Z3_error_code check_error() const
Definition: z3++.h:430
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 965 of file z3++.h.

965  {
966  assert(is_algebraic());
967  Z3_ast r = Z3_get_algebraic_number_lower(ctx(), m_ast, precision);
968  check_error();
969  return expr(ctx(), r);
970  }
expr(context &c)
Definition: z3++.h:758
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 982 of file z3++.h.

982  {
983  assert(is_algebraic());
984  Z3_ast_vector r = Z3_algebraic_get_poly(ctx(), m_ast);
985  check_error();
986  return expr_vector(ctx(), r);
987  }
Z3_ast_vector Z3_API Z3_algebraic_get_poly(Z3_context c, Z3_ast a)
Return the coefficients of the defining polynomial.
ast_vector_tpl< expr > expr_vector
Definition: z3++.h:73

◆ algebraic_upper()

expr algebraic_upper ( unsigned  precision) const
inline

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

972  {
973  assert(is_algebraic());
974  Z3_ast r = Z3_get_algebraic_number_upper(ctx(), m_ast, precision);
975  check_error();
976  return expr(ctx(), r);
977  }
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...

◆ 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 1153 of file z3++.h.

1153 { Z3_ast r = Z3_get_app_arg(ctx(), *this, i); check_error(); return expr(ctx(), r); }
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.

Referenced by AstRef::__bool__(), ExprRef::children(), and expr::iterator::operator*().

◆ as_binary()

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

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

834 { if (!is_numeral()) return false; s = Z3_get_numeral_binary_string(ctx(), m_ast); check_error(); return true; }
bool is_numeral() const
Return true if this expression is a numeral. Specialized functions also return representations for th...
Definition: z3++.h:826
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.

◆ as_double()

double as_double ( ) const
inline

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

836 { double d = 0; is_numeral(d); return d; }

◆ as_int64()

int64_t as_int64 ( ) const
inline

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

838 { int64_t r = 0; is_numeral_i64(r); return r; }
bool is_numeral_i64(int64_t &i) const
Definition: z3++.h:827

◆ as_uint64()

uint64_t as_uint64 ( ) const
inline

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

837 { uint64_t r = 0; is_numeral_u64(r); return r; }
bool is_numeral_u64(uint64_t &i) const
Definition: z3++.h:828

◆ at()

expr at ( expr const &  index) const
inline

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

1419  {
1420  check_context(*this, index);
1421  Z3_ast r = Z3_mk_seq_at(ctx(), *this, index);
1422  check_error();
1423  return expr(ctx(), r);
1424  }
friend void check_context(object const &a, object const &b)
Definition: z3++.h:433
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...

◆ begin()

iterator begin ( )
inline

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

1543 { return iterator(*this, 0); }

◆ body()

expr body ( ) const
inline

Return the 'body' of this quantifier.

Precondition
is_quantifier()

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

1160 { assert(is_quantifier()); Z3_ast r = Z3_get_quantifier_body(ctx(), *this); check_error(); return expr(ctx(), r); }
bool is_quantifier() const
Return true if this expression is a quantifier.
Definition: z3++.h:852
Z3_ast Z3_API Z3_get_quantifier_body(Z3_context c, Z3_ast a)
Return body of quantifier.

Referenced by QuantifierRef::children().

◆ bool_value()

Z3_lbool bool_value ( ) const
inline

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

1078  {
1079  return Z3_get_bool_value(ctx(), m_ast);
1080  }
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.

◆ char_from_bv()

expr char_from_bv ( ) const
inline

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

1466  {
1467  Z3_ast r = Z3_mk_char_from_bv(ctx(), *this);
1468  check_error();
1469  return expr(ctx(), r);
1470  }
Z3_ast Z3_API Z3_mk_char_from_bv(Z3_context c, Z3_ast bv)
Create a character from a bit-vector (code point).

◆ char_to_bv()

expr char_to_bv ( ) const
inline

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

1461  {
1462  Z3_ast r = Z3_mk_char_to_bv(ctx(), *this);
1463  check_error();
1464  return expr(ctx(), r);
1465  }
Z3_ast Z3_API Z3_mk_char_to_bv(Z3_context c, Z3_ast ch)
Create a bit-vector (code point) from character.

◆ char_to_int()

expr char_to_int ( ) const
inline

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

1456  {
1457  Z3_ast r = Z3_mk_char_to_int(ctx(), *this);
1458  check_error();
1459  return expr(ctx(), r);
1460  }
Z3_ast Z3_API Z3_mk_char_to_int(Z3_context c, Z3_ast ch)
Create an integer (code point) from character.

◆ contains()

expr contains ( expr const &  s) const
inline

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

1413  {
1414  check_context(*this, s);
1415  Z3_ast r = Z3_mk_seq_contains(ctx(), *this, s);
1416  check_error();
1417  return expr(ctx(), r);
1418  }
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 1138 of file z3++.h.

1138 { Z3_func_decl f = Z3_get_app_decl(ctx(), *this); check_error(); return func_decl(ctx(), f); }
Z3_func_decl Z3_API Z3_get_app_decl(Z3_context c, Z3_app a)
Return the declaration of a constant or function application.

Referenced by expr::hi(), expr::is_and(), expr::is_distinct(), expr::is_eq(), expr::is_false(), expr::is_implies(), expr::is_ite(), expr::is_not(), expr::is_or(), expr::is_true(), expr::is_xor(), expr::lo(), and ExprRef::params().

◆ denominator()

expr denominator ( ) const
inline

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

1090  {
1091  assert(is_numeral());
1092  Z3_ast r = Z3_get_denominator(ctx(), m_ast);
1093  check_error();
1094  return expr(ctx(),r);
1095  }
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.

Referenced by RatNumRef::denominator_as_long(), and RatNumRef::is_int_value().

◆ end()

iterator end ( )
inline

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

1544 { return iterator(*this, is_app() ? num_args() : 0); }
bool is_app() const
Return true if this expression is an application.
Definition: z3++.h:844
unsigned num_args() const
Return the number of arguments in this application. This method assumes the expression is an applicat...
Definition: z3++.h:1145

◆ extract() [1/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 1398 of file z3++.h.

1398  {
1399  check_context(*this, offset); check_context(offset, length);
1400  Z3_ast r = Z3_mk_seq_extract(ctx(), *this, offset, length); check_error(); return expr(ctx(), r);
1401  }
expr length() const
Definition: z3++.h:1431
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.

◆ extract() [2/2]

expr extract ( unsigned  hi,
unsigned  lo 
) const
inline

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

1349 { 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:188
unsigned hi() const
Definition: z3++.h:1351
unsigned lo() const
Definition: z3++.h:1350
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,...

◆ 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 957 of file z3++.h.

957  {
958  assert(is_numeral() || is_algebraic());
959  return std::string(Z3_get_numeral_decimal_string(ctx(), m_ast, precision));
960  }
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.

◆ 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 1014 of file z3++.h.

1014  {
1015  int result = 0;
1016  if (!is_numeral_i(result)) {
1017  assert(ctx().enable_exceptions());
1018  if (!ctx().enable_exceptions()) return 0;
1019  Z3_THROW(exception("numeral does not fit in machine int"));
1020  }
1021  return result;
1022  }
bool is_numeral_i(int &i) const
Definition: z3++.h:829
#define Z3_THROW(x)
Definition: z3++.h:100

◆ 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 1050 of file z3++.h.

1050  {
1051  assert(is_numeral());
1052  int64_t result = 0;
1053  if (!is_numeral_i64(result)) {
1054  assert(ctx().enable_exceptions());
1055  if (!ctx().enable_exceptions()) return 0;
1056  Z3_THROW(exception("numeral does not fit in machine int64_t"));
1057  }
1058  return result;
1059  }

◆ 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 1033 of file z3++.h.

1033  {
1034  assert(is_numeral());
1035  unsigned result = 0;
1036  if (!is_numeral_u(result)) {
1037  assert(ctx().enable_exceptions());
1038  if (!ctx().enable_exceptions()) return 0;
1039  Z3_THROW(exception("numeral does not fit in machine uint"));
1040  }
1041  return result;
1042  }
bool is_numeral_u(unsigned &i) const
Definition: z3++.h:830

◆ 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 1067 of file z3++.h.

1067  {
1068  assert(is_numeral());
1069  uint64_t result = 0;
1070  if (!is_numeral_u64(result)) {
1071  assert(ctx().enable_exceptions());
1072  if (!ctx().enable_exceptions()) return 0;
1073  Z3_THROW(exception("numeral does not fit in machine uint64_t"));
1074  }
1075  return result;
1076  }

◆ get_sort()

sort get_sort ( ) const
inline

Return the sort of this expression.

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

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

Referenced by z3::ashr(), expr::is_arith(), expr::is_array(), expr::is_bool(), expr::is_bv(), expr::is_datatype(), expr::is_finite_domain(), expr::is_fpa(), expr::is_int(), expr::is_re(), expr::is_real(), expr::is_relation(), expr::is_seq(), z3::lshr(), z3::select(), z3::sge(), z3::sgt(), z3::shl(), z3::sle(), z3::slt(), z3::smod(), ModelRef::sorts(), z3::srem(), z3::store(), z3::udiv(), z3::uge(), z3::ugt(), z3::ule(), z3::ult(), and z3::urem().

◆ get_string()

std::string get_string ( ) const
inline

for a string value expression return an escaped string value.

Precondition
expression is for a string value.

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

1109  {
1110  assert(is_string_value());
1111  char const* s = Z3_get_string(ctx(), m_ast);
1112  check_error();
1113  return std::string(s);
1114  }
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:1102
Z3_string Z3_API Z3_get_string(Z3_context c, Z3_ast s)
Retrieve the string constant stored in s. Characters outside the basic printiable ASCII range are esc...

◆ get_u32string()

std::u32string get_u32string ( ) const
inline

for a string value expression return an unespaced string value.

Precondition
expression is for a string value.

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

1121  {
1122  assert(is_string_value());
1123  unsigned n = Z3_get_string_length(ctx(), m_ast);
1124  std::u32string s;
1125  s.resize(n);
1126  Z3_get_string_contents(ctx(), m_ast, n, (unsigned*)s.data());
1127  return s;
1128  }
void Z3_API Z3_get_string_contents(Z3_context c, Z3_ast s, unsigned length, unsigned contents[])
Retrieve the unescaped string constant stored in s.
unsigned Z3_API Z3_get_string_length(Z3_context c, Z3_ast s)
Retrieve the length of the unescaped string constant stored in s.

◆ hi()

unsigned hi ( ) const
inline

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

1351 { 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:1138
unsigned Z3_API Z3_get_decl_num_parameters(Z3_context c, Z3_func_decl d)
Return the number of parameters associated with a declaration.
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.

Referenced by expr::extract(), and expr::loop().

◆ id()

unsigned id ( ) const
inline

retrieve unique identifier for expression.

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

1002 { unsigned r = Z3_get_ast_id(ctx(), m_ast); check_error(); return r; }
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....

◆ is_algebraic()

bool is_algebraic ( ) const
inline

Return true if expression is an algebraic number.

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

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

Referenced by expr::algebraic_i(), expr::algebraic_lower(), expr::algebraic_poly(), expr::algebraic_upper(), and expr::get_decimal_string().

◆ is_and()

bool is_and ( ) const
inline

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

1229 { return is_app() && Z3_OP_AND == decl().decl_kind(); }
Z3_decl_kind decl_kind() const
Definition: z3++.h:725
@ Z3_OP_AND
Definition: z3_api.h:1008

◆ is_app()

bool is_app ( ) const
inline

Return true if this expression is an application.

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

844 { return kind() == Z3_APP_AST || kind() == Z3_NUMERAL_AST; }
Z3_ast_kind kind() const
Definition: z3++.h:523
@ Z3_APP_AST
Definition: z3_api.h:183
@ Z3_NUMERAL_AST
Definition: z3_api.h:182

Referenced by expr::end(), expr::hi(), expr::is_and(), expr::is_const(), expr::is_distinct(), expr::is_eq(), expr::is_false(), expr::is_implies(), expr::is_ite(), expr::is_not(), expr::is_or(), expr::is_true(), expr::is_xor(), expr::lo(), and expr::operator Z3_app().

◆ is_arith()

bool is_arith ( ) const
inline

Return true if this is an integer or real expression.

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

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

◆ is_array()

bool is_array ( ) const
inline

Return true if this is a Array expression.

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

789 { return get_sort().is_array(); }
bool is_array() const
Return true if this sort is a Array sort.
Definition: z3++.h:654

Referenced by expr::operator[]().

◆ is_bool()

bool is_bool ( ) const
inline

Return true if this is a Boolean expression.

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

769 { return get_sort().is_bool(); }
bool is_bool() const
Return true if this sort is the Boolean sort.
Definition: z3++.h:634

Referenced by solver::add(), optimize::add(), and optimize::add_soft().

◆ is_bv()

bool is_bv ( ) const
inline

Return true if this is a Bit-vector expression.

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

785 { return get_sort().is_bv(); }
bool is_bv() const
Return true if this sort is a Bit-vector sort.
Definition: z3++.h:650

Referenced by expr::mk_from_ieee_bv().

◆ 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 848 of file z3++.h.

848 { return is_app() && num_args() == 0; }

Referenced by solver::add().

◆ is_datatype()

bool is_datatype ( ) const
inline

Return true if this is a Datatype expression.

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

793 { return get_sort().is_datatype(); }
bool is_datatype() const
Return true if this sort is a Datatype sort.
Definition: z3++.h:658

◆ is_digit()

expr is_digit ( ) const
inline

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

1471  {
1472  Z3_ast r = Z3_mk_char_is_digit(ctx(), *this);
1473  check_error();
1474  return expr(ctx(), r);
1475  }
Z3_ast Z3_API Z3_mk_char_is_digit(Z3_context c, Z3_ast ch)
Create a check if the character is a digit.

◆ is_distinct()

bool is_distinct ( ) const
inline

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

1235 { return is_app() && Z3_OP_DISTINCT == decl().decl_kind(); }
@ Z3_OP_DISTINCT
Definition: z3_api.h:1006

◆ is_eq()

bool is_eq ( ) const
inline

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

1233 { return is_app() && Z3_OP_EQ == decl().decl_kind(); }
@ Z3_OP_EQ
Definition: z3_api.h:1005

◆ is_exists()

bool is_exists ( ) const
inline

Return true if this expression is an existential quantifier.

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

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

◆ is_false()

bool is_false ( ) const
inline

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

1227 { return is_app() && Z3_OP_FALSE == decl().decl_kind(); }
@ Z3_OP_FALSE
Definition: z3_api.h:1004

◆ 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 815 of file z3++.h.

815 { return get_sort().is_finite_domain(); }
bool is_finite_domain() const
Return true if this sort is a Finite domain sort.
Definition: z3++.h:674

◆ is_forall()

bool is_forall ( ) const
inline

Return true if this expression is a universal quantifier.

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

857 { return Z3_is_quantifier_forall(ctx(), m_ast); }
bool Z3_API Z3_is_quantifier_forall(Z3_context c, Z3_ast a)
Determine if an ast is a universal quantifier.

◆ is_fpa()

bool is_fpa ( ) const
inline

Return true if this is a FloatingPoint expression. .

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

819 { return get_sort().is_fpa(); }
bool is_fpa() const
Return true if this sort is a Floating point sort.
Definition: z3++.h:678

Referenced by expr::mk_is_inf(), expr::mk_is_nan(), expr::mk_is_normal(), expr::mk_is_subnormal(), expr::mk_is_zero(), expr::mk_to_ieee_bv(), z3::operator!=(), and z3::operator==().

◆ is_implies()

bool is_implies ( ) const
inline

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

1232 { return is_app() && Z3_OP_IMPLIES == decl().decl_kind(); }
@ Z3_OP_IMPLIES
Definition: z3_api.h:1013

◆ is_int()

bool is_int ( ) const
inline

Return true if this is an integer expression.

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

773 { return get_sort().is_int(); }
bool is_int() const
Return true if this sort is the Integer sort.
Definition: z3++.h:638

Referenced by IntNumRef::as_long(), and ArithSortRef::subsort().

◆ is_ite()

bool is_ite ( ) const
inline

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

1234 { return is_app() && Z3_OP_ITE == decl().decl_kind(); }
@ Z3_OP_ITE
Definition: z3_api.h:1007

◆ is_lambda()

bool is_lambda ( ) const
inline

Return true if this expression is a lambda expression.

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

865 { return Z3_is_lambda(ctx(), m_ast); }
bool Z3_API Z3_is_lambda(Z3_context c, Z3_ast a)
Determine if ast is a lambda expression.

Referenced by QuantifierRef::__getitem__(), and QuantifierRef::sort().

◆ is_not()

bool is_not ( ) const
inline

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

1228 { return is_app() && Z3_OP_NOT == decl().decl_kind(); }
@ Z3_OP_NOT
Definition: z3_api.h:1012

◆ 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 826 of file z3++.h.

826 { return kind() == Z3_NUMERAL_AST; }

Referenced by expr::as_binary(), expr::as_double(), expr::denominator(), expr::get_decimal_string(), expr::get_numeral_int64(), expr::get_numeral_uint(), expr::get_numeral_uint64(), and expr::numerator().

◆ is_numeral() [2/4]

bool is_numeral ( double &  d) const
inline

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

833 { if (!is_numeral()) return false; d = Z3_get_numeral_double(ctx(), m_ast); check_error(); return true; }
double Z3_API Z3_get_numeral_double(Z3_context c, Z3_ast a)
Return numeral as a double.

Referenced by expr::is_numeral().

◆ is_numeral() [3/4]

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

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

831 { if (!is_numeral()) return false; s = Z3_get_numeral_string(ctx(), m_ast); check_error(); return true; }
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.

Referenced by expr::is_numeral().

◆ is_numeral() [4/4]

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

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

832 { if (!is_numeral()) return false; s = Z3_get_numeral_decimal_string(ctx(), m_ast, precision); check_error(); return true; }

Referenced by expr::is_numeral().

◆ is_numeral_i()

bool is_numeral_i ( int &  i) const
inline

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

829 { bool r = Z3_get_numeral_int(ctx(), m_ast, &i); check_error(); return r;}
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....

Referenced by expr::get_numeral_int().

◆ is_numeral_i64()

bool is_numeral_i64 ( int64_t &  i) const
inline

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

827 { bool r = Z3_get_numeral_int64(ctx(), m_ast, &i); check_error(); return r;}
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....

Referenced by expr::as_int64(), and expr::get_numeral_int64().

◆ is_numeral_u()

bool is_numeral_u ( unsigned &  i) const
inline

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

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

Referenced by expr::get_numeral_uint().

◆ is_numeral_u64()

bool is_numeral_u64 ( uint64_t &  i) const
inline

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

828 { bool r = Z3_get_numeral_uint64(ctx(), m_ast, &i); check_error(); return r;}
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....

Referenced by expr::as_uint64(), and expr::get_numeral_uint64().

◆ is_or()

bool is_or ( ) const
inline

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

1230 { return is_app() && Z3_OP_OR == decl().decl_kind(); }
@ Z3_OP_OR
Definition: z3_api.h:1009

◆ is_quantifier()

bool is_quantifier ( ) const
inline

Return true if this expression is a quantifier.

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

852 { return kind() == Z3_QUANTIFIER_AST; }
@ Z3_QUANTIFIER_AST
Definition: z3_api.h:185

Referenced by expr::body().

◆ is_re()

bool is_re ( ) const
inline

Return true if this is a regular expression.

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

805 { return get_sort().is_re(); }
bool is_re() const
Return true if this sort is a regular expression sort.
Definition: z3++.h:670

◆ is_real()

bool is_real ( ) const
inline

Return true if this is a real expression.

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

777 { return get_sort().is_real(); }
bool is_real() const
Return true if this sort is the Real sort.
Definition: z3++.h:642

◆ is_relation()

bool is_relation ( ) const
inline

Return true if this is a Relation expression.

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

797 { return get_sort().is_relation(); }
bool is_relation() const
Return true if this sort is a Relation sort.
Definition: z3++.h:662

◆ is_seq()

bool is_seq ( ) const
inline

Return true if this is a sequence expression.

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

801 { return get_sort().is_seq(); }
bool is_seq() const
Return true if this sort is a Sequence sort.
Definition: z3++.h:666

Referenced by expr::operator[]().

◆ 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 1102 of file z3++.h.

1102 { return Z3_is_string(ctx(), m_ast); }
bool Z3_API Z3_is_string(Z3_context c, Z3_ast s)
Determine if s is a string constant.

Referenced by SeqRef::as_string(), expr::get_string(), and expr::get_u32string().

◆ is_true()

bool is_true ( ) const
inline

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

1226 { return is_app() && Z3_OP_TRUE == decl().decl_kind(); }
@ Z3_OP_TRUE
Definition: z3_api.h:1003

◆ is_var()

bool is_var ( ) const
inline

Return true if this expression is a variable.

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

870 { return kind() == Z3_VAR_AST; }
@ Z3_VAR_AST
Definition: z3_api.h:184

◆ is_well_sorted()

bool is_well_sorted ( ) const
inline

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

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

879 { bool r = Z3_is_well_sorted(ctx(), m_ast); check_error(); return r; }
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 1231 of file z3++.h.

1231 { return is_app() && Z3_OP_XOR == decl().decl_kind(); }
@ Z3_OP_XOR
Definition: z3_api.h:1011

◆ itos()

expr itos ( ) const
inline

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

1441  {
1442  Z3_ast r = Z3_mk_int_to_str(ctx(), *this);
1443  check_error();
1444  return expr(ctx(), r);
1445  }
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 1431 of file z3++.h.

1431  {
1432  Z3_ast r = Z3_mk_seq_length(ctx(), *this);
1433  check_error();
1434  return expr(ctx(), r);
1435  }
Z3_ast Z3_API Z3_mk_seq_length(Z3_context c, Z3_ast s)
Return the length of the sequence s.

Referenced by expr::extract().

◆ lo()

unsigned lo ( ) const
inline

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

1350 { assert (is_app() && Z3_get_decl_num_parameters(ctx(), decl()) == 2); return static_cast<unsigned>(Z3_get_decl_int_parameter(ctx(), decl(), 1)); }

Referenced by expr::extract(), and expr::loop().

◆ loop() [1/2]

expr loop ( unsigned  lo)
inline

create a looping regular expression.

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

1481  {
1482  Z3_ast r = Z3_mk_re_loop(ctx(), m_ast, lo, 0);
1483  check_error();
1484  return expr(ctx(), r);
1485  }
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...

◆ loop() [2/2]

expr loop ( unsigned  lo,
unsigned  hi 
)
inline

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

1486  {
1487  Z3_ast r = Z3_mk_re_loop(ctx(), m_ast, lo, hi);
1488  check_error();
1489  return expr(ctx(), r);
1490  }

◆ mk_from_ieee_bv()

expr mk_from_ieee_bv ( sort const &  s) const
inline

Convert this IEEE BV into a fpa.

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

944  {
945  assert(is_bv());
946  Z3_ast r = Z3_mk_fpa_to_fp_bv(ctx(), m_ast, s);
947  check_error();
948  return expr(ctx(), r);
949  }
bool is_bv() const
Return true if this is a Bit-vector expression.
Definition: z3++.h:785
Z3_ast Z3_API Z3_mk_fpa_to_fp_bv(Z3_context c, Z3_ast bv, Z3_sort s)
Conversion of a single IEEE 754-2008 bit-vector into a floating-point number.

◆ mk_is_inf()

expr mk_is_inf ( ) const
inline

Return Boolean expression to test for whether an FP expression is inf.

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

884  {
885  assert(is_fpa());
886  Z3_ast r = Z3_mk_fpa_is_infinite(ctx(), m_ast);
887  check_error();
888  return expr(ctx(), r);
889  }
bool is_fpa() const
Return true if this is a FloatingPoint expression. .
Definition: z3++.h:819
Z3_ast Z3_API Z3_mk_fpa_is_infinite(Z3_context c, Z3_ast t)
Predicate indicating whether t is a floating-point number representing +oo or -oo.

◆ mk_is_nan()

expr mk_is_nan ( ) const
inline

Return Boolean expression to test for whether an FP expression is a NaN.

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

894  {
895  assert(is_fpa());
896  Z3_ast r = Z3_mk_fpa_is_nan(ctx(), m_ast);
897  check_error();
898  return expr(ctx(), r);
899  }
Z3_ast Z3_API Z3_mk_fpa_is_nan(Z3_context c, Z3_ast t)
Predicate indicating whether t is a NaN.

◆ mk_is_normal()

expr mk_is_normal ( ) const
inline

Return Boolean expression to test for whether an FP expression is a normal.

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

904  {
905  assert(is_fpa());
906  Z3_ast r = Z3_mk_fpa_is_normal(ctx(), m_ast);
907  check_error();
908  return expr(ctx(), r);
909  }
Z3_ast Z3_API Z3_mk_fpa_is_normal(Z3_context c, Z3_ast t)
Predicate indicating whether t is a normal floating-point number.

◆ mk_is_subnormal()

expr mk_is_subnormal ( ) const
inline

Return Boolean expression to test for whether an FP expression is a subnormal.

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

914  {
915  assert(is_fpa());
916  Z3_ast r = Z3_mk_fpa_is_subnormal(ctx(), m_ast);
917  check_error();
918  return expr(ctx(), r);
919  }
Z3_ast Z3_API Z3_mk_fpa_is_subnormal(Z3_context c, Z3_ast t)
Predicate indicating whether t is a subnormal floating-point number.

◆ mk_is_zero()

expr mk_is_zero ( ) const
inline

Return Boolean expression to test for whether an FP expression is a zero.

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

924  {
925  assert(is_fpa());
926  Z3_ast r = Z3_mk_fpa_is_zero(ctx(), m_ast);
927  check_error();
928  return expr(ctx(), r);
929  }
Z3_ast Z3_API Z3_mk_fpa_is_zero(Z3_context c, Z3_ast t)
Predicate indicating whether t is a floating-point number with zero value, i.e., +zero or -zero.

◆ mk_to_ieee_bv()

expr mk_to_ieee_bv ( ) const
inline

Convert this fpa into an IEEE BV.

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

934  {
935  assert(is_fpa());
936  Z3_ast r = Z3_mk_fpa_to_ieee_bv(ctx(), m_ast);
937  check_error();
938  return expr(ctx(), r);
939  }
Z3_ast Z3_API Z3_mk_fpa_to_ieee_bv(Z3_context c, Z3_ast t)
Conversion of a floating-point term into a bit-vector term in IEEE 754-2008 format.

◆ nth()

expr nth ( expr const &  index) const
inline

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

1425  {
1426  check_context(*this, index);
1427  Z3_ast r = Z3_mk_seq_nth(ctx(), *this, index);
1428  check_error();
1429  return expr(ctx(), r);
1430  }
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...

Referenced by expr::operator[]().

◆ 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 1145 of file z3++.h.

1145 { unsigned r = Z3_get_app_num_args(ctx(), *this); check_error(); return r; }
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...

Referenced by AstRef::__bool__(), ExprRef::arg(), FuncEntry::arg_value(), FuncEntry::as_list(), ExprRef::children(), expr::end(), and expr::is_const().

◆ numerator()

expr numerator ( ) const
inline

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

1082  {
1083  assert(is_numeral());
1084  Z3_ast r = Z3_get_numerator(ctx(), m_ast);
1085  check_error();
1086  return expr(ctx(),r);
1087  }
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.

Referenced by RatNumRef::numerator_as_long().

◆ operator Z3_app()

operator Z3_app ( ) const
inline

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

1130 { assert(is_app()); return reinterpret_cast<Z3_app>(m_ast); }

◆ operator[]() [1/2]

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

index operator defined on arrays and sequences.

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

1495  {
1496  assert(is_array() || is_seq());
1497  if (is_array()) {
1498  return select(*this, index);
1499  }
1500  return nth(index);
1501  }
bool is_array() const
Return true if this is a Array expression.
Definition: z3++.h:789
expr nth(expr const &index) const
Definition: z3++.h:1425
bool is_seq() const
Return true if this is a sequence expression.
Definition: z3++.h:801
expr select(expr const &a, expr const &i)
forward declarations
Definition: z3++.h:3628

◆ operator[]() [2/2]

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

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

1503  {
1504  return select(*this, index);
1505  }

◆ repeat()

expr repeat ( unsigned  i)
inline

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

1339 { Z3_ast r = Z3_mk_repeat(ctx(), i, *this); ctx().check_error(); return expr(ctx(), r); }
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 1402 of file z3++.h.

1402  {
1403  check_context(*this, src); check_context(src, dst);
1404  Z3_ast r = Z3_mk_seq_replace(ctx(), *this, src, dst);
1405  check_error();
1406  return expr(ctx(), r);
1407  }
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.

◆ rotate_left()

expr rotate_left ( unsigned  i)
inline

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

1337 { Z3_ast r = Z3_mk_rotate_left(ctx(), i, *this); ctx().check_error(); return expr(ctx(), r); }
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 1338 of file z3++.h.

1338 { Z3_ast r = Z3_mk_rotate_right(ctx(), i, *this); ctx().check_error(); return expr(ctx(), r); }
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.

◆ sbvtos()

expr sbvtos ( ) const
inline

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

1451  {
1452  Z3_ast r = Z3_mk_sbv_to_str(ctx(), *this);
1453  check_error();
1454  return expr(ctx(), r);
1455  }
Z3_ast Z3_API Z3_mk_sbv_to_str(Z3_context c, Z3_ast s)
Signed bit-vector to string conversion.

◆ simplify() [1/2]

expr simplify ( ) const
inline

Return a simplified version of this expression.

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

1510 { Z3_ast r = Z3_simplify(ctx(), m_ast); check_error(); return expr(ctx(), r); }
Z3_ast Z3_API Z3_simplify(Z3_context c, Z3_ast a)
Interface to simplifier.

◆ 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 1514 of file z3++.h.

1514 { Z3_ast r = Z3_simplify_ex(ctx(), m_ast, p); check_error(); return expr(ctx(), r); }
Z3_ast Z3_API Z3_simplify_ex(Z3_context c, Z3_ast a, Z3_params p)
Interface to simplifier.

◆ stoi()

expr stoi ( ) const
inline

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

1436  {
1437  Z3_ast r = Z3_mk_str_to_int(ctx(), *this);
1438  check_error();
1439  return expr(ctx(), r);
1440  }
Z3_ast Z3_API Z3_mk_str_to_int(Z3_context c, Z3_ast s)
Convert string to integer.

◆ substitute() [1/2]

expr substitute ( expr_vector const &  dst)
inline

Apply substitution. Replace bound variables by expressions.

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

3880  {
3881  array<Z3_ast> _dst(dst.size());
3882  for (unsigned i = 0; i < dst.size(); ++i) {
3883  _dst[i] = dst[i];
3884  }
3885  Z3_ast r = Z3_substitute_vars(ctx(), m_ast, dst.size(), _dst.ptr());
3886  check_error();
3887  return expr(ctx(), r);
3888  }
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,...

◆ substitute() [2/2]

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

Apply substitution. Replace src expressions by dst.

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

3867  {
3868  assert(src.size() == dst.size());
3869  array<Z3_ast> _src(src.size());
3870  array<Z3_ast> _dst(dst.size());
3871  for (unsigned i = 0; i < src.size(); ++i) {
3872  _src[i] = src[i];
3873  _dst[i] = dst[i];
3874  }
3875  Z3_ast r = Z3_substitute(ctx(), m_ast, src.size(), _src.ptr(), _dst.ptr());
3876  check_error();
3877  return expr(ctx(), r);
3878  }
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....

◆ ubvtos()

expr ubvtos ( ) const
inline

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

1446  {
1447  Z3_ast r = Z3_mk_ubv_to_str(ctx(), *this);
1448  check_error();
1449  return expr(ctx(), r);
1450  }
Z3_ast Z3_API Z3_mk_ubv_to_str(Z3_context c, Z3_ast s)
Unsigned bit-vector to string conversion.

◆ unit()

expr unit ( ) const
inline

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

1408  {
1409  Z3_ast r = Z3_mk_seq_unit(ctx(), *this);
1410  check_error();
1411  return expr(ctx(), r);
1412  }
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 1919 of file z3++.h.

1919  {
1920  Z3_ast r;
1921  if (a.is_int()) {
1922  expr zero = a.ctx().int_val(0);
1923  expr ge = a >= zero;
1924  expr na = -a;
1925  r = Z3_mk_ite(a.ctx(), ge, a, na);
1926  }
1927  else if (a.is_real()) {
1928  expr zero = a.ctx().real_val(0);
1929  expr ge = a >= zero;
1930  expr na = -a;
1931  r = Z3_mk_ite(a.ctx(), ge, a, na);
1932  }
1933  else {
1934  r = Z3_mk_fpa_abs(a.ctx(), a);
1935  }
1936  a.check_error();
1937  return expr(a.ctx(), r);
1938  }
Z3_ast Z3_API Z3_mk_ite(Z3_context c, Z3_ast t1, Z3_ast t2, Z3_ast t3)
Create an AST node representing an if-then-else: ite(t1, t2, t3).
Z3_ast Z3_API Z3_mk_fpa_abs(Z3_context c, Z3_ast t)
Floating-point absolute value.

◆ atleast

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

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

2354  {
2355  assert(es.size() > 0);
2356  context& ctx = es[0].ctx();
2357  array<Z3_ast> _es(es);
2358  Z3_ast r = Z3_mk_atleast(ctx, _es.size(), _es.ptr(), bound);
2359  ctx.check_error();
2360  return expr(ctx, r);
2361  }
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 2346 of file z3++.h.

2346  {
2347  assert(es.size() > 0);
2348  context& ctx = es[0].ctx();
2349  array<Z3_ast> _es(es);
2350  Z3_ast r = Z3_mk_atmost(ctx, _es.size(), _es.ptr(), bound);
2351  ctx.check_error();
2352  return expr(ctx, r);
2353  }
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 2157 of file z3++.h.

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

◆ bvadd_no_overflow

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

bit-vector overflow/underflow checks

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

2163  {
2164  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);
2165  }
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 2166 of file z3++.h.

2166  {
2167  check_context(a, b); Z3_ast r = Z3_mk_bvadd_no_underflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2168  }
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 2181 of file z3++.h.

2181  {
2182  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);
2183  }
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 2184 of file z3++.h.

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

◆ bvneg_no_overflow

expr bvneg_no_overflow ( expr const &  a)
friend

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

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

◆ bvredand

expr bvredand ( expr const &  a)
friend

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

1913  {
1914  assert(a.is_bv());
1915  Z3_ast r = Z3_mk_bvredand(a.ctx(), a);
1916  a.check_error();
1917  return expr(a.ctx(), r);
1918  }
Z3_ast Z3_API Z3_mk_bvredand(Z3_context c, Z3_ast t1)
Take conjunction of bits in vector, return vector of length 1.

◆ bvredor

expr bvredor ( expr const &  a)
friend

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

1907  {
1908  assert(a.is_bv());
1909  Z3_ast r = Z3_mk_bvredor(a.ctx(), a);
1910  a.check_error();
1911  return expr(a.ctx(), r);
1912  }
Z3_ast Z3_API Z3_mk_bvredor(Z3_context c, Z3_ast t1)
Take disjunction of bits in vector, return vector of length 1.

◆ bvsdiv_no_overflow

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

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

2175  {
2176  check_context(a, b); Z3_ast r = Z3_mk_bvsdiv_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2177  }
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 2169 of file z3++.h.

2169  {
2170  check_context(a, b); Z3_ast r = Z3_mk_bvsub_no_overflow(a.ctx(), a, b); a.check_error(); return expr(a.ctx(), r);
2171  }
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 2172 of file z3++.h.

2172  {
2173  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);
2174  }
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.

◆ concat [1/2]

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

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

2380  {
2381  check_context(a, b);
2382  Z3_ast r;
2383  if (Z3_is_seq_sort(a.ctx(), a.get_sort())) {
2384  Z3_ast _args[2] = { a, b };
2385  r = Z3_mk_seq_concat(a.ctx(), 2, _args);
2386  }
2387  else if (Z3_is_re_sort(a.ctx(), a.get_sort())) {
2388  Z3_ast _args[2] = { a, b };
2389  r = Z3_mk_re_concat(a.ctx(), 2, _args);
2390  }
2391  else {
2392  r = Z3_mk_concat(a.ctx(), a, b);
2393  }
2394  a.ctx().check_error();
2395  return expr(a.ctx(), r);
2396  }
bool Z3_API Z3_is_seq_sort(Z3_context c, Z3_sort s)
Check if s is a sequence sort.
Z3_ast Z3_API Z3_mk_seq_concat(Z3_context c, unsigned n, Z3_ast const args[])
Concatenate sequences.
Z3_ast Z3_API Z3_mk_re_concat(Z3_context c, unsigned n, Z3_ast const args[])
Create the concatenation of the regular languages.
Z3_ast Z3_API Z3_mk_concat(Z3_context c, Z3_ast t1, Z3_ast t2)
Concatenate the given bit-vectors.
bool Z3_API Z3_is_re_sort(Z3_context c, Z3_sort s)
Check if s is a regular expression sort.

◆ concat [2/2]

expr concat ( expr_vector const &  args)
friend

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

2398  {
2399  Z3_ast r;
2400  assert(args.size() > 0);
2401  if (args.size() == 1) {
2402  return args[0];
2403  }
2404  context& ctx = args[0].ctx();
2405  array<Z3_ast> _args(args);
2406  if (Z3_is_seq_sort(ctx, args[0].get_sort())) {
2407  r = Z3_mk_seq_concat(ctx, _args.size(), _args.ptr());
2408  }
2409  else if (Z3_is_re_sort(ctx, args[0].get_sort())) {
2410  r = Z3_mk_re_concat(ctx, _args.size(), _args.ptr());
2411  }
2412  else {
2413  r = _args[args.size()-1];
2414  for (unsigned i = args.size()-1; i > 0; ) {
2415  --i;
2416  r = Z3_mk_concat(ctx, _args[i], r);
2417  ctx.check_error();
2418  }
2419  }
2420  ctx.check_error();
2421  return expr(ctx, r);
2422  }

◆ distinct

expr distinct ( expr_vector const &  args)
friend

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

2371  {
2372  assert(args.size() > 0);
2373  context& ctx = args[0].ctx();
2374  array<Z3_ast> _args(args);
2375  Z3_ast r = Z3_mk_distinct(ctx, _args.size(), _args.ptr());
2376  ctx.check_error();
2377  return expr(ctx, r);
2378  }
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]).

◆ fma

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

FloatingPoint fused multiply-add.

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

1955  {
1956  check_context(a, b); check_context(a, c); check_context(a, rm);
1957  assert(a.is_fpa() && b.is_fpa() && c.is_fpa());
1958  Z3_ast r = Z3_mk_fpa_fma(a.ctx(), rm, a, b, c);
1959  a.check_error();
1960  return expr(a.ctx(), r);
1961  }
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.

◆ fp_eq

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

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

1946  {
1947  check_context(a, b);
1948  assert(a.is_fpa());
1949  Z3_ast r = Z3_mk_fpa_eq(a.ctx(), a, b);
1950  a.check_error();
1951  return expr(a.ctx(), r);
1952  }
Z3_ast Z3_API Z3_mk_fpa_eq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point equality.

◆ fpa_fp

expr fpa_fp ( expr const &  sgn,
expr const &  exp,
expr const &  sig 
)
friend

Create an expression of FloatingPoint sort from three bit-vector expressions.

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

1963  {
1964  check_context(sgn, exp); check_context(exp, sig);
1965  assert(sgn.is_bv() && exp.is_bv() && sig.is_bv());
1966  Z3_ast r = Z3_mk_fpa_fp(sgn.ctx(), sgn, exp, sig);
1967  sgn.check_error();
1968  return expr(sgn.ctx(), r);
1969  }
Z3_ast Z3_API Z3_mk_fpa_fp(Z3_context c, Z3_ast sgn, Z3_ast exp, Z3_ast sig)
Create an expression of FloatingPoint sort from three bit-vector expressions.

◆ fpa_to_fpa

expr fpa_to_fpa ( expr const &  t,
sort  s 
)
friend

Conversion of a floating-point term into another floating-point.

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

1999  {
2000  assert(t.is_fpa());
2001  Z3_ast r = Z3_mk_fpa_to_fp_float(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
2002  t.check_error();
2003  return expr(t.ctx(), r);
2004  }
Z3_ast Z3_API Z3_mk_fpa_to_fp_float(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a FloatingPoint term into another term of different FloatingPoint sort.

◆ fpa_to_sbv

expr fpa_to_sbv ( expr const &  t,
unsigned  sz 
)
friend

Conversion of a floating-point term into a signed bit-vector.

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

1971  {
1972  assert(t.is_fpa());
1973  Z3_ast r = Z3_mk_fpa_to_sbv(t.ctx(), t.ctx().fpa_rounding_mode(), t, sz);
1974  t.check_error();
1975  return expr(t.ctx(), r);
1976  }
Z3_ast Z3_API Z3_mk_fpa_to_sbv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz)
Conversion of a floating-point term into a signed bit-vector.

◆ fpa_to_ubv

expr fpa_to_ubv ( expr const &  t,
unsigned  sz 
)
friend

Conversion of a floating-point term into an unsigned bit-vector.

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

1978  {
1979  assert(t.is_fpa());
1980  Z3_ast r = Z3_mk_fpa_to_ubv(t.ctx(), t.ctx().fpa_rounding_mode(), t, sz);
1981  t.check_error();
1982  return expr(t.ctx(), r);
1983  }
Z3_ast Z3_API Z3_mk_fpa_to_ubv(Z3_context c, Z3_ast rm, Z3_ast t, unsigned sz)
Conversion of a floating-point term into an unsigned bit-vector.

◆ implies [1/3]

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

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

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

◆ implies [2/3]

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

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

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

◆ implies [3/3]

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

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

1555  {
1556  assert(a.is_bool() && b.is_bool());
1557  _Z3_MK_BIN_(a, b, Z3_mk_implies);
1558  }
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:1548

◆ int2bv

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

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

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

◆ is_int

expr is_int ( expr const &  e)
friend

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

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

Referenced by IntNumRef::as_long(), and ArithSortRef::subsort().

◆ 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 2018 of file z3++.h.

2018  {
2019  check_context(c, t); check_context(c, e);
2020  assert(c.is_bool());
2021  Z3_ast r = Z3_mk_ite(c.ctx(), c, t, e);
2022  c.check_error();
2023  return expr(c.ctx(), r);
2024  }

◆ max

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

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

1892  {
1893  check_context(a, b);
1894  Z3_ast r;
1895  if (a.is_arith()) {
1896  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), a, b);
1897  }
1898  else if (a.is_bv()) {
1899  r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), a, b);
1900  }
1901  else {
1902  assert(a.is_fpa());
1903  r = Z3_mk_fpa_max(a.ctx(), a, b);
1904  }
1905  return expr(a.ctx(), r);
1906  }
Z3_ast Z3_API Z3_mk_ge(Z3_context c, Z3_ast t1, Z3_ast t2)
Create greater than or equal to.
Z3_ast Z3_API Z3_mk_fpa_max(Z3_context c, Z3_ast t1, Z3_ast t2)
Maximum of floating-point numbers.
Z3_ast Z3_API Z3_mk_bvuge(Z3_context c, Z3_ast t1, Z3_ast t2)
Unsigned greater than or equal to.

◆ min

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

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

1877  {
1878  check_context(a, b);
1879  Z3_ast r;
1880  if (a.is_arith()) {
1881  r = Z3_mk_ite(a.ctx(), Z3_mk_ge(a.ctx(), a, b), b, a);
1882  }
1883  else if (a.is_bv()) {
1884  r = Z3_mk_ite(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b), b, a);
1885  }
1886  else {
1887  assert(a.is_fpa());
1888  r = Z3_mk_fpa_min(a.ctx(), a, b);
1889  }
1890  return expr(a.ctx(), r);
1891  }
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 2430 of file z3++.h.

2430  {
2431  array<Z3_ast> _args(args);
2432  Z3_ast r = Z3_mk_and(args.ctx(), _args.size(), _args.ptr());
2433  args.check_error();
2434  return expr(args.ctx(), r);
2435  }
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 2424 of file z3++.h.

2424  {
2425  array<Z3_ast> _args(args);
2426  Z3_ast r = Z3_mk_or(args.ctx(), _args.size(), _args.ptr());
2427  args.check_error();
2428  return expr(args.ctx(), r);
2429  }
Z3_ast Z3_API Z3_mk_or(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] or ... or args[num_args-1].

◆ mk_xor

expr mk_xor ( expr_vector const &  args)
friend

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

2436  {
2437  if (args.empty())
2438  return args.ctx().bool_val(false);
2439  expr r = args[0];
2440  for (unsigned i = 1; i < args.size(); ++i)
2441  r = r ^ args[i];
2442  return r;
2443  }

◆ mod [1/3]

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

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

1567  {
1568  if (a.is_bv()) {
1569  _Z3_MK_BIN_(a, b, Z3_mk_bvsmod);
1570  }
1571  else {
1572  _Z3_MK_BIN_(a, b, Z3_mk_mod);
1573  }
1574  }
Z3_ast Z3_API Z3_mk_mod(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 mod arg2.
Z3_ast Z3_API Z3_mk_bvsmod(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed remainder (sign follows divisor).

◆ mod [2/3]

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

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

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

◆ mod [3/3]

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

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

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

◆ nand

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

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

1874 { 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); }
Z3_ast Z3_API Z3_mk_bvnand(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise nand.

◆ nor

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

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

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

◆ operator!

expr operator! ( expr const &  a)
friend

Return an expression representing not(a).

Precondition
a.is_bool()

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

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

◆ operator!= [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 args[2] = { a, b };
1646  Z3_ast r = Z3_mk_distinct(a.ctx(), 2, args);
1647  a.check_error();
1648  return expr(a.ctx(), r);
1649  }

◆ operator!= [2/3]

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

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

1650 { 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 1651 of file z3++.h.

1651 { 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 1862 of file z3++.h.

1862 { 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); }
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 1863 of file z3++.h.

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

◆ operator& [3/3]

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

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

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

◆ operator&& [1/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 1617 of file z3++.h.

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

◆ 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 1616 of file z3++.h.

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

◆ operator&& [3/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 1607 of file z3++.h.

1607  {
1608  check_context(a, b);
1609  assert(a.is_bool() && b.is_bool());
1610  Z3_ast args[2] = { a, b };
1611  Z3_ast r = Z3_mk_and(a.ctx(), 2, args);
1612  a.check_error();
1613  return expr(a.ctx(), r);
1614  }

◆ operator* [1/3]

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

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

1685  {
1686  check_context(a, b);
1687  Z3_ast r = 0;
1688  if (a.is_arith() && b.is_arith()) {
1689  Z3_ast args[2] = { a, b };
1690  r = Z3_mk_mul(a.ctx(), 2, args);
1691  }
1692  else if (a.is_bv() && b.is_bv()) {
1693  r = Z3_mk_bvmul(a.ctx(), a, b);
1694  }
1695  else if (a.is_fpa() && b.is_fpa()) {
1696  r = Z3_mk_fpa_mul(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1697  }
1698  else {
1699  // operator is not supported by given arguments.
1700  assert(false);
1701  }
1702  a.check_error();
1703  return expr(a.ctx(), r);
1704  }
Z3_ast Z3_API Z3_mk_mul(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] * ... * args[num_args-1].
Z3_ast Z3_API Z3_mk_bvmul(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two's complement multiplication.
Z3_ast Z3_API Z3_mk_fpa_mul(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point multiplication.

◆ operator* [2/3]

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

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

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

◆ operator* [3/3]

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

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

1706 { 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 1655 of file z3++.h.

1655  {
1656  check_context(a, b);
1657  Z3_ast r = 0;
1658  if (a.is_arith() && b.is_arith()) {
1659  Z3_ast args[2] = { a, b };
1660  r = Z3_mk_add(a.ctx(), 2, args);
1661  }
1662  else if (a.is_bv() && b.is_bv()) {
1663  r = Z3_mk_bvadd(a.ctx(), a, b);
1664  }
1665  else if (a.is_seq() && b.is_seq()) {
1666  return concat(a, b);
1667  }
1668  else if (a.is_re() && b.is_re()) {
1669  Z3_ast _args[2] = { a, b };
1670  r = Z3_mk_re_union(a.ctx(), 2, _args);
1671  }
1672  else if (a.is_fpa() && b.is_fpa()) {
1673  r = Z3_mk_fpa_add(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1674  }
1675  else {
1676  // operator is not supported by given arguments.
1677  assert(false);
1678  }
1679  a.check_error();
1680  return expr(a.ctx(), r);
1681  }
friend expr concat(expr const &a, expr const &b)
Definition: z3++.h:2380
Z3_ast Z3_API Z3_mk_re_union(Z3_context c, unsigned n, Z3_ast const args[])
Create the union of the regular languages.
Z3_ast Z3_API Z3_mk_bvadd(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two's complement addition.
Z3_ast Z3_API Z3_mk_fpa_add(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point addition.
Z3_ast Z3_API Z3_mk_add(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] + ... + args[num_args-1].

◆ operator+ [2/3]

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

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

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

◆ operator+ [3/3]

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

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

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

◆ operator- [1/4]

expr operator- ( expr const &  a)
friend

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

1751  {
1752  Z3_ast r = 0;
1753  if (a.is_arith()) {
1754  r = Z3_mk_unary_minus(a.ctx(), a);
1755  }
1756  else if (a.is_bv()) {
1757  r = Z3_mk_bvneg(a.ctx(), a);
1758  }
1759  else if (a.is_fpa()) {
1760  r = Z3_mk_fpa_neg(a.ctx(), a);
1761  }
1762  else {
1763  // operator is not supported by given arguments.
1764  assert(false);
1765  }
1766  a.check_error();
1767  return expr(a.ctx(), r);
1768  }
Z3_ast Z3_API Z3_mk_unary_minus(Z3_context c, Z3_ast arg)
Create an AST node representing - arg.
Z3_ast Z3_API Z3_mk_fpa_neg(Z3_context c, Z3_ast t)
Floating-point negation.
Z3_ast Z3_API Z3_mk_bvneg(Z3_context c, Z3_ast t1)
Standard two's complement unary minus.

◆ operator- [2/4]

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

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

1770  {
1771  check_context(a, b);
1772  Z3_ast r = 0;
1773  if (a.is_arith() && b.is_arith()) {
1774  Z3_ast args[2] = { a, b };
1775  r = Z3_mk_sub(a.ctx(), 2, args);
1776  }
1777  else if (a.is_bv() && b.is_bv()) {
1778  r = Z3_mk_bvsub(a.ctx(), a, b);
1779  }
1780  else if (a.is_fpa() && b.is_fpa()) {
1781  r = Z3_mk_fpa_sub(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1782  }
1783  else {
1784  // operator is not supported by given arguments.
1785  assert(false);
1786  }
1787  a.check_error();
1788  return expr(a.ctx(), r);
1789  }
Z3_ast Z3_API Z3_mk_fpa_sub(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point subtraction.
Z3_ast Z3_API Z3_mk_bvsub(Z3_context c, Z3_ast t1, Z3_ast t2)
Standard two's complement subtraction.
Z3_ast Z3_API Z3_mk_sub(Z3_context c, unsigned num_args, Z3_ast const args[])
Create an AST node representing args[0] - ... - args[num_args - 1].

◆ operator- [3/4]

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

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

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

◆ operator- [4/4]

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

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

1791 { 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 1729 of file z3++.h.

1729  {
1730  check_context(a, b);
1731  Z3_ast r = 0;
1732  if (a.is_arith() && b.is_arith()) {
1733  r = Z3_mk_div(a.ctx(), a, b);
1734  }
1735  else if (a.is_bv() && b.is_bv()) {
1736  r = Z3_mk_bvsdiv(a.ctx(), a, b);
1737  }
1738  else if (a.is_fpa() && b.is_fpa()) {
1739  r = Z3_mk_fpa_div(a.ctx(), a.ctx().fpa_rounding_mode(), a, b);
1740  }
1741  else {
1742  // operator is not supported by given arguments.
1743  assert(false);
1744  }
1745  a.check_error();
1746  return expr(a.ctx(), r);
1747  }
Z3_ast Z3_API Z3_mk_div(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 div arg2.
Z3_ast Z3_API Z3_mk_bvsdiv(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed division.
Z3_ast Z3_API Z3_mk_fpa_div(Z3_context c, Z3_ast rm, Z3_ast t1, Z3_ast t2)
Floating-point division.

◆ operator/ [2/3]

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

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

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

◆ operator/ [3/3]

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

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

1749 { 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 1818 of file z3++.h.

1818  {
1819  check_context(a, b);
1820  Z3_ast r = 0;
1821  if (a.is_arith() && b.is_arith()) {
1822  r = Z3_mk_lt(a.ctx(), a, b);
1823  }
1824  else if (a.is_bv() && b.is_bv()) {
1825  r = Z3_mk_bvslt(a.ctx(), a, b);
1826  }
1827  else if (a.is_fpa() && b.is_fpa()) {
1828  r = Z3_mk_fpa_lt(a.ctx(), a, b);
1829  }
1830  else {
1831  // operator is not supported by given arguments.
1832  assert(false);
1833  }
1834  a.check_error();
1835  return expr(a.ctx(), r);
1836  }
Z3_ast Z3_API Z3_mk_bvslt(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed less than.
Z3_ast Z3_API Z3_mk_lt(Z3_context c, Z3_ast t1, Z3_ast t2)
Create less than.
Z3_ast Z3_API Z3_mk_fpa_lt(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point less than.

◆ operator< [2/3]

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

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

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

◆ operator< [3/3]

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

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

1838 { 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 1793 of file z3++.h.

1793  {
1794  check_context(a, b);
1795  Z3_ast r = 0;
1796  if (a.is_arith() && b.is_arith()) {
1797  r = Z3_mk_le(a.ctx(), a, b);
1798  }
1799  else if (a.is_bv() && b.is_bv()) {
1800  r = Z3_mk_bvsle(a.ctx(), a, b);
1801  }
1802  else if (a.is_fpa() && b.is_fpa()) {
1803  r = Z3_mk_fpa_leq(a.ctx(), a, b);
1804  }
1805  else {
1806  // operator is not supported by given arguments.
1807  assert(false);
1808  }
1809  a.check_error();
1810  return expr(a.ctx(), r);
1811  }
Z3_ast Z3_API Z3_mk_bvsle(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed less than or equal to.
Z3_ast Z3_API Z3_mk_le(Z3_context c, Z3_ast t1, Z3_ast t2)
Create less than or equal to.
Z3_ast Z3_API Z3_mk_fpa_leq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point less than or equal.

◆ operator<= [2/3]

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

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

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

◆ operator<= [3/3]

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

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

1813 { 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 1632 of file z3++.h.

1632  {
1633  check_context(a, b);
1634  Z3_ast r = Z3_mk_eq(a.ctx(), a, b);
1635  a.check_error();
1636  return expr(a.ctx(), r);
1637  }
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 1638 of file z3++.h.

1638 { 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 1639 of file z3++.h.

1639 { 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 1840 of file z3++.h.

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

◆ operator> [2/3]

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

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

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

◆ operator> [3/3]

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

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

1860 { 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 1709 of file z3++.h.

1709  {
1710  check_context(a, b);
1711  Z3_ast r = 0;
1712  if (a.is_arith() && b.is_arith()) {
1713  r = Z3_mk_ge(a.ctx(), a, b);
1714  }
1715  else if (a.is_bv() && b.is_bv()) {
1716  r = Z3_mk_bvsge(a.ctx(), a, b);
1717  }
1718  else if (a.is_fpa() && b.is_fpa()) {
1719  r = Z3_mk_fpa_geq(a.ctx(), a, b);
1720  }
1721  else {
1722  // operator is not supported by given arguments.
1723  assert(false);
1724  }
1725  a.check_error();
1726  return expr(a.ctx(), r);
1727  }
Z3_ast Z3_API Z3_mk_bvsge(Z3_context c, Z3_ast t1, Z3_ast t2)
Two's complement signed greater than or equal to.
Z3_ast Z3_API Z3_mk_fpa_geq(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point greater than or equal.

◆ operator>= [2/3]

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

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

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

◆ operator>= [3/3]

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

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

1816 { 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 1866 of file z3++.h.

1866 { 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); }
Z3_ast Z3_API Z3_mk_bvxor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise exclusive-or.
Z3_ast Z3_API Z3_mk_xor(Z3_context c, Z3_ast t1, Z3_ast t2)
Create an AST node representing t1 xor t2.

◆ operator^ [2/3]

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

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

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

◆ operator^ [3/3]

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

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

1868 { 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 1870 of file z3++.h.

1870 { 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); }
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 1871 of file z3++.h.

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

◆ operator| [3/3]

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

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

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

◆ operator|| [1/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 1630 of file z3++.h.

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

◆ 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 1628 of file z3++.h.

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

◆ operator|| [3/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 1619 of file z3++.h.

1619  {
1620  check_context(a, b);
1621  assert(a.is_bool() && b.is_bool());
1622  Z3_ast args[2] = { a, b };
1623  Z3_ast r = Z3_mk_or(a.ctx(), 2, args);
1624  a.check_error();
1625  return expr(a.ctx(), r);
1626  }

◆ operator~

expr operator~ ( expr const &  a)
friend

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

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

◆ pbeq

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

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

2338  {
2339  assert(es.size() > 0);
2340  context& ctx = es[0].ctx();
2341  array<Z3_ast> _es(es);
2342  Z3_ast r = Z3_mk_pbeq(ctx, _es.size(), _es.ptr(), coeffs, bound);
2343  ctx.check_error();
2344  return expr(ctx, r);
2345  }
Z3_ast Z3_API Z3_mk_pbeq(Z3_context c, unsigned num_args, Z3_ast const args[], int const coeffs[], int k)
Pseudo-Boolean relations.

◆ pbge

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

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

2330  {
2331  assert(es.size() > 0);
2332  context& ctx = es[0].ctx();
2333  array<Z3_ast> _es(es);
2334  Z3_ast r = Z3_mk_pbge(ctx, _es.size(), _es.ptr(), coeffs, bound);
2335  ctx.check_error();
2336  return expr(ctx, r);
2337  }
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 2322 of file z3++.h.

2322  {
2323  assert(es.size() > 0);
2324  context& ctx = es[0].ctx();
2325  array<Z3_ast> _es(es);
2326  Z3_ast r = Z3_mk_pble(ctx, _es.size(), _es.ptr(), coeffs, bound);
2327  ctx.check_error();
2328  return expr(ctx, r);
2329  }
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 1563 of file z3++.h.

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

◆ pw [2/3]

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

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

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

◆ pw [3/3]

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

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

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

◆ range

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

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

3810  {
3811  check_context(lo, hi);
3812  Z3_ast r = Z3_mk_re_range(lo.ctx(), lo, hi);
3813  lo.check_error();
3814  return expr(lo.ctx(), r);
3815  }
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.

◆ rem [1/3]

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

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

1583  {
1584  if (a.is_fpa() && b.is_fpa()) {
1585  _Z3_MK_BIN_(a, b, Z3_mk_fpa_rem);
1586  } else {
1587  _Z3_MK_BIN_(a, b, Z3_mk_rem);
1588  }
1589  }
Z3_ast Z3_API Z3_mk_fpa_rem(Z3_context c, Z3_ast t1, Z3_ast t2)
Floating-point remainder.
Z3_ast Z3_API Z3_mk_rem(Z3_context c, Z3_ast arg1, Z3_ast arg2)
Create an AST node representing arg1 rem arg2.

◆ rem [2/3]

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

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

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

◆ rem [3/3]

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

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

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

◆ round_fpa_to_closest_integer

expr round_fpa_to_closest_integer ( expr const &  t)
friend

Round a floating-point term into its closest integer.

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

2006  {
2007  assert(t.is_fpa());
2008  Z3_ast r = Z3_mk_fpa_round_to_integral(t.ctx(), t.ctx().fpa_rounding_mode(), t);
2009  t.check_error();
2010  return expr(t.ctx(), r);
2011  }
Z3_ast Z3_API Z3_mk_fpa_round_to_integral(Z3_context c, Z3_ast rm, Z3_ast t)
Floating-point roundToIntegral. Rounds a floating-point number to the closest integer,...

◆ sbv_to_fpa

expr sbv_to_fpa ( expr const &  t,
sort  s 
)
friend

Conversion of a signed bit-vector term into a floating-point.

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

1985  {
1986  assert(t.is_bv());
1987  Z3_ast r = Z3_mk_fpa_to_fp_signed(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
1988  t.check_error();
1989  return expr(t.ctx(), r);
1990  }
Z3_ast Z3_API Z3_mk_fpa_to_fp_signed(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a 2's complement signed bit-vector term into a term of FloatingPoint sort.

◆ sqrt

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

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

1939  {
1940  check_context(a, rm);
1941  assert(a.is_fpa());
1942  Z3_ast r = Z3_mk_fpa_sqrt(a.ctx(), rm, a);
1943  a.check_error();
1944  return expr(a.ctx(), r);
1945  }
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 2362 of file z3++.h.

2362  {
2363  assert(args.size() > 0);
2364  context& ctx = args[0].ctx();
2365  array<Z3_ast> _args(args);
2366  Z3_ast r = Z3_mk_add(ctx, _args.size(), _args.ptr());
2367  ctx.check_error();
2368  return expr(ctx, r);
2369  }

◆ ubv_to_fpa

expr ubv_to_fpa ( expr const &  t,
sort  s 
)
friend

Conversion of an unsigned bit-vector term into a floating-point.

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

1992  {
1993  assert(t.is_bv());
1994  Z3_ast r = Z3_mk_fpa_to_fp_unsigned(t.ctx(), t.ctx().fpa_rounding_mode(), t, s);
1995  t.check_error();
1996  return expr(t.ctx(), r);
1997  }
Z3_ast Z3_API Z3_mk_fpa_to_fp_unsigned(Z3_context c, Z3_ast rm, Z3_ast t, Z3_sort s)
Conversion of a 2's complement unsigned bit-vector term into a term of FloatingPoint sort.

◆ xnor

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

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

1876 { 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); }
Z3_ast Z3_API Z3_mk_bvxnor(Z3_context c, Z3_ast t1, Z3_ast t2)
Bitwise xnor.