我们给悖论下一个“进行式”的定义:悖论就是导致矛盾但原因不明的推理。
根据这一定义,一旦矛盾的原因找到了,悖论也就不再是悖论了。另外,矛盾的原因应该比较难于察觉。
这一定义可能与许多文献中对悖论的定义不同。笔者主张这一定义。
某村有一理发师,恰给本村那些不给自己理发的人理发。请问他给不给自己理发?
若他给自己理发,则他是一个给自己理发的人。按照他的原则,他应该不给自己理发。矛盾。
若他不给自己理发,则他是一个不给自己理发的人。按照他的原则,他应该给自己理发。也矛盾。
这是一段有名的、非常有趣的推理。由于找不出矛盾的原因,这段推理就被称为“理发师悖论”。
本文的目的就是说明,其实这一矛盾的原因并不难察觉,故理发师悖论不足以称为悖论。
让我们把理发师悖论再叙述一遍:
某村存在一理发师,恰给本村那些不给自己理发的人理发。请问他给不给自己理发?
若他给自己理发,则他是一个给自己理发的人。按照他的原则,他应该不给自己理发。矛盾。
若他不给自己理发,则他是一个不给自己理发的人。按照他的原则,他应该给自己理发。也矛盾。
如果这一次还不容易看出矛盾的原因,请注意,第二次陈述时,把第一次陈述里的第三个字 “有”换成了“存在”。其他没动。
这样一换,是不是比较容易看出矛盾的原因了呢?
是的,应该说这样一换就比较容易看出,矛盾的原因是假设了这样一个理发师的存在。因此, 这一矛盾无非说明,具有这种性质的理发师(即恰给本村那些不给自己理发的人理发)在本村不存在罢了。
矛盾的原因找到了,悖论也就不成其悖论了,问题也就解决了。
但矛盾的原因是怎样找到的呢?我们把“有”换成了“存在”。这是不是文字游戏,是不是偷换概念,是不是改变了问题呢?
当然不是。“有”就是“存在”。把“有”换成“存在”,没有改变问题,只是用语更科学、更醒目,使人注意到,原来这里隐藏着一个“存在”的假设。
假设,或者说前提,对推理是至关重要的。知道有假设,推出矛盾就不会大惊小怪,无非说明假设不正确罢了。但若不知道有假设,推出矛盾就会无法解释,就要惊呼为悖论了。因此,千万不要丢失、模糊任何假设。
按说理发师悖论这样就解决了。不过人们可能不太放心,问题破解得太容易了:只换了一个词“存在”,就启发、导致了答案。这个答案太平淡无奇了。
为了让人彻底相信,这个答案一点也不平淡,问题确实出在存在性上,让我们引经据典,回顾集合论创始人康托的一个定理。为此先要回顾一下集合论的几个概念:映射、满射、子集的集。
设X和Y为两个集。所谓一个从X到Y的映射f: X→Y是指一个法则,它对X中的每一x,指定Y中唯一一个元素。这个为x指定的唯一元素称作x在f下的像,记为f(x)。称X为映射的定义域,Y为映射的值域。如果值域Y中的每一个元素都是定义域X中某个元素的像,就称f是一个满射。如图所示:
我们还需要一个概念:子集所成的集。设X为一个集。用P(X)表示集X的所有子集所成的集。例如,若X={1, 2, 3},则
康托定理 对任何集X,不存在从X到P(X)的满射。
若z∉C,则z∈f(z)。但f(z)=C,故z∈C。矛盾。
若z∈C,则z∉f(z)。但f(z)=C,故z∉C。也矛盾。
康托定理是集合论最早,也最重要的定理之一。这个定理之优美,大概可以代表人类的智慧。这个定理一般放在大学数学系的三年级课程《实变函数论》中讲,但它几乎不用什么基础知识,是中学生可以理解、欣赏的。康托定理的陈述一般为,“不存在从X到P(X)的一一对应”,但实际上不存在满射。不存在满射当然就更不存在一一对应。
我们来给康托定理一个“理发”的解释。用表示该村的人的集。对每一村民x,用f(x)表示村里被x理发的那些人的集,即x的“顾客集”。那么康托所考虑的集合
村里不存在这样的理发师,恰给本村那些不给自己理发的人理发。这是康托证明的一个深刻的事实。
让我们把康托推理的过程也翻译成理发的语言看看:
若z∉C,则z∈f(z)。但f(z)=C,故z∈C。矛盾。(若他给自己理发,则他是一个给自己理发的人。按照他的原则,他应该不给自己理发。矛盾。)
若z∈C,则z∉f(z)。但f(z)=C,故z∉C。也矛盾。(若他不给自己理发,则他是一个不给自己理发的人。按照他的原则,他应该给自己理发。也矛盾。)