adele-ring 0.1.1

Exact multi-base arithmetic engine via the Residue Number System (RNS), with a number tower from integers to symbolic expressions and first-class CPU (rayon) + GPU (wgpu) backends.
Documentation

adele-ring

Exact arithmetic carried at both kinds of place: the finite primes and the real line.

adele-ring models numbers the way the adele ring does โ€” ๐”ธ_โ„š = โ„ ร— โˆโ€ฒ_p โ„š_p โ€” pairing the finite places (an adaptive Residue Number System over a prime Basis) with the infinite place (a rigorous real interval, Ball). The Adelic carrier holds both at once:

  • The finite part does all the arithmetic โ€” carry-free, local, embarrassingly parallel across CPU threads (rayon) and GPU threads (wgpu), free of big-integer work in the hot loop.
  • The infinite part answers everything the prime channels constitutionally cannot โ€” sign, comparison, magnitude, decimal output โ€” by refining on demand.

The Basis is adaptive: it provisions as many primes as a computation's a-priori height bound demands (bounds), then CRT + rational-reconstructs once at the boundary. Overflow is therefore a detected event (RangeError), never a silent aliasing mod M. All primes live in (2^15, 2^16), so every channel op โ€” including (a*b) โ€” fits a u32 and is GPU-safe.

The crate is named adele-ring (hyphen); the Rust import path is adele_ring (underscore). Cargo maps between them automatically.

The number tower

Every value is kept at the cheapest exact level it can occupy. Operations drop down when a result simplifies (โˆš2ยทโˆš2 = 2) and rise only when forced.

Level Set Type Module
0 โ„ค RnsInt rns
1 โ„š RnsRational rational
2 โ„šฬ„ AlgebraicNumber, Polynomial algebraic
3 โ„_c ComputableReal computable
4 ๐’ฎ SymbolicExpr, IdentityGraph symbolic

TowerValue (tower module) unifies all five levels with automatic reduction and level-routing for mixed-level arithmetic.

Backends

Both backends are first-class and share one flat buffer layout (RnsBatch), so there is no reformatting when switching between them:

  • CPU (cpu::CpuBackend) โ€” rayon work-stealing over batch items / channels.
  • GPU (gpu::GpuBackend) โ€” wgpu compute shaders (shaders/*.wgsl), one thread per (batch_item ร— channel).

The Executor probes for a GPU at startup and falls back to CPU automatically. Small batches stay on the CPU (GPU upload overhead dominates); large batches go to the GPU. CRT reconstruction (Garner's algorithm) is always CPU-side.

use adele_ring::{executor, Basis, RnsBatch, RnsInt};

let basis = Basis::standard();
let a = RnsBatch::from_rns_ints(&vec![RnsInt::from_i64(123, basis.clone()); 1024]);
let b = RnsBatch::from_rns_ints(&vec![RnsInt::from_i64(456, basis.clone()); 1024]);
let sum = executor().add(&a, &b); // auto CPU/GPU; add / sub / mul

Balanced (symmetric) residues mean subtraction is a channel-parallel (a + m - b) % m with no sign-magnitude branch; the sign of a result is read from the Ball, not the residues.

Why it matters

use adele_ring::{Basis, RnsRational};
let ch = Basis::standard();
let f = |p, q| RnsRational::from_fraction(p, q, ch.clone());

assert_eq!(f(1, 10).add(&f(1, 5)), f(3, 10)); // 0.1 + 0.2 == 3/10 exactly
assert_eq!(f(1, 6).add(&f(1, 10)).add(&f(1, 15)), f(1, 3));

sin(ฯ€) is 0 by table lookup (not 1.2e-16); โˆš2ยทโˆš2 is the integer 2; ฯ€ is an oracle that yields a rational accurate to 10โปโฟ on demand.

Layout

src/
  error.rs       RangeError, BasisError, ChannelMismatch, GpuError
  ball.rs        the infinite place โ€” rigorous rational interval (sign/cmp/output)
  basis.rs       adaptive multimodular prime basis (GPU-eligible, (2^15, 2^16))
  reconstruct.rs rational reconstruction (overflow โ†’ detected event)
  bounds.rs      Hadamard / Mignotte a-priori height bounds
  adelic.rs      Adelic<F> carrier (finite RNS ร— Ball); AdelicInt, AdelicRat, RnsFrac
  primes.rs      prime utilities, factorization, natural-base selection
  batch.rs       RnsBatch shared flat u32 buffer
  cpu.rs         CpuBackend (rayon): add / sub / mul / balanced CRT
  gpu.rs         GpuBackend (wgpu)
  backend.rs     ArithmeticBackend trait + Executor (auto-select)
  rns.rs         Level 0 โ€” balanced RnsInt over Basis, Garner CRT
  rational.rs    Level 1 โ€” RnsRational + base awareness
  algebraic.rs   Level 2 โ€” Polynomial, Sturm, resultants, AlgebraicNumber
  computable.rs  Level 3 โ€” ComputableReal (Ball-native enclose; ฯ€, e, sqrt, exp, ln)
  symbolic.rs    Level 4 โ€” SymbolicExpr + IdentityGraph
  tower.rs       TowerValue unifying all levels
  dispatch.rs    base analyzer + adaptive-basis provisioner
shaders/         rns_add.wgsl, rns_sub.wgsl, rns_mul.wgsl
examples/        engineering, float_comparison, benchmark_backends
tests/           integration.rs

Build & test

cargo test                                   # unit + integration tests
cargo run --example engineering
cargo run --example float_comparison
cargo run --release --example benchmark_backends

License

MIT OR Apache-2.0