8.6
なぜ起こるのか
283
に待たなくてはならないプログラムが常に存在するのです。
8.6
なぜ起こるのか
この章では、すべての万能システムに自己参照できる能力があることを見てきました。プログラムは
数を操作し、数は文字列を表現することができ、文字列はプログラムの命令を書くための手段となり
ます。したがって、プログラムは自分自身のソースコードを完全に操作することができます。
この自己参照能力は、プログラムの振る舞いを確実に予測できるプログラムを書くことを不可能にし
ます。たとえ振る舞いをチェックする特定のプログラムを書いても、必ずそれを無駄にするより大きな
プログラムを構築することができます。チェッカーをサブルーチンとして組み込んで自分自身のソース
コードをチェックしたあと、即座にチェッカーの判定とは正反対のことをする新しいプログラムを書け
ばよいのです。このような自己矛盾プログラムは、現場で書くものというより興味本位なものですが、
これは問題の原因ではなく、単なる症状にすぎません。一般的に、プログラムの振る舞いは強力すぎ
て、確実に予測することは不可能なのです。
自然言語にも同じような能力があり、同じような問題を抱えています。「この文はうそです」(う
そつきのパラドックス)は真にも偽にもなり得ない文です。ただし、うそつきのパラドックス
は特別な自己参照語である「この」に依存しています。「
8.1.5
プログラムは自己参照できる」
で見たように、コンピュータプログラムは特別な言語機能を必要とせず、構成によ