“框架规则是分离逻辑相对传统公理语义的关键增益:函数规格只需写触及的资源,调用点可自动保留更大上下文。它使链表库、内存分配器和模块化数据结构证明能够组合。”
“这里沿用分离逻辑的安全性与部分正确性约定:每个满足前置条件的栈—堆状态都不能产生出错执行,每个正常终止结果都满足后置条件,但不要求终止。在这个约定下,框架规则以Hoare 三元组写为”
模型Model
施工中 · 内容逐步修订
Separation logic
以分离合取表达互不重叠资源并局部推理堆内存的程序逻辑。
分离逻辑把程序状态中的堆视为有限部分映射,并加入分离合取
当且仅当存在定义域不交的
本页的 Hoare 三元组采用安全性与部分正确性:从每个满足
侧条件保证
更一般的分离逻辑不必把资源限于堆的不交并:它可建立在 partial commutative monoid 或 separation algebra 上。在精确 heap semantics 中,
普通逻辑的
断言 [x]:=[x]+1 可由局部规格
验证;若另有
要隔离“值矛盾”和“资源重叠”,更好的对照是
变量侧条件有独立作用:若
分离逻辑扩展可变状态语义与Hoare 三元组,框架规则是其局部性原则的集中表达。递归谓词可描述链表、树和图的堆布局。
它广泛用于内存安全、指针程序、并发算法与程序验证工具;分离逻辑自动化把 symbolic heap entailment、frame inference 与 bi-abduction 组织成可执行过程,尝试补出缺失的前置资源或调用后剩余的堆。逻辑给出资源语义和可靠规则,自动化只负责在受支持片段内搜索证明,不能把工具可解片段当成分离逻辑的全部表达力。
并发分离逻辑以资源不变量和权限控制线程间共享,支撑对数据竞争自由和线性化点的模块化证明。这里的“所有权”是断言对资源份额的语义解释;语言所有权系统则以 move、loan 与生命周期静态限制程序,两者可以互相验证,却不是同一套规则或术语替换。
William Mansky, Automating Separation Logic for Concurrent C Minor, Princeton University, 2008,堆分离与框架规则。
John C. Reynolds, An Overview of Separation Logic,§4 明确给出不出错且正常终止时满足后置条件的三元组语义。
John C. Reynolds, Separation Logic: A Logic for Shared Mutable Data Structures, LICS 2002,pp. 55–74。
Peter W. O'Hearn, Separation Logic, Communications of the ACM 62(2), 2019,pp. 86–95。