h5i

付録 B

α 同値アルゴリズムの正しさ

第 11 章では α 同値に二つの定義を与えた。数学的な定義(束縛変数の改名を許す最小の合同関係)と、アルゴリズム的な定義(図 11.1 の規則。二つの項を足並みを揃えてたどり、束縛変数を位置で比較する)である。定理 11.1 は両者が一致すると述べており、本付録ではそれを証明する。

考え方

結局のところ、二つの定義は同じことを言っており、それは二つの項が同じ de Bruijn 表現を持つ、すなわち、各束縛変数をその束縛子までの距離に置き換えたときに同じ形になる、ということである。そこで証明は、項の第三の表現である名前なし表現を経由する。

  • 補題 B.1 は、アルゴリズムが名前なし形を比較していることを示す。図 11.1 の規則は de Bruijn インデックスとまったく同じように位置を比較するので、これはほぼ自明である。
  • 補題 B.2 と B.3 は、改名のもとで名前なし形がどう振る舞うかについて、二つの事実を確立し、鍵となるのは、束縛変数を改名しても名前なし形は変わらないという事実である。
  • 補題 B.4 は、これら二つの事実を使って、数学的な定義もまた名前なし形を比較していることを示す。
  • 定理 11.1 は、名前なし形を介して二つの補題をつなげば従う。

証明は項に関する帰納法だが、一つ微妙な点があり、代入は束縛子を改名することがあるので、いくつかの帰納法は項の構造ではなくサイズに関して行わなければならない。

名前なし項

名前なし項は項と同じように組み立てるが、束縛子は名前を持たず、束縛変数は数 #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 は「最も内側を 00 として数えて ii 番目の外側の束縛子に束縛された変数」を意味する。第 11 章で見たように、名前のリスト EE について、idx(E,x)\mathrm{idx}(E, x) は EE における xx の最後の出現の位置を右端から 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 のとき、名前なしの変数(数または名前)は Π\Pi、λ\lambda、適用、宇宙と決して等しくならないので、名前なし形が等しくなるのは tt が変数 yy のときに限る。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' なので、LxL_x における xx の最後の出現と LyL_y における yy の最後の出現はどちらもその異なる要素であり、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 は異なる二つの要素のどちらでもないので、vv の位置は LxL_x と LyL_y で同じであるか、両方で未定義である。

宇宙と適用は、定義と帰納法の仮定から直ちに従う。

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) は、y∉FV(B)y \notin \FV(B) より yy とは異なるので、その位置は両方のリストで同じか、両方で未定義である。

ケース 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}} である。E′E' を ww で拡張して(ww は xx でも yy でもないので許される)DD に帰納法の仮定を適用すると、⌊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},

であり、本体は E′E' を空とした補題 B.3 により等しい。y=xy = x の場合は二つの項が同一なので自明であり、λ\lambda についても同じである。=α\alphaeq はこの等式を含む最小の合同関係であり、∼\sim はこの等式を含む合同関係なので、s=αts \alphaeq t ならば s∼ts \sim t である。

後半. ⌊s⌋E=⌊t⌋E\db{s}{E} = \db{t}{E} を仮定し、ss のサイズに関する帰納法により、すべての tt と EE について示す。

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\} を選ぶと、E′E' を空とした補題 B.3 から ⌊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 インデックスを使うカーネルは、α 同値な項が構文的に同一なので、この定理をただで手に入れる。