Z3
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Data Fields
AstRef Class Reference
+ Inheritance diagram for AstRef:

Public Member Functions

def __init__
 
def __del__
 
def __str__
 
def __repr__
 
def sexpr
 
def as_ast
 
def get_id
 
def ctx_ref
 
def eq
 
def translate
 
def hash
 
- Public Member Functions inherited from Z3PPObject
def use_pp
 

Data Fields

 ast
 
 ctx
 

Detailed Description

AST are Direct Acyclic Graphs (DAGs) used to represent sorts, declarations and expressions.

Definition at line 271 of file z3py.py.

Constructor & Destructor Documentation

def __init__ (   self,
  ast,
  ctx = None 
)

Definition at line 273 of file z3py.py.

274  def __init__(self, ast, ctx=None):
275  self.ast = ast
276  self.ctx = _get_ctx(ctx)
277  Z3_inc_ref(self.ctx.ref(), self.as_ast())
void Z3_API Z3_inc_ref(__in Z3_context c, __in Z3_ast a)
Increment the reference counter of the given AST. The context c should have been created using Z3_mk_...
def __init__
Definition: z3py.py:273
def as_ast
Definition: z3py.py:296
def __del__ (   self)

Definition at line 278 of file z3py.py.

279  def __del__(self):
280  Z3_dec_ref(self.ctx.ref(), self.as_ast())
def __del__
Definition: z3py.py:278
void Z3_API Z3_dec_ref(__in Z3_context c, __in Z3_ast a)
Decrement the reference counter of the given AST. The context c should have been created using Z3_mk_...
def as_ast
Definition: z3py.py:296

Member Function Documentation

def __repr__ (   self)

Definition at line 284 of file z3py.py.

285  def __repr__(self):
286  return obj_to_string(self)
def __repr__
Definition: z3py.py:284
def __str__ (   self)

Definition at line 281 of file z3py.py.

282  def __str__(self):
283  return obj_to_string(self)
def __str__
Definition: z3py.py:281
def as_ast (   self)
Return a pointer to the corresponding C Z3_ast object.

Definition at line 296 of file z3py.py.

Referenced by AstRef.__del__(), ArrayRef.__getitem__(), ArithRef.__neg__(), AlgebraicNumRef.approx(), ExprRef.arg(), AlgebraicNumRef.as_decimal(), ExprRef.decl(), AstRef.eq(), AstRef.get_id(), SortRef.get_id(), FuncDeclRef.get_id(), ExprRef.get_id(), AstRef.hash(), ExprRef.num_args(), AstRef.sexpr(), ExprRef.sort(), BoolRef.sort(), ArithRef.sort(), ArrayRef.sort(), and AstRef.translate().

297  def as_ast(self):
298  """Return a pointer to the corresponding C Z3_ast object."""
299  return self.ast
def as_ast
Definition: z3py.py:296
def ctx_ref (   self)
Return a reference to the C context where this AST node is stored.

Definition at line 305 of file z3py.py.

Referenced by FuncDeclRef.__call__(), ArithRef.__div__(), SortRef.__eq__(), ExprRef.__eq__(), ArithRef.__ge__(), ArrayRef.__getitem__(), ArithRef.__gt__(), ArithRef.__le__(), ArithRef.__lt__(), ArithRef.__mod__(), SortRef.__ne__(), ExprRef.__ne__(), ArithRef.__neg__(), ArithRef.__pow__(), ArithRef.__rdiv__(), ArithRef.__rmod__(), ArithRef.__rpow__(), AlgebraicNumRef.approx(), ExprRef.arg(), FuncDeclRef.arity(), SortRef.as_ast(), FuncDeclRef.as_ast(), AlgebraicNumRef.as_decimal(), ExprRef.decl(), FuncDeclRef.domain(), ArraySortRef.domain(), AstRef.eq(), AstRef.get_id(), SortRef.get_id(), FuncDeclRef.get_id(), ExprRef.get_id(), AstRef.hash(), FuncDeclRef.kind(), SortRef.name(), FuncDeclRef.name(), ExprRef.num_args(), FuncDeclRef.range(), ArraySortRef.range(), AstRef.sexpr(), BoolRef.sort(), ArithRef.sort(), and ArrayRef.sort().

