文章

1、2、4、8、16,第六个不是 32

圆上取点、两两连线,分出的块数是 1、2、4、8、16,看起来在翻倍,第六个点却是 31 不是 32。 从这道反直觉的小题,聊「算得出」与「证得了」之间那道裂缝,以及它对大模型和 AI-native 工程的提醒。

1、2、4、8、16,第六个不是 32

封面

楔子 · 我们太容易相信「规律」了

前五步都对,第六步似乎就该顺理成章。可偏偏,最讲道理的那一步,常常正是陷阱本身。下面这道题,小学生都能上手,却几乎骗过了每一个真正动手去数它的人。


先放一道很小的题,门槛低到小学生都能上手:在一个圆的边上点几个点,把每两个点之间都用直线连起来,数一数这些线一共把圆面分成了几块。题目就这么简单,可它在某一步上的转折,几乎骗过了每一个动手数过它的人

我们一个一个来数。一个点的时候,一条线都连不出来,圆还是完整的一整块;两个点,连出一条线,圆被切成两半,是两块;三个点两两相连,圆里多出一个三角形,三角形内部一块、外面三块,于是是四块;四个点开始热闹起来,两条对角线在中间交叉,仔细数下来是八块;五个点,线和交点都多了,数着有点费劲,但耐心数完,正好是十六块。

把这五个数摆出来,1、2、4、8、16,这个规律强到不需要任何解释,每加一个点,块数就翻一倍,是一串干干净净的 2 的幂。到这里几乎没有人会再怀疑,第六个点的答案,当然是 32。如果你愿意,可以先在评论区写下你的那个数,再往下看。

从一个点到五个点:1、2、4、8、16

第六个点:不是 32,是 31

到了第六个点,老老实实把六个点之间的十五条线全连出来,一块一块数。我没有信直觉,也没有套公式,而是写了一小段程序,把所有交点、所有被切出来的小块都标上号,一个一个数清楚,结果是三十一块,不是三十二。你可以把下面这张图放大,从 1 数到 31,不多也不少。前五步里那条所有人都笃定的翻倍规律,在第六步上,第一次没有兑现。

6 个点:标号数出来是 31 块,不是 32

翻倍只是一个巧合

那 31 是怎么来的。把这道题彻底数明白,块数其实由一个确定的式子给出,我把结论摆在这里,你不必跟着推导,只要感觉一下它的形状就好——块数等于

\[\dbinom{n}{4} + \dbinom{n}{2} + 1\]

这里的 \(\dbinom{n}{k}\) 是组合数,意思是从 n 个点里任挑 k 个的方法数;之所以会冒出 \(\dbinom{n}{4}\),是因为每挑出四个点,它们之间的两条对角线就在圆内交出一个交点,而每多一个交点,就会多切出一块。这是个四次多项式,和「翻倍」没有半点关系。

那前五个点为什么又恰好是 2 的幂,这里藏着一个很美的巧合。把那个式子摊开,块数其实等于一串组合数里前五项相加,而 2 的幂 \(2^{n-1}\),恰好是同一串组合数的全部相加。点数少的时候,第五项往后那些项都还是零,前五项就是全部,于是这两个数严丝合缝地相等;可一旦到了第六个点,2 的幂里多算进了一项,真正的块数就比 32 少了 1,正好停在 31。换句话说,前五次的翻倍并不是一条规律,只是几个小数字恰好对上了,让一个四次多项式临时穿上了 2 的幂的外衣,而只有把结构真正证出来,你才看得见这件外衣,也才知道它会在哪一步被脱掉。

算得出,和证得了

我想讲的其实不是这道几何题,它只是一个标本,标出了「算术」和「数学」这两种思维之间那道真正的裂缝。算术做的事,是看见数、计算、找出规律、再往下外推,它看到 1、2、4、8、16,就给出 32,这套做法快、顺、大多数时候也好用,可它在这道题上就是错的。数学做的是另一件事,它不被规律说服,它会在所有人都点头的地方停下来,问一句凭什么这条规律会一直成立,然后它很清楚,这个「凭什么」,规律本身永远答不上来,只有证明能答。算得出,不等于证得了,这就是两种思维之间最要命的那一点区别。

今天每个人手边的那台「算术机器」

讲到这儿,绕不开今天人人都在用的大模型。如果你把「1, 2, 4, 8, 16,下一个是几」丢给它,它几乎一定回答 32。这不是因为它笨,恰恰相反,这是它工作方式的必然结果,大模型的核心是模式补全,也就是根据见过的海量模式去预测最像样的下一项,它做的本质上就是一种极其流畅的算术,看规律、续规律,它并不在证明任何东西,它甚至没有「证明」这个动作。所以它答 32,和我们脱口而出 32,是同一种错,只是它错得更自信、也更流利。有人说大模型像一台「算术天才、数学白痴」的机器,说的就是这件事,它能把模式玩到出神入化,却不真正地做推理。

而这件事,对任何真正拿 AI 干活的人,都不只是一个段子。它指向工程上一道很危险的缝,「在我测过的用例上全对」和「它真的对」,中间隔着的,正是整个数学。前五个点全对,不代表第六个点对;你的模型在你跑过的那些 case 上表现完美,也不代表它在你没跑过的地方不会塌。算术可以验证一万次,但验证一万次,仍然不是证明。把这道缝当回事,大概就是 AI-native 的工程,和「调通了就上线」之间,最实在的那点分别。


这道题最让我介意的,不是 31 这个数,而是另一件事。第六个点之所以能骗到你,并不是因为你不够仔细,恰恰相反,前五个点干净、整齐、一步不差,任何一个清醒的人,看着那串 1、2、4、8、16,都会得出 32,你那份笃定,是完全讲道理的笃定。也就是说,让你栽进去的,从来不是你的疏忽,而是你那份合情合理的判断本身

而你今天手里那些「一直都是这样」「从来没出过问题」的判断,无论它在你的代码里、在你的工作里,还是在你对某件事的某个看法里,大概率也正停在某个第五个点上,整齐、自洽、被反复验证过,让你挑不出一点毛病。它们和这道题唯一的区别只是,没有人会替你把它画成一个圆,让你提前数清楚那个迟早会出现的 31。


光靠看,是看不出来的。

本文由作者按照 CC BY 4.0 进行授权