如何使用c ++在z3中的位向量表达式上打印“位冲击”的输出?

时间:2019-06-26 08:15:14

标签: c++ z3 smt bitvector

我创建了一个将命题逻辑公式转换为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”的输出并打印出来? 是否有一个示例程序可以演示我的问题的解决方案,或者您可以告诉我如何完成此任务?

谢谢。

0 个答案:

没有答案