306  def ctx_ref(self):
307  """Return a reference to the C context where this AST node is stored."""
308  return self.ctx.ref()
def ctx_ref
Definition: z3py.py:305
def eq (   self,
  other 
)
Return `True` if `self` and `other` are structurally identical.

>>> x = Int('x')
>>> n1 = x + 1
>>> n2 = 1 + x
>>> n1.eq(n2)
False
>>> n1 = simplify(n1)
>>> n2 = simplify(n2)
>>> n1.eq(n2)
True

Definition at line 309 of file z3py.py.

Referenced by SortRef.cast(), and BoolSortRef.cast().

310  def eq(self, other):
311  """Return `True` if `self` and `other` are structurally identical.
312 
313  >>> x = Int('x')
314  >>> n1 = x + 1
315  >>> n2 = 1 + x
316  >>> n1.eq(n2)
317  False
318  >>> n1 = simplify(n1)
319  >>> n2 = simplify(n2)
320  >>> n1.eq(n2)
321  True
322  """
323  if __debug__:
324  _z3_assert(is_ast(other), "Z3 AST expected")
325  return Z3_is_eq_ast(self.ctx_ref(), self.as_ast(), other.as_ast())
def is_ast
Definition: z3py.py:352
Z3_bool Z3_API Z3_is_eq_ast(__in Z3_context c, __in Z3_ast t1, Z3_ast t2)
compare terms.
def eq
Definition: z3py.py:309
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:305
def get_id (   self)
Return unique identifier for object. It can be used for hash-tables and maps.

Definition at line 300 of file z3py.py.

301  def get_id(self):
302  """Return unique identifier for object. It can be used for hash-tables and maps."""
303  return Z3_get_ast_id(self.ctx_ref(), self.as_ast())
304 
def get_id
Definition: z3py.py:300
unsigned Z3_API Z3_get_ast_id(__in Z3_context c, Z3_ast t)
Return a unique identifier for t.
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:305
def hash (   self)
Return a hashcode for the `self`.

>>> n1 = simplify(Int('x') + 1)
>>> n2 = simplify(2 + Int('x') - 1)
>>> n1.hash() == n2.hash()
True

Definition at line 342 of file z3py.py.

343  def hash(self):
344  """Return a hashcode for the `self`.
345 
346  >>> n1 = simplify(Int('x') + 1)
347  >>> n2 = simplify(2 + Int('x') - 1)
348  >>> n1.hash() == n2.hash()
349  True
350  """
351  return Z3_get_ast_hash(self.ctx_ref(), self.as_ast())
unsigned Z3_API Z3_get_ast_hash(__in Z3_context c, __in Z3_ast a)
Return a hash code for the given AST.
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:305
def hash
Definition: z3py.py:342
def sexpr (   self)
Return an string representing the AST node in s-expression notation.

>>> x = Int('x')
>>> ((x + 1)*x).sexpr()
'(* (+ x 1) x)'

Definition at line 287 of file z3py.py.

Referenced by ArithRef.__div__(), BitVecRef.__div__(), BitVecRef.__ge__(), ArrayRef.__getitem__(), BitVecRef.__gt__(), BitVecRef.__le__(), BitVecRef.__lshift__(), BitVecRef.__lt__(), BitVecRef.__mod__(), ArithRef.__rdiv__(), BitVecRef.__rdiv__(), Fixedpoint.__repr__(), BitVecRef.__rlshift__(), BitVecRef.__rmod__(), BitVecRef.__rrshift__(), BitVecRef.__rshift__(), and BitVecSortRef.cast().

288  def sexpr(self):
289  """Return an string representing the AST node in s-expression notation.
290 
291  >>> x = Int('x')
292  >>> ((x + 1)*x).sexpr()
293  '(* (+ x 1) x)'
294  """
295  return Z3_ast_to_string(self.ctx_ref(), self.as_ast())
def sexpr
Definition: z3py.py:287
Z3_string Z3_API Z3_ast_to_string(__in Z3_context c, __in Z3_ast a)
Convert the given AST node into a string.
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:305
def translate (   self,
  target 
)
Translate `self` to the context `target`. That is, return a copy of `self` in the context `target`. 

