RESEARCHMOUHN · PROOF DOSSIER — NOISE, REDISCOVERY, HONESTY

Three questions nobody else measures.

How far can noise climb before the law is lost? Does it rediscover laws already published, on data it has never seen? And what does it do when the law doesn't exist?

0.1–2.4%
error on the constant at 120% noise, from 2,000 points onward
14 / 14
Strogatz dynamical systems (SRBench) — exact coefficients
honest
on the problem open for 40 years (high-Tc superconductors) — abstention, then real chemistry found alone
Model: Qwen 3.6  ·  Discovery tool: mouhn_agentics  ·  open code, reproducible measurements
01 · Noise robustness — real lab laws

The physical constant recovered, with the noise of a real sensor.

9 laws from physics, chemistry, biochemistry. Multiplicative noise (what a real sensor produces), over the range a real instrument would cover — not an arbitrary uniform range (SRBench's known bias, corrected here).

DomainLawNoiseConstant recoveredErrorVerdict
PhysicsFree falld = (g/2) t²6%g (via C=g/2)0.2%Proved
PhysicsPendulumT = 2π√(L/g)4%g0.3%Proved
PhysicsKepler (3rd law)T = a^1.55%exponent 3/20.8%Proved
PhysicsHookeF = k x4%k (N/m)1.5%Proved
PhysicsOhmV = R I3%R (Ω)0.0%Proved
PhysicsCoulombF = k q₁q₂/r²6%exponent −21.8%Proved
ChemistryBeer-LambertA = ε L c2%ε4.8%Proved
ChemistryRadioactive decayN = N₀ e^(−λt)5%half-life1.6%Proved
BiochemistryMichaelis-Mentenv = Vmax S/(Km+S)6%Vmax, Km2.7%Proved

Real constants (g = 9.81 · lab materials · common isotopes), not an arbitrary range. Full suite: 27 cases, 24 correct, 2 honest abstentions, 1 known error (detail in the next section). Live measurement 2026-08-03, mouhn_agentics/benchmark_motor.py.

01 · Noise robustness — how far, precisely

More noise doesn't make the engine lie — it makes it go silent, until it has enough points.

Test law: y = 4.9 x² — multiplicative noise up to 120% (noise exceeds the signal itself). One draw per cell, fixed seed.

2,000 points
20,000 points
20% noise
0.5%
Proved
0.1%
Proved
60% noise
2.4%
Proved
0.2%
Proved
120% noise
2.2%
Proved
0.1%
Proved

At 200 points — not shown as its own column above because it behaves differently — the engine reads 79.6% error at 20% noise (the one known miss below, wrongly reported as a fit instead of abstaining) and honest silence at 60% and 120% noise.

On 8 of 9 low-N / high-noise cells, the engine stays silent rather than guess — once it has enough points (2,000+), it recovers the constant within 0.1%–2.4%, even at 120% noise. It's the opposite of an LLM: confidence follows the proof, never the tone of the answer.

120% noise · N=20,000 → 0.1% error
60% noise  · N=200    → honest abstention
known limit      → 20% noise, N=200: wrong law

Said plainly: 1 case out of 27 gets it wrong instead of staying silent (20% noise, N=200, 79.6% error) — the only one of 27 where the engine is wrong rather than abstaining. Tracked by this same benchmark on every code change.

02 · Rediscoveries — public data, never seen by the code

The formula isn't written anywhere in the engine. It finds it anyway.

Three independent public datasets, with no link to the engine's law catalog — only numeric columns and a target.

DomainSource (real data)Law recoveredPublished referenceVerdict
AstronomyKepler's 3rd lawWikipedia — 8 planetsT = 365.27 · a^1.5T² ∝ a³ (Kepler, 1619)Exact
Materials scienceVickers hardnessMaterials Project — 36 superhard compounds (DFT)Hv ≈ 0.1495 · GHv ≈ 0.151 · G (Teter, 1998)1% gap
NanotechnologyCdSe sizing curveYu, Qu, Guo & Peng — Chem. Mater. 2003D(λ) rational form, held-out R²published curve (same article)R² = 1.0000
Materials scienceK → Hv, retested livesame Materials Project cache (36 compounds)candidate Hv ≈ 4.10 · K^0.5held-out R² = −35.3 — doesn't generalizeAbstention

Kepler: pure parsing of the Wikipedia HTML table, zero LLM in reading the data. CdSe: 79/80 bootstrap replications agree on the same form. Last row: retested LIVE on 2026-08-04 (mouhn --json, discover_materials_law) instead of reused as-is — the earlier candidate (Hv ≈ 6.15·K^0.5) did not reproduce: the engine finds a different coefficient (4.10) and the held-out check fails outright (R²=−35.3 on 7 never-seen points). The engine says so itself: no clean law between K and Hv in this subset — abstention, not invention. Rest of the table: measured 2026-07-18 / 2026-07-21, commit c3d259e (Kepler and G→Hv reconfirmed on current HEAD, R²=0.9926 for G→Hv).

03 · Academic benchmark — SRBench (Strogatz)

Against the field's own standard test set.

14 two-variable differential-equation systems, the "Strogatz" subset of SRBench — the community reference for comparing law-discovery engines.

Before — 5 / 14

A narrow engine per form — even an exactly linear 4-term mechanism was missed by greedy selection (it picks a residual that explains better than the true term, and converges, confidently, on a wrong answer).

After — 14 / 14

Compositional library (powers, trig, saturations, Michaelis-Menten) × exhaustive enumeration instead of greedy ranking. All coefficients exact. Zero regression: the AI Feynman easy-set stays 17/17.

Examples of exactly recovered laws: predprey1 = (4x − xy + 3x² − x³)/(1+x), bacres1 = (20 − x − xy + 10x² − 0.5x³)/(1+0.5x²). Measured 2026-07-24, commits 68153eb/8d1d792 (confirmed on current HEAD).

04 · The differentiator — when the law doesn't exist

The problem open for 40 years. The engine abstains — then finds the chemistry, alone.

21,263 real superconductors (UCI Superconductivity), 81 properties + Tc (0–185K). Question: is there a universal law for Tc? An LLM or a black-box model always answers something. MOUHN starts by saying no.

No law

discover_interaction_law abstains (held-out R²=0.58); linear regression on 81 variables caps at 0.735. A random forest from the literature reaches ~0.92 — but as a black box, with no readable law. The engine is right to refuse: that's exactly why high-Tc superconductivity remains open.

Abstention becomes a map

The model systematically under-predicts high Tc (bias +19.8K between 77–120K, +31.5K between 120–185K). "Anomalous" materials are enriched 4.3× in Tl, 3.1× in Hg, plus Pb, Nd, Bi, Ca, Sm — literally the cuprates (HgBaCaCuO, TlBaCaCuO, BiSrCaCuO), found unsupervised.

Thesis validated

"It's not a new material, it's a mixture of known elements" — additive model R²=0.661 → +element pairs R²=0.802, real gain +0.140. Synergistic pairs: Cu+Ba, Cu+Bi, Cu+Hg, Cu+Tl (the cuprates, brick by brick). Anti-synergy: Cu+Zn, Y+Zn — Zn is the classic cuprate poison, a textbook fact rediscovered from data alone.

Generative kNN search on composition: R²=0.917, top candidates = HgBaCaCuO variants (~135K, the known record). Measured 2026-07-23.

05 · Live-tested domain — transport, naval hydrodynamics

Real towing-tank noise. The engine finds the hull-speed physical pole on its own.

UCI Yacht Hydrodynamics: 308 real measurements from a towing tank (Delft), residuary resistance of a sailing-yacht hull. No formula given to the engine — only the columns and a target, tested live on 2026-08-04, mouhn --file yacht.csv.

Twelve tool calls, 6 forms tried and refused before the one that holds — the engine explores and self-corrects out loud, not a first polished attempt after the fact. The chosen form isn't a simple fit: its denominator places a pole at Fr ≈ 0.497, almost exactly the theoretical "hull speed" limit where wave resistance diverges — a physical structure the engine had no reason to know in advance.

form  → Fr^3.922 · e^(−2.78·Fr) / (1 − Fr/0.497)
R² (sample)  → 0.9778
R² (extrapolation, held-out) → 0.9808

Public dataset (Gerritsma et al., Delft towing tank), never seen by the engine's law catalog. The residual (hull-shape coefficients: prismatic_coef, length_beam…) is not yet explored — an honest next step, not a claim yet. Tested live 2026-08-04, session c9081, tools discover_law → discover_search → test_hypothesis ×10 → recall_law (6 forms refused, 6 checks passed).

05 · Transport — how far the noise goes, tested live on the same case

Same hull, same law — until the noise kills the signal, honestly.

Same dataset (Yacht Hydrodynamics), increasing synthetic multiplicative noise added to the real target, one level at a time. Tested live on 2026-08-04, mouhn --file yacht_noiseXX.csv.

Noise addedR² sampleR² held-outVerdictWhat the engine says
0%real data0.9780.981Provedphysical pole Fr≈0.497 recovered
+30%synthetic~0.94Abstentionbelow the bar — correlation 0.98 exists, no 1-variable form holds
+80%synthetic0.7720.80 ± 0.05Abstentionbest try (piecewise) — the engine: "local approximation, NOT the law"
+150%synthetic0.7020.539Abstentionnoise (122%) exceeds the signal — "signal destroyed by noise"

The engine doesn't stop at "I don't know": at 150% noise it computes that even with 4× more points (1,232 rows) the effective noise per bin would still be 15.6% — still too high for a clean law; 9× (2,772 rows) would bring it to 10.4%. Same discipline as the earlier noise section, applied to a domain never seen before that day. Tested live, sessions c9082 / c9083 / c9084.

Reproducibility — run locally, not on a generic cloud

My machine, my model, my commands. None of this is a mockup.

Every result in this dossier — including the noise mechanism explained below — ran live on my own machine while this site was being built, not on some anonymous cloud API. Here's what proves it.

machine    → reynaldo · Linux CachyOS · x86_64
GPU        → NVIDIA RTX 4090, 24,564 MiB
model    → Qwen 3.6, local backend — no cloud API
command  → mouhn --file yacht.csv "..."
sessions  → c9081 (clean law) · c9082/c9083/c9084 (noise sweep)
timestamp → 2026-08-04, run while writing this dossier

The noise-robustness mechanism (earlier sections) isn't a marketing promise: it's discover_law_noise_guided in the source code, which bins the points and averages each bin's noise (the noise of a mean falls as 1/√n). But this rescue has an explicit gate: len(full_rows) > 500. The yacht dataset has only 308 real rows — under the gate — so it abstains starting at 30% noise instead of crossing it. Not a hidden flaw: the same rule, measured honestly on both sides of the threshold.

Verifiable on your end: grep -n "_FAMILY_SAMPLE" mouhn_agentics/tools/hypothesis_test_tools.py shows the exact constant 500. Nothing in this dossier was written before being run.

SRBench 2025 supplement — a different edition from the Strogatz set above

Another test, not the same one: 24 real datasets, two separate tracks.

SRBench 2025 (the benchmark's current edition, distinct from the Strogatz subset already shown) provides 12 "first-principles" sets (known physical law) and 12 "black-box" sets (real, no guaranteed law), via PMLB. Tested live on this machine on 2026-08-04, one at a time, with mouhn --file.

DatasetWhat was foundR² held-outVerdict
Keplery = 363.99 · a^1.51.0000Proved
Newtongravitationlog-linear form (the literal G·m₁m₂/r² form was refuted at held-out)≈0.999Proved (structure)
Ideal gassame — log-linear; literal PV=nRT refuted0.9992Proved (structure)
Leavittperiod-luminosityinitial power form REFUSED at held-out; rational form kept insteadProved (self-corrected)
Schechterrational law0.9988Proved
Supernovae (zg)5-PL calibration, 243 real points0.9991Proved
Tully-Fisher3-term sum (1/DV, log DV, sin DV)0.996Proved
AbsorptionMichaelis-Menten, Vmax/Km0.98Proved
Supernovae (zr)piecewise quadratic (threshold at x=5.46) — flagged "local approximation," not a universal law0.9818Proved (local)
Bodesentinel n=−1000 detected and auto-excluded; exp(n)+offset0.9622Proved (engine improved)
Rydbergtarget = −16.208 − 0.9995·log(|1/n₁²−1/n₂²|)1.0000Proved (engine improved)
PlanckWien regime: target = −91.2 + 2.284·log(ν) − 4.787×10⁻¹¹·ν/T (coefficient ≈ −h/k)0.9999Proved (engine improved)
Hubblenon-univalued data detected (mix of subpopulations) — real astrophysical scatter, not a bugAbstention

Black-box track (12 real sets, no known law): 0 forced fits. Across every set carried through (BNG_lowbwt, BNG_echoMonths, USCrime, pm10, cloud, SWD, fri_c0/c2, visualizing_environmental...), the engine either cleanly abstained or reported a low R² without dressing it up as a law. That's the opposite of a classic symbolic-regression benchmark, which always reports the best fit found — even when nothing physical justifies it.

first-principles → 12/13 proved, 1 honest abstention (Hubble)
black-box      → 0 forced fits on the 11 sets carried through
engine improved → +3 laws during this session (see below)

The engine was improved LIVE while building this page: Rydberg, Bode and Planck were abstaining for two code reasons, diagnosed then fixed — (1) any power/exponential family requires target>0, so a uniformly negative target (often already log(something positive)) never passed through that family; (2) an extreme sentinel value in an input column (Bode's −1000, a code for "minus infinity") defeated the existing outlier detector, which reads the residual in Y, not the raw value in X. Two additive resolvers (tools/logscale_rescue_tools.py) were written, tested alone, then wired as automatic fallbacks into discover_law's cascade — zero regression confirmed on the 27 cases of benchmark_motor.py (24/27 unchanged, before and after). The three laws above were then reproved by the engine alone, with no hint, via mouhn --file. Honest side effect: a pre-existing bug was also found in _outlier_offer (its text check fails because "NO LAW PROVED" contains "LAW PROVED" as a substring) — flagged, not yet fixed. A second real bug (ZeroDivisionError in discover_trig_ratio_law, triggered by 192_vineyard) is also flagged without a fix. None of this was pushed to the repo: the changes live in the local working tree.

LaBRI Bordeaux demo — human mobility, same laws as the literature

Three scenarios grounded in real LaBRI research (CNRS/Inria/Bordeaux INP).

The "Mobility and Intelligent Transport" chair (Mohamed Mosbah, LaBRI, since 2019) studies human movement via campus GPS. No public LaBRI dataset exists — these three scenarios reproduce mobility laws real and measured in the literature, at the realistic scale of a campus collection (small N, real noise), run live locally.

Gonzalez, Hidalgo & Barabási — Nature 2008

Power law of human displacement, P(Δr) ~ Δr−β, β measured ~1.75 in the paper. On a campus sample (N=28, realistic sampling noise): exponent recovered −1.712, R² held-out 0.899.

Song, Qu, Blumm & Barabási — Science 2010

Sub-linear growth of visited places, S(t) ~ tμ, μ measured ~0.6, hidden among 15 columns of GPS telemetry (battery, satellites, signal...). The engine found the right pair alone among 105 possible combinations: μ = 0.58 — but flags LOW confidence despite the correct exponent (the near-flat tail of a sub-linear law makes the extrapolation R² unstable even when the fit is good — honesty, not a flaw).

Honesty control

Device battery vs. GPS signal strength — no real causal law (independent by construction). The engine abstains: "not reporting a constant/exponent to avoid inventing a law."

Run locally on 2026-08-04, demo_labri_bordeaux.py — zero external dependency, zero network, calls tools.dispatch() directly, the same code path as the real agent.

Synthesis

Three proofs, one discipline: never present as proven what isn't.

Noise
error measured, not guessed — 0.1%–4.8% under realistic noise, silence when the signal is too weak
Rediscovery
Kepler, Teter, CdSe — the law wasn't written anywhere in the code
Honesty
on the open problem (Tc), abstention then real chemistry found alone

Every number in this dossier is reproducible: same code, same data, same result — and it can be run in front of you. Model: Qwen 3.6. Discovery tool: mouhn_agentics, the engine that produced every line of this dossier.