我创建了一个将命题逻辑公式转换为qdimacs的函数。我甚至想将一些bit_vector表达式转换为pl形式,然后将其转换为QDIMACS。我将这种方法称为“ bit-blast”,并举例说明:
std::cout << "tactic example 2\n";
context c;
expr x = c.real_const("x");
expr y = c.real_const("y");
goal g(c);
g.add(x < 0 || x > 0);
g.add(x == y + 1);
g.add(y < 0);
tactic t(c, "bit-blast");
apply_result r = t(g);
for (unsigned i = 0; i < r.size(); i++)
{
std::cout << "subgoal " << i << "\n" << r[i] << "\n";
}
在此示例中,他们使用“ real_const”,但我需要将表达式设为“ bv_const”。我尝试使用bv_const执行它,但显示错误:Aborted(core dumped)
我什至尝试过这样的程序:
#include<z3++.h>
#include<iostream>
using namespace std;
using namespace z3;
int main()
{ context c;
tactic t = tactic(c, "bit-blast");
goal g(c);
expr x = c.bv_const("x", 16);
expr y = c.bv_const("y", 16);
expr z = c.bv_const("z", 16);
g.add(z = x +y);
apply_result r = t(g);
for (unsigned i = 0; i < r.size(); i++) {
std::cout << "subgoal " << i << "\n" << r[i] << "\n";
}
}
即使这样也会产生相同的错误:Aborted(core dumped)
。
是否可以在表达式中存储“ bit-blast”的输出并打印出来? 是否有一个示例程序可以演示我的问题的解决方案,或者您可以告诉我如何完成此任务?
谢谢。