利用牛顿法进行程序分析
1. 半环相关基础
通过将定义中的集合 $A$ 实例化为赋值集合 $\text{Var} \to \text{Bool}$,可以得到一个半环,其值能够对程序 $P$ 的状态转换器进行编码。与程序 $P$ 的赋值语句或假设语句 $st$ 相关联的半环值,是集合 $A$ 上的二元关系,它代表了语句 $st$ 对程序 $P$ 状态的影响。
在本文中,重点关注的是 $\oplus$ 满足幂等性的半环(即对于所有 $a \in D$,都有 $a \oplus a = a$)。在幂等半环中,元素的顺序定义为:$a \sqsubseteq b$ 当且仅当 $a \oplus b = b$。在数据流分析中,幂等性是可以预期的,因为幂等半环是一个并半格 $(D, \oplus)$,其中并运算为 $\oplus$。
若对于所有 $a, b \in D$,都有 $a \otimes b = b \otimes a$,则称该半环是可交换的。在数据流分析中,通常使用的是非交换半环,因为式 (2) 中使用的 $\otimes$ 运算实际上是(反向的)函数复合的一种抽象,所以一般来说它不满足交换律。
2. 牛顿程序分析(NPA)
2.1 NPA 的起源
牛顿程序分析(NPA)为解决如式 (2) 这样的方程组提供了一种替代方法,可替代传统的克莱尼迭代或混沌迭代。其发展的第一步源于对递归马尔可夫链(RMCs)性质的分析方法,RMCs 是一种用于对可能包含递归过程的概率程序进行建模的形式化方法。为了确定模型中顶点的终止概率,Etessami 和 Yannakakis 生成了一组通常为非线性的方程。由于答案可能是无理数,无法精
超级会员免费看
订阅专栏 解锁全文
1万+

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



