腾讯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))方法
1969Marica1.0290早期构造
1973Freiman & Pigarev1.0598组合方法改进
2013Penman & Wells1.1259精细构造
2025.11AlphaEvolve (DeepMind)1.1219进化搜索
2026LoongFlow (Baidu)1.13+智能体搜索
2026SimpleTES (Stanford/Beijing)1.1440精确评估+搜索
2026SimpleTES post-training1.1449微调优化
2026Codex (GPT-5.5) + 人类引导1.2851交互式搜索
2026.7Hyra + 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自动升级为双层循环:

  1. 内层循环:用初始评估器反复改进方案
  2. 外层循环:根据经验库积累的结果改进评估器本身,降低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将多个循环群上的加法基组合起来:

构造步骤

  1. 选取互质的模数 (M_1, M_2, \ldots, M_r)
  2. 在每个循环群 (\mathbb{Z}_{M_i}) 上构造对称加法基
  3. 通过CRT将每个元素唯一映射到 (\mathbb{Z}_{M_1 M_2 \cdots M_r})
  4. 整体集合的和集大小约等于各分量和集大小的乘积

这一设计使得和集扩张速度接近平方,而差集由于十二进制结构的控制,扩张速度被限制在近似线性。


四、代码实现

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的成功展示了科研智能体的一种新范式:

  1. 从"搜索"到"发现"的跃迁:Hyra并非简单地搜索已有知识,而是通过自然语言提出新的数学构造——这是从"工具"到"合作者"的质变。

  2. 开源模型+Agent框架的协同:Hy3的MoE架构(192专家,top-8路由)提供了强大的推理能力,而Hyra的递归自我改进框架在此基础上叠加了"提出-验证-迭代"的科研循环。

  3. 形式化验证的闭环: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领域最具有里程碑意义的事件之一。它的意义不仅在于解决了一道数学难题,更在于证明了:

  1. 开源模型可以在最前沿的基础科研中与闭源模型竞争——甚至在某些维度上超越
  2. 科研智能体的"递归自我改进"范式切实可行——从数值搜索到数学构造,Agent可以完成质的飞跃
  3. 十二进制结构与中国剩余定理的组合,证明了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