Skip to content

定义Definition

八边形抽象域

Octagon abstract domain · Octagonal constraints · 强闭包

用带符号变量把和与差编码进 DBM,证明 Floyd 闭包后的一次加强即可得到强闭包,再用完整矩阵验证求和 guard 后的断言。

形式陈述 ​

从差分约束到带符号坐标 ​

固定 n 个数学变量,取值域为 K=Q 或 R,所有约束非严格,所有端点运算精确。八边形约束允许 ±xp±xq≤c,也允许单变量上下界。二维时这些不等式的边界只有水平、竖直和两种对角方向;交集至多有八个方向的边,名称由此而来,具体集合不必恰有八条边。

引入 2n 个带符号坐标,使用从零开始的下标:

z2p=xp+1,z2p+1=−xp+1,i¯=ixor1.

沿用差分约束抽象域与 DBM的方向,Mij∈K∪{+∞} 是 zj−zi 的上界。其具体含义是

γoct(M)={x∈Kn: ∀i,j, zj(x)−zi(x)≤Mij}.

坐标满足 zi¯=−zi,因此同一个表达式有两种写法:zj−zi=zi¯−zj¯。矩阵称为相干(coherent),若

Mij=Mj¯,i¯.

输入一条约束时,同时收紧这两个位置即可保持相干。以 (z0,z1,z2,z3)=(x,−x,y,−y) 为例,x+y≤c 存在 (1,2) 与 (3,0),x−y≤c 存在 (2,0) 与 (1,3)。一元界 x≤u 写成 z0−z1=2x≤2u,所以无需再添加恒零坐标。

普通闭包后的加强公式 ​

先对相干矩阵做普通最短路闭包,得到 C。初始化对角线时取原值与零的较小者,保留已有的负对角;若发现负环,结果为空。确认非空后,对角线为零,且

Cij≤Cik+Ckj.

闭包仍相干:每条 i→j 路径反向并对各下标取横线,得到一条同权的 j¯→i¯ 路径。然而,普通路径相加尚未用足带符号坐标的身份。由两条一元约束

−2zi=zi¯−zi≤Ci,i¯,2zj=zj−zj¯≤Cj¯,j

相加并除以二,还能推出 zj−zi 的界。于是定义一次加强:

Sij=min(Cij,Ci,i¯+Cj¯,j2).

相干矩阵若具有零对角、满足所有三角不等式,并且满足

Sij≤Si,i¯+Sj¯,j2,

就称为强闭合。在上述有理数或实数模型下,先普通闭包、再一次加强,即得到与原输入具有相同具体含义的强闭合矩阵;不需要交替重复这两步。下面分别解释可行性与“一次就够”的原因。

直觉

为什么负环检查仍然有效 ​

普通 DBM 算法暂时把 2n 个坐标当成独立势能。若它有一个解 v,相干性保证 wi=−vi¯ 也是解,因为

wj−wi=vi¯−vj¯≤Cj¯,i¯=Cij.

差分约束的解集是凸的,因此中点 u=(v+w)/2 仍满足全部约束,并且 ui¯=−ui。取 xp+1=u2p,便得到真正的程序状态。反过来,任何程序状态显然给出一个独立势能解。故在 Q 或 R 上,普通 DBM 可行性与带符号约束可行性等价;加强只显化逻辑后果,不会删除合法状态。

这里的中点是模型中真正需要的运算。整数势能的中点可能是半整数,所以整数八边形不能直接沿用这一可行性结论。

为什么加强不会破坏路径闭包 ​

写成 ai=Ci,i¯/2、bi=Ci¯,i/2,加强公式就是 Sij=min(Cij,ai+bj)。闭包与相干性给出

2ai=Ci,i¯≤Cik+Ck,k¯+Ck¯,i¯=2Cik+2ak,

即 ai≤Cik+ak。同理 bj≤bk+Ckj;无负环还保证 ak+bk≥0。

现在展开 Sik+Skj 中两个最小值,共有四种候选和。每一种都不小于 Sij:

