雑記

おかしい点がありましたらご指摘いただけますと幸いです。
参考文献

※ キャラクターは架空のものです。

f:id:cookie-box:20190101155733p:plain:w60

大変です! このフレーズを見てください。

The smallest positive integer not definable in under sixty letters.

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

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

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

はい、それが問題なんです。順を追って説明しますね。

  • アルファベットは26字しかないですね。
  • よって、アルファベット60字以下のフレーズは有限個しかないです。
  • したがって、アルファベット60字以下のフレーズで定義できる正整数は有限個しかないです。
  • 正整数は無限個あるので、アルファベット60字以下のフレーズで定義できない正整数が存在します。
  • よって、アルファベット60字以下のフレーズで定義できない正整数のうち最小のものが存在します。
ここでフレーズというのはアルファベットを指定の字数以下で重複を許して並べて、適当にスペースで区切ったものとでもしてください。以上を踏まえて、再度このフレーズについて考えてみてください。

The smallest positive integer not definable in under sixty letters.

上のフレーズが定義する正整数を k とでもすると、読んで字の如く k は「60字以下で定義できない最小の正整数」です。しかし、上のフレーズは57字です。つまり、k は60字以下で定義できます。なので k はやっぱり「60字以下で定義できない最小の正整数」ではないんです。となると、k などという正整数はなかったことになってしまいます。でも、「60字以下で定義できない最小の正整数」というもの自体はあるはずです。そしてそれは上のフレーズで表現できます。しかし上のフレーズはアルファベット57字で…矛盾が生じています。どうしてこんなことになってしまったんでしょう。

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

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

フレーズIDフレーズ指す正整数 正整数を定義しているかどうか
1100True
2百と同じ数100True
3百に一を足した数101True
4マイナス百正整数ではないFalse
5どら焼き正整数ではないFalse
6あああああああああああああああ正整数ではないFalse
\cdots\cdots\cdots\cdots
この対応表を完成させればいいのではないでしょうか。私だけでは手が足りなさそうなので、アノテーションに協力していただけるアルバイトの方をたくさん雇いましょう。

f:id:cookie-box:20190101160814p:plain:w60

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

フレーズIDフレーズ指す正整数 正整数を定義しているかどうか
X二十字以下で定義できない最小の正整数??

f:id:cookie-box:20190101155733p:plain:w60

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

  • 正整数として有効な漢数字の列のみからなるフレーズにはそれの指す正整数を割り当てること。
  • 正整数として有効な漢数字の列の後ろに「と同じ数」を足した形になっているフレーズには正整数として有効な漢数字の列の指す正整数を割り当てること。
  • \cdots
  • 上記のどれにも該当しないフレーズには正整数を割り当てないこと。
「有効な漢数字の列とは」「漢数字の指す正整数とは」というマニュアルも必要ならば別途つくりましょう。意味のある日本語の単語は有限でしょうし、細かな表記ゆれなどは正整数を指さないとはじくことにしてしまえば、マニュアルを書き下し切ることはできるのではないでしょうか?

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

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

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

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

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

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

f:id:cookie-box:20190101160814p:plain:w60

困るところそこ!?

f:id:cookie-box:20190101155733p:plain:w60

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

f:id:cookie-box:20190101160814p:plain:w60

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

f:id:cookie-box:20190101155733p:plain:w60

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

(次回があれば)つづく