paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Iron: managing obligations in higher-order concurrent separation logic

Iron:管理高阶并发分离逻辑中的义务
POPL 3(POPL)2019匹配度 3/10 · 论文属于高阶并发分离逻辑与形式化验证,与用户核心方向(LLM/Agent 改进静态分析/形式化验证、浮点/贝叶斯程序分析)仅在“形式化验证”这一宽泛领域有交集,未涉及 LLM/Agent、静态分析或工业落地,匹配度低。引用 18 inbox
Aleš Bizjak, Daniel Gratzer, Robbert Krebbers, Lars Birkedal
crossref: 2026-09-10

AI 速览

一句话:提出 Iron,一种高阶并发分离逻辑,可精确推理动态线程间可转移资源及其义务,并在 Iris 模型与 Coq 中证明其可靠性。

在并发程序中,精确管理资源及其义务(如释放内存、关闭锁和释放文件句柄)十分困难,尤其是资源在线程间共享或动态转移时。本文提出 Iron,一种新高阶并发分离逻辑,支持对可在动态分配线程之间转移的资源进行精确推理。Iron 能验证将内存回收委托给 fork 线程等挑战性例子。作者在 Iris 基础逻辑之上定义 Iron 的模型来证明其可靠性,并证明内存资源被精确核算且不会泄漏;所有开发均在 Coq 证明助手中形式化。

问题
并发环境下,资源及其义务(释放内存、关闭锁、释放文件句柄)的精确管理很困难,尤其当资源在动态分配的线程间共享和转移时。
方法
提出 Iron:一种高阶并发分离逻辑,可推理可在动态分配线程间转移的资源及其义务;基于 Iris 基础逻辑给出模型以证明可靠性,并在 Coq 中形式化全部开发。
评估
通过将内存回收委托给 fork 线程等挑战性例子展示 Iron 的可用性,并利用模型证明内存资源被精确核算且不泄漏。
原文摘要(Abstract)

Precise management of resources and the obligations they impose, such as the need to dispose of memory, close locks, and release file handles, is hard---especially in the presence of concurrency, when some resources are shared, and different threads operate on them concurrently. We present Iron, a novel higher-order concurrent separation logic that allows for precise reasoning about resources that are transferable among dynamically allocated threads. In particular, Iron can be used to show the correctness of challenging examples, where the reclamation of memory is delegated to a forked-off thread. We show soundness of Iron by means of a model of Iron, defined on top of the Iris base logic, and we use this model to prove that memory resources are accounted for precisely and not leaked. We have formalized all of the developments in the Coq proof assistant.

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot628,
  title = {Iron: managing obligations in higher-order concurrent separation logic},
  author = {Aleš Bizjak and Daniel Gratzer and Robbert Krebbers and Lars Birkedal},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {3},
  number = {POPL},
  year = {2019},
  doi = {10.1145/3290378}
}