Z3py:如何从公式中获取变量列表?

Z3py:如何从公式中获取变量列表?,z3,z3py,Z3,Z3py,在Z3Py中,我有一个公式。如何检索公式中使用的变量列表 谢谢 Vu Nguyen为Z3Py提供了几个有用的程序。 他执行了一个程序get_vars,以收集使用的变量列表。 可以找到此程序和许多其他程序。 他的贡献将在下一个官方版本中公布。 下面是一个版本的get_vars,可以在上在线执行 #允许将Z3 AST存储到Python哈希表中的包装器。 类AstRefKey: 定义初始化(self,n): self.n=n 定义散列(自我): 返回self.n.hash() 定义(自身、其他): 返

在Z3Py中,我有一个公式。如何检索公式中使用的变量列表


谢谢

Vu Nguyen为Z3Py提供了几个有用的程序。 他执行了一个程序
get_vars
,以收集使用的变量列表。 可以找到此程序和许多其他程序。 他的贡献将在下一个官方版本中公布。 下面是一个版本的
get_vars
,可以在上在线执行

#允许将Z3 AST存储到Python哈希表中的包装器。
类AstRefKey:
定义初始化(self,n):
self.n=n
定义散列(自我):
返回self.n.hash()
定义(自身、其他):
返回self.n.eq(其他n)
定义报告(自我):
返回str(self.n)
def askey(n):
断言isinstance(n,AstRef)
返回AstRefKey(n)
def获取变量(f):
r=集合()
def收集(f):
如果是常数(f):
如果f.decl().kind()==Z3_OP_未解释且不是r中的askey(f):
r、 添加(askey(f))
其他:
对于f.children()中的c:
收集(c)
收集(f)
返回r
x、 y=整数('x y')
a、 b=布尔值('AB')
打印get_vars(暗示(和(x+y==0,x*2==10),或(a,暗示(a,b==False)))