“公理语义以Hoare 三元组为核心,最弱前置条件把规则变成系统化验证条件生成。分离逻辑进一步把状态断言扩展为可分堆资源,支持指针程序的局部推理。”
形式陈述 ​
固定命令
逻辑蕴含在状态谓词上给出预序,按逻辑等价取商后形成偏序;它是所有保证总正确性的前置条件中最弱的一个。典型方程为
若只要求部分正确性,常使用 weakest liberal precondition(wlp);文献中的记号约定必须明确。
直觉
最弱前置条件把验证方向倒过来:先说执行后要什么,再沿程序逆向计算执行前恰好需要什么。“最弱”意味着不多要求任何无关事实,因而所有能保证目标的前置条件都蕴含它。赋值时无需模拟所有状态,只把后置公式中的变量替换为赋值右侧;顺序语句则从最后一条一步步向前。循环会形成递归方程,实际验证通常用不变量给出可证明近似,而不是自动得到精确闭式。
例子与边界
对命令
在整数上即 x:=x+1; y:=2*x 与目标
边界是非终止:总正确性的 wp 必须排除会发散的初始状态,而 wlp 可把这些状态视为平凡满足。对非确定程序,通常采用 demonic 解释,要求所有可能执行都终止并满足
推论与应用
最弱前置条件把Hoare 三元组
它也把程序看成谓词变换器,为指称语义提供一种面向性质的模型。
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。