编者按:2007 年夏天,麻省理工学院两位本科生贾斯汀·柯里(Justin Curry)与柯伦·凯莱赫(Curran Kelleher)为参加 MIT 高中生暑期项目的学生开设了一门讨论课,围绕侯世达的《哥德尔、埃舍尔、巴赫》逐章展开。本文是第五讲的实录,柯里先就 TNT 一章作了「冷静的回顾」,从意义理论、信息熵谈到公理为何必须假设,随后凯莱赫上机演示随机文法如何「长出」树木,师生就自然选择与普适形态展开了讨论。本文依据 MIT 开放课程的现场录音编译整理,仅删去口语枝节,发言归属与论证脉络悉数保留。
柯里:大家好,欢迎回来,今天是第五讲。我想先道个歉,接下来的调子也会比较冷静。我会快速回顾上一讲的内容,顺便提出几句警告。但在那之前,我先为这一章道歉。有多少人读这一章时兴奋得从椅子上跳起来?没有,我看到的恰恰是举手的反面。看来大多数人不喜欢这一章,说实话,我也不喜欢。
我把它布置为阅读,唯一的理由是让大家掌握一个基本想法:像 MIU 系统、pq 系统那样,我们有一套完全形式化的排版系统来编码陈述,可以用纯机械的方式摆弄这些陈述。当然,和 MIU 与 pq 不同,TNT(Typographical Number Theory,排版数论)的优势在于,它编码的对象是我们自以为有所了解的东西,也就是数,自然数 0、1、2、3、4 的性质以及关于它们的真理。我主要是希望大家熟悉这套记号,并且熟悉这样一个想法:从几条公理这样的种子出发,只靠反复应用递归的推演规则,就能生出一整张新字符串的网,而这些字符串经过解释,恰好给出我们关于数的真理,或者我们自以为知道的东西。这才是这一章的要点。还有几件事我会强调,不过我们今天照例又是大杂烩,各种话题混着讲,最后还有一样激动人心的东西给大家看。
柯里:先回顾上一讲。我们当时关心的,根本上是一套意义理论(theory of meaning)。这也是我要道歉的地方之一。在学术界,语言学、哲学圈子对什么是意义理论根本没有共识,可我们在课上讲得好像给出了一套很有说服力的说法。
我们当时是这样说的:「雪是白的」这句话的意义,在于存在某种复杂的、用侯世达的话说是「奇异的」同构(exotic isomorphism),对应着你脑子里发生的活动。当你的视觉感知装置聚焦到黑板上,看见这些石灰碎屑抹在黑板表面,你的大脑就跑起一整套复杂的边缘检测算法,先分辨出这里暗、那里亮;等画面聚焦以后,你辨认出一些整体的对象,比如这一组、这一组、这一组字符;然后再对每个字母做边缘检测,读出 s、n、o、w,拼成「snow」。「snow」接着接入一张漫长而复杂的概念语义网络:你第一次看见下雪的记忆、寒冷的体感、去滑雪或滑雪板的经历,如此不断分岔下去,而且越分越成为一件非常个人的事。
我认为这一点很值得注意:「雪是白的」对我意味着什么,和它对你意味着什么,在某种根本意义上是不同的。这是个危险的说法。它意味着意义理论几乎不可能有一个形式化的、数学式的、唯一的解释,而那正是哲学家和语言学家一直想要的。他们希望「雪」直接指向外部世界,指向我们生活其中的这个世界里那种真实存在的水的结晶结构,那才是「雪」的正派公民式的意义,除此之外什么都没有。至于「有一回我们在堪萨斯遇上暴风雪」这类个人理解,他们巴不得统统清除掉。所以我当时宣扬的,是「雪是白的」这个感知输入与它在你脑中点亮的东西之间的同构。
柯里:接着我们引出了另一个想法,一个与此紧密相连的概念:信息。请大家把记忆倒回去。侯世达谈到一张唱片,绑在航天飞机之类的东西上射向宇宙深处。他提出的问题是:假如某个外星文明捡到了这张唱片,问「这是什么」,那么在完全脱离人类文化与社会背景的情况下,这张唱片还能有多少意义?一张唱片对半人马座阿尔法星的居民意味着什么?我不知道。
一上来就有一个大的论证:唱片的结构,那些整齐的同心圆纹路(更准确地说是螺旋纹路),假如外星人掏出显微镜,分析这件奇怪器物的一小段,就会注意到纹路里的某种规律性,然后他们会问,这很怪,不知道有没有什么含义。接着就有了这样的设想:他们能不能从唱片反推出唱片机大概是什么样,进而真的把音乐放出来。就算他们真的完成了这一连串不可思议的推理,就算他们把音乐放出来了,音乐对他们有意义吗?还是只是一堆混乱的杂音?拉蒂夫,你有话说?
拉蒂夫:噪音。
柯里:拉蒂夫认为音乐只会是噪音。多少人同意他?有没有人敢站出来反对?
马克斯:我们已经假设他们能听见了。
柯里:马克斯说,这里预设了他们能听。好,我们就把这一点让给他们。既然要做哲学对话,就假定他们能听,甚至假定他们的听觉频率范围与我们相近。假设宇宙中存在某种普遍的「人」的形式,在引力相近的行星上,加上碳恰好是很稳定的分子,演化在另一颗行星上几乎照样走了一遍。那么音乐还会有同样的意义吗?它会有意义吗?
学生:声音本身听起来大体是一样的。但如果有人在唱歌,歌词对他们大概毫无意义,就像我们听一首外语歌,听不懂那种语言。
柯里:那就假设放的是一段巴赫,没有人声,只有那种辉煌荣耀的声响。菲利克斯?
菲利克斯:他们不知道钢琴是什么。
柯里:对,他们大概不知道钢琴是什么。但你们觉得,即便不知道,仅凭声音本身,他们会不会仍然被触发某种美感,甚至敬畏,或者对这音乐的渴望?
学生:那些渴望从哪来?是什么触发它们?
柯里:好,我得谨慎一点,不说渴望,只说美感。你们认为这音乐里的美感和组织性有多根本?
学生:那得看别人怎么说。有人说,我可以把这个和那个联系起来,这听起来像那个,这让我有某种感受,而那种感受让我觉得它美。
柯里:所以即便对地球上的人,巴赫的音乐对每个人的意义也不一样。
学生:但感受还是在那里。我觉得听外国音乐最酷的一点就在这:你在很多意义上能辨认出绝望之类的各种情绪。所以也许关键在于,这些外星人从那些频率里能不能在脑中得到同样的感受。
柯里:正是。不过,就算撇开每个人听音乐时被触发的那些极其复杂的语义网络,也假定外星人没有这些网络,我认为仍然可以很有力地主张:模式(pattern)本身有某种根本的美,音乐里有这种东西,而且它在很大程度上是可以用数学描述的。这是个值得细想的说法:模式本身就是美,它是普遍的,任何人都能检测到模式,而且在某种意义上,模式是意义唯一可依托的东西。
柯里:所以上一讲我把模式和信息联系了起来。这里我又要先泼一盆冷水。我至少提到了信息的熵这个版本,公式是 H 等于负的各项 p(x) 乘以 log p(x) 求和,上次我漏了负号。我不打算把这个公式讲透,它说的无非是给某件事赋一个概率,一件事越不可能发生,它携带的熵就越大,或者反过来说。总之要点是:存在用熵来度量信息的数学办法。归根结底,如果你把这张唱片,或者我们之前讨论过的一幅画、一段音乐,描述成一串零和一,就可以给它赋一个熵值,把它当作信息的度量。
有意思的是,所有语言和某些符号系统都共享一些模式,其中一些与熵的概念密切相关。你甚至可以对字母表里的字母算出信息熵,依据仅仅是它们在语言里出现的频率。拉蒂夫,你说。
拉蒂夫:那只是因为人类心智只能处理这种东西,所以造出来的语言都是同一种结构。
柯里:拉蒂夫认为语言里出现这些模式,是因为人类心智只能处理这些。我不同意。同样的分析已经在 DNA 上做过,DNA 作为一种语言,呈现出同样的模式。除非你认为人类心智创造了 DNA,否则这个说法不成立。
与此相关的还有一个现象,大家可以自己去查:齐普夫定律(Zipf's law)。取任何一种语言,把符号按出现频率排序,会得到一条非常漂亮的幂律:第二常见的符号出现次数恰好是第一名的一半,第三常见的恰好是第一名的三分之一。只要按频率排序,语言里就会冒出这种幂律行为。齐普夫大概是四五十年代哈佛的一位语言学家,他注意到了这一点。这很有趣,因为你可以拿一样东西问:这是伪造的,还是真正的语言?我不知道它什么意思,但我注意到某些符号反复出现,于是把它们排个序,然后你就能纯粹根据符号出现频率判断它是不是一种可理解的语言。这些东西都有严格的根基。
柯里:接下来我们讨论了一个相关概念,因为我说过,熵这幅图景并没有抓住我们所说的信息。如果你拍一张照片,上面全是一滩翻腾的狗呕吐物,把它转成零和一,做信息熵分析,结果可能和另一张照片差不了多少,而后者画的是谢尔宾斯基垫片(Sierpinski gasket),有明显的规律、明显的模式,可以说有明显的意义,而且无限延伸下去。所以香农式的信息熵,整个信息论这个领域,你们想学可以来 MIT 旁听,它对这两幅图的零一编码几乎分不出高下。
于是我们提出了另一个想法,并且真的动手玩了一把:谢尔宾斯基垫片显然是有意义的,因为我可以写一个很短的程序,几行语法,运行之后就画出整幅图。要编码谢尔宾斯基垫片的视觉图像,需要一串长达百万、十亿位的零一序列,这个描述长得离谱。这就像有人让你描述一个钟摆,你说「它摆过去,摆回来,摆过去,摆回来」,然后不停地这么说,想描述多长时间就说多长时间,把自己的声音录下来。这是编码这一现象规律性的极其低效的方式。而这个规律其实可以用符号的迭代来表达。我们用了林登迈尔系统(Lindenmayer system,我从来没赢过拼字比赛),像「F − F + + F − F」这样的规则,再用一个漂亮的小程序递归地展开,只需要几行代码。编码这几行代码所需的信息,远远少于一张实际的图片。
这引出了一个非常重要的概念:算法信息(algorithmic information)。我们由此真正开始琢磨一个想法:科学做的一切,无非是逆向工程。我们拿到一种现象,比如谢尔宾斯基垫片,或者一个钟摆相对某个角度 θ 来回摆动的规律,然后用极简的方式描述它。我们用符号编码这里动力学的规律,把钟摆的算法内容压到最低。向没学过微积分的同学道歉,θ 上面的两个点表示角度变化率的变化率。
然后我们开始玩元胞自动机,本质上就是一张格子,每个格子是黑是白,由它的邻居决定。仅仅摆弄这些规则,我们就撞见了一整片行为的宝藏:改变颜色数量和变化速度,可以模拟波动方程,用这么简单的有限确定性规则做出水洼里的水花;只要说「我的颜色取决于邻居在做什么、在想什么」,就能模拟投票模式,同时也暗示了从众思维的危险,如果总让自己被别人的想法左右,我们就会变成一种同质化的文化。柯伦用几行代码优雅地实现了这些极简规则,我们突然就在描述社会、物理、文化世界里大片的复杂行为。
这引出了一些有趣的念头。我记得我们偶然说到一句:因为看到行为的自相似性,同一条描述人类群体行为的投票规则,也描述了水汽凝结成珠。你往浴帘上喷水,水会结成珠,因为每个水分子都想降低自身的总能量,而抱团可以做到这一点,于是就出现了聚簇、结茧的性质,和我们在水珠里看到的一样。然后我们就开始说,哎,这是不是意味着宇宙是分形的,有些概念适用于所有层次?
柯里:我感觉我们当时被那一刻的兴奋冲昏了头,也许把大家引上了一些虽然激动人心却根基不牢的路。如果你去问科学界的人「宇宙是不是一个巨大的分形」,很多人会说:显然不是。理由有好几条。如果你说的是跨尺度的自相似,那种「太阳系有太阳和绕着转的小行星,啊哈,原子也是同一个模型」的看法是错的。当今物理学的一件根本大事,正是弥合原子层面数学描述与行为的分歧,原子根本不长那样。学过化学翻过课本的人都见过那些奇怪的概率云图,它们受量子力学支配,与太阳系的经典力学描述完全对不上。所以在这个意义上,宇宙显然不是分形,因为规则并不在所有层次上通用。
然后我还做过一个我当时觉得很带劲的演示:拿一张纸揉成团,再展开,说这张纸的拓扑和形态,几乎与山脉、河谷、河流如出一辙,跨尺度的模式生成,我在很局部的层面做的事,就是我们在很大尺度上看到的东西。我由此暗示宇宙在概念上是分形的。但数学家或物理学家真正会告诉你的是:我描述这一现象的方程是无标度的(scale free)。无标度这个概念我们在流体力学里天天用:我用手指划过水面,能看见指头后面形成小漩涡;我们也有真实的照片,山峰刺破云层,云在山尖周围流动,形成卡门涡街(von Kármán vortex street),漩涡一个个脱落。流体力学里有太多美丽的图像。这里写「山」,我也可以擦掉写成「手指」。我真正应该提倡的,是数学方程这套形式体系的美与优雅,以及当我们能让它们无标度时,它们如何在各种层次上描述现象。所以我只想谨慎一些,不说日后会给自己惹麻烦的话。
除此之外,我鼓励大家尽情放飞,探索新想法。柯伦和我之所以从根本上相信计算机科学和数学是思考的框架,是因为你可以想得再高远、再哲学、再离谱,但到头来,你要么用证明严格地让它成立,要么在计算机上执行出来,后者在几乎所有实际意义上和证明一样好,因为它要么行,要么不行。你关于宇宙的思考,要么行,要么不行。根本上你需要可证伪性(falsifiability),你的想法要有可能不成立。做形而上学的思考很有趣,谈论高于宇宙、高于时空的东西,谈它们的结构,都很有趣,但到最后,我们要能用观察检验,或者用数学、用计算机证明。这就是我这盆冷水。对那些不得不听、又不想听的同学,抱歉。
柯里:现在说点更有意思的,先看一眼时间。关于数论,我特别想让大家注意一件事:什么东西可以取作公理,以及为什么我们无法证明它们。请翻到第 221 页,你们看到一座金字塔:0 + 0 = 0,0 + S0 = S0,0 + SS0 = SS0,如此往下。
首先我想指出其中的一些优雅之处,这正是数学家成为地球上最龟毛生物的原因。我们这里没有一堆数,只有一个数,就是零。其他每个数都是零的后继,或者零的后继的后继的后继。用我们的元语言说,1729 个 S 后面跟一个零,就代表 1729 这个数。这里的优雅在于,你只需要两个概念,零和后继,整个东西就白白到手了,很美。
但这个例子要凸显的是:如果不假设,我们就无法证明这条陈述:对所有 a,0 + a = a。多么平淡显然的一件事,对吧?可我们手里只有那些具体的陈述,事实上我们得到的是整座金字塔、整座真陈述之山,我们想一跃而至这条普遍性结论,觉得「这显然成立」。但我们想跳过去的欲望,根本上来自我们对数、尤其是对整数如何行为的理解,我们的心智模型(mental model)。这一点很重要:我们手头真正拥有的,从来只是心智模型,通过形式系统把它们严格化,我们才看得清自己的定义是否涵盖了我们想涵盖的一切。按 TNT 的原有设置,没有这条公理就永远证不出这条陈述,所以最终只能假设它。侯世达把这叫做 ω-不完全(ω-incomplete),ω 是我们用来一口气指称全体整数的记号。意思就是:即便你有这无限一摞真陈述,你也没有那条把它们全部囊括为一个真理的陈述。
柯里:心智模型这个概念我觉得非常重要。我记得高中第一次看到下面这个证明时,简直震惊,甚至有点毛骨悚然。多少人相信 0.999…(9 无限循环)等于 1?德尔相信,娜丁相信。有人能上来证明吗?菲利克斯,你相信吗?能证明吗?先想一想,打心底里想一想。有没有人想炫一下,像年轻的伽罗瓦一样跳上黑板演示给我看?德尔,你有什么想法?
德尔:乘以 10?
柯里:好,我采纳你的建议,带大家走一遍证明。我们把这个东西叫 x,暂时忘掉它是 1,叫 x 等于 0.999…。德尔建议考虑 10x 这个量。
学生:是 9.999…。
学生:如果在无穷处停下,是 1,因为它在逼近那个数。
柯里:不用极限的概念,我们也可以更根本地证明。菲利克斯,你知道吗?
菲利克斯:减去 x。
柯里:菲利克斯说该减去 x。x 本身是 0.999…,做减法,10x 减 x 得 9。于是我们有了一条新真理:9x = 9。满足它的唯一的数是 x = 1。我永远忘不了预备微积分课上,老师第一次做这个证明时,坐我旁边的女生说:「不可能,它不是 1,看,如果它是 1 我就会写 1。」可我明明写下了一个完全不同的数,而它是同一个东西。这展示了心智模型要告诉我们的一件极其重要的事:我们可以对一个对象,比如实数,有看似正确的理解,却不断在最基本的层面被它这样吓一跳。
这些都是关于数学做什么、我们在数学里做什么的元陈述。具体到 TNT,我们的想法是,数论,至少 TNT,应该囊括我们关于数论的全部思考。这可以追溯到欧几里得对他的几何公理的说法:我们知道这些东西根本上为真,或者至少相信它们为真,它们囊括了我们关于几何的全部知识,由这些假设推出的一切也都应当确定为真。
柯里:然后就出了萨凯里的事,还有高斯躲着不发表。当然,高斯总是比所有人早五十年发现,然后翻出笔记本说:「哦,抱歉,这个定理我在第一杯咖啡和第二杯咖啡之间就做过了,不过很高兴你也发现了。」这就是非欧几何(non-Euclidean geometry)的概念:打破第五公设,也就是给定一条直线和线外一点,存在唯一(唯一,加感叹号)一条直线与之不相交。但如果你在球面上工作,把直线定义为大圆,那么你能画的任何直线都是大圆,两条直线实际上有两个交点,大概是这样,抱歉画得很糟。
于是希尔伯特,就是那位极力推动数论这些东西的人,说:我们只有点和线这些根本的公理化概念,我们能从中得到的最多只是它们彼此间的逻辑关系;一旦我们试图去解释这些东西,就会惹上麻烦。当我们解释「线」这个陈述时,指的是这块平黑板上笔直的东西,而不是地球表面上弯曲的东西,我们就惹上了麻烦,因为我们提供了一种解释,而没有严格贴着形式体系走。这也显示了从你的形式体系里带走过多解释的危险。侯世达在这一点上告诫我们提防解释,我为他感到骄傲,因为解释会给你惹麻烦。
现在我先回答一些关于这一章的问题,然后介绍柯伦要做的事,再进入更新更有趣的内容。关于 TNT 有什么问题?我记得在本科的《哥德尔、埃舍尔、巴赫》研讨课上,有人说:「他那些超自然数到底在说什么鬼?」还有 ω-不一致。这些不是平凡的概念,整个数学分支都在研究它们。所以如果你们觉得完全没懂,不必自责。桑德拉?
桑德拉:我搞不清 TNT 到底有多少条规则。他谈到一些子类别,比如命题演算,然后又说把它并入 TNT。
柯里:对,命题演算被并进了 TNT。抱歉,我没布置更早那一章的阅读,所以这部分脱离了上下文。
柯里:你们有没有试过书里的小练习?有一节我想特别拿出来,答对的人都记一功,因为我有自己的答案,但不确定对不对。这也顺便检验大家对记号的掌握。第一道:~∀c:∃b:(SS0·b=c)。先不管波浪号,谁能给出解释,并判断真假?拉蒂夫。
拉蒂夫:对所有 c,存在 b,使得零的后继的后继乘以 b 等于 c。
柯里:不带波浪号,这句话是真是假?
拉蒂夫:假。因为二乘以任何数都不可能得到所有的数。
柯里:对。这条陈述根本上是在说,所有自然数都是偶数,都能被二整除,都是二的倍数,这显然不对。用特殊化规则,我们可以挑,比方说,三,抱歉,我们的系统里没有「三」,是 SSS0。通过解释可以看到,不存在一个 b 使得二乘以它等于三,因为三是奇数。而带上波浪号,也就是「非」,这条假陈述就变成真的了。
第二轮:∀c:~∃b:(SS0·b=c)。拉蒂夫以外的人回答。我要一个个把你们淘汰掉,最后站着的人拿最难的题。马克斯?
马克斯:对所有 c,不存在 b,使得二乘以 b 等于 c。
柯里:真假?你有一半的胜算。
马克斯:假。
柯里:对,是假的。取 c 为二,显然存在一个 b,就是一,使得二乘以一等于二。现在淘汰了两位。第三轮:∀c:∃b:~(SS0·b=c)。对所有 c,存在 b,使得二乘以 b 不等于 c。真还是假?
学生:假。
柯里:我认为其实是真的。这条陈述说,对每个数,都存在另一个数使得这个等式不成立。比方说四,你可以挑三,二乘以三不等于四,这正是它说的。我觉得波浪号放在前面很容易混淆,不如直接把它看成一个「≠」,容易得多。所以这条我认为是真的。
第四轮,说着说着我自己都绕晕了,这套记号确实笨重:~∃b:∀c:(SS0·b=c)。不是马克斯、不是拉蒂夫、不是德尔的人来。桑德拉?
桑德拉:不存在一个 b,使得对所有 c,二乘以 b 等于 c。
柯里:对。最容易的做法是先不管波浪号,考虑「存在一个 b,对所有 c 都成立」。就照写下来的样子,带波浪号,真还是假?
桑德拉:假?
柯里:等等,我写对了吗?先看不带波浪号的情形。我们有一个神奇的 b,不管放进什么数,那个数都是二与它的乘积。有没有这样一个数,使得任何数都等于二乘以它?举例,取 c 为三。
桑德拉:然后 b 取一。
柯里:对,我们找到了一个 c,就是三,使得二乘以一不等于它,所以不带波浪号是假的,带波浪号就是真的。很好。
学生:可是我们没有「一」。
柯里:不是没有一,在我们的记号里,一写作 S0,零的后继,就是这样写而已。很好,我就是想让大家试试这些题。
还有两道。前四位以外的人来。第五道:∃b:~∀c:(SS0·b=c)。
学生:存在一个 b,使得并非对所有 c,二乘以 b 等于 c。
柯里:给我一个真值判断。我们有这个 b,我们说对这个指定的 b,不管这里放什么都成立。或者说得更清楚一点,这涉及那一章里的一些符号搬运:存在一个 b,不管放进哪个 c,等式都不成立……你说是真还是假?
学生:真。
柯里:取三试试。我很确定这是真的,因为一旦固定 b,比如取四,显然并非对每个数,四乘以二都等于它,特别是对六就不成立。我没法放进任何数都让它对。还有问题吗?这条为真,大家都接受了?好。这些逻辑关系怪异而复杂,所以数学家大多数时候不用这些东西,因为会被符号绊倒,而他们脑子里早就知道自己做的是对的。
地方不够了,第六轮写在这上面,快点做完好交棒。∃b:∀c:~(SS0·b=c)。前五位以外的人,玛雅,给出解释和真值,如果你够勇敢的话。
玛雅:存在一个 b,使得对所有 c,二乘以 b 不等于 c。
柯里:对,等价地,可以把波浪号换成「≠」,这样更容易。存在一个 b,使得对所有 c,二乘以 b 不等于 c。真还是假?
玛雅:真。
柯里:存在一个 b,使得对所有 c,不管这里放什么……
玛雅:那就是假的。
柯里:对。在存在量词和全称量词之间来回翻转,真的会把人搞糊涂。这句话说的是,有一个 b,无论这里放什么,等式永远不成立。但这不对,因为你总能取到某个 c 让它成立。如果指定 b 为二,这个 b 是存在的,那么我们能找到一个 c,所以「对所有 c」不成立,具体说 c 取四,二乘以二等于四,尽管这条陈述声称我们挑的这个 b 不管放什么都不相等。
所以我的答案是:真、假、真、真、真、假。这也符合他的第二条提示:要么四真两假,要么四假两真,这与你怎么搬运波浪号有关。当然,除非你真打算当一辈子逻辑学家,否则不必花很多时间摆弄形式系统。但练习一下是好的,因为吸收这些新符号的困难,为它们在你的神经网络里腾出位置,我认为是重要的练习。这又回到意义理论。
柯里:这是我交给柯伦之前最后一件要道歉的事。当我说递归、形式系统、同构、算法信息、香农熵、神经网络这些词时,它们对你们的意义,和对一位多年熬夜、折磨自己去解决这些问题的教授的意义,并不相同。反复思考、犯错、再修正自己对某样东西的理解,这个过程会迫使你大脑里的某些部分在这里、这里、这里相遇。而我只是对着你们讲,我真正想做的,只是激起你们对我所讲内容的兴趣。我没法把七年的本科和研究生功课压缩进两小时的讲座,直接钻进你们的大脑,把这个神经元接到这里,那个接到那里,让你们立刻拥有塞斯·劳埃德或任何一位专家对这些学科的理解深度。两小时的讲座给不了这个,除非我布置成百上千页的习题,让你们一周做一百小时,但我不会那么干,因为我不邪恶。
除此之外,要抓住的一点是,我注意到自己老说「根本上」,尽量少说。重要的想法是:你可以从一组基本陈述出发,你认为它们捕捉到了某种真理,然后应用一条递归规则、一个递归算法去生成新的字符串,产生新的东西。进入今天下半场之前,我希望你们想着这棵我们试图培育的真理之树。它全都始于皮亚诺公理、数论,我们应用这些规则,造出不同的陈述,就像前一两讲里我们做的 MIU 树一样。我注意到没人来挑战我那二十块钱。
我们从侯世达列出的五条基本公理开始,他实际上是这样陈述的。谁来给出解释?「精灵是精灵」,也就是零是一个数;「每个精灵都有一个元,它也是精灵」,也就是每个数都有后继,后继也是数;「精灵不是任何精灵的元」,也就是零不是任何数的后继(这是第 216 页);「不同的精灵有不同的元」,也就是两个数不相等,它们的后继也不相等;最后,「如果精灵有 X,且每个精灵都把 X 传给它的元,那么所有精灵都有 X」,这是归纳原理:如果零有性质 P,且任何数都把性质 P 传给它的后继,那么所有数都有它,因为零传给一,一传给它的后继二,性质 P 一路传下去。数学归纳法就依赖于此。
从这些基本的东西出发,你实际上可以推出大部分数论。你只是应用这些推理规则、归纳规则,从树干出发,得到一条新定理:既然一和二不相等,那么二和三也不相等。你就这样按照规则往树上添东西,完全是局部的,完全取决于你当下手里有什么、愿意应用哪条规则。然后涌现出的模式惊人,我们今天恰好把它叫做数论。你们马上会看到一些更有趣的东西。我们休息两分钟,放松一下,然后交给柯伦。
凯莱赫:他刚才讲的东西,也可以叫上下文无关文法(context free grammar)。上下文无关文法由符号和产生式规则组成。这里的符号是 S、0 以及各种数学运算符,从文法的角度看它们只是符号;产生式规则就是推理规则,你取一个字符串,对它的一部分做操作,得到新字符串。用类似的系统,可以定义如何在屏幕上移动圆圈。
我来解释一下。这个程序叫 Context Free,是开源项目,你们可以下载自己玩。代码里,「startshape」只是入口,不会变。我们定义一条叫「spiral」的规则,规则里有「CIRCLE」,在屏幕上画一个圆,然后再次调用 spiral。「y 2」表示每次把 y 坐标加两个单位,「size 0.9」表示每次往上走时把尺寸乘以 0.9。这条规则定义了这幅图。程序的做法是,当图形小到看不见,就停下来。所以这其实是无限递归,只是到某一点因为太小而停止。这是我们的框架,一点点改动代码,我们会得到一些惊人的图像。我边改边解释。
刚才间距是二,所以看得清是在画圆。我把间距减到 0.4,渲染,就成了这样。现在我再定义一条规则,也叫 spiral。这门语言的特性是,定义两条同名规则时,每次调用这个名字,就以相等的概率调用其中一条。先在这之前加一个旋转,「rotate 1」,每次旋转一度。你看它转了一点。如果每次尺寸乘以 0.99,缩小得慢一些,就看到螺旋出现了;乘以 0.999,螺旋更明显。就是这样,不知道为什么跑出屏幕了。
现在定义第二条 spiral 规则,「flip 90」,翻转九十度。渲染之后你们觉得会发生什么?也许我没说清 flip 是什么意思。「rotate 1」是往这个方向转一度,而调用 flip 之后,再「rotate 1」就往相反方向转。假设先调用第一条规则五次,画五个圆,然后调用第二条规则一次,翻转,再调用第一条五次,它就会往另一边转一点。两条规则一开始是等概率调用的。渲染出来就是这种蜿蜒的东西:一半时间调用第一条规则,把圆往上挪一点、旋转、缩小、画圆;另一半时间调用第二条规则,翻转旋转方向。
这门语言的另一个特性是可以改变调用概率。在第二条 spiral 规则,也就是翻转规则旁边写 0.1。不写数字默认是一,所以第一条规则的权重是一,第二条是 0.1。
学生:那是不是意味着第一条的概率是一减去那个数?因为掷骰子的话,概率不能超过一。
凯莱赫:说到概率,我想它实际做的是先求和,再取每条规则占总和的比例。不管怎样,第二条现在的概率低于一半。可以看到它连续迭代更长时间而不翻转。再减到 0.01,翻转得更少。0.001,翻转就少得多了。这么简单的规则、简单的上下文无关文法,已经生成了非常酷的图像。到目前为止有问题吗?
如果我在第二条规则里再加一个不带翻转的 spiral 调用,这意味着什么?
学生:先翻转,然后照原来的方向继续。
凯莱赫:差不多,她说先翻转,然后不翻转地继续下去。有了这条规则,它不只是翻转,而是让一支沿着切线方向出发,同时原来的那支也不翻转地继续走。渲染看看,正是这样:每次分岔时,它也继续沿原方向走。
调一调参数,就能得到一些看起来有机的形态。如果增加分岔概率,它就失控了,也许这不是我们想要的。放回去,把尺寸乘以 0.99,好了,现在增加分岔概率,就得到这些树。看,像树一样,太疯狂了。分岔概率再增加,树更茂密,因为分岔更多。是不是很酷?
这让人不禁想:大自然生长植物时,用的是这种上下文无关文法,还是林登迈尔系统那样的固定全局规则,在越来越小的尺度上反复应用?我想自然界看到的是两者的混合,因为有些植物特征非常规则,有些则不然。植物仍然是个谜。但这看起来相当有机,我对此惊叹不已。我可以摆弄参数,得到非常酷的生长形态。
把它当作植物发育的模型来看:我们模拟的是植物尺寸不断缩小,分岔时质量翻倍,这个模型有点糟。想想一棵树,它一直往上长,分岔时主干继续往上,而枝条往旁边伸出去。我们可以改文法来做到这一点,得到更像树的东西。上面这条规则是「一直走」时执行的,我把它改成只增加 y;另外两条里,一条直着走,另一条分岔并变小。直着走的尺寸取 0.9。至于 flip 在这里做什么,我稍后解释。分岔那条写「rotate 45」,尺寸 0.3。得到的是很稀疏的结构。把分岔概率提高到 0.2,就得到这些看起来像树的东西。
我再解释一遍规则,以防有人没跟上。这条规则里的第一个 spiral 编码的是:每次分岔时,尺寸按 0.9 缩小一点,然后形成分支;第二条规则里的「size 0.3」表示分支的尺寸是原主干的 0.3;「flip 90」表示下一次分岔往相反方向伸。可以把 flip 去掉,去掉之后所有分支都朝同一个方向。看,它们只往一个方向长。再玩玩参数,比如 0.95,看看会怎样。得到一些很有趣的东西。把分支稍微加粗,比如 0.4,看,像一棵树。有问题或评论吗?
如果在主规则里加一点旋转,「rotate 1」。拉蒂夫?
拉蒂夫:它在内部调用自己的时候,调用的是正在执行的那条,还是另一条?
凯莱赫:好问题。他问,规则内部调用 spiral 时,调用的是上面这条还是下面这条。这正是概率起作用的地方。spiral 内部有三处调用 spiral,每次都按一定概率调用其中一条。第一条的概率是 1 除以 1.2,很高;第二条是 0.2 除以 1.2。每次从任何地方调用它,都会进入程序问「我该调用哪一条」,程序按这些概率分配。
拉蒂夫:那放在哪里有区别吗?如果把带 flip 90 的那个 spiral 挪到上面那条规则里呢?
凯莱赫:你是说,把这个从这里拿出来放到上面?可以试试,我不知道会怎样。它必须放在某个函数里,才能调用自己。
柯里:我想这里的意思是你有两个选项:要么执行简单的 spiral 画圆例程,要么执行另一条 spiral 例程,旋转 45 度、尺寸变为 0.4,而不是翻转 90 度、尺寸变为 0.95。我不完全清楚算法怎么实现的,但我认为底下的 spiral 旁边写 0.2,意味着上面那条只以 0.8 的概率调用,显然比 0.2 高得多。计算机每次掷骰子,都在决定执行上面的 spiral 还是下面的,然后每条 spiral 的内容决定了你看到的行为。
凯莱赫:我们刚才把它挪上去之后,每次调用 spiral 都会分岔,因为现在有两个 spiral,而那一条的概率非常高,等于几乎每次都在分岔,于是得到一团乱麻,而且永远算不完。这个系统有各种有趣的模式。我把它放回原处,还在计算……好了,停了。
看起来很疯狂吧?去掉那个旋转,就变得非常规则,是一种规整的结构。可以改角度,60 度,或者 90 度,看起来像道路?
学生:像河边或湖边的树,你能看到像是河流。
凯莱赫:你是说像一条河,带着许多小支流从它分出去?这种结构在自然界随处可见,太惊人了。如果在往前走的主规则里加一点旋转,「rotate 1」,就得到这种脉络状的东西。
学生:像风吹着树。
凯莱赫:对,风吹着树的时候。或者很像藤蔓爬墙,或者植物的根,地下的根就长这样。
学生:能用这个做科赫雪花,或者你之前展示的那棵分岔树吗?
凯莱赫:我没试过,也许可以,但我觉得不行。这个程序的行为是完全随机的,它是随机过程(stochastic),临场决定执行哪条规则。它仍然是递归的,完全递归,但不是确定性的。确定性赋予科赫雪花或者我之前展示的那棵分岔树那种绝对刚性的规则性;而这里规则是随机执行的,所以得到的是不规则的分形。
柯里:不过谢尔宾斯基垫片也可以用掷骰子随机生成。
凯莱赫:对。
柯里:取三个点,随机扔一枚飞镖,然后……取到最近顶点的距离,把那个点填上?我记不清了。
凯莱赫:混沌游戏(chaos game)。用谢尔宾斯基三角形玩混沌游戏是这样的,我之前讲过,再快速讲一遍:有三个点,从某个位置出发,随机选三个点之一,从你所在的位置走到那个点的一半。比方说选了这个点,走一半;再选它,再走一半;然后选那个点,从这里走到那里的一半。这样做一千次之后,得到的所有点,在极限下,如果做无穷多次,就是谢尔宾斯基垫片。做一会儿之后就开始像谢尔宾斯基垫片了。所以这是随机的。也许我可以用这门语言写出来,也许可以,我没试过。
凯莱赫:我准备了一些现成的例子。我想谈的一件事是这个系统里的稳定区与不稳定区,它是一个非常动态的系统,会出现不同的局面。看这个……等等,那是 PNG,不是程序本身,打开真正的那个。
这里是怎么回事?我有这几条规则,前两条和刚才的类似,为了讲解先把第三条去掉。这挺酷的,是棵树。第一条规则前进一个单位,圆的大小也是一,所以能看到所有的小圆;前进一步,尺寸乘以 0.99,这是主规则。另一条规则的概率是 0.02 除以 1.02,是分岔规则,它再次调用 tree,旋转正 20 度或负 20 度。这就是我们的规则,它生成了这棵树。
现在加上第三条规则,它把尺寸乘以五,相当极端,但发生的概率很小。我把概率再降低,0.003,或者 0.01。它只发生了几次。可以看到通常不发生,所有这些分岔和迭代里都没发生,但在这一处,尺寸乘了五,出现一个更大的圆,然后继续传播下去;在这根末梢又发生了一次,然后又一次。
这个模式实际上也出现在演化里,非常迷人。演化中有各种物种,或者说不同的基因组谱系,它们分岔、扩散。在某个时间点,时间就是总迭代次数,假设地球上发生了一次巨大的灾变,只有这一种生物或一小群生物幸存下来,它们的权重骤然增加,随后繁衍扩散,我们就得到演化的一次新的分岔。然后同样的事在这里再次发生,砰,再分岔,再分岔。这是一个非常不稳定、不可预测的系统,因为这些小事件可以彻底改变系统的面貌。没有这条新规则时,它是稳定的:我们知道尺寸总会越来越小,直到消失,这在极限下是有保证的。但引入一条往回走的规则,系统就变得不稳定、不可预测得多。如果把这条规则的概率提高到 0.1,系统很快就失控;0.01 也一样,越来越大,直到出现这条报错信息:「图形太大」。这就是系统失控时的报错。
柯里:这几乎相当于陨石频繁砸向地球,每次只有极少数物种幸存。
凯莱赫:对,可以这么对应。
柯里:以更高的频率摧毁遗传多样性。
凯莱赫:如果回到演化的比喻,大概对应于巨大的灾变不断发生,而每次都奇迹般地有一个物种幸存,比喻有点极端,我不确定是否真的成立,但这个参数空间里的稳定区与不稳定区很有意思。再看几个例子我就结束。这棵粗树:在某些参数组合下,我们得到非常有机的形态;如果进一步提高分岔概率,就得到这些漂亮的、粗壮的、有机的树。
学生:生物真的用这种系统来生存吗?如果有的生物有这种系统、有的没有,有它的是不是在演化上更有优势?
凯莱赫:她是从一个完全不同的角度问:对一个给定的生物,发展出这种递归系统,在演化上是否更有利?我认为对植物来说,这是植物发展出来的主要东西之一,使它们在演化意义上更可行、更适应。这也许是个值得考虑的要点。
柯里:不过,究竟是什么让一棵树那样弯?假设这是个相对平静的地方,没有飓风级的大风把树吹弯,还有什么原因会让树那样长?
学生:阳光。
柯里:对,阳光,向光性(phototaxis)。植物有一套反馈机制,能感知光。就像我在这里放一盆植物,角落里那盏灯照着我们,植物实际上能动态地改变分岔的概率。当然机制有点不一样,是生长素在交换,细胞壁塌陷,树能很快朝另一个方向生长弯曲。所以这不单是一个概率性的上下文无关文法,它必须有某种反馈机制,再往上,演化还会改变规则本身。
凯莱赫:对。看看这些「叶枝」的数量,我说叶枝,指的是末端的那些,有这么多,它把照到的阳光最大化,把树的表面积最大化。我想这是它更适应的主要原因之一。你有问题?
学生:只是个评论。这也说得通,你说的表面积,在底部长分支没有任何意义,因为光已经被上面挡住了。
凯莱赫:对,如果有某种突变让树在底部长出分支,那棵树不会有任何优势。你说的是选择:如果有一棵树的规则让它在底部和顶部都分岔,它会被选择淘汰,因为光被上面的枝条挡住了,不可行。这就是演化的本性。
学生:这看起来也像大脑,上面是大脑皮层,底下是连接。
凯莱赫:他说这像大脑,这是大脑皮层,这些连接延伸到大脑表面,那里布满了脑细胞。
学生:或者血管结构。
凯莱赫:对,血管,从心脏出来的血管结构,分形般地铺满全身。这是一种到处都出现的普适形态,太惊人了。我们能做的只是惊叹:哇,它们都一样。但它从哪来?意味着什么?我不知道,这需要探索。
学生:会不会是它必须如此?
凯莱赫:什么意思?
学生:可以说它是最高效的算法,而演化偏向效率,所以到某个时候必然撞上这个算法,一旦得到好东西,就不会放手。
凯莱赫:你说的是整个生物系统、一切事物的演化。他说,也许这是唯一行得通的东西,它必然存在,因为它是发展我们的生物构造最高效的算法,一旦出现,就在这一长串演化事件中扎了根。我认为你说得对。而且它可以编码成一组非常简单的规则,看,这么少的文本就编码了这一切。我想我们的基因组也类似,如果演化范式找到了一种高效的方式,把一组规则编码起来,做一件让我们更适应的事,它就会留下来。分形和递归算法被编码进我们的基因组,我认为这是一个合理的假说。
学生:行为也是,比如蚂蚁,蚁群。
凯莱赫:对,天哪,无处不在,涌现性质。我讲完了,交回给贾斯汀。
柯里:我来收个尾,给大家一点结论感和方向感。请把投影关掉。柯伦刚才暗示的想法,我们正站在它的边缘,也是我开课时就告诉大家的《哥德尔、埃舍尔、巴赫》的明确论题:宇宙在根本层面上是一个形式系统,遵循某些确定性的规则,或者也许是概率性的规则,但无论如何是一个形式系统。我们有「我」这个标签,往一样东西上一贴,实际上遮住了大量细节。以根本的方式理解这些,是这门课的既定目标。
我还在斟酌,因为我在持续地、概率性地修改这门课的走向。目前的计划是:讲完无门与哥德尔,你们会从柯伦和我这里领教一种怪异的东方风味,把禅与逻辑合在一起,最后讲哥德尔不完全性定理。然后我们跳到书里靠后的第十六章,「自指与自复制」,那一章有点过头,首先它很长,57 页,但它有一个「排版遗传学」的想法,我们会看遗传、蛋白质折叠这些造就我们的过程,如何以规定的方式对应于我们讨论过的形式系统。之后再往回跳。我意识到这门课已经变成一门专题课,接下来本质上讲大脑与思维。底线是,侯世达的思想并没有一路打通,否则问题早就解决了,我们就能说「太好了,意识解决了,去干别的吧」。它没有解决,中间有巨大的缺口:好吧,也许我接受宇宙是一个形式系统,但哥德尔不完全性定理对物理系统到底能说什么?我们先把那些放下,谈大脑、大脑中的元结构、心智、思考、人工智能,以此结束课程。
当然我也在考虑放一部电影,《半梦半醒的人生》(Waking Life),不知道你们有没有看过,算是我送给大家的礼物,感谢你们在这门课上的努力,不过可能需要家长同意书,之后再说。今天讲得节奏有些慢,抱歉,希望下一讲更精彩。请阅读无门与哥德尔那一章。我本来打算今天做那一章前面的对话,显然来不及了,下次可以做。还有《我是个怪圈》的讲义也请读一下,下一讲我有很大一部分会从那里讲起。谢谢大家来,祝好。
这节课先对上一讲"宇宙是分形"之类的过度推演做了澄清和"降温",然后通过 TNT(类型化数论)的公理、ω-不完全性和量词练习说明"从少量公理递归生成真理树"的思想,最后用 Context Free 软件演示随机上下文无关文法如何用几行规则生成树、根系、河流般的有机形态,并引申到进化和生物形态的类比。
因为 TNT 编码的对象是我们自认为有所了解的东西——自然数及其性质,而 MIU 和 pq 系统只是无明确外部指涉的符号游戏。讲者在开场回顾(第 1 段)指出,TNT 让人看到:从几条公理种子出发、反复应用递归规则,就能生成一整张字符串之网,这些字符串经解释后恰好是关于数的真命题。这正是布置这一章的目的——熟悉记号,并体会「公理+递归规则→真理之树」的思想,尽管大家读起来并不愉快。
讲者提出「模式(pattern)本身即美,且是意义中唯一普适的成分」。在第 6–10 段的讨论中,学生 Latif 认为外星人只会听到噪音,Max 指出前提是外星人有听觉;讲者逐步授予假设后,承认人声歌词、钢琴等文化知识无法传递,但坚持即便剥离个体语义网络,音乐中的模式仍可被任何智能体探测,且可用数学描述。这把上一讲的「意义即同构」推进为「意义的核心是可被数学化的结构」。
讲者用 DNA 作反例。第 12 段中学生 Li 提出,语言呈现相同结构是因为人脑只能处理这些;讲者回应说,人们对 DNA 序列做过同样的频率分析,DNA 作为一种「语言」也呈现出相同的模式(如齐普夫式的幂律分布),而 DNA 显然不是人脑创造的。因此这些统计规律不是人类认知的副产品,而是更普遍的信息组织方式,这也为后文「模式是普适的」提供了经验支持。
香农熵只度量比特串的统计不确定性,不度量结构。第 14 段指出,把一幅随机噪点图和一幅谢尔宾斯基三角图都转成 0/1 串后做熵分析,两者的数值可能相差无几,尽管后者有明显规律和「意义」。这一局限引出了算法信息(Kolmogorov 复杂度):谢尔宾斯基三角可用几行 L-system 代码生成,其「最短描述」极短,而噪点无法压缩。讲者进一步把这推广为科学的本质——用最短的方程(如单摆方程 θ̈)编码现象的规律,即「科学就是逆向工程/压缩」。
讲者担心上一讲被课堂气氛带动,向学生灌输了「令人兴奋但缺乏根据」的想法,最典型的是「宇宙是分形」。第 20–22 段中他明确指出:科学界大多数人会否定这一说法,因为原子并非微缩太阳系——量子力学的概率云与经典力学的行星轨道完全不同,规则不跨尺度重复。更严谨的表述是某些方程是「无标度的」(scale-free),如流体力学中手指划水与山峰绕云都产生冯·卡门涡街。他借此确立课程方法论:可以天马行空,但最终必须落到证明或可运行程序上,且必须具备可证伪性。
ω-不完全指 TNT 能逐一证明 0+0=0、0+S0=S0、0+SS0=SS0……这无穷多个具体命题,却无法证明「对所有 a,0+a=a」这条概括命题,除非把归纳原理作为公理加入(第 25–26 段)。0.999…=1 的例子(第 27–28 段)则展示同学「这不可能」的震惊反应。两者的共同点是揭示「心智模型」与「形式系统」之间的落差:我们直觉上认为显然的事,形式系统未必能推出;我们自以为理解的对象(实数),也会在最基础处颠覆直觉。讲者由此说明形式化的价值——它检验我们的定义是否真的涵盖了我们想要的东西。
教训是「解释」(interpretation)是危险的,应严守形式体系。第 29–31 段回顾:欧几里得认为公理是自明真理且涵盖全部几何知识;但萨凯里、高斯等人发现打破第五公设(平行公设)后可得到自洽的非欧几何,例如球面上以大圆为「直线」时任意两条都相交。希尔伯特由此主张公理只规定点、线之间的逻辑关系,一旦把「线」解释为平板上的直线而非球面上的曲线,就会出错。讲者称赞侯世达在书中同样警告读者不要急于解释形式符号,这与 TNT 练习中「量词顺序不同意义完全不同」的困难相呼应。
在带 flip 90 的第二条 spiral 规则中,额外加入一个不带翻转的 spiral 调用(第 52 段)。原本翻转规则只是改变旋转方向,加上这一行后,每次触发时一支沿切线岔出、另一支继续原方向,于是曲线变成了分叉的树。这说明极少的规则改动能带来形态上的质变,也直观展示了「简单递归规则→复杂有机形态」的主题。后续通过调整分叉概率(0.1→0.5)、缩放比(0.9/0.3)、角度(45°/60°/90°)与旋转,同一套文法被学生联想为树、河流、藤蔓、根系、血管与大脑皮层。
他类比的是大灭绝事件后少数幸存谱系的辐射扩散(第 64–67 段)。正常规则中 size 恒小于 1,系统必然收敛;「size 5」以极小概率把某分支放大 5 倍,相当于某个物种在灾变后突然获得巨大「权重」并大量繁殖分化。放大概率为 0.003 时系统偶有爆发但整体稳定;调到 0.01 时形状不断增大直至程序报错「shape got too big」,相当于陨石频繁撞击、遗传多样性被反复摧毁。这展示了参数空间中的稳定区与不稳定区——微小参数变化导致系统行为质变,是动力系统中分岔现象的直观例子。
讲者实际上已经主动承认了这一点。第 68–69 段中 Justin 引导学生说出「阳光」,并解释植物具有向光性(他误说为 phototaxis):通过生长素(auxin)的分布使背光侧细胞伸长,树能动态改变分叉方向和概率。他明确说「这不完全只是一个概率性的上下文无关文法,它必须有某种反馈机制」,而且演化层面还会改写规则本身。因此讲者的立场并非「树就是随机文法」,而是「随机文法抓住了分枝形态的生成逻辑,真实生物在此基础上叠加了环境反馈与自然选择」。学生随后补充:底部分枝会被遮光而被选择淘汰,这正是规则本身被演化筛选的例子。
讲者认为不完整,并在第 73–74 段坦率承认。他指出全书主旨是宇宙在根本层面是一个(确定性或概率性的)形式系统,「我」只是掩盖了大量底层细节的标签;但侯世达的思路「并未贯通」,否则意识问题早已解决。具体空白在于:即便接受宇宙是形式系统,哥德尔不完备定理对物理系统究竟意味着什么,从形式系统到大脑、心智的过渡缺乏严格论证。这与本讲反复强调的「可证伪性」「必须落到证明或程序」的标准一致——讲者把 GEB 当作激发思考的框架而非已证成的理论。启示是:读 GEB 时应区分「有严格基础的部分」(TNT、不完备定理、递归生成)与「类比性的推广」(宇宙分形、意识即怪圈),后者需要保持批判性。