§E15.9ラムダ計算と Turing 機械の同値性

最終更新

型なしラムダ計算と Turing 機械では、構文も一段の計算規則も異なる。本記事では、自然数上の部分関数を計算する能力が一致することを、両方向の変換によって証明する。ラムダ計算側では閉項に対する弱い値呼び評価を固定する。Turing 機械からラムダ計算への向きでは、二つの構成を与える。第1の構成は、部分 Turing 計算可能関数を部分ミュー再帰関数へ変換し、各関数形成規則を値呼びラムダ項で実現する。第2の構成は、Turing 機械の配置をラムダ項へ符号化し、遷移関数を一つの項として表し、固定点結合子によって停止まで反復する。逆向きでは、名前付き項を de Bruijn 指標つきの項へ翻訳し、その符号の一段評価を Turing 機械で実行する。全ての構成について、定義域上の出力だけでなく、定義域外で計算が停止しないことも保存する。

1 弱い値呼び評価

ラムダ項、変数捕獲を避ける代入、およびβ\beta簡約には§E15.8 定義 1.1、§E15.8 定義 2.4、§E15.8 定義 3.1の定義を用いる。

定義 1.1. 値 (value) と評価文脈 (evaluation context) を

V::=λx.M,E::=[ ]∣E M∣V EV::=\lambda x.M,\qquad E::=[\,]\mid E\,M\mid V\,E

によって定める。弱い値呼び評価の一段関係⟶v\longrightarrow_vは

E[(λx.M)V]⟶vE[M[x:=V]]E[(\lambda x.M)V]\longrightarrow_v E[M[x:=V]]

だけからなる。抽象の本体では簡約しない。

有限回の評価で値VVに達することをM⟶v∗VM\longrightarrow_v^*Vと書く。全ての段階で次の一段が存在し、有限段で値に達しないことをM⟶v∞M\longrightarrow_v^\inftyと書く。

評価文脈の文法は、作用子を先に評価し、作用子が値になった後に引数を評価する順序を定める。

補題 1.2. 閉項MMは、値であるか、一意な閉項NNへM⟶vNM\longrightarrow_vNと一段評価されるかのいずれか一方を満たす。

証明.MMの構造に関する帰納法を用いる。閉じた変数項は存在しない。抽象は値である。M=P QM=P\,Qとする。適用が閉項ならばPPとQQも閉項である。PPが値でなければ、帰納法の仮定によりPPの次の一段が一意に定まり、評価文脈[ ]Q[\,]Qが全体の一段を一意に定める。PPが値でQQが値でなければ、QQの次の一段と評価文脈P[ ]P[\,]が全体の一段を一意に定める。PPとQQがともに値ならば、P=λx.RP=\lambda x.Rであるから、根のβ基(λx.R)Q(\lambda x.R)Qが一意な一段を与える。三つの場合は互いに排他的である。代入後の項が閉じていることは、閉項QQを閉項(λx.R)Q(\lambda x.R)Qの束縛変数へ代入することから従う。▨

したがって、閉項の評価は停止して値を返すか、無限に評価を続けるかのいずれかであり、停止しない閉項が途中で行き詰まることはない。

2 値呼び Church 符号

弱い評価は抽象の本体を簡約しないため、通常の Church 数とβ\beta同値であるだけでは、停止時に同じ構文の数値を得ることができるとは限らない。本記事では、弱い評価に適した正準代表を再帰的に固定する。

定義 2.1.n∈Nn\in\mathbb Nに対する値呼び Church 数 (call-by-value Church numeral)cn\mathbf c_nを

c0=λf.λx.x,cn+1=λf.λx.f(cn f x)\mathbf c_0=\lambda f.\lambda x.x,\qquad \mathbf c_{n+1}=\lambda f.\lambda x.f(\mathbf c_n\,f\,x)

によって定める。

各cn\mathbf c_nは閉じた抽象であり、通常のλf.λx.fnx\lambda f.\lambda x.f^nxとβ\beta同値である。以後、次の閉じた値を用いる。

定義 2.2 (値呼び基本符号). 以下の閉じた値の族を 値呼び基本符号 (call-by-value basic encoding) という。

I=λz.z,T=λt.λe.t,F=λt.λe.e,If=λb.λu.λv.b u v I,Succ=λn.λf.λx.f(n f x),IsZero=λn.n(λz.F)T,Pair=λa.λb.λp.p a b,Fst=λp.p(λa.λb.a),Snd=λp.p(λa.λb.b).\begin{aligned} \mathsf I&=\lambda z.z,\\ \mathsf T&=\lambda t.\lambda e.t,& \mathsf F&=\lambda t.\lambda e.e,\\ \mathsf{If}&=\lambda b.\lambda u.\lambda v.b\,u\,v\,\mathsf I,\\ \mathsf{Succ}&=\lambda n.\lambda f.\lambda x.f(n\,f\,x),\\ \mathsf{IsZero}&=\lambda n.n(\lambda z.\mathsf F)\mathsf T,\\ \mathsf{Pair}&=\lambda a.\lambda b.\lambda p.p\,a\,b,\\ \mathsf{Fst}&=\lambda p.p(\lambda a.\lambda b.a),& \mathsf{Snd}&=\lambda p.p(\lambda a.\lambda b.b). \end{aligned}

値A,BA,Bに対して

⟨A,B⟩v=λp.p A B\langle A,B\rangle_v=\lambda p.p\,A\,B

と書く。If\mathsf{If}の第2引数と第3引数には、分枝の本体A,BA,Bをそれぞれλd.A,λd.B\lambda d.A,\lambda d.Bとして渡す。変数ddは本体に自由に現れないものとする。

分枝を抽象で包む理由は、選ばれなかった分枝を値呼び評価が先に計算することを防ぐためである。

補題 2.3. 全てのn∈Nn\in\mathbb Nと閉じた値A,BA,Bについて、次の評価則が成り立つ。

Succ cn⟶v∗cn+1,IsZero c0⟶v∗T,IsZero cn+1⟶v∗F,Fst⟨A,B⟩v⟶v∗A,Snd⟨A,B⟩v⟶v∗B,If T (λd.A) (λd.B)⟶v∗A,If F (λd.A) (λd.B)⟶v∗B.\begin{aligned} \mathsf{Succ}\,\mathbf c_n&\longrightarrow_v^*\mathbf c_{n+1},\\ \mathsf{IsZero}\,\mathbf c_0&\longrightarrow_v^*\mathsf T,& \mathsf{IsZero}\,\mathbf c_{n+1}&\longrightarrow_v^*\mathsf F,\\ \mathsf{Fst}\langle A,B\rangle_v&\longrightarrow_v^*A,& \mathsf{Snd}\langle A,B\rangle_v&\longrightarrow_v^*B,\\ \mathsf{If}\,\mathsf T\,(\lambda d.A)\,(\lambda d.B)&\longrightarrow_v^*A,& \mathsf{If}\,\mathsf F\,(\lambda d.A)\,(\lambda d.B)&\longrightarrow_v^*B. \end{aligned}

さらに、閉じた値S,W0,…,WnS,W_0,\ldots,W_nがS Wj⟶v∗Wj+1S\,W_j\longrightarrow_v^*W_{j+1}を0≤j<n0\le j<nについて満たすならば、

cn S W0⟶v∗Wn\mathbf c_n\,S\,W_0\longrightarrow_v^*W_n

である。

証明.Succ cn\mathsf{Succ}\,\mathbf c_nの根を一段評価するとλf.λx.f(cn f x)=cn+1\lambda f.\lambda x.f(\mathbf c_n\,f\,x)=\mathbf c_{n+1}を得る。射影の二式は、対を選択子へ適用して得られる。条件分岐では、真偽値が二つの分枝の一方を選んだ後、選ばれた抽象をI\mathsf Iへ適用する。選ばれなかった抽象の本体は評価されない。

反復則をnnに関する帰納法で示す。n=0n=0ではc0 S W0⟶v∗W0\mathbf c_0\,S\,W_0\longrightarrow_v^*W_0である。nnの場合に成立すると仮定する。定義を二回展開すると

cn+1 S W0⟶v∗S(cn S W0)⟶v∗S Wn⟶v∗Wn+1\mathbf c_{n+1}\,S\,W_0 \longrightarrow_v^*S(\mathbf c_n\,S\,W_0) \longrightarrow_v^*S\,W_n \longrightarrow_v^*W_{n+1}

となる。中央の評価では値呼び規則が引数cn S W0\mathbf c_n\,S\,W_0を先に値WnW_nまで評価する。帰納法により反復則を得る。

IsZero c0\mathsf{IsZero}\,\mathbf c_0はc0(λz.F)T\mathbf c_0(\lambda z.\mathsf F)\mathsf Tへ進み、T\mathsf Tを返す。cn+1\mathbf c_{n+1}の場合には、反復則においてS=λz.FS=\lambda z.\mathsf F、W0=TW_0=\mathsf T、Wj=F (1≤j≤n+1)W_j=\mathsf F\ (1\le j\le n+1)と置く。S WjS\,W_jは全てF\mathsf Fへ評価されるので、IsZero cn+1\mathsf{IsZero}\,\mathbf c_{n+1}はF\mathsf Fを返す。▨

例 2.4 (選ばれない分枝の発散).Ω=(λx.x x)(λx.x x)\Omega=(\lambda x.x\,x)(\lambda x.x\,x)とする。Ω⟶v∞\Omega\longrightarrow_v^\inftyであるが、

If T (λd.c0) (λd.Ω)⟶v∗c0\mathsf{If}\,\mathsf T\,(\lambda d.\mathbf c_0)\,(\lambda d.\Omega) \longrightarrow_v^*\mathbf c_0

である。二つの分枝は入力時には値であり、偽の分枝の本体Ω\Omegaは評価位置に現れない。

再帰的な探索には、値呼び評価用の固定点結合子を用いる。

定義 2.5 (値呼び固定点結合子).

Z=λg.(λx.g(λu.x x u))(λx.g(λu.x x u)).\mathsf Z =\lambda g. (\lambda x.g(\lambda u.x\,x\,u)) (\lambda x.g(\lambda u.x\,x\,u)).

Z\mathsf Zを 値呼び固定点結合子 (call-by-value fixed-point combinator) という。閉じた値GGに対して

AG=λx.G(λu.x x u),RG=λu.AG AG uA_G=\lambda x.G(\lambda u.x\,x\,u),\qquad R_G=\lambda u.A_G\,A_G\,u

と書く。

補題 2.6. 閉じた値G,VG,Vについて

Z G⟶v∗G RG,RG V⟶v∗G RG V\mathsf Z\,G\longrightarrow_v^*G\,R_G,\qquad R_G\,V\longrightarrow_v^*G\,R_G\,V

である。

証明.GGが値であるため、

Z G⟶vAG AG⟶vG(λu.AG AG u)=G RG\mathsf Z\,G \longrightarrow_v A_G\,A_G \longrightarrow_v G(\lambda u.A_G\,A_G\,u) =G\,R_G

となる。また、VVが値であるため、

RG V⟶vAG AG V⟶vG RG VR_G\,V \longrightarrow_v A_G\,A_G\,V \longrightarrow_v G\,R_G\,V

となる。各列は有限であり、GGやVVの本体を途中で評価しない。▨

3 部分ミュー再帰関数の表現

定義 3.1. 部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nを考える。全てのx⃗=(x1,…,xk)\vec x=(x_1,\ldots,x_k)について次の二条件を満たす閉項FFが存在するとき、ffは値呼びラムダ計算可能 (call-by-value lambda-computable) であるという。

  1. f(x⃗)=nf(\vec x)=nならばF cx1⋯cxk⟶v∗cnF\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_nである。
  2. f(x⃗)↑f(\vec x)\mathord\uparrowならばF cx1⋯cxk⟶v∞F\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^\inftyである。

二条件を満たすFFがffを強く表現する (strongly represents) という。

構成の帰納法では、正のアリティkkをもつ関数の代表項を、閉じたkk引数のカリー化された値として選ぶ。数値をj<kj<k個だけ与えた部分適用は、残りの引数を受け取る抽象へ有限回で評価される。零アリティの代表は閉項とする。部分適用の不変条件により、合成では内側の部分計算が左から右へ順に強制される。

命題 3.2. 全ての部分ミュー再帰関数は値呼びラムダ計算可能である。有限な生成式から強く表現する閉項を構成することができ、アリティが正なら代表をカリー化された閉じた値として選ぶことができる。

証明では、初期関数、合成、原始再帰、非有界最小化の順に構成を与える。原始再帰では「現在の添字と現在値の対」を Church 数で反復更新し、非有界最小化では、候補の検査結果が得られた後に限って次の候補を評価する。

証明. 生成式の構造に関する帰納法を用いる。kk変数零関数、後続者関数、射影関数は、それぞれ

λx1.⋯λxk.c0,Succ,λx1.⋯λxk.xi\lambda x_1.\cdots\lambda x_k.\mathbf c_0,\qquad \mathsf{Succ},\qquad \lambda x_1.\cdots\lambda x_k.x_i

によって表現される。補題 2.3により出力は正準数値である。各項は必要な個数の先頭抽象をもち、部分適用に関する不変条件も満たす。

合成

h(x⃗)=f(g1(x⃗),…,gm(x⃗))h(\vec x)=f(g_1(\vec x),\ldots,g_m(\vec x))

を考える。帰納法の仮定から得た代表をF,G1,…,GmF,G_1,\ldots,G_mとし、

H=λx1.⋯λxk.F(G1 x⃗)⋯(Gm x⃗)H=\lambda x_1.\cdots\lambda x_k. F(G_1\,\vec x)\cdots(G_m\,\vec x)

と定める。値呼び評価はG1 x⃗,…,Gm x⃗G_1\,\vec x,\ldots,G_m\,\vec xを左から右へ数値まで評価する。Gj x⃗G_j\,\vec xが最初に発散する位置では、全体も同じ部分計算の内部で発散する。全ての内側の計算が停止した後には、FFが得られた数値を順に受け取る。FFの部分適用は残りの引数を待つ値へ停止するため、後続のGjG_jより先に余分な発散は生じない。全てのgj(x⃗)g_j(\vec x)が定義されていてもf(g1(x⃗),…,gm(x⃗))f(g_1(\vec x),\ldots,g_m(\vec x))が未定義ならば、最後にFFの評価が発散する。したがって、合成は定義域と値をともに保存する。

