Skip to content

定义Definition

最弱前置条件

施工中 · 内容逐步修订

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)).

赋值方程依赖上述表达式假设。若 E 可能除零或访问非法位置,还必须加入“E 求值安全且有定义”的条件。例如以除零报错的算术为模型,wp(x:=1/y,true) 仍要求 y≠0,不能仅把真命题替换成真命题。

若只要求部分正确性,常使用最弱自由前置条件(wlp);文献中的记号约定必须明确。

直觉

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

例子与边界

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

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

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

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

推论与应用

循环展示了结果保证与终止保证的区别。对整数程序 while x>0 do x:=x-1 和目标 x=0,初值 x≥0 恰好足够:正数逐步降到零,负数则直接退出且违反目标。验证时可取不变量 x≥0,并用 x 作为非负、每步严格下降的终止变元;不变量解释退出后的结果,变元解释为什么能退出。

按本页约定,总正确性 Hoare 三元组等价于逻辑义务 P⇒wp(C,Q)。若使用 Hoare 页默认的部分正确性,则对应 P⇒wlp(C,Q);不能在转换中悄悄加入或丢掉终止要求。它们都可用于公理语义中的验证条件生成:条件语句产生分支公式,循环部分正确性使用不变量,总正确性还需终止变元等证据。

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

SMT 驱动的验证器可按所验证的正确性口径生成相应条件,再化简并求解背景理论公式;只验证安全性或部分正确性的工具,不因此证明终止。不变量发现、理论编码和求解分别有自己的可靠性边界。精化演算则反向使用谓词变换器,从规格逐步选择能建立目标的程序构造。

最弱前期望把后置布尔谓词推广为非负奖励函数:赋值仍作替换,概率分支使用加权平均,循环取最小不动点。后奖励一读出终止概率,而不是期望运行时间;对非终止路径的约定也必须与本页总正确性或部分正确性区分一致。

参考资料
  • Edsger W. Dijkstra, “The Characterization of Semantics”, EWD 401, 1973,谓词变换器与终止要求。
  • 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。
关系图谱12 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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