Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 2 章:Presburger 算术的语法与语义

直觉

第 1 章把循环实例看成整数点,本章回答一个更基础的问题:可以用什么样的逻辑公式挑选这些点?Presburger 算术允许整数常量、加法、比较、布尔组合和量词。它足以表达仿射边界、析取、投影以及固定周期的步长,却刻意排除一般的变量乘变量。

“允许固定常数乘变量”与“不允许变量乘变量”是核心分界。例如 3y 只是 y+y+y 的缩写;yz 中乘数 $z$ 随赋值变化,不能展开成固定次数的加法。

Presburger 1929 年的原始工作建立了这一加法算术体系的完备性与可判定性;这里采用整数编译器建模所需的语法,并在涉及历史定理时回溯其稳定英文译注

形式定义

语言和项

令 $\mathcal{L}_{PA}$ 表示本章使用的一阶语言,论域先取整数集合 $\mathbb{Z}$。变量记为 x,y,z,k;整数常量记为 $c\in\mathbb{Z}$。线性项 $t$ 可写为

$$ t ::= c\mid x\mid t+t\mid -t. $$

等价地,每个线性项都可整理为

$$ t=c+a_1x_1+\cdots+a_nx_n, $$

其中 $a_1,\ldots,a_n\in\mathbb{Z}$ 是固定系数。a_ix_i 表示常数乘法;它不是两个变量的乘积。

原子公式和公式

由线性项构造原子公式 t_1=t_2 和 $t_1\le t_2$。严格序 t_1<t_2 是 $t_1\le t_2\land t_1\ne t_2$ 的缩写;在整数上也可写成 $t_1+1\le t_2$。再用布尔联结词和量词构造公式:

$$ \varphi ::= t_1=t_2\mid t_1\le t_2 \mid\neg\varphi\mid(\varphi\land\varphi)\mid(\varphi\lor\varphi) \mid\exists x\,\varphi\mid\forall x\,\varphi. $$

蕴含 $\varphi\Rightarrow\psi$ 是 $\neg\varphi\lor\psi$ 的缩写。给定固定正整数 $m$,整除原子 $m\mid t$ 和同余原子

$$ t_1\equiv t_2\pmod m $$

常作为便于量词消去的扩展语法;其语义分别是“存在整数 $q$ 使 t=mq”和 $m\mid(t_1-t_2)$。因此它们不增加可定义集合,只让公式更紧凑。

赋值、自由变量与真值

变量赋值 $\sigma$ 把每个自由变量映到一个整数。记 $\llbracket t\rrbracket_\sigma$ 为线性项 $t$ 在赋值 $\sigma$ 下的整数值。满足关系 $\mathbb{Z},\sigma\models\varphi$ 递归定义如下:等式和序比较相应整数值;布尔联结词采用通常真值规则;并且

$$ \mathbb{Z},\sigma\models\exists x\,\varphi \quad\Longleftrightarrow\quad \text{存在 }a\in\mathbb{Z},\quad \mathbb{Z},\sigma[x\mapsto a]\models\varphi. $$

全称量词类似。$FV(\varphi)$ 表示公式 $\varphi$ 的自由变量集合,即未被量词绑定的变量。例如

$$ FV(\exists k:\ x=3k+1)=\{x\}. $$

没有自由变量的公式称为句子,它在整数结构中只有真或假,不再依赖外部赋值。

自然数版和整数版

若量词与赋值范围取非负整数集合 $\mathbb{N}=\{0,1,2,\ldots\}$,得到自然数版;本教程的循环坐标、差值和调度统一使用整数版 $\mathbb{Z}$。两者不能在推导中无提示地混用。例如整数版的 $\exists x:x+1=0$ 为真,自然数版为假。

需要搬运集合结论时,可把一个整数坐标 $z$ 编码成两个非负坐标之差 z=z^+-z^-,其中 $z^+,z^-\in\mathbb{N}$,并同步改写公式。Ginsburg–Spanier 对 modified Presburger formulas 与半线性集等价的直接论域是 $\mathbb{N}^n$;整数版必须先做这类显式编码,不能省略域的变化。参见其原始论文

手算示例

逐式判断表达能力

谓词是否可表达理由或等价写法
x = 3y + 232 是固定常数,右侧是线性项。
x ≡ 1 (mod 3)可作扩展同余原子,或写成 $\exists k\in\mathbb{Z}:x=3k+1$。
x = yz一般否$y$、$z$ 都是变量,这是一般变量乘变量,不是固定次数的加法。若乘法图可定义,令 z=y 便会得到平方图。
x = y²一般否$y^2=y\cdot y$ 仍是变量乘变量。若平方图可定义,投影 $y$ 就能定义所有平方数;但一元 Presburger 集合最终呈固定周期,平方数间距却无界增长。
∃k: x = 3k + 1$k$ 被存在量词绑定,矩阵仍是线性等式;它恰好定义余数为 1 的整数。
(0 ≤ x ≤ N) ∨ (2N ≤ x ≤ 3N)两个仿射区间的析取;$N$ 是自由参数,所有乘数都是固定常数。