原始再帰

h(x⃗,0)=f(x⃗),h(x⃗,n+1)=g(x⃗,n,h(x⃗,n))\begin{aligned} h(\vec x,0)&=f(\vec x),\\ h(\vec x,n+1)&=g(\vec x,n,h(\vec x,n)) \end{aligned}

を考える。F,GF,Gを帰納法の仮定から得た代表とし、x⃗\vec xを自由変数として含む値

Stepx⃗=λp.Pair (Succ(Fst p)) (G x⃗ (Fst p) (Snd p))\mathsf{Step}_{\vec x} =\lambda p. \mathsf{Pair}\, (\mathsf{Succ}(\mathsf{Fst}\,p))\, (G\,\vec x\,(\mathsf{Fst}\,p)\,(\mathsf{Snd}\,p))

を用いる。代表を

H=λx1.⋯λxk.λn.Snd(n Stepx⃗(Pair c0 (F x⃗)))H=\lambda x_1.\cdots\lambda x_k.\lambda n. \mathsf{Snd}\bigl( n\,\mathsf{Step}_{\vec x} (\mathsf{Pair}\,\mathbf c_0\,(F\,\vec x)) \bigr)

と定める。

z0=f(x⃗)z_0=f(\vec x)およびzj+1=g(x⃗,j,zj)z_{j+1}=g(\vec x,j,z_j)が0≤j<n0\le j<nについて定義される場合、反復開始時の対は⟨c0,cz0⟩v\langle\mathbf c_0,\mathbf c_{z_0}\rangle_vまで評価される。補題 2.3を用いると

Stepx⃗⟨cj,czj⟩v⟶v∗⟨cj+1,czj+1⟩v\mathsf{Step}_{\vec x} \langle\mathbf c_j,\mathbf c_{z_j}\rangle_v \longrightarrow_v^* \langle\mathbf c_{j+1},\mathbf c_{z_{j+1}}\rangle_v

である。jjに関する帰納法と Church 数の反復則により、nn回後の対は⟨cn,czn⟩v\langle\mathbf c_n,\mathbf c_{z_n}\rangle_vとなり、Snd\mathsf{Snd}はczn\mathbf c_{z_n}を返す。F x⃗F\,\vec xが発散すれば、初期対を値にする途中で全体が発散する。最小のj<nj<nでG x⃗ cj czjG\,\vec x\,\mathbf c_j\,\mathbf c_{z_j}が発散すれば、第j+1j+1の対を作る途中で全体が発散する。値呼び評価は次の反復へ進む前に現在の対を値にするので、後段の反復が発散を回避することはない。原始再帰の定義域と値が保存される。

上の構成はk≥1k\ge 1の場合を扱った。k=0k=0の場合を明示する。§E15.7 定義 2.1はk=0k=0の原始再帰を許し、そのとき基底は関数ffではなく一つの自然数ccであり、h(0)=ch(0)=cかつh(n+1)=g(n,h(n))h(n+1)=g(n,h(n))である。ggは二変数関数であるから、帰納法の仮定はカリー化された閉じた値GGを与える。x⃗\vec xが空であることに合わせて

Step=λp.Pair (Succ(Fst p)) (G (Fst p) (Snd p)),H=λn.Snd(n Step (Pair c0 cc))\mathsf{Step} =\lambda p. \mathsf{Pair}\, (\mathsf{Succ}(\mathsf{Fst}\,p))\, (G\,(\mathsf{Fst}\,p)\,(\mathsf{Snd}\,p)), \qquad H=\lambda n. \mathsf{Snd}\bigl( n\,\mathsf{Step}\,(\mathsf{Pair}\,\mathbf c_0\,\mathbf c_c) \bigr)

と定める。Step\mathsf{Step}は自由変数をもたない値である。c0\mathbf c_0とcc\mathbf c_cはともに値であるから、定義 2.2のPair\mathsf{Pair}により、初期対Pair c0 cc\mathsf{Pair}\,\mathbf c_0\,\mathbf c_cは二段の評価で⟨c0,cc⟩v\langle\mathbf c_0,\mathbf c_c\rangle_vになる。以後の反復と発散に関する議論はk≥1k\ge 1の場合と同じであり、基底が数であるため、F x⃗F\,\vec xの発散に関する場合分けだけが不要になる。HHは先頭抽象λn\lambda nを一つもつ閉じた値であり、一変数関数hhに対する強い表現と部分適用の不変条件を満たす。

最後に、§E15.7 定義 3.1の非有界最小化

h(x⃗)=μy[g(x⃗,y)=0]h(\vec x)=\mu y[g(\vec x,y)=0]

を考える。GGをggの代表とし、

BG=λr.λx1.⋯λxk.λy.If (IsZero(G x⃗ y)) (λd.y) (λd.r x⃗ (Succ y)),H=λx1.⋯λxk.(Z BG) x⃗ c0\begin{aligned} B_G ={}&\lambda r.\lambda x_1.\cdots\lambda x_k.\lambda y.\\ &\mathsf{If}\, (\mathsf{IsZero}(G\,\vec x\,y))\, (\lambda d.y)\, (\lambda d.r\,\vec x\,(\mathsf{Succ}\,y)),\\ H ={}&\lambda x_1.\cdots\lambda x_k. (\mathsf Z\,B_G)\,\vec x\,\mathbf c_0 \end{aligned}

と定める。BGB_Gは値であり、補題 2.6により、各候補yyの検査後に同じ探索手続きを次の候補へ展開する。

g(x⃗,z)g(\vec x,z)が全てのz<yz<yで定義されて正であり、g(x⃗,y)=0g(\vec x,y)=0ならば、探索は候補0,…,y0,\ldots,yを順に検査する。正の結果では偽の分枝だけを、零の結果では真の分枝だけを評価するので、有限回の展開後にcy\mathbf c_yを返す。正の値が続いた後、最初の未定義値g(x⃗,z)g(\vec x,z)に達した場合、IsZero\mathsf{IsZero}の引数を評価する途中で発散する。全ての候補でg(x⃗,y)g(\vec x,y)が定義されて正ならば、各有限段階の後に次の候補の評価が現れ、決定性により無限評価を生じる。後の候補で零になる場合でも、それより前に未定義値があれば探索は未定義値の位置で発散する。以上の停止、途中発散、無限探索の場合分けは§E15.7 定義 3.1の部分最小化の定義域と一致する。

正のアリティをもつ各構成は先頭抽象を必要な個数だけもつ。合成、原始再帰、最小化で数値を必要数未満だけ与えた場合にも、残りの引数を束縛する抽象で評価が止まる。零アリティでは、構成した閉項そのものが停止値または無限評価を与える。したがって、強い表現と正のアリティに対する部分適用の不変条件が生成式全体で保たれる。▨

4 Turing 機械からラムダ計算へ

定理 4.1.§E15.7 定義 1.1の意味で部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nを計算する Turing 機械MMから、ffを強く表現する閉じたラムダ項FMF_Mを構成することができる。f(x⃗)=nf(\vec x)=nの場合には

FM cx1⋯cxk⟶v∗cnF_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_n

であり、f(x⃗)↑f(\vec x)\mathord\uparrowの場合には対応するラムダ評価も停止しない。

証明.§E15.7 定理 5.3は、MMが計算する部分関数と定義域および値が一致する部分ミュー再帰関数の有限な生成式を与える。命題 3.2を生成式へ適用し、強く表現する値FMF_Mを構成する。定義 3.1 (1)が停止時の出力を保存し、定義 3.1 (2)がMMの定義域外における無限評価を保証する。一般のβ\beta簡約の標準化は用いていない。▨

5 Turing 機械の配置の直接符号化

前節の構成は§E15.7 定理 5.3を経由するので、MMの一段の遷移がラムダ項の評価として現れない。本節では、MMの配置そのものをラムダ項へ符号化し、遷移関数を一つの閉じた値として表し、固定点結合子によって停止まで反復する構成を与える。到達する結論は定理 4.1と同じであるが、部分ミュー再帰関数を用いない。

最初に、有限集合の要素、対、および有限列を弱い値呼び評価で扱うための符号を定める。

定義 5.1.m≥1m\ge1と0≤i<m0\le i<mに対して、タグ (tag) を

tagim=λu0.⋯λum−1.ui\mathsf{tag}^m_i=\lambda u_0.\cdots\lambda u_{m-1}.u_i

と定める。tag02=T\mathsf{tag}^2_0=\mathsf Tかつtag12=F\mathsf{tag}^2_1=\mathsf Fである。

リストの構成子を

Nil=λn.λc.n,Cons=λa.λs.λn.λc.c a s\mathsf{Nil}=\lambda n.\lambda c.n, \qquad \mathsf{Cons}=\lambda a.\lambda s.\lambda n.\lambda c.c\,a\,s

と定め、閉じた値U1,…,UpU_1,\ldots,U_pに対するリスト値 (list value) を

[ ]v=Nil,[U1,…,Up]v=λn.λc.c U1 [U2,…,Up]v[\,]_v=\mathsf{Nil}, \qquad [U_1,\ldots,U_p]_v=\lambda n.\lambda c.c\,U_1\,[U_2,\ldots,U_p]_v

と定める。既定値つきの先頭取り出しを

Pop=λz.λs.s (λd.Pair z Nil) (λu.λt.λd.Pair u t) I\mathsf{Pop}=\lambda z.\lambda s. s\,(\lambda d.\mathsf{Pair}\,z\,\mathsf{Nil})\, (\lambda u.\lambda t.\lambda d.\mathsf{Pair}\,u\,t)\,\mathsf I

と定める。

補題 5.2. 次の四つが成り立つ。

  1. 閉じた値A,BA,BについてPair A B⟶v∗⟨A,B⟩v\mathsf{Pair}\,A\,B\longrightarrow_v^*\langle A,B\rangle_vである。
  2. A0,…,Am−1A_0,\ldots,A_{m-1}を閉項とし、変数ddがどのAjA_jにも自由に現れないとする。このとき tagim (λd.A0)⋯(λd.Am−1) I⟶v∗Ai\mathsf{tag}^m_i\,(\lambda d.A_0)\cdots(\lambda d.A_{m-1})\,\mathsf I \longrightarrow_v^*A_i である。とくにm=2m=2の場合として、補題 2.3のIf\mathsf{If}に関する評価則は、二つの分枝の本体が閉じた値でなく閉項であっても成り立つ。
  3. AAを閉項、BBを自由変数が高々u,tu,tである項とし、変数ddがどちらにも自由に現れないとする。このとき [ ]v (λd.A) (λu.λt.λd.B) I⟶v∗A[\,]_v\,(\lambda d.A)\,(\lambda u.\lambda t.\lambda d.B)\,\mathsf I \longrightarrow_v^*A であり、p≥1p\ge1のとき [U1,…,Up]v (λd.A) (λu.λt.λd.B) I⟶v∗B[u:=U1][t:=[U2,…,Up]v][U_1,\ldots,U_p]_v\,(\lambda d.A)\,(\lambda u.\lambda t.\lambda d.B)\,\mathsf I \longrightarrow_v^*B[u:=U_1][t:=[U_2,\ldots,U_p]_v] である。
  4. 閉じた値ZZについてPop Z [ ]v⟶v∗⟨Z,Nil⟩v\mathsf{Pop}\,Z\,[\,]_v\longrightarrow_v^*\langle Z,\mathsf{Nil}\rangle_vであり、p≥1p\ge1のときPop Z [U1,…,Up]v⟶v∗⟨U1,[U2,…,Up]v⟩v\mathsf{Pop}\,Z\,[U_1,\ldots,U_p]_v \longrightarrow_v^*\langle U_1,[U_2,\ldots,U_p]_v\rangle_vである。

証明.(1)は

Pair A B⟶v(λb.λp.p A b)B⟶vλp.p A B=⟨A,B⟩v\mathsf{Pair}\,A\,B \longrightarrow_v(\lambda b.\lambda p.p\,A\,b)B \longrightarrow_v\lambda p.p\,A\,B =\langle A,B\rangle_v

から従う。

(2)を示す。各λd.Aj\lambda d.A_jは抽象であるから値である。tagim\mathsf{tag}^m_iのmm個の先頭抽象を順に縮約するとλd.Ai\lambda d.A_iを得る。I\mathsf Iは値であるから、さらに一段でAi[d:=I]=AiA_i[d:=\mathsf I]=A_iを得る。T=tag02\mathsf T=\mathsf{tag}^2_0、F=tag12\mathsf F=\mathsf{tag}^2_1であり、定義 2.2により、真偽値VVと二つの分枝K0,K1K_0,K_1についてIf V K0 K1\mathsf{If}\,V\,K_0\,K_1はV K0 K1 IV\,K_0\,K_1\,\mathsf Iへ評価されるので、後半の主張も従う。

(3)を示す。二つの分枝をK0=λd.AK_0=\lambda d.A、K1=λu.λt.λd.BK_1=\lambda u.\lambda t.\lambda d.Bと書く。[ ]v K0⟶vλc.K0[\,]_v\,K_0\longrightarrow_v\lambda c.K_0であり、(λc.K0)K1⟶vK0(\lambda c.K_0)K_1\longrightarrow_vK_0である。さらにK0 I⟶vAK_0\,\mathsf I\longrightarrow_vAを得る。p≥1p\ge1のときには、S=[U2,…,Up]vS=[U_2,\ldots,U_p]_vとして

[U1,…,Up]v K0⟶vλc.c U1 S,(λc.c U1 S) K1⟶vK1 U1 S[U_1,\ldots,U_p]_v\,K_0 \longrightarrow_v\lambda c.c\,U_1\,S, \qquad (\lambda c.c\,U_1\,S)\,K_1 \longrightarrow_vK_1\,U_1\,S

である。K1 U1 SK_1\,U_1\,Sは二段でλd.B[u:=U1][t:=S]\lambda d.B[u:=U_1][t:=S]へ評価され、I\mathsf Iを適用するとさらに一段でB[u:=U1][t:=S]B[u:=U_1][t:=S]を得る。

