做这个系列做到第六篇聊的方向越来越“悬”了。“让AI参与新数学猜想生成”——这个标题放半年前我自己看到都会皱眉。猜想不是数学家的特权吗让一个大语言模型去猜猜想它凭什么先别急着下结论。我理解的“数学猜想”本质上是一个“基于有限观察总结出来的大胆命题”。比如你反复验证了十几组数据都满足同一个规律于是你把它写成“如果……那么……”的形式这个东西就是猜想。历史上很多著名猜想都是这么来的区别只在于背后的观察量更大、手法更敏锐。AI能做的是什么它不能替你证明但它能替你做“大规模观察”和“初步归纳”这部分体力活还能用不同的语言模式帮你把观察结果表述成命题。这样一来“从数据到猜想”这条链路就被大幅缩短了。这次项目我的具体目标是找一个具体的数学对象作为研究对象让AI批量产出可检验的候选猜想再用数值扫描和文献比对逐步淘汰最后留下几条在严格意义上“暂时还没有被证伪、且有一定研究价值”的命题。整个流程不算复杂真正有意思的地方在于中间几次AI和我的“来回”——它会说出一些乍一听像胡话、细想又有点味道的话也会在我以为已经找到新东西的时候冷静地提醒我可能只是在重复几十年前的结论。愿意往下看就把这篇文章当成一次AI辅助数学发现的实验记录。提示词、脚本、踩坑我全部摊开讲。1. 先拆项目AI在“猜想生成”里的真实定位1.1 猜想从无到有的五个环节一个看起来“新”的数学猜想从无到有通常要经历这样几个环节选定研究对象比如某个数论函数、某类图、某个组合计数序列。观察数据把对象的前几十项、几百项甚至几百万项算出来看规律。归纳假设把看到的规律描述成一个有明确条件、明确结论的命题。反复测试用更多数据、更多边界情况去攻击它看能不能找到反例。寻找证明或者把这个命题加强成更有意思的形式。传统做法里阶段2和阶段3由研究者的“数学直觉”驱动靠的是长期积累和某种说不清道不明的敏感度。这个环节恰恰是LLM最有可能帮上忙的地方它能把大规模语料中的模式迁移到当前上下文里从而给出“这个序列的增长越来越平缓可能渐近于某个形式”之类的推演。严格来说它不是在思考但它确实能产出有启发性的断言。所以我给AI安排的岗位是它负责阶段2和阶段3的初稿我负责阶段1、阶段4以及所有重要判断。这个分工不浪漫但很务实。1.2 LLM的能力与短板为什么数学任务让人又爱又恨用LLM做数学相关的事绕不开一个核心矛盾它既擅长“形式语言”又不擅长“逻辑”。它擅长形式语言是因为大模型在训练阶段读过的数学文本量极大哪怕它不理解符号背后的意义也能生成像模像样的公式推导它不擅长逻辑是因为它本质上是“接龙游戏”每一步只负责预测下一个最合理的token而不是在维护一个严谨的推理状态机。这个矛盾在“生成猜想”这类任务里反而变成了一种优势。因为生成猜想不需要严谨推理它需要的是“大胆的联想”恰好避开了LLM的推理短板放大了它“在海量文本中找结构相似性”的长项。反过来说它也带来了一个巨大的风险幻觉。LLM会把看似合理但实际上不成立的条件组合在一起生成一条看起来无懈可击、检验一下就崩掉的命题。所以整个项目的核心不是“让AI生成”而是“让AI生成之后如何处置”——用一套工程化的验证流程把幻觉筛掉。这也是我后面花大量篇幅讲验证的原因。1.3 本次项目采用的完整流程项目实际跑起来的流程长这样输入一个明确的数学对象。我选的是带计数性质的整数序列整数的某种划分计数函数。候选生成让AI在“头脑风暴模式”下给出20到30条类似猜想的命题。粗筛去掉明显废话、明显重复、明显不可检验的。数值验证对留下的候选做小规模数据扫描找反例或者找证据。二次提问把数值结果反馈给AI让它解释为什么会有这种特征再让它修正或加强猜想。人工复核把最终选中的2到3个候选整理成正式文档等待后续进一步讨论。后面几节我会把这套流程的每一步都拆开细说包括提示词长什么样、脚本怎么写的、哪些环节特别容易翻车。2. 工具准备与提示词设计2.1 我准备了什么环境这次项目用到的工具并不高级一个主流的、能处理较长上下文的对话式大模型加上一套本地的Python计算环境。关键不是模型有多大而是怎么把“数学对象”翻译成模型能理解的语言。本地环境我装了三个库sympy做符号推算和素数判断networkx在需要图论对象时用pandas做数据整理。sympy的npartitions和nextprime这类函数在处理常见规模的数时速度非常快做初始扫描已经够用了。networkx在后面如果想把这个流程推广到图上会很有用但我这次的主体流程还是在数论式的序列上跑的。另外我还额外准备了一个“小常数表”把常见整数序列的前若干项预存成文本文件。这么做是为了在提示词里把样例数据喂给AI——别小看这一步你让AI凭空想一个猜想和让它看着前20项数据想一个猜想产出质量完全是两回事。数据就是它联想的锚点。2.2 人设设定为什么要给AI一个“数学研究者”的身份提示词工程的核心不是写得花哨而是限定范围。我第一轮实验用的是最简单指令“请生成一个数学猜想。”结果它给我一堆教科书级别的正确答案全是已经存在的经典命题一个能打的都没有。问题出在哪模型太“聪明”了它倾向从记忆里调用最高概率的回复也就是那些耳熟能详的已知结论。后来我把设定改成了这样你是一位熟悉数论和组合数学的研究者正在准备学术讨论班上的短报告。你的任务不是解释已知定理而是针对下面这个研究对象给出至少10个“你自己都不确定是否正确”的猜想。要求每条猜想必须包含明确的条件和结论必须可以用前100项数据做初步检验。请不要引用文献请不要只复述已有结论。这个设定的效果立竿见影。因为我同时给了它“研究对象”、“数量下限”、“可检验性”和“禁止复读文献”四个约束它被迫离开舒适区。其实这个道理和找人聊天一样你问“有什么想法”对方大概率客套你问“针对这个数据给我十个大胆但可验证的假设”对方才会认真动脑。LLM也是同样的机制。3. 实操过程三个回合把AI从“百科全书”变成“猜想合伙人”3.1 第一回合把研究对象和数据“喂”给AI我选的研究对象是“整数的全划分计数函数”简单说就是计算一个正整数n有多少种方式被拆成若干个正整数的和不考虑顺序。例如n4的时候划分有5种4、31、22、211、1111。这个函数在组合数学里是经典对象研究历史极其悠久但正因为它历史悠久反而不愁没有“新角度”——只要你能找到前人没细看过的维度。我在提示词里给AI的数据是这样的函数定义p(n)表示正整数n的全划分数量。前20项1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56, 77, 101, 135, 176, 231, 297, 385, 490, 627。额外信息p(n)的增长速度大约和exp(c√n)相当这个信息用于判断它是否暗示某种渐近行为。实际执行的时候AI反过来问了我一个问题“你想听整体形状上的猜想还是局部同余关系上的猜想”我愣了一下因为这个问题很专业。我回答“两种都要”。这个细节我印象很深说明只要给足了上下文LLM是能理解“一个函数有两类不同风格的规律”的。它给了两条分支的初步探索方向一条是增长率和渐近形态另一条是模运算下的剩余类规律。3.2 第二回合批量产出粗糙猜想我让AI一次性给出了12条候选。输出里确实混了不少噪音比如“p(n)总是偶数”——看一下第6项p(6)11就打脸了。但也没人规定初稿必须是对的猜想本来就是用来挨打的。真正有价值的候选我现在还原几个连同我的初筛意见和验证结果一起列在下面编号候选内容简写初筛意见数值验证结果Ap(n)对10取模的剩余序列最终是周期的待验证n≤2000内未呈现固定周期暂不推荐B当索引为素数时p(n)的奇偶性随位置呈某种模式有潜力n1570附近出现反例淘汰C每6个连续整数中至少有一个p(n)能被5整除弱但可检验n≤10000成立保留并进一步探索Dp(n)的增长率渐近行为存在一个未被精确刻画的余项描述性太强不适合做数值检验降级为讨论材料Ep(n)的某种均值函数最终单调递增明显由数据趋势推出验证到n5000成立但价值有限候选A给我一个教训LLM看到“1,2,3,5,7,11……”这种序列很容易联想到周期但数学上“周期”是一个非常严格的概念需要证明而不是观察。候选B最有意思它盯上了前20项里n2,3,5,7,11,13这样“素数位置”上的取值提出了一个关于“索引为素数的划分数的奇偶性”的猜想。这个方向相当对路数论里本来就有大量“素数下标性质”的研究。候选C是个很“弱但可检验”的命题我拿脚本立刻验证到n1000真的成立。而且在n10000以内也没有找到反例。后来查文献才发现这类结论与经典的模同余现象有关只不过那篇文献用的模数和范围更精细。不是我发现了新东西但这个过程告诉我AI确实能隐约“感知”到隐藏在数据里的同余结构。3.3 第三回合让AI自己扮演“杠精”挑毛病LLM生成猜想的最大问题不是它给得少而是它对自己生成的东西天然乐观它不会停下来说“这条其实很弱”。所以我设计了第二轮独立对话把AI定位从“提出者”切换成“审查者”下面是我收到的一份候选猜想清单请你逐条扮演严格的审稿人。对于每条请给出可疑点、最可能被反例攻击的小数值范围、以及你猜的存活概率。不要为了鼓励我而放水。这个“审查者”角色帮我淘汰了12条里的7条。值得一提的是审查者能准确指出候选B的反例极可能出现在n1570附近而实际用脚本检查时n1570真的就出问题了。原因可能是模型在训练时看过大量包含“1570”的数学讨论它不一定是在推理而是在从记忆里检索相关反例的蛛丝马迹。不管机制是什么结果是有用的——它提供的高风险区域几乎就是标注好的搜索范围。这里要特别提醒一句这种自审机制只能当粗筛不能当证明。AI说自己“这条猜想我相信”既不增加猜想的概率也不提供证明它只是在帮你圈出优先验证的范围。4. 验证环节的工程化做法数值扫描、文献比对和边界意识4.1 数值扫描最笨但最有效的第一步对于数论类猜想我习惯写一个通用扫描脚本。下面这段代码是我针对“p(n)对模数m的取值规律”这类猜想用的初始模板import sympy as sp max_n 2000 m 5 partition_residuals [] # sympy的npartitions内部有高效算法适合做初步扫描 for n in range(1, max_n 1): p_n sp.npartitions(n) residual p_n % m partition_residuals.append(residual) # 输出前200项的连续10项和方便肉眼观察周期结构 for start in range(0, 200, 10): print(start 1, sum(partition_residuals[start:start 10]))实际跑数据的时候我一般还会同时输出“反例区间”也就是某个候选在哪些n处失效而不是只看总体通过。因为判断一个候选的存活概率不仅要看它错没错更关键的是看它错在前面还是错在后面。错在n7的猜想几乎可以立刻删掉错在n1570的则有更多“值得讨论”的余地。数值实验永远只能提供“证据”不能提供证明。任何一个有限范围内的统计结果都无法排除下一个数字突然出现反例。这个边界如果没意识到整个项目就变成了“用数据自我安慰”学术意义就没了。4.2 文献比对怎么避免“我以为是新发现”AI生成的猜想里有很大一部分其实早就是已知定理或者已知定理的简单推论。为了避免把时间浪费在重复发明上我在选定候选之后会做一次文献比对。具体操作不是去翻纸质期刊而是把猜想的精确表述输入学术搜索引擎再配合几个关键词的组合依次查比如“partition function congruence”这类组合词。这里的关键心得是把AI的原话翻译成规范数学表述再去查而不是直接粘贴AI的话。LLM的表达容易带口语腔比如它会说“p(n)好像每隔5个就有一次可以整除”正规文献的写法是“p(5n4)≡0 mod 5”这两种表述在检索系统里的命中率完全不同。所以我会先手动把候选改写成一个标准条件表达式再拿去查。4.3 形式化验证的边界有些读者可能会问为什么不直接上形式化验证工具比如定理证明器我的回答是不是不能是成本问题。猜想生成阶段真正的瓶颈在于候选数量太大形式化验证适合用在已经通过了数值初筛、且人工判断“有希望”的少数几条上。更现实的做法是对少数几个核心候选先把命题拆成“如果A则B”的形式再由人写出证明思路用大模型生成证明草稿再交给人工逐行审查。这一步里AI仍然只是草稿机器负责速度和覆盖面不负责正确性。同理真正能证明一个猜想的依然是坐在屏幕前的人类研究者。5. 踩坑实录与常用排查技巧5.1 高频问题速查表做这类项目踩过的坑很多我把最高频的几个问题整理成一张表现象可能原因处理办法生成的猜想全是已知结论提示词没禁止复述文献加上“不要引用已知定理”、“必须包含新的条件组合”猜想的条件太弱比如“存在某个数”模型在偷懒用存在性表述替代构造性描述强制要求给出具体构造或具体范围否则剔除数值验证找不到反例但心里不踏实扫描范围太小或者命题形式允许边界反例扩大扫描范围并检查边界条件比如n0、n1之类AI自己审稿时全通过模型上下文被之前的乐观人格污染新开对话换“最严厉审稿人”设定不让它看到原稿的自我评价同一猜想反复出现模型只在重复训练语料里的热门结构换一个研究对象或者要求它从“反方向”构造比如证明不可能性生成内容被格式化语言带偏提示词里的术语太多模型开始凑词减少术语密度要求逐条给例子用例子反向锚定5.2 三个特别有用的“废话过滤器”我在实验里反复用到三种提示策略效果稳定分享出来“请给出你认为失败概率最高的3条。”——这个过滤器逼模型暴露出它在训练数据里见过的失败案例信息往往能精准标记出最弱的猜想。“如果这个猜想对普通小整数成立但你对大整数的行为没有把握请直接说没有把握。”——这是把不确定性显式化避免AI用含糊措辞掩盖问题。“把每条猜想的验证方式写清楚。”——一旦AI写不出具体可运行的验证步骤说明它自己都不知道自己在说什么这条可以直接淘汰。5.3 我对这套流程的最终体会做完了这次项目我对“AI辅助数学研究”这件事的预期调整成了更务实的版本。AI大概率不会突然某天自己证明一个世纪难题但在“找感觉”、“产候选”、“筛方向”这些脏活累活上它确实是以前没有过的帮手。真正最有价值的能力可能不是“生成”而是“逼使研究者把话说清楚”。因为每当你要让AI理解一个数学对象的时候你都不得不先把它精确地描述出来这个“描述”的过程本身就在推进思考。最后再分享一个小技巧无论AI产出的猜想想不想用都建议把它存档哪怕第二天醒来看见它错得离谱。猜想的价值不只在“对”更在“视角”有些错误的猜想如果错得有特点反而能指向一个你原本没注意到的结构。这大概就是和“数学家做朋友”最大的收获你永远不知道哪一次看似不着边际的对话里藏着下一个值得认真对待的问题。
阅读完成 · 觉得有帮助?