Z3
 
Loading...
Searching...
No Matches
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...

#include <z3++.h>

+ Inheritance diagram for func_decl:

Public Member Functions

 func_decl (context &c)
 
 func_decl (context &c, Z3_func_decl n)
 
 operator Z3_func_decl () const
 
unsigned id () const
 retrieve unique identifier for func_decl.
 
unsigned arity () const
 
sort domain (unsigned i) const
 
sort range () const
 
symbol name () const
 
Z3_decl_kind decl_kind () const
 
unsigned num_parameters () 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
 
func_decl_vector accessors ()
 
- Public Member Functions inherited from ast
 ast (context &c)
 
 ast (context &c, Z3_ast n)
 
 ast (ast const &s)
 
 ~ast () override
 
 operator Z3_ast () const
 
 operator bool () const
 
ast & operator= (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)
 
virtual ~object ()=default
 
context & ctx () const
 
Z3_error_code check_error () const
 

Additional Inherited Members

- Protected Attributes inherited from ast
Z3_ast m_ast
 
- Protected Attributes inherited from object
context * m_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 907 of file z3++.h.

Constructor & Destructor Documentation

◆ func_decl() [1/2]

func_decl ( context &  c)
inline

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

909:ast(c) {}
ast(context &c)
Definition z3++.h:643

◆ func_decl() [2/2]

func_decl ( context &  c,
Z3_func_decl  n 
)
inline

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

910:ast(c, reinterpret_cast<Z3_ast>(n)) {}
System.IntPtr Z3_ast

Member Function Documentation

◆ accessors()

func_decl_vector accessors ( )
inline

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

4664 {
4665 sort s = range();
4666 assert(s.is_datatype());
4667 unsigned n = Z3_get_datatype_sort_num_constructors(ctx(), s);
4668 unsigned idx = 0;
4669 for (; idx < n; ++idx) {
4671 if (id() == f.id())
4672 break;
4673 }
4674 assert(idx < n);
4675 n = arity();
4676 func_decl_vector as(ctx());
4677 for (unsigned i = 0; i < n; ++i)
4678 as.push_back(func_decl(ctx(), Z3_get_datatype_sort_constructor_accessor(ctx(), s, idx, i)));
4679 return as;
4680 }
sort range() const
Definition z3++.h:920
func_decl(context &c)
Definition z3++.h:909
unsigned arity() const
Definition z3++.h:918
context & ctx() const
Definition z3++.h:562
unsigned Z3_API Z3_get_datatype_sort_num_constructors(Z3_context c, Z3_sort t)
Return number of constructors for datatype.
Z3_func_decl Z3_API Z3_get_datatype_sort_constructor(Z3_context c, Z3_sort t, unsigned idx)
Return idx'th constructor.
Z3_func_decl Z3_API Z3_get_datatype_sort_constructor_accessor(Z3_context c, Z3_sort t, unsigned idx_c, unsigned idx_a)
Return idx_a'th accessor for the idx_c'th constructor.
ast_vector_tpl< func_decl > func_decl_vector
Definition z3++.h:79

◆ arity()

unsigned arity ( ) const
inline

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

918{ return Z3_get_arity(ctx(), *this); }
unsigned Z3_API Z3_get_arity(Z3_context c, Z3_func_decl d)
Alias for Z3_get_domain_size.

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

◆ decl_kind()

Z3_decl_kind decl_kind ( ) const
inline

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

922{ return Z3_get_decl_kind(ctx(), *this); }
Z3_decl_kind Z3_API Z3_get_decl_kind(Z3_context c, Z3_func_decl d)
Return declaration kind corresponding to declaration.

Referenced by 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(), and expr::is_xor().

◆ domain()

sort domain ( unsigned  i) const
inline

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

919{ assert(i < arity()); Z3_sort r = Z3_get_domain(ctx(), *this, i); check_error(); return sort(ctx(), r); }
Z3_error_code check_error() const
Definition z3++.h:563
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.
System.IntPtr Z3_sort

Referenced by FuncDeclRef::__call__(), func_decl::operator()(), func_decl::operator()(), and func_decl::operator()().

◆ id()

unsigned id ( ) const
inline

retrieve unique identifier for func_decl.

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

916{ unsigned r = Z3_get_func_decl_id(ctx(), *this); check_error(); return r; }
unsigned Z3_API Z3_get_func_decl_id(Z3_context c, Z3_func_decl f)
Return a unique identifier for f.

Referenced by func_decl::accessors().

◆ is_const()

bool is_const ( ) const
inline

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

930{ return arity() == 0; }

◆ name()

symbol name ( ) const
inline

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

921{ Z3_symbol s = Z3_get_decl_name(ctx(), *this); check_error(); return symbol(ctx(), s); }
Z3_symbol Z3_API Z3_get_decl_name(Z3_context c, Z3_func_decl d)
Return the constant declaration name as a symbol.
System.IntPtr Z3_symbol

Referenced by Datatype::__deepcopy__(), and Datatype::__repr__().

◆ num_parameters()

unsigned num_parameters ( ) const
inline

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

923{ return Z3_get_decl_num_parameters(ctx(), *this); }
unsigned Z3_API Z3_get_decl_num_parameters(Z3_context c, Z3_func_decl d)
Return the number of parameters associated with a declaration.

