仿射循环不变式生成:基于矩阵代数的方法
1. 引言
在程序分析和形式验证中,不变式是一个关键概念。它是程序中某个特定位置的逻辑断言,无论程序何时执行到该位置,该断言始终为真。不变式对于证明和分析程序的重要属性,如可达性、时间复杂度和安全性等,起着不可或缺的作用。
为了简化程序分析和形式验证,研究人员长期以来一直在探索自动生成不变式的方法,包括约束求解、递归分析、抽象解释、逻辑推理、动态分析和机器学习等。为了确保一个断言确实是不变式,广泛采用的范式是生成归纳不变式,即该断言在程序首次执行到特定位置以及每次周期性执行到该位置时都成立。
在本文中,我们关注一类重要的不变式——数值不变式,它是关于程序变量数值的断言,与许多常见的漏洞,如整数溢出、缓冲区溢出、除零错误和数组越界等密切相关。具体来说,我们考虑以仿射不等式形式表示的仿射归纳不变式,并聚焦于具有仿射循环条件(以仿射不等式的合取形式表示)和仿射变量更新但无嵌套循环的仿射 while 循环。
为了实现仿射归纳不变式的自动生成,我们采用基于约束求解的方法,具体步骤如下:
1. 为目标不变式建立带有未知参数的模板。
2. 收集从归纳条件导出的约束。
3. 求解未知参数以获得所需的不变式。
2. 相关工作
- 约束求解 :此前有几种基于 Farkas 引理的约束求解方法用于不变式生成。与使用量词消去来解决 Farkas 引理约束的方法相比,我们的方法更高效,因为它仅涉及矩阵计算。与使用启发式方法的方法相比,我们的方法在处理仿射不变式生成的所有情况时更通用和完整。
超级会员免费看
订阅专栏 解锁全文
2457

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



