論理の小話2
〜LOGOと「ラッセルのパラドクス」〜 1 LOGOのプログラム LOGOとは、パソコンの1つのプログラミング言語で、画面上の亀をいくつかの命令によって動かし、その軌跡でお絵かきすることを目的としている。例えば、亀を100ドット前進させるには、次のようなプログラムを作る。 TO HYAPPO ……プログラム名を最初につける。TOで始める。ここでは「HYAPPO」にした。 FD 100 ………FDはフォワード。100ドット前に進めということ。 END ………プログラムの終了。LOGOではTO プログラム名〜ENDで1つのプログラム。 このプログラムを登録すれば以下画面上で、HYAPPOと入力する度亀は100ドット前進する。 LOGOの特徴の1つに、プログラムの中にプログラムを入れられるということがある。例えば、正三角形を描くプログラム、 TO SANKAKU ……プログラム名 FD 100 RT 120 ………右に90度ターンしろという命令 FD 100 RT 120 FD 100 END と、正方形を描くプログラム、 TO SIKAKU FD 100 RT 90 FD 100 RT 90 FD 100 RT 90 FD 100 RT 90 END という2つのプログラムがあったとする。 このとき、新しいプログラム、TO ZUKEIというのを考えて、 TO ZUKEI SANKAKU ……SANKAKUを実行する(三角形を描く) SIKAKU ………SIKAKUを実行する(正方形を描く) END というようにすることができるのである。つまり、ZUKEIという集合の中に、SANKAKUとSIKAKUという集合が含まれているというカンジで見て欲しい。 2 リカージョン なんとLOGOではプログラムの中に自分自身のプログラムを読むことも可能だ。例えば次のようなプログラムを作ることができる。 TO WALK ………プログラム名 FD RANDOM 50 ……RANDOM 50は50以下の乱数の発生。50ドット以内亀は前進。 RT RANDOM 180 ……180以下の乱数で右に曲がる。 WALK ………ここで、自分自身を呼び出す。図を参照すると分かり易い。 END このプログラムを実行すると、亀はランダムウォークを始める。強制終了しない限り永遠に歩き続ける。このような手法をリカージョンという。 3 ラッセルのパラドクス ここで話したいことはLOGOのプログラミングのことではない。ラッセルのパラドクスのことだった。では本題に入ろう。 上の2で述べたように、LOGOでは、自分自身を含むプログラムを作ることができた。ということは、LOGOで作られたプログラムは、必ず「自分自身を含むプログラム」か「自分自身を含まないプログラム」のかのどちらかである。さて、今、自作のプログラムから「自分自身を含まないプログラム」を選び、それら全体からなるプログラムを作ることにしよう(LOGOではプログラムの中にプログラムを入れることができた!)。名前はTO FUKUMANAI。「自分自身を含まないプログラム」をP1,P2,P3,…とする。 TO FUKUMANAI P1 P2 P3 : : END さて、そこで問題。今作った、TO FUKUMANAI は「自分自身を含むプログラム」と「自分自身を含まないプログラム」のどちらに分類すべきか。もし「自分自身を含む」に分類したとすれば、TO FUKUMANAIの中に、FUKUMANAIが含まれる。ということは、TO FUKUMANAIが自分自身を含まないプログラムの集まりであることに矛盾する。じゃあ、「含まない」に分類したとしよう。そうすると、これはTO FUKUMANAIの中に入るべきプログラムだから、TO FUKUMANAIの中に、FUKUMANAIも入れなければならない。とすると、TO FUKUMANAIは自分自身を含むプログラムになってしまう。これがラッセルのパラドクスである。
|