例えば、ある数に 2 を加える関数 f を考える。これは通常の書き方では f(x) = x + 2 と書くことができるだろう。この関数 f は、ラムダ計算の式(ラムダ式という)では λx. x + 2 と書かれる。変数 x の名前は重要ではなく、 λy. y + 2 と書いても同じである。同様に、この関数に 3 を適用した結果の数 f(3) は (λx. x + 2) 3 と書かれる。関数の適用は左結合である。つまり、 fxy = (fx) y である。今度は、引数(関数の入力)に関数をとりそれに 3 を適用する関数を考えてみよう。これはラムダ式では λf. f 3 となる。この関数に、先ほど作った 2 を加える関数を適用すると、 (λf. f 3) (λx. x + 2) となる。ここで、
(λf. f 3) (λx. x + 2) と (λx. x + 2) 3 と 3 + 2
の3つの表現はいずれも同値である。
ラムダ計算では、関数の引数は常に1つである。引数を2つとる関数は、1つの引数をとり、1つの引数をとる関数を返す関数として表現される(カリー化)。例えば、関数 f(x, y) = x − y は λx. (λy. x − y) となる。この式は慣例で λxy. x − yと省略して書かれることが多い。以下の3つの式
アルファ変換の基本的なアイデアは、束縛変数の名前は重要ではない、ということにある。例えば、 λx. x と λy. y は同じ関数を表している。しかし、ことはそう単純ではない。ある束縛変数の名前を置換してもよいかどうかには、いくつかの規則が絡んでくる。例えば、ラムダ式 λx. λy. x 中の変数 x を y に置き換えると、 λy. λy. y となるが、これは最初の式とはまったく異なるものを表すことになる。そこでまず準備として、変数 V, W と式 E に対して、 E 中の V の全ての自由出現を W に置き換えたものを
E[V := W]
と書くことにする。この元で、アルファ変換は
λV. E →α λW. E[V := W]
である。ただし、 E に W が自由出現しておらず、かつ V を置換することにより E 中で新たに W が束縛されることがないときに限る。この規則によれば、式 λx. (λx. x) x が λy. (λx. x) y に変換されることがわかる。
もし全てのラムダ式 a に対して fa == ga であるならば、 a として f にも g にも自由出現しない変数 x をとることによって fx == gx であり、 λx. fx == λx. gx である。この等式にイータ変換をほどこすことによって f == g が得られる。これより、イータ変換を認めるならば関数の外延性が正当であることが示される。
逆に、関数の外延性を認めるとする。まず、全ての y に対してラムダ式 (λx. fx) y はベータ変換でき、 (λx. fx) y == fy となる。この同値関係は全ての y について成り立っているので、関数の外延性より λx. fx == f である。以上によって、関数の外延性を認めたときのイータ変換の正当性が示される。
自然数をラムダ式で表現する方法はいくつか異なる手法が知られているが、その中でもっとも一般的なのはチャーチ数(英語版)(英: Church numerals)と呼ばれるもので、以下のように定義されている。
0 := λfx. x
1 := λfx. fx
2 := λfx. f (fx)
3 := λfx. f (f (fx))
以下同様である。直感的には、数 n はラムダ式では f という関数をもらってそれを n 回適用したものを返す関数である。つまり、チャーチ数は1引数関数を受け取り、1引数関数を返す高階関数である。(チャーチの提唱した元々のラムダ計算は、ラムダ式の引数が少なくとも一回は関数の本体に出現していなくてはならないことになっていた。そのため、その体系では上に挙げた 0 の定義は不可能である。)
上のチャーチ数の定義のもとで、後続(後者)を計算する関数、すなわち n を受け取って n + 1 を返す関数を定義することができる。それは以下のようになる。
SUCC := λnfx. f (nfx)
また、加算は以下のように定義できる。
PLUS := λmnfx. mf (nfx)
または単にSUCCを用いて、以下のように定義してもよい。
PLUS := λmn. mSUCCn
PLUS は2つの自然数をとり1つの自然数を返す関数である。この理解のためには例えば、 PLUS23 == 5 であることを確認してみるとよいだろう。また、乗算は以下のように定義される。
MULT := λmn. m (PLUSn) 0
この定義は、 m と n の乗算は、 0 に n を m回加えることと等しい、ということを利用して作られている。もう少し短く、以下のように定義することもできる。
MULT := λmnf. m (nf)
正の整数 n の先行(前者)を計算する関数 PREDn = n − 1 は簡単ではなく、
PRED := λnfx. n (λgh. h (gf)) (λu. x) (λu. u)
もしくは
PRED := λn. n (λgk. (g1) (λu. PLUS (gk) 1) k) (λv. 0) 0
と定義される。上の部分式 (g1) (λu. PLUS (gk) 1) k は、 g(1) がゼロとなるとき k に評価され、そうでないときは g(k) + 1 に評価されることに注意せよ[1]。
論理記号と述語
TRUE や FALSE といった真理値は慣習的に以下のように定義されることが多い。これらはチャーチ真理値(英語版)(英: Church booleans)とよばれている。
ラムダ計算では自分自身を含む関数は定義できない。この問題を解決するためにまず、 f を引数にとり n を引数にとる関数を返すg という関数を考える。
g := λfn. (1, if n = 0; and n × f(n − 1), if n > 0)
関数 g は 1 か n × f(n − 1) を返すような関数を返す。上述の ISZERO や算術、論理記号の定義を用いれば、この関数 g はラムダ式で定義することができる。
しかし、これでは g 自身はまだ再帰的ではない。 g を用いて再帰的な階乗関数を作り出すためには、 g に対して引数 f として渡されている関数が、ある性質を持つ必要がある。すなわち、この f を展開すると関数 g がある一つの引数を伴った形になり、さらにその g への引数は先ほどf として渡された関数に再びなる必要がある。
この性質は言い換えると、 f は g ( f )に展開される必要があるということだ。この g の呼び出しは先ほどの階乗関数に展開され、再帰の段階を一段降りる計算をしている。この展開において、関数 f が再度出現する。そして、この関数 f は再度 g ( f )に展開され、再帰が続いていく。この f = g ( f )となるような関数は、 g の不動点と呼ばれる。そして、この不動点は不動点コンビネータとして知られるものによってラムダ計算で表現することが出来る。この不動点コンビネータは Y と表される -- Yコンビネータ:
Y = λg. (λx. g (xx)) (λx. g (xx))
ラムダ計算では、 Y g は g の不動点となる。つまり、 g (Yg) == Y g となる。このもとで、 n の階乗を計算するには単に g (Yg) n を呼び出せばよい。ここで、 n は上述したチャーチ数である。
n = 5 として、評価の例を見てみよう。
(λn.(1, if n = 0; and n·((Y g)(n − 1)), if n > 0)) 5
1, if 5 = 0; and 5·(g(Y g)(5 − 1)), if 5 > 0
5·(g(Y g) 4)
5·(λn. (1, if n = 0; and n·((Y g)(n − 1)), if n > 0) 4)
5·(1, if 4 = 0; and 4·(g(Y g)(4 − 1)), if 4 > 0)
5·(4·(g(Y g) 3))
5·(4·(λ n. (1, if n = 0; and n·((Y g)(n− 1)), if n > 0) 3))
5·(4·(1, if 3 = 0; and 3·(g(Y g)(3 − 1)), if 3 > 0))
5·(4·(3·(g(Y g) 2)))
...
アルゴリズムの構造が再帰的に評価されているのがわかるだろう。再帰的に定義される関数は全て他の適当な関数の不動点となっているため、 Y を用いることで全ての再帰的な関数をラムダ式で表現することができる。たとえば、自然数に対する除算、乗算や比較述語を再帰を用いてよりきれいに定義することができる。
計算可能性とラムダ計算
自然数から自然数への関数 F: N → N が計算可能であるということは、全ての自然数の対 X, Y に対して F(X) = Y と fx == y が同値となるようなラムダ式 f が存在すること、と定義することができる。ここで、 x, y はそれぞれ X, Y に対応するチャーチ数によるラムダ式である。この定義は、計算可能性を定義する多くの方法のうちのひとつである。より詳しくは、チャーチ-チューリングの提唱の項を見よ。
チャーチの証明ではこの問題を、あたえられたラムダ式に正規形が存在するかどうかという問題に帰している。正規形とは、それ以上簡約のできない同値なラムダ式のことである。チャーチの証明ではまず、この問題が決定可能である、つまり、ラムダ式で表現可能であると仮定する。クリーネによる結果とゲーデル数のラムダ式表現を用いることによってチャーチは、対角線論法によりパラドキシカルなラムダ式 e を構成した。この e を、それ自身を表すゲーデル数に適用すると矛盾が導かれる。