Tencent Hyra Open-Source Model Solves 50-Year Math Problem: Deep Dive into Additive Combinatorics, Base-12 Structure, and the New Research Agent Paradigm

Introduction

On July 29, 2026, an arXiv preprint quietly appeared with an unassuming title — “Settling the Optimal Exponent Relating Sumsets and Difference Sets” — yet it immediately electrified both the mathematics and AI communities. Authors Haowei Lin (Tencent Hunyuan) and Shanda Li (Carnegie Mellon University) announced that a core open problem in additive combinatorics, unresolved for over half a century, had been definitively solved.

What makes this achievement even more remarkable is that the key construction was proposed by Hyra (Hunyuan Research Agent) — a research AI agent built on Tencent’s Hy3 model (295B total / 21B active parameters, MoE architecture, Apache 2.0 license, open-sourced July 6, 2026). In approximately 24 hours of autonomous exploration, Hyra found a critical path that human mathematicians had been unable to reach for more than fifty years.

This is not merely the resolution of a mathematical problem. It is a landmark moment demonstrating that open-source models can compete with — and in some dimensions surpass — closed-source products at the frontier of fundamental scientific research.


1. The Problem: A Holy Grail of Additive Combinatorics

1.1 Sumsets and Difference Sets

Additive combinatorics investigates the structural properties of integer sets under addition. The fundamental question is: given a finite nonempty integer set (A), define:

  • Sumset: (A+A = {a+b \mid a,b \in A})
  • Difference Set: (A-A = {a-b \mid a,b \in A})

Since duplicate results are counted only once, the set “expands” under addition and subtraction. We measure this expansion with two metrics:

[ \sigma(A) = \frac{|A+A|}{|A|}, \quad \delta(A) = \frac{|A-A|}{|A|} ]

1.2 The Classical Inequality and a Half-Century of Uncertainty

The classical sum-difference inequalities provide an elegant constraint:

[ \sigma(A)^{1/2} \leq \delta(A) \leq \sigma(A)^2 ]

To quantify the “exponent,” we define:

[ C(A) = \frac{\log \sigma(A)}{\log \delta(A)} ]

The classical inequality yields (C(A) \leq 2). The deceptively simple question: Is 2 a loose upper bound, or the optimal exponent that can be arbitrarily approached?

For more than half a century, no one knew.

1.3 Historical Timeline of Progress

YearAuthorsExponent (C(A))Method
1969Marica1.0290Early construction
1973Freiman & Pigarev1.0598Improved combinatorial method
2013Penman & Wells1.1259Refined explicit construction
2025.11AlphaEvolve (DeepMind)1.1219Evolutionary search
2026LoongFlow (Baidu)1.13+Agent-based search
2026SimpleTES (Stanford/Beijing)1.1440Exact evaluator + search
2026SimpleTES post-training1.1449Fine-tuning optimization
2026Codex (GPT-5.5) + human guidance1.2851Interactive search
2026.7Hyra + Hy3 (Tencent)→ 2 (supremum)Base-12 structure + CRT

The comparison is startling: AlphaEvolve, GPT-5.5, Claude Fable 5 — all closed-source giants — were stuck in the 1.1–1.28 range. Hyra produced a construction family proving that (C(A)) can approach 2 arbitrarily closely.


2. Hyra Architecture: Recursive Self-Improvement for Scientific Discovery

2.1 Design Philosophy: The Bitter Lesson

Hyra’s design philosophy derives from Rich Sutton’s classic essay “The Bitter Lesson”: keep the framework as lightweight as possible, give the agent maximum action space, and let compute and search drive improvement.

2.2 Core Architecture

