1 ラムダ項と変数
変数の可算無限集合をVarとする。可算無限性は、有限個の変数を除外しても新しい変数を選ぶことができることを保証する。
定義 1.1. 型なしラムダ項 (untyped lambda term) の集合Λを、次の帰納的な規則で定める。
- x∈Varならばx∈Λである。
- M∈Λかつx∈Varならばλx.M∈Λである。
- M,N∈ΛならばMN∈Λである。
λx.Mを抽象 (abstraction)、MNを適用 (application) という。適用は左結合とし、抽象の本体は可能な限り右まで延びるものとする。したがって、MNPは(MN)Pを、λx.MNはλx.(MN)を表す。
定義 1.2. 項Mの自由変数の集合 (set of free variables)FV(M)と束縛変数の集合 (set of bound variables)BV(M)を、構文に関する再帰によって
FV(x)FV(MN)FV(λx.M)={x},=FV(M)∪FV(N),=FV(M)∖{x},BV(x)BV(MN)BV(λx.M)=∅,=BV(M)∪BV(N),=BV(M)∪{x}と定める。FV(M)=∅である項Mを閉項 (closed term) という。
変数xの出現が、構文木上でその出現を含む最も内側のλxの作用域にあるとき、その出現は束縛出現 (bound occurrence) である。そのようなλxがない出現は自由出現 (free occurrence) である。
例 1.3 (自由出現と束縛出現).
M=λx.((xy)(λy.yz))では、FV(M)={y,z}かつBV(M)={x,y}である。左側のyは自由出現であり、内側の抽象に現れる二つのyは、その抽象によって束縛されている。同じ変数名であっても、出現ごとに自由か束縛されているかを判定する必要がある。
2 アルファ同値と代入
束縛変数の名前は計算内容に影響しない。この事実を形式化するため、まず、ある変数の自由出現を新鮮な変数へ一貫して変更する操作を定める。
定義 2.1. 項Mに現れる全ての変数名の有限集合を
Var(M)=FV(M)∪BV(M)と書く。y∈/Var(M)のとき、Mにおける自由なxの出現をyに変える項ρx→y(M)を構文に関して
ρx→y(x)ρx→y(u)ρx→y(PQ)ρx→y(λx.P)ρx→y(λz.P)=y,=u=ρx→y(P)ρx→y(Q),=λx.P,=λz.ρx→y(P)(u=x),(z=x)によって再帰的に定める。抽象に関する第1式では、内側のλxが、同じ抽象の本体に現れるxを遮蔽する。yの新鮮性により、自由変数の改名 (renaming of a free variable) は変数捕獲を起こさない。
定義 2.2. 関係≡αを、次の改名
λx.M≡αλy.ρx→y(M)(y∈/Var(M)∪{x})を含み、抽象と適用の文脈について閉じた最小の同値関係とする。この関係をアルファ同値 (alpha-equivalence) という。
以下では、特に断らない限り、アルファ同値な項を同一視する。したがって、等号=はアルファ同値類の等号として用いる。
例 2.3 (アルファ変換).λx.xyとλz.zyはアルファ同値である。一方、λx.xyとλy.yyはアルファ同値ではない。後者では、もとの自由なyが抽象によって捕獲されているからである。
定義 2.4. 項Mの自由なxの出現へ項Nを代入 (capture-avoiding substitution) した結果をM[x:=N]と書き、アルファ同値を除いて次の再帰で定める。
x[x:=N]y[x:=N](M1M2)[x:=N](λx.M0)[x:=N](λy.M0)[x:=N]=N,=y=M1[x:=N]M2[x:=N],=λx.M0,=λy.M0[x:=N](y=x),(y=x, y∈/FV(N)).最後に、y=xかつy∈FV(N)の場合には、
z∈/Var(M0)∪Var(N)∪{x,y}を満たす新しい変数zを選び、
(λy.M0)[x:=N]=λz.(ρy→z(M0)[x:=N])と定める。
新しい変数zは、有限集合の外から選ぶため必ず存在する。最後の規則で束縛変数を先に改名することが、Nの自由変数yを捕獲から守る。
命題 2.5. 変数捕獲を避ける代入は、最後の規則で選ぶ新しい変数によらずアルファ同値な結果を与える。また、
M≡αM′,N≡αN′ならば
M[x:=N]≡αM′[x:=N′]である。したがって、代入はアルファ同値類上の演算として定まる。
証明. アルファ同値類上の演算を仮定して証明すると循環するため、最初にアルファ同値で商を取る前の項に対して代入の候補を定める。Sx(A,N)を、上の再帰規則を用いてAへNを代入するときに得られる項の集合とする。改名が必要な抽象では、条件を満たす新しい変数の全てを許す。示すべき最初の主張は、
R,R′∈Sx(A,N)⟹R≡αR′(1)である。
この主張を証明するため、項の大きさに関する強い構造帰納法によって、次の三つの主張を同時に示す。
- Sx(A,N)の任意の二項はアルファ同値である。
- b∈/Var(A)∪{a}かつc∈/Var(A)∪{a,b}のとき、新鮮な変数による改名には
ρb→c(ρa→b(A))=ρa→c(A)(2)
という合成則が成り立つ。また、a=d、b∈/Var(A)∪{a,d}、e∈/Var(A)∪{a,d,b}のとき、
ρa→b(ρd→e(A))=ρd→e(ρa→b(A))
である。
- R∈Sx(A,N)、a=x、a∈/FV(N)とする。さらに
b∈/Var(A)∪Var(N)∪Var(R)∪{a,x}(3)
とする。このとき、あるRb∈Sx(ρa→b(A),N)が存在して
ρa→b(R)≡αRb(4)
となる。すなわち、新鮮な改名と代入はアルファ同値を除いて交換する。
各大きさでは、最初に改名則、次に代入結果の選択独立性、最後に改名と代入の交換を示す。この順序なら、同じ大きさの主張を循環して用いない。改名の合成則と交換則は、変数では定義を直接比較し、適用では二つの部分項へ帰納法の仮定を適用する。抽象λu.A0では、改名する変数がuならば両辺の改名が同じ抽象で遮蔽される。そうでなければ改名は本体へ入り、A0に対する帰納法の仮定から結論を得る。
代入結果の選択独立性を示す。変数の場合には候補が一つしかない。適用A1A2の場合には、二つの部分項に対する帰納法の仮定を用いる。抽象の束縛変数がxならば代入は遮蔽され、候補はもとの抽象だけである。A=λy.A0、y=x、y∈/FV(N)ならば、全ての候補はλy.R0の形であり、本体の候補は帰納法の仮定によってアルファ同値である。
y∈FV(N)のため改名が必要な場合を考える。二つの新しい変数をz,z′とし、対応する本体の候補を
Rz∈Sx(ρy→z(A0),N),Rz′∈Sx(ρy→z′(A0),N)とする。ここで、共通の新しい変数wを
w∈/Var(A0)∪Var(N)∪Var(Rz)∪Var(Rz′)∪{x,y,z,z′}(5)となるように選ぶ。元の項だけでなく、再帰によってすでに得た二つの本体に現れる全変数も避けているため、外側の束縛変数をwへ改名するアルファ変換は正当である。小さい項ρy→z(A0)に対する改名と代入の交換から、ρz→w(Rz)は
Sx(ρz→w(ρy→z(A0)),N)のある要素とアルファ同値である。改名の合成則 (2) により、この集合は
Sx(ρy→w(A0),N)である。z′に対しても同じ結論を得る。この共通の集合の候補は、小さい項に対する選択独立性によってアルファ同値である。従って、
λz.Rz≡αλw.ρz→w(Rz)≡αλw.ρz′→w(Rz′)≡αλz′.Rz′である。変数、適用、遮蔽される抽象、安全な抽象、および改名を必要とする抽象について得た同時帰納法の結論から、
(1) を得た。
改名と代入の交換も同じ場合分けで示す。変数と適用の場合は再帰式から直接従う。抽象の束縛変数がxならば代入は両側で遮蔽される。安全な抽象λy.A0では、y=aならば改名もその抽象で遮蔽され、y=aならば本体に対する帰納法の仮定を用いる。
改名を必要とする抽象ではy∈FV(N)である一方、a∈/FV(N)なのでy=aである。候補を作るときに選ばれた新しい変数をzとする。z=aならば、新鮮性からaはA0,Nに現れず、外側のλaが改名を遮蔽するため、改名前と同じz=aを用いた候補を改名後にも選ぶことができる。z=aならば、条件 (3) によりz=bでもある。改名後にも同じzを選び、より小さい項ρy→z(A0)へ帰納法の仮定を適用する。相異なる変数に対する新鮮な改名の交換則から
ρa→b(ρy→z(A0))=ρy→z(ρa→b(A0))であるため、得られる本体は改名後の抽象に対する代入候補である。変数、適用、および三種類の抽象に対する場合分けにより、(4) も全ての構文の場合について示された。同じ改名則をアルファ同値の生成規則へ適用すると、捕獲を起こさない自由変数の改名もアルファ同値を保つ。改名生成規則では合成則と交換則を用い、文脈閉包と同値関係の規則では同じ規則を保つことから従う。
変数、適用、および三種類の抽象に対して行った同時帰納法から、特にx∈/FV(A)ならば
R∈Sx(A,N)⟹R≡αA(6)も構造帰納法で従う。改名を必要とする抽象でも、改名後の本体へ帰納法の仮定を適用し、最後に外側のアルファ変換を戻せばよい。
ここまでの議論はアルファ同値で商を取る前の項だけを用いており、代入がアルファ同値類上で定まることを仮定していない。そこで、A[x:=N]をSx(A,N)の任意の要素のアルファ同値類として定める。(1) により、この定義は新しい変数の選択によらない。
次に、項Aの代表元によらないことを示す。アルファ同値の改名生成規則
λy.P≡αλz.ρy→z(P),z∈/Var(P)∪{y}(7)を考える。x=yまたはx=zの場合には、一方では代入が外側の抽象で遮蔽され、他方ではxが本体に自由に現れない。(6) により、代入後の両項は (7) の両辺とそれぞれアルファ同値である。
x∈/{y,z}とする。両辺から選んだ代入候補の本体に現れる変数も含めた有限集合を避けて、新しい変数wを選ぶ。左辺では、y∈FV(N)ならば代入時の改名にwを選び、y∈/FV(N)ならば代入後の外側のyをwへ改名する。改名と代入の交換により、どちらの場合にも結果は
λw.Rw,Rw∈Sx(ρy→w(P),N)(8)とアルファ同値である。右辺でも同様に外側のzをwへそろえる。改名の合成則
ρz→w(ρy→z(P))=ρy→w(P)により、右辺からも (8) の形を得る。(1) によって (8) の本体の選択は結果を変えないので、改名生成規則は代入によって保たれる。
アルファ同値の導出を文脈へ広げる段階も確認する。適用の文脈では、変化する部分項へ導出に関する帰納法の仮定を適用する。抽象λu.Qの文脈では、u=xならば代入は両項で遮蔽される。u=xならば、二つの本体、N、および再帰で得た本体の候補に現れる変数を全て避ける共通の新しい変数vを選ぶ。u∈/FV(N)の場合も外側の束縛変数をvへアルファ変換してから比較してよい。自由変数の改名がアルファ同値を保つことから、改名後の二つの本体にも導出に関する帰納法の仮定を適用することができる。従って、両方の代入結果は共通のλvの本体の下でアルファ同値になる。反射性、対称性、推移性については≡αが同値関係であることを用いる。従って、
A≡αA′⟹A[x:=N]≡αA′[x:=N](9)である。
最後に、N≡αN′ならばA[x:=N]≡αA[x:=N′]であることを、Aの構文に関する帰納法で示す。アルファ同値な項は自由変数集合が等しい。従って、抽象の束縛変数が代入項に自由に現れるかどうかの判定はN,N′で一致する。変数と適用の場合は直ちに従い、束縛変数がxである抽象では両代入が遮蔽される。安全な抽象では本体へ帰納法の仮定を適用する。改名が必要な抽象では、
z∈/Var(A0)∪Var(N)∪Var(N′)∪{x,y}となる共通の新しい変数zを選び、ρy→z(A0)に対する帰納法の仮定を用いる。変数、適用、遮蔽される抽象、安全な抽象、および改名を必要とする抽象の各場合を検討した。(9) と代入項の変更に対する結論を推移性で結べば、二つの引数を同時にアルファ同値な代表元へ変えても結果は変わらない。従って、代入はアルファ同値類上の演算として定まる。▨
後の証明では、二つの代入の順序を交換するために次の補題を用いる。
補題 2.6.x=yかつx∈/FV(P)とする。このとき、
M[x:=N][y:=P]=M[y:=P][x:=N[y:=P]]がアルファ同値を除いて成り立つ。
証明.Mの構文に関する帰納法を用いる。M=xの場合には両辺がN[y:=P]になり、M=yの場合には、条件x∈/FV(P)により両辺がPになる。それ以外の変数の場合には両辺はその変数のままである。適用の場合には、二つの部分項へ帰納法の仮定を適用する。
M=λz.M0とする。アルファ同値類上で代入を扱っているので、
z∈/Var(N)∪Var(P)∪{x,y}となるように、外側の束縛変数をあらかじめ改名してよい。このとき、どちらの辺でも代入は抽象の内側へ入り、比較すべき本体は
M0[x:=N][y:=P]とM0[y:=P][x:=N[y:=P]]になる。両者は帰納法の仮定によってアルファ同値である。変数、適用、抽象の三つの構文形について等式を示した。▨
例 2.7 (変数捕獲を避ける代入).
(λy.xy)[x:=y]=λz.yzである。λy.yyとはならない。右辺の自由なyは、代入前の項に挿入された項yに由来し、自由なまま保たれている。
3 ベータ簡約と正規形
定義 3.1. 形(λx.M)Nの部分項をβ基 (beta redex) という。ベータ簡約の一段関係 (one-step beta reduction)→βを、縮約規則
(λx.M)N→βM[x:=N]を含み、全ての項文脈について閉じた最小の関係とする。具体的には、
M→βM′M→βM′N→βN′⟹λx.M→βλx.M′,⟹MN→βM′N,⟹MN→βMN′を満たす。→βの反射推移閉包を↠βと書く。
→βは、項のどの位置にあるβ基も縮約の対象とする関係である。本記事では、左端のβ基や最外側のβ基だけを選ぶ評価戦略を課さない。したがって、以下で合流性を主張する対象は、特定の順序で選ばれた簡約列ではなく、→βによる全ての簡約列である。
例 3.3 (ベータ簡約).
(λx.x)(λy.y)→βλy.yであり、右辺は正規形である。また、
(λx.λz.x)z→βλw.zである。引数の自由変数zが本体の束縛変数と同じ名前であるため、その束縛変数をwへ先に改名する。したがって、引数の自由変数は捕獲されない。
4 平行簡約
一段のベータ簡約はβ基を一つだけ縮約する。合流性の証明では、互いに離れた複数のβ基を同時に縮約する関係を用いる。
定義 4.1. 平行簡約 (parallel reduction)M⇒βNを、次の四つの規則で帰納的に定める。
x⇒βxλx.M⇒βλx.M′M⇒βM′MN⇒βM′N′M⇒βM′N⇒βN′(λx.M)N⇒βM′[x:=N′]M⇒βM′N⇒βN′.第3の規則は適用の内部だけを平行に簡約し、第4の規則は内部を平行に簡約すると同時に、根にあるβ基も縮約する。
補題 4.2. 全ての項MについてM⇒βMである。
証明.Mの構文に関する帰納法を用いる。変数の場合には第1規則を用いる。抽象の場合には帰納法の仮定と第2規則を用い、適用の場合には二つの部分項に対する帰納法の仮定と第3規則を用いる。▨
平行簡約の導出に現れる束縛変数を変更する前に、生の項に対する自由変数の改名と代入の関係を確認する。以下では、改名と代入の恒等式、平行簡約による改名の保存、束縛変数の同時改名、平行簡約の代入補題の順に証明する。後の結果を前の結果の証明には用いないため、この依存順序に循環はない。
補題 4.3.a,b,x∈Var、a=bとし、
b∈/Var(A)∪Var(B)∪{a,x}とする。このとき、アルファ同値を除いて
ρa→b(A[x:=B])≡α{A[x:=ρa→b(B)]ρa→b(A)[x:=ρa→b(B)](a=x),(a=x)(10)が成り立つ。また、b∈/Var(A)∪{x}ならば
A[x:=B]≡αρx→b(A)[b:=B](11)が成り立つ。
証明. 代入の再帰で新たに選ぶ束縛変数については、bも避けた代表元を用いる。各再帰で避ける集合は有限であり、そのような代表元を選ぶことができる。代入の適切性と、同じ証明ですでに示した自由変数の改名によるアルファ同値の保存により、この代表元の選択は結論に影響しない。
最初に (10) をAの構文に関する帰納法で示す。A=xの場合には、a=xでもa=xでも両辺はρa→b(B)である。A=a=xの場合には両辺はbであり、それ以外の変数の場合には改名と代入の定義を直接比較すれば両辺が一致する。適用の場合には、二つの部分項に帰納法の仮定を適用する。
A=λu.A0の場合には、
u∈/Var(B)∪{a,b,x}となるアルファ同値な代表元を最初に選ぶ。この選択では、代入と改名がともに抽象の本体へ入る。A0に対する帰納法の仮定へ抽象の文脈を加えると (10) を得る。もとの束縛変数がaまたはxである場合も、外側の束縛変数を先に新鮮なuへ変更した同じ比較に含まれる。
(11) もAの構文に関する帰納法で示す。A=xでは両辺がBになり、A=xである変数では両辺がその変数になる。適用では二つの帰納法の仮定を用いる。抽象では、束縛変数をVar(B)∪{b,x}の外へ先に変更すると、両辺の代入が本体へ入り、本体に対する帰納法の仮定から結論を得る。したがって、二つの恒等式はアルファ同値で商を取る前の代表元の選択に依存せず成り立つ。▨
補題 4.4.Dを、生の項の代表元によるM⇒βNの有限導出とする。a=bであり、bがDに現れる全ての項のVarとaのいずれにも属さないならば、
ρa→b(M)⇒βρa→b(N)である。
証明.Dの最後の規則に関する帰納法を用いる。
変数規則の結論がu⇒βuであるとする。u=aならば改名後の結論はb⇒βbであり、u=aならばu⇒βuのままである。いずれも変数規則から従う。
抽象規則の結論を
λu.P⇒βλu.P′とする。u=aならば、改名は両方の抽象の本体へ入らないため、もとの前提P⇒βP′へ抽象規則を適用すればよい。u=aならば、bの新鮮性からu=bでもある。前提の導出に対する帰納法の仮定
ρa→b(P)⇒βρa→b(P′)へ抽象規則を適用すると、改名後の結論を得る。
第3規則の結論をPQ⇒βP′Q′とする。二つの前提の導出へ帰納法の仮定を適用し、得られた二つの平行簡約へ第3規則を適用すればよい。
第4規則の結論を
(λu.P)Q⇒βP′[u:=Q′]とする。ただし、P⇒βP′かつQ⇒βQ′である。u=aの場合には、もとの第1前提と、第2前提に対する帰納法の仮定を第4規則へ入れて
(λa.P)ρa→b(Q)⇒βP′[a:=ρa→b(Q′)]を得る。(10) の第1の場合により、右辺はρa→b(P′[a:=Q′])とアルファ同値である。
u=aの場合には、u=bであり、二つの前提に対する帰納法の仮定から
(λu.ρa→b(P))ρa→b(Q)⇒βρa→b(P′)[u:=ρa→b(Q′)]を得る。(10) の第2の場合により、右辺はρa→b(P′[u:=Q′])とアルファ同値である。平行簡約はアルファ同値な代表元を同一視して定義されているため、u=aとu=aの場合で得た関係はいずれも求める結論になる。変数規則、抽象規則、適用規則、β基規則の四規則を確認した。▨
系 4.5.P⇒βP′とし、zをこの導出に現れる全ての変数とxの外から選ぶ。このとき、抽象規則の導出を
λz.ρx→z(P)⇒βλz.ρx→z(P′)(12)というアルファ同値な代表元の導出へ変更することができる。
さらにQ⇒βQ′とし、zを二つの前提の導出に現れる全ての変数とxの外から選べば、第4規則の導出を
(λz.ρx→z(P))Q⇒βρx→z(P′)[z:=Q′](13)へ変更することができる。この結論の右辺は
ρx→z(P′)[z:=Q′]≡αP′[x:=Q′](14)を満たす。
証明. 改名保存補題をP⇒βP′と自由変数の改名ρx→zへ適用し、得られた平行簡約へ抽象規則を適用すると (12) を得る。同じ改名保存補題とQ⇒βQ′を第4規則へ適用すると (13) を得る。(14) は補題 4.3の (11) である。したがって、抽象規則でも第4規則でも、束縛変数を導出の両辺で同時に新鮮な名前へ変更することができる。▨
平行簡約の第4規則では、簡約後の本体への代入が現れる。次の補題が、平行簡約と代入の整合性を与える。
補題 4.6.M⇒βM′かつN⇒βN′ならば、
M[x:=N]⇒βM′[x:=N′]である。
証明.M⇒βM′の導出に関する帰納法を用いる。
変数の場合を考える。M=xならば、示すべき関係は仮定N⇒βN′そのものである。M=y=xならば、両辺はyであり、平行簡約の第1規則を用いる。
抽象の規則から導かれた場合を考える。系 4.5により、抽象の束縛変数yを導出の両辺で同時に
y∈/Var(N)∪Var(N′)∪{x}となるように変更することができる。改名後の二つの本体もM0,M0′と書く。本体に対する帰納法の仮定と抽象の規則から、
λy.M0[x:=N]⇒βλy.M0′[x:=N′]を得る。この平行簡約が求める関係である。
適用の第3規則から導かれた場合には、二つの前提へ帰納法の仮定を適用し、得られた二つの平行簡約へ第3規則を適用する。
最後に、第4規則から
(λy.P)Q⇒βP′[y:=Q′]が導かれている場合を考える。ただし、P⇒βP′かつQ⇒βQ′である。系 4.5により、束縛変数yを導出の両辺で同時に変更し、yがxと異なり、N,N′,P,P′,Q,Q′に現れる必要な有限個の変数を避けるようにする。改名後の本体もP,P′と書く。この変更後の二つの前提へ帰納法の仮定を適用すると、
P[x:=N]⇒βP′[x:=N′],Q[x:=N]⇒βQ′[x:=N′]である。したがって、第4規則から
((λy.P)Q)[x:=N]=(λy.P[x:=N])Q[x:=N]⇒βP′[x:=N′][y:=Q′[x:=N′]]を得る。y∈/FV(N′)であるから、代入の合成補題により最後の項は
(P′[y:=Q′])[x:=N′]とアルファ同値である。表示したアルファ同値の右辺は、簡約後の項へ[x:=N′]を施した結果である。変数、抽象、適用、およびβ基の導出規則を検討した。▨
5 完全展開とダイヤモンド性
項Mの完全展開M⋆は、Mにすでに現れる全てのβ基を一度に縮約した結果である。β基の縮約によって新しく生じるβ基は、同じ完全展開ではさらに縮約しない。
定義 5.1. 生の項Mの完全展開 (complete development)M⋆を、各代入で任意の代表元を選び、アルファ同値を除いて次の再帰で定める。
x⋆(λx.M)⋆((λx.M)N)⋆(MN)⋆=x,=λx.M⋆,=M⋆[x:=N⋆],=M⋆N⋆ただし、M は抽象ではない。
完全展開をアルファ同値類上の演算として用いるためには、代入だけでなく、完全展開の再帰そのものが代表元の変更を保存することを示す必要がある。次の二つの結果を、平行簡約の完全展開補題より先に証明する。最初に完全展開と自由変数の改名との整合性を示し、その結果を用いて完全展開がアルファ同値の生成規則を保存することを示す。この段階では、後に置く完全展開補題もダイヤモンド性も用いない。
補題 5.2.a=bかつb∈/Var(M)∪{a}ならば、
(ρa→b(M))⋆≡αρa→b(M⋆)(15)である。
証明. 完全展開の途中の代入で新たに選ぶ束縛変数は、固定したbも避けるものとする。そのような選択は常に可能であり、代入の適切性により選択を変えてもアルファ同値類は変わらない。完全展開の再帰は、もとの項にない自由変数を導入しない。さらに新たな束縛変数にもbを用いないので、選んだM⋆の代表元にはbが現れない。したがって、以下の右辺に現れるρa→b(M⋆)は、この代表元に対して定義されている。
Mの構文に関する帰納法を用いる。変数の場合には、M=aかどうかで分けて定義を直接比較する。抽象M=λu.Pでは、u=aならば改名は本体へ入らず、両辺はλa.P⋆である。u=aならばu=bでもあり、本体に対する帰納法の仮定へ抽象の文脈を加える。
M=PQであり、Pが抽象でない場合には、ρa→b(P)も抽象ではない。二つの部分項に対する帰納法の仮定へ、完全展開の第4式を適用すると (15) を得る。
M=(λu.P)Qとする。u=aの場合には、
(ρa→b(M))⋆=((λa.P)ρa→b(Q))⋆=P⋆[a:=(ρa→b(Q))⋆]≡αP⋆[a:=ρa→b(Q⋆)].最後の関係はQに対する帰納法の仮定と代入の適切性から従う。一方、補題 4.3の (10) の第1の場合により、
ρa→b(M⋆)=ρa→b(P⋆[a:=Q⋆])≡αP⋆[a:=ρa→b(Q⋆)]である。
u=aの場合にはu=bである。二つの帰納法の仮定と代入の適切性により、
(ρa→b(M))⋆≡αρa→b(P⋆)[u:=ρa→b(Q⋆)].補題 4.3の (10) の第2の場合により、右辺は
ρa→b(P⋆[u:=Q⋆])=ρa→b(M⋆)とアルファ同値である。変数、抽象、抽象でない作用子をもつ適用、β基を作用子にもつ適用の各構文形を確認した。▨
命題 5.3.M≡αNならば、
M⋆≡αN⋆(16)である。したがって、完全展開はアルファ同値類上の演算として定まる。
証明. アルファ同値の生成導出に関する帰納法を用いる。定義から、生成導出は、抽象の束縛変数を新鮮な変数へ変更する生成規則を項文脈内で一回用いる段階と、反射性、対称性、および推移性の段階からなる。反射性、対称性、および推移性の段階には、帰納法の仮定と≡αの同じ性質を適用する。
一回の改名生成規則を項文脈内で用いる段階を、その改名位置から構文木の根までの文脈の構造に関する帰納法で確認する。生成規則で選ぶ新鮮な変数をyとする。完全展開の途中の代入で新たに選ぶ束縛変数にもyを用いない代表元を選ぶ。この選択は有限集合の外から行うことができ、代入の適切性により結論に影響しない。完全展開は入力にない自由変数を導入しないので、この選択の下ではy∈/Var(P⋆)でもある。改名位置が根である場合には、
λx.P≡αλy.ρx→y(P),y∈/Var(P)∪{x}(17)という二項を比較する。完全展開と新鮮な自由変数改名に関する補題から、
(λy.ρx→y(P))⋆=λy.(ρx→y(P))⋆≡αλy.ρx→y(P⋆)≡αλx.P⋆=(λx.P)⋆を得る。
改名位置が抽象の本体内にある場合には、文脈に関する帰納法の仮定へ抽象の文脈を加える。改名位置が適用の引数内にある場合をRQ0とRQ1の比較として書く。Rが抽象でなければ、二つの完全展開はR⋆Q0⋆とR⋆Q1⋆であり、引数に対する帰納法の仮定を用いる。R=λu.Sならば、二つの完全展開は
S⋆[u:=Q0⋆],S⋆[u:=Q1⋆]であり、引数に対する帰納法の仮定と代入の適切性からアルファ同値である。
最後に、改名位置が適用の作用素内にある場合を確認する。作用素の外形が抽象でなければ、完全展開の第4式と作用素に対する帰納法の仮定を用いる。作用素が共通の束縛変数をもつλu.S0とλu.S1であり、改名位置が二つの本体内にあるならば、比較する完全展開は
S0⋆[u:=Q⋆],S1⋆[u:=Q⋆]である。本体に対する帰納法の仮定と代入の適切性から両者はアルファ同値である。
作用素そのものが (17) の二つの抽象である場合には、比較する完全展開は
P⋆[x:=Q⋆],(ρx→y(P))⋆[y:=Q⋆]である。第2項は、完全展開と改名に関する補題により
ρx→y(P⋆)[y:=Q⋆]とアルファ同値であり、補題 4.3の (11) により第1項とアルファ同値である。一穴項文脈の空、抽象の本体、適用の引数、および適用の作用素の四構成法を用いた場合分けにより、任意の項文脈内の一回の改名生成規則が完全展開によって保存される。空文脈、抽象の本体、適用の引数、および適用の作用素は一穴項文脈の全ての構成法であるため、場合分けは尽くされている。生成導出に関する帰納法に戻ると (16) を得る。▨
補題 5.4 (完全展開補題).M⇒βNならば、
N⇒βM⋆である。
証明.M⇒βNの導出に関する帰納法を用いる。
変数の規則の場合にはM=N=x=x⋆であり、平行簡約の反射性を用いる。抽象の規則の場合には、前提に対する帰納法の仮定へ抽象の規則を適用する。
適用の第3規則から
PQ⇒βP′Q′が導かれているとする。ただし、P⇒βP′かつQ⇒βQ′である。
Pが抽象でない場合には、
(PQ)⋆=P⋆Q⋆である。帰納法の仮定P′⇒βP⋆とQ′⇒βQ⋆へ第3規則を適用すれば、
P′Q′⇒βP⋆Q⋆を得る。
P=λx.Rの場合には、平行簡約の規則から、あるR′が存在してP′=λx.R′かつR⇒βR′である。帰納法の仮定により
R′⇒βR⋆,Q′⇒βQ⋆である。第4規則を用いると、
P′Q′=(λx.R′)Q′⇒βR⋆[x:=Q⋆]=(PQ)⋆を得る。
最後に、第4規則から
(λx.P)Q⇒βP′[x:=Q′]が導かれているとする。ただし、P⇒βP′かつQ⇒βQ′である。帰納法の仮定は
P′⇒βP⋆,Q′⇒βQ⋆を与える。平行簡約の代入補題により、
P′[x:=Q′]⇒βP⋆[x:=Q⋆]=((λx.P)Q)⋆である。変数規則、抽象規則、適用の第3規則、β基の第4規則を検討した。▨
定理 5.5.M⇒βN1かつM⇒βN2ならば、ある項Pが存在して
N1⇒βP,N2⇒βPとなる。
証明. 完全展開補題により、
N1⇒βM⋆,N2⇒βM⋆である。したがって、P=M⋆とすればよい。▨
6 Church–Rosser の定理
平行簡約は証明のために導入した関係である。まず、平行簡約の反射推移閉包が通常のベータ簡約の反射推移閉包と一致することを示す。
補題 6.1. 次の二つが成り立つ。
- M→βNならばM⇒βNである。
- M⇒βNならばM↠βNである。
したがって、→βと⇒βの反射推移閉包は一致する。
証明.(1)を、一段のベータ簡約の導出に関する帰納法で示す。根のβ基
(λx.P)Q→βP[x:=Q]については、平行簡約の反射性をPとQに適用した後、第4規則を用いる。抽象または適用の文脈内で起こる簡約については、帰納法の仮定へ平行簡約の第2規則または第3規則を適用する。
(2)を、平行簡約の導出に関する帰納法で示す。変数の場合には反射性を用いる。抽象の場合には、帰納法の仮定で得た有限簡約列の各段を抽象の内側で行う。第3規則の場合には、まず左の部分項を有限回簡約し、次に右の部分項を有限回簡約する。
第4規則の場合には、前提がP⇒βP′とQ⇒βQ′であり、結論が
(λx.P)Q⇒βP′[x:=Q′]である。帰納法の仮定を抽象と適用の文脈内で用いることにより、
(λx.P)Q↠β(λx.P′)Q′→βP′[x:=Q′]を得る。
根のβ基、抽象の文脈、適用の文脈における一段ベータ簡約を平行簡約で模倣したので、→β⊆⇒β⊆↠βである。三関係の反射推移閉包を取れば、一致する。▨
ダイヤモンド性を反射推移閉包へ移すため、一般の二項関係に関する補題を用いる。
補題 6.2. 集合上の関係Rがダイヤモンド性をもつとする。すなわち、
aRb,aRcならば、あるdが存在してbRdかつcRdとなるとする。このとき、反射推移閉包R∗は合流的である。すなわち、
aR∗b,aR∗cならば、あるdが存在してbR∗dかつcR∗dとなる。
証明. 最初に、aRbかつaR∗cならば、あるdが存在して
bR∗d,cRdとなることを、aからcまでの列の長さに関する帰納法で示す。
列の長さが0ならばc=aである。d=bとすれば、bR∗bかつcRbである。列の長さが正の場合には、
aRc1,c1R∗cと書く。ダイヤモンド性をaRbとaRc1に適用して、
bRe,c1Reとなるeを得る。帰納法の仮定をc1Reとc1R∗cに適用すると、
eR∗d,cRdとなるdが存在する。したがって、bReR∗dかつcRdである。
次に、aR∗bの列の長さに関する帰納法で合流性を示す。長さが0ならばb=aなので、d=cとすればよい。長さが正の場合には、
aRa1,a1R∗bと書く。前段の結果をaRa1とaR∗cに適用すると、あるeが存在して
a1R∗e,cReとなる。帰納法の仮定をa1R∗bとa1R∗eに適用すると、あるdが存在して
bR∗d,eR∗dとなる。ゆえに、bR∗dかつcReR∗dである。▨
定義 6.3. 関係→β∪←βの反射推移閉包をベータ変換 (beta conversion) といい、=βと書く。すなわち、各一段が順向きまたは逆向きのベータ簡約である有限列によって結ばれる二項はベータ変換で等しい。
証明方針は、ベータ簡約を直接比較する代わりに、すでにダイヤモンド性を証明した平行簡約を出発点とすることである。ダイヤモンド性を反射推移閉包の合流性へ移し、平行簡約とベータ簡約の反射推移閉包が一致することを用いてベータ簡約の合流性を得る。最後に、逆向きの一段を含む変換列の長さに関する帰納法によって、ベータ変換された二項が共通簡約先をもつことを示す。
定理 6.4 (Church–Rosser の定理). ベータ簡約は合流的である。すなわち、
M↠βN1,M↠βN2ならば、ある項Pが存在して
N1↠βP,N2↠βPとなる。
さらに、M=βNならば、ある項Pが存在して
M↠βP,N↠βPとなる。
証明. 平行簡約はダイヤモンド性をもつので、ダイヤモンド関係の閉包に関する補題により、平行簡約の反射推移閉包は合流的である。ベータ簡約と平行簡約の比較補題により、この閉包は↠βと一致する。したがって、第1の主張が従う。
第2の主張を示す。M=βNを与える有限の変換列
M=A0,A1,…,Ak=Nを取り、各隣接項の間ではAi→βAi+1またはAi+1→βAiが成り立つとする。iに関する帰納法で、MとAiが共通の簡約先Piをもつことを示す。i=0ではP0=Mとすればよい。
M↠βPiかつAi↠βPiが得られているとする。Ai+1→βAiの場合には、
Ai+1→βAi↠βPiなので、Pi+1=Piとすればよい。Ai→βAi+1の場合には、合流性を
Ai↠βPi,Ai→βAi+1へ適用する。すると、あるPi+1が存在して
Pi↠βPi+1,Ai+1↠βPi+1となる。さらにM↠βPi↠βPi+1である。i=kとすれば、MとNの共通簡約先を得る。▨
7 正規形の一意性と停止しない簡約
証明. Church–Rosser の定理により、あるPが存在して
N1↠βP,N2↠βPとなる。正規形から始まる一段のベータ簡約は存在しないので、正規形から始まる有限簡約列は長さ0に限られる。したがって、N1=P=N2がアルファ同値類上で成り立つ。▨
この系は、全ての項が正規形をもつとは述べていない。また、正規形をもつ項について、どの簡約列も正規形へ到達するとは述べていない。この二つの相違は、次の項に現れる。
命題 7.2.
Δ=λx.xx,Ω=ΔΔとおく。このとき、
Ω→βΩ→βΩ→β⋯という無限のベータ簡約列が存在し、Ωは正規形をもたない。
さらに、相異なる変数x,yを取り、Ky=λx.yとおくと、
KyΩ=(λx.y)Ωは弱正規化可能であるが、強正規化可能ではない。
証明.Ωの根にあるβ基を縮約すると、
(λx.xx)Δ→β(xx)[x:=Δ]=ΔΔ=Ωとなる。したがって、この一段を繰り返す無限簡約列が存在する。
Δの本体xxはβ基を含まないので、Ωにあるβ基は根のβ基だけである。ゆえに、Ωから一段簡約した項は再びΩである。有限回の簡約を行ってもΩのままであり、β基は消えない。したがって、Ωは正規形へ簡約されない。
一方、
(λx.y)Ω→βyであり、yは正規形なので、KyΩは弱正規化可能である。しかし、引数の内部にあるΩだけを縮約すれば、
(λx.y)Ω→β(λx.y)Ω→β⋯という無限簡約列を得る。したがって、KyΩは強正規化可能ではない。▨
Church–Rosser の定理は、異なる有限簡約列の先を再び合流させる定理である。停止性は別の性質であり、合流性だけからは従わない。Ωは、その区別を最小の構文で示す。
8 演習
問題 8.1.
- 項
(λx.λy.xy)y
を、変数捕獲を避けて一段ベータ簡約せよ。束縛変数の改名が必要な理由も説明せよ。
- 平行簡約の代入補題の第4規則の場合に、条件y∈/FV(N′)を確保しないと、代入の合成補題を適用することができない理由を式で示せ。
- 完全展開補題の証明で、適用の第3規則を用いた導出を、作用素が抽象である場合と抽象でない場合に分ける必要がある理由を説明せよ。
- Mが二つのベータ正規形N1,N2へ簡約されると仮定し、Church–Rosser の定理からN1≡αN2を導け。正規形という仮定を使う箇所を明示せよ。
解答 (演習の要点).
- z=yを新しい変数として、
(λx.λy.xy)y→βλz.yz
となる。束縛変数を改名せずに代入すると、引数に由来する自由なyが内側のλyに捕獲される。
- 比較する二項は
P′[x:=N′][y:=Q′[x:=N′]]と(P′[y:=Q′])[x:=N′]
である。代入の合成補題で最初に代入する変数をy、次に代入する変数をxと読むと、y∈/FV(N′)が必要になる。束縛変数yをあらかじめ新鮮に取ることで、この条件を満たす。
- 作用素が抽象でなければ(PQ)⋆=P⋆Q⋆であり、第3規則で十分である。作用素がλx.Rならば(PQ)⋆=R⋆[x:=Q⋆]なので、根のβ基も縮約する第4規則を用いなければならない。
- 合流性により、N1↠βPかつN2↠βPとなるPが存在する。正規形からは一段も簡約することができないため、両方の簡約列は長さ0であり、N1=P=N2となる。
▨