Z3的对称破缺——在UFBV逻辑(新版本)的背景下

Z3的对称破缺——在UFBV逻辑(新版本)的背景下,z3,Z3,(这是我第二次尝试寻求帮助。如果问题/方法没有意义或不清楚,请让我知道。我也很高兴得到任何小提示或参考,这可以帮助我了解Z3在SBA中的行为) 我正在使用UFBV Z3逻辑对关系规范进行有界验证。我正在研究的当前问题需要对所有可能的模型进行篡改(因为对可达性谓词的负面使用),这会在更高的范围内降低解算器的性能 因为只有一部分可能的模型确实有趣(与其他模型不同构),所以我尝试介绍对称性破缺技术(在SAT领域已知) 然而,在某些情况下,使用我所称的对称破缺公理可以提高Z3的性能,但解算器的一般行为变

(这是我第二次尝试寻求帮助。如果问题/方法没有意义或不清楚,请让我知道。我也很高兴得到任何小提示或参考,这可以帮助我了解Z3在SBA中的行为)

我正在使用UFBV Z3逻辑对关系规范进行有界验证。我正在研究的当前问题需要对所有可能的模型进行篡改(因为对可达性谓词的负面使用),这会在更高的范围内降低解算器的性能

因为只有一部分可能的模型确实有趣(与其他模型不同构),所以我尝试介绍对称性破缺技术(在SAT领域已知)

然而,在某些情况下,使用我所称的对称破缺公理可以提高Z3的性能,但解算器的一般行为变得不稳定

我的一个方法(我认为是最有希望的方法)是基于打破关系的对称性。它引入了关系R的每个域D和D公理中的每个原子a,它们在R^{M}和R^{M[a+1/a]}的二进制表示上强制一个顺序,其中M是规范的模型。对于齐次关系,公理是松弛的

设为关系的子集。我对R的放松对称破缺公理如下:

;; SBA(R, A)_upToDiag
(assert
 (forall ( (ai A) (aj A) )
  (=>
   (bvult ai aj)
   (=>
    (forall ((x A))
     (=>
       (bvult x aj)
       (= (R ai x) (R (bvadd ai (_ bv1 n)) x)) 
     )
    )
    (=>
     (R ai aj)
     (R (bvadd  ai  (_ bv1 n)) aj)
)))))    

;; SBA(R, A)_diag
(assert
 (forall ( (ai A) )
  (=>
   (forall ((x A))
    (=>
      (bvult x ai)
      (= (R ai x) (R (bvadd ai (_ bv1 n)) x)) 
    )
   )
   (=>
    (R ai ai)
    (R (bvadd  ai  (_ bv1 n)) (bvadd  ai  (_ bv1 n)))
)))) 
我的问题是,使用此SBAs的效果不稳定/不一致。它因绑定和表单规范的不同而不同。此外,使用全部或仅使用一个SBA也会影响性能

在SAT环境中,所谓的对称性破缺谓词(SBP)方法的成功基于SAT解算器的回溯能力,这(以某种方式)保证,如果解算器回溯,它将使用SBP等工具修剪搜索空间

  • 在Z3的上下文中有什么区别(如果有的话)
  • 我如何强制执行solve以使用这些公理来修剪搜索空间(当它回溯时)
  • 在我的SBA中使用(量词)模式会有帮助吗
问候,


Aboubakr Achraf El Ghazi

在Z3.2中,有两个主要引擎用于处理量化公式:E匹配和MBQI(基于模型的量词实例化)。E-匹配仅在不可满足的公式中有效。Z3将无法证明使用此引擎的公式是可满足的。MBQI更昂贵,但它可以表明几类公式(包含量词)是可满足的。描述了这两个引擎(和其他选项)。为了在非平凡问题上有效地使用Z3,了解这两个引擎是如何工作的非常有用

对称性破缺通常是减少搜索空间的有效方法。很难准确地指出你的问题到底是怎么回事。我可以看到以下关于非稳定行为的解释:

  • MBQI很难创建满足SBAs要求的模型。尽管SBA删减了搜索空间,但如果问题是可满足的,Z3将尝试构建满足它们的解释(模型)。因此,在这种情况下,SBA只是开销。如果输入公式很容易满足,但在添加SBA时变得很难满足,则这一点尤其正确。您可以使用选项
    MBQI\u TRACE=true
    来确认此假设。Z3将显示如下消息:
    [mbqi]失败k!18
    。其中
    k![行号]
    是量词id。您可以使用标签
    :qid
    分配自己的id。以下是一个例子:

    (assert(forall((x T)(y T))(!(=>(和(子类型x y)) (y-x亚型) (=x y)) :qid反对称性)

顺便说一句,您可以使用
MBQI=false
禁用MBQI模块

在Z3的未来版本中,我们计划添加一个选项来禁用某些量化公式的MBQI。此功能可能对SBA有用

  • 另一种解释是,电子匹配创建了太多SBA实例。您可以使用选项
    QI_PROFILE=true
    确认。Z3将转储以下信息:
[量词_实例]反对称性:12:1:2.00

第一个数字是生成的实例数。如果这是问题的根源,一种解决方案是为生成过多实例的SBA分配限制性模式。例如,Z3将使用
(rai aj)
作为
SBA(R,a)\u uptdiag
的模式。这种模式可能会创建二次数量的实例。另一个实验是禁用电子匹配。例如,选项

AUTO_CONFIG=false EMATCHING=false MBQI=true
您也可以尝试在上面的配置中禁用相关性传播,选项:
relevancy=0


最后,另一个选项是生成您认为有用的SBA实例,并删除量化公式。

在Z3 3.2中,有两个主要引擎用于处理量化公式:E-matching和MBQI(基于模型的量词实例化)。E-匹配仅在不可满足的公式中有效。Z3将无法证明使用此引擎的公式是可满足的。MBQI更昂贵,但它可以表明几类公式(包含量词)是可满足的。描述了这两个引擎(和其他选项)。为了在非平凡问题上有效地使用Z3,了解这两个引擎是如何工作的非常有用

对称性破缺通常是减少搜索空间的有效方法。很难准确地指出你的问题到底是怎么回事。我可以看到以下关于非稳定行为的解释:

  • MBQI很难创建满足SBAs要求的模型。虽然SBA删减了搜索空间,但如果