1、罗素悖论
有集合 A={x|x∉A}。那么问题来了:A是否属于A?
等价于通俗说法“理发师悖论”:理发师说只给城市里不给自己理头的人理头,然后每天找他理头的人络绎不绝,有一天问题来了:理发师要不要给自己理头?
罗素悖论的关键在于定义的自身调用。
2、halting problem(停机问题)
存在一种程序,其输入为一个程序及其参数,输出是判断输入的程序是否会停机。
停机问题能够被证明是伪命题。
为了证明这种停机判断程序不存在,使用反证法:
引用:http://blog.csdn.net/niushuai666/article/details/7260957
假设存在停机判断程序
bool God_algo(char* program, char* input) { if(<program> halts on <input>) return true; return false; }
有另一反面程序
bool Satan_algo(char* program) { if( God_algo(program, program) ) { while(1); // loop forever! return false; // can never get here! } else return true; }
那么当其调用自身时,Satan_algo(Satan_algo)程序将无法判断输出结果。
3、三值逻辑
罗素悖论和停机问题的关键点都在于对自身进行调用时将出现模棱两可的状态。
而二者在逻辑上的缺陷都在于遵守二值逻辑,即事物非真即假:理发师认定自己要做的只有两种事,要么剪头要么不剪头。停机问题中的所有程序最终的输出只有两种状态,要么停机要么不停机。但现实世界并不是二值的,就像薛定谔的猫一样,存在一种中间态。因此世界需要三值逻辑。
三值逻辑认为,如果用1表示真,0表示假,那么还存在一种非真非假、亦真亦假的状态1/2。
把第三个真值1/2解释为罗素悖论“所有不以自身为元素的集合组成的集合属于它自身”,那么反过来“所有不以自身为元素的集合组成的集合不属于它自身”也是1/2
即(*)P ↔ ﹁P为真