2007 年 1 月,麻省理工学院的独立活动期(IAP),两名本科生贾斯汀·柯里与柯伦·凯莱赫开设了一门以侯世达《哥德尔、艾舍尔、巴赫》为底本的研讨课。这是第四讲:上半场由柯里讲意义的定位与信息论,下半场由凯莱赫用现场编程演示 L 系统、元胞自动机与波的模拟。课堂上学生随时插话,其中最活跃的提问者拉蒂夫贡献了贯穿全场的一条线索,被讲者戏称为「拉蒂夫假说」。本文依据现场录音编译整理,仅删去口语枝节、寒暄与重复,论证、例子与争辩一概保留。
柯里: 欢迎大家回来,今天见到的面孔更多了,我很高兴。上次的反馈单看起来还不错。我还是要请各位下手狠一点,尽管说难听话。我是真心相信课堂应该是民主的,有了这个反馈机制,我们才能不断修正,把这门课变成对所有人都更好的学习经历。
今天我发了几样东西。首先是侯世达新书《我是个怪圈》的第十章,标题叫「哥德尔那个最纯粹的怪圈」。我想这样应该不至于被告,只要不超过全书的百分之十、又是用于教学,一般就没问题,三百页里印十五页,应该在这个范围内。
这是补充阅读。你们不少人反映哥德尔编号看不懂。这很正常,它要花很长时间才能在脑子里转过弯来。世上只出了一个哥德尔,这套编号才以他命名,本来就不是什么随手可得的点子。请讲。
学生: 是不是有点像……
柯里: 哥德尔编号背后最根本的想法是这样:任何一套证明程序里的形式模式,无论是 MIU 系统,还是从皮亚诺公理出发做数论推演,你都可以把这些形式推导编码成对数字的操作。一旦你造出这条通道,造出这个与数的同构,你就可以去摆弄这些巨大的数;而这些数解码回去,又还给你原来那套系统里的形式陈述。
拉蒂夫: 那是不是就像有一个方程没有解,对应于有一个命题不可证?
柯里: 对,拉蒂夫说,一个方程没有解,就相当于一件事不可证。这其实非常接近哥德尔证明的核心思路。我发的这份第十章里,侯世达把哥德尔不完备定理的几个关键想法讲得非常好,其中最主要的一条就是:任何强到足以容纳数论的系统,本身必定是不完备的。
这个东西我想留给你们至少两周去慢慢咀嚼。因为你们最终会读到《哥德尔、艾舍尔、巴赫》的第九章,无门关和哥德尔那一章,他在那里给出了不完备定理的一个版本。但坦白讲,那一章的讲法不如这份新材料清楚。所以这只是补充阅读。
柯里: 现在回到我上次开的头,也是今天本该读完的部分:第六章,意义的定位。上次我从兔子和「gavagai」讲起。今天我想把问题往回退一点,退到一个有些人凭直觉就懂、有些人完全摸不着头脑的句子上。我写在黑板上,西班牙语好的同学请帮我改拼写:La nieve es blanca。谁知道这是什么意思?
学生: 雪是白的。
柯里: 好,举手的人都说是「雪是白的」。那对于没举手的同学,这句话是什么意思?
学生: 什么意思也没有。
柯里: 为什么?
学生: 因为我跟它建立不起联系。
柯里: 你跟它建立不起联系。到这里我们已经有了一个「拉蒂夫假说」:意义来自事物与你自身的关系。这个想法我们今天整堂课都会反复来探。等一下我和柯伦会一起给你们演示一些很棒的东西。
先设想一下:你被空投到墨西哥,靠着跟人厮混,慢慢学会了西班牙语,你造出一部词典,还造出一套递归规则。你会发现有些东西可以对应,比如 es 等于「是」,而「是」你在母语里是懂的。于是你有了一套方法,先把句子这种字符串切成部分,再去查你的词典:好,nieve,我查到是「雪」;blanca,我查到是「白的」;es 是「是」。
我想说的是,你越是多学几门语言,越会发现第一道坎其实是解析:你根本听不出别人在说什么。我去年夏天住在德国,一开始别人跟我讲话,我只能说「不好意思,什么?」。那甚至听不出是一个个词,就是一串连续的声音。但只要浸在那个环境里,我的大脑就自己跑起某种神经网络算法,开始把那串声音切开,切出「ein Bier」之类的东西。你于是能真的听见一个个单元,再去推断每个单元的意思,再把它们拼回你的母语,拼成看上去像是「雪是白的」的东西。可是「雪是白的」又意味着什么?
拉蒂夫: 也许这些词本身根本不意味着任何东西。
柯里: 拉蒂夫说,也许词本身什么都不意味。那这话又是什么意思?
柯里: 我们换个设想。假设我在一张纸上写下「雪是白的」,把它卷成一卷塞进瓶子,塞上木塞,扔进大海。它漂到岸上。那么,是什么在提示你?假设它冲上一座小岛,你看见这个瓶子。你凭什么怀疑这瓶子有意思?你为什么不是在清理海滩的时候顺手把它丢进垃圾袋?
拉蒂夫: 因为它看起来是精心做出来的。
柯里: 拉蒂夫说,它看起来是精心构造的。那么,是这个瓶子、木塞、纸卷的组合里的什么东西,向你暗示这里有信息、这里有意义?
学生: 里面有纸。
柯里: 所以它显得是有意为之的。一张纸偶然爬进瓶子里,自己给自己塞上木塞,再被洋流送出去,这实在太难了。
侯世达在这一章里把意义拆成三层:框架信息(frame message)、外层信息(outer message)、内层信息(inner message)。他会说,这里的框架信息就是「瓶子加木塞加纸卷」这个奇怪的配置本身,它会向任何一个有起码好奇心的人发出提示。他认为好奇心根本上是人的一种特征。这个配置在朝我们那个站在小岛上的火柴人尖叫:解码我,解码我,弄明白我是什么。
那么,假设他打开这张纸,看到了上面的字,但他不懂英语。他要怎么往下走?
学生: 可以先把它切成词。
柯里: 可是我们凭什么先断定这些不是毫无意义的涂抹?说不定它是一幅波洛克,就是一堆胡乱的线条。
桑德拉: 有重复。
柯里: 桑德拉说,这里有重复,而且看起来还存在某种「空格」的概念,也就是说这东西是可以被切分的,它被分成了一个个部分。
拉蒂夫: 也可能是有人想耍你。
柯里: 拉蒂夫说,也可能有人存心骗你。这很有意思。我在发给你们的第六章材料里出的一道题,就是让你们去搜「伏尼契手稿」(Voynich manuscript)。这份手稿一百来年里一直是密码学家的心头病。二战期间破解德军恩尼格玛密码的那批人,业余时间就在试着破译伏尼契手稿。那是一部很奇怪的中世纪文本,有一套极其精巧的书写系统,还配着许多外星植物一样的插图,那些东西在欧洲任何地方都找不到,可这本书偏偏是欧洲的书。于是人人都在想,这他妈到底是什么意思。
这个问题直到大约一年前才算解决。有人演示了如何用一个随机生成器造出几乎与伏尼契手稿一模一样的东西:给词准备一个前缀,比如 qo,再准备一个中段,再准备一个后缀,把它们排成一个矩阵,来回移位,随机地生成词。生成出来的东西看上去像是自然、可读的词,实际上什么都不是。伏尼契手稿里根本没有真实的意义,可它骗过了所有人,因为它带着许多与人类语言相同的模式。
还有一件和信息解析有关的事,我时间不够展开,只提一句。既然说到字母,有一个叫齐普夫定律(Zipf's law)的东西,任何有意义的语言或讯息似乎都服从它:把最常见的字母排个序,我记得 e 和几个元音排在最前,它们的频率服从幂律分布,也就是说第二常见的字母出现的频率恰好是第一名的一半,依此类推,遵守一条相当严格的数学关系。人们甚至把这套幂律检测用在 DNA 上,结果发现它表现出和自然语言一样的行为。想深入的同学可以去搜 Zipf,Z-P-F。
柯里: 但我想回到那个问题:「雪是白的」到底意味着什么。先拆开问:「雪」意味着什么?我说「雪」,你想到什么?
拉蒂夫: 想到雪。
柯里: 那又是什么意思?我们别绕圈子。
拉蒂夫: 想到一幅雪的画面。
柯里: 拉蒂夫想到的是一幅图像。他脑子里某处,视觉区被激活了,他调出了一段关于雪的视觉记忆,也许是那年下大雪、下暴风雪的记忆,也许是他平生第一次见到雪。其他人呢,雪对你们意味着什么?
学生: 冷。
柯里: 于是他脑子里的另一个区域亮了。我一说「雪」,它就通向你所有关于冷的经历,也许就是坐在这间屋子里、空调开得高了两档的时候。你觉得,天哪这里冻死人了。而「冻」又触发结冰的水,结冰的水又触发雪。还有呢?雪对你意味着什么?有些人会想,这是去滑雪的机会吧。这是我画得很糟的固定器。或者去滑板,那是娱乐,是时间,是冬天,是从学校里放出来的假期。
每个人的脑子里,围绕「雪」这个词都有一张极其复杂的概念网络。就像我换一个词,问你们「苹果」,完全不给上下文,你第一个想到什么?
学生: 派。
柯里: 苹果派。还有呢?
学生: 果园。
学生: 红色。
学生: 亚当和夏娃。
柯里: 亚当和夏娃。谢天谢地有人说了,我还以为得我自己说。那顺着亚当和夏娃,你们又联想到什么?说吧。
学生: 上帝。
柯里: 好家伙,我们从苹果跑到上帝,快得惊人。那么亚当和夏娃因为吃苹果受的是什么罚?那是什么?
学生: 知识树。
柯里: 牛顿是怎么发现万有引力的?我现在用的是什么电脑?
学生: Mac。
柯里: 对,Mac,或者你的 iPod,或者别的什么。所以,如果我能看进你的脑子,在我说出「苹果」这个词的时候给你做一次连续的正电子扫描,我会看到一场极其复杂的电活动爆炸,把你脑中与「苹果」有关的每一处都撩拨一遍。
当然,一旦我给出一个框架,比如说「这个苹果很好吃」,你马上就会收窄:他说的是什么?是在吃新鲜的苹果、红苹果、青苹果,还是在说苹果派?你会对那张正在扩散的神经网络做剪枝,只留下这一侧。
柯里: 我注意到还没有人来领那一两块钱的奖金。这正好是个方便的切入点,我们把很久以前读过的那段对话拿出来:还记得《对位藏头诗》(Contracrostipunctus)吗?就像苹果有很多层意思,第七十五页的这段对话也有很多层意思。
我需要有人来把阿基里斯和乌龟每句话的首字母依次念出来。
学生: H、O、F、S、T、A、D、T、E、R、S,C、O、N、T、R、A、C、R、O、S、T、I、P、U、N、C、T、U、S,A、C、R、O、S、T、I、C、A、L、L、Y,B、A、C、K、W、A、R、D、S,S、P、E、L、L、S,J、S,B、A、C、H。
柯里: 我本该把这个留成作业。这段对话里,乌龟和阿基里斯从第八十一页开始说:在音乐里藏东西的巧妙办法有很多。凯莱赫说,在诗里也一样,诗从前常干这种事,只是如今不时兴了。比如刘易斯·卡罗尔常把词和名字藏在连续诗行的首字母里,用这种方式藏话的诗叫藏头诗(acrostic)。
所以我们已经有了一层框架信息和外层信息在朝我们喊:我在说我自己,解码我。这段对话本身有它的一层意思,可它在自身之内又向上指向了更高一层意思,就是我们刚刚抠出来的这句话。那这句话又叫我们做什么?
学生: 首字母,倒过来读。
柯里: 我们把这句话再当成一段藏头文,取每个词的首字母,倒着读,得到的是什么?J.S. 巴赫。这大概就是我们能从中抽出的最高一层意思了。
那么,《对位藏头诗》在多大程度上「意味着」J.S. 巴赫?我觉得,这里最漂亮的地方在于他谈到能谈论自身、从而搭建自身的讯息。我们这里干的正是这件事:一段对话给了我们从它自身抽取意义的指令,抽出来的东西又告诉我们如何再抽一次。某种意义上这效率低得可笑,那是一段十来页的对话,就为了抠出内层信息里的一个名字。压缩比很差,十页纸只换来一个名字。但我仍然觉得它很有意思。
柯里: 不过,还是不是所有人都看出来了。那么这段对话到底在多大程度上意味着 J.S. 巴赫?我会说,程度并不大。
我在这里要主张的,也正好接上拉蒂夫假说,是这样一句话:意义并非内在的。侯世达把它叫作意义的点唱机理论(Jukebox theory of meaning)。意义是事物之间的关系。
这话什么意思?我要说的是:如果我们把「apple」写在一张纸上,把它射进外太空,某个外星文明捡到了它,那么几团墨迹本身其实没有多少内在意义。或者看这里,我用石灰粉在一块石板上划了几道,一块石板上的几道石灰粉,能意味着什么?我们之所以说 apple 有意义,唯一的理由是:在你读到它时,这个视觉输入与你脑中的电活动之间存在一个复杂的同构。
同样,我不懂中文,但我可以试着画一个字。这个东西意味着什么?可能坐在这里的某个人会说,不对,那其实是中文里「宁静」的意思。可我怎么可能知道这一点?我怎么可能把它和乱涂区分开?
这真正说明的是,意义既不在这边,也不在那边,它在事物的关系里。一样东西有多少意义,取决于它在使用者的心智中有多强的对应。就像那些正在消亡的原住民语言,它们不再承载意义,或者说不再以任何形式活着,正是因为没有人在使用它们,没有人参与那个不断修改这些东西的意义的复杂反馈过程。
想想这些石板上的划痕,它们的意思是怎么变的。倒回五十年,apple 绝对不会是笔记本电脑。牛顿和万有引力那个传说,顺带一提那是个杜撰,我不确定它一百年前是否存在,就当它存在吧。可是再倒回五百年,这个词和那件事绝无关联,那时支撑这串字符的会是另一张完全不同的神经网络。
所以我的主张是:它有多少意义,全看它在你脑子里引发了多少东西。
柯里: 但这带出一个反向的问题。既然是同构,那就该能双向走。假设我架一台摄影机,把你脑中所有的活动都拍下来,我想读出你的思想。我能在多大程度上说:B861-5G 区的放电意味着苹果?
这会引出一个非常重要的问题,也是今天后半程要探索的:物理活动在多大程度上具有意义?我们如何区分随机的物理事件与有模式的物理事件?
伽利略在教堂里看着来回摇的吊灯,用自己的心跳给摆动计时,他发现周期总是一样的,而且和挂着的重物有多大无关,似乎只取决于长度。那么,一次摆动的意义是什么?如果我要向你描述一个单摆,我可以有很多办法,就像我可以问你脑中的放电意味着什么。理想情况下,将来我们能说:那一串特定的放电意味着你在想一个苹果。
幸运的是,几百年前就有人看着这个东西,意识到他可以做得更好。与其只是把现象拍下来,与其说「单摆摆动的最佳描述就是一路 256K 码率的网络摄像头视频」,这压缩效率实在太差了。要编码信息,注意,关键词是信息。我要把话头往下拉的地方正是这里:这里面有多少信息?意义理论与信息论,正是我们用来严格地、数学地谈论意义的工具。
后来有人意识到,这么复杂的运动其实可以描述得相当简单。看它与竖直方向的夹角 θ,抱歉还没学微积分的同学,符号上面一个点表示我关心它随时间变化得多快,一个点是角度对时间的变化,也就是角速度;两个点是角速度对时间的变化,也就是角加速度。于是单摆的运动方程可以写成:θ 的二阶导,加上一个常数乘以 sin θ,等于零。你们以后会学到,这个方程作为方程太难解,于是我们把它线性化,把 sin θ 在零点附近近似成 θ 本身,这在预备微积分甚至几何课上有人见过。
不必在意这里的数学,我讲的可以是任何系统。今天我们要给你们看的,是物理学的整个事业,其实是全部科学的整个事业,本质上是逆向工程。
侯世达在第六章里谈的全是一个方向:你从一个字符串出发,问它意味着什么。我的回答是,apple 的意思就是它在你脑中引发的活动,进一步还可以说它指向宇宙中某处的那颗真实的苹果,不过那就成了一个更难的问题。可是反过来呢?你脑中的活动在多大程度上意味着这个东西?这是侯世达没谈的问题。一个单摆来回晃动,这运动的意义在多大程度上被编码进纸上这几道符号里?
这其实是个难得多的问题:我们如何从输出反推回输入。今天我们要做的,就是玩几个活的计算机模拟,看看单凭屏幕上看到的输出,我们能不能猜出底下的机制是什么。而整个科学、整个物理学做的事情,就是证明整个宇宙那些复杂的运动可以用这样几个符号极短地讲清楚。这会引出一个我们要称作算法复杂度(algorithmic complexity)的概念。
单摆的美妙之处正在于:描述它的运动不需要一路不间断的视频流。我可以把它写成一行数学,就交给你这个系统的完整时间演化。再加上初始条件,我最初甩得多快、从什么位置放手,我就能得到这种旋转的现象,从黑板上这几道痕迹里得出各式各样极其复杂的行为。
同样,两讲之前来过的同学看过曼德博集合,一个复杂到极点的分形。如果有人把那张图递给你,说,告诉我什么方程能生成它,绝大多数人是做不到的。
拉蒂夫: 可是方程不就是把信息藏起来了吗?你只看方程,但你脑子里其实带着你说的那一大堆东西;而那个物理的东西是被和符号连在一起的,你只是在往符号上添东西而已。
柯里: 拉蒂夫说,是不是所有数学其实都只是在藏信息。如果我的转述有误请纠正我:他的意思是,我们无非是把心智过程、把视觉输入拿过来,抹掉细节,在现象和符号之间造了一道抽象屏障。
我要说,在某种程度上,不是这样。当然,这个句子只对数学家有意义,也就是只对他们脑中的模型有意义。但它揭示的是一个非常简单的关系。我们说 sin θ 的时候,你怎么解析它?你也许会画一个圆,再画一个三角形,说 sin θ 是对边比斜边。而这个东西居然和那个东西有关系,这中间需要相当认真的思考。所以是的,你确实遮掉了一些细节。但如果你想让它跑在计算机上,直接把这行方程编成程序,要比录一段影片高效得多。你当然可以录影片,但代价完全不同。
拉蒂夫: 可是当你去弄清楚那些符号究竟代表什么,你会发现你并没有真的遮掉多少,你只是让符号代表了那个东西本身。
柯里: 拉蒂夫说,我们归根到底还是让符号代表事物本身。我还是要跟你争。理由是:钟摆上摇动的臂、我手里甩的这根缆线,它们背后有某种统一的东西。你们以后学得更多就会看到,今天我们也会演示:往水洼里丢一块石头,然后你就得到一整类振荡现象。
我们还会到处看见它。开车的时候你就能观察到,等一下我们要讲波动方程。你在高速公路上开着开着撞上一段堵车,发生的事情是:最前面的人停了,逼得你停,又逼得你后面的车停,你就把一个波往后传了出去。
可我们仍然能用同一个方程去描述这一大批看上去毫不相干的物理现象。我们谈的不是这一只钟,不是这一个单摆,不是这一根缆线,我们谈的是一大类现象,而写下的只是这一个方程。我觉得这非常漂亮。
但这件事难得吓人。要看出所有这些现象属于同一类,很难;看着我把这根粉笔抛到空中,就把描述它的方程提取出来,也很难。所以今天余下的时间我们要谈的,不是从 apple 出发、也不是从方程出发去问它意味着什么。这就像在问:y = x² 这个方程,真的意味着那条抛物线吗?你会看到,不一定。它可以意味着一大堆别的东西,我甚至不必把它画出来,我可以在另一个定义域里谈它,谈各种各样别的现象。真正要谈的,是这些不同想法之间的关系。
拉蒂夫: 可是当你在不同结构之间看出这么多相似,我们是不是在编东西?
柯里: 是,我们就是在编东西,因为我们做的只是建模。你要是真去量一量,这根缆线的角加速度是不是永远等于负的 k 乘以角度的正弦?对这个系统显然不是。你看,它在弯,它有各种奇怪的弹性性质,杆并不刚硬,它在到处颤。这也不是一根无质量的杆末端挂一个大球,这玩意儿自己的质量几乎和末端一样重。
所以答案是否定的。但我们居然能用相当简单的方式抓住这个现象的大部分行为、大部分要害特征,这正是科学和数学最了不起的地方之一。
拉蒂夫: 那这会不会说明了宇宙的某种性质?因为也许宇宙其实在做别的、更复杂的事情。
柯里: 拉蒂夫说,也许宇宙在做的是另一回事,我们只是在演示它「可以」这么简单。这是个好问题。但问题在于,我们作为人类,作为如此简单的生物,虽然我们也是宇宙的一部分,我们能做的最多也就是把现象简化成这样。
有兴趣的话去读读塞思·劳埃德的《宇宙编程》。他会说宇宙本身就是一台量子计算机,一直在执行量子操作,也许在宇宙的开端某处有一只猴子在往这台叫宇宙的量子计算机里敲指令,敲下:好,我们让力永远等于质量乘以加速度,学过物理的同学懂的,我们再让这个、这个成立,全都硬编码进去。
问题是我们并不知道。我们不知道宇宙开端究竟发生了什么,不知道宇宙究竟如何运作,那里仍然有谜。而我们能从「把粉笔抛向空中」走到「理解支配它的定律」,这本身就是人类了不起的成就。
我很想把这一点砸实:复杂的现象往往有一个非常简单的底层机制。这会牵到信息论里的一些不同想法,我可能会时不时闯进柯伦的时间里插几句,但从现在起主要交给他。我们先休息五分钟,回来清醒一下。
凯莱赫: 好,我开始了。这是谢尔宾斯基三角形,上次讲过。要走到这个形状有很多条不同的路。刚才贾斯汀讲的正是:你怎么从「看见这个形状」走到「理解生成它的过程」,这不是件容易事。这大概是人类特有的本领,我们能退后一步问:这里到底在发生什么?什么样的、更一般的过程会导出这个东西?
我要讲几种不同的系统:林登迈耶系统和元胞自动机,各举几个例子。
先看林登迈耶系统(L-system)。它是这样:你从一个字符串出发,字符串就是一串符号;你有一套重写规则,也就是一套文法,每个符号在重写时被替换成另一串符号。
举个例子。起始串是 F,规则是:F 变成 F+F--F+F,加引号表示这是一个字符串。所以每当出现 F,就把它替换成 F+F--F+F。这对你们来说大概什么意思也没有,先跟着走一遍。
第一次应用规则,我们得到 F+F--F+F。接下来就是林登迈耶系统真正递归的地方:我们把这个串再喂回规则里。这里的每个 F 都被替换成整条规则串。第一个 F 变成 F+F--F+F,然后接一个加号,然后第二个 F 又展开成整串,再接减号,再来一遍,再接加号,就这样一直下去。
现在回想上次的科赫曲线。一开始是一条线段,我们应用一条规则,在中间折出一个小尖,得到这个形状;然后对其中每一段再用同一条规则。
那么这些符号意味着什么?意义来自同构,就是贾斯汀说的:看你怎么解释它们。这里 F 表示向前走。加号表示把方向转 60 度,减号表示转负 60 度。而刚才那两个东西,字符串和折线,其实是同一样东西,这正是林登迈耶系统的威力所在。
第一个 F 就是这一段,然后转 60 度,再走一段,再转负 60 度、再负 60 度,再走,再转 60 度,最后再走一段。教这个的常用讲法是想象一只乌龟,它有 x、y 和一个角度 θ,也就是位置和朝向,每个符号被解释为对这只乌龟的一种作用。
我写了个程序就干这件事,我们来看。这是科赫曲线的 L 系统。快速过一下代码。这里是 turtleX、turtleY、turtleTheta,这是关键,乌龟从这里出发。起始串是 F。这个循环 for i, i 小于 depth, i++,意思是把某件事做 depth 次,depth 是个变量,我每点一次屏幕它就加一。字符串等于「把当前串里所有的 F 都替换成 F+F--F+F」。然后我们解释它,用这个同构给符号赋予意义:对串里的每个字符,如果是 F,就存下当前值,然后向前移动,这里的余弦和正弦就是我们对角度的解释,向前走的距离乘以步长,再添一条线段连到新的 x、y。这就是 F 的意思。加号的意思就是把乌龟转一点,把乌龟的角度加上 π/3;减号就是减去 π/3。
跑起来看看。我还加了鼠标监听,屏幕上会打印当前的字符串。现在这里显示的是 F。我点一下,它就做了我们刚说的那条规则,现在串变成 F+F--F+F,解释出来就是这幅图。再点一下,规则再喂一遍,得到这个,串在这里打印出来,更长了。再点,再点,再点,我们就得到了科赫曲线,这条奇特的曲线长度是无限的,相当野。到这里有问题吗?林登迈耶系统非常一般。
学生: 能不能再看看那幅图?如果你把它反过来看呢?如果把图翻个面,取另外一边,取边界……
凯莱赫: 你要不要上来比划一下?你的意思是把这条曲线看成从这头走到那头,是不是一样?
学生: 而且是上下颠倒的。
凯莱赫: 完全一样。对,这就是它之所以是分形:它内部含有自身的副本,无穷嵌套下去,这正是分形的意思。比如这整个东西,就等于这里的这一小块;反过来说,把这一小块放大就是整个。同样,按你说的把这一段上下翻转,也还是同一个东西。
学生: 这也太酷了。
凯莱赫: 再看另一个林登迈耶系统,我觉得它更绕一点,但道理一样,还是重写系统。起始串是 A,文法规则是:A 变成 B-A+B,B 变成 A+B-A。这些符号的意思是:A 或 B 都表示向前走,加号把乌龟往一边转,减号往另一边转。
我跑一下看看。一开始只是一条线。我做一次迭代,实际上这里是两次,因为只迭代一次它会翻到屏幕外面去,所以我跳过了。这是两次迭代之后。仔细看这个形状。我再迭代一次,你会注意到,从原来的每一条线段上,这个形状都会重新长出来一遍,只是方向交替。原来的线段在这里、这里、这里,于是这里往这边长,这里往那边长,这里又往这边长,这里朝上长。
学生: 像是互相咬合在一起。
凯莱赫: 对,它是自我咬合的。我再迭代一次,从这里每一条小线段上又要长出一个那样的形状,而它正在逼近谢尔宾斯基三角形。再来一次。好了,它现在只是一堆歪歪扭扭的小线段,但它正在变成谢尔宾斯基三角形。
学生: 你这次用的是 F 那个串吗?
凯莱赫: 不是 F,它从 A 开始,对 A 应用这两条规则。这里打印出来的就是字符串:先是 A,两次迭代后变成这一串,然后这第二个串里的每一个 A 都会被替换成 B-A+B,得到的就是这个。它会一直长下去,但概念是一样的。
树也一样。我上次给过一个树的例子,我们可以为树写一个林登迈耶系统。起始串是 FBR。规则是:每个 B 变成 -FBR++FBR-。我们可以真的想一想,给这些符号赋予意义:F 是向前走,B 是枝条末端的一个芽,R 是往回退。
想象造一棵树:我们向前走,所以是 F;顶端有一个芽,B;然后 R,退回来。规则说每个 B 变成 -FBR++FBR-,也就是每个芽都长成「左转、走、生芽、退回、右转两次、走、生芽、退回、左转」。跑一下看看。到这里有问题吗?
学生: 为什么你的字符串都是回文?
凯莱赫: 为什么都是回文。因为树的两侧完全对称,就是这个原因。顺便说,回文的意思是正着读和倒着读一样。这说得通,因为这棵树左右翻转之后还是它自己。
我跑一下。第一步是 FBR,向前、生芽、退回。再来一次,就成了这棵树,有了。
现在看这张图,我再给你们看上一讲里那个程序,就是那个递归函数,它说「画一棵树,然后用更小的尺寸再画树」。我跑一下,瞧,得到的是同一个东西。这边是林登迈耶系统,那边是递归函数,它们一模一样。
这意味着什么?分形这东西背后似乎有更深的什么,你可以从完全不同的角度逼近它,得到同一个结果。我就是着迷于此。
学生: 得到的是同一个东西。那么林登迈耶系统和递归函数之间有什么关系?
凯莱赫: 你是说,两条不同的路径通向同一个结果,那么这两种路径本身是不是在某种意义上也是同一个东西?
柯里: 换句话说,我们对同一个现象有了两种不同的描述,那么这两种描述在多大程度上是同一个东西?
凯莱赫: 这确实令人头晕。我们有两种不同的描述,描述的是同一样东西。它们本身显然不同,但它们描述的东西是同一个。被描述的那样东西是一个,描述本身是两个。真要说清楚,很难。
学生: 这是不是有点像用词语、图画、声音、文字去描述现实中的同一样东西?
凯莱赫: 他打的比方是:用语言、图像、声音、文字去描述现实里的同一件事。是的,你说的所有这些不同的描述,指向的是同一个根本的东西。这就是内层信息,贾斯汀刚才讲的框架信息、外层信息、内层信息里的最后一层,内层信息才是真正的意义,是事物本身。
学生: 那有没有可能,物理的东西本身也只是对更抽象的什么的一种描述?也许物理实在本身就是一种描述。
凯莱赫: 天哪。他说,也许物理实在本身也只是对别的什么东西的描述,而数学是另一种描述,甚至也许被物理宇宙所描述的那个东西正是数学本身。我们手上出了一位柏拉图主义者。
这就等于在问:所有这些关于分形的不同描述都通向分形,那么分形本身是不是又在描述某种更深的东西?我不知道。我们隐约有那种感觉,可它太滑不留手了。
学生: 既然分形是递归的,你可以一直往里走?
凯莱赫: 可以,它是无标度的。分形内部包含着自身,你可以无穷地往里钻。
学生: 那这件事的含义是什么?它通向哪里?
凯莱赫: 我不知道,它通向更多的它自己。它是递归的。
学生: 那宇宙有没有可能在某种更抽象的意义上就是一个分形?
柯里: 我插一句,因为这个不得不说。在量子力学版本的原子模型之前,我们的说法是:这里是原子核,这里是电子。当然,我也可以把「原子核」换成「太阳」,把「电子」换成「行星」。这个模型当然不对,但我们曾经拥有的正是这种跨尺度的自相似:如果我们从太阳系一路望远镜式地往里推,一层一层推到原子的尺度,我可以把这张图原样换掉,说这是原子核,这是电子。这当然不精确。
有意思的是,很多物理现象确实如此,这是个很深的实验事实。柯伦刚才提过一点:你去看一座山的形状,那是一种皱褶的、粗糙的东西;你再拿一张纸,把它揉成一团再摊开,这张纸的地貌几乎和一座山以及周围的地形一模一样。所以在某种意义上,塑造山川河谷的那些力,和我揉皱这张纸的力,在概念的层面上是自相似的。
凯莱赫: 生物学里也一样,而且更让人振奋。你在生物学里看到不同层级、不同尺度上的图案,它们全都一样,全都共享着某种东西。所以你自己的身体在某种意义上就是分形,当然不是无限的,但那些结构确实在那里。
学生: 那到底哪个才是「东西本身」,是那个东西,还是我们描述它的方式?
柯里: 这归根结底就是:你觉得哪个更真实,单摆,还是描述单摆的方程?
桑德拉: 这是先有鸡还是先有蛋。
凯莱赫: 既然说到生物学和生命。生命是复杂的。社会自己演化,人做各种事,你没法真的预测会发生什么,你会看到一大堆复杂行为。在社会里,这些行为从人与人之间复杂的互动规则中涌现出来。但用计算机和元胞自动机,我们可以非常非常粗糙地给生命建个模,得到的东西和真实社会有相似之处:行为极其复杂,光看着它你说不出它会怎么收场;小小的扰动可能滚成巨大的、影响深远的事件,就像某一个人改变了整个未来。这非常迷人。
我来讲讲规则,以及这个程序是怎么工作的。这是康威的生命游戏,非常酷。我们有一张格子,每个格子叫作一个细胞,所以叫元胞自动机;叫自动机,是因为它按简单规则自己往下演化,不用人管。
你可以把每个细胞想成一个小小的生物,在过它自己的一生。规则非常简单,没记的同学最好拿张纸记一下。
一个细胞要么是活的(填色),要么是死的。假设我们就是这个细胞。如果我们活着,而周围只有一个活细胞,我们就死于孤独。如果周围有两个,那还行,是个健康的环境,就当那是我们的父母,我们活着。如果有三个,也许是父母加一个兄弟,我们也活着。但如果有四个,我说的这些数字都是我们邻域里活细胞的总数,周围这八个格子就是这个细胞的邻域,如果邻域里有四个或更多活细胞,这个细胞就死于过度拥挤,窒息而死。
如果这个细胞原本是死的,而它的邻域里恰好有三个活细胞,它就活过来,等于那三个细胞生了个孩子。
这就是全部规则。就这么几条,就能让这整个东西跑起来。它一开始只是随机填色的格子。
看一下代码。neighboringCells 就是取 (x, y+1) 之类,把周围邻域里所有的细胞取出来放进一个列表。这个记法表示数组,也就是列表,一个细胞是我造的一个对象,它有「活」或「死」这个属性,画出来是一个方块。
注意这是在一个双重循环里,对每个 x、每个 y 都执行一遍,所以双重循环体内的代码对每个细胞都会跑一次。看循环体内:me 是坐标 (x, y) 上的这个细胞。如果 me.value 是 1,也就是我是白的、我是活的、这个格子里有东西活着,那么:如果邻域和小于二,死于孤独;如果大于三,死于拥挤窒息。这可以写成:先算 neighborhoodSum,就是前几行里把邻域中每个细胞的值加起来,比如这个细胞的邻域和就是三,也就是它周围活细胞的个数。如果 me.value 是 1,那么当邻域和是二或三时,我的下一个值就是 1,我继续活着;否则我的下一个值是 0,我死。再看另一支:如果 me.value 是 0,也就是这个细胞原本是死的、是黑的、里面什么都没有,那么当邻域和恰好是三时,我的下一个值是 1;否则我继续死着。所以周围有三个「人」,我就在这个格子里出生。
基本就这些,剩下的是算颜色之类。跑起来,这就是康威生命游戏。有问题吗?
学生: 它会不会重复自己?
凯莱赫: 我们看看。现在它每两帧重复一次,也就是说它已经进入稳定态了。
学生: 那它永远不会再变了?
凯莱赫: 到这个点上不会了。它进入了一个周期循环,再也不会变,除非你往里塞随机数据。我看看鼠标点击好不好使,贾斯汀,我不记得了。不好使。不过这取决于初始条件。我们重跑一次。重跑之后它可能永远不会再变成刚才那样,因为初始条件是随机的。
把这个东西想成一个计算机程序。这就是计算机科学里的停机问题,图灵的停机问题。我记得那份讲义里有?也许没有,抱歉。图灵的停机问题说的是:给定一个计算机程序,不存在另一个计算机程序,能够分析它并告诉你它是否会停下来。所以,停机,走到终点,或者到达一个稳定点,这是不可预测的。给定一组输入,你无法预知这个系统是否终将进入稳定状态。
所以,细胞的初始配置其实就是一个计算机程序,等我们启动模拟、开始应用这些规则,它就被执行了。
学生: 那是不是可以搞出整个图灵机那套东西?这几乎就是在做同一件事,图灵机?
凯莱赫: 是的,应用这些规则可以归约成一台图灵机。
学生: 图灵机是不是就相当于计算机程序存在的最低层?
凯莱赫: 差不多。我不确定生命游戏本身算不算,但我知道有些别的元胞自动机规则确实是通用图灵机。
柯里: 你可以把它想成一条纸带,上面来回做着非常简单的运算;你也可以把运算放在这样一张方格网上、放在元胞自动机的层面上做。所谓成为一台通用图灵机,意思是你能在根子上重现「与」「非」「复制」这些基本逻辑操作,而从它们出发,你本质上能得到全部数学,得到你想要的任何东西。
学生: 那能不能从中得到哥德尔那一套?能不能从这里得到全部数学?
柯里: 这里的微妙之处在于:你能不能从一组公理出发,递归地导出所有为真的陈述?不能,哥德尔不完备定理告诉我们不能。这也是数学家永远不会失业的原因。永远有新的真理在外面,是你那组公理够不到的。你必须跳出去,从更高的层面元思考,然后发现它,而不是只靠作用在公理上的递归操作。
有意思的是,哥德尔不完备定理和停机问题在根本上是同一回事。因为停机问题的证明方式,是把那个「判定程序是否会停」的程序喂给它自己。正是这种递归的性质。这非常迷人,我们以后还会讲。请记住,大约两讲之后,我们会真正把哥德尔不完备性讲给你们,耐心等一等,它就要来了。
凯莱赫: 我再给你们看两个元胞自动机的例子就结束。一个叫投票规则。设想一群人,他们跟邻居聊天,他们关于「哪个政党最好」的意见随着时间被周围的人慢慢影响。这些是灰度:这个人比较居中,这个人非常共和党,这个人非常民主党。
生命游戏里状态是二元的,只有开和关、生和死。而在这里,状态有无穷多个,是负一到一之间的一个实数。规则是:这个人有一个数值,比如 0.5;每一轮迭代,他都要打量一下周围的人,把邻居们数值的和乘以一个很小的数,加到自己的数上。所以他只被影响一点点,但确实被周围影响。
我们得到的现象叫粗化(coarsening)。接下来这个模拟一开始是彻底的噪声,每个细胞被随机赋予负一到一之间的一个值,然后我们施加这条规则。看着,它会很美。
学生: 太漂亮了。
凯莱赫: 它会一直演化下去,最终状态要么全黑,要么全白,要么黑白各半、在某处分界。而这一切只源于一条极简单的规则:把你周围人的意见加起来,按很低的权重加进你自己的状态里。就这样得到了这么复杂的行为,谁能想到。
快速过一下代码。结构和前面基本一样,双重嵌套循环遍历每个细胞,me 是当前细胞,neighboringCells 如此这般。这次细胞的值不是 0 或 1,而是一个实数。我们把邻域求和,然后这一行就是那条规则的全部:我的下一个值等于我的当前值,加上邻域和(也就是邻居们的意见)乘以 0.05。
学生: 如果乘一个更小的数,是不是就变慢?
凯莱赫: 是的,而这正是活程序的好处。这个 0.05 决定了系统演化的速度。如果我们改成 0.5 再跑,你会看到它快得多,因为 0.5 是 0.05 的十倍。同样,把它改成 0.01,它就会慢很多,但系统的本质不变:只被邻居影响一点点。现在它跑得很慢,但仍然在跑。
顺便说一个有意思的事实:和这个类似的元胞自动机在图像处理和图形学里用得非常多,比如模糊,就是把一种元胞自动机作用在图片的像素上。
柯里: 我想插一句。这和柯伦跟我在新英格兰复杂系统研究所做的一个项目有关。这是我们所说的现象「普适类」(universality class)的一个例子。
有趣的地方在于,同一条规则、同一种行为,其实也支配着气体液滴的凝结。你看你的车窗,一开始只是一层雾气落在玻璃表面上。每一个水粒子做的事情,根本上是为了降低自身的能量,走最小作用量的路;基于表面张力,基于水分子之间的相互作用方式,水分子喜欢彼此挨在一起,因为聚在一起比一堆水分子各自孤立所需的能量更少。
我觉得有意思的是:支配玻璃上一层水珠这种简单事物的规则和行为,和人的行为在根本上是同一套。你一个人做狩猎采集者,要比大家聚成一个社会、开集体农庄、有人负责这个有人负责那个,费力得多。
所以在这个意义上,我们真的有一个现象的普适类,是同一套定律在起作用。注意,当对象是水分子的时候,这是纯物理,我可以实实在在把能量值算出来;可当我们谈人类社会系统的时候,我们本来没有方程。但有了元胞自动机,我们就有了,我们有了社会如何互动的方程。
新英格兰复杂系统研究所正在做的一件很有意思的事,就是预测族群冲突与暴力。你可以用这种非常简单的模型去预测:比如说加沙地带,那里有巴勒斯坦人和以色列人,他们怎么混居、怎么聚合、又怎么彼此隔离,会发生什么。这些都可以用同一类非常简单的图形规则来描述。
学生: 那我们之所以觉得复杂,是不是只是因为我们看不见底下的基本规律?
柯里: 你是问,是不是我们只是看不见社会背后、水分子背后的那些底层定律。这正是斯蒂芬·沃尔弗拉姆在《一种新科学》里表达的想法:宇宙其实就是一台巨大的元胞自动机,一直在按规则往外吐结果,和生命游戏非常像。
凯莱赫: 我可以很顺地从这里接到下一样东西,波。元胞自动机可以做出波来。而且请记住,量子力学基本上就是波动力学,对吧贾斯汀?
柯里: 在很多方面是的,大致如此。
凯莱赫: 粒子之间的相互作用在某种意义上可以归结为波,归结为驻波。我们看看这个程序。顺便想一想猴子敲键盘:一只猴子敲出这段符号的确切排列,概率有多大?不可能。不过猴子敲出莎士比亚倒是可能性大得多。
我们看这条规则,真正需要的就是这一条。先看规则,我要请你们试着预测会发生什么。
在这个系统里,每个细胞有一个高度,还有一个速度。你可以想成三维的:高度是这个方向或那个方向的位移,速度是它移动的快慢。
看这条规则。这里的 neighborhoodSum 是邻居高度之和减去我的高度,也就是我和周围每个细胞的高度差之和。对邻域里的每个细胞,把「那个细胞的高度减去我的高度」加进 neighborhoodSum。如果大家高度都一样,它就是零;如果有差异,它就是这些差的总和。然后我的速度增加 neighborhoodSum 除以八,也就是邻域的平均差。
这意味着什么?会发生什么?有谁能说说?
学生: 如果周围的人差异很大,你可能自己很高而别人都一样,那……
凯莱赫: 对,如果你和周围的人差得越多,你的速度就越大。我们跑起来看看。
这是波,是水。它根本上就是波。而既然一切粒子都是波,那么「宇宙也许就是一台巨大的计算机」这个念头,是值得想一想的。
这个程序我加了鼠标点击,可以直接点它。我点边上……好,出来了。看中间,那里的格子在开、关、开、关地跳。
学生: 像棋盘格。
凯莱赫: 对,有点像棋盘。
学生: 那我们不需要微积分了?
凯莱赫: 其实微积分做的就是逼近这个东西,或者反过来说,这个东西在逼近微积分。
学生: 微积分更精细,更接近,就像你放更多的像素进去?
凯莱赫: 他的意思是:如果你有更多像素、数值之间有更高的分辨率,你就会逼近真实的物理实在。是的,你说得对。但这正是计算机的根本限制:它是离散的。每个细胞只有有限多个可能的高度,我们能有的细胞也只有有限多个。
学生: 宇宙本身完全不是离散的。
凯莱赫: 宇宙本身怎么就不离散了?
学生: 时间是离散的,空间是离散的,而且必须是。
学生: 我理解的宇宙是连续的。想想芝诺悖论。
学生: 不对,芝诺悖论说不通。只有当我说「我从这里走到那里,是在一定时间里把这些小段加起来」的时候它才成立。而我确实在移动,正因为它不是连续的,它是离散的。
凯莱赫: 芝诺说的是:要从这里到那里,我得先走一半,再走剩下的一半,再一半。
学生: 但它并不会触底,它无限地分下去。
学生: 可那是在线上说的,我们并没有线。
凯莱赫: 从这里到那里就是一条线,所以……根本的问题是:物质能不能无限地分下去?弦是不是最底层?我这是在用弦论的说法。
学生: 那空间呢?空间本身,就是位置。你别想象成大点小点,位置就是位置。从这里到那里要走这么长的距离,中间那段距离里还有更小的距离,但你不可能低于那些距离,那些就是最基本的距离。
凯莱赫: 所以你是说存在一个最小的距离。那么问题来了:在我们这个欧几里得平面里,也就是宇宙里,一个点,比如一个原子或一个粒子,从这里移到那里的时候,它有没有可能不经过中间的任何一点?中间有无穷多个点,它都要经过。那东西本身也许永远不会小于某个距离,但请注意,我们在这里建模的是空间,不是物质。在这个模型里,空间被定义成一个个离散的量。而在现实中,粒子可以处在无穷多个小小的位置上。所以空间正是那道把模拟之物与真实之物分开的巨大鸿沟。
学生: 也可能是离散的。
凯莱赫: 有可能,空间也可能是离散的。
柯里: 那就是关于宇宙的计算主义观点,某种意义上你正在为它辩护。
凯莱赫: 是啊,如果它小到我们根本探测不到,那宇宙就可能是离散的。
学生: 因为时空……所以也许时空比空间和时间都更基本。
凯莱赫: 对。这个留给你们用余生去想吧。我讲完了,还剩十分钟,交还给贾斯汀,让他收个尾。
柯里: 好,我很想把这些拉回到我们前面关于「什么是信息、什么是意义」的讨论里,给你们摆一个真实的问题。这是柯伦和我在新英格兰复杂系统研究所每年一月办的密集研讨周里,和另外一群人一起啃过的问题。
最根本的问题是:我们怎么度量信息?怎么度量一幅图像的信息内容?为什么我们会说某幅图像里的信息更多?假设我们往一个程序里喂进这样一个框,而框里的东西可能是谢尔宾斯基三角形。为什么我们会说这在某种意义上比一堆翻滚的狗吐更有意义?虽然我很喜欢波洛克,但为什么我们会说这些乱线里的意义比谢尔宾斯基三角形少?
这是个仍然有人在研究的根本问题,它牵涉到我们如何度量信息。
学生: 会不会和随机性有关?
柯里: 会。信息论有很大一部分讲的正是概率,讲你在多大程度上预期到某个结果。有意思的是,一位叫克劳德·香农的数学家在五十年代前后开始想这个问题,然后用一篇论文《通信的数学理论》一举关掉了这个领域里的大部分主要问题。
他当时想搞清楚的是:我们对着电话说一句话,它沿着传输线跑,外部世界的噪声全都混进来,我们怎么还能从电缆里那些脉冲中提取出意义?我们怎么从里面还原出声音?那里面的信息量是多少?
如果你要一个严格的定义:对于单个状态,我们记作 H(x),取我们所预期事件的概率,乘以这个概率的对数。我在这里没法把它推导出来。而当你面对一个系综的时候,就对这些项求和,得到大写的 H。这就是信息论这门学问。
但根本的问题在于:如果我把这幅图翻译成一串比特,一串 0 和 1,我需要多少个 0 和 1?
拉蒂夫: 也许在未来,你会发现这幅图需要更多;但当你从中抽象出来的时候,你需要的更少。
柯里: 完全正确。拉蒂夫说,也许这样一幅图本身需要更多,但你一旦抽象出来,就需要更少。这正是信息熵与算法复杂度之间的根本区别。
一个很简单的例子。假设你要写一个程序打印一个数,我们随便挑一个数,它有三十亿位长,是 7、1、7、4、3 之类一路下去。由于这个数按定义就是随机的,我能写出的最短程序就是「打印这个数」。
再换一个数:3.141592……有人想在这里炫一下自己背了多少位圆周率吗?我有个朋友当年几何课快挂了,圆周率日那天老师说每背一位 π 加一分。他上课前一小时背了一百五十位,成绩当场拉回 A。
但如果你想让计算机吐出 π,先把它算到一百万位、再写「打印那个」是很蠢的。我们有各式各样的算法,有的用三角函数公式解出来,有的用那些非常漂亮的级数,一位一位地逼近。比如 1 加 1/4 加 1/9 一直加下去,也就是把 1/n² 求和,结果是 π²/6。
所以从算法信息的角度看,某样东西越是能用更少的行数描述,它几乎就越有意义。这里的论证是:如果你把谢尔宾斯基三角形那幅图直接编码成 0 和 1,它需要的位数和一堆乱涂差不多。这恰恰暴露了信息熵的失败。可我们能像柯伦演示的那样,用短短几行程序迅速生成它,这说明用「写一个程序需要多长」来衡量的算法信息要有意义得多。抱歉,不是算法熵,是算法复杂度。
这些只是我们用来思考「意义是什么、信息是什么」的一些严格的数学工具。我真心希望我多少说服了你们:许许多多复杂的现象可以从非常简单的东西里长出来。
请讲,拉蒂夫。
拉蒂夫: 如果我们看一般的数,看实数呢?因为你要给一个数起名字,你可以把不同的符号混起来,可即使你有无穷多个符号,你最多也只能给它们编号,一、二、三、四、五这样。你最后得到的是无穷多个数,可那是整数的势,而你要映射到的是实数,实数比整数多。所以有些数你根本没法说出它们是什么。这和算法复杂度有关系吗?因为有些数你说不出来,它们不是可计算的?
柯里: 你说的确实和这个有关,而且你几乎正好撞上了过去三四十年里最根本的定理和悖论之一。我可以再给你一些资料,它叫勒文海姆-斯科伦定理(Löwenheim–Skolem theorem)。这本质上是一个逻辑学的想法。你刚才说的那个悖论根本上揭示的是:如果我们真的想要一套意义理论,如果我们想指出每一个实数,可我们只能以有限的方式去做,那我们凭什么知道自己真的意谓了每一个实数,哪怕我们只能以可数的方式去做?
我复述一下拉蒂夫在问什么,就是如何指定实数。取从 0 到 1 的连续线段,我知道拉蒂夫不认为这条线是连续的,但它是。我干脆取到 2,好让我能标出根号二。根号二是 1.41……无理数,无穷位不循环,没有任何简短的写法。可我们只有有限多个符号,准确地说是可数多个符号,我们要用整数去给这个数命名。那我们究竟怎么才能「说出」根号二?我们只有可数多个整数可以拿来一位一位拼写它。我们能做的永远只是逼近根号二。我可以给你根号二到十亿亿位,我给你的仍然不是根号二。
顺带说,这又牵到一个真正根本的悖论,我没法在这里展开,那实在太超纲了。但我们给根号二命名的办法是:用数学说它是「满足 x² = 2 的那个 x」,这就是我们能做到的最好。不过你撞上的这个想法确实是根本性的,不该被轻慢。
还有别的问题吗?我已经严重超时了,也希望你们继续想这些问题。请讲。
学生: 我在想,欧几里得空间看上去是连续的。那意识呢?你会不会用同样的方式看意识:它看起来连续,但它真的连续吗?
柯里: 意识是不是连续的。这是个好问题,因为它等于在问:我们能在多大程度上把意识还原成一个个离散的神经元放电?
学生: 就算它感觉起来是连续的,但「感觉像什么」并不等于它就是什么。
柯里: 这个想法很好。他说,我们感觉意识是连续的,但假设它其实并不连续。有一件事可以想一想:我记得我们眼睛的刷新率大概是每秒两百帧。这正是我们觉得事物连续的原因。可当我们把手在眼前飞快地挥动时,我们其实只看见几个片段。我们所谓经验的连续性,来自它发生得太快,快到我们干脆近似地说它经过了中间所有位置。所以这有点偷懒。
学生: 那是我们能做到的最好。
柯里: 对,这是我们能做到的最好。
学生: 那还不够好。
柯里: 还不够好。行,说得对。
那么我鼓励大家去读,这会让「印刷体数论」那一章更好懂一些。命题演算那一章可以略读,但请真正下功夫读印刷体数论那一章,然后开始消化我发给你们的第十章讲义。希望再过大约两讲,我们能把哥德尔的成就讲得更透,也把这些想法尽量串起来。这堂课非常好,谢谢各位。
这节课以"意义不在符号本身,而在符号与解释者之间的同构关系"为主线,从《GEB》第六章"意义的位置"出发,经由信息瓶中信、藏头诗、钟摆方程,走到 L-系统、元胞自动机等"简单规则生成复杂现象"的活体演示,最后落到信息熵与算法复杂度作为"意义"的数学度量。
三层是框架信息(frame message)、外层信息(outer message)和内层信息(inner message)。在漂流瓶例子里(第 6–8 段),框架信息是「瓶子+软木塞+卷轴」这个显得刻意的组合,它提示捡到者「这里有信息,请解码」;外层信息是纸上的重复、空格等结构特征,告诉你该如何切分和解读;内层信息则是解码后的实际内容「snow is white」。讲者强调,框架信息的识别依赖接收者的好奇心,意义并不完全在载体内部。
它用来说明「看起来像语言的东西未必有意义」,也就是外层信息可以被伪造。讲者(第 9–10 段)说这部中世纪手稿百年来吸引了包括二战密码学家在内的无数人尝试破译,但大约一年前有人展示,用前缀、中缀、后缀的矩阵随机组合,就能生成统计特征几乎一样的文本,因此手稿可能根本不含意义。它骗过众人,是因为它模仿了人类语言的模式(如重复、词长分布),这呼应了 Latif「也许有人在耍你」的提醒。
每个格子只有生/死两种状态,以周围八格为邻域(第 53–56 段)。活细胞邻居少于 2 个则「孤独而死」,2 或 3 个则存活,多于 3 个则「过密窒息而死」;死细胞邻居恰好 3 个则「出生」。Curran 用家庭比喻:两个邻居像父母,三个像父母加兄弟,太多则挤死。代码中用双重 for 循环遍历每格,算出 neighborhood sum 后按这几条判断 next value。他强调,就这几条规则,从随机初始状态出发就能产生无法预测的复杂演化。
两者的信息熵可能相当——按位编码都很长、位分布都近似随机。但算法复杂度截然不同(第 77–78 段):随机数的最短生成程序只能是「打印这个数」,长度等于数本身;而 π 虽然无限不循环,却可以用几行代码(如 Σ1/n²=π²/6 这类级数)生成。讲者由此定义:描述所需行数越少的对象越「有意义」。这解释了为什么谢尔宾斯基三角形按像素编码与噪声一样长,但它「显然」比噪声更有内容——因为它有极短的生成程序。
因为外星文明看到的只是墨迹,正如我们看不懂随手造出的「汉字」(第 22–23 段)。论证的前提是「同构」:符号有意义,仅仅是因为在使用者群体中,视觉输入与大脑活动之间存在稳定的对应关系。一旦使用者消失(语言消亡)或对应关系改变(Apple 从水果变成电脑),意义就随之消失或漂移。因此意义不在符号里、不在大脑里,而在两者的关系及其持续修正的反馈过程中——这就是侯世达的「点唱机理论」。
Latif 的观点(第 29–31 段)是:方程之所以显得简短,是因为读者脑中已有大量模型,符号只是「代表」那个东西。讲者承认方程只对数学家有意义,且确实屏蔽了细节,但反驳说方程的价值不在于缩写单个钟摆,而在于它统一了一整类现象——钟摆、绳索、水波、交通波都服从同一形式,而且在计算机上跑方程比存视频高效得多。反驳并不完全封闭:讲者随后又承认「我们确实在编」,模型只是近似;「统一性」是否本身也是人脑投射,课堂并未解决,这正是 Latif 后续追问「宇宙是否真的如此简单」的空间。
Curran(第 46–49 段)说这表明分形背后有某种更深的东西,可以从不同角度逼近却得到同一对象。学生追问:两种不同描述指向同一对象,它们本身是否「相同」?Curran 用三层信息回答:描述各不相同,但内层信息(对象本身)相同。学生再推一步:物理现实是否也只是对某种更深东西(如数学)的描述?Curran 回应「我们手上有个柏拉图主义了」——即数学对象独立于物理和心智而存在,物理反倒是它的一种表达。Justin 后来把它压缩成「钟摆和方程哪个更真实」。
理由是两者的证明都依赖自指的对角线论证(第 59–60 段)。停机问题的证明是把「判定程序是否停机」的程序喂给它自己,构造矛盾;哥德尔的证明是用哥德尔编号让算术命题谈论自身的「可证性」,构造出「本句不可证」的句子。两者都表明:任何足够强的递归系统内部都存在它自己无法决定的问题。讲者由此推出「数学家永远不会失业」——总有公理集合够不到的真理,需要跳出系统做元层面的思考才能发现。
讲者会承认「意义」确实依赖接收者(这正是上半场的论点),但指出算法复杂度给出了一个不依赖审美的客观区分(第 75–79 段):谢尔宾斯基三角形存在一个几行代码的生成程序,噪声不存在——这是数学事实,不是偏好。他还会引用 NECSI 研讨班的经验说明这是仍在研究的真问题。不过讲者可能也要让步:「最短程序」是相对于某种描述语言的,而语言的选择本身又回到了使用者共同体——所以客观性只是相对客观。
支持离散的一方(第 70–73 段)认为时间和空间都有最小单位,芝诺悖论正因空间可无限分割才「说不通」,且宇宙可能就是一台巨大的元胞自动机(沃尔弗拉姆、Seth Lloyd 的立场)。支持连续的一方(Curran)区分「模型中的空间」和「现实空间」:程序里格子有限,但现实中粒子可处于无穷多位置,这是模拟与现实的鸿沟。Justin 折中:若离散尺度小到无法探测,则无法排除。迁移到意识(第 82–83 段)时结构完全相同:意识感觉连续,但可能只是神经元离散放电的近似,就像眼睛因刷新率有限而把快速运动「补成」连续——「感觉连续」不能证明「本身连续」。
讲者(第 64–66 段)的论据是:三者都服从「每个单元被邻居轻微影响、倾向于与相似者聚集」的规则,而 NECSI 确实用类似模型研究过族群分布与暴力的关系。类比在「宏观空间模式」层面有一定预测力——它能说明为什么会形成分隔的飞地以及哪种尺度的混合最易冲突。但风险在于:水分子没有历史、制度、身份认同和主动策略,而人有;把冲突归结为局部相互作用可能忽略政治、经济等非局部因素,甚至把结构性暴力自然化为「物理必然」。讲者自己也承认「对水分子我能算出能量,对社会我们并没有方程」,所以这种模型应视为启发式工具,而非因果解释。