┌─────────────────────────────────────────────────────────────┐
│                    Hyra Research Agent                        │
│                                                               │
│  ┌──────────────────────────────────────────────────────┐    │
│  │              Context Agent                             │    │
│  │   ┌────────────────────────────────────────────────┐ │    │
│  │   │         Experience Bank (EB)                    │ │    │
│  │   │  ┌──────────┐ ┌──────────┐ ┌──────────┐       │ │    │
│  │   │  │ Sol #1   │ │ Sol #2   │ │ Sol #N   │ ...   │ │    │
│  │   │  │code/log  │ │code/log  │ │code/log  │       │ │    │
│  │   │  │ score    │ │ score    │ │ score    │       │ │    │
│  │   │  └──────────┘ └──────────┘ └──────────┘       │ │    │
│  │   └────────────────────────────────────────────────┘ │    │
│  │                     ↓                                 │    │
│  │              Inspiration Generator                    │    │
│  │              ┌──────────────────┐                     │    │
│  │              │   Task Queue     │                     │    │
│  │              └────────┬─────────┘                     │    │
│  └───────────────────────┼──────────────────────────────┘    │
│                          │                                    │
│  ┌───────────────────────┼──────────────────────────────┐    │
│  │         Proposal Agent Pool                           │    │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐             │    │
│  │  │Agent #1  │ │Agent #2  │ │Agent #N  │             │    │
│  │  └────┬─────┘ └────┬─────┘ └────┬─────┘             │    │
│  │       │            │            │                     │    │
│  │       ▼            ▼            ▼                     │    │
│  │  ┌──────────────────────────────────────┐             │    │
│  │  │    Isolated Sandbox                   │             │    │
│  │  │  solve.sh → execute → eval → return  │             │    │
│  │  └──────────────────────────────────────┘             │    │
│  └──────────────────────────────────────────────────────┘    │
│                                                               │
│  Semaphore-controlled concurrency | Async producer-consumer   │
│  Dual-loop mode when no evaluator exists                     │
└─────────────────────────────────────────────────────────────┘

2.3 Key Components

Context Agent:

  • Maintains an Experience Bank (EB) recording all solutions and evaluations
  • Extracts materials from EB to generate “Inspiration” contexts
  • Continuously pushes new exploration directions to the task queue

Proposal Agent Pool:

  • Multiple agents fetch inspiration from the queue in parallel
  • Each agent independently proposes a solution, writing to solution/ directory
  • Entry point is uniformly solve.sh, executed in isolated sandboxes

Dual-Loop Mechanism: When no evaluator exists for a task, Hyra automatically upgrades to a dual-loop:

  1. Inner loop: iteratively improves solutions using the initial evaluator
  2. Outer loop: improves the evaluator itself based on accumulated experience, mitigating reward hacking

2.4 Breakthrough Path on the Combinatorics Problem

Phase 1: Finite Search (Numerical Optimization) Hyra first conducted explicit finite-set search within the SimpleTES framework, improving the best result from ~1.14 to 1.21. However, this hit a wall — as set size grew, computational and memory costs escalated rapidly, and numerical results could not naturally transition to provable asymptotic constructions.

Phase 2: Natural Language Construction (Mathematical Discovery) The research team changed strategy — they allowed the agent to propose mathematical constructions and arguments in natural language, rather than generating only numerical lists. GPT-5.6 Sol served as an LLM Judge for exploration feedback, but Hyra independently proposed the core insight.

After approximately 24 hours of operation, Hyra proposed the paper’s core construction: leveraging a base-12 digit structure to control difference set size, combined with symmetric additive bases in cyclic groups and the Chinese Remainder Theorem to drive sumset growth at near-quadratic rates.


3. Mathematical Construction Deep Dive: Base-12 and CRT

3.1 Intuition Behind the Construction

Hyra’s core insight: To control the size of the difference set, we need a “sparse” representation where differences between different elements tend to fall on different “digits,” producing extensive overlap. Meanwhile, the sumset leverages the Chinese Remainder Theorem to combine results across different moduli, generating many distinct outcomes.

3.2 Four-Layer Nested Structure

The construction consists of four progressively nested layers:

Layer 1: Base-12 Digit Components
    ┌─────────────────────────────────────────┐
    │  Each digit d ∈ {0,1,...,11}            │
    │  Represented as length-K binary string: │
    │  B_d = {2^{12K} · (12·i + d)}           │
    │  where i ranges over a selected interval│
    │  Property: same-digit differences are    │
    │  concentrated in lower-bit ranges       │
    └─────────────────────────────────────────┘
                    ↓
Layer 2: Carry Automaton for Difference Set Estimation
    ┌─────────────────────────────────────────┐
    │  Cross-digit differences require         │
    │  "borrow" effect analysis                │
    │  Via base-12 carry automaton:            │
    │  |A-A| ≈ O(|A|)                          │
    │  Difference set expansion δ(A) is        │
    │  effectively controlled                  │
    └─────────────────────────────────────────┘
                    ↓
