Z3
Public Member Functions
FuncDeclRef Class Reference

Function Declarations. More...

+ Inheritance diagram for FuncDeclRef:

Public Member Functions

def as_ast (self)
 
def get_id (self)
 
def as_func_decl (self)
 
def name (self)
 
def arity (self)
 
def domain (self, i)
 
def range (self)
 
def kind (self)
 
def params (self)
 
def __call__ (self, args)
 
- Public Member Functions inherited from AstRef
def __init__ (self, ast, ctx=None)
 
def __del__ (self)
 
def __deepcopy__ (self, memo={})
 
def __str__ (self)
 
def __repr__ (self)
 
def __eq__ (self, other)
 
def __hash__ (self)
 
def __nonzero__ (self)
 
def __bool__ (self)
 
def sexpr (self)
 
def as_ast (self)
 
def get_id (self)
 
def ctx_ref (self)
 
def eq (self, other)
 
def translate (self, target)
 
def __copy__ (self)
 
def hash (self)
 
- Public Member Functions inherited from Z3PPObject
def use_pp (self)
 

Additional Inherited Members

- Data Fields inherited from AstRef
 ast
 
 ctx
 

Detailed Description

Function Declarations.

Function declaration. Every constant and function have an associated declaration.

The declaration assigns a name, a sort (i.e., type), and for function
the sort (i.e., type) of each of its arguments. Note that, in Z3,
a constant is a function with 0 arguments.

Definition at line 640 of file z3py.py.

Member Function Documentation

◆ __call__()

def __call__ (   self,
  args 
)
Create a Z3 application expression using the function `self`, and the given arguments.

The arguments must be Z3 expressions. This method assumes that
the sorts of the elements in `args` match the sorts of the
domain. Limited coercion is supported.  For example, if
args[0] is a Python integer, and the function expects a Z3
integer, then the argument is automatically converted into a
Z3 integer.

>>> f = Function('f', IntSort(), RealSort(), BoolSort())
>>> x = Int('x')
>>> y = Real('y')
>>> f(x, y)
f(x, y)
>>> f(x, x)
f(x, ToReal(x))

Definition at line 734 of file z3py.py.

734  def __call__(self, *args):
735  """Create a Z3 application expression using the function `self`, and the given arguments.
736 
737  The arguments must be Z3 expressions. This method assumes that
738  the sorts of the elements in `args` match the sorts of the
739  domain. Limited coercion is supported. For example, if
740  args[0] is a Python integer, and the function expects a Z3
741  integer, then the argument is automatically converted into a
742  Z3 integer.
743 
744  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
745  >>> x = Int('x')
746  >>> y = Real('y')
747  >>> f(x, y)
748  f(x, y)
749  >>> f(x, x)
750  f(x, ToReal(x))
751  """
752  args = _get_args(args)
753  num = len(args)
754  if __debug__:
755  _z3_assert(num == self.arity(), "Incorrect number of arguments to %s" % self)
756  _args = (Ast * num)()
757  saved = []
758  for i in range(num):
759  # self.domain(i).cast(args[i]) may create a new Z3 expression,
760  # then we must save in 'saved' to prevent it from being garbage collected.
761  tmp = self.domain(i).cast(args[i])
762  saved.append(tmp)
763  _args[i] = tmp.as_ast()
764  return _to_expr_ref(Z3_mk_app(self.ctx_ref(), self.ast, len(args), _args), self.ctx)
765 
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:3244
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.

◆ arity()

def arity (   self)
Return the number of arguments of a function declaration. If `self` is a constant, then `self.arity()` is 0.

>>> f = Function('f', IntSort(), RealSort(), BoolSort())
>>> f.arity()
2

Definition at line 667 of file z3py.py.

Referenced by FuncDeclRef.__call__(), and FuncDeclRef.domain().

667  def arity(self):
668  """Return the number of arguments of a function declaration. If `self` is a constant, then `self.arity()` is 0.
669 
670  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
671  >>> f.arity()
672  2
673  """
674  return int(Z3_get_arity(self.ctx_ref(), self.ast))
675 
unsigned Z3_API Z3_get_arity(Z3_context c, Z3_func_decl d)
Alias for Z3_get_domain_size.

◆ as_ast()

def as_ast (   self)

Definition at line 647 of file z3py.py.

647  def as_ast(self):
648  return Z3_func_decl_to_ast(self.ctx_ref(), self.ast)
649 
Z3_ast Z3_API Z3_func_decl_to_ast(Z3_context c, Z3_func_decl f)
Convert a Z3_func_decl into Z3_ast. This is just type casting.

◆ as_func_decl()

def as_func_decl (   self)

Definition at line 653 of file z3py.py.

653  def as_func_decl(self):
654  return self.ast
655 

◆ domain()

def domain (   self,
  i 
)
Return the sort of the argument `i` of a function declaration. This method assumes that `0 <= i < self.arity()`.

>>> f = Function('f', IntSort(), RealSort(), BoolSort())
>>> f.domain(0)
Int
>>> f.domain(1)
Real

Definition at line 676 of file z3py.py.

Referenced by FuncDeclRef.__call__().

676  def domain(self, i):
677  """Return the sort of the argument `i` of a function declaration. This method assumes that `0 <= i < self.arity()`.
678 
679  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
680  >>> f.domain(0)
681  Int
682  >>> f.domain(1)
683  Real
684  """
685  if __debug__:
686  _z3_assert(i < self.arity(), "Index out of bounds")
687  return _to_sort_ref(Z3_get_domain(self.ctx_ref(), self.ast, i), self.ctx)
688 
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.

◆ get_id()

def get_id (   self)

