型なしラムダ計算を考える。適用は左結合()、抽象は右に最大限のびるものとし、 同値な項は同一視する。簡約は 簡約のみを考える( 簡約は考えない)。 は変数とする。
項
の 正規形として正しいものを、次のア〜オから 1 つ選べ。
ア
イ
ウ
エ
オ は 正規形をもたない
型なしラムダ項の自由変数・束縛変数を見分け、捕獲を避けた代入 を行い、 をくり返して項の β 正規形を求められる(正規形をもたない も判定できる)
中学までに習ったことだけで始められます。
型なしラムダ計算では、関数の適用 を「本体 の中の を で置き換える」ことで計算します。この一歩を β 簡約といい、これ以上 β 簡約できない項を β 正規形といいます。この技能を身につけると、ラムダ項を機械的に計算して最終的な形(β 正規形)を求めたり、 のように計算がいつまでも終わらない項を見分けたりできます。チャーチ数による算術の計算や、プログラムの意味を調べる場面の基本操作です。
ラムダ項は、変数 、抽象 (「 を受け取って を返す関数」)、適用 (「 に を渡す」)の 3 種類から作られます。 の中の は に束縛されていて(束縛変数)、その名前に意味はありません。 と は同じ関数です(名前の付け替えを α 変換といい、α 変換で移り合う項は同じとみなします)。一方、どの にも束縛されていない変数は自由変数で、外から与えられる値を表します。例えば では が束縛変数、 が自由変数です。
関数 に を渡したら、「 の中の(自由に現れる) を に置き換えたもの」になるはずです。これが です。ただし素朴に文字を置き換えると意味が変わることがあります。 は「何を受け取っても を返す関数」ですが、 に を代入して にすると恒等関数になってしまいます。外から来た自由変数 が、内側の に「捕獲」されたためです。そこで、代入する前に内側の束縛変数を新しい名前に付け替え、 とします。これが捕獲を避けた代入で、こうすれば束縛変数の名前に意味がないという原則と矛盾しません。
項の中に の形の部分(β 基、レデックスという)が残っている限り β 簡約を続けられ、1 つも残らなくなった項が β 正規形です。β 正規形は、どの順序で簡約しても(たどり着けるなら)α 変換を除いて 1 つに決まることが知られています(チャーチ–ロッサーの定理)。ただし、どう簡約してもたどり着けない項もあります。 を 1 回 β 簡約すると、 の 2 つの に を入れて に戻ります。 の中にある β 基はこれ 1 つだけなので、どう簡約しても から抜け出せず、 は β 正規形をもちません。
項の構造を読む。適用は左結合()、 の本体はできるだけ右まで伸びる()という約束で括弧を補う
各変数が束縛変数か自由変数かを見分ける。代入で捕獲が起こりそうなら、内側の束縛変数を新しい名前に付け替えておく(α 変換)
の形の部分(β 基)を 1 つ選ぶ。迷ったら最も左外側のものを選ぶ(正規形があれば必ずたどり着ける選び方)
の中の自由な だけを に置き換え、 を に書き換える
β 基がなくなるまで 3・4 をくり返す。β 基がなくなればそれが β 正規形。簡約しても同じ形の項に戻るなど終わらないことがわかれば、正規形をもたないと判定する
自然数 に対し、チャーチ数を と定める(例: 、)。 とするとき、項 の β 正規形はあるチャーチ数 になる。 を求めよ。
(手順 1) で、 と読む。
(手順 2) の中の は 自身の に束縛されていて、外の の とは別物である。混同を避けるため と名前を付け替える。 には自由変数がないので、代入で捕獲は起こらない。
(手順 3・4)いちばん外側の β 基で と代入する:
(手順 5 → 3・4)まだ β 基 が残るので、 と代入する( は内側の に捕獲されない):
さらに β 基 で と代入する:
(手順 5)この項には の形の部分がないので β 正規形である。これは が 3 個並んだ なので、。
答え:
捕獲を気にせず文字を置き換えてしまう誤り。 とするのは誤りで、正しくは内側の を付け替えて (定数関数のまま)
束縛されている まで置き換えてしまう誤り。 ではなく、正しくは内側の は に束縛されているので
結合の約束を取り違える誤り。 を と読んで に簡約してしまうが、正しくは で、すでに β 正規形。また は ではなく
を簡約すると の形になって止まると考える誤り。正しくは で に戻り、β 正規形をもたない
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
型なしラムダ計算を考える。適用は左結合()、抽象は右に最大限のびるものとし、 同値な項は同一視する。簡約は 簡約のみを考える( 簡約は考えない)。 以上の整数 に対してチャーチ数を と定め()、項 を と定める。項 は 正規形をもち、それはあるチャーチ数 に一致する。 を求めよ。
型なしラムダ計算を考える。適用は左結合()、抽象は右に最大限のびるものとし、 同値な項は同一視する。簡約は 簡約のみを考える。 以上の整数 に対してチャーチ数を
と定め、右辺の本体を と書く()。
項
は 正規形をもち、その正規形は、ある 以上の整数 に対して と 同値になる。この を求めよ。
型なしラムダ計算を考え、項は 同値なものを同一視する。適用 は を関数、 を引数とする適用を表し、適用は左結合とする()。代入 は変数の捕獲を起こさない代入(必要なら束縛変数を付け替える)とする。 を 1 ステップの 簡約(任意の部分項で行ってよい)、 をその反射推移閉包とする。 基( の形の部分項)を含まない項を 正規形といい、 となる 正規形 を の 正規形という。
項 と 以上の整数 に対して , と定め、 以上の整数 のチャーチ数を
とする(, は異なる変数)。さらに、互いに異なる変数 を用いて
と定める。
チャーチ・ロッサーの定理(したがって、ある項が 正規形をもつならそれは一意であること)は用いてよい。
を 以上の整数とするとき、項 の 正規形が であることを証明せよ。
型なしラムダ計算を考える。適用は左結合()、抽象は右に最大限のびるものとし、 同値な項は同一視する。簡約は 簡約のみを考える( 簡約は考えない)。 以上の整数 に対してチャーチ数を
で定める。
正規順序戦略とは、各ステップで、項に含まれる 基( の形の部分項)のうち最も左外側にあるもの(項を文字列として書いたときに、その 基の先頭が最も左にあるもの)を 1 回だけ縮約する戦略である。
項 から出発して正規順序戦略で 簡約を繰り返すと、有限回で 正規形に到達する。正規形に到達するまでに行われる 簡約の回数(ステップ数)を求めよ。
型なしラムダ計算を考える。適用は左結合()、抽象は右に最大限のびるものとし、 同値な項は同一視する。簡約は 簡約のみを考える( 簡約は考えない)。 以上の整数 に対してチャーチ数を
と定める()。さらに次の項を定める。
このとき項
は 正規形をもち、それはあるチャーチ数 に一致する。整数 を求めよ。
型なしラムダ計算を考える。適用は左結合()とし、 同値な項は同一視する。 以上の整数 に対してチャーチ数を
で定める。さらに
とおき、
とする。 は 正規形をもち、それはあるチャーチ数 に一致する。 を求めよ。