我正在使用Z3 SMT求解器来解决我在逻辑QF_BV中使用SMTLIB 2语言表达的问题。使用z3(逻辑QF_BV)获得“良好”不饱和核心
该模型是不可满足的,我试图让解算器产生一个不饱和的核心。
我的模型由几个'强制性'约束组成,我使用assert
语句指定。
我希望用于不饱和核心生成的断言已使用(assert (! (EXPR) :named NAME))
构造指定。如预期的那样,Z3给我unsat
。然而,Z3似乎总是倾倒一个由所有命名断言组成的“微不足道”的不足核心。
我知道存在我命名断言的一个子集,它是一个不可核心的。我发现这个核心使用Yices SMT解算器,它经常给我相对较小的不饱和核心。 Yices模型与Z3模型相同(几乎是从SMT2到Yices输入语言的逐行翻译)。
正在生产“良好”不饱和核心的解算器特定功能,还是有任何通用的建议/更改,我可以帮助Z3给我一个更好的核心?
感谢您的回复! 我已经上传了一个示例脚本[这里](https://gist.github.com/2fe5ce8cf42af9ffaf59)。我已经包含了一些简要说明以帮助理解。 您能否看看我们是否有任何提示? – dhrumeel 2012-02-29 23:23:27
我收到了你的剧本,我会更新答案。顺便说一句,在一些位向量文字前,缺少'#'。 – 2012-03-01 15:41:13