用k个值来表示CFG中的k个节点,在每一轮迭代中更新对应的值。
迭代函数为
F
:
V
k
F:V^k
F:Vk—>
V
k
V^k
Vk
X is a fixed point of function F if X = F(X)
当我们定义偏序集(partially ordered set,poset)时,我们将其表示为一个二元组 r (P, ?),其中 ?是一个二元运算符在P上定义偏序关系。有如下属性:
(1) ?x ∈ P, x ? x (Reflexivity)
(2) ?x, y ∈ P, x ? y ∧ y ? x ? x = y (Antisymmetry)
(3) ?x, y, z ∈ P, x ? y ∧ y ? z ? x ? z (Transitivity)
例子:
整数集上小于等于关系。
字符串的子串关系。
集合的子集关系。
Given a poset (P, ?) and its subset S that S ? P, we say that
u ∈ P is an upper bound of S, if ?x ∈ S, x ? u. Similarly,
l ∈ P is an lower bound of S, if ?x ∈ S, l ? x.
我们定义S的最小上界least upper bound (lub or join), 记为 ?S,
对于S是每个上界u,有 ?S ? u.
我们定义S的大下界greatest lower bound (glb, or meet), 记为 ?S,
对于S是每个下界l,有 l ? ?S.
一般来说,如果S包含两个元素a和b。
?S can be written a ? b (the join of a and b),a和b的最小上界。
?S can be written a ? b (the meet of a and b),a和b的最大下界。
Given a poset (P, ?), ?a, b ∈ P, if a ? b and a ? b exist, then (P, ?) is called a lattice
偏序集中任意两个元素都存在最大下界/最小上界。则这个偏序集可以被称为Lattice
对于最大下界/最小上界只存在一个的情况下,称之为半个,
Given a poset (P, ?), ?a, b ∈ P,
if only a ? b exists, then (P, ?) is called a join semilattice
if only a ? b exists, then (P, ?) is called a meet semilattice
Given a lattice (P, ?), for arbitrary subset S of P, if ?S and ?S exist, then (P, ?) is called a complete lattice
一个Lattice中的所有子集都有都有一个最小上界和一个最大下界。
Every complete lattice (P, ?) has
a greatest element T = ?P called top and
a least element ⊥ = ?P called bottom
每一个有限元素的lattice都是一个Complete Lattice
Given lattices
L
1
L_1
L1? = (
P
1
P_1
P1?,
?
1
?_1
?1?),
L
2
L_2
L2? = (
P
2
P_2
P2?,
?
2
?_2
?2?), …,
L
n
L_n
Ln? = (
P
n
P_n
Pn?,
?
n
?_n
?n?), if for all i,(
P
i
P_i
Pi?,
?
i
?_i
?i?)has
?
i
?_i
?i? (least upper bound) and
?
i
?_i
?i? (greatest lower bound), then
we can have a product lattice
L
n
L_n
Ln? = (P, ?) that is defined by:
一个数据流分析框架(D, L, F)包括:
D:数据流的方向,可以是前向(forwards)或后向(backwards)。
L:包括值域 V 和 meet ? 或 join ? 操作符的格(lattice)。
F:从 V 到 V 的转移函数(每个节点可能有自己的转移函数,也可能一样)。
迭代算法(或称为IN/OUT方程系统)产生数据流分析的解决方案:
A function f: L → L (L is a lattice) is monotonic if ?x, y ∈ L,x ? y ? f(x) ? f(y)
Given a complete lattice (L, ?), if
(1) f: L → L is monotonic and
(2) L is finite,
then
the least fixed point of f can be found by iteratingf(⊥), f(f(⊥)), …,
f
k
(
⊥
)
f^k(⊥)
fk(⊥) until a fixed point is reached
the greatest fixed point of f can be found by iteratingf(T), f(f(T)), …,
f
k
(
T
)
f^k(T)
fk(T) until a fixed point is reached
有限单调全格。
证明:能达到最大不动点
通过定义一个函数的最大下界⊥和转移函数f:L–>L,我们有⊥ ? f(⊥)。
由于单调,可以得出f(⊥) ? f(f(⊥)) =
f
2
f^2
f2(⊥)
重复f,得到⊥ ? f(⊥) ?
f
2
f^2
f2(⊥) ? … ?
f
i
f^i
fi(⊥)
因为L是有限的(假设高度为H),因此值在 ⊥、f(⊥)、
f
2
f^2
f2(⊥) 到
f
H
f^H
fH(⊥) 之间有界。
当 i > H 时,根据鸽笼原理,存在 k 和 j,使得
f
k
f^k
fk(⊥) =
f
j
f^j
fj(⊥)(假设 k < j ≤ H+1)。
进一步,由于
f
k
f^k
fk(⊥) ? … ?
f
j
f^j
fj(⊥)(f 的单调性),我们有
f
F
i
x
f^{Fix}
fFix =
f
k
f^k
fk(⊥) =
f
k
+
1
f^{k+1}
fk+1(⊥) = … =
f
j
f^{j}
fj(⊥)(反证法证明)。
鸽笼原理:鸽笼原理(Pigeonhole Principle)是一种基本的数学原理,它描述了分配物品到有限数量的容器时的一种必然性。简而言之,如果你要将 n 个物品放入不超过 m 个容器中,而 n 大于 m,那么至少有一个容器必然会包含两个或更多的物品。
由于L是有限元素,这里假设为H。如果在前H次没有到达不动点,则根据单调性此时 f H f^H fH应该为最大值,则下一次 f H + 1 f^{H+1} fH+1应该等于 f H f^H fH,否则将违背单调性。