第 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 # i :
d : : = S o r t u ∣ # i ∣ x ∣ Π d . d ∣ λ d . d ∣ d d d ::= \Sort{u} \mid \#i \mid x \mid \Pi\,d.\,d \mid \lambda\,d.\,d \mid d\;d d ::= Sort u ∣ # i ∣ x ∣ Π d . d ∣ λ d . d ∣ d d
自由变量保留名字,而数字 # i \#i # i 的意思是“由外层第 i i i 个绑定子绑定的变量,从最内层的 0 0 0 开始数”。回忆第 11 章:对名字列表 E E E ,i d x ( E , x ) \mathrm{idx}(E, x) idx ( E , x ) 是 x x x 在 E E E 中最后一次出现的位置,从右边以 0 0 0 起数;若 x ∉ E x \notin E x ∈ / E 则无定义。
对名字列表 E E E ,位于绑定子 E E E 之下的项 t t t 的无名形式 ⌊ t ⌋ E \db{t}{E} ⌊ t ⌋ E 定义为
⌊ S o r t u ⌋ E = S o r t u ⌊ x ⌋ E = { # i d x ( E , x ) if x ∈ E , x otherwise, ⌊ Π ( x : A ) . B ⌋ E = Π ⌊ A ⌋ E . ⌊ B ⌋ E , x ⌊ λ ( x : A ) . t ⌋ E = λ ⌊ A ⌋ E . ⌊ t ⌋ E , x ⌊ t 1 t 2 ⌋ E = ⌊ t 1 ⌋ E ⌊ t 2 ⌋ 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} ⌊ Sort u ⌋ E ⌊ Π ( x : A ) . B ⌋ E ⌊ t 1 t 2 ⌋ E = Sort u = Π ⌊ A ⌋ E . ⌊ B ⌋ E , x = ⌊ t 1 ⌋ E ⌊ t 2 ⌋ E . ⌊ x ⌋ E ⌊ λ ( x : A ) . t ⌋ E = { # idx ( E , x ) x if x ∈ E , otherwise, = λ ⌊ A ⌋ E . ⌊ t ⌋ E , x
无名项的相等就是普通的语法相等。注意 ⌊ t ⌋ E \db{t}{E} ⌊ t ⌋ E 与 t t t 的最外层形状相同,只是变量可能变成数字或保持名字。第 7 章 引入的常量与宇宙一样保持不变,按名字比较;它们在下文中只增加一些平凡情形,故略去。
写下带非空 E E E 的 ⌊ t ⌋ E \db{t}{E} ⌊ t ⌋ E ,描述的是作为子项 的 t t t ,它位于 E E E 所列的绑定子之下。整项的情形是 ⌊ t ⌋ ⋅ \db{t}{\cdot} ⌊ t ⌋ ⋅ ,没有外层绑定子。保持 E E E 一般化的原因是,下面每个归纳都要穿过绑定子,而在绑定子之下,子项比它所来自的项多一个外层绑定子。
算法计算的是无名形式
第一条引理把图 11.1 的规则与无名形式联系起来,它的作用是把由规则定义的算法判断,换成两个项之间的等式,后者更容易推理。
引理 B.1(算法比较的是无名形式). 对所有 E 1 E_1 E 1 、E 2 E_2 E 2 、s s s 和 t t t :判断 E 1 ; E 2 ⊢ s = α t E_1; E_2 \vdash s \alphaeq t E 1 ; E 2 ⊢ s = α t 可推导,当且仅当 ⌊ s ⌋ E 1 = ⌊ t ⌋ E 2 \db{s}{E_1} = \db{t}{E_2} ⌊ s ⌋ E 1 = ⌊ t ⌋ E 2 。
对 s s s 归纳,同时对所有 t t t 、E 1 E_1 E 1 和 E 2 E_2 E 2 。对 s s s 的每种形状,图 11.1 中恰有一条规则能得出该判断,而其前提与 ⌊ ⋅ ⌋ \db{\cdot}{} ⌊ ⋅ ⌋ 的等式一一对应。
若 s = S o r t u s = \Sort{u} s = Sort u ,由规则 α \alpha α -Sort 和宇宙的等式,两边都恰当 t = S o r t u t = \Sort{u} t = Sort u 时成立。
若 s = x s = x s = x ,无名形式只有在 t t t 是变量 y y y 时才可能相等,因为无名变量(数字或名字)永远不等于 Π \Pi Π 、λ \lambda λ 、应用或宇宙。若 x ∈ E 1 x \in E_1 x ∈ E 1 ,则 ⌊ x ⌋ E 1 = # i d x ( E 1 , x ) \db{x}{E_1} = \#\mathrm{idx}(E_1, x) ⌊ x ⌋ E 1 = # idx ( E 1 , x ) ,相等恰当 y ∈ E 2 y \in E_2 y ∈ E 2 且 i d x ( E 2 , y ) = i d x ( E 1 , x ) \mathrm{idx}(E_2, y) = \mathrm{idx}(E_1, x) idx ( E 2 , y ) = idx ( E 1 , x ) 时成立,这正是 α \alpha α -Bound 的前提。若 x ∉ E 1 x \notin E_1 x ∈ / E 1 ,则 ⌊ x ⌋ E 1 = x \db{x}{E_1} = x ⌊ x ⌋ E 1 = x ,相等恰当 y ∉ E 2 y \notin E_2 y ∈ / E 2 且 y = x y = x y = x 时成立,这正是 α \alpha α -Free 的前提。数字永远不等于名字,这对应于:对于只在一侧被绑定的变量,没有任何规则适用。
若 s = Π ( x : A ) . B s = \tPi{x}{A}{B} s = Π ( x : A ) . B ,相等恰当 t = Π ( y : A ′ ) . B ′ t = \tPi{y}{A'}{B'} t = Π ( y : A ′ ) . B ′ 且 ⌊ A ⌋ E 1 = ⌊ A ′ ⌋ E 2 \db{A}{E_1} = \db{A'}{E_2} ⌊ A ⌋ E 1 = ⌊ A ′ ⌋ E 2 、⌊ B ⌋ E 1 , x = ⌊ B ′ ⌋ E 2 , y \db{B}{E_1, x} = \db{B'}{E_2, y} ⌊ B ⌋ E 1 , x = ⌊ B ′ ⌋ E 2 , y 时成立。对 A A A 和 B B B 分别应用归纳假设,这两个等式正是 α \alpha α -Pi 的前提。λ \lambda λ 和应用的情形相同,分别用 α \alpha α -Lam 和 α \alpha α -App。
关于改名的两个事实
第 11 章中 = α \alphaeq = α 的定义涉及替换:当 y ∉ F V ( B ) y \notin \FV(B) y ∈ / FV ( B ) 时,允许把 Π ( x : A ) . B \tPi{x}{A}{B} Π ( x : A ) . B 换成 Π ( y : A ) . B [ x ↦ y ] \tPi{y}{A}{\subst{B}{x}{y}} Π ( y : A ) . B [ x ↦ y ] 。要把它与无名形式联系起来,需要知道给约束变量改名时 ⌊ ⋅ ⌋ \db{\cdot}{} ⌊ ⋅ ⌋ 如何变化。两条引理提供这一点。
第一条说,⌊ t ⌋ E \db{t}{E} ⌊ t ⌋ E 对 E E E 的依赖只通过 t t t 的自由变量。它的作用是技术性的:只要两个绑定子列表在相关变量上相合,就可以互相替换。
引理 B.2(相合). 若对每个 v ∈ F V ( t ) v \in \FV(t) v ∈ FV ( t ) 都有 i d x ( E 1 , v ) = i d x ( E 2 , v ) \mathrm{idx}(E_1, v) = \mathrm{idx}(E_2, v) idx ( E 1 , v ) = idx ( E 2 , v ) (两边可以同时无定义),则 ⌊ t ⌋ E 1 = ⌊ t ⌋ E 2 \db{t}{E_1} = \db{t}{E_2} ⌊ t ⌋ E 1 = ⌊ t ⌋ E 2 。
对 t t t 归纳,同时对所有 E 1 E_1 E 1 和 E 2 E_2 E 2 。变量情形正是假设本身:自由变量 v v v 在两边变成同一个数字,或保持同一个名字。宇宙不受 E E E 影响;应用由两个部分的归纳假设得出。
在绑定子 x x x 之下,列表 E 1 , x E_1, x E 1 , x 和 E 2 , x E_2, x E 2 , x 在体的自由变量上仍然相合:变量 x x x 在两边的位置都是 0 0 0 ,而体的其他任何自由变量 v v v 都是 t t t 的自由变量,由假设,它在 E 1 E_1 E 1 和 E 2 E_2 E 2 中的位置相同;追加 x x x 使这个位置在两边各加一,或者在两边都保持无定义。于是对体可用归纳假设;注记部分则用原列表的归纳假设处理。
第二条引理完成本附录的主要工作:给绑定子改名不改变无名形式。它针对位于任意深度的绑定子来陈述,绑定子之前是列表 E E E ,之后是列表 E ′ E' E ′ ,因为归纳要继续深入更多绑定子。
我们要用到一个事实:用变量替换变量保持项的大小,即使沿途给绑定子改了名;这是对替换定义的例行归纳。
引理 B.3(改名). 设 y ≠ x y \neq x y = x ,y ∉ F V ( B ) y \notin \FV(B) y ∈ / FV ( B ) ,且 x , y ∉ E ′ x, y \notin E' x , y ∈ / E ′ 。则对每个列表 E E E 都有 ⌊ B ⌋ E , x , E ′ = ⌊ B [ x ↦ y ] ⌋ E , y , E ′ \db{B}{E, x, E'} = \db{\subst{B}{x}{y}}{E, y, E'} ⌊ B ⌋ E , x , E ′ = ⌊ B [ x ↦ y ] ⌋ E , y , E ′ 。
对 B B B 的大小归纳,同时对所有 E E E 和 E ′ E' E ′ 。记 L x = E , x , E ′ L_x = E, x, E' L x = E , x , E ′ 和 L y = E , y , E ′ L_y = E, y, E' L y = E , y , E ′ ;它们恰有一个条目不同,且位于同一位置。
若 B = x B = x B = x ,则 B [ x ↦ y ] = y \subst{B}{x}{y} = y B [ x ↦ y ] = y 。由于 x , y ∉ E ′ x, y \notin E' x , y ∈ / E ′ ,x x x 在 L x L_x L x 中的最后一次出现和 y y y 在 L y L_y L y 中的最后一次出现都是那个特殊条目,所以 i d x ( L x , x ) \mathrm{idx}(L_x, x) idx ( L x , x ) 和 i d x ( L y , y ) \mathrm{idx}(L_y, y) idx ( L y , y ) 都等于 E ′ E' E ′ 的长度,两个无名形式是同一个数字。
若 B = v B = v B = v 且 v ≠ x v \neq x v = x ,则因 y ∉ F V ( B ) y \notin \FV(B) y ∈ / FV ( B ) 有 v ≠ y v \neq y v = y ,并且 B [ x ↦ y ] = v \subst{B}{x}{y} = v B [ x ↦ y ] = v 。v v v 在 L x L_x L x 和 L y L_y L y 中的位置相同,因为 v v v 不是那两个不同条目中的任何一个;或者它在两边都无定义。
宇宙和应用由定义和归纳假设直接得出。
设 B = Π ( w : C ) . D B = \tPi{w}{C}{D} B = Π ( w : C ) . D ;λ \lambda λ 的情形相同。下面每种情形中注记 C C C 都由归纳假设处理,所以只考虑体。按照第 11 章替换的定义,分三种情形。
情形 w = x w = x w = x . 绑定子遮蔽了 x x x ,所以 B [ x ↦ y ] = Π ( x : C [ x ↦ y ] ) . D \subst{B}{x}{y} = \tPi{x}{\subst{C}{x}{y}}{D} B [ x ↦ y ] = Π ( x : C [ x ↦ y ]) . D ,我们需要 ⌊ D ⌋ L x , x = ⌊ D ⌋ L y , x \db{D}{L_x, x} = \db{D}{L_y, x} ⌊ D ⌋ L x , x = ⌊ D ⌋ L y , x ,为此应用引理 B.2:变量 x x x 在两个列表中的位置都是 0 0 0 ,因为它刚被追加;其他任何 v ∈ F V ( D ) v \in \FV(D) v ∈ FV ( D ) 都不同于 y y y ,因为 y ∉ F V ( B ) y \notin \FV(B) y ∈ / FV ( B ) ,所以它在两个列表中的位置相同,或在两边都无定义。
情形 w ∉ { x , y } w \notin \{x, y\} w ∈ / { 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}} B [ x ↦ y ] = Π ( w : C [ x ↦ y ]) . D [ x ↦ y ] 。对 D D D 用归纳假设,并把 E ′ E' E ′ 扩展为加上 w w w (这是允许的,因为 w w w 既不是 x x x 也不是 y y y ),得 ⌊ D ⌋ L x , w = ⌊ D [ x ↦ y ] ⌋ L y , w \db{D}{L_x, w} = \db{\subst{D}{x}{y}}{L_y, w} ⌊ D ⌋ L x , w = ⌊ D [ x ↦ y ] ⌋ L y , w ,这正是体所需要的。
情形 w = y w = y w = y . 绑定子会捕获 y y y ,所以替换把它改名为新鲜的 z ∉ F V ( D ) ∪ { x , y } z \notin \FV(D) \cup \{x, y\} z ∈ / FV ( D ) ∪ { 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}}. B [ x ↦ y ] = Π ( z : C [ x ↦ y ]) . ( D [ y ↦ z ]) [ x ↦ y ] .
我们需要 ⌊ D ⌋ L x , y = ⌊ ( D [ y ↦ z ] ) [ x ↦ y ] ⌋ L y , z \db{D}{L_x, y} = \db{\subst{(\subst{D}{y}{z})}{x}{y}}{L_y, z} ⌊ D ⌋ L x , y = ⌊( D [ y ↦ z ]) [ x ↦ y ] ⌋ L y , z ,分两步到达。第一步,对 D D D 用归纳假设,把它最后一个绑定子 y y y 改名为 z z z (取 E E E 为 L x L_x L x ,E ′ E' E ′ 为空;前提成立,因为 z ≠ y z \neq y z = y ,z ∉ F V ( D ) z \notin \FV(D) z ∈ / FV ( D ) ,且绑定子之后的列表为空),得 ⌊ D ⌋ L x , y = ⌊ D [ y ↦ z ] ⌋ L x , z \db{D}{L_x, y} = \db{\subst{D}{y}{z}}{L_x, z} ⌊ D ⌋ L x , y = ⌊ D [ y ↦ z ] ⌋ L x , z 。第二步,对 D [ y ↦ z ] \subst{D}{y}{z} D [ y ↦ z ] 用归纳假设,它的大小与 D D D 相同且不含自由的 y y y ,把 E ′ E' E ′ 扩展为加上 z z z ,得 ⌊ D [ y ↦ z ] ⌋ L x , z = ⌊ ( D [ y ↦ z ] ) [ x ↦ y ] ⌋ L y , z \db{\subst{D}{y}{z}}{L_x, z} = \db{\subst{(\subst{D}{y}{z})}{x}{y}}{L_y, z} ⌊ D [ y ↦ z ] ⌋ L x , z = ⌊( D [ y ↦ z ]) [ x ↦ y ] ⌋ L y , z 。把两个等式串起来即得结论。
引理 B.3 的归纳对大小而不是对结构进行,因为第三种情形把归纳假设用于 D [ y ↦ z ] \subst{D}{y}{z} D [ y ↦ z ] ,而它不是 B B B 的子项;但它的大小与 D D D 相同,小于 B B B 的大小,所以归纳是良基的。
定义计算的也是无名形式
有了这两条改名事实,我们可以证明 = α \alphaeq = α 的数学定义同样归结为无名形式的相等。两个方向的证法不同:一个利用 = α \alphaeq = α 作为同余关系的最小性,另一个对大小归纳。
引理 B.4(定义比较的是无名形式). 若按第 11 章定义的意义有 s = α t s \alphaeq t s = α t ,则对每个 E E E 都有 ⌊ s ⌋ E = ⌊ t ⌋ E \db{s}{E} = \db{t}{E} ⌊ s ⌋ E = ⌊ t ⌋ E 。反之,若对某个 E E E 有 ⌊ s ⌋ E = ⌊ t ⌋ E \db{s}{E} = \db{t}{E} ⌊ s ⌋ E = ⌊ t ⌋ E ,则 s = α t s \alphaeq t s = α t 。
第一部分. 令 s ∼ t s \sim t s ∼ t 表示对每个 E E E 都有 ⌊ s ⌋ E = ⌊ t ⌋ E \db{s}{E} = \db{t}{E} ⌊ s ⌋ E = ⌊ t ⌋ E 。这个关系是等价关系,因为相等是。它是同余关系,因为 ⌊ ⋅ ⌋ \db{\cdot}{} ⌊ ⋅ ⌋ 是逐构造子定义的:如果两个项的各部分在相应列表下的无名形式相等,那么这两个项的无名形式也相等。最后,∼ \sim ∼ 包含 = α \alphaeq = α 的定义等式:若 y ∉ F V ( B ) y \notin \FV(B) y ∈ / FV ( B ) ,则
⌊ Π ( x : A ) . B ⌋ E = Π ⌊ A ⌋ E . ⌊ B ⌋ E , x and ⌊ Π ( 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}, ⌊ Π ( x : A ) . B ⌋ E = Π ⌊ A ⌋ E . ⌊ B ⌋ E , x and ⌊ Π ( y : A ) . B [ x ↦ y ] ⌋ E = Π ⌊ A ⌋ E . ⌊ B [ x ↦ y ] ⌋ E , y ,
而两个体由引理 B.3(取 E ′ E' E ′ 为空)相等;y = x y = x y = x 的情形平凡,因为此时两个项完全相同。λ \lambda λ 的情形同理。由于 = α \alphaeq = α 是包含该等式的最小同余关系,而 ∼ \sim ∼ 是包含它的一个同余关系,所以 s = α t s \alphaeq t s = α t 蕴涵 s ∼ t s \sim t s ∼ t 。
第二部分. 对 s s s 的大小归纳,同时对所有 t t t 和 E E E ,假设 ⌊ s ⌋ E = ⌊ t ⌋ E \db{s}{E} = \db{t}{E} ⌊ s ⌋ E = ⌊ t ⌋ E 。
若 s s s 是变量,则 t t t 也是,因为其他形状的无名形式绝不会是数字或名字。若两个无名形式都是数字 # i \#i # i ,则两个变量都是 E E E 中位置 i i i 处的条目,所以 s = t s = t s = t 。若两个都是名字,则直接有 s = t s = t s = t 。无论哪种情形,由自反性得 s = α t s \alphaeq t s = α t 。
宇宙直接相等。对于应用,两部分的无名形式各自相等,于是归纳假设给出每部分的 = α \alphaeq = α ,再由 = α \alphaeq = α 的同余性质得到整体的结论。
设 s = Π ( x : A ) . B s = \tPi{x}{A}{B} s = Π ( x : A ) . B ,于是 t = Π ( y : A ′ ) . B ′ t = \tPi{y}{A'}{B'} t = Π ( y : A ′ ) . B ′ ,且 ⌊ A ⌋ E = ⌊ A ′ ⌋ E \db{A}{E} = \db{A'}{E} ⌊ A ⌋ E = ⌊ A ′ ⌋ E 、⌊ B ⌋ E , x = ⌊ B ′ ⌋ E , y \db{B}{E, x} = \db{B'}{E, y} ⌊ B ⌋ E , x = ⌊ B ′ ⌋ E , y 。归纳假设给出 A = α A ′ A \alphaeq A' A = α A ′ 。对于体,选取 z ∉ F V ( B ) ∪ F V ( B ′ ) ∪ { x , y } z \notin \FV(B) \cup \FV(B') \cup \{x, y\} z ∈ / FV ( B ) ∪ FV ( B ′ ) ∪ { x , y } 。引理 B.3(取 E ′ E' E ′ 为空)给出 ⌊ B ⌋ E , x = ⌊ B [ x ↦ z ] ⌋ E , z \db{B}{E, x} = \db{\subst{B}{x}{z}}{E, z} ⌊ B ⌋ E , x = ⌊ 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 ′ ⌋ E , y = ⌊ 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 ] ⌋ E , z = ⌊ B ′ [ y ↦ z ] ⌋ E , z .
由于 B [ x ↦ z ] \subst{B}{x}{z} B [ x ↦ z ] 的大小与 B B B 相同,小于 s s s 的大小,归纳假设给出 B [ x ↦ z ] = α B ′ [ y ↦ z ] \subst{B}{x}{z} \alphaeq \subst{B'}{y}{z} B [ x ↦ z ] = α 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'}, Π ( x : A ) . B = α Π ( z : A ) . B [ x ↦ z ] = α Π ( z : A ′ ) . B ′ [ y ↦ z ] = α Π ( y : A ′ ) . B ′ ,
三步分别依据定义等式(因 z ∉ F V ( B ) z \notin \FV(B) z ∈ / FV ( B ) 而成立)、同余性,以及反向读的定义等式(因 z ∉ F V ( B ′ ) z \notin \FV(B') z ∈ / FV ( B ′ ) 而成立)。λ \lambda λ 的情形相同。
定理 11.1 的证明
定理 11.1(算法 α 等价的正确性). 对所有项 s s s 和 t t t ,按第 11 章定义的意义 s = α t s \alphaeq t s = α t ,当且仅当 ⋅ ; ⋅ ⊢ s = α t \cdot\,;\cdot \vdash s \alphaeq t ⋅ ; ⋅ ⊢ s = α t 可由图 11.1 的规则推导。
若 s = α t s \alphaeq t s = α t ,则由引理 B.4 的第一部分(取 E E E 为空)得 ⌊ s ⌋ ⋅ = ⌊ t ⌋ ⋅ \db{s}{\cdot} = \db{t}{\cdot} ⌊ s ⌋ ⋅ = ⌊ t ⌋ ⋅ ,再由引理 B.1 得 ⋅ ; ⋅ ⊢ s = α t \cdot\,;\cdot \vdash s \alphaeq t ⋅ ; ⋅ ⊢ s = α t 。
反之,若 ⋅ ; ⋅ ⊢ s = α t \cdot\,;\cdot \vdash s \alphaeq t ⋅ ; ⋅ ⊢ s = α t ,则由引理 B.1 得 ⌊ s ⌋ ⋅ = ⌊ t ⌋ ⋅ \db{s}{\cdot} = \db{t}{\cdot} ⌊ s ⌋ ⋅ = ⌊ t ⌋ ⋅ ,再由引理 B.4 的第二部分得 s = α t s \alphaeq t s = α t 。
定理针对整项、以空绑定子列表来陈述,因为内核就是这样调用比较的。引理 B.1 更一般,描述了算法在每次递归调用时计算的东西;阅读 src/substitution.rs 中 alpha 的实现时正需要它:该函数携带的两个约束名向量就是 E 1 E_1 E 1 和 E 2 E_2 E 2 ,而 binder_distance 计算的是 i d x \mathrm{idx} idx 。
要点回顾
α 等价的两种定义计算的是同一件事:de Bruijn(无名)形式的相等。无名形式是连接二者的桥梁。
算法逐条规则地直接匹配无名形式(引理 B.1)。
关于数学定义的关键事实是:给约束变量改名不改变无名形式(引理 B.3);这需要对大小归纳,因为替换本身可能给绑定子改名。
使用 de Bruijn 索引的内核免费获得这条定理:α 等价的项在语法上完全相同。