论文标题
条件上下文改进(CCR)
Conditional Contextual Refinement (CCR)
论文作者
论文摘要
上下文改进(CR)是指定开放程序的标准概念之一。 CR具有两个主要优点:(i)(水平和垂直)组成性,使我们能够将大型上下文精炼分解为许多较小的较小的细化,并实现模块化和增量验证,以及(ii)对编程功能的不限制,例如,相互递归的,Pointer-value Value通过和更高的订单功能。但是,CR的缺点是它不能在上下文上施加条件,因为它在所有上下文中都量化了,这确实在支持完整的组成性和编程功能方面起着关键作用。 在本文中,我们解决了找到满足所有三个要求的精炼概念的问题:支持完整的组成性,完整(顺序)编程功能以及上下文中的丰富条件。作为解决方案,我们提出了一种新的改进理论,称为CCR(有条件的上下文改进),并基于IT开发一个验证框架,这使我们能够模块化,逐步验证混凝土模块针对分离型模块在分离型模块式的前式和后期条件下的抽象模块。它在COQ中完全正式化,并提供了一种证明模式,该模式结合了(i)关于保存IO事件和终止等副作用的模拟推理以及(ii)关于预科和后条件的命题推理。此外,验证结果与CompCert结合使用,因此我们从顶级抽象程序正式建立了行为改进,一直到其组装代码。
Contextual refinement (CR) is one of the standard notions of specifying open programs. CR has two main advantages: (i) (horizontal and vertical) compositionality that allows us to decompose a large contextual refinement into many smaller ones enabling modular and incremental verification, and (ii) no restriction on programming features thereby allowing, e.g., mutually recursive, pointer-value passing, and higher-order functions. However, CR has a downside that it cannot impose conditions on the context since it quantifies over all contexts, which indeed plays a key role in support of full compositionality and programming features. In this paper, we address the problem of finding a notion of refinement that satisfies all three requirements: support of full compositionality, full (sequential) programming features, and rich conditions on the context. As a solution, we propose a new theory of refinement, called CCR (Conditional Contextual Refinement), and develop a verification framework based on it, which allows us to modularly and incrementally verify a concrete module against an abstract module under separation-logic-style pre and post conditions about external modules. It is fully formalized in Coq and provides a proof mode that combines (i) simulation reasoning about preservation of sideffects such as IO events and termination and (ii) propositional reasoning about pre and post conditions. Also, the verification results are combined with CompCert, so that we formally establish behavioral refinement from top-level abstract programs, all the way down to their assembly code.