我从模板生成问题,由于问题的性质,我不得不依赖量词。现在,求解器只能找到非常简单(可满足)问题的实例。在许多情况下,查找“未饱和”是有效的。找到“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)?我如何使用模式来实现这一点(如果有的话)?