今回は対角線論法を用いて停止問題の計算不能性を証明します。まず、対角線 論法を分かりやすく説明するため、集合論の濃度と言う概念を紹介 します。
Turing 機械のコードを素数巾の積で表さずに、単純に区切り記号で区切る用 にします。 すると、特定のδ関数の値の検索を Turing 機械のコードの長さに比例した時 間でできるようになります。
集合 A, B に対して、 A≦B を 「A から B への 1-1 関数が定義できること」と定め ます。 A≦B かつ B≦A のとき A≡Bと表し、 A≦B かつ B≦A でないとき A<B と表すことにします。
{0,1} < {0,1,2}
条件を満たす関数g が存在したとします。 すると、 g(0)=x, g(1)=y の値 x, y に関して、 x≠y とならなければならないので x=0, y=1 または x=1, y=0 が成り立つ必要があります。 しかしそれでは g(2)の値を 1-1 に定めることができなくなり、 g が存在することに矛盾します。
自然数≡偶数
f(x)= 2 x とすることにより、 自然数の各要素を偶数の要素へ 1-1 に対応付けられます。
g(x)= x/2 とすることにより、 偶数の各要素を自然数の要素へ 1-1 に対応付けられます。
自然数 < 0以上1未満の実数
次のような対応を考えます。
256 | → | 0.652 |
3321 | → | 0.1233 |
このようにすると、任意の自然数を 0 以上 1 未満の実数に 1-1 で対応付け ることができます。
0 以上 1 未満の実数を自然数に対応付ける関数が存在したとして矛盾を導き ます。
そのような関数が存在したとします。 簡単のため、全射だと仮定します(全射でない場合も容易に証明を変更するこ とができます)。 すると、 1 に対応付けられた実数、 2 に対応付けられた実数、 3 に対応付けられた実数と順に並べることができます。 例えば次のように並べることができたと仮定しましょう。
0.325138… | →1 | |
0.123431… | →2 | |
0.519288… | →3 | |
0.467329… | →4 | |
… |
この時、 0.6706… と、各桁の数を (9-対角線上の数) となるように並べた実数を考えることができます。 しかし、このように定義した数は上の並びのどこにも現れることはできません。 なぜなら、もし、n番目に並べようとすると n 桁目の 値が食い違ってしまうからです。 したがって、自然数に対応付けることができない実数が存在することになるの で仮定に矛盾します。
1=0.9999… と実数は二通りの表し方があるので、これを考慮しないと厳密な 証明にはなりません。
集合 A に対して、その部分集合全体の集合を A の 巾集合 と呼び、2A 、P(A)、 Pow(A) などと書きます。 記号で書くと 2A={ x | x⊆ A } となります。 例えば、 { a, b } の巾集合は 2{ a, b } = {φ, {a}, {b}, {a,b}} となります(φは空集合)。
有限集合の要素数を n とします。一つの部分集合に各要素が含ま れるか含まれないかを 1, 0 で表すと、 n 桁の二進数で一つの部分 集合を定めることができます。
a | b | 部分集合 |
---|---|---|
0 | 0 | φ |
0 | 1 | {b} |
1 | 0 | {a} |
1 | 1 | {a,b} |
従って、要素数 n の有限集合の巾集合の要素数は 2n になります。
A< 2A
2A には A のすべての部分集合が含まれ ています。 A の要素 x に対して x だけか らなる部分集合 {x} は必ず 2A に含まれ ます。 よって、f(x) = {x} とすれば、すべ ての A の要素に対して 1-1 になります。
g: 2A→A (1-1) なる関数が 存在すると仮定して、矛盾を導きます。
このような関数の存在を仮定して、次の集合を考えます。
そして、 g(X) の値を z とします。 ここで、z が X に含まれるか否かを議論します。
したがって、 z は X に含まれても、含まれなくても 矛盾するので、仮定が矛盾していることになります。
集合 A に対して、ある要素x が含まれるとき 1、含 まれない時 0 となる関数を特性関数といい、 χA(x) で表します。
自然数全体の集合を N で表すことにします。 すると自然数の部分集合全体は 2N で表せます。 自然数の部分集合に対する特性関数の集合全体を考えると、 2N と同じ濃度になります。
前回示した通り、 Turing 機械のコードは自然数で表され、自然数とは 1-1 onto の関係にあります。 従って、Turing 機械のコード全体の濃度は自然数と等しくなります。 従って、N<2N より、 Turing 機械のコードに対応しない自然数の部分集合の特性関数が存在するこ とになります。
さて、具体的に Turing 機械が存在しないような関数を紹介します。 次のような関数 f は計算できません。
この問題を停止問題と言います。
上記の f が存在するとして矛盾を導きます。
f が Turing 機械で計算できるとすると、 Church の提唱により、 次のような 1 入力のTuring 機械 M を作ることができます。
これが Turing 機械で計算できるので、この Turing 機械のコードを z と置くことができます。 そこで、 f(z,z) を考えます。 もし、 この値が 1 だとすると、コード z の Turing 機械に入力 z を入れると停止することが分かります。 しかし、これは M に入力 z を与えることになり、こ れが停止するということは 0 を出力、つまりコード z の Turing 機械に z を入れた時停止しないことになり、矛盾します。
一方、 f(z,z) が 0 だとします。つまり コード z の Turing 機械に z を入力した時停止しな いと判断されたとします。 すると、M の定義によりこれはコード z の Turing 機械に z を入力した時、停止すると判断して無限ループに入った と考えることができますが、これも矛盾しています。 よって、 f が存在するという仮定が矛盾していることになります。
線形加速定理を説明します。