基于合一的Z规格说明归纳推理
1. 使用句法排序
归纳推理过程原则上可完全在Z语言内执行,但验证所选排序的良基性可能困难且繁琐,不过有算法可验证部分情况。此前使用良基排序的方法存在两个主要问题:
- 排序选择问题 :在进行合一操作前需先选择排序,虽启发式策略可辅助选择,但最好在确定归纳假设后再做决定。
- 语义排序限制 :假设排序是“语义”的,即其定义可包含在用户规格说明中,但在某些情况下可能导致排序非良基。因此,可采用单独定义的“句法排序”。
下面通过一个涉及整数类型Z的例子来说明句法排序的应用:
设Z表示整数,0、p和s分别表示零、前驱函数和后继函数。给出以下规格说明:
0 : Z
p, s, g : Z → Z
∀x : Z • s(p x) = x
∀x : Z • p(s x) = x
∀S : P Z | 0 ∈ S ∧ (∀x : S • p x ∈ S) ∧ (∀x : S • s x ∈ S) • S = Z
g 0 = 0
g(p 0) = p 0
∀x : Z • g(p(p x)) = p(p(g x))
∀x : Z • g(s x) = s(s(g(p x)))
要证明 |=? ∀x : Z • g x = x ,可利用合一过程。首先生成子目标 |=? ∀x : Z • (∀y : Z • y less x ⇒ g y = y) ⇒ g x = x ,然后将g的方程左边与
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



