論理の小話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という集合の中に、SANKAKUSIKAKUという集合が含まれているというカンジで見て欲しい。

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。「自分自身を含まないプログラム」をP,P,P,…とする。

TO  FUKUMANAI

P1

P2

P3

END

さて、そこで問題。今作った、TO FUKUMANAI  は「自分自身を含むプログラム」と「自分自身を含まないプログラム」のどちらに分類すべきか。もし「自分自身を含む」に分類したとすれば、TO FUKUMANAIの中に、FUKUMANAIが含まれる。ということは、TO FUKUMANAIが自分自身を含まないプログラムの集まりであることに矛盾する。じゃあ、「含まない」に分類したとしよう。そうすると、これはTO FUKUMANAIの中に入るべきプログラムだから、TO FUKUMANAIの中に、FUKUMANAIも入れなければならない。とすると、TO FUKUMANAIは自分自身を含むプログラムになってしまう。これがラッセルのパラドクスである。

 

 

前のページ 

面白数学らんど

メニュー

へきそみのらんど

音楽&数学らんど