【发布时间】:2012-10-23 07:02:54
【问题描述】:
我从模板生成问题,由于问题的性质,我不得不依赖量词。现在,求解器只能找到非常简单(可满足)问题的实例。在许多情况下,查找“未饱和”是有效的。查找“sat”很少有用。
问题在于,即使是简单的事情,比如定义两个不相交的集合,也必须用一些非常讨厌的公式来表达:
(assert (! (disjoint_1 B A) :named a2 ))
(assert (! ; axiom for "disjoint_1"
(forall ((A Rel1)(B Rel1)) (=
(disjoint_1 A B)
(forall ((a0 Atom)) (not (and (in_1 a0 A) (in_1 a0 B))))))
:named ax8))
为了找到一个实例,Z3 必须找到函数in_1 的解释。所有其他功能都依赖它。
到目前为止,我听到以下与我的问题相关的陈述:
- 每个量词都应该有一个模式
- 如果有任何无限模型,实例查找将不起作用
我在网络或文献中找不到任何有用的信息来说明如何实现或避免这种情况。所以我的问题仍然存在:
如何有效地找到可满足公式的实例(使用 Z3)? 我如何使用模式来实现这一点(如果有的话)?
【问题讨论】: