Z3
Public Member Functions | Data Fields
AstRef Class Reference
+ Inheritance diagram for AstRef:

Public Member Functions

def __init__
 
def __del__ (self)
 
def __str__ (self)
 
def __repr__ (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 hash (self)
 
- Public Member Functions inherited from Z3PPObject
def use_pp (self)
 

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.

273  def __init__(self, ast, ctx=None):
274  self.ast = ast
275  self.ctx = _get_ctx(ctx)
276  Z3_inc_ref(self.ctx.ref(), self.as_ast())
277 
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 as_ast(self)
Definition: z3py.py:296
def __init__
Definition: z3py.py:273
def __del__ (   self)

Definition at line 278 of file z3py.py.

278  def __del__(self):
279  Z3_dec_ref(self.ctx.ref(), self.as_ast())
280 
def as_ast(self)
Definition: z3py.py:296
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 __del__(self)
Definition: z3py.py:278

Member Function Documentation

def __repr__ (   self)

Definition at line 284 of file z3py.py.

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

Definition at line 281 of file z3py.py.

281  def __str__(self):
282  return obj_to_string(self)
283 
def __str__(self)
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().

296  def as_ast(self):
297  """Return a pointer to the corresponding C Z3_ast object."""
298  return self.ast
299 
def as_ast(self)
Definition: z3py.py:296
def ctx_ref (   self)
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().

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())
325 
def as_ast(self)
Definition: z3py.py:296
Z3_bool Z3_API Z3_is_eq_ast(__in Z3_context c, __in Z3_ast t1, Z3_ast t2)
compare terms.
def eq(self, other)
Definition: z3py.py:309
def ctx_ref(self)
Definition: z3py.py:305
def is_ast(a)
Definition: z3py.py:352
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.

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

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())
351 
def as_ast(self)
Definition: z3py.py:296
unsigned Z3_API Z3_get_ast_hash(__in Z3_context c, __in Z3_ast a)
Return a hash code for the given AST.
def hash(self)
Definition: z3py.py:342
def ctx_ref(self)
Definition: z3py.py:305
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().

287  def sexpr(self):
288  """Return an string representing the AST node in s-expression notation.
289 
290  >>> x = Int('x')
291  >>> ((x + 1)*x).sexpr()
292  '(* (+ x 1) x)'
293  """
294  return Z3_ast_to_string(self.ctx_ref(), self.as_ast())
295 
def as_ast(self)
Definition: z3py.py:296
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 sexpr(self)
Definition: z3py.py:287
def ctx_ref(self)
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.

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)
341 
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(self)
Definition: z3py.py:296
def translate(self, target)
Definition: z3py.py:326

Field Documentation

ast
ctx