为什么Z3在这个简单的输入上返回“未知”?

时间:2014-03-26 19:06:10

标签: z3

这是输入:

(set-option :auto-config false)
(set-option :mbqi false)
(declare-sort T6)
(declare-sort T7)
(declare-fun set23 (T7 T7) Bool)
(assert (forall ((bv1 T7) (bv0 T7))
  (= (set23 bv0 bv1) (= bv0 bv1))))
(check-sat)

请注意,Z3不会超时。它几乎瞬间返回unknown

1 个答案:

答案 0 :(得分:1)

这会返回未知因为您已禁用量词处理机制(例如,您禁用了基于模型的量词实例化模块,MBQI),并且看起来使用您指定的选项,Z3没有启用任何其他机制对于决定量化的公式,所以它确定它不能决定你的公式并且返回未知。

如果您将其更改为true以启用MBQI,您将按预期收到sat。有多种技术(MBQI,量化消除等)用于决定Z3中的量化公式(参见本手册中的概述:http://rise4fun.com/z3/tutorialcontent/guide#h28),例如,对于您的示例,您也可以坐下来预期使用宏查找模块(rise4fun link:http://rise4fun.com/Z3/NuQg):

(set-option :auto-config false)
(set-option :mbqi false)
(set-option :macro-finder true)

(declare-sort T6)
(declare-sort T7)
(declare-fun set23 (T7 T7) Bool)
(assert (forall ((bv1 T7) (bv0 T7))
  (= (set23 bv0 bv1) (= bv0 bv1))))
(check-sat) ; sat