Z3 C ++ API产生“未知”,而序列化输出上的二进制产生“不满”

时间:2017-01-26 02:39:58

标签: c++ z3

当我使用Z3 C ++ API建立一组约束时,我得到“未知”作为回应。但是,如果我使用运算符<<()序列化z3::solver对象并将输出传递给z3二进制文件,则会按预期产生“不良”。有趣的是,如果我使用z3::solver::to_smt2()而不是运算符<<(),则Z3二进制输出“ unknown ”。

为什么会这样?如何使用C ++ API获取Z3以“看到”独立二进制文件“看到”的内容?

我已经将序列化的约束文件上传到了pastebin,以防

使用运算符<<():http://pastebin.com/uRfP90W5

使用to_smt2():http://pastebin.com/6qQ6WsHN

1 个答案:

答案 0 :(得分:0)

该示例使用非线性算法,因此最终使用不完整的求解器,尽管它是对实数的非线性算术。您可以使用命令

查询z3返回未知的原因

(get-info:reason-unknown)

在(check-sat)电话之后

。然后会说:

(:原因未知" smt战术未能显示目标为坐/不饱(不完整(理论算术))")

深入研究公式,我们看到函数应用程序之间的几次乘法。在使用自由函数的实数和公式的非线性推理的Z3中没有完全集成。