题
(这是我第二次尝试获得帮助。如果问题/方法没有意义或不清楚,请让我知道。我也会对任何小提示或参考感到高兴,这可以帮助我了解Z3与我的SBA)
我正在使用UFBV Z3逻辑对关系规范进行有限的验证。我正在研究的当前问题需要伪造所有可能的模型(由于对可及性谓词的负面使用),这会以较高范围杀死求解器的性能。
因为只有可能的模型的一部分确实很有趣(对其他模型而言不是同构),所以我试图引入对称性破坏技术(在SAT区域已知)。
但是,在某些情况下,我称之为对称性破坏公理的用法可以改善Z3的性能,但是求解器的一般行为变得不稳定。
我的一种方法(我认为最有前途的一种方法)是基于将对称性打破其域名的对称性。它介绍了关系r的每个域d和d axioms中的每个原子a ,它在r^{m}和r^{m [a+1/a]}的二进制表示上执行订单规范的模型。对于同质关系,公理会放松。
让R 子集Axa A A 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
解决方案
在Z3 3.2中,有两个用于处理量化公式的主要引擎:电子匹配和MBQI(基于模型的量词实例化)。电子匹配仅在不满意的公式中有效。 Z3将无法证明使用此引擎可以满足公式。 MBQI更昂贵,但可以表明几类公式(包含量词)是可满足的。这 Z3指南 描述这两个引擎(以及其他选项)。要在非平凡问题上有效地使用Z3,了解这两种引擎的工作方式非常有用。
对称破裂通常是减少搜索空间的非常有效的方法。很难确切地指出您的问题正在发生的事情。我可以看到以下不稳定行为的解释:
MBQI很难创建满足SBA的模型。尽管SBA修剪搜索空间,但如果问题满足,Z3将尝试建立满足它们的解释(模型)。因此,在这种情况下,SBA只是头顶。如果输入公式非常易于满足,则尤其如此,但是当您添加SBA时会变得很难。您可以使用该选项来确认此假设
MBQI_TRACE=true
. 。 Z3将显示诸如:[mbqi] failed k!18
. 。在哪里k![line-number]
是量词ID。您可以使用标签分配自己的ID:qid
. 。这是一个示例:(断言(forall((x t)(y t))(!
顺便说一句,您可以使用MBQI模块使用 MBQI=false
.
在将来的Z3版本中,我们计划为某些量化公式添加一个选项,以禁用MBQI。此功能可能对SBA有用。
- 另一个解释是,电子匹配正在创建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的实例,并删除量化的公式。