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__
 
def __del__ (self)
 
def __deepcopy__
 
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)
 
def py_value (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 754 of file z3py.py.

Member Function Documentation

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 855 of file z3py.py.

855  def __call__(self, *args):
856  """Create a Z3 application expression using the function `self`, and the given arguments.
857 
858  The arguments must be Z3 expressions. This method assumes that
859  the sorts of the elements in `args` match the sorts of the
860  domain. Limited coercion is supported. For example, if
861  args[0] is a Python integer, and the function expects a Z3
862  integer, then the argument is automatically converted into a
863  Z3 integer.
864 
865  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
866  >>> x = Int('x')
867  >>> y = Real('y')
868  >>> f(x, y)
869  f(x, y)
870  >>> f(x, x)
871  f(x, ToReal(x))
872  """
873  args = _get_args(args)
874  num = len(args)
875  _args = (Ast * num)()
876  saved = []
877  for i in range(num):
878  # self.domain(i).cast(args[i]) may create a new Z3 expression,
879  # then we must save in 'saved' to prevent it from being garbage collected.
880  tmp = self.domain(i).cast(args[i])
881  saved.append(tmp)
882  _args[i] = tmp.as_ast()
883  return _to_expr_ref(Z3_mk_app(self.ctx_ref(), self.ast, len(args), _args), self.ctx)
884 
885 
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.
def domain(self, i)
Definition: z3py.py:792
def range(self)
Definition: z3py.py:804
def ctx_ref(self)
Definition: z3py.py:410
def __call__(self, args)
Definition: z3py.py:855
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 782 of file z3py.py.

782  def arity(self):
783  """Return the number of arguments of a function declaration.
784  If `self` is a constant, then `self.arity()` is 0.
785 
786  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
787  >>> f.arity()
788  2
789  """
790  return int(Z3_get_arity(self.ctx_ref(), self.ast))
791 
def ctx_ref(self)
Definition: z3py.py:410
unsigned Z3_API Z3_get_arity(Z3_context c, Z3_func_decl d)
Alias for Z3_get_domain_size.
def arity(self)
Definition: z3py.py:782
def as_ast (   self)

Definition at line 762 of file z3py.py.

762  def as_ast(self):
763  return Z3_func_decl_to_ast(self.ctx_ref(), self.ast)
764 
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.
def ctx_ref(self)
Definition: z3py.py:410
def as_ast(self)
Definition: z3py.py:762
def as_func_decl (   self)

Definition at line 768 of file z3py.py.

768  def as_func_decl(self):
769  return self.ast
770 
def as_func_decl(self)
Definition: z3py.py:768
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 792 of file z3py.py.

Referenced by FuncDeclRef.__call__().

792  def domain(self, i):
793  """Return the sort of the argument `i` of a function declaration.
794  This method assumes that `0 <= i < self.arity()`.
795 
796  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
797  >>> f.domain(0)
798  Int
799  >>> f.domain(1)
800  Real
801  """
802  return _to_sort_ref(Z3_get_domain(self.ctx_ref(), self.ast, i), self.ctx)
803 
def domain(self, i)
Definition: z3py.py:792
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.
def ctx_ref(self)
Definition: z3py.py:410
def get_id (   self)

Definition at line 765 of file z3py.py.

765  def get_id(self):
766  return Z3_get_ast_id(self.ctx_ref(), self.as_ast())
767 
def as_ast(self)
Definition: z3py.py:402
def get_id(self)
Definition: z3py.py:765
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.
def ctx_ref(self)
Definition: z3py.py:410
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 814 of file z3py.py.

814  def kind(self):
815  """Return the internal kind of a function declaration.
816  It can be used to identify Z3 built-in functions such as addition, multiplication, etc.
817 
818  >>> x = Int('x')
819  >>> d = (x + 1).decl()
820  >>> d.kind() == Z3_OP_ADD
821  True
822  >>> d.kind() == Z3_OP_MUL
823  False
824  """
825  return Z3_get_decl_kind(self.ctx_ref(), self.ast)
826 
Z3_decl_kind Z3_API Z3_get_decl_kind(Z3_context c, Z3_func_decl d)
Return declaration kind corresponding to declaration.
def ctx_ref(self)
Definition: z3py.py:410
def kind(self)
Definition: z3py.py:814
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 771 of file z3py.py.

771  def name(self):
772  """Return the name of the function declaration `self`.
773 
774  >>> f = Function('f', IntSort(), IntSort())
775  >>> f.name()
776  'f'
777  >>> isinstance(f.name(), str)
778  True
779  """
780  return _symbol2py(self.ctx, Z3_get_decl_name(self.ctx_ref(), self.ast))
781 
def name(self)
Definition: z3py.py:771
Z3_symbol Z3_API Z3_get_decl_name(Z3_context c, Z3_func_decl d)
Return the constant declaration name as a symbol.
def ctx_ref(self)
Definition: z3py.py:410
def params (   self)

Definition at line 827 of file z3py.py.

827  def params(self):
828  ctx = self.ctx
829  n = Z3_get_decl_num_parameters(self.ctx_ref(), self.ast)
830  result = [None for i in range(n)]
831  for i in range(n):
832  k = Z3_get_decl_parameter_kind(self.ctx_ref(), self.ast, i)
833  if k == Z3_PARAMETER_INT:
834  result[i] = Z3_get_decl_int_parameter(self.ctx_ref(), self.ast, i)
835  elif k == Z3_PARAMETER_DOUBLE:
836  result[i] = Z3_get_decl_double_parameter(self.ctx_ref(), self.ast, i)
837  elif k == Z3_PARAMETER_RATIONAL:
838  result[i] = Z3_get_decl_rational_parameter(self.ctx_ref(), self.ast, i)
839  elif k == Z3_PARAMETER_SYMBOL:
840  result[i] = Z3_get_decl_symbol_parameter(self.ctx_ref(), self.ast, i)
841  elif k == Z3_PARAMETER_SORT:
842  result[i] = SortRef(Z3_get_decl_sort_parameter(self.ctx_ref(), self.ast, i), ctx)
843  elif k == Z3_PARAMETER_AST:
844  result[i] = ExprRef(Z3_get_decl_ast_parameter(self.ctx_ref(), self.ast, i), ctx)
845  elif k == Z3_PARAMETER_FUNC_DECL:
846  result[i] = FuncDeclRef(Z3_get_decl_func_decl_parameter(self.ctx_ref(), self.ast, i), ctx)
847  elif k == Z3_PARAMETER_INTERNAL:
848  result[i] = "internal parameter"
849  elif k == Z3_PARAMETER_ZSTRING:
850  result[i] = "internal string"
851  else:
852  assert(False)
853  return result
854 
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.
Function Declarations.
Definition: z3py.py:754
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.
def range(self)
Definition: z3py.py:804
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.
def params(self)
Definition: z3py.py:827
def ctx_ref(self)
Definition: z3py.py:410
Expressions.
Definition: z3py.py:997
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.
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 804 of file z3py.py.

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

804  def range(self):
805  """Return the sort of the range of a function declaration.
806  For constants, this is the sort of the constant.
807 
808  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
809  >>> f.range()
810  Bool
811  """
812  return _to_sort_ref(Z3_get_range(self.ctx_ref(), self.ast), self.ctx)
813 
def range(self)
Definition: z3py.py:804
Z3_sort Z3_API Z3_get_range(Z3_context c, Z3_func_decl d)
Return the range of the given declaration.
def ctx_ref(self)
Definition: z3py.py:410