Skip to content

最弱前置条件

Weakest precondition

保证程序建立给定后置条件的最弱状态谓词。

条目类型
定义

形式陈述

固定命令 C 与后置条件 Q。按总正确性约定,最弱前置条件 wp(C,Q) 是满足以下等价的状态谓词:

σwp(C,Q)C 从 σ 出发终止,且最终状态满足 Q.

逻辑蕴含在状态谓词上给出预序,按逻辑等价取商后形成偏序;它是所有保证总正确性的前置条件中最弱的一个。典型方程为

wp(x:=E,Q)=Q[E/x],wp(C1;C2,Q)=wp(C1,wp(C2,Q)).

若只要求部分正确性,常使用 weakest liberal precondition(wlp);文献中的记号约定必须明确。

直觉

最弱前置条件把验证方向倒过来:先说执行后要什么,再沿程序逆向计算执行前恰好需要什么。“最弱”意味着不多要求任何无关事实,因而所有能保证目标的前置条件都蕴含它。赋值时无需模拟所有状态,只把后置公式中的变量替换为赋值右侧;顺序语句则从最后一条一步步向前。循环会形成递归方程,实际验证通常用不变量给出可证明近似,而不是自动得到精确闭式。

例子与边界

对命令 x:=x+1 与后置条件 x>0

wp(x:=x+1,x>0)x+1>0,

在整数上即 x>1。对 x:=x+1; y:=2*x 与目标 y4,先得第二步前置 2x4,再代回第一步得到 2(x+1)4,即 x1

边界是非终止:总正确性的 wp 必须排除会发散的初始状态,而 wlp 可把这些状态视为平凡满足。对非确定程序,通常采用 demonic 解释,要求所有可能执行都终止并满足 Q;若采用 angelic 解释,量词会变成存在,得到不同谓词。

推论与应用

最弱前置条件把Hoare 三元组 {P}C{Q} 转化为逻辑义务 Pwp(C,Q),是公理语义中自动验证条件生成的核心。条件语句产生分支公式,循环则需要不变量和终止变元。

它也把程序看成谓词变换器,为指称语义提供一种面向性质的模型。

SMT 驱动的验证器通常先用 wp 生成验证条件,再化简并求解背景理论公式;不变量发现、理论编码和求解分别有自己的可靠性边界。精化演算则反向使用谓词变换器,从规格逐步选择能建立目标的程序构造。wp 仍是连接命令与后置条件的语义算子,不等同于求解器或程序合成策略。

参考资料
  • C. A. R. Hoare, “An Axiomatic Basis for Computer Programming,” Communications of the ACM 12(10), 1969,Full paper, assertion transformation implicit in axiomatic semantics。
  • Edsger W. Dijkstra, A Discipline of Programming, Prentice Hall, 1976,Chs. 1–4, weakest preconditions and guarded commands。
关系图谱9 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

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