程序验证(六):纳尔逊-欧朋算法(Nelson-Oppen Procedure)

程序验证(六):纳尔逊-欧朋算法(Nelson-Oppen Procedure)

动机

截至目前,我们学习了一些一阶理论,每一个都是关于某一种数据类型
然而,现实中的公式并不是由单一的理论组成,如:
∀ i . 0 ≤ i ≤ n → a [ i ] ≤ a [ i + 1 ] \forall i.0\le i\le n\to a[i]\le a[i+1] i.0ina[i]a[i+1]
这个公式实际上包含了两个理论:等价与数组
我们需要找到一个方法,将复杂的一阶逻辑公式转化为简单的一阶逻辑公式

一些概念

复合理论

给定 T 1 , T 2 T_1,T_2 T1,T2,且 Σ 1 ∩ Σ 2 = { = } \Sigma_1\cap \Sigma_2 = \{=\} Σ1Σ2={ =},那么复合理论 T 1 ∪ T 2 T_1\cup T_2 T1T2有:

  • 符号集: Σ 1 ∪ Σ 2 \Sigma_1 \cup \Sigma_2 Σ1Σ2
  • 公理集: A 1 ∪ A 2 A_1 \cup A_2 A1A2
    纳尔逊-欧朋(Nelson-Oppen)复合方法: T 1 ∪ T 2 T_1\cup T_2 T1T2是可判定的,如果 T 1 T_1 T1 T 2 T_2 T2均满足:
  • 是量词自由的合取的片段(Quantifier-free, conjunctive fragments)
  • 可判定的
  • 稳定无限的(stably-infinite)

稳定无限的理论

一个建立在符号集 Σ \Sigma Σ上的理论 T T T是稳定无限的,如果对于每个量词自由的公式 F F F,只要 F F F T T T-可满足的,存在一个解释,它的大小(cardinality)是无限的
例如这样的一个理论:

  • Σ = { a , b , = } \Sigma =\{a,b,=\} Σ={ a,b,=}
  • 公理: ∀ x . x = a ∨ x = b \forall x.x=a\vee x=b x.x=ax=b
    这个理论不是稳定无限的,因为每个解释 ( D , I ) (D,I) (D,I)都有这样的性质: D D D包含至多两个元素,即 ∣ D ∣ ≤ 2 |D|\le 2 D2
    但是大多数我们关心的理论,即 T E , T A , T Z T_E,T_A,T_Z TE,TA,TZ等等,都是稳定无限的

纳尔逊-欧朋算法

概况

输入:由复合理论 T 1 ∪ T 2 T_1\cup T_2 T1T2得到的公式 F F F
输出:等价的公式 F 1 ∧ F 2 F_1\wedge F_2 F1F2,这里:

  • F 1 F_1 F1是一个 T 1 T_1 T1公式
  • F 2 F_2 F2是一个 T 2 T_2 T2公式
    这个算法的功能:
  • F F F净化为 F 1 F_1 F1 F 2 F_2 F2
  • F 1 F_1 F1 F 2 F_2 F2中共享的变量做等价变换

步骤1:变量抽象

理论

目标: F F F中所有的文字或者属于 T 1 T_1 T1,或者属于 T 2 T_2 T2,但不能是二者共有
方法:将以下两个转化方法不断使用,直到不能再用为止:

  • 对于任何一项 f ( … , t , …   ) f(\dots ,t,\dots) f(,t,),满足 f ∈ Σ i f\in \Sigma_i fΣi t ∉ Σ i t\not\in \Sigma_i tΣi,将 t t t用一个新的(fresh)变量 w w w替换,并在最后合取上 t = w t=w t=w
  • 对于任一谓词 p ( … , t , …   ) p(\dots ,t,\dots) p(,t,),满足 p ∈ Σ i p\in \Sigma_i pΣi t ∉ Σ i t\not\in \Sigma_i t
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值