Referenced by parameter::parameter(), and parameter::parameter().

◆ operator Z3_func_decl()

operator Z3_func_decl ( ) const
inline

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

911{ return reinterpret_cast<Z3_func_decl>(m_ast); }
Z3_ast m_ast
Definition z3++.h:641
System.IntPtr Z3_func_decl

◆ operator()() [1/11]

expr operator() ( ) const
inline

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

4243 {
4244 Z3_ast r = Z3_mk_app(ctx(), *this, 0, 0);
4245 ctx().check_error();
4246 return expr(ctx(), r);
4247 }
Z3_error_code check_error() const
Auxiliary method used to check for API usage errors.
Definition z3++.h:241
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.

◆ operator()() [2/11]

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

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

4248 {
4249 check_context(*this, a);
4250 Z3_ast args[1] = { a };
4251 Z3_ast r = Z3_mk_app(ctx(), *this, 1, args);
4252 ctx().check_error();
4253 return expr(ctx(), r);
4254 }
friend void check_context(object const &a, object const &b)
Definition z3++.h:566

◆ operator()() [3/11]

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

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

4261 {
4262 check_context(*this, a1); check_context(*this, a2);
4263 Z3_ast args[2] = { a1, a2 };
4264 Z3_ast r = Z3_mk_app(ctx(), *this, 2, args);
4265 ctx().check_error();
4266 return expr(ctx(), r);
4267 }

◆ operator()() [4/11]

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

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

4282 {
4283 check_context(*this, a1); check_context(*this, a2); check_context(*this, a3);
4284 Z3_ast args[3] = { a1, a2, a3 };
4285 Z3_ast r = Z3_mk_app(ctx(), *this, 3, args);
4286 ctx().check_error();
4287 return expr(ctx(), r);
4288 }

◆ operator()() [5/11]

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

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

4289 {
4290 check_context(*this, a1); check_context(*this, a2); check_context(*this, a3); check_context(*this, a4);
4291 Z3_ast args[4] = { a1, a2, a3, a4 };
4292 Z3_ast r = Z3_mk_app(ctx(), *this, 4, args);
4293 ctx().check_error();
4294 return expr(ctx(), r);
4295 }

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

4296 {
4297 check_context(*this, a1); check_context(*this, a2); check_context(*this, a3); check_context(*this, a4); check_context(*this, a5);
4298 Z3_ast args[5] = { a1, a2, a3, a4, a5 };
4299 Z3_ast r = Z3_mk_app(ctx(), *this, 5, args);
4300 ctx().check_error();
4301 return expr(ctx(), r);
4302 }

◆ operator()() [7/11]

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

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

4268 {
4269 check_context(*this, a1);
4270 Z3_ast args[2] = { a1, ctx().num_val(a2, domain(1)) };
4271 Z3_ast r = Z3_mk_app(ctx(), *this, 2, args);
4272 ctx().check_error();
4273 return expr(ctx(), r);
4274 }
expr num_val(int n, sort const &s)
Definition z3++.h:4220
sort domain(unsigned i) const
Definition z3++.h:919

◆ operator()() [8/11]

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

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

4233 {
4234 array<Z3_ast> _args(args.size());
4235 for (unsigned i = 0; i < args.size(); ++i) {
4236 check_context(*this, args[i]);
4237 _args[i] = args[i];
4238 }
4239 Z3_ast r = Z3_mk_app(ctx(), *this, args.size(), _args.ptr());
4240 check_error();
4241 return expr(ctx(), r);
4242 }

◆ operator()() [9/11]

expr operator() ( int  a) const
inline

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

4255 {
4256 Z3_ast args[1] = { ctx().num_val(a, domain(0)) };
4257 Z3_ast r = Z3_mk_app(ctx(), *this, 1, args);
4258 ctx().check_error();
4259 return expr(ctx(), r);
4260 }

◆ operator()() [10/11]

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

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

4275 {
4276 check_context(*this, a2);
4277 Z3_ast args[2] = { ctx().num_val(a1, domain(0)), a2 };
4278 Z3_ast r = Z3_mk_app(ctx(), *this, 2, args);
4279 ctx().check_error();
4280 return expr(ctx(), r);
4281 }

◆ operator()() [11/11]

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

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

4222 {
4223 array<Z3_ast> _args(n);
4224 for (unsigned i = 0; i < n; ++i) {
4225 check_context(*this, args[i]);
4226 _args[i] = args[i];
4227 }
4228 Z3_ast r = Z3_mk_app(ctx(), *this, n, _args.ptr());
4229 check_error();
4230 return expr(ctx(), r);
4231
4232 }

◆ range()

sort range ( ) const
inline

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

920{ Z3_sort r = Z3_get_range(ctx(), *this); check_error(); return sort(ctx(), r); }
Z3_sort Z3_API Z3_get_range(Z3_context c, Z3_func_decl d)
Return the range of the given declaration.

Referenced by func_decl::accessors().

◆ transitive_closure()

func_decl transitive_closure ( func_decl const &  )
inline

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

926 {
927 Z3_func_decl tc = Z3_mk_transitive_closure(ctx(), *this); check_error(); return func_decl(ctx(), tc);
928 }
Z3_func_decl Z3_API Z3_mk_transitive_closure(Z3_context c, Z3_func_decl f)
create transitive closure of binary relation.