Definition at line 650 of file z3py.py.

650  def get_id(self):
651  return Z3_get_ast_id(self.ctx_ref(), self.as_ast())
652 
unsigned Z3_API Z3_get_ast_id(Z3_context c, Z3_ast t)
Return a unique identifier for t. The identifier is unique up to structural equality. Thus, two ast nodes created by the same context and having the same children and same function symbols have the same identifiers. Ast nodes created in the same context, but having different children or different functions have different identifiers. Variables and quantifiers are also assigned different identifiers according to their structure.

◆ kind()

def kind (   self)
Return the internal kind of a function declaration. It can be used to identify Z3 built-in functions such as addition, multiplication, etc.

>>> x = Int('x')
>>> d = (x + 1).decl()
>>> d.kind() == Z3_OP_ADD
True
>>> d.kind() == Z3_OP_MUL
False

Definition at line 698 of file z3py.py.

698  def kind(self):
699  """Return the internal kind of a function declaration. It can be used to identify Z3 built-in functions such as addition, multiplication, etc.
700 
701  >>> x = Int('x')
702  >>> d = (x + 1).decl()
703  >>> d.kind() == Z3_OP_ADD
704  True
705  >>> d.kind() == Z3_OP_MUL
706  False
707  """
708  return Z3_get_decl_kind(self.ctx_ref(), self.ast)
709 
Z3_decl_kind Z3_API Z3_get_decl_kind(Z3_context c, Z3_func_decl d)
Return declaration kind corresponding to declaration.

◆ name()

def name (   self)
Return the name of the function declaration `self`.

>>> f = Function('f', IntSort(), IntSort())
>>> f.name()
'f'
>>> isinstance(f.name(), str)
True

Definition at line 656 of file z3py.py.

656  def name(self):
657  """Return the name of the function declaration `self`.
658 
659  >>> f = Function('f', IntSort(), IntSort())
660  >>> f.name()
661  'f'
662  >>> isinstance(f.name(), str)
663  True
664  """
665  return _symbol2py(self.ctx, Z3_get_decl_name(self.ctx_ref(), self.ast))
666 
Z3_symbol Z3_API Z3_get_decl_name(Z3_context c, Z3_func_decl d)
Return the constant declaration name as a symbol.

◆ params()

def params (   self)

Definition at line 710 of file z3py.py.

710  def params(self):
711  ctx = self.ctx
712  n = Z3_get_decl_num_parameters(self.ctx_ref(), self.ast)
713  result = [ None for i in range(n) ]
714  for i in range(n):
715  k = Z3_get_decl_parameter_kind(self.ctx_ref(), self.ast, i)
716  if k == Z3_PARAMETER_INT:
717  result[i] = Z3_get_decl_int_parameter(self.ctx_ref(), self.ast, i)
718  elif k == Z3_PARAMETER_DOUBLE:
719  result[i] = Z3_get_decl_double_parameter(self.ctx_ref(), self.ast, i)
720  elif k == Z3_PARAMETER_RATIONAL:
721  result[i] = Z3_get_decl_rational_parameter(self.ctx_ref(), self.ast, i)
722  elif k == Z3_PARAMETER_SYMBOL:
723  result[i] = Z3_get_decl_symbol_parameter(self.ctx_ref(), self.ast, i)
724  elif k == Z3_PARAMETER_SORT:
725  result[i] = SortRef(Z3_get_decl_sort_parameter(self.ctx_ref(), self.ast, i), ctx)
726  elif k == Z3_PARAMETER_AST:
727  result[i] = ExprRef(Z3_get_decl_ast_parameter(self.ctx_ref(), self.ast, i), ctx)
728  elif k == Z3_PARAMETER_FUNC_DECL:
729  result[i] = FuncDeclRef(Z3_get_decl_func_decl_parameter(self.ctx_ref(), self.ast, i), ctx)
730  else:
731  assert(False)
732  return result
733 
Z3_string Z3_API Z3_get_decl_rational_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the rational value, as a string, associated with a rational parameter.
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:3244
unsigned Z3_API Z3_get_decl_num_parameters(Z3_context c, Z3_func_decl d)
Return the number of parameters associated with a declaration.
Z3_parameter_kind Z3_API Z3_get_decl_parameter_kind(Z3_context c, Z3_func_decl d, unsigned idx)
Return the parameter type associated with a declaration.
Z3_symbol Z3_API Z3_get_decl_symbol_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the double value associated with an double parameter.
Z3_func_decl Z3_API Z3_get_decl_func_decl_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the expression value associated with an expression parameter.
double Z3_API Z3_get_decl_double_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the double value associated with an double parameter.
Z3_ast Z3_API Z3_get_decl_ast_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the expression value associated with an expression parameter.
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.
Z3_sort Z3_API Z3_get_decl_sort_parameter(Z3_context c, Z3_func_decl d, unsigned idx)
Return the sort value associated with a sort parameter.

◆ range()

def range (   self)
Return the sort of the range of a function declaration. For constants, this is the sort of the constant.

>>> f = Function('f', IntSort(), RealSort(), BoolSort())
>>> f.range()
Bool

Definition at line 689 of file z3py.py.

Referenced by FuncDeclRef.__call__(), and FuncDeclRef.params().

689  def range(self):
690  """Return the sort of the range of a function declaration. For constants, this is the sort of the constant.
691 
692  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
693  >>> f.range()
694  Bool
695  """
696  return _to_sort_ref(Z3_get_range(self.ctx_ref(), self.ast), self.ctx)
697 
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:3244
Z3_sort Z3_API Z3_get_range(Z3_context c, Z3_func_decl d)
Return the range of the given declaration.