Z3
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups 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())
def __init__
Definition: z3py.py:273
def as_ast
Definition: z3py.py:296
void Z3_API Z3_inc_ref(Z3_context c, Z3_ast a)
Increment the reference counter of the given AST. The context c should have been created using Z3_mk_...
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(Z3_context c, 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__(), ExprRef.arg(), 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(), 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 304 of file z3py.py.

Referenced by FuncDeclRef.__call__(), SortRef.__eq__(), ExprRef.__eq__(), SortRef.__ne__(), ExprRef.__ne__(), ExprRef.arg(), FuncDeclRef.arity(), SortRef.as_ast(), FuncDeclRef.as_ast(), ExprRef.decl(), FuncDeclRef.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(), AstRef.sexpr(), FiniteDomainSortRef.size(), and BoolRef.sort().

305  def ctx_ref(self):
306  """Return a reference to the C context where this AST node is stored."""
307  return self.ctx.ref()
def ctx_ref
Definition: z3py.py:304
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 308 of file z3py.py.

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

309  def eq(self, other):
310  """Return `True` if `self` and `other` are structurally identical.
311 
312  >>> x = Int('x')
313  >>> n1 = x + 1
314  >>> n2 = 1 + x
315  >>> n1.eq(n2)
316  False
317  >>> n1 = simplify(n1)
318  >>> n2 = simplify(n2)
319  >>> n1.eq(n2)
320  True
321  """
322  if __debug__:
323  _z3_assert(is_ast(other), "Z3 AST expected")
324  return Z3_is_eq_ast(self.ctx_ref(), self.as_ast(), other.as_ast())
def is_ast
Definition: z3py.py:351
Z3_bool Z3_API Z3_is_eq_ast(Z3_context c, Z3_ast t1, Z3_ast t2)
compare terms.
def eq
Definition: z3py.py:308
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:304
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())
def get_id
Definition: z3py.py:300
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 as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:304
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 341 of file z3py.py.

342  def hash(self):
343  """Return a hashcode for the `self`.
344 
345  >>> n1 = simplify(Int('x') + 1)
346  >>> n2 = simplify(2 + Int('x') - 1)
347  >>> n1.hash() == n2.hash()
348  True
349  """
350  return Z3_get_ast_hash(self.ctx_ref(), self.as_ast())
unsigned Z3_API Z3_get_ast_hash(Z3_context c, Z3_ast a)
Return a hash code for the given AST. The hash code is structural. You can use Z3_get_ast_id intercha...
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:304
def hash
Definition: z3py.py:341
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__(), Optimize.__repr__(), BitVecRef.__rlshift__(), BitVecRef.__rmod__(), BitVecRef.__rrshift__(), BitVecRef.__rshift__(), BitVecSortRef.cast(), and FPSortRef.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(Z3_context c, Z3_ast a)
Convert the given AST node into a string.
def as_ast
Definition: z3py.py:296
def ctx_ref
Definition: z3py.py:304
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 325 of file z3py.py.

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

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(), SortRef.kind(), FuncDeclRef.kind(), SortRef.name(), FuncDeclRef.name(), FuncDeclRef.range(), and FiniteDomainSortRef.size().

ctx

Definition at line 275 of file z3py.py.

Referenced by FuncDeclRef.__call__(), ExprRef.__eq__(), Probe.__eq__(), Probe.__ge__(), ApplyResult.__getitem__(), Probe.__gt__(), Probe.__le__(), Probe.__lt__(), ExprRef.__ne__(), Probe.__ne__(), Fixedpoint.add_rule(), Optimize.add_soft(), Tactic.apply(), ExprRef.arg(), ApplyResult.as_expr(), Fixedpoint.assert_exprs(), BoolSortRef.cast(), ApplyResult.convert_model(), ExprRef.decl(), FuncDeclRef.domain(), Fixedpoint.get_answer(), Fixedpoint.get_assertions(), Fixedpoint.get_cover_delta(), Fixedpoint.get_rules(), SortRef.kind(), Optimize.model(), SortRef.name(), FuncDeclRef.name(), Fixedpoint.param_descrs(), Optimize.param_descrs(), Tactic.param_descrs(), Fixedpoint.parse_file(), Fixedpoint.parse_string(), Fixedpoint.query(), FuncDeclRef.range(), Fixedpoint.set(), Optimize.set(), Tactic.solver(), ExprRef.sort(), BoolRef.sort(), Fixedpoint.statistics(), Optimize.statistics(), Solver.to_smt2(), and Fixedpoint.update_rule().