0先把规则说清楚
生命游戏没有玩家。你在一张无限大的方格纸上涂几个格子,剩下的事情全部由一条规则决定。每个格子有八个邻居(上下左右加四个斜角),下一代由每个格子当前有几个活着的邻居算出来:
一个死格子,如果恰好有 3 个活邻居,下一代就活过来;一个活格子,如果有 2 个或 3 个活邻居,下一代继续活着,否则死掉。
这条规则通常写成 B3/S23:B 是 born(出生),S 是 survive(存活),后面的数字是所需的活邻居个数。整条规则只有这么多。
关键在于所有格子同时更新。算下一代时读到的全是当前这一代的状态,不存在先算左边再算右边的次序问题。下面这个例子最能说明:一条四格长的横线,两端因为邻居太少而死,中间两格活下来,同时上下各有位置凑够 3 个邻居而诞生新细胞,几步之后定格成一个叫“蜂巢”的小方块。
下面每个窗口默认都是暂停的:点速度按钮开始跑,单步一次走一代,重置回到初始状态。场地放大 / 缩小改变的是格子的行列数,也就是这块地本身有多大——画面里画出来的就是全部,边界之外没有隐藏空间,跑出去的东西会撞在边框上。看长时间演化(玛土撒拉、枪、开关引擎)之前,记得先把场地放大几次。
1.1三条路,先走最笨的那条
要在生命游戏里造出行为有趣的东西,一共只有三条路:写程序去搜、把已知的零件拼起来、撒一把随机垃圾看能长出什么。
第一条路要花不少力气,而且你得先知道自己在找什么;第二条路更是无从谈起——手上一个零件都没有,拼什么?所以只剩下第三条,也是最不动脑子的一条:随手撒,然后等它烧完,看灰烬里剩下什么。
这不只是教学上的权宜之计,也是历史的真实走法。生命游戏头一两年里被发现的图样,绝大多数就是这么撞出来的。这类随机的初始图样有个专门的叫法——汤(soup),而它安定之后留下的东西叫灰烬(ash),取的是“烧完之后剩下的”这个意思。
下面第一锅汤跑 116 代就安定了,灰烬里已经能看到蜂巢、几个别的静物、一个会转的小东西,还有一架自己飞走的小玩意。
那么换一锅汤会怎样?这里要小心一个很容易产生的错觉。下面这个图样并不是另外随手撒的一把,它就是上面那锅汤,只把其中一个活细胞改成了死的。
结果是:安定时间从 116 代变成 2901 代,最终灰烬的活细胞数是原来的二十多倍,而且冒出了池塘、舰、面包三种上一锅里根本没有的静物。改一个格子,整场演化就面目全非。这就是这个系统“混沌”的确切含义——不是“看起来很乱”,而是对初始条件的极端敏感。
1.1b灰烬里的三类居民
多烧几锅汤,把剩下的东西分类,会发现它们干净地落进三个筐。
静物每一代都和上一代一模一样。方块、盆、船、舰、蜂巢、面包、池塘都属于这类,是灰烬里最常见的成分。
振荡器在有限多个形态之间循环,转一圈所需的代数叫它的周期,中途经过的每个形态叫一个相位。闪灯是最常见的一个,周期 2。脉冲星周期 3,块头不小却经常自然出现。十五格棒的周期高达 15,而且它在一个周期里会明显地胀缩变形——这个特性后面会变得很有用。
飞船转一圈之后变回自己的形状,但位置挪了。滑翔机沿对角线走;轻量级飞船每 4 代正交前进 2 格,所以速度记作 c/2。这里的 c 是生命游戏的“光速”:信息每代最多传播一格,因为一个格子只能影响到它的八个邻居,任何东西都不可能比这更快。
值得一提的是,几十年的大规模搜索至今只在自然灰烬里见过四种飞船——滑翔机和轻、中、重三型。飞船是三类居民里最稀有的。
1.2常见的爆炸:不看结局,看过程
光看安定后的灰烬,能学到的东西有限。换个角度:盯住演化过程中反复出现的那些不稳定的东西。它们才是推动整场演化的引擎。
最典型的是 T 型四联骨牌,四个格子,9 代之后炸成四个闪灯围成的“红绿灯”。随机汤的灰烬里闪灯常常成组出现,原因就是这个反应太常见了。
T 型四联骨牌还顺带演示了一件很漂亮的事:对称性会自己长出来,而且一旦长出来就再也回不去。它一开始只有左右对称,三代之后多出上下对称,再走一代连对角线对称都有了。因为规则本身不区分方向,已经形成的对称永远不可能被打破——这也解释了为什么生命游戏里那么多重要图样都是对称的。
类似的还有几个:前蜂巢农场17 代摊开成四个蜂巢;阶梯六联骨牌63 代安定成四个方块(这段冗长的演化和它中途的各种形态被统称为“烂泥块”);π 型七联骨牌则最有意思——它 30 代能前进 9 格,可惜拖在身后的残骸会挡死它。这个“能走但会被自己的垃圾害死”的模式,后面会反复出现,而解决办法也总是同一个。
1.3蜂后:把崩溃接住,造出第一台机器
蜂后是个半成品:它每 15 代把自己反射一次,同时在原地留下一个蜂巢。反射两次、也就是 30 代之后,它回到出发点,两侧各多了一个蜂巢——然后它就撞上自己造的蜂巢,炸了。
接下来是本章、也是整本书最核心的一招:既然它总是以同样的方式崩溃,那就在崩溃的地方摆个东西把崩溃接住。方块正好能干这个活——把方块贴着蜂巢放,7 代之内蜂巢被吃掉,方块自己毫发无损。
把这两个反应拼起来:蜂后向右造一个蜂巢并被反射向左,方块吃掉它;蜂后向左再造一个并被反射向右,另一个方块吃掉它;然后从头再来。于是得到一个周期 30的振荡器,叫蜂后穿梭机。
这是本章第一个造出来的而非捡到的东西。区别很重要:前面所有图样都是从随机汤里捞出来的,而这一个是把两个观察到的反应有意识地拼在一起得到的。本书剩下的十一章,走的全是这条路——把简单反应拼成复杂零件,再把复杂零件拼成更复杂的东西,如此叠加上去。
1.3b第一把枪,和康威的五十美元
1970 年,康威悬赏 50 美元征集一个能让活细胞数无限增长的图样。当时这是个真正的未解问题:已知图样要么安定,要么就那么大点。
Bill Gosper 在 1970 年 11 月赢走了这笔钱,而答案就藏在蜂后里。把两个蜂后面对面精确摆好、时机掐准,它们会互相弹开,而且这一次碰撞的产物不再是蜂巢,而是一架滑翔机。再在两个蜂后的外侧各放上稳定用的方块,整台机器就完工了。
它本体周期 30、大小不变,却源源不断地把滑翔机送向远方,活细胞总数因此永远涨下去。这就是 Gosper 滑翔机枪——**第一个无限增长图样,也是第一把枪**。“枪”在生命游戏里有确切含义:本体周期性地回到原样,同时不断吐出飞船。
它的意义远不止赢一笔奖金。有了枪就有了可以持续发送的信号,而有了信号,才谈得上在这个棋盘上造逻辑门、造计算机。后面几章会大量用到它。
1.4双蜂:同一套路再来一遍
B 型七联骨牌是灰烬里的常客,行为和 π 型七联骨牌很像:10 代前进 5 格,颇有飞船的架势,然后被自己拖出的垃圾杀死。
要稳定它比稳定蜂后麻烦些,好在大自然帮了一半忙:B 型七联骨牌偶尔会成对出现,这种组合叫双蜂。成对之后它们活得更久,而且和蜂后一样会把自己反射——不过周期是 23 代而不是 15。区别在于双蜂撑不到第二次反射,留下的烂摊子会先把它炸掉。
照抄蜂后那一招:摆两个方块把残骸吃掉(5 代清干净),左右各来一次,23 + 23 = 46,得到周期 46 的双蜂穿梭机。再照抄一次 Gosper 的思路,让两对双蜂对撞,就得到了周期 46 的双蜂枪。
为什么要费劲搞出第二套?因为周期不同。蜂后这条线只能给出周期 30 的东西,而很多后续构造需要别的周期,双蜂这条线正好补上。它是后来大量高周期枪的地基。
1.5开关引擎:另一种无限增长
枪靠不断发射飞船实现无限增长。还有一条完全不同的路:让一个东西一边爬一边沿途铺垃圾。
开关引擎就是这样的东西,只有八个活细胞。和蜂后、双蜂一样,它会留下残骸并在之后重现(48 代一次);但关键差别是它不回原位——每重现一次它就离出发点更远,行为上更接近一艘飞船。
单独一台仍然会被自己的垃圾毁掉。但只要把两台摆在合适的相对位置,或者给它配上恰当的尾巴,它就能一路爬下去,身后留下一串方块,或者不断甩出滑翔机。由两台开关引擎互相稳定构成的经典组合,叫做方舟。
它有个特别的地方值得记一笔:开关引擎小到可以从随机汤里自然冒出来。这意味着即使没有任何人设计,无限增长在一锅乱麻里也是可能自发发生的。
1.6玛土撒拉:极小的种子,极长的一生
还有一类图样既不无限增长,也不很快安定,而是用极少的细胞撑出极长的寿命。它们叫玛土撒拉,名字来自圣经里那位活了九百多岁的老人。
最著名的是 R 型五联骨牌:五个细胞,折腾 1103 代才安定,途中甩出六架滑翔机,最后留下 116 个细胞。五个格子引出上千代的演化,这是“简单规则产生复杂行为”最直观的证据。
放宽到十几个细胞,寿命会爆炸式增长:有的能撑五万代,有的跑掉七十多万代。这类图样很占地方——它们会摊得很开,还会往外甩滑翔机,所以观察之前先把场地放大几次,否则东西一撞到边框就没了。
1.7反过来问:这一代是从哪来的
前面所有问题都是“给定现在,未来如何”。规则是确定的,未来只有一个。反过来问就完全不同了:给定现在,上一代可能是什么?
第一个答案是不唯一。同一个方块可以由许多种不同的上一代产生,所以生命游戏不可逆——你没法从当前画面倒推出唯一的历史。
第二个答案更有意思:有些图样根本没有上一代。它们只能作为第 0 代被人手动摆出来,永远不可能在任何演化过程中出现。这类图样叫伊甸园。
它们必然存在,而且证明很简洁
直觉一句话就够:方块这类图样的父辈太多了,父辈不够分。
严格版本是个计数论证。取一块 $6n \times 6n$ 的区域,注意下一代中央那块 $(6n-2) \times (6n-2)$ 的内容只由这块区域决定(信息一代最多传一格)。中央区域能填出 $2^{(6n-2)^2}$ 种不同图样,这是“需求”。
再算“供给”:把 $6n \times 6n$ 切成 $n^2$ 个 $6 \times 6$ 的瓦片,每个瓦片本来有 $2^{36}$ 种可能。关键的一步是:存在两个 $6\times6$ 瓦片,一个中心放方块、一个中心放预方块,它们无论周围摆什么都演化成完全相同的结果。既然可以互换而不影响任何事,枚举下一代时瓦片就只需要算 $2^{36}-1$ 种,于是下一代最多只有 $(2^{36}-1)^{n^2}$ 种。
剩下的是比大小:只要 $(2^{36}-1)^{n^2} < 2^{(6n-2)^2}$,供给就覆盖不了需求,必然有图样没有父辈。两边开 $n^2$ 次方,化成 $2^{36}-1 < 2^{(6-2/n)^2}$,$n$ 足够大时右边任意接近 $2^{36}$,成立。
那个减一,看着微不足道,其实是全部
这里值得停一下。如果没有那个 $-1$,供给就是 $(2^{36})^{n^2} = 2^{36n^2}$,而需求是 $2^{36n^2-24n+4}$,供给比需求大了 $2^{24n-4}$ 倍——不是勉强够用,是指数级碾压,鸽笼原理根本无从谈起。那个顺差的来源很直观:中央区域每边窄了 2 格,少掉的一圈边框正好 $24n-4$ 个格子,边界效应天生站在供给这一边。
而 $\log_2(2^{36}-1)$ 只比 36 小了大约 $2.1 \times 10^{-11}$,小得离谱。但它乘的是 $n^2$,而边界顺差只有 $n$ 的量级。于是胜负条件变成 $\epsilon n^2 > 24n-4$:左边二次、右边一次,二次项终将碾压一次项。解出来临界值在 $n \approx 1.14 \times 10^{12}$,这正是前面说的那个 $10^{12}$ 量级的由来。
所以整个证明其实是两个增长阶数的赛跑:边界效应帮供给,规模 $O(n)$;信息丢失帮需求,因为每个瓦片都损失一次而瓦片有 $n^2$ 个,规模 $O(n^2)$。把区域放大,后者必胜。这也让“信息丢失是本质条件”变得很具体——若连一对等价瓦片都找不到,$\epsilon$ 就是 0,不等式永远不成立,证明彻底失效。
这个论证有个漂亮的推广性:它对任何存在“两个不同的有限图样演化到同一结果”的元胞自动机都成立。方块和预方块只是最好写的一对,换成别的也行——比如一个孤零零的活细胞和一张空棋盘,两者一步之后都变成空棋盘。
但证明不告诉你它长什么样
这个证明是非构造性的。它保证足够大的区域里一定有伊甸园,可是让不等式成立的最小 $n$ 大约在 $10^{12}$ 量级,而且它也不告诉你该往哪儿找。
真正造出一个,用的是另一套办法,而且这套办法是人想出来的、可以一步步讲清楚的:一次加一个格子,每次都选让父辈数量更少的那个状态。
从一个格子开始。它周围 $3\times3$ 的 512 种配置里,372 种让中心变死、140 种让中心变活——那就选“活”,因为父辈更少。第二个格子挨着放,在保证第一个格子为活的 1120 种配置里,703 种让它死、417 种让它活——还是选“活”。然后沿顺时针螺旋一路往外,每加一格都这么二选一。
这个过程一开始完全不像会成功:前 40 个格子全被选成活的,父辈数量反而暴涨到四百多万。但继续下去,父辈数开始塌缩,到第 266 个格子时归零,伊甸园就造出来了。
孤儿,以及“最小”能到多小
顺着这条线还能定义一个更强的东西:孤儿(orphan,这个词是康威起的)。孤儿是指无论周围填什么都仍然没有父辈的图样。含有孤儿的图样必然是伊甸园,而反过来也成立——每个伊甸园都含有一个孤儿。上面那个存在性证明,实际证出来的正是孤儿。
接下来自然要问最小能到多小。目前的记录按三种口径各有一个保持者(活细胞数、孤儿大小、边界框面积),列在下面。这些记录的“确实是孤儿”这件事,是靠专门的计算机程序核验的,不是纸上推的。
下界这边,人类扳回一城
另一个方向是问:孤儿最小不可能到多小。这边既有机器结果也有人类证明。穷举搜索确认了 $6\times7$ 的框内不存在孤儿;而高度为 1 的伊甸园不存在,是可以手写证明的,同样的技术还能推到高度 2 和 3。
另一边,高度 5 的孤儿确实存在(2016 年找到)。于是中间留下一个干净利落的缺口:高度恰好为 4 的孤儿存不存在,至今没有答案。
再往前一步:没有祖父母的图样
既然可以问“有没有父辈”,自然可以接着问:有没有图样,它有父辈,但它的父辈全都没有父辈?康威在 1972 年 10 月提了这个问题,一直悬了四十多年,直到 2016 年 5 月才被论坛上一位用户解决。造它用的还是同一套贪心思路,只不过每次要让“祖父辈更少”。
同一个月里,“有祖父母但没有曾祖父母”的图样也被找到了。而这条线在 2022 年 1 月被彻底走完:有人证明了对每一个 $n$,都存在恰好往上数 $n$ 代有祖先、再往上一代就断掉的图样。
1.8这些东西当年是怎么被找到的
1969 到 1970 年,康威和他在剑桥的合作者、以及 Bill Gosper 在 MIT 带的一个小组,各自研究着这个游戏。真正让它进入大众视野的是 1970 年 10 月 Martin Gardner 在《科学美国人》上的那篇专栏。爱好者们把自己的发现寄给 Gardner,他转给康威,反响之大迫使他在 1971 年 2 月又写了一篇续篇。
靠一个专栏作家当所有发现的总管显然撑不住。于是 1971 年 3 月,一份叫 Lifeline 的季刊创刊了,由 Robert Wainwright 编辑发行,一共出了 11 期,到 1973 年 9 月停刊。本章里的双蜂枪、开关引擎(连同它的产块和产滑翔机变体)、以及橡实这个玛土撒拉,都是在这份通讯上首次公布的。
此后几十年的接力是:1974 到 2009 年主要靠私人邮件列表流传,1990 年代出现了一批个人网页收藏,2004 年有了专门发布新发现的 LifeNews 网站,2009 年之后重心转到了 conwaylife.com 的论坛,至今如此。
当年是拿棋子在纸上推的
有一件事今天很难想象:1970 年既没有现成的生命游戏软件,算力也贵得离谱,所以早期爱好者大量是用方格纸、跳棋子、或者围棋的棋盘和棋子手工推演的。
正因为手工推演极其昂贵,当年的做法反而比现在更系统:不是撒大片随机图样,而是把所有小图样按格子数穷举一遍,挨个跑。本章里 T 型四联骨牌、R 型五联骨牌、B 型七联骨牌、阶梯六联骨牌之所以全都有名字、全都被研究透,正是这套穷举的产物。开关引擎也是这么被发现的——Charles Corderman 当时在穷举九联骨牌,其中一个两代之后就变成了开关引擎。
顺带一提,“多联骨牌”这个概念是 Solomon Golomb 在 1953 年提出的,Gardner 写它比写生命游戏早了整整十年。数学圈对多联骨牌的长期兴趣,正是这些小图样一开始就被仔细编目的原因之一。
后来这件事被彻底工业化了
“撒汤看灰烬”这个最笨的办法从未被淘汰,只是被自动化到了另一个数量级。1994 年 Achim Flammenkamp 跑了第一次自动汤搜索,累计了 $5 \times 10^9$ 个灰烬物体,从中找出 48 种不同的振荡器;2004 年他再跑一次,量级提高十倍,找出三千五百多种静物和八十多种振荡器。
2003 年 Andrzej Okrasinski 干脆把它做成了屏幕保护程序,五年里编目了 $4.7 \times 10^{11}$ 个灰烬物体,静物超过八千种、振荡器约一百八十种——但飞船依然只有那四种。2009 年出现了分布式的在线搜索,2014 年 Adam P. Goucher 的 apgsearch 上线,速度快到把此前所有搜索加起来的成果又乘了大约一万倍,至今仍在跑。
这条线索本身就说明了一件事:随机搜索能高效地穷尽“常见”的东西,但那四种飞船的天花板几十年没被撞破。真正稀有的结构不会自己掉进汤里,只能靠后面十一章那种一层层拼装的办法造出来。