形式陈述
从差分约束到带符号坐标
固定 n 个数学变量,取值域为 K = Q 或 R ,所有约束非严格,所有端点运算精确。八边形约束允许 ± x p ± x q ≤ c ,也允许单变量上下界。二维时这些不等式的边界只有水平、竖直和两种对角方向;交集至多有八个方向的边,名称由此而来,具体集合不必恰有八条边。
引入 2 n 个带符号坐标,使用从零开始的下标:
z 2 p = x p + 1 , z 2 p + 1 = − x p + 1 , i ¯ = i xor 1. 沿用差分约束抽象域与 DBM 公理库 差分约束抽象域与 DBM Difference-bound matrix abstract domain · Zone abstract domain · DBM 用差分约束矩阵保存变量关系,经最短路闭包、可靠转移与 raw widening,完整证明一个参数化整数循环的退出断言。 的方向,M i j ∈ K ∪ { + ∞ } 是 z j − z i 的上界。其具体含义是
γ oct ( M ) = { x ∈ K n : ∀ i , j , z j ( x ) − z i ( x ) ≤ M i j } . 坐标满足 z i ¯ = − z i ,因此同一个表达式有两种写法:z j − z i = z i ¯ − z j ¯ 。矩阵称为相干 (coherent),若
M i j = M j ¯ , i ¯ . 输入一条约束时,同时收紧这两个位置即可保持相干。以 ( z 0 , z 1 , z 2 , z 3 ) = ( x , − x , y , − y ) 为例,x + y ≤ c 存在 ( 1 , 2 ) 与 ( 3 , 0 ) ,x − y ≤ c 存在 ( 2 , 0 ) 与 ( 1 , 3 ) 。一元界 x ≤ u 写成 z 0 − z 1 = 2 x ≤ 2 u ,所以无需再添加恒零坐标。
普通闭包后的加强公式
先对相干矩阵做普通最短路闭包,得到 C 。初始化对角线时取原值与零的较小者,保留已有的负对角;若发现负环,结果为空。确认非空后,对角线为零,且
C i j ≤ C i k + C k j . 闭包仍相干:每条 i → j 路径反向并对各下标取横线,得到一条同权的 j ¯ → i ¯ 路径。然而,普通路径相加尚未用足带符号坐标的身份。由两条一元约束
− 2 z i = z i ¯ − z i ≤ C i , i ¯ , 2 z j = z j − z j ¯ ≤ C j ¯ , j 相加并除以二,还能推出 z j − z i 的界。于是定义一次加强 :
S i j = min ( C i j , C i , i ¯ + C j ¯ , j 2 ) . 相干矩阵若具有零对角、满足所有三角不等式,并且满足
S i j ≤ S i , i ¯ + S j ¯ , j 2 , 就称为强闭合 。在上述有理数或实数模型下,先普通闭包、再一次加强,即得到与原输入具有相同具体含义的强闭合矩阵;不需要交替重复这两步。下面分别解释可行性与“一次就够”的原因。
直觉
为什么负环检查仍然有效
普通 DBM 算法暂时把 2 n 个坐标当成独立势能。若它有一个解 v ,相干性保证 w i = − v i ¯ 也是解,因为
w j − w i = v i ¯ − v j ¯ ≤ C j ¯ , i ¯ = C i j . 差分约束的解集是凸的,因此中点 u = ( v + w ) / 2 仍满足全部约束,并且 u i ¯ = − u i 。取 x p + 1 = u 2 p ,便得到真正的程序状态。反过来,任何程序状态显然给出一个独立势能解。故在 Q 或 R 上,普通 DBM 可行性与带符号约束可行性等价;加强只显化逻辑后果,不会删除合法状态。
这里的中点是模型中真正需要的运算。整数势能的中点可能是半整数,所以整数八边形不能直接沿用这一可行性结论。
为什么加强不会破坏路径闭包
写成 a i = C i , i ¯ / 2 、b i = C i ¯ , i / 2 ,加强公式就是 S i j = min ( C i j , a i + b j ) 。闭包与相干性给出
2 a i = C i , i ¯ ≤ C i k + C k , k ¯ + C k ¯ , i ¯ = 2 C i k + 2 a k , 即 a i ≤ C i k + a k 。同理 b j ≤ b k + C k j ;无负环还保证 a k + b k ≥ 0 。
现在展开 S i k + S k j 中两个最小值,共有四种候选和。每一种都不小于 S i j :
C i k + C k j ≥ C i j ≥ S i j , C i k + a k + b j ≥ a i + b j ≥ S i j , a i + b k + C k j ≥ a i + b j ≥ S i j , a i + b k + a k + b j ≥ a i + b j ≥ S i j . 所以它们的最小值仍满足 S i k + S k j ≥ S i j ,三角不等式得以保留。公式也保持相干;a i + b i ≥ 0 保证 S i i = 0 。最后,一元位置不变:因 b i ¯ = a i ,有 S i , i ¯ = min ( C i , i ¯ , 2 a i ) = C i , i ¯ 。因此加强右侧的一元界并未继续变化,所得 S 已满足强闭合的全部条件。允许 + ∞ 时这些比较仍成立,因为全过程没有 − ∞ 。
例子与边界
一张完整的四阶矩阵证书
设初始集合为
P = { ( x , y ) : 0 ≤ x ≤ 2 , 0 ≤ y ≤ 3 , x − y ≤ 1 } . 仍按 ( x , − x , y , − y ) 排列行列。直接写入约束、普通闭包、加强,分别得到
M = ( 0 0 ∞ ∞ 4 0 ∞ 1 1 ∞ 0 0 ∞ ∞ 6 0 ) , C = ( 0 0 7 1 4 0 7 1 1 1 0 0 7 7 6 0 ) , S = ( 0 0 3 0 4 0 5 1 1 0 0 0 5 3 6 0 ) . 例如普通闭包沿 1 → 3 → 2 得到 C 12 = 1 + 6 = 7 ;加强利用 C 10 = 4 与 C 32 = 6 ,将它收紧为 S 12 = ( 4 + 6 ) / 2 = 5 ,即 x + y ≤ 5 。同理 S 03 = 0 表示 x + y ≥ 0 。
矩阵其余项也可直接核验。P 的顶点是 ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 1 ) , ( 2 , 3 ) , ( 0 , 3 ) ,所有 z j − z i 都是线性函数,在这些顶点上取最大值便得到整张 S 。其非对角信息归结为
0 ≤ x ≤ 2 , 0 ≤ y ≤ 3 , − 3 ≤ x − y ≤ 1 , 0 ≤ x + y ≤ 5. 上下界分别都由列出的顶点达到。这既检查了十六个元素,也说明这次加强没有改变 P 。初始的和界 5 本就能由两个变量的上界相加得到;此处展示的是带符号 DBM 如何显化它,域的表达能力差异要看接下来的过滤。
一条和式 guard 改变了能够证明的断言
考虑程序:
text assume 0 <= x <= 2 and 0 <= y <= 3 and x-y <= 1
assume x+y <= 4
x := x+1
assert x+y <= 5
1 2 3 4
第二行把相干位置 ( 1 , 2 ) , ( 3 , 0 ) 的界同时改为 4 。本例所得 G 已强闭合。赋值对应带符号位移 δ = ( 1 , − 1 , 0 , 0 ) ,精确更新为 T i j = G i j + δ j − δ i ,所以
G = ( 0 0 3 0 4 0 4 1 1 0 0 0 4 3 6 0 ) , T = ( 0 − 2 2 − 1 6 0 5 2 2 − 1 0 0 5 2 6 0 ) . 该公式是赋值前后的差直接代换:z j ′ − z i ′ = ( z j − z i ) + δ j − δ i ,逆平移给出反向包含,故不是仅仅可靠的外近似。读 T 12 = 5 或相干的 T 30 = 5 ,即得到全部执行都满足的 x + y ≤ 5 。
guard 后的多边形顶点是 ( 0 , 0 ) , ( 1 , 0 ) , ( 2 , 1 ) , ( 2 , 2 ) , ( 1 , 3 ) , ( 0 , 3 ) 。它仍具有与 P 相同的各变量上下界、x − y 上界 1 及下界 − 3 ,因此它的最佳 zone 外近似仍是 P ,其中包含已被 guard 排除的点 ( 2 , 3 ) 。平移后这个伪状态变成 ( 3 , 3 ) ,违反待证断言。独立区间抽象域 公理库 区间抽象域 Interval abstract domain · Interval analysis domain 以变量上下界近似数值状态,并用区间 transfer、join 与 widening 求解程序范围。 也保留这一伪状态;即便区间端点完全精确,仍无法保存 x + y ≤ 4 。
图片加载失败 从区间与差分约束到和式 guard 整数与任意斜率的边界
整数模型还要利用整性。例如 2 x ≤ 3 在整数上应收紧为 2 x ≤ 2 。更明显地,2 x ≤ 1 与 − 2 x ≤ − 1 在实数上允许 x = 1 / 2 ,在整数上却不可满足:普通负环检查并不能发现这个整数矛盾。整数八边形需要紧闭包,将一元界的偶数性与关系传播一起处理;只在加强公式中向下取整,并未给出完整的紧规范化算法。
八边形也不能精确表示整个直线 y = 2 x 。它只有系数为 ± 1 的双变量约束及一元约束;在这条无界直线上,每个非零的允许线性表达式都向上无界,因此任何有限的此类界都会误删真实点。任意线性多面体可用两个不等式 y − 2 x ≤ 0 、2 x − y ≤ 0 表示该直线,表达能力因此更强。
推论与应用
关系精度对应哪些计算代价
对 n 个程序变量,矩阵有 2 n 行列,空间为 O ( n 2 ) 。普通 Floyd 闭包耗时 O ( n 3 ) ,随后加强扫描全部元素,耗时 O ( n 2 ) ,完整规范化仍为 O ( n 3 ) 。一条二元 guard 只需先写两个相干位置,写入成本为 O ( 1 ) ,之后通常要重新规范化;不能把写入成本当作整个过滤操作的成本。
单变量平移只影响该变量两个带符号坐标的行列,更新成本为 O ( n ) 。它保持相干、三角不等式和加强关系:位移在三角式中相消,且 δ i ¯ = − δ i 使加强式两侧得到相同的位移。因此从强闭合输入出发,本例的平移无需重新做立方成本的闭包。
从表示到验证,这一页完成了同一条链:用相干性记录符号配对,用中点论证可行性,用一次加强补全一元界之间的推论,再以和式 guard 与平移保留断言需要的关系。它适合差与和共同出现的数值不变量;选择此域的收益,正是像例子中那样保住 zone 会丢失的斜向边界。
参考资料