Z3
Public Member Functions
func_decl Class Reference

Function declaration (aka function definition). It is the signature of interpreted and uninterpreted functions in Z3. The basic building block in Z3 is the function application. More...

+ Inheritance diagram for func_decl:

Public Member Functions

 func_decl (context &c)
 
 func_decl (context &c, Z3_func_decl n)
 
 func_decl (func_decl const &s)
 
 operator Z3_func_decl () const
 
func_decloperator= (func_decl const &s)
 
unsigned id () const
 retrieve unique identifier for func_decl. More...
 
unsigned arity () const
 
sort domain (unsigned i) const
 
sort range () const
 
symbol name () const
 
Z3_decl_kind decl_kind () const
 
func_decl transitive_closure (func_decl const &)
 
bool is_const () const
 
expr operator() () const
 
expr operator() (unsigned n, expr const *args) const
 
expr operator() (expr_vector const &v) const
 
expr operator() (expr const &a) const
 
expr operator() (int a) const
 
expr operator() (expr const &a1, expr const &a2) const
 
expr operator() (expr const &a1, int a2) const
 
expr operator() (int a1, expr const &a2) const
 
expr operator() (expr const &a1, expr const &a2, expr const &a3) const
 
expr operator() (expr const &a1, expr const &a2, expr const &a3, expr const &a4) const
 
expr operator() (expr const &a1, expr const &a2, expr const &a3, expr const &a4, expr const &a5) const
 
- Public Member Functions inherited from ast
 ast (context &c)
 
 ast (context &c, Z3_ast n)
 
 ast (ast const &s)
 
 ~ast ()
 
 operator Z3_ast () const
 
 operator bool () const
 
astoperator= (ast const &s)
 
Z3_ast_kind kind () const
 
unsigned hash () const
 
std::string to_string () const
 
- Public Member Functions inherited from object
 object (context &c)
 
 object (object const &s)
 
contextctx () const
 
Z3_error_code check_error () const
 

Additional Inherited Members

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

Detailed Description

Function declaration (aka function definition). It is the signature of interpreted and uninterpreted functions in Z3. The basic building block in Z3 is the function application.

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

Constructor & Destructor Documentation

◆ func_decl() [1/3]

func_decl ( context c)
inline

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

691 :ast(c) {}

Referenced by func_decl::transitive_closure().

◆ func_decl() [2/3]

func_decl ( context c,
Z3_func_decl  n 
)
inline

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

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

◆ func_decl() [3/3]

func_decl ( func_decl const &  s)
inline

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

693 :ast(s) {}

Member Function Documentation

◆ arity()

unsigned arity ( ) const
inline

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

702 { return Z3_get_arity(ctx(), *this); }

Referenced by fixedpoint::add_fact(), func_decl::domain(), and func_decl::is_const().

◆ decl_kind()

Z3_decl_kind decl_kind ( ) const
inline

◆ domain()

sort domain ( unsigned  i) const
inline

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

703 { assert(i < arity()); Z3_sort r = Z3_get_domain(ctx(), *this, i); check_error(); return sort(ctx(), r); }

Referenced by func_decl::operator()().

◆ id()

unsigned id ( ) const
inline

retrieve unique identifier for func_decl.

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

700 { unsigned r = Z3_get_func_decl_id(ctx(), *this); check_error(); return r; }

◆ is_const()

bool is_const ( ) const
inline

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

712 { return arity() == 0; }

◆ name()

symbol name ( ) const
inline

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

705 { Z3_symbol s = Z3_get_decl_name(ctx(), *this); check_error(); return symbol(ctx(), s); }

◆ operator Z3_func_decl()

operator Z3_func_decl ( ) const
inline

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

694 { return reinterpret_cast<Z3_func_decl>(m_ast); }

◆ operator()() [1/11]

expr operator() ( ) const
inline

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

3209  {
3210  Z3_ast r = Z3_mk_app(ctx(), *this, 0, 0);
3211  ctx().check_error();
3212  return expr(ctx(), r);
3213  }

◆ operator()() [2/11]

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

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

3214  {
3215  check_context(*this, a);
3216  Z3_ast args[1] = { a };
3217  Z3_ast r = Z3_mk_app(ctx(), *this, 1, args);
3218  ctx().check_error();
3219  return expr(ctx(), r);
3220  }

◆ operator()() [3/11]

expr operator() ( expr const &  a1,
expr const &  a2 
) const
inline

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

3227  {
3228  check_context(*this, a1); check_context(*this, a2);
3229  Z3_ast args[2] = { a1, a2 };
3230  Z3_ast r = Z3_mk_app(ctx(), *this, 2, args);
3231  ctx().check_error();
3232  return expr(ctx(), r);
3233  }

◆ operator()() [4/11]

expr operator() ( expr const &  a1,
expr const &  a2,
expr const &  a3 
) const
inline

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

3248  {
3249  check_context(*this, a1); check_context(*this, a2); check_context(*this, a3);
3250  Z3_ast args[3] = { a1, a2, a3 };
3251  Z3_ast r = Z3_mk_app(ctx(), *this, 3, args);
3252  ctx().check_error();
3253  return expr(ctx(), r);
3254  }

◆ operator()() [5/11]

expr operator() ( expr const &  a1,
expr const &  a2,
expr const &  a3,
expr const &  a4 
) const
inline

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

3255  {
3256  check_context(*this, a1); check_context(*this, a2); check_context(*this, a3); check_context(*this, a4);
3257  Z3_ast args[4] = { a1, a2, a3, a4 };
3258  Z3_ast r = Z3_mk_app(ctx(), *this, 4, args);
3259  ctx().check_error();
3260  return expr(ctx(), r);
3261  }

