h5i
本中文版由作者借助 AI 翻译而成。作者并非中文母语者,译文未经人工逐句校对,可能存在错误。如发现问题,请在 GitHub 上提交 issue。

附录 B

α 等价算法的正确性

第 11 章给出了 α 等价的两种定义:数学定义(允许给约束变量改名的最小同余关系)和算法定义(图 11.1 的规则,同步遍历两个项,按位置比较约束变量)。定理 11.1 说二者一致,本附录证明这一点。

思路

两种定义说的其实是同一件事:两个项的 de Bruijn 表示相同,也就是说,把每个约束变量换成它到自己绑定子的距离之后,二者形状相同。所以证明要经过第三种表示:无名的项表示。

  • 引理 B.1 表明算法比较的是无名形式,这几乎是显然的,因为图 11.1 的规则比较位置的方式与 de Bruijn 索引完全一样。
  • 引理 B.2 和 B.3 建立无名形式在改名下的两个性质,关键的一条是:给约束变量改名不改变无名形式。
  • 引理 B.4 利用这两条性质,表明数学定义比较的也是无名形式。
  • 定理 11.1 随之得出:把两条引理通过无名形式串起来即可。

这些证明都是对项的归纳,只有一处微妙之处:替换可能给绑定子改名,所以有些归纳必须对项的大小进行,而不是对结构进行。

无名项

无名项(nameless term)的构造方式与项相同,只是绑定子不带名字,约束变量写成数字 #i\#i:

d::=Sort u∣#i∣x∣Π d. d∣λ d. d∣d  dd ::= \Sort{u} \mid \#i \mid x \mid \Pi\,d.\,d \mid \lambda\,d.\,d \mid d\;d

自由变量保留名字,而数字 #i\#i 的意思是“由外层第 ii 个绑定子绑定的变量,从最内层的 00 开始数”。回忆第 11 章:对名字列表 EE,idx(E,x)\mathrm{idx}(E, x) 是 xx 在 EE 中最后一次出现的位置,从右边以 00 起数;若 x∉Ex \notin E 则无定义。

对名字列表 EE,位于绑定子 EE 之下的项 tt 的无名形式 ⌊t⌋E\db{t}{E} 定义为

