人気ブログランキング | 話題のタグを見る

述語

集合を内包的定義で定義するときは、ある要素が述語を満たすかどうかでその集合の要素であるかどうかを決定する。例えば偶数の集合Aの定義は次のようになる。

A = { x | x が2で割り切れる }

このとき、2で割り切れるという述語は、x の一変数関数 P(x) であり、値 true または false をとる。すなわち、
P(2) = true だし、P(3) = false である。上の定義をP(x)を使って書き直すと次のようになる、

A = { x | P(x) == true }

したがって、どのような x にたいしても P(x) が true か false を返せば、集合の内包的定義にはなんの問題も起きない。しかし、P(x) がある x に対して true も false も返さないとき、この述語を使って集合を定めることはできない。P(x) が true も false も返さないのはどういう場合だろうと不思議に思うかもしれないが、コンピュータのプログラミングではよく起きる現象だ。例えば、次のプログラムでは、無限の再帰が発生するため関数 trivial (x) は値を返すことができない。

def trivial(x)
  trivial(x)
  return true
end

述語というと、「xは犬である」というような単純な構造をイメージしがちだが、一変数関数 P(x) で戻値が true または false であれば、何でも述語として働くことができる。したがって、上のような内部構造を持つ述語(関数)の場合、単純に true か false を返さない場合が生じてくる。

ラッセルのパラドックスの場合も、問題点は述語にあったのだ。述語の内部構造のために、「自分を要素としない集合の集合」という要素を述語に適用したときにパラドックスが発生したのだ。集合の内包的定義の手続自体に問題があるわけではない。このように、集合の内包的定義と述語とをはっきり分けて考えることによって、パラドックスの問題点を整理して考えることができる。

つまり、集合を内包的定義で定義するという方法には矛盾はないが、述語の関数の内部構造のためにパラドックスが発生するということだ。ラッセルのパラドックスが衝撃的だったのは、このパラドックスによって集合の内包的定義自体に矛盾があるように見えたためではないかと思う。

しかし、矛盾の発生源が述語の構造にあると考えれば、ラッセルのパラドックスによって素朴集合論が本質的な矛盾をはらんでいると考える必要はなくなるのではないかと思う。
by tnomura9 | 2011-04-27 07:19 | 考えるということ | Comments(0)
<< ラッセルの集合の述語 床屋のパラドックスのトリック >>