Skip to content

Hoare 三元组

Hoare triple

断言若前置条件成立且程序终止,则后置条件成立的 {P}C{Q} 形式。

条目类型
定义

形式陈述

Hoare 三元组写作

{P} C {Q},

其中 P,Q 是程序状态谓词,通常由一阶逻辑公式表达;C 是命令。按部分正确性解释:对任意满足 P 的初始状态,若 C 终止于状态 σ,则 Q(σ) 成立。总正确性三元组额外要求从每个满足 P 的状态出发都终止。

后果规则允许加强前置条件、减弱后置条件:若 PP{P}C{Q}QQ,则 {P}C{Q}。三元组是否有效相对于明确的程序语义和断言解释定义。

直觉

三元组是一份条件契约:调用者提供 P,程序在终止时承诺 Q。它不要求 Q 完整描述最终状态,只需陈述当前证明关心的事实;未提及的变量可能改变。部分正确性中的“若终止”是最容易被忽略的量词,死循环可以平凡满足许多三元组。前置条件为假时也没有合法初始状态,因此三元组真但没有实际运行内容。

例子与边界

三元组 {x=n} x:=x+1 {x=n+1} 有效。更弱的后置条件 x>n 也有效,而 x=n+2 无效。对 while true do skip,部分正确性三元组 {P}C{Q} 对任意 P,Q 都成立,因为不存在终止执行;相应总正确性三元组则通常不成立。

边界是并发或异常:普通顺序三元组未说明其他线程可否修改状态,也未说明异常出口。需要并发分离逻辑、原子规范或带多个后置条件的扩展,才能准确覆盖这些行为。

推论与应用

Hoare 三元组是公理语义的基本判断。最弱前置条件为给定 C,Q 计算最精确的调用条件,循环不变量则把无限迭代压缩成有限证明义务。

分离逻辑P,Q 解释为堆资源并通过框架规则实现局部推理。函数契约和 API 规范都可看作三元组的工程化形式;SMT 软件验证则把赋值、分支和不变式规则产生的条件交给求解器。三元组的语义有效性量化所有满足 P 的运行,求解器只回答某个编码公式是否有反模型,因此编码与规则的可靠性仍是独立证明义务。

参考资料
  • C. A. R. Hoare, “An Axiomatic Basis for Computer Programming,” Communications of the ACM 12(10), 1969,Full paper, axioms and rules for assignment, sequencing, conditionals, and loops。
  • Edsger W. Dijkstra, A Discipline of Programming, Prentice Hall, 1976,Chs. 1–2, assertions and guarded commands。
关系图谱23 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

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