表中的“一般否”强调统一的无限整数关系。若把所有变量限制在某个固定有限集合,当然可以穷举成有限析取,但这不等于得到对任意参数规模都有效的 Presburger 乘法定义。

析取例子的自由变量集合是 {x,N}。若外层另给参数上下文 $C(N):N\ge0$,它定义两个可能分离的整数区间,说明一般 Presburger 集合不必是单个凸多面体。

非单位步长循环

考虑

for (int i = 1; i < N; i += 3) S(i);

引入整数迭代计数 $k\in\mathbb{Z}$。初始化对应 k=0、第 $k$ 次执行时 i=1+3k,且循环只沿正方向执行,因此域可写成

$$ D_S(N)=\{i\in\mathbb{Z}\mid \exists k\in\mathbb{Z}: i=1+3k\land0\le k\land i<N\}. $$

i=1+3k 和 $k\ge0$ 可得 $i\ge1$ 以及 $i\equiv1\pmod3$。反过来,若 $i\ge1$ 且 $i\equiv1\pmod3$,则存在整数 $k=(i-1)/3\ge0$。所以等价的同余写法是

$$ D_S(N)=\{i\in\mathbb{Z}\mid1\le i<N\land i\equiv1\pmod3\}. $$

N=11,从 k=0 开始手算:

$$ k=0,1,2,3\quad\Longrightarrow\quad i=1,4,7,10. $$

k=4i=13,已不满足 i<11。因此全部实例恰为

$$ D_S(11)=\{1,4,7,10\}. $$

若只保留区间 $1\le i<N$,就会得到 {1,2,3,4,5,6,7,8,9,10},其中 2,3,5,6,8,9 是原循环从不到达的虚假实例。区间描述丢掉了模 3 的周期信息。

编译器用途

Presburger 公式给编译器一种统一方式来表示:

  • 仿射循环边界与参数上下文;
  • if 条件形成的交、并、补;
  • 非单位步长形成的同余类;
  • 引入辅助变量后的投影,即存在量词;
  • 对所有候选实例成立的合法性条件,即全称量词。

自由变量决定一个公式描述什么坐标空间。对 $\varphi(i,j,N)$,若把 $N$ 视为参数,则固定 $N$ 后自由迭代坐标是 (i,j);若消去 $j$,所得公式只描述 (i,N)。后续的集合与关系代数会把这种变量角色显式组织成输入、输出和参数空间。

同余不是装饰信息。若分析器把 i += 3 松弛为普通区间,后续依赖测试可能报告并不存在的实例和冲突;精确整数模型必须保留步长带来的周期结构。

常见误区

  1. 把固定常数乘法与一般乘法混为一谈。 7x 合法,因为 7 固定;xy 不合法,因为重复加法次数由变量决定。
  2. 认为存在量词让任意运算都可表达。 $\exists k:x=3k+1$ 仍只含线性项;增加量词不会把 x=yz 变成线性公式。
  3. 混用 $\mathbb{N}$ 与 $\mathbb{Z}$。 负数见证可能改变句子真值。若从自然数结果搬到整数,必须给出编码。
  4. 认为同余是额外的非线性能力。 固定模数同余可展开为带存在量词的线性等式,它仍处于 Presburger 范围内。
  5. 认为析取仍一定是一个凸域。 两个分离区间的并可以由公式表达,却不能当成单个凸多面体。
  6. 把数据依赖控制或地址的表达式强行线性化。 A[i*i]A[B[i]]while (A[i] > 0) 分别引入非线性下标、间接下标和数据相关控制;删掉这些信息得到的只是近似,不是原程序的精确 Presburger 语义。

练习

练习 EX02-B01|同余的量词形式与自由变量(基础)

写出谓词 $x\equiv2\pmod5$ 的存在量词形式,并求其自由变量集合。

答案索引: ANS-EX02-B01

练习 EX02-D01|Presburger 可定义性判定(推导)

判断 $x=4y-N$、$x=Ny$、$x=y+z$、$x=|y|$ 是否可定义。对最后一式尝试用析取展开绝对值。

答案索引: ANS-EX02-D01

练习 EX02-D02|固定步长循环建模(推导)

for (i=2; i<=20; i+=4) 写成存在量词形式与同余形式,并枚举全部实例。

答案索引: ANS-EX02-D02

练习 EX02-B02|整数版与自然数版真值(基础)

在整数版和自然数版中分别判断 $\exists x:2x+1=0$ 的真值,并说明这道命题对区分两个论域的诊断力为何有限。

答案索引: ANS-EX02-B02

练习 EX02-C01|析取域的参数边界(综合)

对 $\varphi(i,N):(0\le i<N)\lor(2N\le i<3N)$,分别讨论 $N=0$、$N=2$ 时定义的集合。

答案索引: ANS-EX02-C01

本章小结

整数版 Presburger 算术以线性项、比较、布尔联结词和量词描述整数点集。固定常数乘变量、固定模数同余、析取和投影都可表达;一般变量乘变量、非线性或数据相关地址则不在经典边界内。非单位步长例子显示,整数集合不仅需要区间,也需要同余所携带的周期信息。