Why does Z3 return “unknown” on this simple input?

后端 未结 1 492
我在风中等你
我在风中等你 2021-01-25 11:37

Here is the input:

(set-option :auto-config false)
(set-option :mbqi false)
(declare-sort T6)
(declare-sort T7)
(declare-fun set23 (T7 T7) Bool)
(assert (forall          


        
1条回答
  •  一整个雨季
    2021-01-25 12:24

    This returns unknown because you've disabled the quantifier handling mechanism (e.g., you disabled the model based quantifier instantiation module, MBQI), and it appears that with the options you've specified, Z3 does not have any other mechanisms enabled for deciding quantified formulas, so it figures out that it cannot decide your formula and returns unknown.

    If you change that to true to enable MBQI, you will receive sat as expected. There are a variety of techniques (MBQI, quantifier elimination, etc.) for deciding quantified formulas in Z3 (see in the manual here for an overview: http://rise4fun.com/z3/tutorialcontent/guide#h28 ), e.g., for your example, you can also get sat as expected using the macro finder module (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
    

    0 讨论(0)
提交回复
热议问题