“则由可靠抽象转移和不动点归纳得到”
局部可靠性不等式 ​
设具体域
左侧收集所有由
若有Galois 连接
交换图不必严格相等;不等式方向允许抽象变换比最佳结果更粗。
赋值的区间轨迹 ​
考虑整数赋值 x := x + 1,抽象状态给出
抽象变换返回
若机器整数在最大值处回绕,数学整数的
guard 与分支过滤 ​
对条件 x < 0 的真分支,具体变换是集合交
输入区间
若浮点语义允许 NaN,条件 x < 0 为假不等价于
组合得到路径可靠性 ​
若
控制流汇合还需要抽象 join 覆盖各前驱。由局部 transfer、可靠 join 与不动点迭代,可归纳证明每个程序点的抽象状态覆盖其收集语义。
若任一语句处理漏掉一种边——异常、短路求值、别名写入或并发干扰——全局证明链就在该处断裂。后续再宽的 join 不能恢复已经漏掉的具体后继。
可靠不等于精确、终止或无警报 ​
每个局部变换可靠也不保证迭代终止;无限上升链仍可能持续产生新抽象值。widening 解决终止,需另证 widening 结果仍是上界。
可靠分析报告可能含假警报,因为抽象状态包括不可达行为。它保证真实错误不会因该抽象步骤被漏掉;端到端“不漏报”还依赖前端建模、所有转移和求解器实现均在可信边界内。
最佳性与完备性的区别 ​
最佳抽象变换
等式失败表示先抽象输入再变换比先做具体变换再抽象更粗。完备性是“不因这次抽象时机额外损失信息”,比 soundness 强得多,也依赖具体操作与所选域。区间域对加法可能精确,对重复变量的非线性表达式却不完备,不能给整个分析器贴一个无条件“complete”标签。
检查实现时还要覆盖
参考资料
- Patrick Cousot and Radhia Cousot, “Abstract Interpretation: A Unified Lattice Model for Static Analysis,” POPL, 1977, pp. 238–252。
- Xavier Rival and Kwangkeun Yi, Introduction to Static Analysis, MIT Press, 2020, Chs. 6–8。
- Antoine Miné, “The Octagon Abstract Domain,” Higher-Order and Symbolic Computation 19, 2006, pp. 31–100。