新年的第一篇博客迟迟没有落笔,我想,大抵是因为过去一年并没有一个“圆满”的结局,而这一切就好像,你总是要写完一个句号,方能心安理得地另起一行。我猛然意识到,这场疫情无形中放大了故乡在时间和空间上的距离感。因此,面对阔别久矣的故乡,我甚至选择了早上的第一趟高铁。当我在列车上看着身后的事物一点点变小直至消失,这实在像极了我每一次出门远行。彼时彼刻,一个念头我在脑海中盘桓辗转:见到家人的那一刻,一定要给对方一个坚实的拥抱。可奇怪的是,越是面对熟悉的人,我们反而越是拙于表达。当我推开家门看到再熟悉不过的一切时,我内心突然获得了某种安宁,即使我们一直期待的事情是,每次相逢都能有不同的体验。我说我不大喜欢过年走亲戚这类活动,老大哥面无表情地回一句:看三体。
三体问题,其实可以看作是 N 体问题的一个特例,而所谓 N 体问题,则是指 N 个参照值相对一致的天体,仅在万有引力的作用下会呈现出什么样的运动规律。该问题最早由天才数学家希尔伯特教授,在 1990 年的全球数学大会上提出,是目前公认的人类科学界最难的 23 道数学题之一。如果你无法理解这个难度,请允许我找一个更有名的问题——费马大定理作为参照。事实上,早在 1687 年近代物理学之父牛顿,第一次提出了三体问题。此后的三百余年里,三体问题更是串联起无数如雷贯耳的名字:欧拉、拉格朗日、庞加莱、希尔伯特、开普勒…等等。
从某种意义上来讲,三体问题贯穿了整个物理学的发展历程。具体来讲,当 N = 1 时,单个质点的运动轨迹是匀速直线运动,这对应的是牛顿第一定律;当 N = 2 时,两个质点的相对位置始终在一条圆锥曲线上,这对应的是开普勒定律;当 N = 3 时,这就是著名的三体问题,此时,这三个质点的运动轨迹是不可预测的,而从数学的角度来看,三体问题没有解析通解,即:我们没有办法用一个通用的公式来描述其运动轨迹。一个最浅显的例子是,在三维空间中描述位置需要 x、y、z 三个参数,因此,每一个质点可以写出 3 个二阶微分方程或者 6 个 一阶微分方程。那么,当有三个这样的质点的时候,最多的时候会得到 18 个一阶微分方程。可以预见,求解三体问题,等价于求解这样 18 个一阶微分方程构成的方程组,其难度可想而知。
不过,虽然三体问题没有解析通解,我们总是可以找到某个特定解。譬如,当三颗天体在一条直线上时,两侧的天体会围绕中心天体呈椭圆形的运动轨迹。我们最为熟悉的太阳系就是这种情形;如果三颗天体呈三角形分布,则它们会一起围绕三角形中心点旋转;除此以外,还可以是同一侧的两颗天体围绕第三颗天体呈椭圆形的运动轨迹,其可能性可以说是不一而足。从这个角度来讲,或许我们以后还会发现更多的特定解,但我们始终没有办法用一个完美的公式来描述所有可能的场景,这就是三体问题的复杂性所在。
回到刘慈欣老师的小说设定,三体星球是一个围绕半人马座 α 三合星系统公转的一个行星,由于这颗星球同时受到三个 “太阳” 的影响,使其呈现出一种在“恒纪元”和“乱纪元”交替往复的状态,为了在这样的环境中生存下去,三体人不得不通过 “脱水” 和 “浸泡” 的方式来维持生命。事实上,半人马座 α 三合星是真实存在的,甚至 2016 年科学家还在这个星系中发现了行星 “比邻星 b” 的踪迹。读到这里,我们不免会怀疑《三体》其实是一本纪实小说,难道这颗比邻星上真的有外星人吗?不同于小说中设定的三个太阳,真实的 “三体” 星球面临的最大威胁是 X 射线,据不完全统计,这颗比邻星上面承受的 X 射线是地球的四百倍。所以,就算真的有外星人,在如此强度的 X 射线面前,胜负还真的挺难说呢?
我最早接触的科幻小说,当属法国作家凡尔纳的《海底两万里》,可我并不是一个硬科幻爱好者,大概是因为高中时期的我对数学更感兴趣一点。因此,当我以一名程序员的视角来看三体这部作品的时候,我更多的是关注计算机和哲学两个维度。比如史强和汪淼进入三体游戏这一段,表面是在讲三体人如何 “给文明以岁月”,可我看到的其实是人类从古至今的文明演化历程,周文王、孔子、墨子、冯·诺依曼、牛顿、爱因斯坦…..人类正是依靠着知识和技艺的传承,一步步地走到了今天。譬如,《三体》中的关于 “人列计算机” 的构想可谓是天马行空,可仔细想来,这不过是早期晶体管计算机的具象化,人列计算机中的每一个士兵,本质上就是一个可以输出 0 和 1 的晶体管,正是这些 0 和 1 组成了各种各样的逻辑门。众所周知,逻辑门是构成计算机最基础的组件,常见的加法器、计数器、累加器等都和逻辑门有着千丝万缕的联系。
纵观古今,人类更关注如双子星一般耀眼、一时瑜亮的事物,以文学史度之,譬如盛唐有李杜、德国有歌德和席勒、法国有加缪和萨特、俄国有列夫·托尔斯泰和陀思妥耶夫斯基。我想,这或许和我们对宇宙的认知有关,在过去几千年的时间长河里,我们长期观察得天体只有太阳和月亮。因此,“三日凌空”、“三合星系统” 这种异象对我们来说极具诱惑。在关注三体问题得这段时间里,我正好在读一本关于分布式系统的书籍,我马上意识到,程序员世界里的三体问题其实就是 CAP 定理。因为它同时受到一致性( Consistency)、可用性(Availability) 和 分区容忍性(Partition Tolerance) 三个因素的影响,初始条件的选取会影响整体架构的设计和落地。当然,实际操作中它要比三体问题更简单一点,考虑 P 是客观存在的因素,我们其实只有 CP 和 AP 两种选择。
小说中设定三体人到达地球需要 400 年的时间,如果考虑到信息的传递同样需要时间,比如古代皇帝驾崩、颁布新政令的时候可能出现延迟,此时就会产生信息差。对应到分布式系统中,在处理主从切换的时候,可能会出现因为延迟而导致的不一致问题,试想一下,一个国家两个皇帝或者是一个系统中有两个 Master 节点,这并不比 “三日凌空” 好到哪里去。三体人为什么能实现真正的 “人列计算机” 呢?按照小说的设定,三体人具有思维透明的特点,这意味着三体人之间信息的交换是无损的、低延迟的。或许,我们会认为人类有城府、懂计谋,是因为人类懂得隐藏自身真实的想法。可是,你说有没有一种可能,三体人只是不擅说谎,他们完全懂得运用计谋,甚至这种计谋是浮在表面的 “阳谋” 。如果按照黑暗森林法则,整个宇宙本质上就是一款大型 “吃鸡” 游戏,三体人害怕地球人吗?确实怕,可令他们感到害怕的绝非人类本身,而是害怕人类将其坐标暴露给更高维度的文明。从这个角度来看,三体人的确没有说谎,甚至在有意无意的暗示人类。
三体人的 “脱水” 和 “浸泡” ,以程序员的视角来看,大约等同于序列化和反序列化。按照原著设定,当恒纪元到来的时候,三体人会通过 “浸泡” 的方式复活;当乱纪元到来的时候,三体人会通过 “脱水” 的方式冬眠。我认为,这里有一个非常深刻的话题,即探讨人的意识和肉体的关系。参照一般的理论,意识不但会认识到精神上的 “我” ,而且能认识到肉体上的 “我” ,并且还会把它们统一起来,构成这个世界上的 “我” 。那么,经历过 “脱水” 和 “浸泡” 这两道工序的三体人,是否还是原来的那个三体人呢?三体人经过 “脱水” 以后变成干纤维,肉体不复存在,意识又该何去何从?我们分辨一个人,到底是通过容貌、举止这些肉体上的特征,还是通过体验、感受这些意识上的特征?扩展到更大的层面上,公司和社会又分别通过什么来区分你?有时候,我们不得不接受来自自己或者时别人身上的变化,可能我们彼此的容貌没有任何变化,但我们从心理和情感上早已不再是当初的那个人,对此,你又将作何感想呢?我只知道,反序列化出的这个对象实例,肯定不是当初序列化时的那个对象实例。