受约束求解器启发的归纳不变式推断算法
1. 改进算法与优化
原修改算法在修改后的抽象域 CQ 中无法找到归纳不变式,因为该域中不存在这样的归纳不变式。为了优化这个不进行收紧操作的修改算法,可以以一种修改后的形式重新引入收紧操作:不是收紧到任意更小的盒子 T♯,而是收紧到 Q 中包含 T♯ 的最小盒子。
2. 实验设置
实现了一个用 OCaml 编写的原型分析器,它支持一种类似于图 4 的简单玩具语言,该语言只有实值变量,没有函数和嵌套循环。分析器实现了主算法(图 8),可用于任意数值域,同时也实现了不变式细化和故障恢复方法。它由一个数值抽象域进行参数化,目前支持有理边界的盒子、浮点边界的盒子,以及通过 Apron 库实现的浮点边界的八角形。分析器利用了特定的数据结构,并且在实现中使用了浮点运算,尽管存在浮点舍入误差,但仍然是可靠的。
3. 实验结果
对一些简单循环进行了分析,实验结果如下表所示:
| Program | boxes | | | octagons | | |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| | # elems. | # iters. | time (s) | # elems. | # iters. | time (s) |
| Filter | 181 | 965 | 0.076 | 42 | 224 | 0.089 |
| Linear | 6734 | 10 | 2.08 | – | – | – |
| Non-linear | 5987 | 10 | 2.64 | – | – |
超级会员免费看
订阅专栏 解锁全文
33

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



