【らむだけいさん】

ラムダ計算 とは?

最終更新:
💡 関数だけで世界を計算する、究極のミニマリスト理論

変数、関数の抽象化、関数の適用を使って計算を表す形式体系。型なしラムダ計算はチューリングマシンと同じ計算可能性を表現でき、関数型プログラミングの理論的な基盤の一つになっている。

📌 このページのポイント
関数を作り、引数を渡して計算する 関数 λx.x 適用 (λx.x) y β簡約の結果 y xへ引数yを代入すると、結果はy 基本の式は3種類 x 変数 λx.M 抽象化 M N 適用 純粋な体系では、数や演算も関数で表す
λx.xは受け取った引数をそのまま返す関数です。(λx.x) yの本体xを引数yに置き換えるとyになります。数や足し算を基本記号として追加した体系とは区別します。
ひよこ ひよこ
ラムダ計算って、何に使うの?
ペンギン先生 ペンギン先生
関数の抽象化と適用を中心に、計算を数学的に表すための体系だよ。基本の式は変数、関数を表すλx.M、関数へ引数を渡すM Nの3種類。プログラミング言語の関数や評価の仕組みを考える理論的な基盤の一つなんだ。
ひよこ ひよこ
「λx.x」って、どう読むの?
ペンギン先生 ペンギン先生
「xを受け取り、そのxを返す関数」だよ。たとえば(λx.x) yでは、本体のxへ引数yを代入してyになる。この計算をβ簡約と呼ぶ。複雑な式では、別の関数に束縛されている変数まで置き換えたり、引数の自由変数を捕まえたりしないようにするんだ。
ひよこ ひよこ
関数だけで足し算もできるの?
ペンギン先生 ペンギン先生
できるよ。純粋なラムダ計算には数や足し算の記号が最初からあるわけではなく、数も関数で表す。たとえばチャーチ数の2はλf.λx.f(f x)で、fを2回適用することを表すよ。λx.x+1のような例は算術を加えた略記としては便利だけれど、そのまま純粋な体系の基本構文ではないんだ。
ひよこ ひよこ
プログラミング言語のlambdaと同じもの?
ペンギン先生 ペンギン先生
関数を作って適用する考え方はつながっているよ。Pythonのlambda x: x + 1や、JavaScriptの(x) => x + 1は匿名関数の例。ただし、それぞれの言語には数や型、副作用などの独自の仕組みがあるので、構文や実行規則がそのまま純粋なラムダ計算と同じというわけではないんだ。
ひよこ ひよこ
チューリングマシンと同じ能力って本当?
ペンギン先生 ペンギン先生
型なしラムダ計算とチューリングマシンは、計算できるものの範囲が同じだと示されているよ。これは速さや、どんな式も計算が終わるという保証ではない。一方、チャーチ=チューリングのテーゼは、直感的に手順で計算できるものをこうした形式的なモデルで捉えられる、という主張で、モデル間の同等性の定理とは区別するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ラムダ計算」って出てきたら「関数を作り、引数を渡して計算を表す理論体系」と思えばだいたいOK!
📖 おまけ:英語の意味
「Lambda Calculus」 = ラムダ計算
💬 ギリシャ文字λを使って関数の抽象化を表すよ。Alonzo Churchが1930年代に導入した計算の形式体系で、名前もこの記号に由来するんだ。

参考資料

← 用語集にもどる