Skip to content

依赖—保证推理

Rely-guarantee reasoning · Rely-guarantee method

以环境可做的 rely 关系和组件承诺的 guarantee 关系概括干扰,并通过交叉包含组合线程规格。

条目类型
方法

形式陈述

依赖—保证判断可写作

R,G{P} C {Q}.

它表示:若执行期间每个环境步骤都属于二元关系 R,则组件 C 的每个程序步骤都属于 G;若组件终止,其结果满足 Q。在经典离散步骤口径中,通常把恒等关系包含进 R,G,允许一方在另一方走步时停顿。前置和后置若会跨环境步骤持续使用,还须对 R 稳定,这把 干扰自由 从动作列表提升到关系层面。

两个组件可组合的核心条件是

G1R2,G2R1.

等价地,G1(s,s)R2(s,s):组件 1 真正可能做的每一步,组件 2 都已承诺能够容忍。满足必要的稳定性和变量侧条件后,典型并行规则给组合环境与保证

R=R1R2,G=G1G2,

并组合前后条件。包含方向不能反写;R2G1 只会说组件 1 至少覆盖某些假设,并不能阻止它做出组件 2 未允许的动作。

稳定性仍按一步检查:P(s)R(s,s)P(s)。只要环境的每一步都在 R 中,便可对任意有限段环境执行归纳得到 P 持续成立;不要求 R 本身已经写成传递闭包。反之,只证明初态和环境整段结束后的关系,可能漏掉组件在中间状态继续执行时依赖的事实。

直觉

rely 是组件写给环境的“我能承受什么”,guarantee 是组件交给环境的“我最多做什么”。单独验证组件时,不必知道邻居的代码,只需在所有满足 rely 的干扰下维持自己的断言。组装时再核对每份保证是否落在对方依赖内,像把两份接口契约对接起来。

关系摘要比逐个原子语句更稳定。环境可以用完全不同的实现,只要每一步仍在 rely 允许范围内,原证明就可复用。不过摘要不能靠愿望变窄:真实环境若可能减少计数器,而 rely 只允许增加,局部证明的前提在组合系统里并未兑现。

例子与边界

状态含整数 x 和 ghost 位 a,b{0,1},共享不变式为

Ix=a+2b.

线程 A 在 a=0 时唯一一次把 (x,a) 更新为 (x+1,1),保持 b;线程 B 在 b=0 时把 (x,b) 更新为 (x+2,1),保持 a。记这两个实步关系为 Astep,Bstep,令

GA=IdAstep,RA=IdBstep,GB=IdBstep,RB=IdAstep.

于是 GARBGBRA 由定义直接成立。A 的实步使 xa 同增一,B 的实步使 x2b 同增二,所以两种关系都保持 I。从 (0,0,0) 出发,无论 A、B 哪个先走,两者终止时 a=b=1,故 x=3

若另有未建模线程执行 x:=0,它不属于任一 rely,组合结论立即失去前提。把 rely 放宽到任意改写 x 虽然覆盖现实,却会使 I 不再稳定,必须增加协议状态或收紧环境。兼容性仍是安全接口:它不保证某个使能步骤最终发生,也不排除死锁。对细粒度内存,还要说明一次 relation step 对应哪种原子事件。

若 A 的保证误写成“最终令 a=1”,它不是一步关系,无法与 B 的 rely 做上述包含检查;环境可能在兑现最终结果前经过 B 无法容忍的中间状态。rely/guarantee 的二态接口约束每个可见干扰步,时序承诺则应另用进展条件表达。

推论与应用

依赖—保证规格支持分层开发:先在抽象共享状态上写关系,再分别精化组件实现。计数器单调性、版本推进、所有权状态机和锁保护协议都能写成二态公式;关系复合还可隐藏组件内部步骤,只向上层暴露稳定保证。

在大型验证中,关系若过于具体会泄露实现,过于宽泛又难以证明有用后置。实践常结合 ghost state、区域或分离资源,使 rely/guarantee 只描述真正共享的抽象状态。无论采用哪种表示,最后都要回到交叉包含与稳定性,而不能用“两个组件遵守同一协议”替代公式检查。

参考资料
  • Cliff B. Jones, Development Methods for Computer Programs Including a Notion of Interference, Oxford University Computing Laboratory Technical Monograph PRG-25, 1981。
  • Cliff B. Jones, “Tentative Steps Toward a Development Method for Interfering Programs,” ACM TOPLAS 5(4), 1983, pp. 596–619。
  • Viktor Vafeiadis and Matthew Parkinson, “A Marriage of Rely/Guarantee and Separation Logic,” CONCUR, 2007, pp. 256–271。
  • Willem-Paul de Roever et al., Concurrency Verification: Introduction to Compositional and Noncompositional Methods, Cambridge University Press, 2001。
关系图谱6 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

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