◆ operator()() [6/11]

expr operator() ( expr const &  a1,
expr const &  a2,
expr const &  a3,
expr const &  a4,
expr const &  a5 
) const
inline

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

3262  {
3263  check_context(*this, a1); check_context(*this, a2); check_context(*this, a3); check_context(*this, a4); check_context(*this, a5);
3264  Z3_ast args[5] = { a1, a2, a3, a4, a5 };
3265  Z3_ast r = Z3_mk_app(ctx(), *this, 5, args);
3266  ctx().check_error();
3267  return expr(ctx(), r);
3268  }

◆ operator()() [7/11]

expr operator() ( expr const &  a1,
int  a2 
) const
inline

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

3234  {
3235  check_context(*this, a1);
3236  Z3_ast args[2] = { a1, ctx().num_val(a2, domain(1)) };
3237  Z3_ast r = Z3_mk_app(ctx(), *this, 2, args);
3238  ctx().check_error();
3239  return expr(ctx(), r);
3240  }

◆ operator()() [8/11]

expr operator() ( expr_vector const &  v) const
inline

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

3199  {
3200  array<Z3_ast> _args(args.size());
3201  for (unsigned i = 0; i < args.size(); i++) {
3202  check_context(*this, args[i]);
3203  _args[i] = args[i];
3204  }
3205  Z3_ast r = Z3_mk_app(ctx(), *this, args.size(), _args.ptr());
3206  check_error();
3207  return expr(ctx(), r);
3208  }

◆ operator()() [9/11]

expr operator() ( int  a) const
inline

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

3221  {
3222  Z3_ast args[1] = { ctx().num_val(a, domain(0)) };
3223  Z3_ast r = Z3_mk_app(ctx(), *this, 1, args);
3224  ctx().check_error();
3225  return expr(ctx(), r);
3226  }

◆ operator()() [10/11]

expr operator() ( int  a1,
expr const &  a2 
) const
inline

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

3241  {
3242  check_context(*this, a2);
3243  Z3_ast args[2] = { ctx().num_val(a1, domain(0)), a2 };
3244  Z3_ast r = Z3_mk_app(ctx(), *this, 2, args);
3245  ctx().check_error();
3246  return expr(ctx(), r);
3247  }

◆ operator()() [11/11]

expr operator() ( unsigned  n,
expr const *  args 
) const
inline

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

3188  {
3189  array<Z3_ast> _args(n);
3190  for (unsigned i = 0; i < n; i++) {
3191  check_context(*this, args[i]);
3192  _args[i] = args[i];
3193  }
3194  Z3_ast r = Z3_mk_app(ctx(), *this, n, _args.ptr());
3195  check_error();
3196  return expr(ctx(), r);
3197 
3198  }

◆ operator=()

func_decl& operator= ( func_decl const &  s)
inline

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

695 { return static_cast<func_decl&>(ast::operator=(s)); }

◆ range()

sort range ( ) const
inline

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

704 { Z3_sort r = Z3_get_range(ctx(), *this); check_error(); return sort(ctx(), r); }

◆ transitive_closure()

func_decl transitive_closure ( func_decl const &  )
inline

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

708  {
709  Z3_func_decl tc = Z3_mk_transitive_closure(ctx(), *this); check_error(); return func_decl(ctx(), tc);
710  }
z3::func_decl::func_decl
func_decl(context &c)
Definition: z3++.h:691
z3::func_decl::domain
sort domain(unsigned i) const
Definition: z3++.h:703
Z3_mk_app
Z3_ast Z3_API Z3_mk_app(Z3_context c, Z3_func_decl d, unsigned num_args, Z3_ast const args[])
Create a constant or function application.
z3::ast::operator=
ast & operator=(ast const &s)
Definition: z3++.h:497
z3::ast::m_ast
Z3_ast m_ast
Definition: z3++.h:489
Z3_get_domain
Z3_sort Z3_API Z3_get_domain(Z3_context c, Z3_func_decl d, unsigned i)
Return the sort of the i-th parameter of the given function declaration.
Z3_get_arity
unsigned Z3_API Z3_get_arity(Z3_context c, Z3_func_decl d)
Alias for Z3_get_domain_size.
Z3_get_range
Z3_sort Z3_API Z3_get_range(Z3_context c, Z3_func_decl d)
Return the range of the given declaration.
z3::object::check_context
friend void check_context(object const &a, object const &b)
Definition: z3++.h:413
z3::ast::ast
ast(context &c)
Definition: z3++.h:491
z3::func_decl::arity
unsigned arity() const
Definition: z3++.h:702
z3::context::num_val
expr num_val(int n, sort const &s)
Definition: z3++.h:3186
Z3_get_decl_name
Z3_symbol Z3_API Z3_get_decl_name(Z3_context c, Z3_func_decl d)
Return the constant declaration name as a symbol.
Z3_get_decl_kind
Z3_decl_kind Z3_API Z3_get_decl_kind(Z3_context c, Z3_func_decl d)
Return declaration kind corresponding to declaration.
Z3_get_func_decl_id
unsigned Z3_API Z3_get_func_decl_id(Z3_context c, Z3_func_decl f)
Return a unique identifier for f.
z3::object::check_error
Z3_error_code check_error() const
Definition: z3++.h:410
z3::context::check_error
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition: z3++.h:181
z3::object::ctx
context & ctx() const
Definition: z3++.h:409
Z3_mk_transitive_closure
Z3_func_decl Z3_API Z3_mk_transitive_closure(Z3_context c, Z3_func_decl f)
create transitive closure of binary relation.