(4)は、Pop Z S\mathsf{Pop}\,Z\,Sが

S (λd.Pair Z Nil) (λu.λt.λd.Pair u t) IS\,(\lambda d.\mathsf{Pair}\,Z\,\mathsf{Nil})\, (\lambda u.\lambda t.\lambda d.\mathsf{Pair}\,u\,t)\,\mathsf I

へ二段で評価されることと、(3)および(1)から従う。▨

次に、機械の配置を符号化する。

定義 5.3.M=(Q,Σ,Γ,δ,q0,qacc,qrej)M=(Q,\Sigma,\Gamma,\delta,q_0,q_{\mathrm{acc}},q_{\mathrm{rej}})を§E15.4 定義 1.1の単テープ決定性 Turing 機械とする。有限集合の並びQ={p0,…,pk−1}Q=\{p_0,\ldots,p_{k-1}\}とΓ={a0,…,am−1}\Gamma=\{a_0,\ldots,a_{m-1}\}を一つ固定し、

pj‾=tagjk,ai‾=tagim\overline{p_j}=\mathsf{tag}^k_j, \qquad \overline{a_i}=\mathsf{tag}^m_i

と書く。§E15.4 定義 1.2の配置C=(q,h,T)C=(q,h,T)と閉じた値WWについて、WWがCCを表す (represents a Turing configuration) とは、あるℓ≥0\ell\ge0が存在して

W=⟨qˉ, ⟨L, ⟨T(h)‾,R⟩v⟩v⟩v,W=\Bigl\langle\bar q,\ \bigl\langle L,\ \langle\overline{T(h)},R\rangle_v\bigr\rangle_v\Bigr\rangle_v,L=[T(h−1)‾,T(h−2)‾,…,T(0)‾]v,R=[T(h+1)‾,…,T(h+ℓ)‾]vL=[\overline{T(h-1)},\overline{T(h-2)},\ldots,\overline{T(0)}]_v, \qquad R=[\overline{T(h+1)},\ldots,\overline{T(h+\ell)}]_v

であり、かつh+ℓh+\ellより大きい全ての位置でTTの値が⊔\sqcupとなることをいう。h=0h=0のときL=[ ]vL=[\,]_vである。TTは有限個の位置を除いて⊔\sqcupを値にとるので、そのようなℓ\ellは存在する。したがって、各配置は少なくとも一つの表現をもつ。逆に、リスト値の長さと成分は項から定まるので、一つの閉じた値が二つの異なる配置を表すことはない。

配置の構成と成分の取り出しを

Conf=λq.λl.λb.λr.Pair q (Pair l (Pair b r)),St=λw.Fst w,Lf=λw.Fst(Snd w),Cu=λw.Fst(Snd(Snd w)),Rg=λw.Snd(Snd(Snd w))\begin{aligned} \mathsf{Conf}&=\lambda q.\lambda l.\lambda b.\lambda r. \mathsf{Pair}\,q\,(\mathsf{Pair}\,l\,(\mathsf{Pair}\,b\,r)),\\ \mathsf{St}&=\lambda w.\mathsf{Fst}\,w, &\mathsf{Lf}&=\lambda w.\mathsf{Fst}(\mathsf{Snd}\,w),\\ \mathsf{Cu}&=\lambda w.\mathsf{Fst}(\mathsf{Snd}(\mathsf{Snd}\,w)), &\mathsf{Rg}&=\lambda w.\mathsf{Snd}(\mathsf{Snd}(\mathsf{Snd}\,w)) \end{aligned}

と定める。

定義 5.4. 上の記号のもとで、停止判定項 (halting-test term) を

HaltM=λw.(St w) (λd.H0)⋯(λd.Hk−1) I\mathsf{Halt}_M=\lambda w.(\mathsf{St}\,w)\, (\lambda d.H_0)\cdots(\lambda d.H_{k-1})\,\mathsf I

と定める。ここで、pj∈{qacc,qrej}p_j\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\}ならばHj=TH_j=\mathsf T、そうでなければHj=FH_j=\mathsf Fである。

遷移項 (transition term) を

TrM=λw.(St w) (λd.B0)⋯(λd.Bk−1) I\mathsf{Tr}_M=\lambda w.(\mathsf{St}\,w)\, (\lambda d.B_0)\cdots(\lambda d.B_{k-1})\,\mathsf I

と定める。pj∈{qacc,qrej}p_j\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\}ならばBj=wB_j=wとする。そうでなければ

Bj=(Cu w) (λd.Ej,0)⋯(λd.Ej,m−1) IB_j=(\mathsf{Cu}\,w)\,(\lambda d.E_{j,0})\cdots(\lambda d.E_{j,m-1})\,\mathsf I

とし、δ(pj,ai)=(q′,a′,D)\delta(p_j,a_i)=(q',a',D)に応じてEj,iE_{j,i}を次のように定める。

  1. D=SD=Sのとき Ej,i=Conf q′‾ (Lf w) a′‾ (Rg w).E_{j,i}=\mathsf{Conf}\,\overline{q'}\,(\mathsf{Lf}\,w)\,\overline{a'}\,(\mathsf{Rg}\,w).
  2. D=RD=Rのとき Ej,i=(λz.Conf q′‾ (Cons a′‾ (Lf w)) (Fst z) (Snd z))(Pop ⊔‾ (Rg w)).E_{j,i}= \Bigl(\lambda z.\mathsf{Conf}\,\overline{q'}\, \bigl(\mathsf{Cons}\,\overline{a'}\,(\mathsf{Lf}\,w)\bigr)\, (\mathsf{Fst}\,z)\,(\mathsf{Snd}\,z)\Bigr) \bigl(\mathsf{Pop}\,\overline{\sqcup}\,(\mathsf{Rg}\,w)\bigr).
  3. D=LD=Lのとき Ej,i=(Lf w) (λd.Conf q′‾ Nil a′‾ (Rg w))(λu.λt.λd.Conf q′‾ t u (Cons a′‾ (Rg w))) I.\begin{aligned} E_{j,i}={}&(\mathsf{Lf}\,w)\, \bigl(\lambda d.\mathsf{Conf}\,\overline{q'}\,\mathsf{Nil}\,\overline{a'}\,(\mathsf{Rg}\,w)\bigr)\\ &\bigl(\lambda u.\lambda t.\lambda d. \mathsf{Conf}\,\overline{q'}\,t\,u\, (\mathsf{Cons}\,\overline{a'}\,(\mathsf{Rg}\,w))\bigr)\,\mathsf I. \end{aligned}

変数d,z,u,td,z,u,tは、これらの式の他の位置に自由に現れない。BjB_jとEj,iE_{j,i}の自由変数はwwだけであり、先頭のλw\lambda wで束縛される。QQとΓ\Gammaは有限であるから、HaltM\mathsf{Halt}_MとTrM\mathsf{Tr}_MはMMから定まる有限の閉じた値である。

補題 5.5. 閉じた値WWが配置C=(q,h,T)C=(q,h,T)を表すとする。

  1. q∈{qacc,qrej}q\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\}ならばHaltM W⟶v∗T\mathsf{Halt}_M\,W\longrightarrow_v^*\mathsf Tであり、そうでなければHaltM W⟶v∗F\mathsf{Halt}_M\,W\longrightarrow_v^*\mathsf Fである。
  2. q∉{qacc,qrej}q\notin\{q_{\mathrm{acc}},q_{\mathrm{rej}}\}とし、C⊢MC′C\vdash_MC'とする。このとき、C′C'を表す閉じた値W′W'が存在してTrM W⟶v∗W′\mathsf{Tr}_M\,W\longrightarrow_v^*W'である。

証明.WWが表す配置の右側の長さをℓ\ellとし、WWの成分を上の定義のとおりqˉ,L,T(h)‾,R\bar q,L,\overline{T(h)},Rと書く。補題 2.3の射影の評価則により、

St W⟶v∗qˉ,Lf W⟶v∗L,Cu W⟶v∗T(h)‾,Rg W⟶v∗R\mathsf{St}\,W\longrightarrow_v^*\bar q, \qquad \mathsf{Lf}\,W\longrightarrow_v^*L, \qquad \mathsf{Cu}\,W\longrightarrow_v^*\overline{T(h)}, \qquad \mathsf{Rg}\,W\longrightarrow_v^*R

である。

(1)を示す。q=pjq=p_jとする。HaltM W\mathsf{Halt}_M\,Wは一段で(St W)(λd.H0)⋯(λd.Hk−1)I(\mathsf{St}\,W)(\lambda d.H_0)\cdots(\lambda d.H_{k-1})\mathsf Iへ進み、値呼び評価は最も内側の作用子St W\mathsf{St}\,Wを先にqˉ=tagjk\bar q=\mathsf{tag}^k_jへ評価する。補題 5.2 (2)によりHjH_jを得る。HjH_jの定義から結論が従う。

(2)を示す。q=pjq=p_j、T(h)=ai0T(h)=a_{i_0}、δ(pj,ai0)=(q′,a′,D)\delta(p_j,a_{i_0})=(q',a',D)とする。同じ議論を二度用いると、

TrM W⟶v∗Bj[w:=W]⟶v∗Ej,i0[w:=W]\mathsf{Tr}_M\,W\longrightarrow_v^*B_j[w:=W]\longrightarrow_v^*E_{j,i_0}[w:=W]

である。§E15.4 定義 1.2によりC′=(q′,h′,T′)C'=(q',h',T')であり、T′T'は位置hhだけをa′a'に変え、h′h'はD=SD=Sでhh、D=RD=Rでh+1h+1、D=LD=Lかつh>0h>0でh−1h-1、D=LD=Lかつh=0h=0で00である。

D=SD=Sの場合。Ej,i0[w:=W]E_{j,i_0}[w:=W]はConf q′‾ (Lf W) a′‾ (Rg W)\mathsf{Conf}\,\overline{q'}\,(\mathsf{Lf}\,W)\,\overline{a'}\,(\mathsf{Rg}\,W)であり、値呼び評価は四つの引数を左から順に値へ落とす。補題 5.2 (1)を三度用いると

