“分离合取 $P 1 P 2$ 把可组合资源拆给两个线程。每条命令只能读取或修改其断言授权的部分;普通程序变量还须满足修改集合与另一线程自由变量不冲突等侧条件。资源上下文中的共享资源只能按逻辑…”
形式陈述 ​
设资源集合
在经典堆模型中,资源是有限部分映射
由于资源组合交换且结合,
逻辑蕴含仍必须尊重拆分见证。若
直觉
普通合取
“分离”描述的是逻辑资源,而不是对象图的几何断开。一个拥有节点
链表段正利用这一点递归定义:头节点单元与尾段通过星号分开,头节点保存的 next 值却正是尾段首地址。于是资源边界沿“谁拥有哪个单元”划分,而不是沿“值之间有没有引用”划分;这让局部改写头指针时可以框住整个尾段。
例子与边界
采用 exact points-to:
要求总堆可拆成两个单元堆,因此强制
不可满足,因为同一地址不能同时出现在两个定义域不交的子堆中。断言
不能把 exact points-to 下的普通合取机械当作“至少同时含两格”:
分数权限进一步改变兼容关系:同一地址的两个只读份额可以组合,只要份额总量不超限且值一致。此时星号的抽象定义不变,变化的是资源代数;把“星号永远意味着地址域不交”推广到所有分离逻辑会错误拒绝合法共享。
推论与应用
分离合取使 frame 推理成立:若命令只消费并恢复
星号还区分纯事实与空间事实。等式
在并发场景中,
参考资料
- Samin S. Ishtiaq and Peter W. O’Hearn, “BI as an Assertion Language for Mutable Data Structures,” POPL, 2001, pp. 14–26。
- John C. Reynolds, “Separation Logic: A Logic for Shared Mutable Data Structures,” LICS, 2002, pp. 55–74。
- Cristiano Calcagno, Peter W. O’Hearn, and Hongseok Yang, “Local Action and Abstract Separation Logic,” LICS, 2007, pp. 366–378。
- Peter W. O’Hearn, “Separation Logic,” Communications of the ACM 62(2), 2019, pp. 86–95。