Appearance
所有变量默认为自然数。
罗素悖论
一个理发师要给所有「不给自己理发的人」理发,不给「给自己理发的人」理发,他是否应该给自己理发?
如果理发师给自己理发,他就属于「给自己理发的人」,但他不能给这类人理发,矛盾;如果他不给自己理发,他就属于「不给自己理发的人」,但他必须给这类人理发,也矛盾。
英国哲学家罗素(Russell)最早发现了这类悖论。罗素悖论的具体形式还有很多,比如:
- 我正在说的这句话是假话;
- 一张明信片的正面写「背面的话是真的」,背面写「正面的话是假的」;
- 一本书要列出所有「不列出自己书名的书」,这本书是否应该列出它自己?
- ...
这些悖论都能以「朴素集合论」的形式概括:
设集合
- 若
,则 ; - 若
,则 。
罗素最终构建了一个新的集合论系统
但是,当我们离开集合论,来到自然数公理系统时,事情似乎变得更加复杂。
哥德尔不完备性定理
1931年,德国数学家库尔特·哥德尔(Kurt Gödel)在他的论文中提出了一个惊为天人的定理:
在蕴含 皮亚诺公理(自然数公理) 的公理系统中,必然存在一个「既不能证明,又不能证伪」的命题。
此定理揭示了公理系统的巨大的缺陷。此缺陷至今未被修复。
哥德尔的证明
哥德尔在皮亚诺公理的环境下找到了一个「罗素悖论」式的数学命题:
- 若
是真的,则 是假的。 - 若
是假的,则 是真的。
命题
那么命题
哥德尔编码
哥德尔创造了一种编码算法,将数学语句编码为自然数。
首先,哥德尔给公理系统的
符号 | 哥德尔数 | 含义 | 符号 | 哥德尔数 | 含义 |
---|---|---|---|---|---|
否定 | 左括号 | ||||
或 | 右括号 | ||||
如果 ... 则 ... | 逗号 | ||||
存在 | 加号 | ||||
等号 | 乘号 | ||||
零 | 变量 | ||||
后继[1] | 变量 |
以数学语句
再以前
这样就得到了
类似地,还有:
由算术基本定理[2] 可知,每个自然数都能解码出唯一的数学语句。例如:
此外,数学证明过程也可编码为哥德尔数。
元数学命题
考虑一类命题:
- 命题
的第一个字符是 ; - 命题
有 个字符; - 哥德尔数为
的命题不能被证明; - ...
这类陈述数学命题性质的命题称作「元数学(meta-math)命题」,简称「元命题」。
我们可以利用 哥德尔编码 明智地讨论这些元命题。例如,上述前两个命题等价于:
有且仅有一个 因子。 能被 整除,但不能被 整除。
对于第三个命题,哥德尔另外定义了一个命题形式
于是「哥德尔数为
根据黑格尔(Hegel)的三段论,上述元命题也能编码为哥德尔数。
sub 函数
哥德尔证明的核心在于「替换」。
哥德尔定义了一个替换函数
- 将自然数
解码成数学语句: ; - 将
中的所有 替换为自然数 ,得到 ; - 以
为函数值。
以
; - 将
中的 替换为自然数 (即 ),得到 ; - 以
为函数值。
即
考虑一个关于变量
设
那么「哥德尔数为
我们走一遍
, ; - 将
中的符号 替换为自然数 ,得到的恰好是 ; - 以
为 的函数值。
容易发现,「哥德尔数为
也就是说,命题
命题
布洛斯的证明
下文以
1994 年,逻辑学家乔治·布洛斯(George Boolos)给出了一个更简单的证明。该证明沿用了 哥德尔编码 方法。
全函数
此处引入的是狭义上的全函数。广义上的全函数
可枚举集
对于集合
- 输出的均为
中的元素。 中的任意元素,在有限时间内一定会被输出。
则
证明主体
令
考虑如下命题:
假设
令函数
由于
现在从另一个角度出发。我们可以按照句子长度一个个枚举字符串,一旦发现字符串对应的函数是全函数,就输出它的哥德尔数。如此一来,我们构建了这样的算法:
- 输出的均为全函数的哥德尔数;
- 任意全函数的哥德尔数,在有限时间内一定会被输出。
此算法符合可枚举集的定义,故
命题