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 E V::=\lambda x.M,\qquad
E::=[\,]\mid E\,M\mid V\,E V ::= λ x . M , E ::= [ ] ∣ E M ∣ V E によって定める。弱い値呼び評価の一段関係⟶ v \longrightarrow_v ⟶ v は
E [ ( λ x . M ) V ] ⟶ v E [ M [ x : = V ] ] E[(\lambda x.M)V]\longrightarrow_v E[M[x:=V]] E [( λ x . M ) V ] ⟶ v E [ M [ x := V ]] だけからなる。抽象の本体では簡約しない。
有限回の評価で値V V V に達することをM ⟶ v ∗ V M\longrightarrow_v^*V M ⟶ v ∗ V と書く。全ての段階で次の一段が存在し、有限段で値に達しないことをM ⟶ v ∞ M\longrightarrow_v^\infty M ⟶ v ∞ と書く。
評価文脈の文法は、作用子を先に評価し、作用子が値になった後に引数を評価する順序を定める。
補題 1.2. 閉項M M M は、値であるか、一意な閉項N N N へM ⟶ v N M\longrightarrow_vN M ⟶ v N と一段評価されるかのいずれか一方を満たす。
証明. M M M の構造に関する帰納法を用いる。閉じた変数項は存在しない。抽象は値である。M = P Q M=P\,Q M = P Q とする。適用が閉項ならばP P P とQ Q Q も閉項である。P P P が値でなければ、帰納法の仮定によりP P P の次の一段が一意に定まり、評価文脈[ ] Q [\,]Q [ ] Q が全体の一段を一意に定める。P P P が値でQ Q Q が値でなければ、Q Q Q の次の一段と評価文脈P [ ] P[\,] P [ ] が全体の一段を一意に定める。P P P とQ Q Q がともに値ならば、P = λ x . R P=\lambda x.R P = λ x . R であるから、根のβ基( λ x . R ) Q (\lambda x.R)Q ( λ x . R ) Q が一意な一段を与える。三つの場合は互いに排他的である。代入後の項が閉じていることは、閉項Q Q Q を閉項( λ x . R ) Q (\lambda x.R)Q ( λ x . R ) Q の束縛変数へ代入することから従う。▨
したがって、閉項の評価は停止して値を返すか、無限に評価を続けるかのいずれかであり、停止しない閉項が途中で行き詰まることはない。
2 値呼び Church 符号
弱い評価は抽象の本体を簡約しないため、通常の Church 数とβ \beta β 同値であるだけでは、停止時に同じ構文の数値を得ることができるとは限らない。本記事では、弱い評価に適した正準代表を再帰的に固定する。
定義 2.1. n ∈ N n\in\mathbb N n ∈ N に対する値呼び Church 数 (call-by-value Church numeral )c n \mathbf c_n c n を
c 0 = λ f . λ x . x , c n + 1 = λ f . λ x . f ( c n 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) c 0 = λ f . λ x . x , c n + 1 = λ f . λ x . f ( c n f x ) によって定める。
各c n \mathbf c_n c n は閉じた抽象であり、通常のλ f . λ x . f n x \lambda f.\lambda x.f^nx λ f . λ x . f n x とβ \beta β 同値である。以後、次の閉じた値を用いる。
定義 2.2 (値呼び基本符号). 以下の閉じた値の族を 値呼び基本符号 (call-by-value basic encoding ) という。
I = λ z . z , T = λ t . λ e . t , F = λ t . λ e . e , I f = λ b . λ u . λ v . b u v I , S u c c = λ n . λ f . λ x . f ( n f x ) , I s Z e r o = λ n . n ( λ z . F ) T , P a i r = λ a . λ b . λ p . p a b , F s t = λ p . p ( λ a . λ b . a ) , S n d = λ 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} I T If Succ IsZero Pair Fst = λ z . z , = λ t . λ e . t , = λb . λ u . λ v . b u v I , = λn . λ f . λ x . f ( n f x ) , = λn . n ( λ z . F ) T , = λa . λb . λ p . p a b , = λ p . p ( λa . λb . a ) , F Snd = λ t . λ e . e , = λ p . p ( λa . λb . b ) . 値A , B A,B A , B に対して
⟨ A , B ⟩ v = λ p . p A B \langle A,B\rangle_v=\lambda p.p\,A\,B ⟨ A , B ⟩ v = λ p . p A B と書く。I f \mathsf{If} If の第2引数と第3引数には、分枝の本体A , B A,B A , B をそれぞれλ d . A , λ d . B \lambda d.A,\lambda d.B λ d . A , λ d . B として渡す。変数d d d は本体に自由に現れないものとする。
分枝を抽象で包む理由は、選ばれなかった分枝を値呼び評価が先に計算することを防ぐためである。
補題 2.3. 全てのn ∈ N n\in\mathbb N n ∈ N と閉じた値A , B A,B A , B について、次の評価則が成り立つ。
S u c c c n ⟶ v ∗ c n + 1 , I s Z e r o c 0 ⟶ v ∗ T , I s Z e r o c n + 1 ⟶ v ∗ F , F s t ⟨ A , B ⟩ v ⟶ v ∗ A , S n d ⟨ A , B ⟩ v ⟶ v ∗ B , I f T ( λ d . A ) ( λ d . B ) ⟶ v ∗ A , I f 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} Succ c n IsZero c 0 Fst ⟨ A , B ⟩ v If T ( λ d . A ) ( λ d . B ) ⟶ v ∗ c n + 1 , ⟶ v ∗ T , ⟶ v ∗ A , ⟶ v ∗ A , IsZero c n + 1 Snd ⟨ A , B ⟩ v If F ( λ d . A ) ( λ d . B ) ⟶ v ∗ F , ⟶ v ∗ B , ⟶ v ∗ B . さらに、閉じた値S , W 0 , … , W n S,W_0,\ldots,W_n S , W 0 , … , W n がS W j ⟶ v ∗ W j + 1 S\,W_j\longrightarrow_v^*W_{j+1} S W j ⟶ v ∗ W j + 1 を0 ≤ j < n 0\le j<n 0 ≤ j < n について満たすならば、
c n S W 0 ⟶ v ∗ W n \mathbf c_n\,S\,W_0\longrightarrow_v^*W_n c n S W 0 ⟶ v ∗ W n である。
証明. S u c c c n \mathsf{Succ}\,\mathbf c_n Succ c n の根を一段評価するとλ f . λ x . f ( c n f x ) = c n + 1 \lambda f.\lambda x.f(\mathbf c_n\,f\,x)=\mathbf c_{n+1} λ f . λ x . f ( c n f x ) = c n + 1 を得る。射影の二式は、対を選択子へ適用して得られる。条件分岐では、真偽値が二つの分枝の一方を選んだ後、選ばれた抽象をI \mathsf I I へ適用する。選ばれなかった抽象の本体は評価されない。
反復則をn n n に関する帰納法で示す。n = 0 n=0 n = 0 ではc 0 S W 0 ⟶ v ∗ W 0 \mathbf c_0\,S\,W_0\longrightarrow_v^*W_0 c 0 S W 0 ⟶ v ∗ W 0 である。n n n の場合に成立すると仮定する。定義を二回展開すると
c n + 1 S W 0 ⟶ v ∗ S ( c n S W 0 ) ⟶ v ∗ S W n ⟶ v ∗ W n + 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} c n + 1 S W 0 ⟶ v ∗ S ( c n S W 0 ) ⟶ v ∗ S W n ⟶ v ∗ W n + 1 となる。中央の評価では値呼び規則が引数c n S W 0 \mathbf c_n\,S\,W_0 c n S W 0 を先に値W n W_n W n まで評価する。帰納法により反復則を得る。
I s Z e r o c 0 \mathsf{IsZero}\,\mathbf c_0 IsZero c 0 はc 0 ( λ z . F ) T \mathbf c_0(\lambda z.\mathsf F)\mathsf T c 0 ( λ z . F ) T へ進み、T \mathsf T T を返す。c n + 1 \mathbf c_{n+1} c n + 1 の場合には、反復則においてS = λ z . F S=\lambda z.\mathsf F S = λ z . F 、W 0 = T W_0=\mathsf T W 0 = T 、W j = F ( 1 ≤ j ≤ n + 1 ) W_j=\mathsf F\ (1\le j\le n+1) W j = F ( 1 ≤ j ≤ n + 1 ) と置く。S W j S\,W_j S W j は全てF \mathsf F F へ評価されるので、I s Z e r o c n + 1 \mathsf{IsZero}\,\mathbf c_{n+1} IsZero c n + 1 はF \mathsf F F を返す。▨
例 2.4 (選ばれない分枝の発散). Ω = ( λ x . x x ) ( λ x . x x ) \Omega=(\lambda x.x\,x)(\lambda x.x\,x) Ω = ( λ x . x x ) ( λ x . x x ) とする。Ω ⟶ v ∞ \Omega\longrightarrow_v^\infty Ω ⟶ v ∞ であるが、
I f T ( λ d . c 0 ) ( λ d . Ω ) ⟶ v ∗ c 0 \mathsf{If}\,\mathsf T\,(\lambda d.\mathbf c_0)\,(\lambda d.\Omega)
\longrightarrow_v^*\mathbf c_0 If T ( λ d . c 0 ) ( λ d .Ω ) ⟶ v ∗ 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 = λ g . ( λ x . g ( λ u . x x u )) ( λ x . g ( λ u . x x u )) . Z \mathsf Z Z を 値呼び固定点結合子 (call-by-value fixed-point combinator ) という。閉じた値G G G に対して
A G = λ x . G ( λ u . x x u ) , R G = λ u . A G A G u A_G=\lambda x.G(\lambda u.x\,x\,u),\qquad
R_G=\lambda u.A_G\,A_G\,u A G = λ x . G ( λ u . x x u ) , R G = λ u . A G A G u と書く。
補題 2.6. 閉じた値G , V G,V G , V について
Z G ⟶ v ∗ G R G , R G V ⟶ v ∗ G R G V \mathsf Z\,G\longrightarrow_v^*G\,R_G,\qquad
R_G\,V\longrightarrow_v^*G\,R_G\,V Z G ⟶ v ∗ G R G , R G V ⟶ v ∗ G R G V である。
証明. G G G が値であるため、
Z G ⟶ v A G A G ⟶ v G ( λ u . A G A G u ) = G R G \mathsf Z\,G
\longrightarrow_v
A_G\,A_G
\longrightarrow_v
G(\lambda u.A_G\,A_G\,u)
=G\,R_G Z G ⟶ v A G A G ⟶ v G ( λ u . A G A G u ) = G R G となる。また、V V V が値であるため、
R G V ⟶ v A G A G V ⟶ v G R G V R_G\,V
\longrightarrow_v A_G\,A_G\,V
\longrightarrow_v G\,R_G\,V R G V ⟶ v A G A G V ⟶ v G R G V となる。各列は有限であり、G G G やV V V の本体を途中で評価しない。▨
3 部分ミュー再帰関数の表現
定義 3.1. 部分関数f : N k ⇀ N f\colon\mathbb N^k\rightharpoonup\mathbb N f : N k ⇀ N を考える。全てのx ⃗ = ( x 1 , … , x k ) \vec x=(x_1,\ldots,x_k) x = ( x 1 , … , x k ) について次の二条件を満たす閉項F F F が存在するとき、f f f は値呼びラムダ計算可能 (call-by-value lambda-computable ) であるという。
f ( x ⃗ ) = n f(\vec x)=n f ( x ) = n ならばF c x 1 ⋯ c x k ⟶ v ∗ c n F\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_n F c x 1 ⋯ c x k ⟶ v ∗ c n である。
f ( x ⃗ ) ↑ f(\vec x)\mathord\uparrow f ( x ) ↑ ならばF c x 1 ⋯ c x k ⟶ v ∞ F\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^\infty F c x 1 ⋯ c x k ⟶ v ∞ である。
二条件を満たすF F F がf f f を強く表現する (strongly represents ) という。
構成の帰納法では、正のアリティk k k をもつ関数の代表項を、閉じたk k k 引数のカリー化された値として選ぶ。数値をj < k j<k j < k 個だけ与えた部分適用は、残りの引数を受け取る抽象へ有限回で評価される。零アリティの代表は閉項とする。部分適用の不変条件により、合成では内側の部分計算が左から右へ順に強制される。
命題 3.2. 全ての部分ミュー再帰関数は値呼びラムダ計算可能である。有限な生成式から強く表現する閉項を構成することができ、アリティが正なら代表をカリー化された閉じた値として選ぶことができる。
証明では、初期関数、合成、原始再帰、非有界最小化の順に構成を与える。原始再帰では「現在の添字と現在値の対」を Church 数で反復更新し、非有界最小化では、候補の検査結果が得られた後に限って次の候補を評価する。
証明. 生成式の構造に関する帰納法を用いる。k k k 変数零関数、後続者関数、射影関数は、それぞれ
λ x 1 . ⋯ λ x k . c 0 , S u c c , λ x 1 . ⋯ λ x k . x i \lambda x_1.\cdots\lambda x_k.\mathbf c_0,\qquad
\mathsf{Succ},\qquad
\lambda x_1.\cdots\lambda x_k.x_i λ x 1 . ⋯ λ x k . c 0 , Succ , λ x 1 . ⋯ λ x k . x i によって表現される。補題 2.3 により出力は正準数値である。各項は必要な個数の先頭抽象をもち、部分適用に関する不変条件も満たす。
合成
h ( x ⃗ ) = f ( g 1 ( x ⃗ ) , … , g m ( x ⃗ ) ) h(\vec x)=f(g_1(\vec x),\ldots,g_m(\vec x)) h ( x ) = f ( g 1 ( x ) , … , g m ( x )) を考える。帰納法の仮定から得た代表をF , G 1 , … , G m F,G_1,\ldots,G_m F , G 1 , … , G m とし、
H = λ x 1 . ⋯ λ x k . F ( G 1 x ⃗ ) ⋯ ( G m x ⃗ ) H=\lambda x_1.\cdots\lambda x_k.
F(G_1\,\vec x)\cdots(G_m\,\vec x) H = λ x 1 . ⋯ λ x k . F ( G 1 x ) ⋯ ( G m x ) と定める。値呼び評価はG 1 x ⃗ , … , G m x ⃗ G_1\,\vec x,\ldots,G_m\,\vec x G 1 x , … , G m x を左から右へ数値まで評価する。G j x ⃗ G_j\,\vec x G j x が最初に発散する位置では、全体も同じ部分計算の内部で発散する。全ての内側の計算が停止した後には、F F F が得られた数値を順に受け取る。F F F の部分適用は残りの引数を待つ値へ停止するため、後続のG j G_j G j より先に余分な発散は生じない。全てのg j ( x ⃗ ) g_j(\vec x) g j ( x ) が定義されていてもf ( g 1 ( x ⃗ ) , … , g m ( x ⃗ ) ) f(g_1(\vec x),\ldots,g_m(\vec x)) f ( g 1 ( x ) , … , g m ( x )) が未定義ならば、最後にF F F の評価が発散する。したがって、合成は定義域と値をともに保存する。
原始再帰
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} h ( x , 0 ) h ( x , n + 1 ) = f ( x ) , = g ( x , n , h ( x , n )) を考える。F , G F,G F , G を帰納法の仮定から得た代表とし、x ⃗ \vec x x を自由変数として含む値
S t e p x ⃗ = λ p . P a i r ( S u c c ( F s t p ) ) ( G x ⃗ ( F s t p ) ( S n d p ) ) \mathsf{Step}_{\vec x}
=\lambda p.
\mathsf{Pair}\,
(\mathsf{Succ}(\mathsf{Fst}\,p))\,
(G\,\vec x\,(\mathsf{Fst}\,p)\,(\mathsf{Snd}\,p)) Step x = λ p . Pair ( Succ ( Fst p )) ( G x ( Fst p ) ( Snd p )) を用いる。代表を
H = λ x 1 . ⋯ λ x k . λ n . S n d ( n S t e p x ⃗ ( P a i r c 0 ( 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) H = λ x 1 . ⋯ λ x k . λn . Snd ( n Step x ( Pair c 0 ( F x )) ) と定める。
z 0 = f ( x ⃗ ) z_0=f(\vec x) z 0 = f ( x ) およびz j + 1 = g ( x ⃗ , j , z j ) z_{j+1}=g(\vec x,j,z_j) z j + 1 = g ( x , j , z j ) が0 ≤ j < n 0\le j<n 0 ≤ j < n について定義される場合、反復開始時の対は⟨ c 0 , c z 0 ⟩ v \langle\mathbf c_0,\mathbf c_{z_0}\rangle_v ⟨ c 0 , c z 0 ⟩ v まで評価される。補題 2.3 を用いると
S t e p x ⃗ ⟨ c j , c z j ⟩ v ⟶ v ∗ ⟨ c j + 1 , c z j + 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 Step x ⟨ c j , c z j ⟩ v ⟶ v ∗ ⟨ c j + 1 , c z j + 1 ⟩ v である。j j j に関する帰納法と Church 数の反復則により、n n n 回後の対は⟨ c n , c z n ⟩ v \langle\mathbf c_n,\mathbf c_{z_n}\rangle_v ⟨ c n , c z n ⟩ v となり、S n d \mathsf{Snd} Snd はc z n \mathbf c_{z_n} c z n を返す。F x ⃗ F\,\vec x F x が発散すれば、初期対を値にする途中で全体が発散する。最小のj < n j<n j < n でG x ⃗ c j c z j G\,\vec x\,\mathbf c_j\,\mathbf c_{z_j} G x c j c z j が発散すれば、第j + 1 j+1 j + 1 の対を作る途中で全体が発散する。値呼び評価は次の反復へ進む前に現在の対を値にするので、後段の反復が発散を回避することはない。原始再帰の定義域と値が保存される。
上の構成はk ≥ 1 k\ge 1 k ≥ 1 の場合を扱った。k = 0 k=0 k = 0 の場合を明示する。§E15.7 定義 2.1 はk = 0 k=0 k = 0 の原始再帰を許し、そのとき基底は関数f f f ではなく一つの自然数c c c であり、h ( 0 ) = c h(0)=c h ( 0 ) = c かつh ( n + 1 ) = g ( n , h ( n ) ) h(n+1)=g(n,h(n)) h ( n + 1 ) = g ( n , h ( n )) である。g g g は二変数関数であるから、帰納法の仮定はカリー化された閉じた値G G G を与える。x ⃗ \vec x x が空であることに合わせて
S t e p = λ p . P a i r ( S u c c ( F s t p ) ) ( G ( F s t p ) ( S n d p ) ) , H = λ n . S n d ( n S t e p ( P a i r c 0 c c ) ) \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 = λ p . Pair ( Succ ( Fst p )) ( G ( Fst p ) ( Snd p )) , H = λn . Snd ( n Step ( Pair c 0 c c ) ) と定める。S t e p \mathsf{Step} Step は自由変数をもたない値である。c 0 \mathbf c_0 c 0 とc c \mathbf c_c c c はともに値であるから、定義 2.2 のP a i r \mathsf{Pair} Pair により、初期対P a i r c 0 c c \mathsf{Pair}\,\mathbf c_0\,\mathbf c_c Pair c 0 c c は二段の評価で⟨ c 0 , c c ⟩ v \langle\mathbf c_0,\mathbf c_c\rangle_v ⟨ c 0 , c c ⟩ v になる。以後の反復と発散に関する議論はk ≥ 1 k\ge 1 k ≥ 1 の場合と同じであり、基底が数であるため、F x ⃗ F\,\vec x F x の発散に関する場合分けだけが不要になる。H H H は先頭抽象λ n \lambda n λn を一つもつ閉じた値であり、一変数関数h h h に対する強い表現と部分適用の不変条件を満たす。
最後に、§E15.7 定義 3.1 の非有界最小化
h ( x ⃗ ) = μ y [ g ( x ⃗ , y ) = 0 ] h(\vec x)=\mu y[g(\vec x,y)=0] h ( x ) = μ y [ g ( x , y ) = 0 ] を考える。G G G をg g g の代表とし、
B G = λ r . λ x 1 . ⋯ λ x k . λ y . I f ( I s Z e r o ( G x ⃗ y ) ) ( λ d . y ) ( λ d . r x ⃗ ( S u c c y ) ) , H = λ x 1 . ⋯ λ x k . ( Z B G ) x ⃗ c 0 \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} B G = H = λ r . λ x 1 . ⋯ λ x k . λ y . If ( IsZero ( G x y )) ( λ d . y ) ( λ d . r x ( Succ y )) , λ x 1 . ⋯ λ x k . ( Z B G ) x c 0 と定める。B G B_G B G は値であり、補題 2.6 により、各候補y y y の検査後に同じ探索手続きを次の候補へ展開する。
g ( x ⃗ , z ) g(\vec x,z) g ( x , z ) が全てのz < y z<y z < y で定義されて正であり、g ( x ⃗ , y ) = 0 g(\vec x,y)=0 g ( x , y ) = 0 ならば、探索は候補0 , … , y 0,\ldots,y 0 , … , y を順に検査する。正の結果では偽の分枝だけを、零の結果では真の分枝だけを評価するので、有限回の展開後にc y \mathbf c_y c y を返す。正の値が続いた後、最初の未定義値g ( x ⃗ , z ) g(\vec x,z) g ( x , z ) に達した場合、I s Z e r o \mathsf{IsZero} IsZero の引数を評価する途中で発散する。全ての候補でg ( x ⃗ , y ) g(\vec x,y) g ( x , y ) が定義されて正ならば、各有限段階の後に次の候補の評価が現れ、決定性により無限評価を生じる。後の候補で零になる場合でも、それより前に未定義値があれば探索は未定義値の位置で発散する。以上の停止、途中発散、無限探索の場合分けは§E15.7 定義 3.1 の部分最小化の定義域と一致する。
正のアリティをもつ各構成は先頭抽象を必要な個数だけもつ。合成、原始再帰、最小化で数値を必要数未満だけ与えた場合にも、残りの引数を束縛する抽象で評価が止まる。零アリティでは、構成した閉項そのものが停止値または無限評価を与える。したがって、強い表現と正のアリティに対する部分適用の不変条件が生成式全体で保たれる。▨
4 Turing 機械からラムダ計算へ
定理 4.1. §E15.7 定義 1.1 の意味で部分関数f : N k ⇀ N f\colon\mathbb N^k\rightharpoonup\mathbb N f : N k ⇀ N を計算する Turing 機械M M M から、f f f を強く表現する閉じたラムダ項F M F_M F M を構成することができる。f ( x ⃗ ) = n f(\vec x)=n f ( x ) = n の場合には
F M c x 1 ⋯ c x k ⟶ v ∗ c n F_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_n F M c x 1 ⋯ c x k ⟶ v ∗ c n であり、f ( x ⃗ ) ↑ f(\vec x)\mathord\uparrow f ( x ) ↑ の場合には対応するラムダ評価も停止しない。
5 Turing 機械の配置の直接符号化
前節の構成は§E15.7 定理 5.3 を経由するので、M M M の一段の遷移がラムダ項の評価として現れない。本節では、M M M の配置そのものをラムダ項へ符号化し、遷移関数を一つの閉じた値として表し、固定点結合子によって停止まで反復する構成を与える。到達する結論は定理 4.1 と同じであるが、部分ミュー再帰関数を用いない。
最初に、有限集合の要素、対、および有限列を弱い値呼び評価で扱うための符号を定める。
定義 5.1. m ≥ 1 m\ge1 m ≥ 1 と0 ≤ i < m 0\le i<m 0 ≤ i < m に対して、タグ (tag ) を
t a g i m = λ u 0 . ⋯ λ u m − 1 . u i \mathsf{tag}^m_i=\lambda u_0.\cdots\lambda u_{m-1}.u_i tag i m = λ u 0 . ⋯ λ u m − 1 . u i と定める。t a g 0 2 = T \mathsf{tag}^2_0=\mathsf T tag 0 2 = T かつt a g 1 2 = F \mathsf{tag}^2_1=\mathsf F tag 1 2 = F である。
リストの構成子を
N i l = λ n . λ c . n , C o n s = λ 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 Nil = λn . λ c . n , Cons = λa . λ s . λn . λ c . c a s と定め、閉じた値U 1 , … , U p U_1,\ldots,U_p U 1 , … , U p に対するリスト値 (list value ) を
[ ] v = N i l , [ U 1 , … , U p ] v = λ n . λ c . c U 1 [ U 2 , … , U p ] v [\,]_v=\mathsf{Nil},
\qquad
[U_1,\ldots,U_p]_v=\lambda n.\lambda c.c\,U_1\,[U_2,\ldots,U_p]_v [ ] v = Nil , [ U 1 , … , U p ] v = λn . λ c . c U 1 [ U 2 , … , U p ] v と定める。既定値つきの先頭取り出しを
P o p = λ z . λ s . s ( λ d . P a i r z N i l ) ( λ u . λ t . λ d . P a i r 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 Pop = λ z . λ s . s ( λ d . Pair z Nil ) ( λ u . λ t . λ d . Pair u t ) I と定める。
補題 5.2. 次の四つが成り立つ。
閉じた値A , B A,B A , B についてP a i r A B ⟶ v ∗ ⟨ A , B ⟩ v \mathsf{Pair}\,A\,B\longrightarrow_v^*\langle A,B\rangle_v Pair A B ⟶ v ∗ ⟨ A , B ⟩ v である。
A 0 , … , A m − 1 A_0,\ldots,A_{m-1} A 0 , … , A m − 1 を閉項とし、変数d d d がどのA j A_j A j にも自由に現れないとする。このとき
t a g i m ( λ d . A 0 ) ⋯ ( λ d . A m − 1 ) I ⟶ v ∗ A i \mathsf{tag}^m_i\,(\lambda d.A_0)\cdots(\lambda d.A_{m-1})\,\mathsf I
\longrightarrow_v^*A_i tag i m ( λ d . A 0 ) ⋯ ( λ d . A m − 1 ) I ⟶ v ∗ A i
である。とくにm = 2 m=2 m = 2 の場合として、補題 2.3 のI f \mathsf{If} If に関する評価則は、二つの分枝の本体が閉じた値でなく閉項であっても成り立つ。
A A A を閉項、B B B を自由変数が高々u , t u,t u , t である項とし、変数d d d がどちらにも自由に現れないとする。このとき
[ ] 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 [ ] v ( λ d . A ) ( λ u . λ t . λ d . B ) I ⟶ v ∗ A
であり、p ≥ 1 p\ge1 p ≥ 1 のとき
[ U 1 , … , U p ] v ( λ d . A ) ( λ u . λ t . λ d . B ) I ⟶ v ∗ B [ u : = U 1 ] [ t : = [ U 2 , … , U p ] 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] [ U 1 , … , U p ] v ( λ d . A ) ( λ u . λ t . λ d . B ) I ⟶ v ∗ B [ u := U 1 ] [ t := [ U 2 , … , U p ] v ]
である。
閉じた値Z Z Z についてP o p Z [ ] v ⟶ v ∗ ⟨ Z , N i l ⟩ v \mathsf{Pop}\,Z\,[\,]_v\longrightarrow_v^*\langle Z,\mathsf{Nil}\rangle_v Pop Z [ ] v ⟶ v ∗ ⟨ Z , Nil ⟩ v であり、p ≥ 1 p\ge1 p ≥ 1 のときP o p Z [ U 1 , … , U p ] v ⟶ v ∗ ⟨ U 1 , [ U 2 , … , U p ] v ⟩ v \mathsf{Pop}\,Z\,[U_1,\ldots,U_p]_v
\longrightarrow_v^*\langle U_1,[U_2,\ldots,U_p]_v\rangle_v Pop Z [ U 1 , … , U p ] v ⟶ v ∗ ⟨ U 1 , [ U 2 , … , U p ] v ⟩ v である。
証明. (1) は
P a i r 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 Pair A B ⟶ v ( λb . λ p . p A b ) B ⟶ v λ p . p A B = ⟨ A , B ⟩ v から従う。
(2) を示す。各λ d . A j \lambda d.A_j λ d . A j は抽象であるから値である。t a g i m \mathsf{tag}^m_i tag i m のm m m 個の先頭抽象を順に縮約するとλ d . A i \lambda d.A_i λ d . A i を得る。I \mathsf I I は値であるから、さらに一段でA i [ d : = I ] = A i A_i[d:=\mathsf I]=A_i A i [ d := I ] = A i を得る。T = t a g 0 2 \mathsf T=\mathsf{tag}^2_0 T = tag 0 2 、F = t a g 1 2 \mathsf F=\mathsf{tag}^2_1 F = tag 1 2 であり、定義 2.2 により、真偽値V V V と二つの分枝K 0 , K 1 K_0,K_1 K 0 , K 1 についてI f V K 0 K 1 \mathsf{If}\,V\,K_0\,K_1 If V K 0 K 1 はV K 0 K 1 I V\,K_0\,K_1\,\mathsf I V K 0 K 1 I へ評価されるので、後半の主張も従う。
(3) を示す。二つの分枝をK 0 = λ d . A K_0=\lambda d.A K 0 = λ d . A 、K 1 = λ u . λ t . λ d . B K_1=\lambda u.\lambda t.\lambda d.B K 1 = λ u . λ t . λ d . B と書く。[ ] v K 0 ⟶ v λ c . K 0 [\,]_v\,K_0\longrightarrow_v\lambda c.K_0 [ ] v K 0 ⟶ v λ c . K 0 であり、( λ c . K 0 ) K 1 ⟶ v K 0 (\lambda c.K_0)K_1\longrightarrow_vK_0 ( λ c . K 0 ) K 1 ⟶ v K 0 である。さらにK 0 I ⟶ v A K_0\,\mathsf I\longrightarrow_vA K 0 I ⟶ v A を得る。p ≥ 1 p\ge1 p ≥ 1 のときには、S = [ U 2 , … , U p ] v S=[U_2,\ldots,U_p]_v S = [ U 2 , … , U p ] v として
[ U 1 , … , U p ] v K 0 ⟶ v λ c . c U 1 S , ( λ c . c U 1 S ) K 1 ⟶ v K 1 U 1 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 [ U 1 , … , U p ] v K 0 ⟶ v λ c . c U 1 S , ( λ c . c U 1 S ) K 1 ⟶ v K 1 U 1 S である。K 1 U 1 S K_1\,U_1\,S K 1 U 1 S は二段でλ d . B [ u : = U 1 ] [ t : = S ] \lambda d.B[u:=U_1][t:=S] λ d . B [ u := U 1 ] [ t := S ] へ評価され、I \mathsf I I を適用するとさらに一段でB [ u : = U 1 ] [ t : = S ] B[u:=U_1][t:=S] B [ u := U 1 ] [ t := S ] を得る。
(4) は、P o p Z S \mathsf{Pop}\,Z\,S Pop Z S が
S ( λ d . P a i r Z N i l ) ( λ u . λ t . λ d . P a i r u t ) I S\,(\lambda d.\mathsf{Pair}\,Z\,\mathsf{Nil})\,
(\lambda u.\lambda t.\lambda d.\mathsf{Pair}\,u\,t)\,\mathsf I S ( λ d . Pair Z Nil ) ( λ u . λ t . λ d . Pair u t ) I へ二段で評価されることと、(3) および(1) から従う。▨
次に、機械の配置を符号化する。
定義 5.3. M = ( Q , Σ , Γ , δ , q 0 , q a c c , q r e j ) M=(Q,\Sigma,\Gamma,\delta,q_0,q_{\mathrm{acc}},q_{\mathrm{rej}}) M = ( Q , Σ , Γ , δ , q 0 , q acc , q rej ) を§E15.4 定義 1.1 の単テープ決定性 Turing 機械とする。有限集合の並びQ = { p 0 , … , p k − 1 } Q=\{p_0,\ldots,p_{k-1}\} Q = { p 0 , … , p k − 1 } とΓ = { a 0 , … , a m − 1 } \Gamma=\{a_0,\ldots,a_{m-1}\} Γ = { a 0 , … , a m − 1 } を一つ固定し、
p j ‾ = t a g j k , a i ‾ = t a g i m \overline{p_j}=\mathsf{tag}^k_j,
\qquad
\overline{a_i}=\mathsf{tag}^m_i p j = tag j k , a i = tag i m と書く。§E15.4 定義 1.2 の配置C = ( q , h , T ) C=(q,h,T) C = ( q , h , T ) と閉じた値W W W について、W W W がC C C を表す (represents a Turing configuration ) とは、あるℓ ≥ 0 \ell\ge0 ℓ ≥ 0 が存在して
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, W = ⟨ q ˉ , ⟨ L , ⟨ T ( h ) , R ⟩ v ⟩ v ⟩ v , L = [ T ( h − 1 ) ‾ , T ( h − 2 ) ‾ , … , T ( 0 ) ‾ ] v , R = [ T ( h + 1 ) ‾ , … , T ( h + ℓ ) ‾ ] v L=[\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 L = [ T ( h − 1 ) , T ( h − 2 ) , … , T ( 0 ) ] v , R = [ T ( h + 1 ) , … , T ( h + ℓ ) ] v であり、かつh + ℓ h+\ell h + ℓ より大きい全ての位置でT T T の値が⊔ \sqcup ⊔ となることをいう。h = 0 h=0 h = 0 のときL = [ ] v L=[\,]_v L = [ ] v である。T T T は有限個の位置を除いて⊔ \sqcup ⊔ を値にとるので、そのようなℓ \ell ℓ は存在する。したがって、各配置は少なくとも一つの表現をもつ。逆に、リスト値の長さと成分は項から定まるので、一つの閉じた値が二つの異なる配置を表すことはない。
配置の構成と成分の取り出しを
C o n f = λ q . λ l . λ b . λ r . P a i r q ( P a i r l ( P a i r b r ) ) , S t = λ w . F s t w , L f = λ w . F s t ( S n d w ) , C u = λ w . F s t ( S n d ( S n d w ) ) , R g = λ w . S n d ( S n d ( S n d 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} Conf St Cu = λ q . λ l . λb . λ r . Pair q ( Pair l ( Pair b r )) , = λ w . Fst w , = λ w . Fst ( Snd ( Snd w )) , Lf Rg = λ w . Fst ( Snd w ) , = λ w . Snd ( Snd ( Snd w )) と定める。
定義 5.4. 上の記号のもとで、停止判定項 (halting-test term ) を
H a l t M = λ w . ( S t w ) ( λ d . H 0 ) ⋯ ( λ d . H k − 1 ) I \mathsf{Halt}_M=\lambda w.(\mathsf{St}\,w)\,
(\lambda d.H_0)\cdots(\lambda d.H_{k-1})\,\mathsf I Halt M = λ w . ( St w ) ( λ d . H 0 ) ⋯ ( λ d . H k − 1 ) I と定める。ここで、p j ∈ { q a c c , q r e j } p_j\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\} p j ∈ { q acc , q rej } ならばH j = T H_j=\mathsf T H j = T 、そうでなければH j = F H_j=\mathsf F H j = F である。
遷移項 (transition term ) を
T r M = λ w . ( S t w ) ( λ d . B 0 ) ⋯ ( λ d . B k − 1 ) I \mathsf{Tr}_M=\lambda w.(\mathsf{St}\,w)\,
(\lambda d.B_0)\cdots(\lambda d.B_{k-1})\,\mathsf I Tr M = λ w . ( St w ) ( λ d . B 0 ) ⋯ ( λ d . B k − 1 ) I と定める。p j ∈ { q a c c , q r e j } p_j\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\} p j ∈ { q acc , q rej } ならばB j = w B_j=w B j = w とする。そうでなければ
B j = ( C u w ) ( λ d . E j , 0 ) ⋯ ( λ d . E j , m − 1 ) I B_j=(\mathsf{Cu}\,w)\,(\lambda d.E_{j,0})\cdots(\lambda d.E_{j,m-1})\,\mathsf I B j = ( Cu w ) ( λ d . E j , 0 ) ⋯ ( λ d . E j , m − 1 ) I とし、δ ( p j , a i ) = ( q ′ , a ′ , D ) \delta(p_j,a_i)=(q',a',D) δ ( p j , a i ) = ( q ′ , a ′ , D ) に応じてE j , i E_{j,i} E j , i を次のように定める。
D = S D=S D = S のとき
E j , i = C o n f q ′ ‾ ( L f w ) a ′ ‾ ( R g w ) . E_{j,i}=\mathsf{Conf}\,\overline{q'}\,(\mathsf{Lf}\,w)\,\overline{a'}\,(\mathsf{Rg}\,w). E j , i = Conf q ′ ( Lf w ) a ′ ( Rg w ) .
D = R D=R D = R のとき
E j , i = ( λ z . C o n f q ′ ‾ ( C o n s a ′ ‾ ( L f w ) ) ( F s t z ) ( S n d z ) ) ( P o p ⊔ ‾ ( R g 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). E j , i = ( λ z . Conf q ′ ( Cons a ′ ( Lf w ) ) ( Fst z ) ( Snd z ) ) ( Pop ⊔ ( Rg w ) ) .
D = L D=L D = L のとき
E j , i = ( L f w ) ( λ d . C o n f q ′ ‾ N i l a ′ ‾ ( R g w ) ) ( λ u . λ t . λ d . C o n f q ′ ‾ t u ( C o n s a ′ ‾ ( R g 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} E j , i = ( Lf w ) ( λ d . Conf q ′ Nil a ′ ( Rg w ) ) ( λ u . λ t . λ d . Conf q ′ t u ( Cons a ′ ( Rg w )) ) I .
変数d , z , u , t d,z,u,t d , z , u , t は、これらの式の他の位置に自由に現れない。B j B_j B j とE j , i E_{j,i} E j , i の自由変数はw w w だけであり、先頭のλ w \lambda w λ w で束縛される。Q Q Q とΓ \Gamma Γ は有限であるから、H a l t M \mathsf{Halt}_M Halt M とT r M \mathsf{Tr}_M Tr M はM M M から定まる有限の閉じた値である。
補題 5.5. 閉じた値W W W が配置C = ( q , h , T ) C=(q,h,T) C = ( q , h , T ) を表すとする。
q ∈ { q a c c , q r e j } q\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\} q ∈ { q acc , q rej } ならばH a l t M W ⟶ v ∗ T \mathsf{Halt}_M\,W\longrightarrow_v^*\mathsf T Halt M W ⟶ v ∗ T であり、そうでなければH a l t M W ⟶ v ∗ F \mathsf{Halt}_M\,W\longrightarrow_v^*\mathsf F Halt M W ⟶ v ∗ F である。
q ∉ { q a c c , q r e j } q\notin\{q_{\mathrm{acc}},q_{\mathrm{rej}}\} q ∈ / { q acc , q rej } とし、C ⊢ M C ′ C\vdash_MC' C ⊢ M C ′ とする。このとき、C ′ C' C ′ を表す閉じた値W ′ W' W ′ が存在してT r M W ⟶ v ∗ W ′ \mathsf{Tr}_M\,W\longrightarrow_v^*W' Tr M W ⟶ v ∗ W ′ である。
証明. W W W が表す配置の右側の長さをℓ \ell ℓ とし、W W W の成分を上の定義のとおりq ˉ , L , T ( h ) ‾ , R \bar q,L,\overline{T(h)},R q ˉ , L , T ( h ) , R と書く。補題 2.3 の射影の評価則により、
S t W ⟶ v ∗ q ˉ , L f W ⟶ v ∗ L , C u W ⟶ v ∗ T ( h ) ‾ , R g 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 St W ⟶ v ∗ q ˉ , Lf W ⟶ v ∗ L , Cu W ⟶ v ∗ T ( h ) , Rg W ⟶ v ∗ R である。
(1) を示す。q = p j q=p_j q = p j とする。H a l t M W \mathsf{Halt}_M\,W Halt M W は一段で( S t W ) ( λ d . H 0 ) ⋯ ( λ d . H k − 1 ) I (\mathsf{St}\,W)(\lambda d.H_0)\cdots(\lambda d.H_{k-1})\mathsf I ( St W ) ( λ d . H 0 ) ⋯ ( λ d . H k − 1 ) I へ進み、値呼び評価は最も内側の作用子S t W \mathsf{St}\,W St W を先にq ˉ = t a g j k \bar q=\mathsf{tag}^k_j q ˉ = tag j k へ評価する。補題 5.2 (2) によりH j H_j H j を得る。H j H_j H j の定義から結論が従う。
(2) を示す。q = p j q=p_j q = p j 、T ( h ) = a i 0 T(h)=a_{i_0} T ( h ) = a i 0 、δ ( p j , a i 0 ) = ( q ′ , a ′ , D ) \delta(p_j,a_{i_0})=(q',a',D) δ ( p j , a i 0 ) = ( q ′ , a ′ , D ) とする。同じ議論を二度用いると、
T r M W ⟶ v ∗ B j [ w : = W ] ⟶ v ∗ E j , i 0 [ w : = W ] \mathsf{Tr}_M\,W\longrightarrow_v^*B_j[w:=W]\longrightarrow_v^*E_{j,i_0}[w:=W] Tr M W ⟶ v ∗ B j [ w := W ] ⟶ v ∗ E j , i 0 [ w := W ] である。§E15.4 定義 1.2 によりC ′ = ( q ′ , h ′ , T ′ ) C'=(q',h',T') C ′ = ( q ′ , h ′ , T ′ ) であり、T ′ T' T ′ は位置h h h だけをa ′ a' a ′ に変え、h ′ h' h ′ はD = S D=S D = S でh h h 、D = R D=R D = R でh + 1 h+1 h + 1 、D = L D=L D = L かつh > 0 h>0 h > 0 でh − 1 h-1 h − 1 、D = L D=L D = L かつh = 0 h=0 h = 0 で0 0 0 である。
D = S D=S D = S の場合。E j , i 0 [ w : = W ] E_{j,i_0}[w:=W] E j , i 0 [ w := W ] はC o n f q ′ ‾ ( L f W ) a ′ ‾ ( R g W ) \mathsf{Conf}\,\overline{q'}\,(\mathsf{Lf}\,W)\,\overline{a'}\,(\mathsf{Rg}\,W) Conf q ′ ( Lf W ) a ′ ( Rg W ) であり、値呼び評価は四つの引数を左から順に値へ落とす。補題 5.2 (1) を三度用いると
W ′ = ⟨ q ′ ‾ , ⟨ L , ⟨ a ′ ‾ , R ⟩ v ⟩ v ⟩ v W'=\Bigl\langle\overline{q'},\
\bigl\langle L,\ \langle\overline{a'},R\rangle_v\bigr\rangle_v\Bigr\rangle_v W ′ = ⟨ q ′ , ⟨ L , ⟨ a ′ , R ⟩ v ⟩ v ⟩ v を得る。h ′ = h h'=h h ′ = h であり、T ′ T' T ′ は位置h h h 以外でT T T と一致するから、L L L はT ′ ( h ′ − 1 ) ‾ , … , T ′ ( 0 ) ‾ \overline{T'(h'-1)},\ldots,\overline{T'(0)} T ′ ( h ′ − 1 ) , … , T ′ ( 0 ) のリスト値、R R R はT ′ ( h ′ + 1 ) ‾ , … , T ′ ( h ′ + ℓ ) ‾ \overline{T'(h'+1)},\ldots,\overline{T'(h'+\ell)} T ′ ( h ′ + 1 ) , … , T ′ ( h ′ + ℓ ) のリスト値であり、a ′ ‾ = T ′ ( h ′ ) ‾ \overline{a'}=\overline{T'(h')} a ′ = T ′ ( h ′ ) である。h + ℓ h+\ell h + ℓ より大きい位置ではT ′ T' T ′ とT T T が一致して⊔ \sqcup ⊔ であるから、W ′ W' W ′ はC ′ C' C ′ を表す。
D = R D=R D = R の場合。値呼び評価は作用子λ z . ⋯ \lambda z.\cdots λ z . ⋯ が値であるから引数を先に評価する。補題 5.2 (4) により、P o p ⊔ ‾ R \mathsf{Pop}\,\overline\sqcup\,R Pop ⊔ R は、ℓ ≥ 1 \ell\ge1 ℓ ≥ 1 のとき⟨ 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 ⟨ T ( h + 1 ) , [ T ( h + 2 ) , … , T ( h + ℓ ) ] v ⟩ v へ、ℓ = 0 \ell=0 ℓ = 0 のとき⟨ ⊔ ‾ , N i l ⟩ v \langle\overline\sqcup,\mathsf{Nil}\rangle_v ⟨ ⊔ , Nil ⟩ v へ評価される。ℓ = 0 \ell=0 ℓ = 0 のときは表現の条件からT ( h + 1 ) = ⊔ T(h+1)=\sqcup T ( h + 1 ) = ⊔ であるから、いずれの場合も第1成分はT ( h + 1 ) ‾ \overline{T(h+1)} T ( h + 1 ) であり、第2成分はT ( h + 2 ) ‾ \overline{T(h+2)} T ( h + 2 ) 以降を並べたリスト値である。またC o n s 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 Cons a ′ L ⟶ v ∗ [ a ′ , T ( h − 1 ) , … , T ( 0 ) ] v である。h ′ = h + 1 h'=h+1 h ′ = h + 1 、T ′ ( h ) = a ′ T'(h)=a' T ′ ( h ) = a ′ であるから、この左側リストは長さh ′ h' h ′ をもち、T ′ ( h ′ − 1 ) ‾ , … , T ′ ( 0 ) ‾ \overline{T'(h'-1)},\ldots,\overline{T'(0)} T ′ ( h ′ − 1 ) , … , T ′ ( 0 ) と一致する。新しい右側の長さをℓ ′ \ell' ℓ ′ とすると、ℓ ≥ 1 \ell\ge1 ℓ ≥ 1 でℓ ′ = ℓ − 1 \ell'=\ell-1 ℓ ′ = ℓ − 1 、ℓ = 0 \ell=0 ℓ = 0 でℓ ′ = 0 \ell'=0 ℓ ′ = 0 である。どちらの場合もh ′ + ℓ ′ ≥ h + ℓ h'+\ell'\ge h+\ell h ′ + ℓ ′ ≥ h + ℓ であり、h ′ + ℓ ′ h'+\ell' h ′ + ℓ ′ より大きい位置でT ′ T' T ′ の値は⊔ \sqcup ⊔ である。したがって、得られた値はC ′ C' C ′ を表す。
D = L D=L D = L の場合。作用子L f W \mathsf{Lf}\,W Lf W はL L L へ評価される。h = 0 h=0 h = 0 ならばL = [ ] v L=[\,]_v L = [ ] v であり、補題 5.2 (3) によりC o n f q ′ ‾ N i l a ′ ‾ R \mathsf{Conf}\,\overline{q'}\,\mathsf{Nil}\,\overline{a'}\,R Conf q ′ Nil a ′ R へ進む。h ′ = 0 h'=0 h ′ = 0 、T ′ ( 0 ) = a ′ T'(0)=a' T ′ ( 0 ) = a ′ であるから、その値はC ′ C' C ′ を表す。h ≥ 1 h\ge1 h ≥ 1 ならばL = [ T ( h − 1 ) ‾ , … , T ( 0 ) ‾ ] v L=[\overline{T(h-1)},\ldots,\overline{T(0)}]_v L = [ T ( h − 1 ) , … , T ( 0 ) ] v であり、同じ補題 5.2 (3) によりu : = T ( h − 1 ) ‾ u:=\overline{T(h-1)} u := T ( h − 1 ) 、t : = [ T ( h − 2 ) ‾ , … , T ( 0 ) ‾ ] v t:=[\overline{T(h-2)},\ldots,\overline{T(0)}]_v t := [ T ( h − 2 ) , … , T ( 0 ) ] v を代入したC o n f q ′ ‾ t u ( C o n s a ′ ‾ R ) \mathsf{Conf}\,\overline{q'}\,t\,u\,(\mathsf{Cons}\,\overline{a'}\,R) Conf q ′ t u ( Cons a ′ R ) へ進む。h ′ = h − 1 h'=h-1 h ′ = h − 1 、T ′ ( h − 1 ) = T ( h − 1 ) T'(h-1)=T(h-1) T ′ ( h − 1 ) = T ( h − 1 ) 、T ′ ( h ) = a ′ T'(h)=a' T ′ ( h ) = a ′ であるから、左側はT ′ ( h ′ − 1 ) ‾ , … , T ′ ( 0 ) ‾ \overline{T'(h'-1)},\ldots,\overline{T'(0)} T ′ ( h ′ − 1 ) , … , T ′ ( 0 ) のリスト値、現在記号はT ′ ( h ′ ) ‾ \overline{T'(h')} T ′ ( h ′ ) 、右側は長さℓ + 1 \ell+1 ℓ + 1 のリスト値T ′ ( h ′ + 1 ) ‾ , … , T ′ ( h ′ + ℓ + 1 ) ‾ \overline{T'(h'+1)},\ldots,\overline{T'(h'+\ell+1)} T ′ ( h ′ + 1 ) , … , T ′ ( h ′ + ℓ + 1 ) である。h ′ + ( ℓ + 1 ) = h + ℓ h'+(\ell+1)=h+\ell h ′ + ( ℓ + 1 ) = h + ℓ であり、それより大きい位置ではT ′ T' T ′ とT T T が一致して⊔ \sqcup ⊔ である。したがって、得られた値はC ′ C' C ′ を表す。
三つの移動方向を尽くしたので、(2) が成り立つ。▨
入力と出力の変換を定める。以下では1 ∈ Σ 1\in\Sigma 1 ∈ Σ とし、k ≥ 2 k\ge2 k ≥ 2 の場合には# ∈ Σ \#\in\Sigma # ∈ Σ とする。
定義 5.6.
O n e = λ s . C o n s 1 ˉ s , S e p = λ s . C o n s # ‾ s \mathsf{One}=\lambda s.\mathsf{Cons}\,\bar1\,s,
\qquad
\mathsf{Sep}=\lambda s.\mathsf{Cons}\,\overline{\#}\,s One = λ s . Cons 1 ˉ s , Sep = λ s . Cons # s と定める。項S k , … , S 1 S_k,\ldots,S_1 S k , … , S 1 を
S k = x k O n e N i l , S j = x j O n e ( S e p S j + 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) S k = x k One Nil , S j = x j One ( Sep S j + 1 ) ( 1 ≤ j < k ) と定める。S j S_j S j の自由変数はx j , … , x k x_j,\ldots,x_k x j , … , x k であり、次の項の先頭抽象で束縛される。初期配置項 (initial-configuration term ) を
I n i t M = λ x 1 . ⋯ λ x k . ( λ z . C o n f q 0 ‾ N i l ( F s t z ) ( S n d z ) ) ( P o p ⊔ ‾ S 1 ) \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) Init M = λ x 1 . ⋯ λ x k . ( λ z . Conf q 0 Nil ( Fst z ) ( Snd z ) ) ( Pop ⊔ S 1 ) と定める。
記号1 1 1 の判定項 (symbol-test term ) を
I s 1 = λ v . v ( λ d . J 0 ) ⋯ ( λ d . J m − 1 ) I \mathsf{Is}_1=\lambda v.v\,(\lambda d.J_0)\cdots(\lambda d.J_{m-1})\,\mathsf I Is 1 = λ v . v ( λ d . J 0 ) ⋯ ( λ d . J m − 1 ) I と定める。ここで、a i 1 = 1 a_{i_1}=1 a i 1 = 1 である添字i 1 i_1 i 1 に対してJ i 1 = T J_{i_1}=\mathsf T J i 1 = T 、それ以外の添字i i i に対してJ i = F J_i=\mathsf F J i = F である。 を
C n t = Z ( λ r . λ p . ( λ z . I f ( I s 1 ( F s t z ) ) ( λ d . r ( P a i r ( S u c c ( F s t p ) ) ( S n d z ) ) ) ( λ d . F s t p ) ) ( P o p ⊔ ‾ ( S n d p ) ) ) , O u t = λ w . C n t ( P a i r c 0 ( C o n s ( C u w ) ( R g 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} Cnt Out = Z ( λ r . λ p . ( λ z . If ( Is 1 ( Fst z )) ( λ d . r ( Pair ( Succ ( Fst p )) ( Snd z ))) ( λ d . Fst p ) ) ( Pop ⊔ ( Snd p ) ) ) , = λ w . Cnt ( Pair c 0 ( Cons ( Cu w ) ( Rg w )) ) と定める。
補題 5.7. U 1 , … , U ℓ U_1,\ldots,U_\ell U 1 , … , U ℓ をΓ \Gamma Γ の記号のタグとし、その列の先頭から連続して1 ˉ \bar1 1 ˉ である項の個数をn n n とする。このとき、全てのj ∈ N j\in\mathbb N j ∈ N について
C n t ⟨ c j , [ U 1 , … , U ℓ ] v ⟩ v ⟶ v ∗ c j + n \mathsf{Cnt}\,\langle\mathbf c_j,[U_1,\ldots,U_\ell]_v\rangle_v
\longrightarrow_v^*\mathbf c_{j+n} Cnt ⟨ c j , [ U 1 , … , U ℓ ] v ⟩ v ⟶ v ∗ c j + n である。
証明. C n t = Z G \mathsf{Cnt}=\mathsf Z\,G Cnt = Z G の引数G G G は閉じた値であるから、補題 2.6 によりZ G ⟶ v ∗ G R G \mathsf Z\,G\longrightarrow_v^*G\,R_G Z G ⟶ v ∗ G R G であり、閉じた値V V V についてR G V ⟶ v ∗ G R G V R_G\,V\longrightarrow_v^*G\,R_G\,V R G V ⟶ v ∗ G R G V である。
ℓ \ell ℓ に関する帰納法を用いる。P = ⟨ c j , [ U 1 , … , U ℓ ] v ⟩ v P=\langle\mathbf c_j,[U_1,\ldots,U_\ell]_v\rangle_v P = ⟨ c j , [ U 1 , … , U ℓ ] v ⟩ v とすると、G R G P G\,R_G\,P G R G P は
( λ z . I f ( I s 1 ( F s t z ) ) ( λ d . R G ( P a i r ( S u c c ( F s t P ) ) ( S n d z ) ) ) ( λ d . F s t P ) ) ( P o p ⊔ ‾ ( S n d 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) ( λ z . If ( Is 1 ( Fst z )) ( λ d . R G ( Pair ( Succ ( Fst P )) ( Snd z ))) ( λ d . Fst P ) ) ( Pop ⊔ ( Snd P ) ) へ評価される。作用子は値であるから、引数が先に評価される。補題 2.3 の射影の評価則と補題 5.2 (4) により、引数はℓ = 0 \ell=0 ℓ = 0 のとき⟨ ⊔ ‾ , N i l ⟩ v \langle\overline\sqcup,\mathsf{Nil}\rangle_v ⟨ ⊔ , Nil ⟩ v へ、ℓ ≥ 1 \ell\ge1 ℓ ≥ 1 のとき⟨ U 1 , [ U 2 , … , U ℓ ] v ⟩ v \langle U_1,[U_2,\ldots,U_\ell]_v\rangle_v ⟨ U 1 , [ U 2 , … , U ℓ ] v ⟩ v へ評価される。I s 1 \mathsf{Is}_1 Is 1 は補題 5.2 (2) により、1 ˉ \bar1 1 ˉ に対してT \mathsf T T を、Γ \Gamma Γ の他の記号のタグに対してF \mathsf F F を返す。§E15.4 定義 1.1 により⊔ ∉ Σ \sqcup\notin\Sigma ⊔ ∈ / Σ であるから⊔ ≠ 1 \sqcup\ne1 ⊔ = 1 である。
ℓ = 0 \ell=0 ℓ = 0 の場合、またはℓ ≥ 1 \ell\ge1 ℓ ≥ 1 かつU 1 ≠ 1 ˉ U_1\ne\bar1 U 1 = 1 ˉ の場合にはn = 0 n=0 n = 0 であり、偽の分枝がF s t P ⟶ v ∗ c j \mathsf{Fst}\,P\longrightarrow_v^*\mathbf c_j Fst P ⟶ v ∗ c j を返す。
ℓ ≥ 1 \ell\ge1 ℓ ≥ 1 かつU 1 = 1 ˉ U_1=\bar1 U 1 = 1 ˉ の場合にはn ≥ 1 n\ge1 n ≥ 1 であり、真の分枝が評価される。補題 2.3 によりS u c c ( F s t P ) ⟶ v ∗ c j + 1 \mathsf{Succ}(\mathsf{Fst}\,P)\longrightarrow_v^*\mathbf c_{j+1} Succ ( Fst P ) ⟶ v ∗ c j + 1 であり、補題 5.2 (1) により、真の分枝はR G ⟨ c j + 1 , [ U 2 , … , U ℓ ] v ⟩ v R_G\,\langle\mathbf c_{j+1},[U_2,\ldots,U_\ell]_v\rangle_v R G ⟨ c j + 1 , [ U 2 , … , U ℓ ] v ⟩ v へ評価される。この項はG R G ⟨ c j + 1 , [ U 2 , … , U ℓ ] v ⟩ v G\,R_G\,\langle\mathbf c_{j+1},[U_2,\ldots,U_\ell]_v\rangle_v G R G ⟨ c j + 1 , [ U 2 , … , U ℓ ] v ⟩ v へ評価される。列U 2 , … , U ℓ U_2,\ldots,U_\ell U 2 , … , U ℓ の先頭から連続する1 ˉ \bar1 1 ˉ の個数はn − 1 n-1 n − 1 であるから、長さℓ − 1 \ell-1 ℓ − 1 に対する帰納法の仮定により、この項はc ( j + 1 ) + ( n − 1 ) = c j + n \mathbf c_{(j+1)+(n-1)}=\mathbf c_{j+n} c ( j + 1 ) + ( n − 1 ) = c j + n へ評価される。▨
定義 5.8 (停止までの反復項).
G M = λ r . λ w . I f ( H a l t M w ) ( λ d . w ) ( λ d . r ( T r M w ) ) , R u n M = Z G M G_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 G M = λ r . λ w . If ( Halt M w ) ( λ d . w ) ( λ d . r ( Tr M w )) , Run M = Z G M と定める。R u n M \mathsf{Run}_M Run M を 停止までの反復項 (iteration-until-halting term ) という。さらに、
S i m M = λ x 1 . ⋯ λ x k . O u t ( R u n M ( I n i t M x 1 ⋯ x k ) ) \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) Sim M = λ x 1 . ⋯ λ x k . Out ( Run M ( Init M x 1 ⋯ x k ) ) と定める。
定理 5.9. M M M を、§E15.7 定義 1.1 の意味で部分関数f : N k ⇀ N f\colon\mathbb N^k\rightharpoonup\mathbb N f : N k ⇀ N を計算する単テープ決定性 Turing 機械とする。上で構成した閉項S i m M \mathsf{Sim}_M Sim M はf f f を強く表現する。すなわち、f ( x ⃗ ) = n f(\vec x)=n f ( x ) = n ならば
S i m M c x 1 ⋯ c x k ⟶ v ∗ c n \mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_n Sim M c x 1 ⋯ c x k ⟶ v ∗ c n であり、f ( x ⃗ ) ↑ f(\vec x)\mathord\uparrow f ( x ) ↑ ならばS i m M c x 1 ⋯ c x k ⟶ v ∞ \mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^\infty Sim M c x 1 ⋯ c x k ⟶ v ∞ である。
証明. 入力語をw x ⃗ = 1 x 1 # ⋯ # 1 x k w_{\vec x}=1^{x_1}\#\cdots\#1^{x_k} w x = 1 x 1 # ⋯ # 1 x k 、その長さをN N N とし、§E15.4 定義 1.2 の初期配置をC 0 = ( q 0 , 0 , T w x ⃗ ) C_0=(q_0,0,T_{w_{\vec x}}) C 0 = ( q 0 , 0 , T w x ) とする。
最初に初期配置項を追う。O n e \mathsf{One} One は閉じた値であり、任意のリスト値S S S に対してO n e S \mathsf{One}\,S One S はS S S の先頭へ1 ˉ \bar1 1 ˉ を付け加えたリスト値へ評価される。したがって補題 2.3 の反復則の仮定が満たされる。c x j \mathbf c_{x_j} c x j を代入した後、j j j を大きい方から順に見ると、反復則によりS j S_j S j は語1 x j # ⋯ # 1 x k 1^{x_j}\#\cdots\#1^{x_k} 1 x j # ⋯ # 1 x k の記号のタグを順に並べたリスト値へ評価される。したがってS 1 S_1 S 1 は[ w x ⃗ ( 0 ) ‾ , … , w x ⃗ ( N − 1 ) ‾ ] v [\overline{w_{\vec x}(0)},\ldots,\overline{w_{\vec x}(N-1)}]_v [ w x ( 0 ) , … , w x ( N − 1 ) ] v へ評価される。補題 5.2 (4) により、P o p ⊔ ‾ S 1 \mathsf{Pop}\,\overline\sqcup\,S_1 Pop ⊔ S 1 はN ≥ 1 N\ge1 N ≥ 1 のとき⟨ T w x ⃗ ( 0 ) ‾ , [ T w x ⃗ ( 1 ) ‾ , … , T w x ⃗ ( 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 ⟨ T w x ( 0 ) , [ T w x ( 1 ) , … , T w x ( N − 1 ) ] v ⟩ v へ、N = 0 N=0 N = 0 のとき⟨ ⊔ ‾ , N i l ⟩ v \langle\overline\sqcup,\mathsf{Nil}\rangle_v ⟨ ⊔ , Nil ⟩ v へ評価される。N = 0 N=0 N = 0 のときは全マスが空白であるから、どちらの場合も第1成分はT w x ⃗ ( 0 ) ‾ \overline{T_{w_{\vec x}}(0)} T w x ( 0 ) である。続いてC o n f \mathsf{Conf} Conf を適用すると、C 0 C_0 C 0 を表す閉じた値W 0 W_0 W 0 を得る(右側の長さはN ≥ 1 N\ge1 N ≥ 1 でN − 1 N-1 N − 1 、N = 0 N=0 N = 0 で0 0 0 である)。
次に反復を追う。G M G_M G M は閉じた値であるから、補題 2.6 によりR u n M ⟶ v ∗ G M R G M ⟶ v V M \mathsf{Run}_M\longrightarrow_v^*G_M\,R_{G_M}\longrightarrow_vV_M Run M ⟶ v ∗ G M R G M ⟶ v V M である。ここで
V M = λ w . I f ( H a l t M w ) ( λ d . w ) ( λ d . R G M ( T r M w ) ) V_M=\lambda w.\mathsf{If}\,(\mathsf{Halt}_M\,w)\,(\lambda d.w)\,
(\lambda d.R_{G_M}(\mathsf{Tr}_M\,w)) V M = λ w . If ( Halt M w ) ( λ d . w ) ( λ d . R G M ( Tr M w )) である。閉じた値W W W が配置C = ( q , h , T ) C=(q,h,T) C = ( q , h , T ) を表すとき、補題 5.5 と補題 5.2 (2) により次が成り立つ。
q ∈ { q a c c , q r e j } q\in\{q_{\mathrm{acc}},q_{\mathrm{rej}}\} q ∈ { q acc , q rej } ならばV M W ⟶ v ∗ W V_M\,W\longrightarrow_v^*W V M W ⟶ v ∗ W である。
そうでなければ、C ⊢ M C ′ C\vdash_MC' C ⊢ M C ′ を満たすC ′ C' C ′ を表す閉じた値W ′ W' W ′ が存在して、V M W V_M\,W V M W からV M W ′ V_M\,W' V M W ′ への空でない有限の評価列がある。実際、偽の分枝はR G M ( T r M W ) R_{G_M}(\mathsf{Tr}_M\,W) R G M ( Tr M W ) であり、R G M R_{G_M} R G M は値、T r M W \mathsf{Tr}_M\,W Tr M W はW ′ W' W ′ へ評価され、R G M W ′ ⟶ v ∗ G M R G M W ′ ⟶ v ∗ V M W ′ R_{G_M}\,W'\longrightarrow_v^*G_M\,R_{G_M}\,W'\longrightarrow_v^*V_M\,W' R G M W ′ ⟶ v ∗ G M R G M W ′ ⟶ v ∗ V M W ′ である。
f ( x ⃗ ) = n f(\vec x)=n f ( x ) = n の場合を考える。§E15.7 定義 1.1 によりM M M はw x ⃗ w_{\vec x} w x で停止し、§E15.4 定義 1.3 の極大有限計算C 0 , … , C t C_0,\ldots,C_t C 0 , … , C t が存在する。C 0 , … , C t − 1 C_0,\ldots,C_{t-1} C 0 , … , C t − 1 の状態は停止状態ではなく、C t C_t C t の状態はq a c c q_{\mathrm{acc}} q acc である。上の(2) をt t t 回、続いて(1) を用いると、各C s C_s C s を表す閉じた値W s W_s W s が得られ、V M W 0 ⟶ v ∗ W t V_M\,W_0\longrightarrow_v^*W_t V M W 0 ⟶ v ∗ W t である。C t C_t C t は正規出力配置であるから、ヘッド位置は0 0 0 であり、テープ内容をT T T とすると位置0 , … , n − 1 0,\ldots,n-1 0 , … , n − 1 で1 1 1 、それ以外の位置で⊔ \sqcup ⊔ である。W t W_t W t の左側は[ ] v [\,]_v [ ] v であり、W t W_t W t の右側の長さをℓ \ell ℓ とするとC o n s ( C u W t ) ( R g W t ) \mathsf{Cons}\,(\mathsf{Cu}\,W_t)\,(\mathsf{Rg}\,W_t) Cons ( Cu W t ) ( Rg W t ) は[ T ( 0 ) ‾ , … , T ( ℓ ) ‾ ] v [\overline{T(0)},\ldots,\overline{T(\ell)}]_v [ T ( 0 ) , … , T ( ℓ ) ] v へ評価される。n ≥ 1 n\ge1 n ≥ 1 のときは、表現の条件とT ( n − 1 ) = 1 T(n-1)=1 T ( n − 1 ) = 1 からℓ ≥ n − 1 \ell\ge n-1 ℓ ≥ n − 1 であり、この列の先頭から連続する1 ˉ \bar1 1 ˉ の個数はちょうどn n n である。n = 0 n=0 n = 0 のときは先頭が⊔ ‾ \overline\sqcup ⊔ であるから、その個数は0 0 0 である。補題 5.7 をj = 0 j=0 j = 0 で用いるとO u t W t ⟶ v ∗ c n \mathsf{Out}\,W_t\longrightarrow_v^*\mathbf c_n Out W t ⟶ v ∗ c n を得る。以上を合わせるとS i m M c x 1 ⋯ c x k ⟶ v ∗ c n \mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^*\mathbf c_n Sim M c x 1 ⋯ c x k ⟶ v ∗ c n である。
f ( x ⃗ ) ↑ f(\vec x)\mathord\uparrow f ( x ) ↑ の場合を考える。§E15.7 定義 1.1 によりM M M はw x ⃗ w_{\vec x} w x で停止せず、§E15.4 定義 1.3 の第1の場合により無限の配置列C 0 , C 1 , … C_0,C_1,\ldots C 0 , C 1 , … が存在する。どのC s C_s C s の状態も停止状態ではない。上の(2) を繰り返すと、各s s s についてC s C_s C s を表す閉じた値W s W_s W s と、V M W s V_M\,W_s V M W s からV M W s + 1 V_M\,W_{s+1} V M W s + 1 への空でない有限の評価列が得られる。O u t \mathsf{Out} Out は値であるから、定義 1.1 の評価文脈V E V\,E V E により、引数の評価列はそのまま全体の評価列になる。したがって、S i m M c x 1 ⋯ c x k \mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k} Sim M c x 1 ⋯ c x k から始まる評価列は無限に長く、その途中に値は現れない。補題 1.2 により閉項の評価は決定的であるから、この列が唯一の評価である。すなわちS i m M c x 1 ⋯ c x k ⟶ v ∞ \mathsf{Sim}_M\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}\longrightarrow_v^\infty Sim M c x 1 ⋯ c x k ⟶ v ∞ である。▨
二つの経路は同じ結論に達する。定理 4.1 は関数の生成式に沿って項を組み立て、定理 5.9 は機械の配置を項として保持し、一段の遷移を項の評価として実行する。後者は§E15.7 定理 5.3 を用いないので、前者の第2の証明にもなっている。
6 de Bruijn 符号と代入
逆向きの模倣では、変数名の変更に依存しない有限構文を機械へ渡す。
定義 6.1. de Bruijn 項 (de Bruijn term ) を
D : : = v i ∣ l D ∣ a ( D , D ) ( i ∈ N ) D::=\mathsf v_i\mid\mathsf lD\mid\mathsf a(D,D)
\qquad(i\in\mathbb N) D ::= v i ∣ l D ∣ a ( D , D ) ( i ∈ N ) によって定める。深さd d d で自由変数をもたないことを表す述語WF d \operatorname{WF}_d WF d を
WF d ( v i ) ⟺ i < d , WF d ( l P ) ⟺ 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 d ( v i ) WF d ( l P ) WF d ( a ( P , Q )) ⟺ i < d , ⟺ WF d + 1 ( P ) , ⟺ WF d ( P ) ∧ WF d ( Q ) と定める。WF 0 ( D ) \operatorname{WF}_0(D) WF 0 ( D ) を満たす項を閉項とする。
有限二進符号を
⌜ v i ⌝ = 00 1 i 0 , ⌜ l P ⌝ = 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} ┌ v i ┐ ┌ l P ┐ ┌ a ( P , Q ) ┐ = 00 1 i 0 , = 01 ┌ P ┐ , = 1 ┌ P ┐ ┌ Q ┐ と定める。
接頭辞00 , 01 , 1 00,01,1 00 , 01 , 1 は互いに区別することができ、変数符号は末尾の0 0 0 まで読めば終わる。したがって、構文木は左から一意に復号することができる。名前付き項をこの構文へ移す翻訳は、次節で束縛変数の列を引数に取る再帰として定める。
代入を機械で実行するため、切断位置以上の指標を増加させる全域操作を
↑ r c ( v i ) = { v i i < c , v i + r i ≥ c , ↑ r c ( l P ) = l ( ↑ r c + 1 P ) , ↑ r c ( a ( P , Q ) ) = a ( ↑ r c P , ↑ r c Q ) \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} ↑ r c ( v i ) ↑ r c ( l P ) ↑ r c ( a ( P , Q )) = { v i v i + r i < c , i ≥ c , = l ( ↑ r c + 1 P ) , = a ( ↑ r c P , ↑ r c Q )
と定める。また、束縛子を一つ除きながら代入する全域操作を
sub j ( N , v i ) = { v i i < j , N i = j , v i − 1 i > j , sub j ( N , l P ) = l ( sub j + 1 ( ↑ 1 0 N , 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} sub j ( N , v i ) sub j ( N , l P ) sub j ( N , a ( P , Q )) = ⎩ ⎨ ⎧ v i N v i − 1 i < j , i = j , i > j , = l ( sub j + 1 ( ↑ 1 0 N , P ) ) , = a ( sub j ( N , P ) , sub j ( N , Q ))
と定める。最上位の束縛変数への代入をSubTop ( N , P ) = sub 0 ( N , P ) \operatorname{SubTop}(N,P)=\operatorname{sub}_0(N,P) SubTop ( N , P ) = sub 0 ( N , P ) と書く。
代入の再帰は抽象を通るたびに切断位置を一つ上げるので、以下の議論では、切断位置が等しい二つのシフトを合成した結果を一つのシフトで書き直す等式を繰り返し用いる。先にこの等式を示す。
補題 6.2. 全ての de Bruijn 項P P P と全ての非負整数b , c b,c b , c について
↑ 1 b ( ↑ c b P ) = ↑ c + 1 b P \uparrow_1^b\bigl(\uparrow_c^bP\bigr)=\uparrow_{c+1}^bP ↑ 1 b ( ↑ c b P ) = ↑ c + 1 b P である。
証明. ↑ r c \uparrow_r^c ↑ r c の再帰呼出しは真部分項に対して行われるので、↑ r c \uparrow_r^c ↑ r c は有限な de Bruijn 項上の全域関数である。以下、c c c を固定し、全てのb b b について同時に成り立つことをP P P の構造に関する帰納法で示す。抽象の場合に切断位置を一つ上げた帰納法の仮定を用いるため、b b b を全称化した形で帰納法を回す必要がある。
P = v i P=\mathsf v_i P = v i の場合。i < b i<b i < b ならば↑ c b ( v i ) = v i \uparrow_c^b(\mathsf v_i)=\mathsf v_i ↑ c b ( v i ) = v i であり、i < b i<b i < b であるから↑ 1 b ( v i ) = v i \uparrow_1^b(\mathsf v_i)=\mathsf v_i ↑ 1 b ( v i ) = v i である。一方↑ c + 1 b ( v i ) = v i \uparrow_{c+1}^b(\mathsf v_i)=\mathsf v_i ↑ c + 1 b ( v i ) = v i であるから、両辺は一致する。i ≥ b i\ge b i ≥ b ならば↑ c b ( v i ) = v i + c \uparrow_c^b(\mathsf v_i)=\mathsf v_{i+c} ↑ c b ( v i ) = v i + c であり、c ≥ 0 c\ge 0 c ≥ 0 からi + c ≥ b i+c\ge b i + c ≥ b であるので↑ 1 b ( v i + c ) = v i + c + 1 \uparrow_1^b(\mathsf v_{i+c})=\mathsf v_{i+c+1} ↑ 1 b ( v i + c ) = v i + c + 1 である。一方↑ c + 1 b ( v i ) = v i + c + 1 \uparrow_{c+1}^b(\mathsf v_i)=\mathsf v_{i+c+1} ↑ c + 1 b ( v i ) = v i + c + 1 であるから、両辺は一致する。
P = a ( P 1 , P 2 ) P=\mathsf a(P_1,P_2) P = a ( P 1 , P 2 ) の場合。シフトは適用について準同型であるから
↑ 1 b ( ↑ c b a ( P 1 , P 2 ) ) = a ( ↑ 1 b ( ↑ c b P 1 ) , ↑ 1 b ( ↑ c b P 2 ) ) \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) ↑ 1 b ( ↑ c b a ( P 1 , P 2 ) ) = a ( ↑ 1 b ( ↑ c b P 1 ) , ↑ 1 b ( ↑ c b P 2 ) ) である。P 1 P_1 P 1 とP 2 P_2 P 2 に対する帰納法の仮定を同じb b b で用いると、右辺はa ( ↑ c + 1 b P 1 , ↑ c + 1 b P 2 ) = ↑ c + 1 b a ( P 1 , P 2 ) \mathsf a(\uparrow_{c+1}^bP_1,\uparrow_{c+1}^bP_2)=\uparrow_{c+1}^b\mathsf a(P_1,P_2) a ( ↑ c + 1 b P 1 , ↑ c + 1 b P 2 ) = ↑ c + 1 b a ( P 1 , P 2 ) に等しい。
P = l P 0 P=\mathsf lP_0 P = l P 0 の場合。定義により
↑ 1 b ( ↑ c b ( l P 0 ) ) = ↑ 1 b ( l ( ↑ c b + 1 P 0 ) ) = l ( ↑ 1 b + 1 ( ↑ c b + 1 P 0 ) ) \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) ↑ 1 b ( ↑ c b ( l P 0 ) ) = ↑ 1 b ( l ( ↑ c b + 1 P 0 ) ) = l ( ↑ 1 b + 1 ( ↑ c b + 1 P 0 ) ) である。P 0 P_0 P 0 に対する帰納法の仮定をb + 1 b+1 b + 1 で用いると、右辺はl ( ↑ c + 1 b + 1 P 0 ) = ↑ c + 1 b ( l P 0 ) \mathsf l\bigl(\uparrow_{c+1}^{b+1}P_0\bigr)=\uparrow_{c+1}^b(\mathsf lP_0) l ( ↑ c + 1 b + 1 P 0 ) = ↑ c + 1 b ( l P 0 ) に等しい。
変数、適用、抽象の三つの構文形を尽くしたので、主張が成り立つ。▨
補題 6.3. 上のシフト、sub \operatorname{sub} sub 、SubTop \operatorname{SubTop} SubTop は有限な de Bruijn 項上の全域関数である。さらに、次が成り立つ。
WF d + c ( P ) \operatorname{WF}_{d+c}(P) WF d + c ( P ) ならばWF d + r + c ( ↑ r c P ) \operatorname{WF}_{d+r+c}(\uparrow_r^cP) WF d + r + c ( ↑ r c P ) である。
WF d ( N ) \operatorname{WF}_d(N) WF d ( N ) かつWF d + c + 1 ( P ) \operatorname{WF}_{d+c+1}(P) WF d + c + 1 ( P ) ならば
WF d + c ( sub c ( ↑ c 0 N , P ) ) \operatorname{WF}_{d+c}
\bigl(\operatorname{sub}_c(\uparrow_c^0N,P)\bigr) WF d + c ( sub c ( ↑ c 0 N , P ) )
である。
特に、WF d ( N ) \operatorname{WF}_d(N) WF d ( N ) かつWF d + 1 ( P ) \operatorname{WF}_{d+1}(P) WF d + 1 ( P ) ならばWF d ( SubTop ( N , P ) ) \operatorname{WF}_d(\operatorname{SubTop}(N,P)) WF d ( SubTop ( N , P )) である。
証明. 各操作の再帰呼出しは真部分項に対して行われるので、有限構文木の構造に関する帰納法から全域性が従う。
(1) をP P P の構造に関する帰納法で示す。変数の場合、i < c i<c i < c なら指標は変わらずi < c ≤ d + r + c i<c\le d+r+c i < c ≤ d + r + c である。i ≥ c i\ge c i ≥ c なら、仮定i < d + c i<d+c i < d + c からi + r < d + r + c i+r<d+r+c i + r < d + r + c を得る。適用では二つの帰納法の仮定を用いる。抽象では深さと切断位置をともに一つ増やし、帰納法の仮定を本体へ適用する。
(2) もP P P の構造に関する帰納法で示す。P = v i P=\mathsf v_i P = v i とする。i < c i<c i < c ではv i \mathsf v_i v i が深さd + c d+c d + c でも整形式である。i = c i=c i = c では結果が↑ c 0 N \uparrow_c^0N ↑ c 0 N であり、(1) からWF d + c ( ↑ c 0 N ) \operatorname{WF}_{d+c}(\uparrow_c^0N) WF d + c ( ↑ c 0 N ) を得る。i > c i>c i > c ではi < d + c + 1 i<d+c+1 i < d + c + 1 からi − 1 < d + c i-1<d+c i − 1 < d + c を得る。適用の場合は二つの部分項へ帰納法の仮定を適用する。抽象の場合には、補題 6.2 をb = 0 b=0 b = 0 として用いると
↑ 1 0 ( ↑ c 0 N ) = ↑ c + 1 0 N \uparrow_1^0(\uparrow_c^0N)=\uparrow_{c+1}^0N ↑ 1 0 ( ↑ c 0 N ) = ↑ c + 1 0 N である。切断位置をc + 1 c+1 c + 1 として本体へ帰納法の仮定を適用すると、結果は深さd + c + 1 d+c+1 d + c + 1 で整形式となる。(3) は(2) でc = 0 c=0 c = 0 とした場合である。▨
7 名前付き項から de Bruijn 項への翻訳
de Bruijn 項は変数名をもたないので、名前付き項との対応を与えなければ、前節の操作を§E15.8 定義 2.4 の代入と結び付けることができない。以下では、変数出現から対応する束縛子までに通過する抽象の個数を指標とする翻訳を、束縛変数の列を引数に取る再帰として定め、翻訳がアルファ同値と代入を保存することを証明する。
定義 7.1. 束縛文脈 (binding context ) とは、変数の有限列Ξ = ( y 0 , … , y d − 1 ) \Xi=(y_0,\ldots,y_{d-1}) Ξ = ( y 0 , … , y d − 1 ) である。同じ変数が二回以上現れてよい。長さを∣ Ξ ∣ = d |\Xi|=d ∣Ξ∣ = d と書き、空列をε \varepsilon ε 、長さ1 1 1 の列を( x ) (x) ( x ) 、先頭への追加をx ⋅ Ξ x\cdot\Xi x ⋅ Ξ 、二つの列の連結をΔ Ξ \Delta\Xi ΔΞ と書く。Ξ \Xi Ξ に現れる変数の集合をset ( Ξ ) \operatorname{set}(\Xi) set ( Ξ ) と書く。x ∈ set ( Ξ ) x\in\operatorname{set}(\Xi) x ∈ set ( Ξ ) のとき、
idx Ξ ( x ) = min { i < d ∣ y i = x } \operatorname{idx}_\Xi(x)=\min\{i<d\mid y_i=x\} idx Ξ ( x ) = min { i < d ∣ y i = x } と定める。最小の添字を取るので、同じ変数を束縛する抽象が入れ子になっている場合には、最も内側の束縛子が選ばれる。
名前付き項M M M と束縛文脈Ξ \Xi Ξ に対する de Bruijn 項dB Ξ ( M ) \operatorname{dB}_\Xi(M) dB Ξ ( M ) を、M M M の構文に関する再帰によって
dB Ξ ( x ) = v idx Ξ ( x ) ( x ∈ set ( Ξ ) ) , dB Ξ ( λ x . M 0 ) = l ( dB x ⋅ Ξ ( M 0 ) ) , dB Ξ ( M 1 M 2 ) = a ( dB Ξ ( M 1 ) , dB Ξ ( M 2 ) ) \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} dB Ξ ( x ) dB Ξ ( λ x . M 0 ) dB Ξ ( M 1 M 2 ) = v idx Ξ ( x ) = l ( dB x ⋅ Ξ ( M 0 ) ) , = a ( dB Ξ ( M 1 ) , dB Ξ ( M 2 ) ) ( x ∈ set ( Ξ )) , と定める。x ∉ set ( Ξ ) x\notin\operatorname{set}(\Xi) x ∈ / set ( Ξ ) である変数に対しては定めない。閉項M M M についてはdB ( M ) = dB ε ( M ) \operatorname{dB}(M)=\operatorname{dB}_\varepsilon(M) dB ( M ) = dB ε ( M ) と書く。
この再帰は、アルファ同値で商を取る前の代表元に対して定める。結果が代表元によらないことは補題 7.4 で示す。
補題 7.2. 次の二つが成り立つ。
FV ( M ) ⊆ set ( Ξ ) \operatorname{FV}(M)\subseteq\operatorname{set}(\Xi) FV ( M ) ⊆ set ( Ξ ) かつ∣ Ξ ∣ = d |\Xi|=d ∣Ξ∣ = d ならば、dB Ξ ( M ) \operatorname{dB}_\Xi(M) dB Ξ ( M ) は定義され、WF d ( dB Ξ ( M ) ) \operatorname{WF}_d\bigl(\operatorname{dB}_\Xi(M)\bigr) WF d ( dB Ξ ( M ) ) を満たす。
束縛文脈Ξ , Ξ ′ \Xi,\Xi' Ξ , Ξ ′ が、FV ( M ) \operatorname{FV}(M) FV ( M ) の各変数z z z についてidx Ξ ( z ) \operatorname{idx}_\Xi(z) idx Ξ ( z ) とidx Ξ ′ ( z ) \operatorname{idx}_{\Xi'}(z) idx Ξ ′ ( z ) をともに定義し、かつ二つの指標が等しいならば、dB Ξ ( M ) = dB Ξ ′ ( M ) \operatorname{dB}_\Xi(M)=\operatorname{dB}_{\Xi'}(M) dB Ξ ( M ) = dB Ξ ′ ( M ) である。
証明. (1) をM M M の構造に関する帰納法で示す。M = z M=z M = z の場合、z ∈ set ( Ξ ) z\in\operatorname{set}(\Xi) z ∈ set ( Ξ ) であるからidx Ξ ( z ) \operatorname{idx}_\Xi(z) idx Ξ ( z ) が定義され、その値はd d d 未満である。したがってWF d ( v idx Ξ ( z ) ) \operatorname{WF}_d(\mathsf v_{\operatorname{idx}_\Xi(z)}) WF d ( v idx Ξ ( z ) ) である。M = λ u . M 0 M=\lambda u.M_0 M = λ u . M 0 の場合、FV ( M 0 ) ⊆ FV ( M ) ∪ { u } ⊆ set ( u ⋅ Ξ ) \operatorname{FV}(M_0)\subseteq\operatorname{FV}(M)\cup\{u\}\subseteq\operatorname{set}(u\cdot\Xi) FV ( M 0 ) ⊆ FV ( M ) ∪ { u } ⊆ set ( u ⋅ Ξ ) であり、∣ u ⋅ Ξ ∣ = d + 1 |u\cdot\Xi|=d+1 ∣ u ⋅ Ξ∣ = d + 1 である。本体に対する帰納法の仮定とWF d ( l P ) ⟺ WF d + 1 ( P ) \operatorname{WF}_d(\mathsf lP)\iff\operatorname{WF}_{d+1}(P) WF d ( l P ) ⟺ WF d + 1 ( P ) から結論を得る。M = M 1 M 2 M=M_1M_2 M = M 1 M 2 の場合、FV ( M i ) ⊆ FV ( M ) \operatorname{FV}(M_i)\subseteq\operatorname{FV}(M) FV ( M i ) ⊆ FV ( M ) であるから、二つの帰納法の仮定を合わせる。
(2) もM M M の構造に関する帰納法で示す。変数の場合は仮定そのものである。適用の場合は二つの帰納法の仮定を用いる。抽象λ u . M 0 \lambda u.M_0 λ u . M 0 の場合には、二つの文脈をu ⋅ Ξ u\cdot\Xi u ⋅ Ξ とu ⋅ Ξ ′ u\cdot\Xi' u ⋅ Ξ ′ へ延ばす。z ∈ FV ( M 0 ) z\in\operatorname{FV}(M_0) z ∈ FV ( M 0 ) とする。z = u z=u z = u ならば、最小の添字を取る規約により両方の指標が0 0 0 である。z ≠ u z\ne u z = u ならばz ∈ FV ( M ) z\in\operatorname{FV}(M) z ∈ 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) idx u ⋅ Ξ ( z ) = 1 + idx Ξ ( z ) = 1 + idx Ξ ′ ( z ) = idx u ⋅ Ξ ′ ( z ) である。本体に対する帰納法の仮定から結論を得る。▨
補題 7.3. 束縛文脈Δ , Ξ \Delta,\Xi Δ , Ξ と項N N N が
FV ( N ) ⊆ set ( Ξ ) , set ( Δ ) ∩ FV ( N ) = ∅ \operatorname{FV}(N)\subseteq\operatorname{set}(\Xi),
\qquad
\operatorname{set}(\Delta)\cap\operatorname{FV}(N)=\varnothing FV ( N ) ⊆ set ( Ξ ) , set ( Δ ) ∩ FV ( N ) = ∅ を満たすならば、c = ∣ Δ ∣ c=|\Delta| c = ∣Δ∣ として
dB Δ Ξ ( N ) = ↑ c 0 dB Ξ ( N ) \operatorname{dB}_{\Delta\Xi}(N)=\uparrow_c^0\operatorname{dB}_\Xi(N) dB ΔΞ ( N ) = ↑ c 0 dB Ξ ( N ) である。
証明. 束縛文脈Θ \Theta Θ (長さb b b )を加えた次の主張を、N N N の構造に関する帰納法で示す。
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 FV ( N ) ⊆ set ( Θ ) ∪ set ( Ξ ) , set ( Δ ) ∩ ( FV ( N ) ∖ set ( Θ ) ) = ∅ ならば
dB Θ Δ Ξ ( N ) = ↑ c b dB Θ Ξ ( N ) \operatorname{dB}_{\Theta\Delta\Xi}(N)
=\uparrow_c^b\operatorname{dB}_{\Theta\Xi}(N) dB ΘΔΞ ( N ) = ↑ c b dB ΘΞ ( N ) である。Θ = ε \Theta=\varepsilon Θ = ε とすれば補題の等式を得る。
N = z N=z N = z とする。z ∈ set ( Θ ) z\in\operatorname{set}(\Theta) z ∈ set ( Θ ) ならば、両辺の内側の指標はidx Θ ( z ) < b \operatorname{idx}_\Theta(z)<b idx Θ ( z ) < b であり、↑ c b \uparrow_c^b ↑ c b はb b b 未満の指標を変えない。z ∉ set ( Θ ) z\notin\operatorname{set}(\Theta) z ∈ / set ( Θ ) ならば、第2の仮定によりz ∉ set ( Δ ) z\notin\operatorname{set}(\Delta) z ∈ / set ( Δ ) であり、第1の仮定によりz ∈ set ( Ξ ) z\in\operatorname{set}(\Xi) z ∈ set ( Ξ ) である。左辺の指標はb + c + idx Ξ ( z ) b+c+\operatorname{idx}_\Xi(z) b + c + idx Ξ ( z ) であり、右辺では内側の指標b + idx Ξ ( z ) b+\operatorname{idx}_\Xi(z) b + idx Ξ ( z ) がb b b 以上であるから↑ c b \uparrow_c^b ↑ c b がc c c を加える。両辺は一致する。
N = N 1 N 2 N=N_1N_2 N = N 1 N 2 の場合には、↑ c b \uparrow_c^b ↑ c b が適用について準同型であることと、二つの帰納法の仮定を用いる。
N = λ u . N 0 N=\lambda u.N_0 N = λ u . N 0 の場合には、Θ \Theta Θ をu ⋅ Θ u\cdot\Theta u ⋅ Θ へ、b b b をb + 1 b+1 b + 1 へ置き換える。FV ( N 0 ) ⊆ FV ( N ) ∪ { u } \operatorname{FV}(N_0)\subseteq\operatorname{FV}(N)\cup\{u\} FV ( N 0 ) ⊆ FV ( N ) ∪ { u } であるから第1の仮定が保たれ、
FV ( N 0 ) ∖ set ( u ⋅ Θ ) ⊆ FV ( N ) ∖ set ( Θ ) \operatorname{FV}(N_0)\setminus\operatorname{set}(u\cdot\Theta)
\subseteq\operatorname{FV}(N)\setminus\operatorname{set}(\Theta) FV ( N 0 ) ∖ set ( u ⋅ Θ ) ⊆ FV ( N ) ∖ set ( Θ ) であるから第2の仮定も保たれる。↑ c b ( l P ) = l ( ↑ c b + 1 P ) \uparrow_c^b(\mathsf lP)=\mathsf l(\uparrow_c^{b+1}P) ↑ c b ( l P ) = l ( ↑ c b + 1 P ) と本体に対する帰納法の仮定から結論を得る。変数、適用、抽象の三つの構文形を尽くした。▨
補題 7.4. 次の二つが成り立つ。
項P P P と変数x , y x,y x , y がy ∉ Var ( P ) ∪ { x } y\notin\operatorname{Var}(P)\cup\{x\} y ∈ / Var ( P ) ∪ { 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) x ∈ / set ( Δ ) , y ∈ / set ( Δ ) , FV ( P ) ⊆ set ( Δ ) ∪ { x } ∪ set ( Ξ )
を満たすならば、
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) dB Δ ( x ) Ξ ( P ) = dB Δ ( y ) Ξ ( ρ x → y ( P ) )
である。
M ≡ α M ′ M\equiv_\alpha M' M ≡ α M ′ かつFV ( M ) ⊆ set ( Ξ ) \operatorname{FV}(M)\subseteq\operatorname{set}(\Xi) FV ( M ) ⊆ set ( Ξ ) ならばdB Ξ ( M ) = dB Ξ ( M ′ ) \operatorname{dB}_\Xi(M)=\operatorname{dB}_\Xi(M') dB Ξ ( M ) = dB Ξ ( M ′ ) である。したがって、翻訳はアルファ同値類上の写像として定まる。
証明. (1) をP P P の構造に関する帰納法で示す。c = ∣ Δ ∣ c=|\Delta| c = ∣Δ∣ と書く。
P = x P=x P = x の場合。ρ x → y ( x ) = y \rho_{x\to y}(x)=y ρ x → y ( x ) = y である。x ∉ set ( Δ ) x\notin\operatorname{set}(\Delta) x ∈ / set ( Δ ) であるから左辺の指標はc c c であり、y ∉ set ( Δ ) y\notin\operatorname{set}(\Delta) y ∈ / set ( Δ ) であるから右辺の指標もc c c である。
P = z ≠ x P=z\ne x P = z = x の場合。ρ x → y ( z ) = z \rho_{x\to y}(z)=z ρ x → y ( z ) = z であり、y ∉ Var ( P ) = { z } y\notin\operatorname{Var}(P)=\{z\} y ∈ / Var ( P ) = { z } からz ≠ y z\ne y z = y である。z ∈ set ( Δ ) z\in\operatorname{set}(\Delta) z ∈ set ( Δ ) ならば両辺の指標はidx Δ ( z ) \operatorname{idx}_\Delta(z) idx Δ ( z ) である。z ∉ set ( Δ ) z\notin\operatorname{set}(\Delta) z ∈ / set ( Δ ) ならば、仮定によりz ∈ set ( Ξ ) z\in\operatorname{set}(\Xi) z ∈ set ( Ξ ) であり、z ≠ x z\ne x z = x とz ≠ y z\ne y z = y から両辺の指標はともにc + 1 + idx Ξ ( z ) c+1+\operatorname{idx}_\Xi(z) c + 1 + idx Ξ ( z ) である。
P = P 1 P 2 P=P_1P_2 P = P 1 P 2 の場合。ρ x → y \rho_{x\to y} ρ x → y は適用について準同型であり、FV ( P i ) ⊆ FV ( P ) \operatorname{FV}(P_i)\subseteq\operatorname{FV}(P) FV ( P i ) ⊆ FV ( P ) 、y ∉ Var ( P i ) y\notin\operatorname{Var}(P_i) y ∈ / Var ( P i ) であるから、二つの帰納法の仮定を合わせる。
P = λ x . P 0 P=\lambda x.P_0 P = λ x . P 0 の場合。§E15.8 定義 2.1 によりρ x → y ( λ x . P 0 ) = λ x . P 0 \rho_{x\to y}(\lambda x.P_0)=\lambda x.P_0 ρ x → y ( λ x . P 0 ) = λ x . P 0 である。示すべき等式は
dB x ⋅ Δ ( x ) Ξ ( P 0 ) = dB x ⋅ Δ ( y ) Ξ ( P 0 ) \operatorname{dB}_{x\cdot\Delta\,(x)\,\Xi}(P_0)
=\operatorname{dB}_{x\cdot\Delta\,(y)\,\Xi}(P_0) dB x ⋅ Δ ( x ) Ξ ( P 0 ) = dB x ⋅ Δ ( y ) Ξ ( P 0 ) である。z ∈ FV ( P 0 ) z\in\operatorname{FV}(P_0) z ∈ FV ( P 0 ) とする。z = x z=x z = x ならば両方の指標は0 0 0 である。z ≠ x z\ne x z = x ならばz ∈ FV ( P ) z\in\operatorname{FV}(P) z ∈ FV ( P ) であり、y ∉ Var ( P ) y\notin\operatorname{Var}(P) y ∈ / Var ( P ) からz ≠ y z\ne y z = y である。z ∈ set ( Δ ) z\in\operatorname{set}(\Delta) z ∈ set ( Δ ) の場合は両方の指標が1 + idx Δ ( z ) 1+\operatorname{idx}_\Delta(z) 1 + idx Δ ( z ) 、そうでない場合は仮定によりz ∈ set ( Ξ ) z\in\operatorname{set}(\Xi) z ∈ set ( Ξ ) であり両方の指標がc + 2 + idx Ξ ( z ) c+2+\operatorname{idx}_\Xi(z) c + 2 + idx Ξ ( z ) である。補題 7.2 の補題 7.2 (2) から等式を得る。
P = λ u . P 0 P=\lambda u.P_0 P = λ u . P 0 かつu ≠ x u\ne x u = x の場合。ρ x → y ( λ u . P 0 ) = λ u . ρ x → y ( P 0 ) \rho_{x\to y}(\lambda u.P_0)=\lambda u.\rho_{x\to y}(P_0) ρ x → y ( λ u . P 0 ) = λ u . ρ x → y ( P 0 ) である。u ∈ BV ( P ) ⊆ Var ( P ) u\in\operatorname{BV}(P)\subseteq\operatorname{Var}(P) u ∈ BV ( P ) ⊆ Var ( P ) とy ∉ Var ( P ) y\notin\operatorname{Var}(P) y ∈ / Var ( P ) からu ≠ y u\ne y u = y である。したがってΔ \Delta Δ をu ⋅ Δ u\cdot\Delta u ⋅ Δ へ置き換えても第1と第2の仮定が保たれ、FV ( P 0 ) ⊆ FV ( P ) ∪ { u } \operatorname{FV}(P_0)\subseteq\operatorname{FV}(P)\cup\{u\} FV ( P 0 ) ⊆ FV ( P ) ∪ { u } から第3の仮定も保たれる。本体に対する帰納法の仮定を抽象の翻訳の式へ入れると結論を得る。変数、適用、および二種類の抽象を尽くした。
(2) を示す。最初に、アルファ同値な項の自由変数集合が等しいことを確かめる。ρ u → y \rho_{u\to y} ρ u → y の定義に関する構造帰納法により、y ∉ Var ( P ) y\notin\operatorname{Var}(P) y ∈ / 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} FV ( ρ u → y ( P ) ) = { ( FV ( P ) ∖ { u } ) ∪ { y } FV ( P ) ( u ∈ FV ( P )) , ( u ∈ / FV ( P )) である。したがって§E15.8 定義 2.2 の改名生成規則の両辺の自由変数集合は、ともにFV ( P ) ∖ { u } \operatorname{FV}(P)\setminus\{u\} FV ( P ) ∖ { u } である。項文脈の規則と同値関係の規則もこの性質を保つ。
M ≡ α M ′ M\equiv_\alpha M' M ≡ α M ′ の導出に関する帰納法を用いる。反射性と対称性の段階では帰納法の仮定と等号の性質を用いる。推移性の段階では、中間の項の自由変数集合がFV ( M ) \operatorname{FV}(M) FV ( M ) と等しいので、二つの帰納法の仮定を同じΞ \Xi Ξ について適用することができる。
改名生成規則を項文脈の中で一回用いる段階を、改名位置から根までの一穴項文脈の構造に関する帰納法で示す。文脈が空の場合、比較する二項はλ u . P \lambda u.P λ u . P とλ y . ρ u → y ( P ) \lambda y.\rho_{u\to y}(P) λ y . ρ u → y ( P ) であり、y ∉ Var ( P ) ∪ { u } y\notin\operatorname{Var}(P)\cup\{u\} y ∈ / Var ( P ) ∪ { u } である。FV ( λ u . P ) ⊆ set ( Ξ ) \operatorname{FV}(\lambda u.P)\subseteq\operatorname{set}(\Xi) FV ( λ u . P ) ⊆ set ( Ξ ) からFV ( P ) ⊆ { u } ∪ set ( Ξ ) \operatorname{FV}(P)\subseteq\{u\}\cup\operatorname{set}(\Xi) FV ( P ) ⊆ { u } ∪ set ( Ξ ) を得る。(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) dB ( u ) Ξ ( P ) = dB ( y ) Ξ ( ρ u → y ( P ) ) であり、抽象の翻訳の式から二項の翻訳が一致する。文脈がλ v . C [ ] \lambda v.C[\,] λ v . C [ ] の場合には、束縛文脈をv ⋅ Ξ v\cdot\Xi v ⋅ Ξ へ延ばして帰納法の仮定を用いる。文脈がC [ ] Q C[\,]Q C [ ] Q またはQ C [ ] QC[\,] QC [ ] の場合には、変化しない側の翻訳が等しく、変化する側へ帰納法の仮定を用いる。空文脈、抽象の本体、適用の作用素、適用の引数は一穴項文脈の全ての構成法であるから、場合分けは尽くされている。▨
命題 7.5. 束縛文脈Ξ \Xi Ξ 、変数x x x 、項M , N M,N M , 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) FV ( M ) ⊆ { x } ∪ set ( Ξ ) , FV ( N ) ⊆ set ( Ξ ) を満たすならば、
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) dB Ξ ( M [ x := N ] ) = SubTop ( dB Ξ ( N ) , dB x ⋅ Ξ ( M ) ) である。とくに、λ x . M \lambda x.M λ x . M とV V V がともに閉項でありdB ( λ x . M ) = l R \operatorname{dB}(\lambda x.M)=\mathsf lR dB ( λ x . M ) = l R ならば、
SubTop ( dB ( V ) , R ) = dB ( M [ x : = V ] ) \operatorname{SubTop}\bigl(\operatorname{dB}(V),R\bigr)
=\operatorname{dB}\bigl(M[x:=V]\bigr) SubTop ( dB ( V ) , R ) = dB ( M [ x := V ] ) である。
証明. 補題 7.4 (2) により、右辺はM M M のアルファ同値類だけに依存する。左辺も、§E15.8 命題 2.5 によりM [ x : = N ] M[x:=N] M [ x := N ] のアルファ同値類がM M M のアルファ同値類だけで定まるので、M M M の代表元によらない。したがって、M M M の代表元として、束縛変数が全て{ x } ∪ FV ( N ) \{x\}\cup\operatorname{FV}(N) { x } ∪ FV ( N ) の外にあるものを選んでよい。各束縛子の変数を、有限集合Var ( M ) ∪ Var ( N ) ∪ { x } \operatorname{Var}(M)\cup\operatorname{Var}(N)\cup\{x\} Var ( M ) ∪ Var ( N ) ∪ { x } の外の相異なる変数へ内側から順に改名すれば、そのような代表元が得られる。この代表元では、§E15.8 定義 2.4 の再帰が改名を必要とせず、抽象については( λ u . M 0 ) [ x : = N ] = λ u . ( M 0 [ x : = N ] ) (\lambda u.M_0)[x:=N]=\lambda u.\bigl(M_0[x:=N]\bigr) ( λ u . M 0 ) [ x := N ] = λ u . ( M 0 [ x := N ] ) である。また、M M M の部分項の束縛変数も同じ条件を満たす。
次の一般化した主張を、M M M の構造に関する帰納法で示す。束縛文脈Δ \Delta Δ (長さc c c )とΞ \Xi Ξ が
x ∉ set ( Δ ) , set ( Δ ) ∩ FV ( N ) = ∅ , x\notin\operatorname{set}(\Delta),
\qquad
\operatorname{set}(\Delta)\cap\operatorname{FV}(N)=\varnothing, x ∈ / set ( Δ ) , set ( Δ ) ∩ FV ( N ) = ∅ , 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) FV ( M ) ⊆ set ( Δ ) ∪ { x } ∪ set ( Ξ ) , FV ( N ) ⊆ set ( Ξ ) を満たすならば、
dB Δ Ξ ( M [ x : = N ] ) = sub c ( ↑ c 0 D , 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) dB ΔΞ ( M [ x := N ] ) = sub c ( ↑ c 0 D , dB Δ ( x ) Ξ ( M ) ) , D = dB Ξ ( N ) である。Δ = ε \Delta=\varepsilon Δ = ε とすれば命題の第1の等式を得る。
M = x M=x M = x の場合。左辺はdB Δ Ξ ( N ) \operatorname{dB}_{\Delta\Xi}(N) dB ΔΞ ( N ) である。x ∉ set ( Δ ) x\notin\operatorname{set}(\Delta) x ∈ / set ( Δ ) であるからidx Δ ( x ) Ξ ( x ) = c \operatorname{idx}_{\Delta\,(x)\,\Xi}(x)=c idx Δ ( x ) Ξ ( x ) = c であり、右辺はsub c ( ↑ c 0 D , v c ) = ↑ c 0 D \operatorname{sub}_c(\uparrow_c^0D,\mathsf v_c)=\uparrow_c^0D sub c ( ↑ c 0 D , v c ) = ↑ c 0 D である。補題 7.3 により両辺は一致する。
M = z ≠ x M=z\ne x M = z = x の場合。左辺はdB Δ Ξ ( z ) \operatorname{dB}_{\Delta\Xi}(z) dB ΔΞ ( z ) である。z ∈ set ( Δ ) z\in\operatorname{set}(\Delta) z ∈ set ( Δ ) ならば、二つの束縛文脈における指標はともにidx Δ ( z ) < c \operatorname{idx}_\Delta(z)<c idx Δ ( z ) < c であり、sub c \operatorname{sub}_c sub c はこれを変えない。z ∉ set ( Δ ) z\notin\operatorname{set}(\Delta) z ∈ / set ( Δ ) ならばz ∈ set ( Ξ ) z\in\operatorname{set}(\Xi) z ∈ set ( Ξ ) であり、idx Δ ( x ) Ξ ( z ) = c + 1 + idx Ξ ( z ) > c \operatorname{idx}_{\Delta\,(x)\,\Xi}(z)=c+1+\operatorname{idx}_\Xi(z)>c idx Δ ( x ) Ξ ( z ) = c + 1 + idx Ξ ( z ) > c であるから、sub c \operatorname{sub}_c sub c は指標を一つ減らしてc + idx Ξ ( z ) c+\operatorname{idx}_\Xi(z) c + idx Ξ ( z ) とする。これはidx Δ Ξ ( z ) \operatorname{idx}_{\Delta\Xi}(z) idx ΔΞ ( z ) に等しい。
M = M 1 M 2 M=M_1M_2 M = M 1 M 2 の場合。代入、翻訳、sub c \operatorname{sub}_c sub c のいずれも適用について準同型であるから、二つの帰納法の仮定を合わせる。
M = λ u . M 0 M=\lambda u.M_0 M = λ u . M 0 の場合。代表元の選び方によりu ≠ x u\ne x u = x かつu ∉ FV ( N ) u\notin\operatorname{FV}(N) u ∈ / FV ( N ) であり、M [ x : = N ] = λ u . ( M 0 [ x : = N ] ) M[x:=N]=\lambda u.\bigl(M_0[x:=N]\bigr) M [ x := N ] = λ u . ( M 0 [ x := N ] ) である。左辺はl dB u ⋅ Δ Ξ ( M 0 [ x : = N ] ) \mathsf l\,\operatorname{dB}_{u\cdot\Delta\Xi}\bigl(M_0[x:=N]\bigr) l dB u ⋅ ΔΞ ( M 0 [ x := N ] ) である。右辺は
sub c ( ↑ c 0 D , l dB u ⋅ Δ ( x ) Ξ ( M 0 ) ) = l sub c + 1 ( ↑ 1 0 ↑ c 0 D , dB u ⋅ Δ ( x ) Ξ ( M 0 ) ) \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) sub c ( ↑ c 0 D , l dB u ⋅ Δ ( x ) Ξ ( M 0 ) ) = l sub c + 1 ( ↑ 1 0 ↑ c 0 D , dB u ⋅ Δ ( x ) Ξ ( M 0 ) ) である。補題 6.2 をb = 0 b=0 b = 0 として用いると↑ 1 0 ( ↑ c 0 D ) = ↑ c + 1 0 D \uparrow_1^0(\uparrow_c^0D)=\uparrow_{c+1}^0D ↑ 1 0 ( ↑ c 0 D ) = ↑ c + 1 0 D であるから、右辺はl sub c + 1 ( ↑ c + 1 0 D , dB u ⋅ Δ ( x ) Ξ ( M 0 ) ) \mathsf l\,\operatorname{sub}_{c+1}\bigl(\uparrow_{c+1}^0D,\operatorname{dB}_{u\cdot\Delta\,(x)\,\Xi}(M_0)\bigr) l sub c + 1 ( ↑ c + 1 0 D , dB u ⋅ Δ ( x ) Ξ ( M 0 ) ) である。束縛文脈u ⋅ Δ u\cdot\Delta u ⋅ Δ はx ∉ set ( u ⋅ Δ ) x\notin\operatorname{set}(u\cdot\Delta) x ∈ / set ( u ⋅ Δ ) とset ( u ⋅ Δ ) ∩ FV ( N ) = ∅ \operatorname{set}(u\cdot\Delta)\cap\operatorname{FV}(N)=\varnothing set ( u ⋅ Δ ) ∩ FV ( N ) = ∅ を満たし、FV ( M 0 ) ⊆ FV ( M ) ∪ { u } \operatorname{FV}(M_0)\subseteq\operatorname{FV}(M)\cup\{u\} FV ( M 0 ) ⊆ FV ( M ) ∪ { u } である。したがって、M 0 M_0 M 0 とu ⋅ Δ u\cdot\Delta u ⋅ Δ に対する帰納法の仮定が両辺を一致させる。
変数、適用、抽象の三つの構文形を尽くしたので、一般化した主張が成り立つ。第2の等式は、λ x . M \lambda x.M λ x . M とV V V が閉項の場合にΞ = ε \Xi=\varepsilon Ξ = ε とし、翻訳の抽象に関する式からR = dB ( x ) ( M ) R=\operatorname{dB}_{(x)}(M) R = dB ( x ) ( M ) であることを用いたものである。▨
8 ラムダ計算から Turing 機械へ
de Bruijn 項の値をl P \mathsf lP l P とする。閉項上の一段評価を、次の部分関数として固定する。
定義 8.1. 閉 de Bruijn 項D D D に対する部分関数Step v ( D ) \operatorname{Step}_v(D) Step v ( D ) (one-step call-by-value evaluation function ) を、値では未定義とし、値でない場合には次の規則で定める。
D = a ( P , Q ) D=\mathsf a(P,Q) D = a ( P , Q ) かつP P P が値でない場合には、
Step v ( D ) = a ( Step v ( P ) , Q ) \operatorname{Step}_v(D)
=\mathsf a(\operatorname{Step}_v(P),Q) Step v ( D ) = a ( Step v ( P ) , Q )
とする。
D = a ( l R , Q ) D=\mathsf a(\mathsf lR,Q) D = a ( l R , Q ) かつQ Q Q が値でない場合には、
Step v ( D ) = a ( l R , Step v ( Q ) ) \operatorname{Step}_v(D)
=\mathsf a(\mathsf lR,\operatorname{Step}_v(Q)) Step v ( D ) = a ( l R , Step v ( Q ))
とする。
D = a ( l R , Q ) D=\mathsf a(\mathsf lR,Q) D = a ( l R , Q ) かつQ Q Q が値である場合には、
Step v ( D ) = SubTop ( Q , R ) \operatorname{Step}_v(D)=\operatorname{SubTop}(Q,R) Step v ( D ) = SubTop ( Q , R )
とする。
各再帰呼出しは真部分項に対して行う。したがって、閉項D D D が値でなければ、三規則のうちちょうど一つが適用される。
前節の翻訳により、この部分関数は名前付き項の一段評価と対応する。
補題 8.2. M M M を閉じた名前付き項とする。
M M M が値であることと、dB ( M ) \operatorname{dB}(M) dB ( M ) がl P \mathsf lP l P の形であることは同値である。
M M M が値ならばStep v ( dB ( M ) ) \operatorname{Step}_v(\operatorname{dB}(M)) Step v ( dB ( M )) は定義されない。M M M が値でなければ、補題 1.2 の一意な次項M ′ M' M ′ について
Step v ( dB ( M ) ) = dB ( M ′ ) \operatorname{Step}_v\bigl(\operatorname{dB}(M)\bigr)=\operatorname{dB}(M') Step v ( dB ( M ) ) = dB ( M ′ )
である。
証明. (1) を示す。閉項は変数ではない。抽象の翻訳はl \mathsf l l で始まり、適用の翻訳はa \mathsf a a で始まる。定義 1.1 の値は抽象であるから、両者は対応する。Step v \operatorname{Step}_v Step v は値で定義されないので、(2) の前半も従う。
(2) の後半をM M M の構造に関する帰納法で示す。値でない閉項M M M は閉じた適用P Q PQ P Q であり、P P P とQ Q Q も閉項である。翻訳は適用について準同型であるから、dB ( M ) = a ( dB ( P ) , dB ( Q ) ) \operatorname{dB}(M)=\mathsf a(\operatorname{dB}(P),\operatorname{dB}(Q)) dB ( M ) = a ( dB ( P ) , dB ( Q )) である。
P P P が値でない場合。補題 1.2 の証明にある評価文脈[ ] Q [\,]Q [ ] Q によりM ′ = P ′ Q M'=P'Q M ′ = P ′ Q であり、P ′ P' P ′ はP P P の一意な次項である。(1) によりdB ( P ) \operatorname{dB}(P) 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) Step v ( dB ( M )) = a ( Step v ( dB ( P )) , dB ( Q ) ) である。P P P に対する帰納法の仮定からStep v ( dB ( P ) ) = dB ( P ′ ) \operatorname{Step}_v(\operatorname{dB}(P))=\operatorname{dB}(P') Step v ( dB ( P )) = dB ( P ′ ) であり、右辺はdB ( P ′ Q ) \operatorname{dB}(P'Q) dB ( P ′ Q ) に等しい。
P P P が値でQ Q Q が値でない場合。P = λ x . M 0 P=\lambda x.M_0 P = λ x . M 0 であるからdB ( P ) = l R \operatorname{dB}(P)=\mathsf lR dB ( P ) = l R の形であり、dB ( Q ) \operatorname{dB}(Q) dB ( Q ) は値ではない。評価文脈P [ ] P[\,] P [ ] によりM ′ = P Q ′ M'=PQ' M ′ = P Q ′ である。定義 8.1 (2) とQ Q Q に対する帰納法の仮定から結論を得る。
P P P とQ Q Q がともに値の場合。P = λ x . M 0 P=\lambda x.M_0 P = λ x . M 0 であり、根のβ基の縮約によりM ′ = M 0 [ x : = Q ] M'=M_0[x:=Q] M ′ = M 0 [ x := Q ] である。dB ( P ) = l R \operatorname{dB}(P)=\mathsf lR dB ( P ) = l R とすると、定義 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) Step v ( dB ( M )) = SubTop ( dB ( Q ) , R ) である。λ x . M 0 \lambda x.M_0 λ x . M 0 とQ Q Q は閉項であるから、命題 7.5 の命題 7.5 の第2の等式により、これはdB ( M 0 [ x : = Q ] ) \operatorname{dB}(M_0[x:=Q]) dB ( M 0 [ x := Q ]) に等しい。三つの場合は補題 1.2 の場合分けと一致し、互いに排他的である。▨
補題 8.3. 符号化された閉じた de Bruijn 項D D D を入力として、D D D が値かどうかを判定し、値でなければ弱い値呼び評価の一意な次項Step v ( D ) \operatorname{Step}_v(D) Step v ( D ) を出力する決定性多テープ Turing 機械を構成することができる。出力は再び閉じた整形式項である。
証明. 機械は入力を左から走査し、作業テープ上のスタックを用いて接頭辞符号を構文木へ復号する。同じ走査でWF 0 \operatorname{WF}_0 WF 0 を検査することができる。作用子側から構文木を再帰的に下り、値の場合、作用子を一段評価する場合、引数を一段評価する場合、根のβ基を縮約する場合を判定する。再帰的探索は毎回真部分木へ進むので有限回で終了する。根のβ基に達した場合には、別の作業テープ上で↑ \uparrow ↑ とsub \operatorname{sub} sub の構造再帰を実行する。指標は単項表現の1 1 1 の個数として加算、比較、1の減算を有限走査で実行することができる。補題 6.3 により代入は全域で整形式を保存する。
閉じた de Bruijn 項が値でなければ、定義 8.1 の三規則のうちちょうど一つが適用され、その右辺は真部分項に対する再帰とSubTop \operatorname{SubTop} SubTop だけを用いる。したがって、機械の出力はStep v \operatorname{Step}_v Step v の値そのものである。この出力が名前付き項の弱い値呼び一段評価と一致することは、補題 8.2 が与える。構文木を接頭辞符号へ再符号化すれば、所要の多テープ機械を得る。▨
数値出力を判定するため、正準数値の de Bruijn 項を記述する。
定義 8.4 (値呼び Church 数の de Bruijn 符号).
C 0 = l ( l v 0 ) , C n + 1 = l ( l ( a ( v 1 , a ( a ( C n , v 1 ) , v 0 ) ) ) ) . \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} C 0 C n + 1 = l ( l v 0 ) , = l ( l ( a ( v 1 , a ( a ( C n , v 1 ) , v 0 ))) ) . この族を 値呼び Church 数の de Bruijn 符号 (de Bruijn encoding of a call-by-value Church numeral ) という。
C n C_n C n がc n \mathbf c_n c n の翻訳であることを確かめる。
補題 8.5. 全てのn ∈ N n\in\mathbb N n ∈ N についてdB ( c n ) = C n \operatorname{dB}(\mathbf c_n)=C_n dB ( c n ) = C n である。
証明. 最初に、WF c ( P ) \operatorname{WF}_c(P) WF c ( P ) ならば↑ r c P = P \uparrow_r^cP=P ↑ r c P = P であることをP P P の構造に関する帰納法で確かめる。変数ではWF c \operatorname{WF}_c WF c から指標がc c c 未満であり、シフトはこれを変えない。適用では二つの部分項へ帰納法の仮定を用いる。抽象では、WF c + 1 \operatorname{WF}_{c+1} WF c + 1 を満たす本体へ切断位置c + 1 c+1 c + 1 の帰納法の仮定を用いる。
n n n に関する帰納法で主張を示す。c 0 = λ f . λ x . x \mathbf c_0=\lambda f.\lambda x.x c 0 = λ f . λ x . x であり、束縛文脈( x , f ) (x,f) ( x , f ) においてidx ( x ) = 0 \operatorname{idx}(x)=0 idx ( x ) = 0 であるから
dB ( c 0 ) = l ( l v 0 ) = C 0 \operatorname{dB}(\mathbf c_0)=\mathsf l\bigl(\mathsf l\,\mathsf v_0\bigr)=C_0 dB ( c 0 ) = l ( l v 0 ) = C 0 である。c n + 1 = λ f . λ x . f ( c n f x ) \mathbf c_{n+1}=\lambda f.\lambda x.f(\mathbf c_n\,f\,x) c n + 1 = λ f . λ x . f ( c n f x ) であり、束縛文脈( x , f ) (x,f) ( x , f ) においてidx ( f ) = 1 \operatorname{idx}(f)=1 idx ( f ) = 1 、idx ( x ) = 0 \operatorname{idx}(x)=0 idx ( x ) = 0 であるから
dB ( c n + 1 ) = l ( l ( a ( v 1 , a ( a ( dB ( x , f ) ( c n ) , v 1 ) , v 0 ) ) ) ) \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) dB ( c n + 1 ) = l ( l ( a ( v 1 , a ( a ( dB ( x , f ) ( c n ) , v 1 ) , v 0 )) ) ) である。c n \mathbf c_n c n は閉項であるから、補題 7.3 をΔ = ( x , f ) \Delta=(x,f) Δ = ( x , f ) 、Ξ = ε \Xi=\varepsilon Ξ = ε として用いるとdB ( x , f ) ( c n ) = ↑ 2 0 dB ( c n ) \operatorname{dB}_{(x,f)}(\mathbf c_n)=\uparrow_2^0\operatorname{dB}(\mathbf c_n) dB ( x , f ) ( c n ) = ↑ 2 0 dB ( c n ) である。帰納法の仮定によりdB ( c n ) = C n \operatorname{dB}(\mathbf c_n)=C_n dB ( c n ) = C n であり、補題 7.2 (1) によりWF 0 ( C n ) \operatorname{WF}_0(C_n) WF 0 ( C n ) である。したがって↑ 2 0 C n = C n \uparrow_2^0C_n=C_n ↑ 2 0 C n = C n であり、上の右辺は定義 8.4 のC n + 1 C_{n+1} C n + 1 に一致する。▨
補題 8.6. 有限 de Bruijn 項D D D の符号を入力として停止する決定性多テープ Turing 機械が存在する。この機械は、あるn ∈ N n\in\mathbb N n ∈ N についてD = C n D=C_n D = C n であるとき、かつそのときに限り受理状態で停止し、出力テープへ単項表現1 n 1^n 1 n を残す。D D D がどのC n C_n C n とも一致しない場合には、拒否状態で停止する。
証明. 機械は接頭辞符号を一回走査して有限構文木を復号し、符号が不正ならば拒否する。復号された木に対して、まずl ( l v 0 ) \mathsf l(\mathsf l\mathsf v_0) l ( l v 0 ) と一致するかを調べる。一致すれば空の単項列を出力して受理する。
l ( l v 0 ) \mathsf l(\mathsf l\mathsf v_0) l ( l v 0 ) と一致しない木に対しては、
l ( l ( a ( v 1 , a ( a ( R , v 1 ) , v 0 ) ) ) ) \mathsf l\bigl(\mathsf l(
\mathsf a(\mathsf v_1,
\mathsf a(\mathsf a(R,\mathsf v_1),\mathsf v_0))
)\bigr) l ( l ( a ( v 1 , a ( a ( R , v 1 ) , v 0 ))) ) という値呼び Church 数の再帰形を調べる。値呼び Church 数の再帰形でなければ拒否する。値呼び Church 数の再帰形であれば、作業テープの単項カウンタへ1 1 1 を一つ加え、真部分項R R R に同じ検査を行う。
各再帰呼出しは真部分項へ進むので、有限構文木に対する検査は有限回で止まる。C n + 1 C_{n+1} C n + 1 の再帰定義に関する帰納法により、機械はC n C_n C n を受理して単項列1 n 1^n 1 n を出力する。逆に、機械が受理するならば、基底形l ( l v 0 ) \mathsf l(\mathsf l\mathsf v_0) l ( l v 0 ) と、基底形に到達するまでに繰り返し確認した値呼び Church 数の再帰形から、同じ帰納法により入力はただ一つのC n C_n C n である。▨
定理 8.7. 部分関数f : N k ⇀ N f\colon\mathbb N^k\rightharpoonup\mathbb N f : N k ⇀ N を強く表現する閉項F F F から、f f f を計算する
Turing 機械M F M_F M F を構成することができる。ラムダ評価がc n \mathbf c_n c n で停止する場合にはM F M_F M F は単項表現のn n n を出力して停止し、ラムダ評価が無限ならばM F M_F M F も停止しない。
証明. 定義 7.1 の翻訳を用いてdB ( F ) \operatorname{dB}(F) dB ( F ) を作り、その二進符号を機械の有限制御へ固定する。入力された単項表現x 1 , … , x k x_1,\ldots,x_k x 1 , … , x k から定義 8.4 のC x 1 , … , C x k C_{x_1},\ldots,C_{x_k} C x 1 , … , C x k を作る。補題 8.5 によりC x i = dB ( c x i ) C_{x_i}=\operatorname{dB}(\mathbf c_{x_i}) C x i = dB ( c x i ) であり、翻訳は適用について準同型であるから、これらをa \mathsf a a で左結合に組んだ項はdB ( F c x 1 ⋯ c x k ) \operatorname{dB}(F\,\mathbf c_{x_1}\cdots\mathbf c_{x_k}) dB ( F c x 1 ⋯ c x k ) である。この項は補題 7.2 (1) により閉じた整形式項である。機械は補題 8.3 の一段機械を反復する。補題 8.2 により、反復の各段は名前付き項の一段評価と対応し、第s s s 段の項はF c x 1 ⋯ c x k F\,\mathbf c_{x_1}\cdots\mathbf c_{x_k} F c x 1 ⋯ c x k からs s s 段評価した閉項の翻訳である。
現在項が値ならば、補題 8.6 の正準数値判定を行う。C n C_n C n ならn n n を単項表現で出力して停止し、正準数値でない値なら無限ループへ入る。入力符号の破損または整形式でない途中項に対しても、防御的に無限ループへ入るものとする。強く表現する項から開始した計算では、入力符号の破損も整形式でない途中項も生じない。
f ( x ⃗ ) = n f(\vec x)=n f ( x ) = n ならば、強い表現により有限回の一段評価後にc n \mathbf c_n c n へ達し、対応する翻訳はC n C_n C n である。一段機械と数値判定は各回有限時間で終了するため、模倣機械は単項表現のn n n を出力して停止する。f ( x ⃗ ) ↑ f(\vec x)\mathord\uparrow f ( x ) ↑ ならば、ラムダ評価には常に次の一段がある。模倣機械は各一段を有限時間で実行した後に次の反復へ進むので、有限段で停止せず、Turing 機械の計算も無限になる。
得られた多テープ機械へ§E15.7 補題 1.2 を適用すると、停止時には出力テープ上の正準な単項表現だけを残し、発散時には発散を保つ一テープ機械へ変換することができる。▨
9 計算可能性の一致
定理 9.1. 自然数上の部分関数f f f について、次の二条件は同値である。
f f f は§E15.7 定義 1.1 の意味で部分 Turing 計算可能である。
f f f は閉じた型なしラムダ項によって、弱い値呼び評価の下で強く表現される。
両方向の変換は、定義される入力では同じ自然数を返し、定義されない入力では無限計算を生じる。
値呼びラムダ計算可能性と部分 Turing 計算可能性の同値性は、Church–Turing の提唱を一つの定理だけから導くものではない。形式化された二つの計算模型について、相互の模倣を数学的に証明した結果である。本記事の結論は、閉項、正準 Church 数、左から右への弱い値呼び評価という明示した条件に依存する。強い評価や名前呼び評価を扱う場合には、評価規則と発散保存の証明を別に与える必要がある。
10 演習
問題 10.1.
I f F ( λ d . Ω ) ( λ d . c 2 ) \mathsf{If}\,\mathsf F\,(\lambda d.\Omega)\,(\lambda d.\mathbf c_2) If F ( λ d .Ω ) ( λ d . c 2 ) の評価列を示し、Ω \Omega Ω が評価されない理由を評価文脈から説明せよ。
原始再帰の構成で、初期対が⟨ c 0 , c z 0 ⟩ v \langle\mathbf c_0,\mathbf c_{z_0}\rangle_v ⟨ c 0 , c z 0 ⟩ v まで評価されなければ反復へ進めない理由を示せ。また、第j j j 段の不変条件から第j + 1 j+1 j + 1 段の不変条件を導け。
非有界最小化について、最小の零が存在する場合、途中で未定義値に達する場合、全ての値が正である場合の三つに分け、構成した項の停止または発散を示せ。
WF d ( N ) \operatorname{WF}_d(N) WF d ( N ) とWF d + 1 ( P ) \operatorname{WF}_{d+1}(P) WF d + 1 ( P ) を仮定し、SubTop ( N , P ) \operatorname{SubTop}(N,P) SubTop ( N , P ) がWF d \operatorname{WF}_d WF d を満たすことを、変数の場合を三つに分けて示せ。
一段模倣機械が各回有限時間で停止することと、無限評価を模倣する機械が停止しないことを区別して説明せよ。
束縛文脈Ξ = ( y , x ) \Xi=(y,x) Ξ = ( y , x ) に対してdB Ξ ( λ x . x y ) \operatorname{dB}_\Xi(\lambda x.x\,y) dB Ξ ( λ x . x y ) を計算せよ。また、idx Ξ \operatorname{idx}_\Xi idx Ξ が最小の添字を取る規約を採らない場合に、どの主張が成り立たなくなるかを述べよ。
直接模倣の遷移項について、D = L D=L D = L かつh = 0 h=0 h = 0 の場合に左側リストの二つの分枝のどちらが選ばれるかを述べ、得られる値が§E15.4 定義 1.2 のC ′ C' C ′ を表すことを確かめよ。
解答 (演習の要点).
真偽値の選択後には第3引数の抽象だけが残り、I \mathsf I I への適用によってc 2 \mathbf c_2 c 2 を返す。Ω \Omega Ω は選ばれた評価文脈に入らない抽象の本体にある。
Church 数の反復では、初期値が値でなければ外側の適用を縮約することができない。第j j j 段の対へS t e p x ⃗ \mathsf{Step}_{\vec x} Step x を適用し、二つの射影、後続者、G G G を順に評価すると、第j + 1 j+1 j + 1 段の対を得る。
最小の零が存在すれば有限個の正の検査後に真の分枝が候補を返す。最初の未定義値ではI s Z e r o \mathsf{IsZero} IsZero の引数評価が発散する。全ての値が正なら、固定点の有限展開と次候補の検査が無限に続く。
変数指標i i i が0 0 0 より小さい場合は存在せず、i = 0 i=0 i = 0 ならN N N を代入し、i > 0 i>0 i > 0 ならv i − 1 \mathsf v_{i-1} v i − 1 とする。変数指標がi = 0 i=0 i = 0 の場合の整形式性はWF d ( N ) \operatorname{WF}_d(N) WF d ( N ) から、変数指標がi > 0 i>0 i > 0 の場合の整形式性はi < d + 1 i<d+1 i < d + 1 から従う。抽象の内部では同じ議論を切断位置を一つ増やして用いる。
一段処理は有限構文木の真部分木へ再帰するので毎回終了する。元の評価が無限なら、閉項の進行により各有限段階の後にも次項があり、模倣機械は有限回の反復では停止条件へ到達しない。
束縛文脈は( x , y , x ) (x,y,x) ( x , y , x ) へ延び、idx ( x ) = 0 \operatorname{idx}(x)=0 idx ( x ) = 0 、idx ( y ) = 1 \operatorname{idx}(y)=1 idx ( y ) = 1 であるからdB Ξ ( λ x . x y ) = l a ( v 0 , v 1 ) \operatorname{dB}_\Xi(\lambda x.x\,y)=\mathsf l\,\mathsf a(\mathsf v_0,\mathsf v_1) dB Ξ ( λ x . x y ) = l a ( v 0 , v 1 ) である。最小の添字を取らない規約では、内側の束縛子が同名の外側の束縛子を遮蔽することが指標に現れない。その場合、補題 7.2 (2) が成り立たず、これに依拠する補題 7.4 のアルファ同値の不変性も失われる。
h = 0 h=0 h = 0 では左側リストが[ ] v [\,]_v [ ] v であるから、補題 5.2 (3) により空リストの分枝が選ばれ、C o n f q ′ ‾ N i l a ′ ‾ ( R g w ) \mathsf{Conf}\,\overline{q'}\,\mathsf{Nil}\,\overline{a'}\,(\mathsf{Rg}\,w) Conf q ′ Nil a ′ ( Rg w ) へ進む。§E15.4 定義 1.2 ではh ′ = 0 h'=0 h ′ = 0 かつT ′ ( 0 ) = a ′ T'(0)=a' T ′ ( 0 ) = a ′ であり、T ′ T' T ′ は他の位置でT T T と一致する。したがって左側は長さ0 0 0 、現在記号はT ′ ( 0 ) ‾ = a ′ ‾ \overline{T'(0)}=\overline{a'} T ′ ( 0 ) = a ′ 、右側は変わらず、末尾が空白であるという条件もT T T から引き継がれる。
▨