利用算法学习、决策程序和谓词抽象推导不变式
在程序验证领域,寻找循环不变式是一项关键任务。传统的不变式生成技术往往存在一定的局限性,不能充分利用不变式的灵活性。本文将介绍一种结合算法学习、决策程序和谓词抽象的自动化技术,用于在命题公式中寻找循环不变式。
1. 引言
算法学习在组合推理中的假设生成方面已有应用。与传统技术不同,学习方法不是离线推导假设,而是通过与模型检查器逐步交互来寻找假设。由于组合推理中的假设通常不是唯一的,算法学习可以利用假设的灵活性来获得更优的解决方案。同样,循环不变式也常常不是唯一的,程序员通常会逐步推导和细化不变式。然而,传统的不变式生成技术未能充分利用这种灵活性。
本文展示了算法学习、决策程序和谓词抽象这三种技术如何协同工作,以推导命题(或无量词)公式中的循环不变式。该新技术能够在无需静态或动态分析帮助的情况下,为一些 Linux 设备驱动程序和 SPEC2000 基准测试生成不变式。
对于 while 循环,布尔公式的精确学习算法通过询问查询来搜索不变式。查询可以(并非总是)由决策程序自动解决。由于学习算法只生成布尔公式,而决策程序处理命题公式,因此需要进行谓词抽象和具体化来整合这两个组件。
在实际情况中,关于循环不变式的信息往往不完整,查询可能因信息不足而无法解决。本文的学习方法的一个显著特点是利用不变式的灵活性。当查询解决需要决策程序无法获取的信息时,我们简单地给出随机答案。虽然可以使用静态分析来计算更准确的近似信息,但给定的前置和后置条件下存在许多不变式,少量的随机信息不会妨碍算法学习推断不变式。
2. 目标语言和符号
我们使用的简单命令式语言的语句语法如下: <
基于学习与抽象的不变式推导
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



