腾讯Hyra开源模型攻克50年数学难题深度解析:加法组合学与十二进制结构的科研智能体新范式
引言
2026年7月29日,一篇arXiv预印本悄然上线,标题平淡无奇——“Settling the Optimal Exponent Relating Sumsets and Difference Sets”——却瞬间引爆了整个数学界与AI界。作者林浩伟(腾讯混元)与李善达(卡内基梅隆大学)在论文中宣布:加法组合学中一个悬置半个多世纪的核心问题,被彻底解决了。
而更令人震撼的是,解决这一问题的核心构造,由一个名为Hyra(Hunyuan Research Agent)的科研智能体提出——它基于腾讯在2026年7月6日开源发布的Hy3模型(295B总参数/21B激活参数,MoE架构,Apache 2.0协议),在约24小时的自助探索中,找到了人类数学家五十余年未能触及的关键路径。
这不仅是一道数学题的终结,更是开源模型在基础科研前沿"反超"闭源产品的标志性事件。
一、问题本身:加法组合学的"圣杯"
1.1 和集与差集
加法组合学(Additive Combinatorics)研究的是整数集合在加法运算下的结构性质。一个基本问题是:给定一个有限非空整数集合 (A),定义:
- 和集(Sumset):(A+A = {a+b \mid a,b \in A})
- 差集(Difference Set):(A-A = {a-b \mid a,b \in A})
由于重复结果只计算一次,集合会在加法和减法下"扩张"。我们用两个指标来衡量:
[ \sigma(A) = \frac{|A+A|}{|A|}, \quad \delta(A) = \frac{|A-A|}{|A|} ]
1.2 经典不等式与半个世纪的追问
经典的和差集不等式(Sum-Difference Inequalities)给出了一个优美的约束:
[ \sigma(A)^{1/2} \leq \delta(A) \leq \sigma(A)^2 ]
换句话说,差集的扩张速度不会超过和集扩张速度的平方,反之亦然。
为了衡量这个"指数",定义:
[ C(A) = \frac{\log \sigma(A)}{\log \delta(A)} ]
经典不等式给出:(C(A) \leq 2)。看似简单的问题来了:2只是一个宽松的上界,还是可以无限逼近的最优指数?
半个多世纪,无人能答。
1.3 渐进突破的历史长廊
| 年份 | 构造者 | 指数 (C(A)) | 方法 |
|---|---|---|---|
| 1969 | Marica | 1.0290 | 早期构造 |
| 1973 | Freiman & Pigarev | 1.0598 | 组合方法改进 |
| 2013 | Penman & Wells | 1.1259 | 精细构造 |
| 2025.11 | AlphaEvolve (DeepMind) | 1.1219 | 进化搜索 |
| 2026 | LoongFlow (Baidu) | 1.13+ | 智能体搜索 |
| 2026 | SimpleTES (Stanford/Beijing) | 1.1440 | 精确评估+搜索 |
| 2026 | SimpleTES post-training | 1.1449 | 微调优化 |
| 2026 | Codex (GPT-5.5) + 人类引导 | 1.2851 | 交互式搜索 |
| 2026.7 | Hyra + Hy3 (Tencent) | → 2(上确界) | 十二进制结构 + CRT |
表中的对比令人震撼:AlphaEvolve、GPT-5.5、Claude Fable 5……所有闭源巨头的努力,都在数值上徘徊于1.1至1.28之间。而Hyra给出了一个构造族,证明 (C(A)) 可以无限逼近2。
二、Hyra的架构:科研智能体的递归自我改进
2.1 设计哲学:The Bitter Lesson
Hyra的设计哲学源于Rich Sutton的经典文章《The Bitter Lesson》(苦涩的教训):框架尽可能轻量,给Agent留足动作空间,让算力和搜索本身成为改进的驱动力。
2.2 核心架构
┌─────────────────────────────────────────────────────────────┐
│ Hyra Research Agent │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Context Agent (上下文Agent) │ │
│ │ ┌────────────────────────────────────────────────┐ │ │
│ │ │ Experience Bank (经验库 EB) │ │ │
│ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │
│ │ │ │ 方案 #1 │ │ 方案 #2 │ │ 方案 #N │ ... │ │ │
│ │ │ │ 代码/日志│ │ 代码/日志│ │ 代码/日志│ │ │ │
│ │ │ │ 评估分数 │ │ 评估分数 │ │ 评估分数 │ │ │ │
│ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │
│ │ └────────────────────────────────────────────────┘ │ │
│ │ ↓ │ │
│ │ Inspiration (灵感) │ │
│ │ ┌──────────────────┐ │ │
│ │ │ 任务队列 (Queue) │ │ │
│ │ └────────┬─────────┘ │ │
│ └───────────────────────┼──────────────────────────────┘ │
│ │ │
│ ┌───────────────────────┼──────────────────────────────┐ │
│ │ Proposal Agent 池 (提案Agent) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Agent #1 │ │ Agent #2 │ │ Agent #N │ │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │
│ │ │ │ │ │ │
│ │ ▼ ▼ ▼ │ │
│ │ ┌──────────────────────────────────────┐ │ │
│ │ │ 隔离沙箱 (Isolated Sandbox) │ │ │
│ │ │ solve.sh → 执行 → 评估 → 回传 │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 信号量控制并发 | 异步生产者-消费者管线 │
│ 无评估器时: 双层循环 (生成评估器 → 改进方案 → 升级评估器) │
└─────────────────────────────────────────────────────────────┘
2.3 关键组件详解
Context Agent(上下文Agent):
- 维护一个经验库(Experience Bank, EB),记录所有方案及其评估结果
- 从EB中提取素材,合成为"灵感(Inspiration)“上下文
- 不断向任务队列推送新的探索方向
Proposal Agent池(提案Agent):
- 多个Agent从队列中并行获取灵感
- 每个Agent独立提出方案,写入
solution/目录 - 入口统一为
solve.sh,在隔离沙箱中执行评估
双层循环机制: 当任务连评估器都没有时,Hyra自动升级为双层循环:
- 内层循环:用初始评估器反复改进方案
- 外层循环:根据经验库积累的结果改进评估器本身,降低reward hacking风险
2.4 在数学问题上的突破路径
在加法组合学问题上,Hyra的探索经历了两个阶段:
阶段一:有限搜索(数值优化) Hyra先在SimpleTES框架下进行有限集合的显式搜索,将最好结果从约1.14提升到1.21。但此时遇到了瓶颈——集合规模增长导致计算和内存成本急剧上升,且数值结果无法自然过渡到可证明的渐近构造。
阶段二:自然语言构造(数学发现) 研究团队改变了策略——允许Agent用自然语言提出数学构造和论证,而非仅生成数字列表。使用LLM Judge(GPT-5.6 Sol)为探索过程提供反馈,但由Hyra自主提出核心思路。
约24小时后,Hyra提出了论文的核心构造:利用十二进制数字结构控制差集大小,结合循环群上的对称加法基与中国剩余定理,使和集以接近平方的速度扩张。
三、数学构造深度解析:十二进制与CRT
3.1 构造的直觉
Hyra的核心洞察是:要控制差集的大小,需要一种"稀疏"的表示方式,使得不同元素之间的差倾向于落在不同"位"上,从而产生大量重复;而和集则利用中国剩余定理,在不同模数下组合出大量不同的结果。
3.2 四层嵌套结构
整个构造分为四层,逐层递进:
层1: 十二进制数字部件
┌─────────────────────────────────────────┐
│ 每个数字 d ∈ {0,1,...,11} │
│ 用长度为 K 的二进制串表示: │
│ B_d = {2^{12K} · (12·i + d)} │
│ 其中 i 在某个范围内取值 │
│ 性质: 同数字的差集中在低位区间 │
└─────────────────────────────────────────┘
↓
层2: 进位自动机估计差集衰减
┌─────────────────────────────────────────┐
│ 跨数字的差需要考虑"借位"效应 │
│ 通过十二进制进位自动机 │
│ 精确估计差集大小: |A-A| ≈ O(|A|) │
│ 即差集扩张 δ(A) 被有效控制 │
└─────────────────────────────────────────┘
↓
层3: 循环群对称加法基
┌─────────────────────────────────────────┐
│ 在循环群 Z_{M} 上构造对称加法基 │
│ B = {±g_1, ±g_2, ..., ±g_t} │
│ 使得 k-fold 和集快速填充整个群 │
│ 即 |k·B| ≈ min(M, (2t+1)^k) │
└─────────────────────────────────────────┘
↓
层4: 中国剩余定理(CRT)拼接
┌─────────────────────────────────────────┐
│ 选取互质的模数 M_1, M_2, ..., M_r │
│ 在每个模数下构造加法基,通过CRT组合 │
│ 使得和集以接近平方的速度扩张 │
│ σ(A) ≈ δ(A)^{2-ε} 对任意 ε>0 成立 │
└─────────────────────────────────────────┘
3.3 十二进制结构:为什么是12?
为什么是十二进制,而不是十进制或二进制?这是Hyra的关键选择。
数学直觉:十二进制(base-12)的因子分解为 (12 = 2^2 \times 3),提供了比二进制(只有因子2)更丰富的进位结构。在差集的分析中,需要利用进位/借位来精确控制不同数字之间的差的数量。
具体来说,设集合 (A_K) 中的元素用十二进制表示:
[ A_K = \left{ \sum_{j=0}^{L-1} d_j \cdot 12^{j} ;\middle|; d_j \in D \subset {0,1,\ldots,11} \right} ]
其中 (D) 是一个精心选择的数字子集,使得:
- 两个数字之差 (d_i - d_j) 在十二进制下产生特定的"借位模式”
- 这些模式导致差的集合大小远小于和的集合大小
3.4 中国剩余定理(CRT)的应用
中国剩余定理在构造中扮演了关键角色:
定理(中国剩余定理):设 (n_1, n_2, \ldots, n_k) 两两互素,则对任意整数 (a_1, a_2, \ldots, a_k),方程组 [ x \equiv a_i \pmod{n_i}, \quad i=1,2,\ldots,k ] 在模 (N = n_1 n_2 \cdots n_k) 下有唯一解。
Hyra的构造通过CRT将多个循环群上的加法基组合起来:
构造步骤:
- 选取互质的模数 (M_1, M_2, \ldots, M_r)
- 在每个循环群 (\mathbb{Z}_{M_i}) 上构造对称加法基
- 通过CRT将每个元素唯一映射到 (\mathbb{Z}_{M_1 M_2 \cdots M_r})
- 整体集合的和集大小约等于各分量和集大小的乘积
这一设计使得和集扩张速度接近平方,而差集由于十二进制结构的控制,扩张速度被限制在近似线性。
四、代码实现
4.1 Python实现:十二进制构造与CRT组合
"""
Hyra Core Construction: Base-12 Digit Structure with CRT
实现和差集构造的核心算法
"""
import math
from typing import List, Set, Tuple
from itertools import product
import numpy as np
def chinese_remainder_theorem(remainders: List[int], moduli: List[int]) -> int:
"""
中国剩余定理实现
给定同余式组 x ≡ remainders[i] (mod moduli[i]),求解 x
"""
M = 1
for m in moduli:
M *= m
result = 0
for a_i, m_i in zip(remainders, moduli):
M_i = M // m_i
# 计算 M_i 在模 m_i 下的逆元
inv = pow(M_i, -1, m_i)
result = (result + a_i * M_i * inv) % M
return result
def construct_base12_digit_set(K: int, digit_subset: List[int]) -> List[int]:
"""
构造十二进制数字部件
参数:
K: 每个数字的表示长度
digit_subset: 允许使用的十二进制数字子集
返回:
构造的整数集合(列表形式)
"""
if not digit_subset:
digit_subset = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
# 生成所有可能的数字序列
# 每个位置从 digit_subset 中选择一个数字
# 注意:这里为了演示,使用简化的构造
base = 12
result = []
# 实际构造中,数字序列有特定的约束条件
# 此处简化展示核心思想
for digits in product(digit_subset, repeat=K):
value = 0
for i, d in enumerate(digits):
value += d * (base ** i)
result.append(value)
return result
def compute_sumset(A: Set[int]) -> Set[int]:
"""计算和集 A+A"""
result = set()
for a in A:
for b in A:
result.add(a + b)
return result
def compute_diffset(A: Set[int]) -> Set[int]:
"""计算差集 A-A"""
result = set()
for a in A:
for b in A:
result.add(a - b)
return result
def compute_exponent(A: Set[int]) -> float:
"""
计算 C(A) = log σ(A) / log δ(A)
其中 σ(A) = |A+A|/|A|, δ(A) = |A-A|/|A|
"""
n = len(A)
sumset = compute_sumset(A)
diffset = compute_diffset(A)
sigma = len(sumset) / n
delta = len(diffset) / n
if sigma <= 1 or delta <= 1:
return 0.0
return math.log(sigma) / math.log(delta)
def construct_crt_additive_basis(moduli: List[int], basis_size: int) -> Tuple[List[int], List[int]]:
"""
使用CRT构造对称加法基
参数:
moduli: 互质的模数列表
basis_size: 每个循环群上的基大小
返回:
(crt_elements, group_sizes)
"""
# 在每个循环群 Z_{m_i} 上构造对称加法基
group_bases = []
for m in moduli:
# 选取对称基: ±1, ±2, ..., ±basis_size
base = []
for i in range(1, basis_size + 1):
base.append(i % m)
base.append((-i) % m)
group_bases.append(base)
# 通过CRT组合
crt_elements = []
for combo in product(*group_bases):
element = chinese_remainder_theorem(list(combo), moduli)
crt_elements.append(element)
return crt_elements, moduli
def construct_hyra_family(K: int, epsilon: float) -> List[int]:
"""
构造Hyra论文中的集合族 A_K
参数:
K: 规模参数(越大越接近2)
epsilon: 目标精度
返回:
构造的集合 A_K
"""
# 十二进制数字部件
base = 12
# 选择数字子集: 控制差集大小的关键
# 使用特定模式的数字使得差集较小
digit_subset = [0, 1, 4, 5, 8, 9] # 精心选择的子集
core = construct_base12_digit_set(K, digit_subset)
# CRT 模数选择
# 使用互质模数以最大化组合效果
moduli = [2 * K + 1, 3 * K + 1, 5 * K + 1]
# 确保模数互质
moduli = [m for m in moduli if all(
math.gcd(m, m2) == 1 for m2 in moduli if m2 != m
)]
# 构造加法基
basis_size = int(math.log(K) * 2)
crt_elements, _ = construct_crt_additive_basis(moduli, basis_size)
# 组合核心构造与CRT基
# 实际论文中使用更复杂的组合方式
result = []
scale = 12 ** (K + 1)
for c in core:
for b in crt_elements[:min(len(crt_elements), K)]:
result.append(c + scale * b)
return result
def demonstrate_convergence(max_K: int = 6) -> None:
"""
演示 C(A_K) 随 K 增大趋近于2
"""
print(f"{'K':>3} | {'|A|':>8} | {'|A+A|':>10} | {'|A-A|':>10} | {'C(A)':>10}")
print("-" * 50)
for K in range(1, max_K + 1):
A = construct_hyra_family(K, 0.01)
A_set = set(A[:min(len(A), 2000)]) # 控制规模用于演示
C = compute_exponent(A_set)
sumset = compute_sumset(A_set)
diffset = compute_diffset(A_set)
print(f"{K:>3} | {len(A_set):>8} | {len(sumset):>10} | {len(diffset):>10} | {C:>10.6f}")
if __name__ == "__main__":
# 演示构造
A_small = [1, 2, 4, 8, 16, 32]
print(f"示例集合 A = {A_small}")
print(f"|A| = {len(A_small)}")
print(f"|A+A| = {len(compute_sumset(set(A_small)))}")
print(f"|A-A| = {len(compute_diffset(set(A_small)))}")
print(f"C(A) = {compute_exponent(set(A_small)):.6f}")
print()
print("Convergence demonstration (simplified):")
demonstrate_convergence(5)
4.2 Go实现:高性能和差集计算
// hyra_construction.go
// Hyra核心构造的高性能Go实现
// 用于大规模集合的和差集计算
package main
import (
"fmt"
"math"
"math/big"
)
// ChineseRemainder 实现中国剩余定理
func ChineseRemainder(remainders []int64, moduli []int64) int64 {
M := int64(1)
for _, m := range moduli {
M *= m
}
result := int64(0)
for i, a := range remainders {
Mi := M / moduli[i]
// 计算 Mi 在模 moduli[i] 下的逆元
inv := modInverse(Mi, moduli[i])
result = (result + a*Mi*inv) % M
}
return result
}
// modInverse 计算模逆元 (扩展欧几里得算法)
func modInverse(a, m int64) int64 {
g, x, _ := extendedGCD(a, m)
if g != 1 {
return 0 // 逆元不存在
}
return (x%m + m) % m
}
// extendedGCD 扩展欧几里得算法
func extendedGCD(a, b int64) (int64, int64, int64) {
if b == 0 {
return a, 1, 0
}
g, x1, y1 := extendedGCD(b, a%b)
return g, y1, x1 - (a/b)*y1
}
// Base12Digit 十二进制数字结构
type Base12Digit struct {
Digits []int8 // 每个位置的值 0-11
Length int
}
// NewBase12Number 从整数创建十二进制表示
func NewBase12Number(value int64) *Base12Digit {
digits := make([]int8, 0)
for value > 0 {
digits = append(digits, int8(value%12))
value /= 12
}
return &Base12Digit{
Digits: digits,
Length: len(digits),
}
}
// ToInt64 将十二进制表示转回整数
func (b *Base12Digit) ToInt64() int64 {
result := int64(0)
base := int64(1)
for _, d := range b.Digits {
result += int64(d) * base
base *= 12
}
return result
}
// Subtract 计算十二进制差(带借位分析)
func (b *Base12Digit) Subtract(other *Base12Digit) (*Base12Digit, int) {
maxLen := b.Length
if other.Length > maxLen {
maxLen = other.Length
}
result := make([]int8, maxLen)
borrowCount := 0
borrow := int8(0)
for i := 0; i < maxLen; i++ {
a := int8(0)
if i < b.Length {
a = b.Digits[i]
}
bb := int8(0)
if i < other.Length {
bb = other.Digits[i]
}
diff := a - bb - borrow
if diff < 0 {
diff += 12
borrow = 1
borrowCount++
} else {
borrow = 0
}
result[i] = diff
}
return &Base12Digit{Digits: result, Length: maxLen}, borrowCount
}
// SumsetCalculator 和差集计算器
type SumsetCalculator struct {
Elements []int64
ElementSet map[int64]bool
SumCache map[int64]bool
DiffCache map[int64]bool
}
// NewSumsetCalculator 创建新的计算器
func NewSumsetCalculator(elements []int64) *SumsetCalculator {
elementSet := make(map[int64]bool)
for _, e := range elements {
elementSet[e] = true
}
return &SumsetCalculator{
Elements: elements,
ElementSet: elementSet,
SumCache: make(map[int64]bool),
DiffCache: make(map[int64]bool),
}
}
// ComputeSumset 计算和集
func (sc *SumsetCalculator) ComputeSumset() []int64 {
for _, a := range sc.Elements {
for _, b := range sc.Elements {
sc.SumCache[a+b] = true
}
}
result := make([]int64, 0, len(sc.SumCache))
for k := range sc.SumCache {
result = append(result, k)
}
return result
}
// ComputeDiffset 计算差集
func (sc *SumsetCalculator) ComputeDiffset() []int64 {
for _, a := range sc.Elements {
for _, b := range sc.Elements {
sc.DiffCache[a-b] = true
}
}
result := make([]int64, 0, len(sc.DiffCache))
for k := range sc.DiffCache {
result = append(result, k)
}
return result
}
// ComputeExponent 计算 C(A) = log σ(A) / log δ(A)
func (sc *SumsetCalculator) ComputeExponent() float64 {
n := float64(len(sc.Elements))
sumset := sc.ComputeSumset()
diffset := sc.ComputeDiffset()
sigma := float64(len(sumset)) / n
delta := float64(len(diffset)) / n
if sigma <= 1 || delta <= 1 {
return 0
}
return math.Log(sigma) / math.Log(delta)
}
// CRTAdditiveBasis CRT加法基构造
type CRTAdditiveBasis struct {
Moduli []int64
Bases [][]int64
Combined []int64
}
// NewCRTAdditiveBasis 创建CRT加法基
func NewCRTAdditiveBasis(moduli []int64, basisSize int) *CRTAdditiveBasis {
cb := &CRTAdditiveBasis{
Moduli: moduli,
Bases: make([][]int64, len(moduli)),
}
// 在每个循环群上构造对称加法基
for i, m := range moduli {
base := make([]int64, 0, 2*basisSize)
for j := int64(1); j <= int64(basisSize); j++ {
base = append(base, j%m)
base = append(base, (-j)%m)
}
cb.Bases[i] = base
}
// 通过CRT组合
cb.combine()
return cb
}
// combine 通过CRT组合所有基
func (cb *CRTAdditiveBasis) combine() {
// 递归组合所有可能
cb.combineRecursive(0, make([]int64, len(cb.Moduli)))
}
func (cb *CRTAdditiveBasis) combineRecursive(depth int, current []int64) {
if depth == len(cb.Moduli) {
element := ChineseRemainder(current, cb.Moduli)
cb.Combined = append(cb.Combined, element)
return
}
for _, v := range cb.Bases[depth] {
current[depth] = v
cb.combineRecursive(depth+1, current)
}
}
// HyraFamily 构造Hyra集合族
func HyraFamily(K int, epsilon float64) []int64 {
// 十二进制数字子集
digitSubset := []int8{0, 1, 4, 5, 8, 9}
// 生成十二进制核心
core := make([]int64, 0)
generateBase12(&core, digitSubset, K, 0, 0)
// CRT模数
moduli := []int64{
int64(2*K + 1),
int64(3*K + 1),
}
// 确保互质
if gcd(moduli[0], moduli[1]) != 1 {
moduli[1] = int64(5*K + 1)
}
basisSize := int(math.Log(float64(K)) * 2)
if basisSize < 1 {
basisSize = 1
}
crtBasis := NewCRTAdditiveBasis(moduli, basisSize)
// 组合
scale := int64(math.Pow(12, float64(K+1)))
result := make([]int64, 0)
for _, c := range core {
crtLen := len(crtBasis.Combined)
limit := crtLen
if K < limit {
limit = K
}
for i := 0; i < limit; i++ {
result = append(result, c+scale*crtBasis.Combined[i])
}
}
return result
}
// generateBase12 递归生成十二进制数字序列
func generateBase12(result *[]int64, digits []int8, length int, pos int, current int64) {
if pos == length {
*result = append(*result, current)
return
}
for _, d := range digits {
generateBase12(result, digits, length, pos+1, current*12+int64(d))
}
}
func gcd(a, b int64) int64 {
for b != 0 {
a, b = b, a%b
}
return a
}
// BigIntSumset 大整数和集计算(用于超大集合)
func BigIntSumset(elements []*big.Int) []*big.Int {
seen := make(map[string]bool)
result := make([]*big.Int, 0)
for _, a := range elements {
for _, b := range elements {
sum := new(big.Int).Add(a, b)
key := sum.String()
if !seen[key] {
seen[key] = true
result = append(result, sum)
}
}
}
return result
}
func main() {
fmt.Println("=== Hyra Core Construction: Base-12 + CRT ===")
fmt.Println()
// 演示小规模构造
K := 3
A := HyraFamily(K, 0.01)
fmt.Printf("K=%d, |A|=%d\n", K, len(A))
fmt.Printf("前10个元素: ")
for i := 0; i < 10 && i < len(A); i++ {
fmt.Printf("%d ", A[i])
}
fmt.Println()
// 计算和差集指数
calc := NewSumsetCalculator(A)
exponent := calc.ComputeExponent()
fmt.Printf("C(A) = %.6f\n", exponent)
// 十二进制减法演示
fmt.Println("\n--- Base-12 Subtraction Analysis ---")
a := NewBase12Number(157) // 157 = 111 (base 12)
b := NewBase12Number(85) // 85 = 71 (base 12)
fmt.Printf("157 in base-12: %v\n", a.Digits)
fmt.Printf("85 in base-12: %v\n", b.Digits)
diff, borrows := a.Subtract(b)
fmt.Printf("Difference: %v, Borrow count: %d\n", diff.Digits, borrows)
fmt.Printf("Diff value: %d\n", diff.ToInt64())
// 大整数演示
fmt.Println("\n--- Big Integer Sumset ---")
bigElems := []*big.Int{
big.NewInt(1),
big.NewInt(12),
big.NewInt(144),
big.NewInt(1728),
}
sumset := BigIntSumset(bigElems)
fmt.Printf("BigInt sumset size: %d\n", len(sumset))
}
4.3 验证脚本:检查构造的正确性
"""
验证脚本:检查Hyra构造的数学性质
"""
import sys
import math
import random
from typing import Set, List, Tuple
def verify_sum_diff_inequality(A: Set[int]) -> bool:
"""
验证和差集不等式 σ(A)^{1/2} ≤ δ(A) ≤ σ(A)^2
"""
n = len(A)
sumset = set()
diffset = set()
for a in A:
for b in A:
sumset.add(a + b)
diffset.add(a - b)
sigma = len(sumset) / n
delta = len(diffset) / n
lower_bound = math.sqrt(sigma) - 1e-10
upper_bound = sigma ** 2 + 1e-10
return lower_bound <= delta <= upper_bound
def check_monotonic_convergence(constructor, K_values: List[int]) -> List[float]:
"""
检查 C(A_K) 是否随 K 单调递增趋近于2
"""
exponents = []
for K in K_values:
A = constructor(K)
A_set = set(A[:min(len(A), 5000)])
C = compute_exponent(A_set)
exponents.append(C)
print(f"K={K}: |A|={len(A_set)}, C(A)={C:.6f}")
# 检查单调性
for i in range(1, len(exponents)):
if exponents[i] < exponents[i-1] - 0.01:
print(f"WARNING: Non-monotonic at K={K_values[i]}")
return exponents
def compute_exponent(A: Set[int]) -> float:
"""计算 C(A)"""
n = len(A)
sumset = set()
diffset = set()
for a in A:
for b in A:
sumset.add(a + b)
diffset.add(a - b)
sigma = len(sumset) / n
delta = len(diffset) / n
if sigma <= 1 or delta <= 1:
return 0.0
return math.log(sigma) / math.log(delta)
def random_search_benchmark(trials: int = 1000, max_size: int = 100) -> float:
"""
随机搜索基准测试:随机集合能达到的最好指数
"""
best = 0.0
best_set = None
for t in range(trials):
size = random.randint(10, max_size)
A = set(random.sample(range(0, 10000), size))
C = compute_exponent(A)
if C > best:
best = C
best_set = A
print(f"随机搜索 {trials} 次最佳结果: C(A) = {best:.6f}")
return best
def main():
print("=" * 60)
print("Hyra 构造正确性验证")
print("=" * 60)
# 测试1: 基本不等式验证
print("\n[测试1] 和差集不等式验证")
test_sets = [
{1, 2, 3, 4, 5},
{1, 3, 5, 7, 9},
{1, 2, 4, 8, 16},
set(range(0, 50, 3)),
]
for i, A in enumerate(test_sets):
ok = verify_sum_diff_inequality(A)
C = compute_exponent(A)
sigma = len(set(a+b for a in A for b in A)) / len(A)
delta = len(set(a-b for a in A for b in A)) / len(A)
print(f" 集合{i+1}: C={C:.6f}, σ={sigma:.4f}, δ={delta:.4f}, 不等式={'✓' if ok else '✗'}")
# 测试2: 随机搜索对比
print("\n[测试2] 随机搜索基准")
random_search_benchmark(500, 50)
# 测试3: 十二进制结构分析
print("\n[测试3] 十二进制差集分析")
from collections import Counter
# 构造同一数字和不同数字的差分布
base = 12
digits = [0, 1, 4, 5, 8, 9]
same_diff = Counter()
cross_diff = Counter()
for d1 in digits:
for d2 in digits:
diff = (d1 - d2) % base
if d1 == d2:
same_diff[diff] += 1
else:
cross_diff[diff] += 1
print(f" 同一数字的差分布: {len(same_diff)} 种不同值")
print(f" 不同数字的差分布: {len(cross_diff)} 种不同值")
print(f" 差集压缩比: {len(cross_diff) / (len(digits)**2):.4f}")
print("\n" + "=" * 60)
print("验证完成")
print("=" * 60)
if __name__ == "__main__":
main()
五、Hyra vs OpenAI Astra:开源与闭源的科研范式对决
5.1 对比总览
| 维度 | Hyra (腾讯混元) | Astra (OpenAI) |
|---|---|---|
| 基础模型 | Hy3 (295B MoE, 21B active) | 未公开(内部版本) |
| 开源状态 | ✅ Apache 2.0 完全开源 | ❌ 闭源,仅有限访问 |
| 模型可部署 | ✅ 可自托管,8 GPU即可运行 | ❌ 仅OpenAI云 |
| 数学成果 | 1个核心问题(和差集上确界) | 10个问题(含Lean证明) |
| 成果形式 | 构造族 + 完整证明 + Lean 4形式化 | 10个独立证明 + Lean 4形式化 |
| 研究开销 | 约24小时单Agent运行 | 约$2,000 Token费用 |
| 第三方验证 | Thomas Bloom确认结果正确 | 待同行评审 |
| Agent署名 | ✅ 列为第三作者(Lin, Li, and Hyra) | ❌ 未列作者 |
| 研究范式 | 搜索→自然语言构造→人类验证 | 多Agent编排→证明生成→形式化 |
5.2 关键差异:为什么Hyra的突破更具范式意义
Thomas Bloom——曼彻斯特大学数学家,以对AI数学成果的"吹毛求疵"著称——在审阅Hyra的成果后给出了明确结论:结果正确。 更令人瞩目的是,他将Hyra列为论文的第三作者(“Lin, Li, and Hyra”),这在数学预印本中极为罕见。
Bloom还进一步指出,同样的方法可以推广到整个类别的和差组合问题,并否定了数学家Ruzi关于能否将不等式 (\delta \leq \sigma^2) 改进至少对数因子的老问题。
相比之下,Astra的10个数学成果虽然数量更多,但面临的核心质疑是:模型不可复现、不可审计、不可独立部署。 正如Leiden Declaration(国际数学联合会背书)所要求的——AI辅助数学需要披露所用工具、计算资源,并由人类对正确性负责。Astra完全不满足这一标准。
5.3 开源模型的"反超"时刻
Hy3的Apache 2.0开源协议意味着:
- ✅ 任何人都可以下载权重(295B参数,21B激活)
- ✅ 可以在自己的8 GPU集群上运行
- ✅ 可以审计、修改、重新分发
- ✅ 商用友好,无地域限制
- ❌ API价格仅$0.14/$0.58每百万token(输入/输出)
而Astra依然深锁在OpenAI的围墙花园中。
这标志着一个重要转折:开源模型在科研前沿的能力正在快速逼近(甚至局部超越)闭源产品。 闭源模型曾经引以为傲的"数学推理能力"优势,正在被开源社区以更快的速度追赶。
六、科研智能体的新范式:AI for Science的下一阶段
6.1 Hyra的启示
Hyra的成功展示了科研智能体的一种新范式:
从"搜索"到"发现"的跃迁:Hyra并非简单地搜索已有知识,而是通过自然语言提出新的数学构造——这是从"工具"到"合作者"的质变。
开源模型+Agent框架的协同:Hy3的MoE架构(192专家,top-8路由)提供了强大的推理能力,而Hyra的递归自我改进框架在此基础上叠加了"提出-验证-迭代"的科研循环。
形式化验证的闭环:Lean 4形式化证明为AI的数学发现提供了可验证的"保险丝"——人类数学家可以信任结果,因为每一步推理都经过机器验证。
6.2 姚顺雨的AI for Science招募
腾讯首席AI科学家姚顺雨在Hyra成果公布后,立即在社交媒体上公开招募AI for Science方向人才。他的"JD"只有一张图——Hyra的科研成绩单:
- 55道数学开放问题中,刷新了29道的已知最好结果
- 从百年太阳黑子数据中发现预测公式(R²=0.77)
- 用15个参数实现10位数加法(较此前纪录减少58.3%)
- 自研量子比特路由算法(较经典方案提效44.4%)
- 生成PARP1候选分子(模拟评分超过已上市药物奥拉帕利)
这组数据清晰地表明:腾讯混元瞄准的,是AI科研的next level——全自动化。 让AI自己提出方案、运行实验、读取结果,再继续迭代。
6.3 未来展望
Hyra和Hy3的成功,预示着一个新的科研范式正在形成:
传统科研: 人类提出问题 → 人类设计实验 → 人类分析结果 → 人类得出结论
↓
AI辅助科研: 人类提出问题 → AI搜索/优化 → 人类分析 → 人类得出结论
↓
科研智能体: 人类设定目标 → Agent自主探索 → 验证 → 人类确认 → 知识沉淀
↓
未来异构: 多Agent协作 → 跨学科发现 → 自动验证 → 自我迭代 → 知识进化
七、结论
腾讯Hyra基于开源Hy3模型攻克加法组合学50年难题,是2026年AI领域最具有里程碑意义的事件之一。它的意义不仅在于解决了一道数学难题,更在于证明了:
- 开源模型可以在最前沿的基础科研中与闭源模型竞争——甚至在某些维度上超越
- 科研智能体的"递归自我改进"范式切实可行——从数值搜索到数学构造,Agent可以完成质的飞跃
- 十二进制结构与中国剩余定理的组合,证明了AI能够发现人类数学家未曾想到的优美构造
正如Thomas Bloom所言:“Hyra的贡献是真实且可验证的。” 当AI开始以合作者而非工具的身份参与数学研究,我们正在见证科学研究方式的根本性变革。
参考链接:
- 论文:https://arxiv.org/abs/2607.27199
- Lean 4形式化证明:https://github.com/linhaowei1/sum-diff-proof
- Hy3模型:https://github.com/Tencent-Hunyuan/Hy3
- Hyra发布:https://hy.tencent.com/research/hyra
- Thomas Bloom点评:https://erdosproblems.com