RESEARCHMOUHN · PROOF DOSSIER

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 — abstains, then finds the real chemistry alone
Model: Qwen 3.6 · Discovery tool: mouhn_agentics · open code, reproducible measurements
01

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

Physics · Free fall
d = (g/2)t²
0.2%
Physics · Pendulum
T = 2π√(L/g)
0.3%
Physics · Kepler 3rd
T = a^1.5
0.8%
Physics · Hooke
F = kx
1.5%
Physics · Ohm
V = RI
0.0%
Physics · Coulomb
F = kq₁q₂/r²
1.8%
Chemistry · Beer-Lambert
A = εLc
4.8%
Chemistry · Decay
N = N₀e^(−λt)
1.6%
Biochem · Michaelis-Menten
v = VmaxS/(Km+S)
2.7%
View exact constants and noise levels
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 (next section). Live measurement 2026-08-03, mouhn_agentics/benchmark_motor.py.

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

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

N = 2,000 N = 20,000
0% 1% 2% 3% 20% noise 60% noise 120% noise

recovered error (%) vs. noise level — both series measured, none interpolated

View the exact 9-cell grid
Noise level2,000 points20,000 points
20% noise0.5% Proved0.1% Proved
60% noise2.4% Proved0.2% Proved
120% noise2.2% Proved0.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, 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

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

Three independent public datasets, no link to the engine's law catalog — only numeric columns and a target. This one is checkable by eye: the 8 real planets, plotted.

8 planets, real datafitted line, slope 1.5
log T = −1 0 1 2 3 Merc. Neptune

log(period) vs. log(distance), Mercury → Neptune — public values, zero LLM in reading the data

View all three rediscoveries
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). No clean law between K and Hv in this subset — abstention, not invention. Rest of table: measured 2026-07-18/21, commit c3d259e (Kepler and G→Hv reconfirmed on current HEAD, R²=0.9926 for G→Hv).

03

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.

Exactly recovered, e.g.: 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 problem open for 40 years. The engine abstains — then finds the chemistry, alone.

21,263 real superconductors (UCI Superconductivity), 81 properties + Tc (0–185K). 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 in the exact elements of the cuprates — found unsupervised:

Tl
4.3×
Hg
3.1×
Pb
enriched
Nd
enriched
Bi
enriched
Ca
enriched
Sm
enriched
Cu
core pair
Zn
poison

— literally the cuprates (HgBaCaCuO, TlBaCaCuO, BiSrCaCuO). Zn is the classic cuprate poison, rediscovered from data alone.

Thesis validated

"It's not a new material, it's a mixture of known elements" — additive model → +element pairs, a real gain of +0.140 in R².

additive
R² 0.661
+ pairs
R² 0.802

Synergistic pairs: Cu+Ba, Cu+Bi, Cu+Hg, Cu+Tl — the cuprates, brick by brick. Anti-synergy: Cu+Zn, Y+Zn.

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

05

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 — only columns and a target, tested live 2026-08-04.

found form, plotted from its own equation
Fr ≈ 0.497 — hull-speed pole Fr 0.10 0.30 0.44

R(Fr) = Fr^3.922 · e^(−2.78·Fr) / (1 − Fr/0.497), plotted directly from the recovered equation

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 denominator places a pole at Fr ≈ 0.497, almost exactly the theoretical "hull speed" limit where wave resistance diverges.

form  → Fr^3.922 · e^(−2.78·Fr) / (1 − Fr/0.497)
R² (sample)  → 0.9778
R² (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).

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

Same dataset, increasing synthetic multiplicative noise added to the real target. Tested live 2026-08-04.

R² held-outabstention threshold
0.5 0.75 1.0 +0% +30% +80% +150%

at +30% the engine already abstains — correlation exists (0.98) but no single-variable form holds cleanly

View the exact noise-sweep table
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 applied to a domain never seen before that day. Tested live, sessions c9082/c9083/c9084.

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

Every result in this dossier ran live on my own machine while this site was being built — not a generic cloud API.

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 isn't a marketing promise: it's discover_law_noise_guided in the source, which bins the points and averages each bin's noise (falls as 1/√n) — but with 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.

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

SRBench 2025 (the benchmark's current edition) provides 12 "first-principles" sets and 12 "black-box" sets, via PMLB. Tested live on this machine, 2026-08-04, one at a time.

First-principles — 12 / 13 proved

The one hollow dot is Hubble: non-univalued data detected (real astrophysical scatter, mixed subpopulations) — reported honestly, not forced.

Black-box — 0 forced fits

Across all 11 real sets 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 — the opposite of a classic symbolic-regression benchmark, which always reports the best fit found, even when nothing physical justifies it.

View all 13 first-principles results
DatasetWhat was foundR² held-outVerdict
Keplery = 363.99 · a^1.51.0000Proved
Newtongravitationlog-linear form (literal G·m₁m₂/r² refuted at held-out)≈0.999Proved (structure)
Ideal gaslog-linear; literal PV=nRT refuted0.9992Proved (structure)
Leavittperiod-luminosityinitial power form REFUSED at held-out; rational form kept—Proved (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"0.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 — real scatter, not a bug—Abstention

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.

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. These three scenarios reproduce mobility laws real and measured in the literature, at campus scale, run live locally.

P(Δr) ~ Δr^−1.75, log-log
low high short trips long trips

exponent −1.712 recovered on a campus sample (N=28) vs. −1.75 published (Gonzalez, Hidalgo & Barabási, Nature 2008) — 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. The engine found the right pair alone among 105 possible combinations: μ = 0.58 — flagged LOW confidence despite the correct exponent (the near-flat tail makes 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.

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

Noiseerror measured, not guessed — 0.1%–4.8% under realistic noise, silence when the signal is too weak
RediscoveryKepler, Teter, CdSe — the law wasn't written anywhere in the code
Honestyon 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.