⌊Sort u⌋E=Sort u⌊x⌋E={#idx(E,x)if x∈E,xotherwise,⌊Π(x:A). B⌋E=Π ⌊A⌋E. ⌊B⌋E,x⌊λ(x:A). t⌋E=λ ⌊A⌋E. ⌊t⌋E,x⌊t1  t2⌋E=⌊t1⌋E  ⌊t2⌋E.\begin{array}{rlrl} \db{\Sort{u}}{E} &= \Sort{u} & \qquad \db{x}{E} &= \begin{cases} \#\mathrm{idx}(E, x) & \text{if } x \in E, \\ x & \text{otherwise,} \end{cases} \\[12pt] \db{\tPi{x}{A}{B}}{E} &= \Pi\,\db{A}{E}.\,\db{B}{E, x} & \qquad \db{\tLam{x}{A}{t}}{E} &= \lambda\,\db{A}{E}.\,\db{t}{E, x} \\[4pt] \db{t_1\;t_2}{E} &= \db{t_1}{E}\;\db{t_2}{E}. & & \end{array}

无名项的相等就是普通的语法相等。注意 ⌊t⌋E\db{t}{E} 与 tt 的最外层形状相同,只是变量可能变成数字或保持名字。第 7 章引入的常量与宇宙一样保持不变,按名字比较;它们在下文中只增加一些平凡情形,故略去。

算法计算的是无名形式

第一条引理把图 11.1 的规则与无名形式联系起来,它的作用是把由规则定义的算法判断,换成两个项之间的等式,后者更容易推理。

引理 B.1(算法比较的是无名形式). 对所有 E1E_1、E2E_2、ss 和 tt:判断 E1;E2⊢s=αtE_1; E_2 \vdash s \alphaeq t 可推导,当且仅当 ⌊s⌋E1=⌊t⌋E2\db{s}{E_1} = \db{t}{E_2}。

对 ss 归纳,同时对所有 tt、E1E_1 和 E2E_2。对 ss 的每种形状,图 11.1 中恰有一条规则能得出该判断,而其前提与 ⌊⋅⌋\db{\cdot}{} 的等式一一对应。

若 s=Sort us = \Sort{u},由规则 α\alpha-Sort 和宇宙的等式,两边都恰当 t=Sort ut = \Sort{u} 时成立。

若 s=xs = x,无名形式只有在 tt 是变量 yy 时才可能相等,因为无名变量(数字或名字)永远不等于 Π\Pi、λ\lambda、应用或宇宙。若 x∈E1x \in E_1,则 ⌊x⌋E1=#idx(E1,x)\db{x}{E_1} = \#\mathrm{idx}(E_1, x),相等恰当 y∈E2y \in E_2 且 idx(E2,y)=idx(E1,x)\mathrm{idx}(E_2, y) = \mathrm{idx}(E_1, x) 时成立,这正是 α\alpha-Bound 的前提。若 x∉E1x \notin E_1,则 ⌊x⌋E1=x\db{x}{E_1} = x,相等恰当 y∉E2y \notin E_2 且 y=xy = x 时成立,这正是 α\alpha-Free 的前提。数字永远不等于名字,这对应于:对于只在一侧被绑定的变量,没有任何规则适用。

若 s=Π(x:A). Bs = \tPi{x}{A}{B},相等恰当 t=Π(y:A′). B′t = \tPi{y}{A'}{B'} 且 ⌊A⌋E1=⌊A′⌋E2\db{A}{E_1} = \db{A'}{E_2}、⌊B⌋E1,x=⌊B′⌋E2,y\db{B}{E_1, x} = \db{B'}{E_2, y} 时成立。对 AA 和 BB 分别应用归纳假设,这两个等式正是 α\alpha-Pi 的前提。λ\lambda 和应用的情形相同,分别用 α\alpha-Lam 和 α\alpha-App。

关于改名的两个事实

第 11 章中 =α\alphaeq 的定义涉及替换:当 y∉FV(B)y \notin \FV(B) 时,允许把 Π(x:A). B\tPi{x}{A}{B} 换成 Π(y:A). B[x↦y]\tPi{y}{A}{\subst{B}{x}{y}}。要把它与无名形式联系起来,需要知道给约束变量改名时 ⌊⋅⌋\db{\cdot}{} 如何变化。两条引理提供这一点。

第一条说,⌊t⌋E\db{t}{E} 对 EE 的依赖只通过 tt 的自由变量。它的作用是技术性的:只要两个绑定子列表在相关变量上相合,就可以互相替换。

引理 B.2(相合). 若对每个 v∈FV(t)v \in \FV(t) 都有 idx(E1,v)=idx(E2,v)\mathrm{idx}(E_1, v) = \mathrm{idx}(E_2, v)(两边可以同时无定义),则 ⌊t⌋E1=⌊t⌋E2\db{t}{E_1} = \db{t}{E_2}。

对 tt 归纳,同时对所有 E1E_1 和 E2E_2。变量情形正是假设本身:自由变量 vv 在两边变成同一个数字,或保持同一个名字。宇宙不受 EE 影响;应用由两个部分的归纳假设得出。

在绑定子 xx 之下,列表 E1,xE_1, x 和 E2,xE_2, x 在体的自由变量上仍然相合:变量 xx 在两边的位置都是 00,而体的其他任何自由变量 vv 都是 tt 的自由变量,由假设,它在 E1E_1 和 E2E_2 中的位置相同;追加 xx 使这个位置在两边各加一,或者在两边都保持无定义。于是对体可用归纳假设;注记部分则用原列表的归纳假设处理。

第二条引理完成本附录的主要工作:给绑定子改名不改变无名形式。它针对位于任意深度的绑定子来陈述,绑定子之前是列表 EE,之后是列表 E′E',因为归纳要继续深入更多绑定子。

我们要用到一个事实:用变量替换变量保持项的大小,即使沿途给绑定子改了名;这是对替换定义的例行归纳。

引理 B.3(改名). 设 y≠xy \neq x,y∉FV(B)y \notin \FV(B),且 x,y∉E′x, y \notin E'。则对每个列表 EE 都有 ⌊B⌋E,x,E′=⌊B[x↦y]⌋E,y,E′\db{B}{E, x, E'} = \db{\subst{B}{x}{y}}{E, y, E'}。

对 BB 的大小归纳,同时对所有 EE 和 E′E'。记 Lx=E,x,E′L_x = E, x, E' 和 Ly=E,y,E′L_y = E, y, E';它们恰有一个条目不同,且位于同一位置。

若 B=xB = x,则 B[x↦y]=y\subst{B}{x}{y} = y。由于 x,y∉E′x, y \notin E',xx 在 LxL_x 中的最后一次出现和 yy 在 LyL_y 中的最后一次出现都是那个特殊条目,所以 idx(Lx,x)\mathrm{idx}(L_x, x) 和 idx(Ly,y)\mathrm{idx}(L_y, y) 都等于 E′E' 的长度,两个无名形式是同一个数字。

若 B=vB = v 且 v≠xv \neq x,则因 y∉FV(B)y \notin \FV(B) 有 v≠yv \neq y,并且 B[x↦y]=v\subst{B}{x}{y} = v。vv 在 LxL_x 和 LyL_y 中的位置相同,因为 vv 不是那两个不同条目中的任何一个;或者它在两边都无定义。

宇宙和应用由定义和归纳假设直接得出。

设 B=Π(w:C). DB = \tPi{w}{C}{D};λ\lambda 的情形相同。下面每种情形中注记 CC 都由归纳假设处理,所以只考虑体。按照第 11 章替换的定义,分三种情形。

情形 w=xw = x. 绑定子遮蔽了 xx,所以 B[x↦y]=Π(x:C[x↦y]). D\subst{B}{x}{y} = \tPi{x}{\subst{C}{x}{y}}{D},我们需要 ⌊D⌋Lx,x=⌊D⌋Ly,x\db{D}{L_x, x} = \db{D}{L_y, x},为此应用引理 B.2:变量 xx 在两个列表中的位置都是 00,因为它刚被追加;其他任何 v∈FV(D)v \in \FV(D) 都不同于 yy,因为 y∉FV(B)y \notin \FV(B),所以它在两个列表中的位置相同,或在两边都无定义。

情形 w∉{x,y}w \notin \{x, y\}. 不需要改名,B[x↦y]=Π(w:C[x↦y]). D[x↦y]\subst{B}{x}{y} = \tPi{w}{\subst{C}{x}{y}}{\subst{D}{x}{y}}。对 DD 用归纳假设,并把 E′E' 扩展为加上 ww(这是允许的,因为 ww 既不是 xx 也不是 yy),得 ⌊D⌋Lx,w=⌊D[x↦y]⌋Ly,w\db{D}{L_x, w} = \db{\subst{D}{x}{y}}{L_y, w},这正是体所需要的。

情形 w=yw = y. 绑定子会捕获 yy,所以替换把它改名为新鲜的 z∉FV(D)∪{x,y}z \notin \FV(D) \cup \{x, y\}:

B[x↦y]=Π(z:C[x↦y]). (D[y↦z])[x↦y].\subst{B}{x}{y} = \tPi{z}{\subst{C}{x}{y}}{\subst{(\subst{D}{y}{z})}{x}{y}}.

我们需要 ⌊D⌋Lx,y=⌊(D[y↦z])[x↦y]⌋Ly,z\db{D}{L_x, y} = \db{\subst{(\subst{D}{y}{z})}{x}{y}}{L_y, z},分两步到达。第一步,对 DD 用归纳假设,把它最后一个绑定子 yy 改名为 zz(取 EE 为 LxL_x,E′E' 为空;前提成立,因为 z≠yz \neq y,z∉FV(D)z \notin \FV(D),且绑定子之后的列表为空),得 ⌊D⌋Lx,y=⌊D[y↦z]⌋Lx,z\db{D}{L_x, y} = \db{\subst{D}{y}{z}}{L_x, z}。第二步,对 D[y↦z]\subst{D}{y}{z} 用归纳假设,它的大小与 DD 相同且不含自由的 yy,把 E′E' 扩展为加上 zz,得 ⌊D[y↦z]⌋Lx,z=⌊(D[y↦z])[x↦y]⌋Ly,z\db{\subst{D}{y}{z}}{L_x, z} = \db{\subst{(\subst{D}{y}{z})}{x}{y}}{L_y, z}。把两个等式串起来即得结论。

定义计算的也是无名形式

有了这两条改名事实,我们可以证明 =α\alphaeq 的数学定义同样归结为无名形式的相等。两个方向的证法不同:一个利用 =α\alphaeq 作为同余关系的最小性,另一个对大小归纳。

引理 B.4(定义比较的是无名形式). 若按第 11 章定义的意义有 s=αts \alphaeq t,则对每个 EE 都有 ⌊s⌋E=⌊t⌋E\db{s}{E} = \db{t}{E}。反之,若对某个 EE 有 ⌊s⌋E=⌊t⌋E\db{s}{E} = \db{t}{E},则 s=αts \alphaeq t。

第一部分. 令 s∼ts \sim t 表示对每个 EE 都有 ⌊s⌋E=⌊t⌋E\db{s}{E} = \db{t}{E}。这个关系是等价关系,因为相等是。它是同余关系,因为 ⌊⋅⌋\db{\cdot}{} 是逐构造子定义的:如果两个项的各部分在相应列表下的无名形式相等,那么这两个项的无名形式也相等。最后,∼\sim 包含 =α\alphaeq 的定义等式:若 y∉FV(B)y \notin \FV(B),则

⌊Π(x:A). B⌋E=Π ⌊A⌋E. ⌊B⌋E,xand⌊Π(y:A). B[x↦y]⌋E=Π ⌊A⌋E. ⌊B[x↦y]⌋E,y,\db{\tPi{x}{A}{B}}{E} = \Pi\,\db{A}{E}.\,\db{B}{E, x} \qquad\text{and}\qquad \db{\tPi{y}{A}{\subst{B}{x}{y}}}{E} = \Pi\,\db{A}{E}.\,\db{\subst{B}{x}{y}}{E, y},

而两个体由引理 B.3(取 E′E' 为空)相等;y=xy = x 的情形平凡,因为此时两个项完全相同。λ\lambda 的情形同理。由于 =α\alphaeq 是包含该等式的最小同余关系,而 ∼\sim 是包含它的一个同余关系,所以 s=αts \alphaeq t 蕴涵 s∼ts \sim t。

第二部分. 对 ss 的大小归纳,同时对所有 tt 和 EE,假设 ⌊s⌋E=⌊t⌋E\db{s}{E} = \db{t}{E}。

若 ss 是变量,则 tt 也是,因为其他形状的无名形式绝不会是数字或名字。若两个无名形式都是数字 #i\#i,则两个变量都是 EE 中位置 ii 处的条目,所以 s=ts = t。若两个都是名字,则直接有 s=ts = t。无论哪种情形,由自反性得 s=αts \alphaeq t。

宇宙直接相等。对于应用,两部分的无名形式各自相等,于是归纳假设给出每部分的 =α\alphaeq,再由 =α\alphaeq 的同余性质得到整体的结论。

设 s=Π(x:A). Bs = \tPi{x}{A}{B},于是 t=Π(y:A′). B′t = \tPi{y}{A'}{B'},且 ⌊A⌋E=⌊A′⌋E\db{A}{E} = \db{A'}{E}、⌊B⌋E,x=⌊B′⌋E,y\db{B}{E, x} = \db{B'}{E, y}。归纳假设给出 A=αA′A \alphaeq A'。对于体,选取 z∉FV(B)∪FV(B′)∪{x,y}z \notin \FV(B) \cup \FV(B') \cup \{x, y\}。引理 B.3(取 E′E' 为空)给出 ⌊B⌋E,x=⌊B[x↦z]⌋E,z\db{B}{E, x} = \db{\subst{B}{x}{z}}{E, z} 和 ⌊B′⌋E,y=⌊B′[y↦z]⌋E,z\db{B'}{E, y} = \db{\subst{B'}{y}{z}}{E, z},所以

⌊B[x↦z]⌋E,z=⌊B′[y↦z]⌋E,z.\db{\subst{B}{x}{z}}{E, z} = \db{\subst{B'}{y}{z}}{E, z}.

由于 B[x↦z]\subst{B}{x}{z} 的大小与 BB 相同,小于 ss 的大小,归纳假设给出 B[x↦z]=αB′[y↦z]\subst{B}{x}{z} \alphaeq \subst{B'}{y}{z}。于是

Π(x:A). B  =α  Π(z:A). B[x↦z]  =α  Π(z:A′). B′[y↦z]  =α  Π(y:A′). B′,\tPi{x}{A}{B} \;\alphaeq\; \tPi{z}{A}{\subst{B}{x}{z}} \;\alphaeq\; \tPi{z}{A'}{\subst{B'}{y}{z}} \;\alphaeq\; \tPi{y}{A'}{B'},

三步分别依据定义等式(因 z∉FV(B)z \notin \FV(B) 而成立)、同余性,以及反向读的定义等式(因 z∉FV(B′)z \notin \FV(B') 而成立)。λ\lambda 的情形相同。

定理 11.1 的证明

定理 11.1(算法 α 等价的正确性). 对所有项 ss 和 tt,按第 11 章定义的意义 s=αts \alphaeq t,当且仅当 ⋅ ;⋅⊢s=αt\cdot\,;\cdot \vdash s \alphaeq t 可由图 11.1 的规则推导。

若 s=αts \alphaeq t,则由引理 B.4 的第一部分(取 EE 为空)得 ⌊s⌋⋅=⌊t⌋⋅\db{s}{\cdot} = \db{t}{\cdot},再由引理 B.1 得 ⋅ ;⋅⊢s=αt\cdot\,;\cdot \vdash s \alphaeq t。

反之,若 ⋅ ;⋅⊢s=αt\cdot\,;\cdot \vdash s \alphaeq t,则由引理 B.1 得 ⌊s⌋⋅=⌊t⌋⋅\db{s}{\cdot} = \db{t}{\cdot},再由引理 B.4 的第二部分得 s=αts \alphaeq t。

要点回顾

  • α 等价的两种定义计算的是同一件事:de Bruijn(无名)形式的相等。无名形式是连接二者的桥梁。
  • 算法逐条规则地直接匹配无名形式(引理 B.1)。
  • 关于数学定义的关键事实是:给约束变量改名不改变无名形式(引理 B.3);这需要对大小归纳,因为替换本身可能给绑定子改名。
  • 使用 de Bruijn 索引的内核免费获得这条定理:α 等价的项在语法上完全相同。