Skip to content

总正确性 Hoare 逻辑

Total correctness Hoare logic

在部分正确性规则之外加入终止义务,以良基变式排除循环或递归的无限执行。

条目类型
模型

形式陈述

总正确性判断 {P}C{Q}t 表示:从每个满足 P 的状态出发,C 的每条允许执行都正常终止,并且终态满足 Q。它比普通部分正确性三元组多一个全称终止承诺;存在一条成功路径不够,demonic 非确定程序的所有分支都必须结束。

循环规则在 循环不变式 Hoare 规则 的初始化、保持和退出义务上再加变式。设 (W,) 是良基集合,V 把状态映入 W。需要在 IB 下证明 VW,并对每个旧值 αW 证明

{IBV=α} C {IVα}t.

由于 良基关系 不存在无限下降链,循环体不可能被无限执行。若取 W=N,常见写法引入不被 C 修改的新逻辑变量 z,要求

IBV0,{IBV=z} C {I0V<z}t.

“看起来越来越小”不能替代值域、严格性和循环体终止这三项条件。

规则的反证结构很直接。若循环存在一条无限执行,每次 guard 为真并完成 body 后都会产生

V0V1V2,

这与 W 的良基性矛盾。若 body 自己可能在某轮内部发散,就根本得不到下一个 Vi,所以循环体三元组必须采用总正确性;仅证明“只要 body 返回就下降”仍会漏掉内部非终止。

直觉

不变式回答“走到任何一轮都没有偏离正确区域”,变式回答“还剩多少不能无限消耗的进度”。一项是护栏,另一项是倒计时。倒计时不必是运行时间的精确估计,只需每次实际继续循环时落到更小的良基元素。

自然数适合单阶段循环;嵌套阶段可能需要字典序对、多重集合序或序数。复杂值域并不会自动带来证明,仍要展示每个程序分支严格下降。反过来,若某些步骤保持度量不变,就必须证明它们之间不能无限停顿,或换用能同时记录阶段与大小的组合变式。

例如外层剩余任务数为 m、当前任务内部剩余步数为 k 时,可用字典序 (m,k):内部步保持 m 并减小 k,完成任务后严格减小 m,即使新任务的 k 重新变大,整个二元组仍下降。只取 m+k 未必成立,因为切换任务时 k 可能大幅增加。

例子与边界

用重复减法计算非负整数除法:

text
q := 0
r := n
while r >= d do
    r := r - d
    q := q + 1

前置为 n0d>0,取

In=qd+rr0,V=r.

初始化显然成立。若 guard 为真,则新值 q=q+1r=rd 满足

qd+r=(q+1)d+(rd)=qd+r=n.

guard 给 r0,而 d>0r<r,所以自然数变式严格下降。退出时 r<d,结合不变式得到 n=qd+r0r<d,即商余数规格;这份证明同时承担功能与终止,而不是把“不断减”当作口头结论。

若允许 d=0,变式不下降;若使用无符号机器整数且减法可回绕,rd 的自然数论证也不再适用。随机程序的几乎必然终止只排除概率正的永久发散集合,不等于每条样本路径终止。并发线程即使局部变式下降,也可能因永远得不到调度而不结束,需另加公平性或进展逻辑。

推论与应用

总正确性把安全证明与终止证书组合为可复查的规则。递归过程可用参数上的良基下降替代循环变式;项重写系统用简化序;自动终止分析则尝试合成线性、词典序或分段排名函数。合成器没有找到候选,只说明当前模板失败,不是程序必然发散。

验证工具还必须区分正常返回、异常、stuck 与非终止。若异常属于接口允许的完成方式,需要相应后置条件;若目标要求正常返回,异常路径就是总正确性反例。性能上“很慢”和逻辑上“必终止”也是不同结论:良基证明不提供实用时间界,除非进一步量化每次下降的成本和初始度量。

总正确性也有可组合性侧面:顺序 C;D 要先证明 C 从前置出发终止并建立中间断言,再证明 D 从每个这样的中间状态终止。若 C 只在某一条幸运路径建立 D 的前置,存在性执行不能满足总正确性的全称语义。

参考资料
  • Edsger W. Dijkstra, A Discipline of Programming, Prentice Hall, 1976, Chs. 1–4。
  • Krzysztof R. Apt, Frank S. de Boer, and Ernst-Rüdiger Olderog, Verification of Sequential and Concurrent Programs, 3rd ed., Springer, 2009, Chs. 3–5。
  • Glynn Winskel, The Formal Semantics of Programming Languages, MIT Press, 1993, Ch. 7。
  • Nachum Dershowitz and Zohar Manna, “Proving Termination with Multiset Orderings,” Communications of the ACM 22(8), 1979, pp. 465–476。
关系图谱5 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系