获取策略应用结果作为 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。 (目前忙于其他事情;如果您自己添加,请提交拉取请求,非常欢迎贡献!)