Iterative Algorithm, Another View
将每个节点的OUT视作一个集合,那么整个程序的空间可以表示为 (OUT[n1], OUT[n2], …, OUT[nk]), 可以视作空间, 也就是每次迭代相当于一个函数F: → , 将程序从一个状态点映射到另一个状态点。
算法的停止条件就可以表示为找到一个不动点,也就是F() = 。
Questions:
- 算法一定能停 or 一定能到达不动点吗?
- 假设到达不动点,只有一个不动点吗?有多个的话,哪个是最好的 (most precise)?
- 算法复杂度、最坏要迭代多少次?
Partial Order
对any :
a. 自反性:
b. 反对称: , 则
c. 传递性: , 则
偏序关系中,集合任意两个元素不用必须可比,即可以不满足偏序关系。
Upper and Lower Bounds
S is a subset of P:
上界: is an upper bound of S, if
下界: is a lower bound of S, if
最小上界(lub or join 上确界): , for every upper bound of S, say u, .
最大下界(glb or meet 下确界): , for every lower bound of S, say l, .
⇐> (a join b)
⇐> (a meet b)
上/下界不一定有一个。最小上下界不一定存在,若存在则唯一。
Lattice, Semilattice, Complete and Product Lattice
Lattice: 给定偏序集(),对, if and 都存在,则()是一个lattice。任意两个元素都有最小上界和最大下界。
Semilattice: 如果只有存在,则称为join Semilattice; 只有存在,则称为meet Semilattice。
Complete Lattice: 给点一个Lattice, 对任意一个子集S, 其最小上界和最大下界都存在,则这个Lattice称为Complete Lattice。
对于Complete Lattice, lub和glb都是最值: 有最大值 T(top) = , 最小值 (bottom) = 。
其实只要lattice有穷,那么就一定是complete lattice
但Complete Lattice不一定有穷
程序中一般是complete and finite lattice.
Product Lattice: 对n个lattice, 若都有lub和glb,则它们的笛卡尔积也是一个lattice。
DataFlow Analysis Framework via lattice
Review The Questions
-
算法一定能停 or 一定能到达不动点吗?
-
假设到达不动点,只有一个不动点吗?有多个的话,哪个是最好的 (most precise)?
About Lattice上函数的单调性 & 不动点定理
f:L → L (L is a lattice) is monotonic if , →
不动点定理: 若函数f单调,而且L是有限的,
-
那么最小不动点可以通过迭代f(), f(f()), …, 得到。
-
那么最大不动点可以通过迭代f(T), f(f(T)), …, 得到。
Prove:不动点存在且是最小的那个
最小的证明就是数学归纳法就可以了:
-
f() f(x)
-
假设 , 且f单调,那么
-
归纳到最后,
-
因此 =
所以不动点是最小的, 而且求出的不动点也是唯一的
需要将数据流上的迭代算法映射到lattice上的函数,来将这二者建立联系。