为啥连词的电子匹配对顺序/大小写策略敏感?

Posted

技术标签:

【中文标题】为啥连词的电子匹配对顺序/大小写策略敏感?【英文标题】:Why is E-matching for conjunctions sensitive to order / case-splitting strategy?为什么连词的电子匹配对顺序/大小写策略敏感? 【发布时间】:2015-01-26 12:08:50 【问题描述】:

鉴于以下简化的量词,并根据 Boogie 生成的选项设置 Z3 选项(详细信息如下),结果我得到“未知”:

(declare-fun F (Int) Bool)
(declare-fun G (Int) Bool)

(assert (forall ((x Int)) (! (and
  (F x) (G x))
  :pattern ((F x))
)))
(assert (not (forall ((x Int)) (! (and
  (G x) (F x))
  :pattern ((F x))
))))
(check-sat)

我对(我认为)Z3 会解决这个问题的理解是,将存在的(不是全部的)skolemise,这将产生 F 和 G 的地面实例。鉴于 e-graph 中的这些,我们应该能够实例化另一个量词,然后变得不满足。我可以看到 Z3 可能必须进行大小写拆分才能执行此操作,但我希望在删除量词并填充 e-graph 之后进行这种大小写拆分。

相反,在上述问题中,第一个量词没有被实例化。我做了一些观察:

    在第一个量词中交换 (F x) 和 (G x) 项的顺序会导致“未饱和”没有任何量词实例化(我想一些简化发现了两个量化断言之间的相似性?)。 在第二个量词(以及第一个量词)中交换 (G x) 和 (F x) 项的顺序会导致“unsat”与单个量词实例化(这是我期望的行为一般)。 更改 smt.case_split 选项会影响行为。设置为 3(由 Boogie 选择)或 5,我们得到“未知”。设置为 0、1、2 或 4,我得到“未饱和”。

很高兴了解上述情况,以及为什么(在失败的情况下)这些术语在 skolemisation 后并不总是出现在 e-graph 中。我不确定更改 case_split 选项的效果一般是什么。目前,我认为 Boogie 不允许更改它(并覆盖在命令行上所做的任何选择)。但我觉得理想情况下,电子图应该在所有情况下都能获取信息。

这是完整文件(删除大部分选项集似乎对失败案例没有影响,除了 smt.case_split 一个):

(set-option :print-success false)
(set-info :smt-lib-version 2.0)
(set-option :AUTO_CONFIG false)
;(set-option :MODEL.V2 true)
(set-option :smt.PHASE_SELECTION 0)
(set-option :smt.RESTART_STRATEGY 0)
(set-option :smt.RESTART_FACTOR |1.5|)
(set-option :smt.ARITH.RANDOM_INITIAL_VALUE true)
(set-option :smt.DELAY_UNITS true)
(set-option :NNF.SK_HACK true)
(set-option :smt.MBQI false)
(set-option :smt.QI.EAGER_THRESHOLD 100)
(set-option :smt.QI.COST |"(+ weight generation)"|)
(set-option :TYPE_CHECK true)
(set-option :smt.BV.REFLECT true)
(set-option :TIMEOUT 0)
(set-option :smt.QI.PROFILE true)
(set-option :smt.CASE_SPLIT 3)
; done setting options


(declare-fun F (Int) Bool)
(declare-fun G (Int) Bool)

(assert (forall ((x Int)) (! (and
  (F x) (G x))
   :pattern ((F x))
)))
(assert (not (forall ((x Int)) (! (and
(G x) (F x))
  :pattern ((F x))
))))
(check-sat)

【问题讨论】:

【参考方案1】:

https://***.com/users/1096362/nikolaj-bjorner 对此问题的回答解决了这个问题: Surprising behaviour when trying to prove a forall

将证明义务翻译成析取式,然后是相应的条款相关性,解释了为什么 Z3 不将这两个连词都视为潜在触发因素。

【讨论】:

以上是关于为啥连词的电子匹配对顺序/大小写策略敏感?的主要内容,如果未能解决你的问题,请参考以下文章

CCF 201409-3 字符串匹配

CCF201409-3 字符串匹配

CCF-CSP字符串匹配

MySQL大小写敏感说明

YAML

用jquery创建的元素属性为啥大写都变小写了