Z3能否应用位宽度缩减技术来解决位向量等价问题?

Z3能否应用位宽度缩减技术来解决位向量等价问题?,z3,smt,theorem-proving,Z3,Smt,Theorem Proving,在一次测试中,我发现了以下等价性,它基于混合布尔算术逻辑,我似乎无法在合理的时间内(几秒或几分钟)用Z3证明。我遵循一种反例驱动的方法(CEGIS),将原始表达式和合成候选项提供给一个不同的查询:如果没有找到反例,则合成是正确的 (set-logic QF_BV) (declare-fun y () (_ BitVec 64)) (declare-fun x () (_ BitVec 64)) (assert (let ((a!1 (bvsub (bvsub (bvsub x #x0000000

在一次测试中,我发现了以下等价性,它基于混合布尔算术逻辑,我似乎无法在合理的时间内(几秒或几分钟)用Z3证明。我遵循一种反例驱动的方法(CEGIS),将原始表达式和合成候选项提供给一个不同的查询:如果没有找到反例,则合成是正确的

(set-logic QF_BV)
(declare-fun y () (_ BitVec 64))
(declare-fun x () (_ BitVec 64))
(assert (let ((a!1 (bvsub (bvsub (bvsub x #x0000000000000002) y)
                  (bvshl (bvor x (bvnot y)) #x0000000000000001))))
(let ((a!2 (bvmul (bvand (bvxor a!1 x) (bvnot y))
                  (bvand y (bvnot (bvxor a!1 x))))))
(let ((a!3 (bvadd (bvmul (bvor (bvxor a!1 x) y) (bvand (bvxor a!1 x) y)) a!2)))
  (distinct a!3 (bvmul y y))))))
(check-sat)
我知道对于缩减的位宽度位向量(例如8或16),可以很好地保持等价性,因此我想知道Z3是否使用了任何技术来首先证明查询的位宽度缩减版本,然后将结果扩展到全宽度版本

我尝试了Z3bv size reduction策略,但它似乎不符合我的要求,因为它旨在减少常量的大小,而不是符号位向量的大小。此外,加速量化位向量解决位宽度缩减和扩展的方法论文似乎不适用于这种特定情况,因为没有生成有用的计数器模型,保持问题的大小不变

我不是SAT/SMT人员,因为我很少使用Z3之类的工具作为黑匣子来处理合成问题,所以我想知道:

  • 我能做些什么来减少位向量的位宽度,证明减少的查询,并将结果扩展到全宽度查询
  • 是否有其他可行的方法来证明上述查询的不可满足性

这是一个极好的问题。不幸的是,我不认为z3实现了这些技术,就我所知,也没有现成的东西可以使用。您可能希望ping z3开发者,看看他们是否有其他建议。谢谢@alias的评论。我现在故意避免打开GitHub问题,因为在其他问题上,Z3开发人员指出堆栈溢出应该是解决此类问题的正确位置。我会等着看是否有人有任何建议,哪怕是非开箱即用的方法或是定制的战术管道,我可以自己尝试。作为最后手段,我将在bw还原解算器存储库或Z3存储库上打开GitHub问题。