一句话:提出幽灵监视器辅助程序,将目标程序验证归约为监视器验证,并支持无穷行为。
当目标程序语法结构不利于验证时(如递归算法以迭代实现),传统演绎验证困难。本文提出幽灵监视器:实现、规约并验证一个辅助程序来监视目标程序执行,使监视器正确性蕴含目标程序正确性;监视器维护必要数据与不变式,可用任意合适框架实现,也不限于目标语言。该技术还可验证不同语言、不同结构程序间的关系性质,并刻画目标程序无穷行为等细粒度性质。为此作者设计专用幽灵监视器语言,含处理发散执行的原创构造,并用一种超限博弈证明底层程序逻辑的可靠性。该语言及其可靠性已被形式化并机器检查。
We present a new approach to deductive program verification based on auxiliary programs called ghost monitors . This technique is useful when the syntactic structure of the target program is not well suited for verification, for example, when an essentially recursive algorithm is implemented in an iterative fashion. Our approach consists in implementing, specifying, and verifying an auxiliary program that monitors the execution of the target program, in such a way that the correctness of the monitor entails the correctness of the target. The ghost monitor maintains the necessary data and invariants to facilitate the proof. It can be implemented and verified in any suitable framework, which does not have to be related to the language of the target programs. This technique is also applicable when we want to establish relational properties between two target programs written in different languages and having different syntactic structure. We then show how ghost monitors can be used to specify and prove fine-grained properties about the infinite behaviors of target programs. Since this cannot be easily done using existing verification frameworks, we introduce a dedicated language for ghost monitors, with an original construction to catch and handle divergent executions. The soundness of the underlying program logic is established using a particular flavor of transfinite games. This language and its soundness are formalized and mechanically checked.
@article{paperbot562,
title = {Deductive verification with ghost monitors},
author = {Martin Clochard and Claude Marché and Andrei Paskevich},
journal = {Proceedings of the ACM on Programming Languages},
volume = {4},
number = {POPL},
year = {2019},
doi = {10.1145/3371070}
}