>>> c1 = Context()
>>> c2 = Context()
>>> x  = Int('x', c1)
>>> y  = Int('y', c2)
>>> # Nodes in different contexts can't be mixed.
>>> # However, we can translate nodes from one context to another.
>>> x.translate(c2) + y
x + y

Definition at line 326 of file z3py.py.

327  def translate(self, target):
328  """Translate `self` to the context `target`. That is, return a copy of `self` in the context `target`.
329 
330  >>> c1 = Context()
331  >>> c2 = Context()
332  >>> x = Int('x', c1)
333  >>> y = Int('y', c2)
334  >>> # Nodes in different contexts can't be mixed.
335  >>> # However, we can translate nodes from one context to another.
336  >>> x.translate(c2) + y
337  x + y
338  """
339  if __debug__:
340  _z3_assert(isinstance(target, Context), "argument must be a Z3 context")
341  return _to_ast_ref(Z3_translate(self.ctx.ref(), self.as_ast(), target.ref()), target)
Z3_ast Z3_API Z3_translate(__in Z3_context source, __in Z3_ast a, __in Z3_context target)
Translate/Copy the AST a from context source to context target. AST a must have been created using co...
def as_ast
Definition: z3py.py:296
def translate
Definition: z3py.py:326

Field Documentation

ast

Definition at line 274 of file z3py.py.

Referenced by FuncDeclRef.__call__(), SortRef.__eq__(), SortRef.__ne__(), FuncDeclRef.arity(), AstRef.as_ast(), SortRef.as_ast(), FuncDeclRef.as_ast(), ExprRef.as_ast(), FuncDeclRef.as_func_decl(), FuncDeclRef.domain(), ArraySortRef.domain(), SortRef.kind(), FuncDeclRef.kind(), SortRef.name(), FuncDeclRef.name(), FuncDeclRef.range(), and ArraySortRef.range().

ctx

Definition at line 275 of file z3py.py.

Referenced by ArithRef.__add__(), FuncDeclRef.__call__(), ArithRef.__div__(), ExprRef.__eq__(), Probe.__eq__(), ArithRef.__ge__(), Probe.__ge__(), ArrayRef.__getitem__(), AstMap.__getitem__(), ApplyResult.__getitem__(), ArithRef.__gt__(), Probe.__gt__(), ArithRef.__le__(), Probe.__le__(), ArithRef.__lt__(), Probe.__lt__(), ArithRef.__mod__(), ArithRef.__mul__(), ExprRef.__ne__(), Probe.__ne__(), ArithRef.__neg__(), ArithRef.__pow__(), ArithRef.__radd__(), ArithRef.__rdiv__(), ArithRef.__rmod__(), ArithRef.__rmul__(), ArithRef.__rpow__(), ArithRef.__rsub__(), ArithRef.__sub__(), Fixedpoint.add_rule(), Tactic.apply(), AlgebraicNumRef.approx(), ExprRef.arg(), ApplyResult.as_expr(), Fixedpoint.assert_exprs(), BoolSortRef.cast(), ApplyResult.convert_model(), ExprRef.decl(), FuncDeclRef.domain(), ArraySortRef.domain(), Fixedpoint.get_answer(), Fixedpoint.get_assertions(), Fixedpoint.get_cover_delta(), Fixedpoint.get_rules(), AstMap.keys(), SortRef.kind(), SortRef.name(), FuncDeclRef.name(), Fixedpoint.param_descrs(), Tactic.param_descrs(), Fixedpoint.parse_file(), Fixedpoint.parse_string(), FuncDeclRef.range(), ArraySortRef.range(), Fixedpoint.set(), Tactic.solver(), ExprRef.sort(), BoolRef.sort(), ArithRef.sort(), ArrayRef.sort(), Fixedpoint.statistics(), Solver.to_smt2(), and Fixedpoint.update_rule().