Cik+Ckj≥Cij≥Sij,Cik+ak+bj≥ai+bj≥Sij,ai+bk+Ckj≥ai+bj≥Sij,ai+bk+ak+bj≥ai+bj≥Sij.

所以它们的最小值仍满足 Sik+Skj≥Sij,三角不等式得以保留。公式也保持相干;ai+bi≥0 保证 Sii=0。最后,一元位置不变:因 bi¯=ai,有 Si,i¯=min(Ci,i¯,2ai)=Ci,i¯。因此加强右侧的一元界并未继续变化,所得 S 已满足强闭合的全部条件。允许 +∞ 时这些比较仍成立,因为全过程没有 −∞。

例子与边界

一张完整的四阶矩阵证书 ​

设初始集合为

P={(x,y):0≤x≤2, 0≤y≤3, x−y≤1}.

仍按 (x,−x,y,−y) 排列行列。直接写入约束、普通闭包、加强,分别得到

M=(00∞∞40∞11∞00∞∞60),C=(0071407111007760),S=(0030405110005360).

例如普通闭包沿 1→3→2 得到 C12=1+6=7;加强利用 C10=4 与 C32=6,将它收紧为 S12=(4+6)/2=5,即 x+y≤5。同理 S03=0 表示 x+y≥0。

矩阵其余项也可直接核验。P 的顶点是 (0,0),(1,0),(2,1),(2,3),(0,3),所有 zj−zi 都是线性函数,在这些顶点上取最大值便得到整张 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,0) 的界同时改为 4。本例所得 G 已强闭合。赋值对应带符号位移 δ=(1,−1,0,0),精确更新为 Tij=Gij+δj−δi,所以

G=(0030404110004360),T=(0−22−160522−1005260).

该公式是赋值前后的差直接代换:zj′−zi′=(zj−zi)+δj−δi,逆平移给出反向包含,故不是仅仅可靠的外近似。读 T12=5 或相干的 T30=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),违反待证断言。独立区间抽象域也保留这一伪状态;即便区间端点完全精确,仍无法保存 x+y≤4。

从区间与差分约束到和式 guard

整数与任意斜率的边界 ​

整数模型还要利用整性。例如 2x≤3 在整数上应收紧为 2x≤2。更明显地,2x≤1 与 −2x≤−1 在实数上允许 x=1/2,在整数上却不可满足:普通负环检查并不能发现这个整数矛盾。整数八边形需要紧闭包,将一元界的偶数性与关系传播一起处理;只在加强公式中向下取整,并未给出完整的紧规范化算法。

八边形也不能精确表示整个直线 y=2x。它只有系数为 ±1 的双变量约束及一元约束;在这条无界直线上,每个非零的允许线性表达式都向上无界,因此任何有限的此类界都会误删真实点。任意线性多面体可用两个不等式 y−2x≤0、2x−y≤0 表示该直线,表达能力因此更强。

推论与应用

关系精度对应哪些计算代价 ​

对 n 个程序变量,矩阵有 2n 行列,空间为 O(n2)。普通 Floyd 闭包耗时 O(n3),随后加强扫描全部元素,耗时 O(n2),完整规范化仍为 O(n3)。一条二元 guard 只需先写两个相干位置,写入成本为 O(1),之后通常要重新规范化;不能把写入成本当作整个过滤操作的成本。

单变量平移只影响该变量两个带符号坐标的行列,更新成本为 O(n)。它保持相干、三角不等式和加强关系:位移在三角式中相消,且 δi¯=−δi 使加强式两侧得到相同的位移。因此从强闭合输入出发,本例的平移无需重新做立方成本的闭包。

从表示到验证,这一页完成了同一条链:用相干性记录符号配对,用中点论证可行性,用一次加强补全一元界之间的推论,再以和式 guard 与平移保留断言需要的关系。它适合差与和共同出现的数值不变量;选择此域的收益,正是像例子中那样保住 zone 会丢失的斜向边界。

参考资料
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具