如何证明数学中必然存在某些真命题是无法被严格证明的
希尔伯特纲领
综述
根据数学家希尔伯特的描述,一个仅仅由不证自明的公理和符号推导过程构建的数学大厦应包含某些性质,以下是其中两条:
完备性
希尔伯特认为,所有数学命题都可以用一组有限的公理证明或证否。
一致性
希尔伯特认为,已经证明的所有数学命题构成的体系不能产生矛盾。
可判定性
希尔伯特认为,存在一个算法可以判定任意一个命题是否能够从公里出发证明。
希尔伯特纲领的应用
利用希尔伯特纲领,我们确实可以推导出很多命题,例如,根据算术基本公理(皮亚诺公理):
- 0是自然数
- 每一个自然数,它的后继一定也是自然数
- 对于每一个自然数m、n,m=n当且仅当m的后继=n的后继
- 0不是任何自然数的后继
- 任何关于自然数的命题如果证明:它对0为真,且假定对自然数n为真时,它对n的后继也为真,则可证明该命题对所有自然数为真。
经过50多步的简单推导就可以证明命题 $1+1=2 $ 证明过程
哥德尔
1930年,当时年仅24岁的天才数学家哥德尔在一次会议上庄重的向大家宣布:
“希尔伯特关于数学完备性的理想,我已经解决了!”
“这么好啊!怎么解决的?”
“我证明了数学具有不完备性。”
哥德尔第一不完备性定理
这个定理形象点说就是 “必然存在某些定理无法由公理推出。”,推翻了第一条完备性。
为了证明这个定理,我们首先要做的就是构造一种对应关系,这种对应关系应满足这个条件:它能够把任何有关 “数学” 的符号语言对应到唯一的 “数字” 上。
如此,我们就可以把对 “数学” 的性质的讨论,转化为对 “数字” 的性质的讨论。这些转化来的数字,我们姑且称之为 “哥德尔数”
哥德尔数符号体系
首先,我们要定义一些最基础的数学符号,如下:
| 基本数学符号 |
|---|
| \(\lnot\) 非 |
| \(\lor\) 或 |
| \(\supset\) 子集(作为如果那么使用) |
| \(\exists\) 存在 |
| \(=\) 等于 |
| \(0\) 零 |
| \(s\) 后继 |
| \((\) 左括号 |
| \()\) 右括号 |
| \(,\) 逗号 |
| \(+\) 加法 |
| \(\times\) 乘法 |
有了这些,我们可以为它们分配哥德尔数:
| 基本数学符号 | 哥德尔数 |
|---|---|
| \(\lnot\) 非 | \(1\) |
| \(\lor\) 或 | \(2\) |
| \(\supset\) 子集(作为如果那么使用) | \(3\) |
| \(\exists\) 存在 | \(4\) |
| \(=\) 等于 | \(5\) |
| \(0\) 零 | \(6\) |
| \(s\) 后继 | \(7\) |
| \((\) 左括号 | \(8\) |
| \()\) 右括号 | \(9\) |
| \(,\) 逗号 | \(10\) |
| \(+\) 加法 | \(11\) |
| \(\times\) 乘法 | \(12\) |
对于变量符号,我们只需要将他们的哥德尔数依次定义为12后面的质数就行了。
| 变量 | 哥德尔数 |
|---|---|
| \(x\) | \(13\) |
| \(y\) | \(17\) |
| \(z\) | \(19\) |
| \(\dots\) | \(\dots\) |
好的,现在我们创建了一个能表示一切符号的数字系统。如何用它来表示一个完整的命题呢?
例如,原命题:\(0 \times x = 0\)
对应的哥德尔数:\(6\) \(12\) \(13\) \(5\) \(6\)
我们先列出前五个质数:
\(2\) \(3\) \(5\) \(7\) \(11\)
把这五个符号的哥德尔数,放在这些质数的指数位置再相乘:
\(2^{6}\times3^5\times5^{13}\times7^{5}\times11^6\)
于是,命题 \(0 \times x = 0\) 的哥德尔数,就是:
\(2^{6}\times3^5\times5^{13}\times7^{5}\times11^6=123620768045516171875000000\)
约等于1236亿亿亿。
这个方法看起来繁琐,但是妙处就在于,它是唯一的。
由于质因数分解定理,每个数字的质因数分解都是唯一的,因此不仅由命题推出的哥德尔数是唯一的,每个哥德尔数对应的命题,也是唯一的。
这是对于命题的哥德尔数,那么对于证明过程的哥德尔数,又是什么样的呢?
例如,我们要证明:“1是存在的” 这个命题。
证明过程的构成实际上就是命题的有序排列,那么我们只需要写出以下两个命题:
\((\exists x)(x=sy)\)
\((\exists x)(x=s0)\)
这两个命题讲的翻译成文字就是:“根据皮亚诺公理,每个自然数都存在后继,0是自然数,0的后继为1,所以1是存在的。”
将这两个命题按顺序排成一排。分别求出他们的哥德尔数,然后再把这两个求出来的哥德尔数作为指数放在2和3(两个质数对应两个命题)上面然后相乘,求出来的结果就是这个证明的哥德尔数。
可以看出,命题的哥德尔数都很大,很大,很大。
接下来,我们来试图将一些复杂的命题,转化为哥德尔数:
例如,命题:“质数有无穷多个。”
写成基本符号语言(有点小长):
\(\lnot(\exists p )((\lnot(\exists m)(1<m<p),(\exists n)(m\times n =p))\land(\lnot(\exists q)(\lnot(\exists k)(1<k<q),(\exists l)(k \times l= q))\land (p<q))\)
但是,这里面好像用到了基本符号里没有的\(>\)、\(<\) 和 \(\land\)。啊没关系,这些也可以用基本符号表达,但是有点懒就不写了。
把这个符号语言转化为哥德尔数即可。
当然,哥德尔符号系统甚至还可以表示 “讨论命题的命题”
比如这个命题:“\(0+1=2\)”
算它的哥德尔数已经很简单了,但是如果我们要这个命题的哥德尔数:
“命题 ‘\(0+1=2\)’ 的第二个符号是加号”
该怎么办呢?
将 \(0+1=2\) 写成符号语言:
\(0+s0=ss0\)
这个命题写成哥德尔数后,乘法运算的第二项显然是 \(3^{11}\) ,但如果第二个符号不是加号了,第二项就会变成:\(3^{?}\)
,?处可填任意数。
于是,命题 “命题 ‘\(0+1=2\)’ 的第二个符号是加号” 经过处理就变成了:
“命题 ‘\(0+1=2\)’ 的哥德尔数能被 \(3^{11}\) 整除,却不能被 \(3^{12}\) 整除。”
把它写成基本符号语言,求哥德尔数即可。
于是乎,我们成功构建了一个用数字来表示几乎一切命题的符号体系。
证明过程
把上面讲的东西先放到一边,我们要真正开始证明了,证明过程其实很简单,只是有那么亿点点抽象。
我们考虑这个命题:
\((\exists x)(x=sy)\) (存在x使得x是y的后继)
它的哥德尔数,现在已经能方便的口算了,大概是 \(1.7 \times 10^{95}\) ,我们记为 \(m\)。
然后来,我们用 \(m\) 来替换掉原命题中的 \(y\)
\((\exists x)(x=sm)\)
这个操作,看懂了吗?
我们把这样一个操作,抽象为一个函数:
\(Sub(x,y,z)\)
sub的大致意思是替换。
这个函数的运行规则遵循 “取,找,替” 三步。
- “取” 哥德尔数为 \(a\) 的那个命题
- “找” 到命题中,哥德尔数为\(c\) 的符号的位置
- 把他 “替” 换成数字 \(b\)
- 得到的这个新命题的哥德尔数就是 \(Sub(a,b,c)\) 的值
是不是很简单明了?
用刚刚那个命题来演示一下:
\(Sub(m,m,17)\)
- 取这个命题: \((\exists x)(x=sy)\) (该命题哥德尔数 \(m\) )
- 找到其中哥德尔数为17的符号,也就是 \(y\)
- 把它替换成 \(m\)
- 得到 \((\exists x)(x=sm)=Sub(m,m,17)\)
好那么现在你应该已经明白这个函数的运作规律了,把刚才讲的都放在一边!
我们来讨论这样一个命题:
“无法证明哥德尔数是 \(Sub(y,y,17)\) 的命题”
根据我们的理解,这个 \(Sub(y,y,17)\) 实际上就是把哥德尔数为 \(y\) 的命题中的符号 \(y\) 位置的哥德尔数(17) 改为哥德尔数 \(y\) , \(y\) 可能是一个未知的大数。
请仔细分清楚这两个 \(y\) 的区别!!
在 \(Sub(y,y,17)\) 中,前两个 \(y\) 指的是一个确定的大整数,代表着某个命题!!而17,指的则是该命题中,那个符号为 \(y\) 的变量!!它是不确定的。
然后,我们把这个 “无法证明哥德尔数是 \(Sub(y,y,17)\) 的命题” 命题的哥德尔数,记为 \(n\) ,并继续开始考虑另外一个命题:
“无法证明哥德尔数是 \(Sub(n,n,17)\) 的命题”
还是分三步走:
- 取那个哥德尔数为 \(n\) 的命题,也就是 “无法证明哥德尔数是 \(Sub(y,y,17)\) 的命题”
- 找到,这个命题中,符号为 \(y\) 的位置。也就是 \(Sub(y,y,17)\) 里面那个。注意!!这里的 \(y\) 由于进入了另一个命题,性质已经发生了变化,从一个大整数变成了一个符号变量,故而成为了该函数的目标。
- 于是,将 \(y\) 替换为 \(n\)
我们神奇的得到了一个结论:
$Sub(n,n,17)= $ “无法证明哥德尔数是 \(Sub(n,n,17)\) 的命题”
啊?
这个 \(Sub(n,n,17)\) 命题向我们表达的意思竟然就是,自己是无法被证明的!这其中一定有什么问题。
我们开始仔细分析一下啊,刚刚这个命题:“无法证明哥德尔数是 \(Sub(n,n,17)\) 的命题” ,他究竟是一个真命题还是假命题。
如果:“无法证明哥德尔数是 \(Sub(n,n,17)\) 的命题” 是假命题。
那它的否命题:“可以证明哥德尔数是 \(Sub(n,n,17)\) 的命题” 是一个真命题。
那么又由于已经知道,只有真命题才能被证明,所以命题:“哥德尔数是 \(Sub(n,n,17)\) 的命题” 是一个真命题!
\(Sub(n,n,17)\) 是一个真命题!!!
但由于我们刚刚,假设 \(Sub(n,n,17)\) 是一个假命题,矛盾产生了。
如果数学是一致的,那么,矛盾就不可能产生,故原假设不成立。
所以,命题 “无法证明哥德尔数是 \(Sub(n,n,17)\) 的命题” ——
只能是一个真命题!!
该命题为真,该命题描述自己是一个无法证明的命题。
因此,该命题就是一个为真,但又无法证明的命题!
希尔伯特的梦想被解决了。这就是哥德尔第一不完备性定理。
它的内容是:
任何一个包含了足够强的算术公理的形式化系统如果是一致的,就是不完备的,即其中必存在一些既不能证明也不能证否的命题。
简单点说,就是如果数学是一致的,他就只能是不完备的。
哥德尔第二不完备性定理
刚刚这个螺旋炫酷的证明只是哥德尔在读博士期间发表的博士论文。
希尔伯特非常难过,但是他依旧坚持自己的数学一致性观点,认为基于公理体系的系统出现矛盾是绝对不可能的!
但是,在哥德尔第一不完备性定理发表1年后,哥德尔又发表了一篇论文,宣布:
“希尔伯特的梦想我又给解决了!”
“厉害啊年轻人,快展开说说怎么解决的。”
“我又证明了一致性是无法证明的。”
哥德尔又证明了公理系统无法证明自身是否具有一致性。
任何一个包含了足够强的算术公理的形式化系统,其一致性不能在内部得到证明
我们再来证明一下,比刚刚那个简单。
我们仔细回想一下刚刚那个证明过程,实际上我们就是凭空找到了一个 \(Sub(n,n,17)\) ,然后假设公理体系具有一致性,然后
就证完了。
也就说,自始至终我们用到的前提条件只有一个:
假设公理体系具有一致性。
如果,我们可以从公理出发,用某种骚操作证明公理体系具有一致性,我们就相当于,从公理出发,证明了 \(Sub(n,n,17)\) 为真。
但是,\(Sub(n,n,17)\) 是无法证明的。
所以。这个骚操作是不存在的。
我们不能从公理出发证明这个公理系统是否一致。
\(Q.E.D.\)
图灵停机问题
哎没错,不是哥德尔,图灵成功的解决的希尔伯特的第三个梦想:可判定性。
根据图灵停机问题的表述,不可能有一套算法能机械的判断所有数学命题的真或假。
这里不再给出证明过程。
总结
总结一下吧,刚刚的三个性质:
- 完备性
- 一致性
- 可判定性
变成了:
- 不完备
- 无法证明一致
- 不可判定
希尔伯特于1943年去世,所以很幸运,这些证明他应该都看到了。

浙公网安备 33010602011771号