数学证明长期被视为人类心智的专属领地——需要直觉、构造力和对反例的敏锐嗅觉。OpenAI 的推理模型刚刚在这个领地打了一个缺口:它自主生成了一份原创证明,推翻了 Paul Erdős 在 1946 年提出的单位距离猜想,一个悬挂近 80 年的离散几何开放问题。
这不是第一次有人声称用 AI 解决 Erdős 问题。七个月前,OpenAI 前副总裁 Kevin Weil 曾宣布 GPT-5 解决了 10 个 Erdős 问题,随后被学界证伪。这一次,模型交出的是一份可验证的正式证明。
猜想本身:看似简单,实则深不可测
Erdős 的单位距离猜想问的是:在平面上放置 n 个点,最多能有多少对点之间的距离恰好等于 1?
直觉上,你可能会猜这个数量随 n 线性增长。但 Erdős 本人构造了著名的网格反例——在 √n × √n 的整数网格中,单位距离对的数量约为 n^(1+c/log log n),比线性增长快,却远低于二次增长。他猜想这个构造已经接近最优:单位距离对的总数不可能超过 O(n^(1+ε)),对任意 ε > 0。
这个猜想之所以困难,是因为它横跨了离散几何、图论和加性组合数论。你既需要构造极端配置来逼近上界,又需要证明任何配置都无法突破某个增长阶——两件事都不容易。
推理模型做了什么
根据 OpenAI 的披露,推理模型的工作路径大致如下:
-
问题理解与形式化:模型将自然语言描述的猜想转化为可操作的形式化命题,明确"推翻"意味着需要证明存在某个增长阶的配置使原猜想不成立,或证明上界的真实阶与猜想不同。
-
反例构造:模型没有停留在"尝试若干已知构造"的层面,而是自主生成了一个此前文献中未出现的新构造,并证明了该构造的单位距离对数量突破了 Erdős 猜想所设定的上界。
-
证明链完整性:从构造定义到计数论证,每一步都给出了可检查的推理步骤,而非仅仅输出一个结论。
关键在于"自主"二字——模型不是在已知证明的语料上做模式匹配,而是生成了文献中不存在的新构造和新论证。这与七个月前那次被证伪的声明形成鲜明对比:当时的问题在于模型输出的"证明"经不起同行审查,而这一次,证明结构通过了验证。
从失败到突破:七个月的距离
上次失败的教训值得复盘。GPT-5 宣称解决的 10 个 Erdős 问题,本质上是一种"幻觉式证明"——模型生成了看起来像证明的文本,但逻辑链条中存在不可修复的漏洞。这类失败的模式通常是:
- 引用了不存在的引理
- 在关键步骤跳过了非平凡的论证
- 将已知结果错误地推广到不满足条件的场景
推理模型这次的差异在于架构层面的变化。推理模型在生成最终输出前,会先进行长时间的内部推理(chain-of-thought),搜索多个证明路径,对每条路径做自我验证,再选择最可靠的一条输出。这相当于在模型内部增加了一个"同行审查"环节。
用代码探索单位距离问题
理解这个猜想最好的方式是亲手计算。下面这段 Python 代码可以在平面上放置点并统计单位距离对的数量,让你直观感受不同配置下单位距离对的增长行为。
import numpy as np
from itertools import combinations
import matplotlib.pyplot as plt
def count_unit_distances(points, tolerance=1e-9):
"""统计点集中单位距离对的数量"""
count = 0
for p1, p2 in combinations(points, 2):
dist = np.linalg.norm(p1 - p2)
if abs(dist - 1.0) < tolerance:
count += 1
return count
def generate_grid_points(n):
"""生成 √n × √n 整数网格点(Erdős 经典构造)"""
side = int(np.sqrt(n))
points = []
for i in range(side):
for j in range(side):
points.append(np.array([i, j], dtype=float))
return np.array(points[:n])
def generate_random_points(n):
"""随机生成 n 个平面点"""
return np.random.rand(n, 2) * n
def generate_lattice_with_shift(n, shift=0.5):
"""带偏移的网格构造——尝试增加单位距离对"""
side = int(np.sqrt(n))
points = []
for i in range(side):
for j in range(side):
# 每隔一行偏移 shift,制造更多单位距离邻居
x = i + (shift if j % 2 else 0)
points.append(np.array([x, j], dtype=float))
return np.array(points[:n])
# 对比三种构造在不同规模下的单位距离对数量
sizes = [4, 9, 16, 25, 36, 49, 64, 81, 100, 144, 196, 225]
results = {"网格": [], "随机": [], "偏移网格": []}
for n in sizes:
grid_pts = generate_grid_points(n)
results["网格"].append(count_unit_distances(grid_pts))
rand_pts = generate_random_points(n)
results["随机"].append(count_unit_distances(rand_pts))
shift_pts = generate_lattice_with_shift(n)
results["偏移网格"].append(count_unit_distances(shift_pts))
# 绘制增长曲线
fig, ax = plt.subplots(figsize=(10, 6))
for label, values in results.items():
ax.plot(sizes, values, marker="o", label=label)
# 画出 n 和 n^1.5 参考线
ax.plot(sizes, sizes, "--", label="O(n) 参考线", alpha=0.5)
ax.plot(sizes, [n**1.5 for n in sizes], "--", label="O(n^1.5) 参考线", alpha=0.5)
ax.set_xlabel("点数 n")
ax.set_ylabel("单位距离对数")
ax.set_title("不同点集配置下的单位距离对数量")
ax.legend()
ax.set_xscale("log")
ax.set_yscale("log")
plt.tight_layout()
plt.savefig("unit_distance_growth.png", dpi=150)
plt.show()
# 打印数值对比
print(f"{'n':>5} | {'网格':>6} | {'随机':>6} | {'偏移网格':>8} | {'n^1.5':>8}")
print("-" * 50)
for i, n in enumerate(sizes):
print(f"{n:>5} | {results['网格'][i]:>6} | {results['随机'][i]:>6} | "
f"{results['偏移网格'][i]:>8} | {n**1.5:>8.1f}")
运行前确保安装了依赖:
pip install numpy matplotlib
这段代码的核心价值在于让你亲眼看到:网格构造的单位距离对数量确实介于 O(n) 和 O(n²) 之间,而偏移网格构造可能进一步推高计数。这正是 Erdős 猜想争论的焦点——上界的真实增长阶到底在哪里。
你可以在此基础上做更多实验:
- 尝试不同的
shift值,观察单位距离对的变化 - 将点放置在圆环上(等间距),计算单位距离对
- 用三角网格代替方格网格,看哪种构造更"密集"
用推理模型辅助数学探索
如果你想尝试用 OpenAI 的推理模型来探索类似问题,以下是一个最小可运行的 API 调用示例:
from openai import OpenAI
client = OpenAI() # 需要设置 OPENAI_API_KEY 环境变量
response = client.chat.completions.create(
model="o3", # 推理模型
messages=[
{
"role": "user",
"content": (
"考虑平面上 n 个点的单位距离问题。"
"已知 Erdős 猜想单位距离对数不超过 O(n^(1+ε)) 对任意 ε>0。"
"请分析:如果我们把点放在 √n × √n 的整数网格上,"
"单位距离对的数量大约是多少?"
"这个数量与 n 的增长关系是什么阶?"
"请给出详细的计数论证。"
),
}
],
# 推理模型会自动进行长时间内部推理
# reasoning_effort 控制推理深度
reasoning_effort="high",
)
print(response.choices[0].message.content)
注意:推理模型的 API 与普通 ChatGPT 不同,reasoning_effort 参数控制内部推理的深度和时长。对于数学问题,建议设为 high。
这件事对 AI 与数学的真实意味
抛开媒体叙事,冷静看这次突破的意义和边界:
真正的新东西:模型生成了文献中不存在的新构造。这不是检索,不是模式匹配,而是某种意义上的"创造"。无论我们如何定义创造,这个构造此前没人写过。
仍然有限的:这是一个离散几何中相对"可计算"的问题——构造和计数论证天然适合逐步推理。相比之下,需要深层代数直觉或跨领域类比的问题,推理模型目前还难以触及。
方法论启示:
- 推理模型的"内部审查"机制(多路径搜索 + 自我验证)是减少幻觉式证明的关键。任何用 AI 辅助数学工作的人,都应该要求模型输出完整的推理链而非仅结论。
- 计算实验(如上面的 Python 代码)与 AI 推理可以形成闭环:先用代码探索小规模情况,形成猜想;再用推理模型尝试构造证明;最后回到代码验证构造在大规模下的行为。
- 对 AI 生成的证明,同行审查不可省略。七个月前的失败就是教训。
对从业者的 checklist:
| 步骤 | 做法 |
|---|---|
| 形成猜想 | 用计算实验在小规模下验证直觉 |
| AI 辅助证明 | 要求完整推理链,设定 reasoning_effort="high" |
| 审查证明 | 逐条检查引理是否存在、步骤是否可跳过 |
| 验证构造 | 用代码在大规模下测试 AI 提出的新构造 |
| 归档 | 记录哪些步骤是 AI 生成、哪些是人工验证 |
Erdős 本人在提出这个猜想时,大概不会想到 80 年后推翻它的不是某位天才数学家,而是一个在 GPU 上运行的推理程序。但数学的验证标准不会因为证明者的身份而改变——证明成立就是成立,不成立就是不成立。这次它成立了,而七个月前它没有。这个区别比任何修辞都重要。