如何理解「无限」
「无限」即一个可被证明无法停机的程序。
以上就是我对「无限」的理解。我们不妨假设所有可明确定义的「无限」都能用上述理解来解释。——其实这不是什么神奇的事情,因为我在这里对于「可明确定义」的定义即是「可以用程序表示」。
所以这个理解能干什么用呢?
(下文预备知识:初级的逻辑学、集合论、计算理论)
①为什么无穷大不能+1
因为它是程序啊。它的运算需要定义在可计算函数空间上而不是整数/实数上。
②芝诺悖论
阿喀琉斯追乌龟,这个问题的正解是这样的:
def pursue_time(Achilles_speed, tortoise_speed, distance):
return distance/(Achilles_speed - tortoise_speed)
芝诺悖论里提供的程序是这样的:
def pursue_time(Achilles_speed, tortoise_speed, distance):
Achilles_pos = 0
tortoise_pos = distance
while tortoise_pos > Achilles_pos:
time = (tortoise_pos - Achilles_pos)/Achilles_speed
Achilles_pos += time*Achilles_speed
tortoise_pos += time*tortoise_speed
return distance/(Achilles_spped - tortoise_spped)
(如果你看到哪个程序员写了这么一段代码,请对他说MDZZ)
所以说芝诺的程序停不下来……因为它本来就是为了停不下来才写成这样的啊!!
通常我们所说的真·悖论(排除佯谬),都可以构造出一个对应的无法停机程序。比如罗素悖论,即是一个无法停机的真值判定程序。
③停机问题
既然都用了「停机」这两个字,那了解计算理论的人肯定会联想到这个问题。
由于停机问题,存在我们无法解释清楚的「无限」。
因为我们无法保证证明任意一个程序是否停机,所以总有那么些程序,我们不能确定它们是不是「无限」。
哥德尔不完备定理也是一样——总有一些在当前框架下跑不完的真值判定程序。它们就是一些无法被证明或是证伪的命题。
④实数
吼吧,程序这种东西,能力范围是很有限的,比如它就不能枚举实数。
那么枚举实数看来就是个本文定义之外的「无限」喽?
——不,枚举实数是做不到的。定义一个不可定义数也是做不到的。对于这些做不到的事情,我们可以说它们看起来也有某种「无限」的属性,但可惜我们并不能清楚地定义这些过程。
虽说如此,「证明实数不可数」之类的事情,我们还是能清楚地说明白的。这些数学证明过程我们都可以写成某种程序。
那我们应该如何看待那些说不清楚的东西呢?
TLP 7 —— 对于不可说的事,你TMD就闭嘴!