获取策略应用结果作为 Z3 中的表达式
Get result of tactics application as an expression in Z3
在 C++ 中是否有类似 Z3py 接口的 as_expr() 的东西。我试图获得将策略应用为 z3 表达式 exp 而不是类型 apply_result 的结果。
例如,在下面的代码中
context c;
expr x = c.bool_const("x");
expr y = c.bool_const("y");
expr f = ( (x || y) && (x && y) );
solver s(c);
goal g(c);
g.add( f );
tactic t1(c, "simplify");
apply_result r = t1(g);
std::cout << r << "\n";
此外,有什么方法可以将 apply_result 转换为 z3 表达式吗?
一般来说,战术应用的结果是 一组 个目标。大多数战术只会产生一个目标,但有些战术会产生多个目标。对于这些子目标中的每一个,您可以使用 as_expr()
然后将它们逻辑或在一起。如果有帮助,我们可以将 as_expr(...)
添加到 class apply_result
。 (目前忙于其他事情;如果您自己添加,请提交拉取请求,非常欢迎贡献!)
在 C++ 中是否有类似 Z3py 接口的 as_expr() 的东西。我试图获得将策略应用为 z3 表达式 exp 而不是类型 apply_result 的结果。
例如,在下面的代码中
context c;
expr x = c.bool_const("x");
expr y = c.bool_const("y");
expr f = ( (x || y) && (x && y) );
solver s(c);
goal g(c);
g.add( f );
tactic t1(c, "simplify");
apply_result r = t1(g);
std::cout << r << "\n";
此外,有什么方法可以将 apply_result 转换为 z3 表达式吗?
一般来说,战术应用的结果是 一组 个目标。大多数战术只会产生一个目标,但有些战术会产生多个目标。对于这些子目标中的每一个,您可以使用 as_expr()
然后将它们逻辑或在一起。如果有帮助,我们可以将 as_expr(...)
添加到 class apply_result
。 (目前忙于其他事情;如果您自己添加,请提交拉取请求,非常欢迎贡献!)