Layer 3: Symmetric Additive Bases in Cyclic Groups
    ┌─────────────────────────────────────────┐
    │  Construct symmetric additive bases      │
    │  in cyclic group Z_{M}:                  │
    │  B = {±g_1, ±g_2, ..., ±g_t}            │
    │  k-fold sumset fills the group rapidly:  │
    │  |k·B| ≈ min(M, (2t+1)^k)               │
    └─────────────────────────────────────────┘
                    ↓
Layer 4: CRT Assembly
    ┌─────────────────────────────────────────┐
    │  Select coprime moduli M_1,...,M_r       │
    │  Construct additive bases for each       │
    │  Combine via CRT:                        │
    │  Sumset grows at near-quadratic rate     │
    │  σ(A) ≈ δ(A)^{2-ε} for any ε>0          │
    └─────────────────────────────────────────┘

3.3 Why Base-12?

Why base-12 rather than binary or decimal? This was Hyra’s key design choice.

Mathematical intuition: Base-12 factorization ((12 = 2^2 \times 3)) provides richer carry structure than binary (factor 2 only). In difference set analysis, carry/borrow mechanisms are essential for precisely controlling the number of distinct differences between digits.

Specifically, let the elements of (A_K) be represented in base-12:

[ A_K = \left{ \sum_{j=0}^{L-1} d_j \cdot 12^{j} ;\middle|; d_j \in D \subset {0,1,\ldots,11} \right} ]

where (D) is a carefully chosen digit subset such that:

  • Differences (d_i - d_j) produce specific “borrow patterns” in base-12
  • These patterns cause the difference set to be much smaller than the sumset

3.4 Chinese Remainder Theorem Application

Theorem (Chinese Remainder Theorem): Let (n_1, n_2, \ldots, n_k) be pairwise coprime. Then for any integers (a_1, a_2, \ldots, a_k), the system

[ x \equiv a_i \pmod{n_i}, \quad i=1,2,\ldots,k ]

has a unique solution modulo (N = n_1 n_2 \cdots n_k).

Hyra’s construction combines additive bases from multiple cyclic groups via CRT:

Construction Steps:

  1. Select coprime moduli (M_1, M_2, \ldots, M_r)
  2. Construct symmetric additive bases in each cyclic group (\mathbb{Z}_{M_i})
  3. Uniquely map each element to (\mathbb{Z}_{M_1 M_2 \cdots M_r}) via CRT
  4. The sumset size of the combined set approximately equals the product of component sumset sizes

This design drives sumset growth near the quadratic rate, while difference set growth remains approximately linear due to the base-12 structure.


4. Code Implementation

4.1 Python: Base-12 Construction with CRT Combination

