解决Z3量化问题的策略

解决Z3量化问题的策略,z3,Z3,我需要解决以下量化公式,并且我尝试了一些策略组合,但是Z3总是返回未知。我从我们新实现的符号状态包含检查中获得了公式,这本质上是建立表示最强后条件的两个量化位向量公式的蕴涵的有效性。以下公式是不可满足性测试的简化形式,用于确定蕴涵有效性。有人知道解决这个问题的正确策略组合吗?或者我能做些什么来帮助Z3 (set-logic ABV) (declare-fun y () (Array (_ BitVec 32) (_ BitVec 8))) (assert (bvsle (concat (sele

我需要解决以下量化公式,并且我尝试了一些策略组合,但是Z3总是返回
未知
。我从我们新实现的符号状态包含检查中获得了公式,这本质上是建立表示最强后条件的两个量化位向量公式的蕴涵的有效性。以下公式是不可满足性测试的简化形式,用于确定蕴涵有效性。有人知道解决这个问题的正确策略组合吗?或者我能做些什么来帮助Z3

(set-logic ABV)
(declare-fun y () (Array (_ BitVec 32) (_ BitVec 8)))
(assert (bvsle (concat (select y #x00000003)
               (concat (select y #x00000002)
                       (concat (select y #x00000001)
                                (select y #x00000000))))
               #x00000000))
(assert (forall ((x (Array (_ BitVec 32) (_ BitVec 8))))
         (let ((a!1 (concat (select x #x00000003)
                            (concat (select x #x00000002)
                                    (concat (select x #x00000001)
                                            (select x #x00000000)))))
               (a!2 (concat (select y #x00000003)
                            (concat (select y #x00000002)
                                    (concat (select y #x00000001)
                                            (select y #x00000000))))))
           (not (and (bvsle a!1 #x00000000)
                (= ((_ extract 31 0) (bvadd #x00000004 a!1))
                   ((_ extract 31 0) (bvadd #x00000003 a!2))))))))
(check-sat-using (then qe simplify solve-eqs bit-blast sat))

提前谢谢。

我们的问题可以重新表述,以便Z3可以解决约束。select索引都是常量,因此在这种情况下,我们可以简单地用普通常量代替x和y,而不是数组。在这种情况下,Z3将表明约束是可满足的。感谢Nikolaj Bjorner的这个解决方案。我们的问题可以重新表述,这样约束就可以用Z3来解决。select索引都是常量,因此在这种情况下,我们可以简单地用普通常量代替x和y,而不是数组。在这种情况下,Z3将表明约束是可满足的。感谢Nikolaj Bjorner提供此解决方案。