参考文献

大変です! このフレーズを見てください。
The smallest positive integer not definable in under sixty letters.

日本語に訳すなら「60字以下で定義できない最小の正整数」だね。

ええ、まさしく。しかし、このフレーズがアルファベット何字からなるか数えてみてください。

スペースとピリオドを含めないなら57字かな。

はい、それが問題なんです。順を追って説明しますね。
- アルファベットは26字しかないですね。
- よって、アルファベット60字以下のフレーズは有限個しかないです。
- したがって、アルファベット60字以下のフレーズで定義できる正整数は有限個しかないです。
- 正整数は無限個あるので、アルファベット60字以下のフレーズで定義できない正整数が存在します。
- よって、アルファベット60字以下のフレーズで定義できない正整数のうち最小のものが存在します。
The smallest positive integer not definable in under sixty letters.

「矛盾」ね…確かにアルファベットは26字しかないし、アルファベットからなる有限の長さのフレーズは有限個しかない。じゃあ「アルファベット60字以下のフレーズで定義できる正整数」って何だろう? いや、「定義できる」って何?

「定義できる」とは何か、ですか。そうですね…ここでは正整数を何か定義しようとしているので、どの正整数を指すかを定めているフレーズであれば、そのフレーズは正整数を定義できているというのではないでしょうか。英語だと考えにくいので日本語のひらがなと漢字で考えてみますね。「二十字以下で定義できない最小の正整数」という文字列でも考えれば上のフレーズと同じ状況です。二十字以下のひらがなと漢字からなるフレーズを全て書き出せば、正整数を指していたり指していなかったりするでしょう。正整数を指していれば、そのフレーズは正整数を定義しているといえると思います。以下のようなイメージです。
フレーズID | フレーズ | 指す正整数 | 正整数を定義しているかどうか |
---|---|---|---|
1 | 百 | 100 | True |
2 | 百と同じ数 | 100 | True |
3 | 百に一を足した数 | 101 | True |
4 | マイナス百 | 正整数ではない | False |
5 | どら焼き | 正整数ではない | False |
6 | あああああああああああああああ | 正整数ではない | False |

確かに対応表をつくれば各フレーズが正整数を定義しているかどうかをはっきりさせられるけど、それだとあるフレーズが正整数を指しているかと指す正整数が何かはそのフレーズを担当したアルバイトの気分次第ってことにならない? それに、結局以下の ? を埋める段階になったときにどうするの?
フレーズID | フレーズ | 指す正整数 | 正整数を定義しているかどうか |
---|---|---|---|
X | 二十字以下で定義できない最小の正整数 | ? | ? |

いえ、決してアルバイトの方の気分次第ということでは…私は「百に一を足した数」というフレーズで「3」を定義することなどは想定していません。なるほど、副部長がいいたいのは、各フレーズに正整数を割り当てるのをアルバイトの方の裁量に任せるのではなく、もっときちんとマニュアル化しろということですね。確かにマニュアルの整備は大切ですものね。以下のようなマニュアルをつくりましょう。
- 正整数として有効な漢数字の列のみからなるフレーズにはそれの指す正整数を割り当てること。
- 正整数として有効な漢数字の列の後ろに「と同じ数」を足した形になっているフレーズには正整数として有効な漢数字の列の指す正整数を割り当てること。
- 上記のどれにも該当しないフレーズには正整数を割り当てないこと。

じゃあその書き下し切ったマニュアルの下で「二十字以下で定義できない最小の正整数」が「正整数を定義しているかどうか」はどう決定される?

そのようなフレーズが指す正整数を定めるのは少しややこしくなるでしょうね。マニュアルは「先にまず二十字以下のフレーズに対する対応表を完成させて、その表に現れる正整数の最大値に一を足した数を取ること」などとする必要があります。

「先にまず二十字以下のフレーズに対する対応表を完成させる」ことができるのかな?

あ…できませんね。「二十字以下で定義できない最小の正整数」は十八字なので、このフレーズが正整数を定義しているかどうかの判定のためには先に二十字以下のフレーズに対する対応表を完成させたいです。が、それを完成させる過程で「二十字以下で定義できない最小の正整数」というフレーズが正整数を定義しているかどうかを判定する作業が発生してしまいます。…無限ループです。

それじゃ永遠に作業が終わらないね。

困りましたね…永遠に作業が終わらないとなると、このフレーズのアノテーションを担当したアルバイトの方に支払う時給が無限大に発散してしまいます。

困るところそこ!?

しかし「二十字以下で定義できない最小の正整数」というフレーズが「正整数を定義しているかどうか」の判定の作業が終わらないということはわかりましたが、どうもすっきりしません。結局何が悪かったのでしょう?

何が悪かったっていうか…「二十字以下で定義できない最小の正整数」というフレーズは日本語の文法として間違っていないし、いかにも特定の正整数を定めているようにみえる。でもこの正整数が定まるには「二十字以下で定義できる正整数」を先に全て定まってないといけなくて、その中に「二十字以下で定義できない最小の正整数」が含まれるから、定義が自己言及しているんだよね。定義が自己言及してしまうと、いつまでも定義が終わらない。自然言語によって定義すると、こういう事態になることを防ぐことができないってことかな。

なんと…自然言語にそのような不具合が…。