Z3的对称性破坏 - 在UFBV逻辑的背景下(新版本)

时间:2012-02-15 20:23:39

标签: z3

(这是我第二次尝试获得帮助。如果问题/方法没有意义或不清楚,请告诉我。我也会对任何小提示或参考感到高兴,这可以帮助我理解Z3与我的SBA的行为)

我正在使用UFBV Z3逻辑进行关系规范的有限验证。我正在研究的当前问题需要伪造所有可能的模型(因为对可达性谓词的否定使用),这会使求解器性能在更高的范围内消失。

因为只有一部分可能的模型确实很有趣(不与其他模型同构),所以我试图引入对称性破解技术(在SAT领域中已知)。

然而,在某些情况下使用我称之为对称性破坏公理可以改善Z3的性能,但是求解器的一般行为变得不稳定。

我的一种方法(我认为最有希望的方法),基于打破关系的对称性w.r.t.他们的域名。它引入了关系R的每个域D和D个公理中的每个原子a \,它对R ^ {M}和R ^ {M [a + 1 / a]}的二进制表示强制执行,其中M是规范的模型。对于同质关系,公理是放松的。

设R'子集AxA为关系。 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)))
)))) 

我的问题是,使用这种SBA的效果不稳定/一致。它不同于绑定和形式规范与另一个。使用全部或仅一个SBA也会影响性能。

在SAT环境中,所谓的对称破坏谓词(SBP)方法的成功基于SAT求解器的回溯能力,它(以某种方式)保证,如果求解器回溯,它将修剪搜索空间使用(其中包括)SBP。

  • Z3背景下的差异(如果有的话)是什么?
  • 如何强制解决使用这些公理来修剪搜索空间(当它回溯时)?
  • 我的SBA使用(量词)模式会有帮助吗?

此致

Aboubakr Achraf El Ghazi

1 个答案:

答案 0 :(得分:4)

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

对称性破坏通常是减少搜索空间的非常有效的方法。很难确切地指出问题中究竟发生了什么。我可以看到以下关于非稳定行为的解释:

  • MBQI很难创建满足SBA的模型。尽管SBA修剪了搜索空间,但如果问题是可以满足的,Z3将尝试构建满足它们的解释(模型)。因此,在这种情况下,SBA只是开销。如果输入公式很容易满足,但在添加SBA时变得很难,则尤其如此。您可以使用选项MBQI_TRACE=true来确认此假设。 Z3将显示以下消息:[mbqi] failed k!18。其中k![line-number]是量词ID。您可以使用标记:qid指定自己的ID。这是一个例子:

      

    (断言(forall((x T)(y T))(!(=>(和(子类型x y))                                             (子类型y x))                                        (= x y))                                    :qid反对称)))

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

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

  • 另一种解释是,E-matching正在创建太多的SBA实例。您可以使用选项QI_PROFILE=true确认。 Z3将转储信息,如:
  

[quantifier_instances]反对称性:12:1:2.00

第一个数字是生成的实例数。如果这是问题的根源,一种解决方案是为生成太多实例的SBA分配限制性模式。例如,Z3将使用(R ai aj)作为SBA(R, A)_upToDiag的模式。这种模式可以创建二次数的实例。另一个实验包括禁用电子匹配。例如,选项

AUTO_CONFIG=false EMATCHING=false MBQI=true

您也可以尝试在上面的配置中禁用相关性传播,选项:RELEVANCY=0

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