ラムダ計算における自然数の定義について0=λf.λx.x1=λf.λx.f x2=λf.λx.f (f x)…と定義し、その定義の上で、自然数nの次の自然数を求めるラムダ式succをsucc=λn.λf.λx.f (n f x)と表すことができるということですが、自然数の定義にsuccを直接使わないのは何故でしょうか?何か論理的な不整合があるのでしょうか?つまり、0=λf.λx.xsucc=λn.λf.λx.f (n f x)1=succ 02=succ 1…と定義するのがより簡単で、実際に(一般的な)数学の定義ではそのようになっていると思うのですが、なにか都合があるのでしょうか?大して重要な違いではないとは思うのですが、なんとなく気になったので、詳しい方いらっしゃいましたら教えてくださいm(__)m

1件の回答

回答を書く

1003798

2026-01-13 11:05

+ フォロー

循環定義になりやすいので、まず「自然数そのもの」をラムダ項だけで自立して表す形(チャーチ数)を先に固定し、その後で succ を導きます。

チャーチ数 n は「f を n 回繰り返して x に作用させる」という反復そのものを λf.λx. … の形で埋め込んでいます。だから succ も「反復を 1 回増やす操作」として succ=λn.λf.λx.f (n f x) と内部で定義できます。

一方、0 と succ から 1=succ 0, 2=succ 1, … と作る定義は、考え方としては普通に正しいですが、「n 回 succ を適用する」という反復は結局メタレベル(ラムダ計算の外側の説明)で言っているだけになりがちです。純粋なラムダ計算だけで“自然数を表す閉じた項の族”を最初から具体的に与えるには、最初の並び(0=λf.λx.x, 1=…, 2=…)のように各項を直接書ける形のほうが都合が良いです。

不整合があるわけではなく、目的の違いです。純粋なラムダ計算では「0 と succ を公理的なコンストラクタとして持つ」わけではないので、まずエンコーディング(チャーチ数)を決め、その上で succ を定義する、という順番が説明として分かりやすい、という事情が大きいです。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有