ries-rs
ries-rs is a Rust implementation of Robert P. Munafo's RIES inverse equation
solver. Given a target number, it searches for algebraic equations that have
that number as a solution.
The historical acronym is RIES, for "RILYBOT Inverse Equation Solver". This repository aims to be a modern, documented, reproducible reference implementation rather than a historical clone.
Project page: maxwellsantoro.com/projects/ries-rs
Live demo: maxwellsantoro.com/projects/ries-rs/app/

Who It's For
- Researchers who want reproducible constant-recognition runs with structured output
- Programmers who want a library or CLI for equation search instead of an interactive calculator
- Math enthusiasts exploring compact identities for familiar constants or strange decimals
- Educators and demo authors who want Python and browser-facing interfaces in addition to the CLI
Why Use ries-rs
- Rust implementation with a cleaner architecture and broad regression coverage
- Deterministic mode for reproducible output ordering
- Structured JSON and manifests for automation and research workflows
- Browser and library integrations in addition to the CLI
- Public benchmark artifacts and explicit parity tracking against older versions
Install
CLI
The crates.io package is named ries; the installed binary is ries-rs.
Prebuilt Linux, macOS, and Windows archives are attached to each GitHub release.
For unreleased development builds:
# Or, from a local checkout:
Python Bindings
For local source development of the bindings:
Web App / WASM
GitHub releases include a ries-rs-wasm.tar.gz artifact with the generated WASM
packages. To build the browser bundle locally, install the JS dependencies and
the nightly Rust toolchain first:
Deploy the contents of dist/web-site/ to a path such as
https://example.com/projects/ries-rs/.
The current local WASM build scripts use nightly wasm-pack via -Z build-std.
For the public deployment, use the canonical landing page at
https://maxwellsantoro.com/projects/ries-rs and the standalone app at
https://maxwellsantoro.com/projects/ries-rs/app/.
Detailed setup guides:
Quick Start
Basic search:
# Example output:
# x = pi ('exact' match) {14}
# x-3 = 1/7 for x = T + 1.26e-3 {24}
Classic-style output:
Deterministic machine-readable output:
For the authoritative option list:
Project Scope
ries-rs is intended to be a disciplined, modern reference implementation:
- Faithful reimplementation of the core RIES search model
- Deterministic and documented execution modes
- Memory-safe Rust implementation with optional parallel search
- Structured output for automation (
--json,--emit-manifest) - CLI, Rust library, Python bindings, and WebAssembly builds
- Modular presets, profiles, and extension points
Not primary goals of this repository:
- Symbolic AI or conjecture systems
- PSLQ research-platform ambitions beyond the shipped CLI mode
- Experimental search branches outside the core RIES model
Performance
Performance claims are tracked conservatively with separate benchmark artifacts for end-to-end CLI runs and generation-only scaling:
- End-to-end CLI baseline:
docs/benchmarks/2026-02-25-level3-baseline.mdreports1.084xobserved speedup on the published level-3 workload because matching/Newton dominates that run. - Generation-only scaling:
docs/benchmarks/2026-02-25-generation-parallel-scaling.mdreports3.18xmedian speedup for parallel generation.
Raw benchmark artifacts live under docs/benchmarks/artifacts/.
Compatibility
ries-rs tracks behavior against two historical baselines:
- The original RIES by Robert Munafo
- The
clsn/riesfork with additional compatibility-oriented CLI behavior
Current status in brief:
- Core equation search and classic-style output flow are implemented
- Legacy CLI semantics and diagnostic channels are supported substantially more completely than in early versions
- Internal generation and ranking are Rust-native, so exact ordering and complexity numbers can still differ on some targets
See docs/PARITY_STATUS.md for the detailed status and
historical notes.
How It Works
- Enumerate valid postfix expressions up to the current complexity limit
- Check fast-path exact matches against well-known constants when possible
- Generate left-hand-side and right-hand-side expression candidates
- Use Newton refinement to solve
LHS(x) = RHS - Filter, deduplicate, and refine candidate equations
- Rank matches by exactness, error, and parity-style or complexity-style order
Documentation
- Documentation map
- Search model
- Complexity and weights
- Architecture overview
- Performance notes and benchmarks
- Parity and compatibility status
- Python bindings
- WASM bindings
- Web UI build and hosting
Additional Interfaces
Python
The Python bindings expose ries_rs.search() and typed match objects through
PyO3. See docs/PYTHON_BINDINGS.md for PyPI install,
source development, API details, and troubleshooting.
WebAssembly
The WASM build supports browser, Node.js, bundler, and static-site workflows. See docs/WASM_BINDINGS.md for the JS/TS API and web/README.md for the browser UI and static hosting flow.
PSLQ
The CLI includes PSLQ integer-relation detection via --pslq,
--pslq-extended, and --pslq-max-coeff. This is part of the shipped tool,
but it is not the primary focus of the repository.
How to Cite
If you use ries-rs in academic work, cite the project version you used.
CITATION.cff is the canonical metadata source.
GitHub releases may also be archived on Zenodo. Record a
release DOI in CITATION.cff, this README, and the release notes only after it
has actually been minted and verified.
For reproducible research runs, prefer --deterministic together with
--emit-manifest.
License
MIT License. See LICENSE.
References
- Original RIES by Robert Munafo
- RIES Documentation
clsn/riesfork- Stoutemyer, D.R. (2024). "Computing with No Machine Constants, Only Constructive Axioms". arXiv:2402.03304