"""
Hyra Core Construction: Base-12 Digit Structure with CRT
Core algorithms for the sum-difference set construction
"""

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:
    """
    Chinese Remainder Theorem implementation
    Solve x ≡ remainders[i] (mod moduli[i])
    """
    M = 1
    for m in moduli:
        M *= m
    
    result = 0
    for a_i, m_i in zip(remainders, moduli):
        M_i = M // 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]:
    """
    Construct base-12 digit components
    
    Args:
        K: representation length per digit
        digit_subset: allowed base-12 digits
    
    Returns:
        constructed integer set
    """
    if not digit_subset:
        digit_subset = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    
    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]:
    """Compute sumset 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]:
    """Compute difference set 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:
    """
    Compute C(A) = log σ(A) / log δ(A)
    where σ(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]]:
    """
    Construct symmetric additive bases using CRT
    
    Args:
        moduli: coprime moduli list
        basis_size: basis size per cyclic group
    
    Returns:
        (crt_elements, group_sizes)
    """
    group_bases = []
    for m in moduli:
        base = []
        for i in range(1, basis_size + 1):
            base.append(i % m)
            base.append((-i) % m)
        group_bases.append(base)
    
    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]:
    """
    Construct the Hyra paper's set family A_K
    
    Args:
        K: scale parameter (higher → closer to 2)
        epsilon: target precision
    
    Returns:
        constructed set A_K
    """
    base = 12
    # Carefully chosen digit subset for difference set control
    digit_subset = [0, 1, 4, 5, 8, 9]
    
    core = construct_base12_digit_set(K, digit_subset)
    
    # CRT modulus selection
    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)
    
    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:
    """
    Demonstrate C(A_K) converging to 2 as K increases
    """
    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} | "
              f"{len(diffset):>10} | {C:>10.6f}")


if __name__ == "__main__":
    A_small = [1, 2, 4, 8, 16, 32]
    print(f"Sample set 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: High-Performance Sum-Difference Computation

// hyra_construction.go
// High-performance Go implementation of Hyra's core construction
// for large-scale sumset and difference set computation

package main

import (
	"fmt"
	"math"
	"math/big"
)

// ChineseRemainder implements the Chinese Remainder Theorem
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]
		inv := modInverse(Mi, moduli[i])
		result = (result + a*Mi*inv) % M
	}

	return result
}

// modInverse computes modular inverse (extended Euclidean algorithm)
func modInverse(a, m int64) int64 {
	g, x, _ := extendedGCD(a, m)
	if g != 1 {
		return 0
	}
	return (x%m + m) % m
}

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 represents a base-12 number structure
type Base12Digit struct {
	Digits []int8
	Length int
}

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),
	}
}

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 computes base-12 difference with borrow analysis
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 handles sumset and difference set computation
type SumsetCalculator struct {
	Elements   []int64
	ElementSet map[int64]bool
	SumCache   map[int64]bool
	DiffCache  map[int64]bool
}

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),
	}
}

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
}

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
}

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 manages CRT-based additive basis construction
type CRTAdditiveBasis struct {
	Moduli   []int64
	Bases    [][]int64
	Combined []int64
}

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
	}

	cb.combine()
	return cb
}

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)
	}
}

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)

	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
}

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
}

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("First 10 elements: ")
	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)
	b := NewBase12Number(85)
	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 Verification Script

"""
Verification script: Check mathematical properties of Hyra's construction
"""

import math
import random
from typing import Set, List


def verify_sum_diff_inequality(A: Set[int]) -> bool:
    """Verify σ(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]:
    """Check if C(A_K) monotonically increases toward 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:
    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:
    """Random search baseline: best exponent achievable by random sets"""
    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"Random search ({trials} trials) best: C(A) = {best:.6f}")
    return best


def main():
    print("=" * 60)
    print("Hyra Construction Verification")
    print("=" * 60)
    
    print("\n[Test 1] Sum-Difference Inequality Check")
    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)
        print(f"  Set{i+1}: C={C:.6f}, Inequality={'✓' if ok else '✗'}")
    
    print("\n[Test 2] Random Search Baseline")
    random_search_benchmark(500, 50)
    
    print("\n[Test 3] Base-12 Difference Analysis")
    from collections import Counter
    
    digits = [0, 1, 4, 5, 8, 9]
    cross_diff = Counter()
    
    for d1 in digits:
        for d2 in digits:
            diff = (d1 - d2) % 12
            if d1 != d2:
                cross_diff[diff] += 1
    
    print(f"  Cross-digit distinct differences: {len(cross_diff)}")
    print(f"  Compression ratio: {len(cross_diff) / (len(digits)**2):.4f}")
    
    print("\n" + "=" * 60)
    print("Verification Complete")
    print("=" * 60)


if __name__ == "__main__":
    main()

5. Hyra vs OpenAI Astra: The Open-Source vs Closed-Source Research Paradigm

5.1 Comparison Overview

DimensionHyra (Tencent)Astra (OpenAI)
Base ModelHy3 (295B MoE, 21B active)Undisclosed (internal)
Open Source✅ Apache 2.0 fully open❌ Closed, limited access
Self-Hostable✅ 8 GPUs sufficient❌ OpenAI cloud only
Math Results1 core problem (sum-diff supremum)10 problems (with Lean proofs)
Output FormConstruction family + proof + Lean 410 independent proofs + Lean 4
Research Cost~24 hours single agent~$2,000 token cost
3rd Party VerificationThomas Bloom: confirmed correctPending peer review
Agent Authorship✅ Listed as 3rd author❌ Not listed as author
Research ParadigmSearch → NL construction → human verifyMulti-agent orchestration → generate → formalize

5.2 Why Hyra’s Breakthrough is Paradigm-Shifting

Thomas Bloom — a University of Manchester mathematician known for being one of the most meticulous reviewers of high-profile AI mathematics claims — gave Hyra’s result a clear verdict: the result is correct. Remarkably, he listed Hyra as the third author of the paper (“Lin, Li, and Hyra”), a rare instance of an AI agent receiving co-authorship on a mathematical preprint.

Bloom further demonstrated that the same method works for a whole class of sum-difference combinations, and negatively answered Ruzi’s old question about whether the inequality (\delta \leq \sigma^2) could be improved by even a logarithmic factor.

In contrast, while Astra’s 10 mathematical results are more numerous, the core criticism remains: the model is non-reproducible, non-auditable, and non-deployable independently. As the Leiden Declaration (endorsed by the International Mathematical Union) requires — AI-assisted mathematics must disclose the tools used, computational resources, and humans must remain responsible for correctness. Astra fails to meet this standard.

5.3 The Open-Source “Catch-Up” Moment

Hy3’s Apache 2.0 license means:

  • ✅ Anyone can download the weights (295B total, 21B active)
  • ✅ Can run on their own 8-GPU cluster
  • ✅ Can audit, modify, and redistribute
  • ✅ Commercially friendly, no geographic restrictions
  • ✅ API: $0.14/$0.58 per million tokens (input/output)

Astra remains locked in OpenAI’s walled garden.

This marks a crucial inflection point: open-source models are rapidly approaching — and in some areas surpassing — closed-source products at the frontier of scientific research. The “mathematical reasoning” advantage once held exclusively by closed models is being eroded by the open-source community at an accelerating pace.


6. The New Research Agent Paradigm: AI for Science’s Next Stage

6.1 Lessons from Hyra

Hyra’s success demonstrates a new paradigm for research agents:

  1. From “Search” to “Discovery”: Hyra didn’t merely search existing knowledge — it proposed new mathematical constructions in natural language. This is a qualitative leap from “tool” to “collaborator.”

  2. Open-Source Model + Agent Framework Synergy: Hy3’s MoE architecture (192 experts, top-8 routing) provides powerful reasoning, while Hyra’s recursive self-improvement framework adds a “propose-verify-iterate” research loop.

  3. Formal Verification Closure: The Lean 4 formal proof provides a verifiable “fuse” for AI’s mathematical discoveries — human mathematicians can trust the result because every reasoning step is machine-checked.

6.2 Yao Shunyu’s AI for Science Recruitment

Tencent’s Chief AI Scientist Yao Shunyu immediately posted a public recruitment call for AI for Science talent after Hyra’s results were announced. His “JD” was a single image — Hyra’s research scorecard:

  • 29 out of 55 open math problems achieved new best-known results
  • Discovered predictive formula from century-old sunspot data (R²=0.77)
  • 15-parameter Transformer for 10-digit addition (58.3% fewer parameters)
  • Quantum qubit routing algorithm (44.4% efficiency improvement)
  • PARP1 candidate molecules with drug-likeness scores exceeding marketed olaparib

This data makes clear: Tencent Hy is aiming for the next level of AI research — full automation. Let AI propose solutions, run experiments, read results, and continue iterating.

6.3 Future Outlook

The success of Hyra and Hy3 heralds a new paradigm for scientific research:

Traditional Research:  Human asks → Human designs → Human analyzes → Human concludes
                                                                    ↓
AI-Assisted Research:  Human asks → AI searches/optimizes → Human analyzes → Human concludes
                                                                    ↓
Research Agent:        Human sets goal → Agent explores → Verified → Human confirms → Knowledge
                                                                    ↓
Future Heterogeneous:  Multi-Agent → Cross-disciplinary → Auto-verify → Self-iterate → Knowledge evolution

7. Conclusion

Tencent Hyra’s resolution of a 50-year-old additive combinatorics problem using the open-source Hy3 model is one of the most significant AI milestones of 2026. Its importance extends far beyond solving a single mathematical puzzle — it proves that:

  1. Open-source models can compete with closed-source systems at the frontier of fundamental research — and in some dimensions, surpass them
  2. The “recursive self-improvement” paradigm for research agents is viable — from numerical search to mathematical construction, agents can achieve qualitative leaps
  3. The combination of base-12 structure and the Chinese Remainder Theorem demonstrates that AI can discover elegant constructions that human mathematicians had overlooked

As Thomas Bloom noted: “Hyra’s contribution is real and verifiable.” When AI begins to participate in mathematical research as a collaborator rather than a tool, we are witnessing a fundamental transformation in how science is conducted.


References: