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

876  def __call__(self, *args):
877  """Create a Z3 application expression using the function `self`, and the given arguments.
878 
879  The arguments must be Z3 expressions. This method assumes that
880  the sorts of the elements in `args` match the sorts of the
881  domain. Limited coercion is supported. For example, if
882  args[0] is a Python integer, and the function expects a Z3
883  integer, then the argument is automatically converted into a
884  Z3 integer.
885 
886  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
887  >>> x = Int('x')
888  >>> y = Real('y')
889  >>> f(x, y)
890  f(x, y)
891  >>> f(x, x)
892  f(x, ToReal(x))
893  """
894  args = _get_args(args)
895  num = len(args)
896  _args = (Ast * num)()
897  saved = []
898  for i in range(num):
899  # self.domain(i).cast(args[i]) may create a new Z3 expression,
900  # then we must save in 'saved' to prevent it from being garbage collected.
901  tmp = self.domain(i).cast(args[i])
902  saved.append(tmp)
903  _args[i] = tmp.as_ast()
904  return _to_expr_ref(Z3_mk_app(self.ctx_ref(), self.ast, len(args), _args), self.ctx)
905 
906 
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:813
def range(self)
Definition: z3py.py:825
def ctx_ref(self)
Definition: z3py.py:427
def __call__(self, args)
Definition: z3py.py:876
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 803 of file z3py.py.

803  def arity(self):
804  """Return the number of arguments of a function declaration.
805  If `self` is a constant, then `self.arity()` is 0.
806 
807  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
808  >>> f.arity()
809  2
810  """
811  return int(Z3_get_arity(self.ctx_ref(), self.ast))
812 
def ctx_ref(self)
Definition: z3py.py:427
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:803
def as_ast (   self)

Definition at line 783 of file z3py.py.

783  def as_ast(self):
784  return Z3_func_decl_to_ast(self.ctx_ref(), self.ast)
785 
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:427
def as_ast(self)
Definition: z3py.py:783
def as_func_decl (   self)

Definition at line 789 of file z3py.py.

789  def as_func_decl(self):
790  return self.ast
791 
def as_func_decl(self)
Definition: z3py.py:789
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 813 of file z3py.py.

Referenced by FuncDeclRef.__call__().

813  def domain(self, i):
814  """Return the sort of the argument `i` of a function declaration.
815  This method assumes that `0 <= i < self.arity()`.
816 
817  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
818  >>> f.domain(0)
819  Int
820  >>> f.domain(1)
821  Real
822  """
823  return _to_sort_ref(Z3_get_domain(self.ctx_ref(), self.ast, i), self.ctx)
824 
def domain(self, i)
Definition: z3py.py:813
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:427
def get_id (   self)

Definition at line 786 of file z3py.py.

786  def get_id(self):
787  return Z3_get_ast_id(self.ctx_ref(), self.as_ast())
788 
def as_ast(self)
Definition: z3py.py:419
def get_id(self)
Definition: z3py.py:786
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:427
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 835 of file z3py.py.

835  def kind(self):
836  """Return the internal kind of a function declaration.
837  It can be used to identify Z3 built-in functions such as addition, multiplication, etc.
838 
839  >>> x = Int('x')
840  >>> d = (x + 1).decl()
841  >>> d.kind() == Z3_OP_ADD
842  True
843  >>> d.kind() == Z3_OP_MUL
844  False
845  """
846  return Z3_get_decl_kind(self.ctx_ref(), self.ast)
847 
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:427
def kind(self)
Definition: z3py.py:835
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 792 of file z3py.py.

792  def name(self):
793  """Return the name of the function declaration `self`.
794 
795  >>> f = Function('f', IntSort(), IntSort())
796  >>> f.name()
797  'f'
798  >>> isinstance(f.name(), str)
799  True
800  """
801  return _symbol2py(self.ctx, Z3_get_decl_name(self.ctx_ref(), self.ast))
802 
def name(self)
Definition: z3py.py:792
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:427
def params (   self)

Definition at line 848 of file z3py.py.

848  def params(self):
849  ctx = self.ctx
850  n = Z3_get_decl_num_parameters(self.ctx_ref(), self.ast)
851  result = [None for i in range(n)]
852  for i in range(n):
853  k = Z3_get_decl_parameter_kind(self.ctx_ref(), self.ast, i)
854  if k == Z3_PARAMETER_INT:
855  result[i] = Z3_get_decl_int_parameter(self.ctx_ref(), self.ast, i)
856  elif k == Z3_PARAMETER_DOUBLE:
857  result[i] = Z3_get_decl_double_parameter(self.ctx_ref(), self.ast, i)
858  elif k == Z3_PARAMETER_RATIONAL:
859  result[i] = Z3_get_decl_rational_parameter(self.ctx_ref(), self.ast, i)
860  elif k == Z3_PARAMETER_SYMBOL:
861  result[i] = Z3_get_decl_symbol_parameter(self.ctx_ref(), self.ast, i)
862  elif k == Z3_PARAMETER_SORT:
863  result[i] = SortRef(Z3_get_decl_sort_parameter(self.ctx_ref(), self.ast, i), ctx)
864  elif k == Z3_PARAMETER_AST:
865  result[i] = ExprRef(Z3_get_decl_ast_parameter(self.ctx_ref(), self.ast, i), ctx)
866  elif k == Z3_PARAMETER_FUNC_DECL:
867  result[i] = FuncDeclRef(Z3_get_decl_func_decl_parameter(self.ctx_ref(), self.ast, i), ctx)
868  elif k == Z3_PARAMETER_INTERNAL:
869  result[i] = "internal parameter"
870  elif k == Z3_PARAMETER_ZSTRING:
871  result[i] = "internal string"
872  else:
873  raise Z3Exception("Unexpected parameter kind")
874  return result
875 
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:775
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:825
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:848
def ctx_ref(self)
Definition: z3py.py:427
Expressions.
Definition: z3py.py:1018
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 825 of file z3py.py.

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

825  def range(self):
826  """Return the sort of the range of a function declaration.
827  For constants, this is the sort of the constant.
828 
829  >>> f = Function('f', IntSort(), RealSort(), BoolSort())
830  >>> f.range()
831  Bool
832  """
833  return _to_sort_ref(Z3_get_range(self.ctx_ref(), self.ast), self.ctx)
834 
def range(self)
Definition: z3py.py:825
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:427