这一页把 Erdős 第 306 号问题、以及那套高深证明的核心思路,讲成高中生(甚至认真的初中生)都能跟下来的样子。 全程只用加减乘除和分数通分,遇到公式都会先用大白话解释。想看严谨的机器验证版本,见 技术总览 与四个详解页。
我们只允许用一种分数当积木:分母是“两个不同素数相乘”的 $\dfrac1n$。素数就是 $2,3,5,7,11\dots$ 这些只能被 1 和自己整除的数。把两个不一样的素数乘起来,再取倒数,就得到一块积木:
| 积木 | 分母怎么来的 | 大小 |
|---|---|---|
| $\dfrac{1}{6}$ | $6=2\times3$ | ≈ 0.167 |
| $\dfrac{1}{10}$ | $10=2\times5$ | ≈ 0.100 |
| $\dfrac{1}{15}$ | $15=3\times5$ | ≈ 0.067 |
| $\dfrac{1}{14}$ | $14=2\times7$ | ≈ 0.071 |
| $\dfrac{1}{21}$ | $21=3\times7$ | ≈ 0.048 |
| $\dots$ | $\dots$ | 越往后越小 |
注意:像 $\dfrac14$ 不算积木,因为 $4=2\times2$ 是同一个素数乘自己;$\dfrac1{12}$ 也不算,因为 $12=2\times2\times3$。必须是两个不同素数,各出现一次。数学里这种数叫“无平方因子的半素数”,名字吓人,其实就是上面这么简单。
取 $\dfrac16,\dfrac1{10},\dfrac1{15}$。通分到 30(因为 $30=2\times3\times5$):
$$\frac16=\frac{5}{30},\quad \frac1{10}=\frac{3}{30},\quad \frac1{15}=\frac{2}{30}.$$加起来:$\dfrac{5+3+2}{30}=\dfrac{10}{30}=\dfrac13$。刚刚好!
再来一个更短的:$\dfrac1{10}+\dfrac1{15}=\dfrac{3}{30}+\dfrac{2}{30}=\dfrac{5}{30}=\dfrac16$。两块积木拼出了第三块的大小。
刚才我们凑出了 $\dfrac13$ 和 $\dfrac16$。问题问的是一般情况:
“分母不含平方因子”是什么意思?就是 $b$ 分解成素数以后,没有哪个素数出现两次。比如 $15=3\times5$ 可以,$7$ 可以,$30=2\times3\times5$ 可以;但 $12=2^2\times3$ 不行,$50=2\times5^2$ 不行。
每块积木的分母($6,10,15,\dots$)自己都不含平方因子。把若干个这样的分数加起来、约分之后,最后的分母也一定不含平方因子——因为通分用到的公分母就是这些干净分母的最小公倍数,它还是干净的。
所以:如果目标能被积木拼出来,它的分母本来就不含平方因子。反过来,含平方因子的目标(如 $\tfrac14$)根本不可能拼出来。题目要求“$b$ 不含平方因子”,正是把范围收在唯一有可能成立的边界上——多一分做不到,少一分则本页要讲的绝招保证做得到。
你可能会想:分数嘛,多凑几个不就行了?但仔细想有三个坎:
合起来,这就像:用一套古怪的硬币凑出一个精确金额,每种硬币只有一枚,而且硬币面额是稀奇古怪的分数。凑一两个目标靠手气;要证明“无论什么目标都一定凑得出”,靠手气就不行了——你需要一个对所有情况都管用的理由。这正是难点,也是为什么它值得一个高深证明。
数学家没有去“碰运气找组合”,而是用了三个层层递进的绝招。理解了这三招,你就抓住了整个证明的灵魂。
想证明“至少存在一种拼法”,最聪明的办法往往不是真把它找出来,而是去数一数一共有多少种合格拼法。如果你能证明这个数目大于 0,那就一定至少有一种——哪怕你根本说不出它长什么样。
这跟“抽屉原理”是一个味道:我不告诉你哪只抽屉挤了两只袜子,但我能证明一定有一只这样的抽屉。这里也是:我不指出具体拼法,但我证明合格拼法的总数不是零。
可问题来了:合格拼法要满足“加起来恰好等于目标”这个苛刻条件,怎么把满足它的方案数算出来?这里有一个漂亮的物理式技巧。
给每一种候选拼法配一根指针(一个箭头)。规则设计成这样:
现在把所有候选拼法的指针叠加求平均。指向四面八方的“不合格”指针会互相抵消(就像一群人往各个方向拉一个物体,合力接近零);而所有“合格”指针都乖乖指向正右方,不会被抵消。于是这个平均值,正好等于合格拼法的净数量。
数学上这根指针就是复数 $e^{2\pi i\,\times(\text{偏差})}$,“叠加平均正好数出合格个数”这件事叫正交性或单位根滤波。名字不重要,重要的是那幅画面:错的互相抵消,对的留下来。
绝招二把“数方案”变成了“把一大堆指针沿着一个圆圈加起来求平均”。这个圆圈上,不同位置贡献很不一样,可以分成两种地带:
合格拼法的总数 $=$ 主项(一个确定的正数) $-$ 杂音(一个说不准的小量)。
只要能证明杂音的总大小,比主项那个正数还小,那么
$$\text{合格拼法数}\ =\ \underbrace{(\text{正的主项})}_{\text{大}}\ -\ \underbrace{(\text{杂音})}_{\text{更小}}\ >\ 0.$$大于 0,就意味着至少存在一种合格拼法——回到绝招一,问题就解决了!这套“化存在为计数、再用圆上主音压过杂音”的方法,就是大名鼎鼎的圆法(circle method),由哈代和李特尔伍德在一百年前发明,用来数各种“凑数”问题的解。
三个绝招听起来顺理成章,但魔鬼藏在最后半句:怎么证明“杂音真的比主项小”?这正是整个证明最硬、最长、最“高深”的部分,也是为什么它需要两万多行推理。
直觉上是这样的:一种拼法如果“偏离目标”,它在圆上就落进杂音区;而偏得越厉害的拼法,它对应的一种“能量”就越高,指针衰减得越快、贡献越小。数学家要做的,是给所有这些偏离方案的能量算一个统一的下限——证明它们通通被压得足够低,加在一起也翻不起浪。这套记账法叫能量–熵方法(想象成:坏方案“数量上的多”始终赢不过它们“能量上的贵”)。其中一块最关键的拼图,作者起名 SBEE(单块能量–熵),已经被完整证明,而且用的是一个出人意料地初等的观察(“一列等差数刺进一段区间,至多扎中两个点”),并不需要更重的经典工具。
你可能担心:这么长的推理,会不会哪里藏了个漏洞?这正是这项工作最让人安心的地方——整个证明是用一种叫 Lean 的“证明检查器”写成的。
Lean 不是让计算机去“猜”证明,而是逐行核对每一步逻辑是否严丝合缝:只要有一处推不通,它就会报错、拒绝通过。作者 Yuren Tang 写了约 21,000 行,Lean 全部检查通过,没有一处“此处略去证明”(术语叫 sorry-free)。换句话说,逻辑的正确性不需要你我去人肉信任,机器已经担保了。
除此之外的每一步,都由 Lean 的内核把关。这两件事本站都做了逐条对照,见公理与诚实清单。
如果上面的思路让你想看细节,技术版把每一层都摊开讲了(含公式、Lean 引理名、SVG 结构图):