W′=⟨q′‾, ⟨L, ⟨a′‾,R⟩v⟩v⟩vW'=\Bigl\langle\overline{q'},\ \bigl\langle L,\ \langle\overline{a'},R\rangle_v\bigr\rangle_v\Bigr\rangle_v

を得る。h′=hh'=hであり、T′T'は位置hh以外でTTと一致するから、LLはT′(h′−1)‾,…,T′(0)‾\overline{T'(h'-1)},\ldots,\overline{T'(0)}のリスト値、RRはT′(h′+1)‾,…,T′(h′+ℓ)‾\overline{T'(h'+1)},\ldots,\overline{T'(h'+\ell)}のリスト値であり、a′‾=T′(h′)‾\overline{a'}=\overline{T'(h')}である。h+ℓh+\ellより大きい位置ではT′T'とTTが一致して⊔\sqcupであるから、W′W'はC′C'を表す。

D=RD=Rの場合。値呼び評価は作用子λz.⋯\lambda z.\cdotsが値であるから引数を先に評価する。補題 5.2 (4)により、Pop ⊔‾ R\mathsf{Pop}\,\overline\sqcup\,Rは、ℓ≥1\ell\ge1のとき⟨T(h+1)‾,[T(h+2)‾,…,T(h+ℓ)‾]v⟩v\langle\overline{T(h+1)},[\overline{T(h+2)},\ldots,\overline{T(h+\ell)}]_v\rangle_vへ、ℓ=0\ell=0のとき⟨⊔‾,Nil⟩v\langle\overline\sqcup,\mathsf{Nil}\rangle_vへ評価される。ℓ=0\ell=0のときは表現の条件からT(h+1)=⊔T(h+1)=\sqcupであるから、いずれの場合も第1成分はT(h+1)‾\overline{T(h+1)}であり、第2成分はT(h+2)‾\overline{T(h+2)}以降を並べたリスト値である。またCons a′‾ L⟶v∗[a′‾,T(h−1)‾,…,T(0)‾]v\mathsf{Cons}\,\overline{a'}\,L\longrightarrow_v^*[\overline{a'},\overline{T(h-1)},\ldots,\overline{T(0)}]_vである。h′=h+1h'=h+1、T′(h)=a′T'(h)=a'であるから、この左側リストは長さh′h'をもち、T′(h′−1)‾,…,T′(0)‾\overline{T'(h'-1)},\ldots,\overline{T'(0)}と一致する。新しい右側の長さをℓ′\ell'とすると、ℓ≥1\ell\ge1でℓ′=ℓ−1\ell'=\ell-1、ℓ=0\ell=0でℓ′=0\ell'=0である。どちらの場合もh′+ℓ′≥h+ℓh'+\ell'\ge h+\ellであり、h′+ℓ′h'+\ell'より大きい位置でT′T'の値は⊔\sqcupである。したがって、得られた値はC′C'を表す。

D=LD=Lの場合。作用子Lf W\mathsf{Lf}\,WはLLへ評価される。h=0h=0ならばL=[ ]vL=[\,]_vであり、補題 5.2 (3)によりConf q′‾ Nil a′‾ R\mathsf{Conf}\,\overline{q'}\,\mathsf{Nil}\,\overline{a'}\,Rへ進む。h′=0h'=0、T′(0)=a′T'(0)=a'であるから、その値はC′C'を表す。h≥1h\ge1ならばL=[T(h−1)‾,…,T(0)‾]vL=[\overline{T(h-1)},\ldots,\overline{T(0)}]_vであり、同じ補題 5.2 (3)によりu:=T(h−1)‾u:=\overline{T(h-1)}、t:=[T(h−2)‾,…,T(0)‾]vt:=[\overline{T(h-2)},\ldots,\overline{T(0)}]_vを代入したConf q′‾ t u (Cons a′‾ R)\mathsf{Conf}\,\overline{q'}\,t\,u\,(\mathsf{Cons}\,\overline{a'}\,R)へ進む。h′=h−1h'=h-1、T′(h−1)=T(h−1)T'(h-1)=T(h-1)、T′(h)=a′T'(h)=a'であるから、左側はT′(h′−1)‾,…,T′(0)‾\overline{T'(h'-1)},\ldots,\overline{T'(0)}のリスト値、現在記号はT′(h′)‾\overline{T'(h')}、右側は長さℓ+1\ell+1のリスト値T′(h′+1)‾,…,T′(h′+ℓ+1)‾\overline{T'(h'+1)},\ldots,\overline{T'(h'+\ell+1)}である。h′+(ℓ+1)=h+ℓh'+(\ell+1)=h+\ellであり、それより大きい位置ではT′T'とTTが一致して⊔\sqcupである。したがって、得られた値はC′C'を表す。

三つの移動方向を尽くしたので、(2)が成り立つ。▨

入力と出力の変換を定める。以下では1∈Σ1\in\Sigmaとし、k≥2k\ge2の場合には#∈Σ\#\in\Sigmaとする。

定義 5.6.

One=λs.Cons 1ˉ s,Sep=λs.Cons #‾ s\mathsf{One}=\lambda s.\mathsf{Cons}\,\bar1\,s, \qquad \mathsf{Sep}=\lambda s.\mathsf{Cons}\,\overline{\#}\,s

と定める。項Sk,…,S1S_k,\ldots,S_1を

Sk=xk One Nil,Sj=xj One (Sep Sj+1)(1≤j<k)S_k=x_k\,\mathsf{One}\,\mathsf{Nil}, \qquad S_j=x_j\,\mathsf{One}\,(\mathsf{Sep}\,S_{j+1}) \quad(1\le j<k)

と定める。SjS_jの自由変数はxj,…,xkx_j,\ldots,x_kであり、次の項の先頭抽象で束縛される。初期配置項 (initial-configuration term) を

InitM=λx1.⋯λxk.(λz.Conf q0‾ Nil (Fst z) (Snd z))(Pop ⊔‾ S1)\mathsf{Init}_M =\lambda x_1.\cdots\lambda x_k. \Bigl(\lambda z.\mathsf{Conf}\,\overline{q_0}\,\mathsf{Nil}\,(\mathsf{Fst}\,z)\,(\mathsf{Snd}\,z)\Bigr) \bigl(\mathsf{Pop}\,\overline\sqcup\,S_1\bigr)

と定める。

記号11の判定項 (symbol-test term) を

Is1=λv.v (λd.J0)⋯(λd.Jm−1) I\mathsf{Is}_1=\lambda v.v\,(\lambda d.J_0)\cdots(\lambda d.J_{m-1})\,\mathsf I

と定める。ここで、ai1=1a_{i_1}=1である添字i1i_1に対してJi1=TJ_{i_1}=\mathsf T、それ以外の添字iiに対してJi=FJ_i=\mathsf Fである。出力抽出項 (output-extraction term) を

Cnt=Z(λr.λp.(λz.If (Is1(Fst z)) (λd.r (Pair (Succ(Fst p)) (Snd z))) (λd.Fst p))(Pop ⊔‾ (Snd p))),Out=λw.Cnt (Pair c0 (Cons (Cu w) (Rg w)))\begin{aligned} \mathsf{Cnt}&=\mathsf Z\Bigl(\lambda r.\lambda p. \bigl(\lambda z.\mathsf{If}\,(\mathsf{Is}_1(\mathsf{Fst}\,z))\, (\lambda d.r\,(\mathsf{Pair}\,(\mathsf{Succ}(\mathsf{Fst}\,p))\,(\mathsf{Snd}\,z)))\, (\lambda d.\mathsf{Fst}\,p)\bigr)\\ &\qquad\qquad\quad \bigl(\mathsf{Pop}\,\overline\sqcup\,(\mathsf{Snd}\,p)\bigr)\Bigr),\\ \mathsf{Out}&=\lambda w.\mathsf{Cnt}\, \bigl(\mathsf{Pair}\,\mathbf c_0\,(\mathsf{Cons}\,(\mathsf{Cu}\,w)\,(\mathsf{Rg}\,w))\bigr) \end{aligned}

と定める。

補題 5.7.U1,…,UℓU_1,\ldots,U_\ellをΓ\Gammaの記号のタグとし、その列の先頭から連続して1ˉ\bar1である項の個数をnnとする。このとき、全てのj∈Nj\in\mathbb Nについて

Cnt ⟨cj,[U1,…,Uℓ]v⟩v⟶v∗cj+n\mathsf{Cnt}\,\langle\mathbf c_j,[U_1,\ldots,U_\ell]_v\rangle_v \longrightarrow_v^*\mathbf c_{j+n}

である。

証明.Cnt=Z G\mathsf{Cnt}=\mathsf Z\,Gの引数GGは閉じた値であるから、補題 2.6によりZ G⟶v∗G RG\mathsf Z\,G\longrightarrow_v^*G\,R_Gであり、閉じた値VVについてRG V⟶v∗G RG VR_G\,V\longrightarrow_v^*G\,R_G\,Vである。

ℓ\ellに関する帰納法を用いる。P=⟨cj,[U1,…,Uℓ]v⟩vP=\langle\mathbf c_j,[U_1,\ldots,U_\ell]_v\rangle_vとすると、G RG PG\,R_G\,Pは

(λz.If (Is1(Fst z)) (λd.RG(Pair(Succ(Fst P))(Snd z))) (λd.Fst P))(Pop ⊔‾ (Snd P))\bigl(\lambda z.\mathsf{If}\,(\mathsf{Is}_1(\mathsf{Fst}\,z))\, (\lambda d.R_G(\mathsf{Pair}(\mathsf{Succ}(\mathsf{Fst}\,P))(\mathsf{Snd}\,z)))\, (\lambda d.\mathsf{Fst}\,P)\bigr) \bigl(\mathsf{Pop}\,\overline\sqcup\,(\mathsf{Snd}\,P)\bigr)

へ評価される。作用子は値であるから、引数が先に評価される。補題 2.3の射影の評価則と補題 5.2 (4)により、引数はℓ=0\ell=0のとき⟨⊔‾,Nil⟩v\langle\overline\sqcup,\mathsf{Nil}\rangle_vへ、ℓ≥1\ell\ge1のとき⟨U1,[U2,…,Uℓ]v⟩v\langle U_1,[U_2,\ldots,U_\ell]_v\rangle_vへ評価される。Is1\mathsf{Is}_1は補題 5.2 (2)により、1ˉ\bar1に対してT\mathsf Tを、Γ\Gammaの他の記号のタグに対してF\mathsf Fを返す。§E15.4 定義 1.1により⊔∉Σ\sqcup\notin\Sigmaであるから⊔≠1\sqcup\ne1である。

ℓ=0\ell=0の場合、またはℓ≥1\ell\ge1かつU1≠1ˉU_1\ne\bar1の場合にはn=0n=0であり、偽の分枝がFst P⟶v∗cj\mathsf{Fst}\,P\longrightarrow_v^*\mathbf c_jを返す。

ℓ≥1\ell\ge1かつU1=1ˉU_1=\bar1の場合にはn≥1n\ge1であり、真の分枝が評価される。補題 2.3によりSucc(Fst P)⟶v∗cj+1\mathsf{Succ}(\mathsf{Fst}\,P)\longrightarrow_v^*\mathbf c_{j+1}であり、補題 5.2 (1)により、真の分枝はRG ⟨cj+1,[U2,…,Uℓ]v⟩vR_G\,\langle\mathbf c_{j+1},[U_2,\ldots,U_\ell]_v\rangle_vへ評価される。この項はG RG ⟨cj+1,[U2,…,Uℓ]v⟩vG\,R_G\,\langle\mathbf c_{j+1},[U_2,\ldots,U_\ell]_v\rangle_vへ評価される。列U2,…,UℓU_2,\ldots,U_\ellの先頭から連続する1ˉ\bar1の個数はn−1n-1であるから、長さℓ−1\ell-1に対する帰納法の仮定により、この項はc(j+1)+(n−1)=cj+n\mathbf c_{(j+1)+(n-1)}=\mathbf c_{j+n}へ評価される。▨

定義 5.8 (停止までの反復項).

GM=λr.λw.If (HaltM w) (λd.w) (λd.r (TrM w)),RunM=Z GMG_M=\lambda r.\lambda w. \mathsf{If}\,(\mathsf{Halt}_M\,w)\,(\lambda d.w)\, (\lambda d.r\,(\mathsf{Tr}_M\,w)), \qquad \mathsf{Run}_M=\mathsf Z\,G_M

と定める。RunM\mathsf{Run}_Mを 停止までの反復項 (iteration-until-halting term) という。さらに、

SimM=λx1.⋯λxk.Out(RunM (InitM x1⋯xk))\mathsf{Sim}_M =\lambda x_1.\cdots\lambda x_k. \mathsf{Out}\bigl(\mathsf{Run}_M\,(\mathsf{Init}_M\,x_1\cdots x_k)\bigr)

と定める。

定理 5.9.MMを、§E15.7 定義 1.1の意味で部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nを計算する単テープ決定性 Turing 機械とする。上で構成した閉項SimM\mathsf{Sim}_Mはffを強く表現する。すなわち、f(x⃗)=nf(\vec x)=nならば

SimM cx1⋯cxk⟶v∗cn\mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_n

であり、f(x⃗)↑f(\vec x)\mathord\uparrowならばSimM cx1⋯cxk⟶v∞\mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^\inftyである。

証明. 入力語をwx⃗=1x1#⋯#1xkw_{\vec x}=1^{x_1}\#\cdots\#1^{x_k}、その長さをNNとし、§E15.4 定義 1.2の初期配置をC0=(q0,0,Twx⃗)C_0=(q_0,0,T_{w_{\vec x}})とする。

最初に初期配置項を追う。One\mathsf{One}は閉じた値であり、任意のリスト値SSに対してOne S\mathsf{One}\,SはSSの先頭へ1ˉ\bar1を付け加えたリスト値へ評価される。したがって補題 2.3の反復則の仮定が満たされる。cxj\mathbf c_{x_j}を代入した後、jjを大きい方から順に見ると、反復則によりSjS_jは語1xj#⋯#1xk1^{x_j}\#\cdots\#1^{x_k}の記号のタグを順に並べたリスト値へ評価される。したがってS1S_1は[wx⃗(0)‾,…,wx⃗(N−1)‾]v[\overline{w_{\vec x}(0)},\ldots,\overline{w_{\vec x}(N-1)}]_vへ評価される。補題 5.2 (4)により、Pop ⊔‾ S1\mathsf{Pop}\,\overline\sqcup\,S_1はN≥1N\ge1のとき⟨Twx⃗(0)‾,[Twx⃗(1)‾,…,Twx⃗(N−1)‾]v⟩v\langle\overline{T_{w_{\vec x}}(0)},[\overline{T_{w_{\vec x}}(1)},\ldots, \overline{T_{w_{\vec x}}(N-1)}]_v\rangle_vへ、N=0N=0のとき⟨⊔‾,Nil⟩v\langle\overline\sqcup,\mathsf{Nil}\rangle_vへ評価される。N=0N=0のときは全マスが空白であるから、どちらの場合も第1成分はTwx⃗(0)‾\overline{T_{w_{\vec x}}(0)}である。続いてConf\mathsf{Conf}を適用すると、C0C_0を表す閉じた値W0W_0を得る(右側の長さはN≥1N\ge1でN−1N-1、N=0N=0で00である)。

次に反復を追う。GMG_Mは閉じた値であるから、補題 2.6によりRunM⟶v∗GM RGM⟶vVM\mathsf{Run}_M\longrightarrow_v^*G_M\,R_{G_M}\longrightarrow_vV_Mである。ここで

VM=λw.If (HaltM w) (λd.w) (λd.RGM(TrM w))V_M=\lambda w.\mathsf{If}\,(\mathsf{Halt}_M\,w)\,(\lambda d.w)\, (\lambda d.R_{G_M}(\mathsf{Tr}_M\,w))

である。閉じた値WWが配置C=(q,h,T)C=(q,h,T)を表すとき、補題 5.5と補題 5.2 (2)により次が成り立つ。

  1. q∈{qacc,qrej}q\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\}ならばVM W⟶v∗WV_M\,W\longrightarrow_v^*Wである。
  2. そうでなければ、C⊢MC′C\vdash_MC'を満たすC′C'を表す閉じた値W′W'が存在して、VM WV_M\,WからVM W′V_M\,W'への空でない有限の評価列がある。実際、偽の分枝はRGM(TrM W)R_{G_M}(\mathsf{Tr}_M\,W)であり、RGMR_{G_M}は値、TrM W\mathsf{Tr}_M\,WはW′W'へ評価され、RGM W′⟶v∗GM RGM W′⟶v∗VM W′R_{G_M}\,W'\longrightarrow_v^*G_M\,R_{G_M}\,W'\longrightarrow_v^*V_M\,W'である。

f(x⃗)=nf(\vec x)=nの場合を考える。§E15.7 定義 1.1によりMMはwx⃗w_{\vec x}で停止し、§E15.4 定義 1.3の極大有限計算C0,…,CtC_0,\ldots,C_tが存在する。C0,…,Ct−1C_0,\ldots,C_{t-1}の状態は停止状態ではなく、CtC_tの状態はqaccq_{\mathrm{acc}}である。上の(2)をtt回、続いて(1)を用いると、各CsC_sを表す閉じた値WsW_sが得られ、VM W0⟶v∗WtV_M\,W_0\longrightarrow_v^*W_tである。CtC_tは正規出力配置であるから、ヘッド位置は00であり、テープ内容をTTとすると位置0,…,n−10,\ldots,n-1で11、それ以外の位置で⊔\sqcupである。WtW_tの左側は[ ]v[\,]_vであり、WtW_tの右側の長さをℓ\ellとするとCons (Cu Wt) (Rg Wt)\mathsf{Cons}\,(\mathsf{Cu}\,W_t)\,(\mathsf{Rg}\,W_t)は[T(0)‾,…,T(ℓ)‾]v[\overline{T(0)},\ldots,\overline{T(\ell)}]_vへ評価される。n≥1n\ge1のときは、表現の条件とT(n−1)=1T(n-1)=1からℓ≥n−1\ell\ge n-1であり、この列の先頭から連続する1ˉ\bar1の個数はちょうどnnである。n=0n=0のときは先頭が⊔‾\overline\sqcupであるから、その個数は00である。補題 5.7をj=0j=0で用いるとOut Wt⟶v∗cn\mathsf{Out}\,W_t\longrightarrow_v^*\mathbf c_nを得る。以上を合わせるとSimM cx1⋯cxk⟶v∗cn\mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_nである。

f(x⃗)↑f(\vec x)\mathord\uparrowの場合を考える。§E15.7 定義 1.1によりMMはwx⃗w_{\vec x}で停止せず、§E15.4 定義 1.3の第1の場合により無限の配置列C0,C1,…C_0,C_1,\ldotsが存在する。どのCsC_sの状態も停止状態ではない。上の(2)を繰り返すと、各ssについてCsC_sを表す閉じた値WsW_sと、VM WsV_M\,W_sからVM Ws+1V_M\,W_{s+1}への空でない有限の評価列が得られる。Out\mathsf{Out}は値であるから、定義 1.1の評価文脈V EV\,Eにより、引数の評価列はそのまま全体の評価列になる。したがって、SimM cx1⋯cxk\mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}から始まる評価列は無限に長く、その途中に値は現れない。補題 1.2により閉項の評価は決定的であるから、この列が唯一の評価である。すなわちSimM cx1⋯cxk⟶v∞\mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^\inftyである。▨

二つの経路は同じ結論に達する。定理 4.1は関数の生成式に沿って項を組み立て、定理 5.9は機械の配置を項として保持し、一段の遷移を項の評価として実行する。後者は§E15.7 定理 5.3を用いないので、前者の第2の証明にもなっている。

6 de Bruijn 符号と代入

逆向きの模倣では、変数名の変更に依存しない有限構文を機械へ渡す。

定義 6.1. de Bruijn 項 (de Bruijn term) を

D::=vi∣lD∣a(D,D)(i∈N)D::=\mathsf v_i\mid\mathsf lD\mid\mathsf a(D,D) \qquad(i\in\mathbb N)

によって定める。深さddで自由変数をもたないことを表す述語WF⁡d\operatorname{WF}_dを

WF⁡d(vi)  ⟺  i<d,WF⁡d(lP)  ⟺  WF⁡d+1(P),WF⁡d(a(P,Q))  ⟺  WF⁡d(P)∧WF⁡d(Q)\begin{aligned} \operatorname{WF}_d(\mathsf v_i)&\iff i<d,\\ \operatorname{WF}_d(\mathsf lP)&\iff\operatorname{WF}_{d+1}(P),\\ \operatorname{WF}_d(\mathsf a(P,Q)) &\iff\operatorname{WF}_d(P)\land\operatorname{WF}_d(Q) \end{aligned}

と定める。WF⁡0(D)\operatorname{WF}_0(D)を満たす項を閉項とする。

有限二進符号を

⌜vi⌝=00 1i0,⌜lP⌝=01 ⌜P⌝,⌜a(P,Q)⌝=1 ⌜P⌝⌜Q⌝\begin{aligned} \ulcorner\mathsf v_i\urcorner&=00\,1^i0,\\ \ulcorner\mathsf lP\urcorner&=01\,\ulcorner P\urcorner,\\ \ulcorner\mathsf a(P,Q)\urcorner&=1\,\ulcorner P\urcorner\ulcorner Q\urcorner \end{aligned}

と定める。

接頭辞00,01,100,01,1は互いに区別することができ、変数符号は末尾の00まで読めば終わる。したがって、構文木は左から一意に復号することができる。名前付き項をこの構文へ移す翻訳は、次節で束縛変数の列を引数に取る再帰として定める。

代入を機械で実行するため、切断位置以上の指標を増加させる全域操作を

↑rc(vi)={vii<c,vi+ri≥c,↑rc(lP)=l(↑rc+1P),↑rc(a(P,Q))=a(↑rcP,↑rcQ)\begin{aligned} \uparrow_r^c(\mathsf v_i) &=\begin{cases} \mathsf v_i&i<c,\\ \mathsf v_{i+r}&i\ge c, \end{cases}\\ \uparrow_r^c(\mathsf lP)&=\mathsf l(\uparrow_r^{c+1}P),\\ \uparrow_r^c(\mathsf a(P,Q)) &=\mathsf a(\uparrow_r^cP,\uparrow_r^cQ) \end{aligned}

と定める。また、束縛子を一つ除きながら代入する全域操作を

sub⁡j(N,vi)={vii<j,Ni=j,vi−1i>j,sub⁡j(N,lP)=l(sub⁡j+1(↑10N,P)),sub⁡j(N,a(P,Q))=a(sub⁡j(N,P),sub⁡j(N,Q))\begin{aligned} \operatorname{sub}_j(N,\mathsf v_i) &=\begin{cases} \mathsf v_i&i<j,\\ N&i=j,\\ \mathsf v_{i-1}&i>j, \end{cases}\\ \operatorname{sub}_j(N,\mathsf lP) &=\mathsf l\bigl(\operatorname{sub}_{j+1}(\uparrow_1^0N,P)\bigr),\\ \operatorname{sub}_j(N,\mathsf a(P,Q)) &=\mathsf a(\operatorname{sub}_j(N,P),\operatorname{sub}_j(N,Q)) \end{aligned}

と定める。最上位の束縛変数への代入をSubTop⁡(N,P)=sub⁡0(N,P)\operatorname{SubTop}(N,P)=\operatorname{sub}_0(N,P)と書く。

代入の再帰は抽象を通るたびに切断位置を一つ上げるので、以下の議論では、切断位置が等しい二つのシフトを合成した結果を一つのシフトで書き直す等式を繰り返し用いる。先にこの等式を示す。

補題 6.2. 全ての de Bruijn 項PPと全ての非負整数b,cb,cについて

↑1b(↑cbP)=↑c+1bP\uparrow_1^b\bigl(\uparrow_c^bP\bigr)=\uparrow_{c+1}^bP

である。

証明.↑rc\uparrow_r^cの再帰呼出しは真部分項に対して行われるので、↑rc\uparrow_r^cは有限な de Bruijn 項上の全域関数である。以下、ccを固定し、全てのbbについて同時に成り立つことをPPの構造に関する帰納法で示す。抽象の場合に切断位置を一つ上げた帰納法の仮定を用いるため、bbを全称化した形で帰納法を回す必要がある。

P=viP=\mathsf v_iの場合。i<bi<bならば↑cb(vi)=vi\uparrow_c^b(\mathsf v_i)=\mathsf v_iであり、i<bi<bであるから↑1b(vi)=vi\uparrow_1^b(\mathsf v_i)=\mathsf v_iである。一方↑c+1b(vi)=vi\uparrow_{c+1}^b(\mathsf v_i)=\mathsf v_iであるから、両辺は一致する。i≥bi\ge bならば↑cb(vi)=vi+c\uparrow_c^b(\mathsf v_i)=\mathsf v_{i+c}であり、c≥0c\ge 0からi+c≥bi+c\ge bであるので↑1b(vi+c)=vi+c+1\uparrow_1^b(\mathsf v_{i+c})=\mathsf v_{i+c+1}である。一方↑c+1b(vi)=vi+c+1\uparrow_{c+1}^b(\mathsf v_i)=\mathsf v_{i+c+1}であるから、両辺は一致する。

P=a(P1,P2)P=\mathsf a(P_1,P_2)の場合。シフトは適用について準同型であるから

↑1b(↑cba(P1,P2))=a(↑1b(↑cbP1), ↑1b(↑cbP2))\uparrow_1^b\bigl(\uparrow_c^b\mathsf a(P_1,P_2)\bigr) =\mathsf a\bigl(\uparrow_1^b(\uparrow_c^bP_1),\ \uparrow_1^b(\uparrow_c^bP_2)\bigr)

である。P1P_1とP2P_2に対する帰納法の仮定を同じbbで用いると、右辺はa(↑c+1bP1,↑c+1bP2)=↑c+1ba(P1,P2)\mathsf a(\uparrow_{c+1}^bP_1,\uparrow_{c+1}^bP_2)=\uparrow_{c+1}^b\mathsf a(P_1,P_2)に等しい。

P=lP0P=\mathsf lP_0の場合。定義により

↑1b(↑cb(lP0))=↑1b(l(↑cb+1P0))=l(↑1b+1(↑cb+1P0))\uparrow_1^b\bigl(\uparrow_c^b(\mathsf lP_0)\bigr) =\uparrow_1^b\bigl(\mathsf l(\uparrow_c^{b+1}P_0)\bigr) =\mathsf l\bigl(\uparrow_1^{b+1}(\uparrow_c^{b+1}P_0)\bigr)

である。P0P_0に対する帰納法の仮定をb+1b+1で用いると、右辺はl(↑c+1b+1P0)=↑c+1b(lP0)\mathsf l\bigl(\uparrow_{c+1}^{b+1}P_0\bigr)=\uparrow_{c+1}^b(\mathsf lP_0)に等しい。

変数、適用、抽象の三つの構文形を尽くしたので、主張が成り立つ。▨

補題 6.3. 上のシフト、sub⁡\operatorname{sub}、SubTop⁡\operatorname{SubTop}は有限な de Bruijn 項上の全域関数である。さらに、次が成り立つ。

  1. WF⁡d+c(P)\operatorname{WF}_{d+c}(P)ならばWF⁡d+r+c(↑rcP)\operatorname{WF}_{d+r+c}(\uparrow_r^cP)である。
  2. WF⁡d(N)\operatorname{WF}_d(N)かつWF⁡d+c+1(P)\operatorname{WF}_{d+c+1}(P)ならば WF⁡d+c(sub⁡c(↑c0N,P))\operatorname{WF}_{d+c} \bigl(\operatorname{sub}_c(\uparrow_c^0N,P)\bigr) である。
  3. 特に、WF⁡d(N)\operatorname{WF}_d(N)かつWF⁡d+1(P)\operatorname{WF}_{d+1}(P)ならばWF⁡d(SubTop⁡(N,P))\operatorname{WF}_d(\operatorname{SubTop}(N,P))である。

証明. 各操作の再帰呼出しは真部分項に対して行われるので、有限構文木の構造に関する帰納法から全域性が従う。

(1)をPPの構造に関する帰納法で示す。変数の場合、i<ci<cなら指標は変わらずi<c≤d+r+ci<c\le d+r+cである。i≥ci\ge cなら、仮定i<d+ci<d+cからi+r<d+r+ci+r<d+r+cを得る。適用では二つの帰納法の仮定を用いる。抽象では深さと切断位置をともに一つ増やし、帰納法の仮定を本体へ適用する。

(2)もPPの構造に関する帰納法で示す。P=viP=\mathsf v_iとする。i<ci<cではvi\mathsf v_iが深さd+cd+cでも整形式である。i=ci=cでは結果が↑c0N\uparrow_c^0Nであり、(1)からWF⁡d+c(↑c0N)\operatorname{WF}_{d+c}(\uparrow_c^0N)を得る。i>ci>cではi<d+c+1i<d+c+1からi−1<d+ci-1<d+cを得る。適用の場合は二つの部分項へ帰納法の仮定を適用する。抽象の場合には、補題 6.2をb=0b=0として用いると

↑10(↑c0N)=↑c+10N\uparrow_1^0(\uparrow_c^0N)=\uparrow_{c+1}^0N

である。切断位置をc+1c+1として本体へ帰納法の仮定を適用すると、結果は深さd+c+1d+c+1で整形式となる。(3)は(2)でc=0c=0とした場合である。▨

7 名前付き項から de Bruijn 項への翻訳

de Bruijn 項は変数名をもたないので、名前付き項との対応を与えなければ、前節の操作を§E15.8 定義 2.4の代入と結び付けることができない。以下では、変数出現から対応する束縛子までに通過する抽象の個数を指標とする翻訳を、束縛変数の列を引数に取る再帰として定め、翻訳がアルファ同値と代入を保存することを証明する。

定義 7.1. 束縛文脈 (binding context) とは、変数の有限列Ξ=(y0,…,yd−1)\Xi=(y_0,\ldots,y_{d-1})である。同じ変数が二回以上現れてよい。長さを∣Ξ∣=d|\Xi|=dと書き、空列をε\varepsilon、長さ11の列を(x)(x)、先頭への追加をx⋅Ξx\cdot\Xi、二つの列の連結をΔΞ\Delta\Xiと書く。Ξ\Xiに現れる変数の集合をset⁡(Ξ)\operatorname{set}(\Xi)と書く。x∈set⁡(Ξ)x\in\operatorname{set}(\Xi)のとき、

idx⁡Ξ(x)=min⁡{i<d∣yi=x}\operatorname{idx}_\Xi(x)=\min\{i<d\mid y_i=x\}

と定める。最小の添字を取るので、同じ変数を束縛する抽象が入れ子になっている場合には、最も内側の束縛子が選ばれる。

名前付き項MMと束縛文脈Ξ\Xiに対する de Bruijn 項dB⁡Ξ(M)\operatorname{dB}_\Xi(M)を、MMの構文に関する再帰によって

dB⁡Ξ(x)=vidx⁡Ξ(x)(x∈set⁡(Ξ)),dB⁡Ξ(λx.M0)=l(dB⁡x⋅Ξ(M0)),dB⁡Ξ(M1M2)=a(dB⁡Ξ(M1),dB⁡Ξ(M2))\begin{aligned} \operatorname{dB}_\Xi(x)&=\mathsf v_{\operatorname{idx}_\Xi(x)} &&(x\in\operatorname{set}(\Xi)),\\ \operatorname{dB}_\Xi(\lambda x.M_0) &=\mathsf l\bigl(\operatorname{dB}_{x\cdot\Xi}(M_0)\bigr),\\ \operatorname{dB}_\Xi(M_1M_2) &=\mathsf a\bigl(\operatorname{dB}_\Xi(M_1),\operatorname{dB}_\Xi(M_2)\bigr) \end{aligned}

と定める。x∉set⁡(Ξ)x\notin\operatorname{set}(\Xi)である変数に対しては定めない。閉項MMについてはdB⁡(M)=dB⁡ε(M)\operatorname{dB}(M)=\operatorname{dB}_\varepsilon(M)と書く。

この再帰は、アルファ同値で商を取る前の代表元に対して定める。結果が代表元によらないことは補題 7.4で示す。

補題 7.2. 次の二つが成り立つ。

  1. FV⁡(M)⊆set⁡(Ξ)\operatorname{FV}(M)\subseteq\operatorname{set}(\Xi)かつ∣Ξ∣=d|\Xi|=dならば、dB⁡Ξ(M)\operatorname{dB}_\Xi(M)は定義され、WF⁡d(dB⁡Ξ(M))\operatorname{WF}_d\bigl(\operatorname{dB}_\Xi(M)\bigr)を満たす。
  2. 束縛文脈Ξ,Ξ′\Xi,\Xi'が、FV⁡(M)\operatorname{FV}(M)の各変数zzについてidx⁡Ξ(z)\operatorname{idx}_\Xi(z)とidx⁡Ξ′(z)\operatorname{idx}_{\Xi'}(z)をともに定義し、かつ二つの指標が等しいならば、dB⁡Ξ(M)=dB⁡Ξ′(M)\operatorname{dB}_\Xi(M)=\operatorname{dB}_{\Xi'}(M)である。

証明.(1)をMMの構造に関する帰納法で示す。M=zM=zの場合、z∈set⁡(Ξ)z\in\operatorname{set}(\Xi)であるからidx⁡Ξ(z)\operatorname{idx}_\Xi(z)が定義され、その値はdd未満である。したがってWF⁡d(vidx⁡Ξ(z))\operatorname{WF}_d(\mathsf v_{\operatorname{idx}_\Xi(z)})である。M=λu.M0M=\lambda u.M_0の場合、FV⁡(M0)⊆FV⁡(M)∪{u}⊆set⁡(u⋅Ξ)\operatorname{FV}(M_0)\subseteq\operatorname{FV}(M)\cup\{u\}\subseteq\operatorname{set}(u\cdot\Xi)であり、∣u⋅Ξ∣=d+1|u\cdot\Xi|=d+1である。本体に対する帰納法の仮定とWF⁡d(lP)  ⟺  WF⁡d+1(P)\operatorname{WF}_d(\mathsf lP)\iff\operatorname{WF}_{d+1}(P)から結論を得る。M=M1M2M=M_1M_2の場合、FV⁡(Mi)⊆FV⁡(M)\operatorname{FV}(M_i)\subseteq\operatorname{FV}(M)であるから、二つの帰納法の仮定を合わせる。

(2)もMMの構造に関する帰納法で示す。変数の場合は仮定そのものである。適用の場合は二つの帰納法の仮定を用いる。抽象λu.M0\lambda u.M_0の場合には、二つの文脈をu⋅Ξu\cdot\Xiとu⋅Ξ′u\cdot\Xi'へ延ばす。z∈FV⁡(M0)z\in\operatorname{FV}(M_0)とする。z=uz=uならば、最小の添字を取る規約により両方の指標が00である。z≠uz\ne uならばz∈FV⁡(M)z\in\operatorname{FV}(M)であり、

idx⁡u⋅Ξ(z)=1+idx⁡Ξ(z)=1+idx⁡Ξ′(z)=idx⁡u⋅Ξ′(z)\operatorname{idx}_{u\cdot\Xi}(z)=1+\operatorname{idx}_\Xi(z) =1+\operatorname{idx}_{\Xi'}(z)=\operatorname{idx}_{u\cdot\Xi'}(z)

である。本体に対する帰納法の仮定から結論を得る。▨

補題 7.3. 束縛文脈Δ,Ξ\Delta,\Xiと項NNが

FV⁡(N)⊆set⁡(Ξ),set⁡(Δ)∩FV⁡(N)=∅\operatorname{FV}(N)\subseteq\operatorname{set}(\Xi), \qquad \operatorname{set}(\Delta)\cap\operatorname{FV}(N)=\varnothing

を満たすならば、c=∣Δ∣c=|\Delta|として

dB⁡ΔΞ(N)=↑c0dB⁡Ξ(N)\operatorname{dB}_{\Delta\Xi}(N)=\uparrow_c^0\operatorname{dB}_\Xi(N)

である。

証明. 束縛文脈Θ\Theta(長さbb)を加えた次の主張を、NNの構造に関する帰納法で示す。

FV⁡(N)⊆set⁡(Θ)∪set⁡(Ξ),set⁡(Δ)∩(FV⁡(N)∖set⁡(Θ))=∅\operatorname{FV}(N)\subseteq\operatorname{set}(\Theta)\cup\operatorname{set}(\Xi), \qquad \operatorname{set}(\Delta)\cap\bigl(\operatorname{FV}(N)\setminus\operatorname{set}(\Theta)\bigr) =\varnothing

ならば

dB⁡ΘΔΞ(N)=↑cbdB⁡ΘΞ(N)\operatorname{dB}_{\Theta\Delta\Xi}(N) =\uparrow_c^b\operatorname{dB}_{\Theta\Xi}(N)

である。Θ=ε\Theta=\varepsilonとすれば補題の等式を得る。

N=zN=zとする。z∈set⁡(Θ)z\in\operatorname{set}(\Theta)ならば、両辺の内側の指標はidx⁡Θ(z)<b\operatorname{idx}_\Theta(z)<bであり、↑cb\uparrow_c^bはbb未満の指標を変えない。z∉set⁡(Θ)z\notin\operatorname{set}(\Theta)ならば、第2の仮定によりz∉set⁡(Δ)z\notin\operatorname{set}(\Delta)であり、第1の仮定によりz∈set⁡(Ξ)z\in\operatorname{set}(\Xi)である。左辺の指標はb+c+idx⁡Ξ(z)b+c+\operatorname{idx}_\Xi(z)であり、右辺では内側の指標b+idx⁡Ξ(z)b+\operatorname{idx}_\Xi(z)がbb以上であるから↑cb\uparrow_c^bがccを加える。両辺は一致する。

N=N1N2N=N_1N_2の場合には、↑cb\uparrow_c^bが適用について準同型であることと、二つの帰納法の仮定を用いる。

N=λu.N0N=\lambda u.N_0の場合には、Θ\Thetaをu⋅Θu\cdot\Thetaへ、bbをb+1b+1へ置き換える。FV⁡(N0)⊆FV⁡(N)∪{u}\operatorname{FV}(N_0)\subseteq\operatorname{FV}(N)\cup\{u\}であるから第1の仮定が保たれ、

FV⁡(N0)∖set⁡(u⋅Θ)⊆FV⁡(N)∖set⁡(Θ)\operatorname{FV}(N_0)\setminus\operatorname{set}(u\cdot\Theta) \subseteq\operatorname{FV}(N)\setminus\operatorname{set}(\Theta)

であるから第2の仮定も保たれる。↑cb(lP)=l(↑cb+1P)\uparrow_c^b(\mathsf lP)=\mathsf l(\uparrow_c^{b+1}P)と本体に対する帰納法の仮定から結論を得る。変数、適用、抽象の三つの構文形を尽くした。▨

補題 7.4. 次の二つが成り立つ。

  1. 項PPと変数x,yx,yがy∉Var⁡(P)∪{x}y\notin\operatorname{Var}(P)\cup\{x\}を満たし、束縛文脈Δ,Ξ\Delta,\Xiが x∉set⁡(Δ),y∉set⁡(Δ),FV⁡(P)⊆set⁡(Δ)∪{x}∪set⁡(Ξ)x\notin\operatorname{set}(\Delta), \qquad y\notin\operatorname{set}(\Delta), \qquad \operatorname{FV}(P)\subseteq\operatorname{set}(\Delta)\cup\{x\}\cup\operatorname{set}(\Xi) を満たすならば、 dB⁡Δ (x) Ξ(P)=dB⁡Δ (y) Ξ(ρx→y(P))\operatorname{dB}_{\Delta\,(x)\,\Xi}(P) =\operatorname{dB}_{\Delta\,(y)\,\Xi}\bigl(\rho_{x\to y}(P)\bigr) である。
  2. M≡αM′M\equiv_\alpha M'かつFV⁡(M)⊆set⁡(Ξ)\operatorname{FV}(M)\subseteq\operatorname{set}(\Xi)ならばdB⁡Ξ(M)=dB⁡Ξ(M′)\operatorname{dB}_\Xi(M)=\operatorname{dB}_\Xi(M')である。したがって、翻訳はアルファ同値類上の写像として定まる。

証明.(1)をPPの構造に関する帰納法で示す。c=∣Δ∣c=|\Delta|と書く。

P=xP=xの場合。ρx→y(x)=y\rho_{x\to y}(x)=yである。x∉set⁡(Δ)x\notin\operatorname{set}(\Delta)であるから左辺の指標はccであり、y∉set⁡(Δ)y\notin\operatorname{set}(\Delta)であるから右辺の指標もccである。

P=z≠xP=z\ne xの場合。ρx→y(z)=z\rho_{x\to y}(z)=zであり、y∉Var⁡(P)={z}y\notin\operatorname{Var}(P)=\{z\}からz≠yz\ne yである。z∈set⁡(Δ)z\in\operatorname{set}(\Delta)ならば両辺の指標はidx⁡Δ(z)\operatorname{idx}_\Delta(z)である。z∉set⁡(Δ)z\notin\operatorname{set}(\Delta)ならば、仮定によりz∈set⁡(Ξ)z\in\operatorname{set}(\Xi)であり、z≠xz\ne xとz≠yz\ne yから両辺の指標はともにc+1+idx⁡Ξ(z)c+1+\operatorname{idx}_\Xi(z)である。

P=P1P2P=P_1P_2の場合。ρx→y\rho_{x\to y}は適用について準同型であり、FV⁡(Pi)⊆FV⁡(P)\operatorname{FV}(P_i)\subseteq\operatorname{FV}(P)、y∉Var⁡(Pi)y\notin\operatorname{Var}(P_i)であるから、二つの帰納法の仮定を合わせる。

P=λx.P0P=\lambda x.P_0の場合。§E15.8 定義 2.1によりρx→y(λx.P0)=λx.P0\rho_{x\to y}(\lambda x.P_0)=\lambda x.P_0である。示すべき等式は

dB⁡x⋅Δ (x) Ξ(P0)=dB⁡x⋅Δ (y) Ξ(P0)\operatorname{dB}_{x\cdot\Delta\,(x)\,\Xi}(P_0) =\operatorname{dB}_{x\cdot\Delta\,(y)\,\Xi}(P_0)

である。z∈FV⁡(P0)z\in\operatorname{FV}(P_0)とする。z=xz=xならば両方の指標は00である。z≠xz\ne xならばz∈FV⁡(P)z\in\operatorname{FV}(P)であり、y∉Var⁡(P)y\notin\operatorname{Var}(P)からz≠yz\ne yである。z∈set⁡(Δ)z\in\operatorname{set}(\Delta)の場合は両方の指標が1+idx⁡Δ(z)1+\operatorname{idx}_\Delta(z)、そうでない場合は仮定によりz∈set⁡(Ξ)z\in\operatorname{set}(\Xi)であり両方の指標がc+2+idx⁡Ξ(z)c+2+\operatorname{idx}_\Xi(z)である。補題 7.2の補題 7.2 (2)から等式を得る。

P=λu.P0P=\lambda u.P_0かつu≠xu\ne xの場合。ρx→y(λu.P0)=λu.ρx→y(P0)\rho_{x\to y}(\lambda u.P_0)=\lambda u.\rho_{x\to y}(P_0)である。u∈BV⁡(P)⊆Var⁡(P)u\in\operatorname{BV}(P)\subseteq\operatorname{Var}(P)とy∉Var⁡(P)y\notin\operatorname{Var}(P)からu≠yu\ne yである。したがってΔ\Deltaをu⋅Δu\cdot\Deltaへ置き換えても第1と第2の仮定が保たれ、FV⁡(P0)⊆FV⁡(P)∪{u}\operatorname{FV}(P_0)\subseteq\operatorname{FV}(P)\cup\{u\}から第3の仮定も保たれる。本体に対する帰納法の仮定を抽象の翻訳の式へ入れると結論を得る。変数、適用、および二種類の抽象を尽くした。

(2)を示す。最初に、アルファ同値な項の自由変数集合が等しいことを確かめる。ρu→y\rho_{u\to y}の定義に関する構造帰納法により、y∉Var⁡(P)y\notin\operatorname{Var}(P)のとき

FV⁡(ρu→y(P))={(FV⁡(P)∖{u})∪{y}(u∈FV⁡(P)),FV⁡(P)(u∉FV⁡(P))\operatorname{FV}\bigl(\rho_{u\to y}(P)\bigr)= \begin{cases} \bigl(\operatorname{FV}(P)\setminus\{u\}\bigr)\cup\{y\}&(u\in\operatorname{FV}(P)),\\ \operatorname{FV}(P)&(u\notin\operatorname{FV}(P)) \end{cases}

である。したがって§E15.8 定義 2.2の改名生成規則の両辺の自由変数集合は、ともにFV⁡(P)∖{u}\operatorname{FV}(P)\setminus\{u\}である。項文脈の規則と同値関係の規則もこの性質を保つ。

M≡αM′M\equiv_\alpha M'の導出に関する帰納法を用いる。反射性と対称性の段階では帰納法の仮定と等号の性質を用いる。推移性の段階では、中間の項の自由変数集合がFV⁡(M)\operatorname{FV}(M)と等しいので、二つの帰納法の仮定を同じΞ\Xiについて適用することができる。

改名生成規則を項文脈の中で一回用いる段階を、改名位置から根までの一穴項文脈の構造に関する帰納法で示す。文脈が空の場合、比較する二項はλu.P\lambda u.Pとλy.ρu→y(P)\lambda y.\rho_{u\to y}(P)であり、y∉Var⁡(P)∪{u}y\notin\operatorname{Var}(P)\cup\{u\}である。FV⁡(λu.P)⊆set⁡(Ξ)\operatorname{FV}(\lambda u.P)\subseteq\operatorname{set}(\Xi)からFV⁡(P)⊆{u}∪set⁡(Ξ)\operatorname{FV}(P)\subseteq\{u\}\cup\operatorname{set}(\Xi)を得る。(1)をΔ=ε\Delta=\varepsilonとして用いると

dB⁡(u)Ξ(P)=dB⁡(y)Ξ(ρu→y(P))\operatorname{dB}_{(u)\Xi}(P) =\operatorname{dB}_{(y)\Xi}\bigl(\rho_{u\to y}(P)\bigr)

であり、抽象の翻訳の式から二項の翻訳が一致する。文脈がλv.C[ ]\lambda v.C[\,]の場合には、束縛文脈をv⋅Ξv\cdot\Xiへ延ばして帰納法の仮定を用いる。文脈がC[ ]QC[\,]QまたはQC[ ]QC[\,]の場合には、変化しない側の翻訳が等しく、変化する側へ帰納法の仮定を用いる。空文脈、抽象の本体、適用の作用素、適用の引数は一穴項文脈の全ての構成法であるから、場合分けは尽くされている。▨

命題 7.5. 束縛文脈Ξ\Xi、変数xx、項M,NM,Nが

FV⁡(M)⊆{x}∪set⁡(Ξ),FV⁡(N)⊆set⁡(Ξ)\operatorname{FV}(M)\subseteq\{x\}\cup\operatorname{set}(\Xi), \qquad \operatorname{FV}(N)\subseteq\operatorname{set}(\Xi)

を満たすならば、

dB⁡Ξ(M[x:=N])=SubTop⁡(dB⁡Ξ(N),dB⁡x⋅Ξ(M))\operatorname{dB}_\Xi\bigl(M[x:=N]\bigr) =\operatorname{SubTop}\bigl(\operatorname{dB}_\Xi(N), \operatorname{dB}_{x\cdot\Xi}(M)\bigr)

である。とくに、λx.M\lambda x.MとVVがともに閉項でありdB⁡(λx.M)=lR\operatorname{dB}(\lambda x.M)=\mathsf lRならば、

SubTop⁡(dB⁡(V),R)=dB⁡(M[x:=V])\operatorname{SubTop}\bigl(\operatorname{dB}(V),R\bigr) =\operatorname{dB}\bigl(M[x:=V]\bigr)

である。

証明.補題 7.4 (2)により、右辺はMMのアルファ同値類だけに依存する。左辺も、§E15.8 命題 2.5によりM[x:=N]M[x:=N]のアルファ同値類がMMのアルファ同値類だけで定まるので、MMの代表元によらない。したがって、MMの代表元として、束縛変数が全て{x}∪FV⁡(N)\{x\}\cup\operatorname{FV}(N)の外にあるものを選んでよい。各束縛子の変数を、有限集合Var⁡(M)∪Var⁡(N)∪{x}\operatorname{Var}(M)\cup\operatorname{Var}(N)\cup\{x\}の外の相異なる変数へ内側から順に改名すれば、そのような代表元が得られる。この代表元では、§E15.8 定義 2.4の再帰が改名を必要とせず、抽象については(λu.M0)[x:=N]=λu.(M0[x:=N])(\lambda u.M_0)[x:=N]=\lambda u.\bigl(M_0[x:=N]\bigr)である。また、MMの部分項の束縛変数も同じ条件を満たす。

次の一般化した主張を、MMの構造に関する帰納法で示す。束縛文脈Δ\Delta(長さcc)とΞ\Xiが

x∉set⁡(Δ),set⁡(Δ)∩FV⁡(N)=∅,x\notin\operatorname{set}(\Delta), \qquad \operatorname{set}(\Delta)\cap\operatorname{FV}(N)=\varnothing,FV⁡(M)⊆set⁡(Δ)∪{x}∪set⁡(Ξ),FV⁡(N)⊆set⁡(Ξ)\operatorname{FV}(M)\subseteq\operatorname{set}(\Delta)\cup\{x\}\cup\operatorname{set}(\Xi), \qquad \operatorname{FV}(N)\subseteq\operatorname{set}(\Xi)

を満たすならば、

dB⁡ΔΞ(M[x:=N])=sub⁡c(↑c0D,dB⁡Δ (x) Ξ(M)),D=dB⁡Ξ(N)\operatorname{dB}_{\Delta\Xi}\bigl(M[x:=N]\bigr) =\operatorname{sub}_c\bigl(\uparrow_c^0D, \operatorname{dB}_{\Delta\,(x)\,\Xi}(M)\bigr), \qquad D=\operatorname{dB}_\Xi(N)

である。Δ=ε\Delta=\varepsilonとすれば命題の第1の等式を得る。

M=xM=xの場合。左辺はdB⁡ΔΞ(N)\operatorname{dB}_{\Delta\Xi}(N)である。x∉set⁡(Δ)x\notin\operatorname{set}(\Delta)であるからidx⁡Δ (x) Ξ(x)=c\operatorname{idx}_{\Delta\,(x)\,\Xi}(x)=cであり、右辺はsub⁡c(↑c0D,vc)=↑c0D\operatorname{sub}_c(\uparrow_c^0D,\mathsf v_c)=\uparrow_c^0Dである。補題 7.3により両辺は一致する。

M=z≠xM=z\ne xの場合。左辺はdB⁡ΔΞ(z)\operatorname{dB}_{\Delta\Xi}(z)である。z∈set⁡(Δ)z\in\operatorname{set}(\Delta)ならば、二つの束縛文脈における指標はともにidx⁡Δ(z)<c\operatorname{idx}_\Delta(z)<cであり、sub⁡c\operatorname{sub}_cはこれを変えない。z∉set⁡(Δ)z\notin\operatorname{set}(\Delta)ならばz∈set⁡(Ξ)z\in\operatorname{set}(\Xi)であり、idx⁡Δ (x) Ξ(z)=c+1+idx⁡Ξ(z)>c\operatorname{idx}_{\Delta\,(x)\,\Xi}(z)=c+1+\operatorname{idx}_\Xi(z)>cであるから、sub⁡c\operatorname{sub}_cは指標を一つ減らしてc+idx⁡Ξ(z)c+\operatorname{idx}_\Xi(z)とする。これはidx⁡ΔΞ(z)\operatorname{idx}_{\Delta\Xi}(z)に等しい。

M=M1M2M=M_1M_2の場合。代入、翻訳、sub⁡c\operatorname{sub}_cのいずれも適用について準同型であるから、二つの帰納法の仮定を合わせる。

M=λu.M0M=\lambda u.M_0の場合。代表元の選び方によりu≠xu\ne xかつu∉FV⁡(N)u\notin\operatorname{FV}(N)であり、M[x:=N]=λu.(M0[x:=N])M[x:=N]=\lambda u.\bigl(M_0[x:=N]\bigr)である。左辺はl dB⁡u⋅ΔΞ(M0[x:=N])\mathsf l\,\operatorname{dB}_{u\cdot\Delta\Xi}\bigl(M_0[x:=N]\bigr)である。右辺は

sub⁡c(↑c0D,l dB⁡u⋅Δ (x) Ξ(M0))=l sub⁡c+1(↑10↑c0D,dB⁡u⋅Δ (x) Ξ(M0))\operatorname{sub}_c\Bigl(\uparrow_c^0D, \mathsf l\,\operatorname{dB}_{u\cdot\Delta\,(x)\,\Xi}(M_0)\Bigr) =\mathsf l\,\operatorname{sub}_{c+1}\Bigl(\uparrow_1^0\uparrow_c^0D, \operatorname{dB}_{u\cdot\Delta\,(x)\,\Xi}(M_0)\Bigr)

である。補題 6.2をb=0b=0として用いると↑10(↑c0D)=↑c+10D\uparrow_1^0(\uparrow_c^0D)=\uparrow_{c+1}^0Dであるから、右辺はl sub⁡c+1(↑c+10D,dB⁡u⋅Δ (x) Ξ(M0))\mathsf l\,\operatorname{sub}_{c+1}\bigl(\uparrow_{c+1}^0D,\operatorname{dB}_{u\cdot\Delta\,(x)\,\Xi}(M_0)\bigr)である。束縛文脈u⋅Δu\cdot\Deltaはx∉set⁡(u⋅Δ)x\notin\operatorname{set}(u\cdot\Delta)とset⁡(u⋅Δ)∩FV⁡(N)=∅\operatorname{set}(u\cdot\Delta)\cap\operatorname{FV}(N)=\varnothingを満たし、FV⁡(M0)⊆FV⁡(M)∪{u}\operatorname{FV}(M_0)\subseteq\operatorname{FV}(M)\cup\{u\}である。したがって、M0M_0とu⋅Δu\cdot\Deltaに対する帰納法の仮定が両辺を一致させる。

変数、適用、抽象の三つの構文形を尽くしたので、一般化した主張が成り立つ。第2の等式は、λx.M\lambda x.MとVVが閉項の場合にΞ=ε\Xi=\varepsilonとし、翻訳の抽象に関する式からR=dB⁡(x)(M)R=\operatorname{dB}_{(x)}(M)であることを用いたものである。▨

8 ラムダ計算から Turing 機械へ

de Bruijn 項の値をlP\mathsf lPとする。閉項上の一段評価を、次の部分関数として固定する。

定義 8.1. 閉 de Bruijn 項DDに対する部分関数Step⁡v(D)\operatorname{Step}_v(D) (one-step call-by-value evaluation function) を、値では未定義とし、値でない場合には次の規則で定める。

  1. D=a(P,Q)D=\mathsf a(P,Q)かつPPが値でない場合には、 Step⁡v(D)=a(Step⁡v(P),Q)\operatorname{Step}_v(D) =\mathsf a(\operatorname{Step}_v(P),Q) とする。
  2. D=a(lR,Q)D=\mathsf a(\mathsf lR,Q)かつQQが値でない場合には、 Step⁡v(D)=a(lR,Step⁡v(Q))\operatorname{Step}_v(D) =\mathsf a(\mathsf lR,\operatorname{Step}_v(Q)) とする。
  3. D=a(lR,Q)D=\mathsf a(\mathsf lR,Q)かつQQが値である場合には、 Step⁡v(D)=SubTop⁡(Q,R)\operatorname{Step}_v(D)=\operatorname{SubTop}(Q,R) とする。

各再帰呼出しは真部分項に対して行う。したがって、閉項DDが値でなければ、三規則のうちちょうど一つが適用される。

前節の翻訳により、この部分関数は名前付き項の一段評価と対応する。

補題 8.2.MMを閉じた名前付き項とする。

  1. MMが値であることと、dB⁡(M)\operatorname{dB}(M)がlP\mathsf lPの形であることは同値である。
  2. MMが値ならばStep⁡v(dB⁡(M))\operatorname{Step}_v(\operatorname{dB}(M))は定義されない。MMが値でなければ、補題 1.2の一意な次項M′M'について Step⁡v(dB⁡(M))=dB⁡(M′)\operatorname{Step}_v\bigl(\operatorname{dB}(M)\bigr)=\operatorname{dB}(M') である。

証明.(1)を示す。閉項は変数ではない。抽象の翻訳はl\mathsf lで始まり、適用の翻訳はa\mathsf aで始まる。定義 1.1の値は抽象であるから、両者は対応する。Step⁡v\operatorname{Step}_vは値で定義されないので、(2)の前半も従う。

(2)の後半をMMの構造に関する帰納法で示す。値でない閉項MMは閉じた適用PQPQであり、PPとQQも閉項である。翻訳は適用について準同型であるから、dB⁡(M)=a(dB⁡(P),dB⁡(Q))\operatorname{dB}(M)=\mathsf a(\operatorname{dB}(P),\operatorname{dB}(Q))である。

PPが値でない場合。補題 1.2の証明にある評価文脈[ ]Q[\,]QによりM′=P′QM'=P'Qであり、P′P'はPPの一意な次項である。(1)によりdB⁡(P)\operatorname{dB}(P)は値ではないので、定義 8.1 (1)が適用され、Step⁡v(dB⁡(M))=a(Step⁡v(dB⁡(P)),dB⁡(Q))\operatorname{Step}_v(\operatorname{dB}(M))=\mathsf a\bigl(\operatorname{Step}_v(\operatorname{dB}(P)),\operatorname{dB}(Q)\bigr)である。PPに対する帰納法の仮定からStep⁡v(dB⁡(P))=dB⁡(P′)\operatorname{Step}_v(\operatorname{dB}(P))=\operatorname{dB}(P')であり、右辺はdB⁡(P′Q)\operatorname{dB}(P'Q)に等しい。

PPが値でQQが値でない場合。P=λx.M0P=\lambda x.M_0であるからdB⁡(P)=lR\operatorname{dB}(P)=\mathsf lRの形であり、dB⁡(Q)\operatorname{dB}(Q)は値ではない。評価文脈P[ ]P[\,]によりM′=PQ′M'=PQ'である。定義 8.1 (2)とQQに対する帰納法の仮定から結論を得る。

PPとQQがともに値の場合。P=λx.M0P=\lambda x.M_0であり、根のβ基の縮約によりM′=M0[x:=Q]M'=M_0[x:=Q]である。dB⁡(P)=lR\operatorname{dB}(P)=\mathsf lRとすると、定義 8.1 (3)によりStep⁡v(dB⁡(M))=SubTop⁡(dB⁡(Q),R)\operatorname{Step}_v(\operatorname{dB}(M))=\operatorname{SubTop}\bigl(\operatorname{dB}(Q),R\bigr)である。λx.M0\lambda x.M_0とQQは閉項であるから、命題 7.5の命題 7.5の第2の等式により、これはdB⁡(M0[x:=Q])\operatorname{dB}(M_0[x:=Q])に等しい。三つの場合は補題 1.2の場合分けと一致し、互いに排他的である。▨

補題 8.3. 符号化された閉じた de Bruijn 項DDを入力として、DDが値かどうかを判定し、値でなければ弱い値呼び評価の一意な次項Step⁡v(D)\operatorname{Step}_v(D)を出力する決定性多テープ Turing 機械を構成することができる。出力は再び閉じた整形式項である。

証明. 機械は入力を左から走査し、作業テープ上のスタックを用いて接頭辞符号を構文木へ復号する。同じ走査でWF⁡0\operatorname{WF}_0を検査することができる。作用子側から構文木を再帰的に下り、値の場合、作用子を一段評価する場合、引数を一段評価する場合、根のβ基を縮約する場合を判定する。再帰的探索は毎回真部分木へ進むので有限回で終了する。根のβ基に達した場合には、別の作業テープ上で↑\uparrowとsub⁡\operatorname{sub}の構造再帰を実行する。指標は単項表現の11の個数として加算、比較、1の減算を有限走査で実行することができる。補題 6.3により代入は全域で整形式を保存する。

閉じた de Bruijn 項が値でなければ、定義 8.1の三規則のうちちょうど一つが適用され、その右辺は真部分項に対する再帰とSubTop⁡\operatorname{SubTop}だけを用いる。したがって、機械の出力はStep⁡v\operatorname{Step}_vの値そのものである。この出力が名前付き項の弱い値呼び一段評価と一致することは、補題 8.2が与える。構文木を接頭辞符号へ再符号化すれば、所要の多テープ機械を得る。▨

数値出力を判定するため、正準数値の de Bruijn 項を記述する。

定義 8.4 (値呼び Church 数の de Bruijn 符号).

C0=l(lv0),Cn+1=l(l(a(v1,a(a(Cn,v1),v0)))).\begin{aligned} C_0&=\mathsf l(\mathsf l\mathsf v_0),\\ C_{n+1} &=\mathsf l\bigl(\mathsf l( \mathsf a(\mathsf v_1, \mathsf a(\mathsf a(C_n,\mathsf v_1),\mathsf v_0)) )\bigr). \end{aligned}

この族を 値呼び Church 数の de Bruijn 符号 (de Bruijn encoding of a call-by-value Church numeral) という。

CnC_nがcn\mathbf c_nの翻訳であることを確かめる。

補題 8.5. 全てのn∈Nn\in\mathbb NについてdB⁡(cn)=Cn\operatorname{dB}(\mathbf c_n)=C_nである。

証明. 最初に、WF⁡c(P)\operatorname{WF}_c(P)ならば↑rcP=P\uparrow_r^cP=PであることをPPの構造に関する帰納法で確かめる。変数ではWF⁡c\operatorname{WF}_cから指標がcc未満であり、シフトはこれを変えない。適用では二つの部分項へ帰納法の仮定を用いる。抽象では、WF⁡c+1\operatorname{WF}_{c+1}を満たす本体へ切断位置c+1c+1の帰納法の仮定を用いる。

nnに関する帰納法で主張を示す。c0=λf.λx.x\mathbf c_0=\lambda f.\lambda x.xであり、束縛文脈(x,f)(x,f)においてidx⁡(x)=0\operatorname{idx}(x)=0であるから

dB⁡(c0)=l(l v0)=C0\operatorname{dB}(\mathbf c_0)=\mathsf l\bigl(\mathsf l\,\mathsf v_0\bigr)=C_0

である。cn+1=λf.λx.f(cn f x)\mathbf c_{n+1}=\lambda f.\lambda x.f(\mathbf c_n\,f\,x)であり、束縛文脈(x,f)(x,f)においてidx⁡(f)=1\operatorname{idx}(f)=1、idx⁡(x)=0\operatorname{idx}(x)=0であるから

dB⁡(cn+1)=l(l(a(v1,a(a(dB⁡(x,f)(cn),v1),v0))))\operatorname{dB}(\mathbf c_{n+1}) =\mathsf l\Bigl(\mathsf l\bigl( \mathsf a(\mathsf v_1, \mathsf a(\mathsf a(\operatorname{dB}_{(x,f)}(\mathbf c_n),\mathsf v_1),\mathsf v_0)) \bigr)\Bigr)

である。cn\mathbf c_nは閉項であるから、補題 7.3をΔ=(x,f)\Delta=(x,f)、Ξ=ε\Xi=\varepsilonとして用いるとdB⁡(x,f)(cn)=↑20dB⁡(cn)\operatorname{dB}_{(x,f)}(\mathbf c_n)=\uparrow_2^0\operatorname{dB}(\mathbf c_n)である。帰納法の仮定によりdB⁡(cn)=Cn\operatorname{dB}(\mathbf c_n)=C_nであり、補題 7.2 (1)によりWF⁡0(Cn)\operatorname{WF}_0(C_n)である。したがって↑20Cn=Cn\uparrow_2^0C_n=C_nであり、上の右辺は定義 8.4のCn+1C_{n+1}に一致する。▨

補題 8.6. 有限 de Bruijn 項DDの符号を入力として停止する決定性多テープ Turing 機械が存在する。この機械は、あるn∈Nn\in\mathbb NについてD=CnD=C_nであるとき、かつそのときに限り受理状態で停止し、出力テープへ単項表現1n1^nを残す。DDがどのCnC_nとも一致しない場合には、拒否状態で停止する。

証明. 機械は接頭辞符号を一回走査して有限構文木を復号し、符号が不正ならば拒否する。復号された木に対して、まずl(lv0)\mathsf l(\mathsf l\mathsf v_0)と一致するかを調べる。一致すれば空の単項列を出力して受理する。

l(lv0)\mathsf l(\mathsf l\mathsf v_0)と一致しない木に対しては、

l(l(a(v1,a(a(R,v1),v0))))\mathsf l\bigl(\mathsf l( \mathsf a(\mathsf v_1, \mathsf a(\mathsf a(R,\mathsf v_1),\mathsf v_0)) )\bigr)

という値呼び Church 数の再帰形を調べる。値呼び Church 数の再帰形でなければ拒否する。値呼び Church 数の再帰形であれば、作業テープの単項カウンタへ11を一つ加え、真部分項RRに同じ検査を行う。

各再帰呼出しは真部分項へ進むので、有限構文木に対する検査は有限回で止まる。Cn+1C_{n+1}の再帰定義に関する帰納法により、機械はCnC_nを受理して単項列1n1^nを出力する。逆に、機械が受理するならば、基底形l(lv0)\mathsf l(\mathsf l\mathsf v_0)と、基底形に到達するまでに繰り返し確認した値呼び Church 数の再帰形から、同じ帰納法により入力はただ一つのCnC_nである。▨

定理 8.7. 部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nを強く表現する閉項FFから、ffを計算する Turing 機械MFM_Fを構成することができる。ラムダ評価がcn\mathbf c_nで停止する場合にはMFM_Fは単項表現のnnを出力して停止し、ラムダ評価が無限ならばMFM_Fも停止しない。

証明.定義 7.1の翻訳を用いてdB⁡(F)\operatorname{dB}(F)を作り、その二進符号を機械の有限制御へ固定する。入力された単項表現x1,…,xkx_1,\ldots,x_kから定義 8.4のCx1,…,CxkC_{x_1},\ldots,C_{x_k}を作る。補題 8.5によりCxi=dB⁡(cxi)C_{x_i}=\operatorname{dB}(\mathbf c_{x_i})であり、翻訳は適用について準同型であるから、これらをa\mathsf aで左結合に組んだ項はdB⁡(F cx1⋯cxk)\operatorname{dB}(F\,\mathbf c_{x_1}\cdots\mathbf c_{x_k})である。この項は補題 7.2 (1)により閉じた整形式項である。機械は補題 8.3の一段機械を反復する。補題 8.2により、反復の各段は名前付き項の一段評価と対応し、第ss段の項はF cx1⋯cxkF\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}からss段評価した閉項の翻訳である。

現在項が値ならば、補題 8.6の正準数値判定を行う。CnC_nならnnを単項表現で出力して停止し、正準数値でない値なら無限ループへ入る。入力符号の破損または整形式でない途中項に対しても、防御的に無限ループへ入るものとする。強く表現する項から開始した計算では、入力符号の破損も整形式でない途中項も生じない。

f(x⃗)=nf(\vec x)=nならば、強い表現により有限回の一段評価後にcn\mathbf c_nへ達し、対応する翻訳はCnC_nである。一段機械と数値判定は各回有限時間で終了するため、模倣機械は単項表現のnnを出力して停止する。f(x⃗)↑f(\vec x)\mathord\uparrowならば、ラムダ評価には常に次の一段がある。模倣機械は各一段を有限時間で実行した後に次の反復へ進むので、有限段で停止せず、Turing 機械の計算も無限になる。

得られた多テープ機械へ§E15.7 補題 1.2を適用すると、停止時には出力テープ上の正準な単項表現だけを残し、発散時には発散を保つ一テープ機械へ変換することができる。▨

9 計算可能性の一致

定理 9.1. 自然数上の部分関数ffについて、次の二条件は同値である。

  1. ffは§E15.7 定義 1.1の意味で部分 Turing 計算可能である。
  2. ffは閉じた型なしラムダ項によって、弱い値呼び評価の下で強く表現される。

両方向の変換は、定義される入力では同じ自然数を返し、定義されない入力では無限計算を生じる。

証明.(1)⇒\Rightarrow(2)は定理 4.1である。(2)⇒\Rightarrow(1)は定理 8.7である。二つの定理はいずれも停止時の値と発散を個別に保存するため、部分関数の定義域と定義域上の値が一致する。▨

値呼びラムダ計算可能性と部分 Turing 計算可能性の同値性は、Church–Turing の提唱を一つの定理だけから導くものではない。形式化された二つの計算模型について、相互の模倣を数学的に証明した結果である。本記事の結論は、閉項、正準 Church 数、左から右への弱い値呼び評価という明示した条件に依存する。強い評価や名前呼び評価を扱う場合には、評価規則と発散保存の証明を別に与える必要がある。

10 演習

問題 10.1.

  1. If F (λd.Ω) (λd.c2)\mathsf{If}\,\mathsf F\,(\lambda d.\Omega)\,(\lambda d.\mathbf c_2)の評価列を示し、Ω\Omegaが評価されない理由を評価文脈から説明せよ。
  2. 原始再帰の構成で、初期対が⟨c0,cz0⟩v\langle\mathbf c_0,\mathbf c_{z_0}\rangle_vまで評価されなければ反復へ進めない理由を示せ。また、第jj段の不変条件から第j+1j+1段の不変条件を導け。
  3. 非有界最小化について、最小の零が存在する場合、途中で未定義値に達する場合、全ての値が正である場合の三つに分け、構成した項の停止または発散を示せ。
  4. WF⁡d(N)\operatorname{WF}_d(N)とWF⁡d+1(P)\operatorname{WF}_{d+1}(P)を仮定し、SubTop⁡(N,P)\operatorname{SubTop}(N,P)がWF⁡d\operatorname{WF}_dを満たすことを、変数の場合を三つに分けて示せ。
  5. 一段模倣機械が各回有限時間で停止することと、無限評価を模倣する機械が停止しないことを区別して説明せよ。
  6. 束縛文脈Ξ=(y,x)\Xi=(y,x)に対してdB⁡Ξ(λx.x y)\operatorname{dB}_\Xi(\lambda x.x\,y)を計算せよ。また、idx⁡Ξ\operatorname{idx}_\Xiが最小の添字を取る規約を採らない場合に、どの主張が成り立たなくなるかを述べよ。
  7. 直接模倣の遷移項について、D=LD=Lかつh=0h=0の場合に左側リストの二つの分枝のどちらが選ばれるかを述べ、得られる値が§E15.4 定義 1.2のC′C'を表すことを確かめよ。
解答 (演習の要点).
  1. 真偽値の選択後には第3引数の抽象だけが残り、I\mathsf Iへの適用によってc2\mathbf c_2を返す。Ω\Omegaは選ばれた評価文脈に入らない抽象の本体にある。
  2. Church 数の反復では、初期値が値でなければ外側の適用を縮約することができない。第jj段の対へStepx⃗\mathsf{Step}_{\vec x}を適用し、二つの射影、後続者、GGを順に評価すると、第j+1j+1段の対を得る。
  3. 最小の零が存在すれば有限個の正の検査後に真の分枝が候補を返す。最初の未定義値ではIsZero\mathsf{IsZero}の引数評価が発散する。全ての値が正なら、固定点の有限展開と次候補の検査が無限に続く。
  4. 変数指標iiが00より小さい場合は存在せず、i=0i=0ならNNを代入し、i>0i>0ならvi−1\mathsf v_{i-1}とする。変数指標がi=0i=0の場合の整形式性はWF⁡d(N)\operatorname{WF}_d(N)から、変数指標がi>0i>0の場合の整形式性はi<d+1i<d+1から従う。抽象の内部では同じ議論を切断位置を一つ増やして用いる。
  5. 一段処理は有限構文木の真部分木へ再帰するので毎回終了する。元の評価が無限なら、閉項の進行により各有限段階の後にも次項があり、模倣機械は有限回の反復では停止条件へ到達しない。
  6. 束縛文脈は(x,y,x)(x,y,x)へ延び、idx⁡(x)=0\operatorname{idx}(x)=0、idx⁡(y)=1\operatorname{idx}(y)=1であるからdB⁡Ξ(λx.x y)=l a(v0,v1)\operatorname{dB}_\Xi(\lambda x.x\,y)=\mathsf l\,\mathsf a(\mathsf v_0,\mathsf v_1)である。最小の添字を取らない規約では、内側の束縛子が同名の外側の束縛子を遮蔽することが指標に現れない。その場合、補題 7.2 (2)が成り立たず、これに依拠する補題 7.4のアルファ同値の不変性も失われる。
  7. h=0h=0では左側リストが[ ]v[\,]_vであるから、補題 5.2 (3)により空リストの分枝が選ばれ、Conf q′‾ Nil a′‾ (Rg w)\mathsf{Conf}\,\overline{q'}\,\mathsf{Nil}\,\overline{a'}\,(\mathsf{Rg}\,w)へ進む。§E15.4 定義 1.2ではh′=0h'=0かつT′(0)=a′T'(0)=a'であり、T′T'は他の位置でTTと一致する。したがって左側は長さ00、現在記号はT′(0)‾=a′‾\overline{T'(0)}=\overline{a'}、右側は変わらず、末尾が空白であるという条件もTTから引き継がれる。

▨

参考文献

  1. Henk Barendregt, The Lambda Calculus, Its Syntax and Semantics, revised ed., Studies in Logic and the Foundations of Mathematics 103, North-Holland, 1984.
  2. J. Roger Hindley and Jonathan P. Seldin, Lambda-Calculus and Combinators, an Introduction, 2nd ed., Cambridge University Press, Cambridge, 2008.Church 数、再帰関数の表現、および固定点結合子を参考にした。

前提記事