Z3-如何从给定公式中提取变量? 我使用Z3C++ API(版本4.3.1),我想提取公式的变量(类型 Exp>)。我找到了一个,但它在Z3py中。我想知道Z3C/C++API中是否有一种方法可以从expr对象中提取变量。谢谢
例如(省略了一些细节):Z3-如何从给定公式中提取变量? 我使用Z3C++ API(版本4.3.1),我想提取公式的变量(类型 Exp>)。我找到了一个,但它在Z3py中。我想知道Z3C/C++API中是否有一种方法可以从expr对象中提取变量。谢谢,z3,Z3,例如(省略了一些细节): expr fs=implies(x+y==0,z*x代码> VARTISE//COD>应该包含x,y,z,/p>< p>分布中的C++示例(示例/C++ +示例.CPP)显示了一个示例访问者模式。 这是非常简单的,但会给出一个想法 我在这里重复如下: void visit(expr const & e) { if (e.is_app()) { unsigned num = e.num_args(); for (unsigned i = 0; i
expr fs=implies(x+y==0,z*x<15);
std::vector varlist=get_vars(fs);
<> >代码> VARTISE//COD>应该包含x,y,z,/p>< p>分布中的C++示例(示例/C++ +示例.CPP)显示了一个示例访问者模式。 这是非常简单的,但会给出一个想法 我在这里重复如下:
void visit(expr const & e) {
if (e.is_app()) {
unsigned num = e.num_args();
for (unsigned i = 0; i < num; i++) {
visit(e.arg(i));
}
// do something
// Example: print the visited expression
func_decl f = e.decl();
std::cout << "application of " << f.name() << ": " << e << "\n";
}
else if (e.is_quantifier()) {
visit(e.body());
// do something
}
else {
assert(e.is_var());
// do something
}
}
无效访问(expr const&e){
如果(e.is_app()){
unsigned num=e.num_args();
for(无符号i=0;i 非常感谢,我还有一个问题。我注意到e.is\u app()
和e.is\u var()
是两个不同的分支。但是,变量也是一个应用程序。那么什么样的表达式e
可以输入e.is\u var()
分支而不是e.is\u app()
branch?表达式可以是应用程序、量词或绑定变量。e.is_var()检查仅对绑定变量成功。Z3对绑定变量使用索引。因此,e.is_app和e.is_var的情况从不重叠。
void visit(expr const & e) {
if (e.is_app()) {
unsigned num = e.num_args();
for (unsigned i = 0; i < num; i++) {
visit(e.arg(i));
}
// do something
// Example: print the visited expression
func_decl f = e.decl();
std::cout << "application of " << f.name() << ": " << e << "\n";
}
else if (e.is_quantifier()) {
visit(e.body());
// do something
}
else {
assert(e.is_var());
// do something
}
}