Z3 如何获取添加到解算器中任何约束的所有变量?

Z3 如何获取添加到解算器中任何约束的所有变量?,z3,z3py,Z3,Z3py,我正在使用Z3py,并试图获得解算器中任何约束中的所有变量集。我可以调用Solver.assertions()来获取ASTVector,然后循环该向量并获取类型为BoolRef的对象,例如,但是我被卡住了。我如何递归地迭代断言,例如BoolRef实例,以获得单个变量?谢谢Taylor的回答。我认为第二个链接解决了这个问题。 更详细地说,Leo在前面的回答中添加的python脚本遍历AST,AstMap确保共享子表达式只遍历一次。变量/声明集存在于解算器内部,尽管我上次检查了,但在C/C++API

我正在使用Z3py,并试图获得解算器中任何约束中的所有变量集。我可以调用
Solver.assertions()
来获取
ASTVector
,然后循环该向量并获取类型为
BoolRef
的对象,例如,但是我被卡住了。我如何递归地迭代断言,例如
BoolRef
实例,以获得单个变量?

谢谢Taylor的回答。我认为第二个链接解决了这个问题。
更详细地说,Leo在前面的回答中添加的python脚本遍历AST,AstMap确保共享子表达式只遍历一次。

变量/声明集存在于解算器内部,尽管我上次检查了,但在C/C++API外部不可见(参见,例如:)。除非这一点有所改变,否则另一种方法是跟踪您自己使用过的所有变量/声明,然后您将拥有所有可用的变量/声明。如果您想改为走递归路线,有几种方法可以走AST: