[论文解读] Automating Deductive Verification for Weak-Memory Programs
本文提出了一种针对弱内存程序的首个自动化归纳验证方法,通过将先进的分离逻辑——松弛分离逻辑(RSL)、带锁分离逻辑(FSL)和FSL++——编码至Viper验证基础设施中。该方法实现了C11程序的完全自动化验证,用户注释极少,验证时间通常在一分钟以内,且相比Coq-based证明,注释开销降低了整整一到两个数量级。
Writing correct programs for weak memory models such as the C11 memory model is challenging because of the weak consistency guarantees these models provide. The first program logics for the verification of such programs have recently been proposed, but their usage has been limited thus far to manual proofs. Automating proofs in these logics via first-order solvers is non-trivial, due to reasoning features such as higher-order assertions, modalities and rich permission resources. In this paper, we provide the first implementation of a weak memory program logic using existing deductive verification tools. We tackle three recent program logics: Relaxed Separation Logic and two forms of Fenced Separation Logic, and show how these can be encoded using the Viper verification infrastructure. In doing so, we illustrate several novel encoding techniques which could be employed for other logics. Our work is implemented, and has been evaluated on examples from existing papers as well as the Facebook open-source Folly library.
研究动机与目标
- 为解决在C11内存模型下验证弱内存程序的挑战,该挑战源于非顺序一致执行和复杂的内存操作。
- 克服现有Coq中手动或交互式证明的局限性,这些方法需要大量用户投入,阻碍了弱内存程序逻辑在更广泛范围内的应用。
- 通过归纳验证工具实现C11程序的完全自动化验证,降低注释开销并提升可扩展性。
- 证明将现代弱内存程序逻辑编码至现有验证栈(如Viper)的可行性与高效性,从而复用成熟自动化能力。
提出的方法
- 将RSL、FSL和FSL++编码至Viper的中间验证语言中,将复杂的并发与逻辑特性转化为更简单的顺序逻辑。
- 利用Viper现有的验证后端实现自动化证明搜索,借助其对分离逻辑、权限和一阶推理的原生支持。
- 采用新颖的编码技术处理高阶断言、模态逻辑和自定义权限结构,包括对权限计数和按位算术的支持。
- 原生处理复杂模式(如自旋循环和获取并增加操作),在许多情况下无需显式循环不变式。
- 在Viper中手动实现高级功能(如幽灵状态和不变式),以模拟未来扩展,确保与真实世界示例的兼容性。
- 在文献中的基准测试和生产代码(如Folly库)上验证编码正确性,包括引入错误的变体以测试逻辑的 soundness。
实验结果
研究问题
- RQ1现代弱内存程序逻辑(如RSL、FSL和FSL++)能否被有效编码至自动化验证栈(如Viper)?
- RQ2将这些逻辑编码至Viper是否能实现完全自动化验证,并显著降低相比交互式Coq证明的注释开销?
- RQ3所得到的系统能否高效且正确地验证现实世界的C11程序(包括Folly的读写自旋锁等复杂库)?
- RQ4该编码在多大程度上能无需人工干预地处理高级特性(如自定义权限结构、幽灵状态和原子操作)?
主要发现
- 该编码成功实现了使用RSL、FSL和FSL++逻辑对C11程序的自动化验证,平均验证时间低于一分钟。
- 相比Coq-based机械化证明,注释开销降低了整整一到两个数量级,显著促进了这些逻辑的广泛采用。
- 该方法成功验证了Facebook Folly读写自旋锁中的五个核心函数,其中两个因超出当前逻辑范围的惯用写法而需采用替代实现。
- 通过强化访问模式和使用权限计数,该原型成功验证了带有自定义权限结构的Rust ARC库。
- 该编码原生支持复杂模式(如自旋循环和原子获取并增加操作),无需显式循环不变式。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。