Jusqu'où le bruit peut monter avant que la loi se perde ? Retrouve-t-il des lois déjà publiées sur des données qu'il n'a jamais vues ? Et que fait-il quand la loi n'existe pas ?
9 lois de physique, chimie, biochimie. Bruit multiplicatif (celui d'un capteur réel), sur la plage qu'un instrument couvrirait — pas une plage uniforme arbitraire (le biais connu de SRBench, corrigé ici).
| Domaine | Loi | Bruit | Constante retrouvée | Erreur | Verdict |
|---|---|---|---|---|---|
| PhysiqueChute libre | d = (g/2) t² | 6% | g (via C=g/2) | 0,2% | Prouvé |
| PhysiquePendule | T = 2π√(L/g) | 4% | g | 0,3% | Prouvé |
| PhysiqueKepler (3ᵉ loi) | T = a^1.5 | 5% | exposant 3/2 | 0,8% | Prouvé |
| PhysiqueHooke | F = k x | 4% | k (N/m) | 1,5% | Prouvé |
| PhysiqueOhm | V = R I | 3% | R (Ω) | 0,0% | Prouvé |
| PhysiqueCoulomb | F = k q₁q₂/r² | 6% | exposant −2 | 1,8% | Prouvé |
| ChimieBeer-Lambert | A = ε L c | 2% | ε | 4,8% | Prouvé |
| ChimieDécroissance radioactive | N = N₀ e^(−λt) | 5% | demi-vie | 1,6% | Prouvé |
| BiochimieMichaelis-Menten | v = Vmax S/(Km+S) | 6% | Vmax, Km | 2,7% | Prouvé |
Constantes réelles (g = 9,81 · matériaux de labo · isotopes usuels), pas une plage arbitraire. Suite complète : 27 cas, 24 corrects, 2 abstentions honnêtes, 1 erreur connue (détail slide suivante). Mesure live du 2026-08-03, mouhn_agentics/benchmark_motor.py.
Loi test : y = 4,9 x² — bruit multiplicatif jusqu'à 120% (le bruit dépasse le signal lui-même). Un tirage par cellule, graine fixe.
Sur 8 des 9 cellules à faible N ou fort bruit, le moteur se tait plutôt que de deviner — dès qu'il a assez de points (2 000+), il retrouve la constante à 0,1%–2,4% près, même à 120% de bruit. C'est l'inverse d'un LLM : la confiance suit la preuve, jamais le style de la réponse.
Dit sans détour : 1 cas sur 27 se trompe au lieu de se taire (bruit 20%, N=200, 79,6% d'erreur) — le seul des 27 où le moteur ment plutôt que de s'abstenir. Suivi par ce même benchmark à chaque changement de code.
Trois jeux de données publics, indépendants, aucun lien avec le catalogue de lois du moteur — seulement des colonnes numériques et une cible.
| Domaine | Source (donnée réelle) | Loi retrouvée | Référence publiée | Verdict |
|---|---|---|---|---|
| Astronomie3ᵉ loi de Kepler | Wikipedia — 8 planètes | T = 365,27 · a^1.5 | T² ∝ a³ (Kepler, 1619) | Exact |
| Science des matériauxDureté Vickers | Materials Project — 36 composés superdurs (DFT) | Hv ≈ 0,1495 · G | Hv ≈ 0,151 · G (Teter, 1998) | 1% d'écart |
| NanotechnologieSizing curve CdSe | Yu, Qu, Guo & Peng — Chem. Mater. 2003 | D(λ) forme rationnelle, held-out R² | courbe publiée (même article) | R² = 1,0000 |
| Science des matériauxK → Hv, retesté en direct | même cache Materials Project (36 composés) | candidat Hv ≈ 4,10 · K^0.5 | held-out R² = −35,3 — ne généralise pas | Abstention |
Kepler : parsing pur du tableau HTML Wikipedia, zéro LLM sur la lecture de la donnée. CdSe : 79/80 réplications bootstrap s'accordent sur la même forme. Dernière ligne : retestée EN DIRECT le 2026-08-04 (mouhn --json, discover_materials_law) au lieu d'être reprise telle quelle — le candidat précédent (Hv ≈ 6,15·K^0.5) ne s'est pas reproduit : le moteur retrouve un autre coefficient (4,10) et le held-out échoue franchement (R²=−35,3 sur 7 points jamais vus). Le moteur le dit lui-même : aucune loi propre entre K et Hv dans ce sous-ensemble — abstention, pas invention. Reste de la table : mesuré 2026-07-18 / 2026-07-21, commits c3d259e (Kepler et G→Hv confirmés à nouveau sur HEAD actuel, R²=0,9926 pour G→Hv).
14 systèmes d'équations différentielles à 2 variables, le sous-ensemble « Strogatz » de SRBench — la référence communautaire pour comparer les moteurs de découverte de lois.
Un moteur étroit par forme — même un mécanisme exactement linéaire à 4 termes était raté par sélection gloutonne (elle choisit un résidu qui explique mieux que le vrai terme, et converge, avec assurance, vers une réponse fausse).
Bibliothèque compositionnelle (puissances, trig, saturations, Michaelis-Menten) × énumération exhaustive au lieu du classement glouton. Tous les coefficients exacts. Zéro régression : AI Feynman easy-set reste 17/17.
Exemples de lois retrouvées exactement : predprey1 = (4x − xy + 3x² − x³)/(1+x), bacres1 = (20 − x − xy + 10x² − 0,5x³)/(1+0,5x²). Mesuré 2026-07-24, commits 68153eb/8d1d792 (confirmés sur HEAD actuel).
21 263 supraconducteurs réels (UCI Superconductivity), 81 propriétés + Tc (0–185K). Question : existe-t-il une loi universelle pour Tc ? Un LLM ou un modèle boîte noire répond toujours quelque chose. MOUHN commence par dire non.
discover_interaction_law s'abstient (held-out R²=0,58) ; régression linéaire sur 81 variables plafonne à 0,735. Une forêt aléatoire de la littérature atteint ~0,92 — mais en boîte noire, sans loi lisible. Le moteur a raison de refuser : c'est pour ça que la supraconductivité à haute température reste ouverte.
Le modèle sous-prédit systématiquement les Tc élevées (biais +19,8K entre 77–120K, +31,5K entre 120–185K). Les matériaux « anormaux » sont enrichis 4,3× en Tl, 3,1× en Hg, plus Pb, Nd, Bi, Ca, Sm — littéralement les cuprates (HgBaCaCuO, TlBaCaCuO, BiSrCaCuO), retrouvés sans supervision.
« Ce n'est pas un matériau nouveau, c'est un mélange d'éléments connus » — modèle additif R²=0,661 → +paires d'éléments R²=0,802, gain réel +0,140. Paires synergiques : Cu+Ba, Cu+Bi, Cu+Hg, Cu+Tl (les cuprates, brique par brique). Anti-synergie : Cu+Zn, Y+Zn — Zn est le poison classique des cuprates, un fait de manuel retrouvé depuis la donnée seule.
Recherche générative kNN sur composition : R²=0,917, top candidats = variantes HgBaCaCuO (~135K, le record connu). Mesuré 2026-07-23.
UCI Yacht Hydrodynamics : 308 mesures réelles en bassin de traction (Delft), résistance résiduaire d'une coque de voilier. Aucune formule fournie au moteur — seulement les colonnes et une cible, testé en direct le 2026-08-04, mouhn --file yacht.csv.
Douze appels d'outils, 6 formes essayées et refusées avant celle qui tient — le moteur explore et s'auto-corrige à voix haute, pas une première tentative polie a posteriori. La forme retenue n'est pas un simple ajustement : son dénominateur place un pôle à Fr ≈ 0,497, presque exactement la limite théorique de « vitesse de coque » où la résistance de vague diverge — une structure physique que le moteur n'avait aucune raison de connaître à l'avance.
Dataset public (Gerritsma et al., bassin de traction de Delft), jamais vu par le catalogue de lois du moteur. Le résidu (coefficients de forme de coque : prismatic_coef, length_beam...) n'est pas encore exploré — prochaine étape honnête, pas encore une prétention. Testé en direct 2026-08-04, session c9081, outils discover_law → discover_search → test_hypothesis ×10 → recall_law (6 formes refusées, 6 vérifications passées).
Même jeu de données (Yacht Hydrodynamics), bruit multiplicatif synthétique croissant ajouté à la cible réelle, un niveau à la fois. Testé en direct le 2026-08-04, mouhn --file yacht_bruitXX.csv.
| Bruit ajouté | R² échantillon | R² held-out | Verdict | Ce que dit le moteur |
|---|---|---|---|---|
| 0%donnée réelle | 0,978 | 0,981 | Prouvé | pôle physique Fr≈0,497 retrouvé |
| +30%synthétique | — | ~0,94 | Abstention | sous la barre — corrélation 0,98 existe, aucune forme à 1 variable ne tient |
| +80%synthétique | 0,772 | 0,80 ± 0,05 | Abstention | meilleur essai (piecewise) — le moteur : « approximation locale, PAS la loi » |
| +150%synthétique | 0,702 | 0,539 | Abstention | bruit (122%) dépasse le signal — « signal détruit par le bruit » |
Le moteur ne s'arrête pas à « je ne sais pas » : à 150% de bruit il calcule que même avec 4× plus de points (1 232 lignes) le bruit effectif par bin resterait à 15,6% — encore trop haut pour une loi propre ; 9× (2 772 lignes) le ferait descendre à 10,4%. Même discipline que la slide 02, appliquée à un domaine jamais vu avant aujourd'hui. Testé en direct, sessions c9082 / c9083 / c9084.
Chaque résultat de ce dossier — y compris le mécanisme de bruit expliqué ci-dessous — a tourné en direct sur ma propre machine pendant la construction de ce site, pas sur une API cloud anonyme. Voici ce qui le prouve.
Le mécanisme de robustesse au bruit (slides 01-02) n'est pas une promesse marketing : c'est discover_law_noise_guided dans le code source, qui regroupe les points en tranches et moyenne le bruit de chaque tranche (le bruit d'une moyenne tombe en 1/√n). Mais ce sauvetage a une porte explicite : len(full_rows) > 500. Le yacht n'a que 308 lignes réelles — sous la porte — donc il abstient dès 30% de bruit au lieu de la franchir. Ce n'est pas un défaut caché : c'est la même règle, mesurée honnêtement des deux côtés du seuil.
Vérifiable de votre côté : grep -n "_FAMILY_SAMPLE" mouhn_agentics/tools/hypothesis_test_tools.py montre la constante 500 exacte. Rien dans ce dossier n'a été rédigé avant d'avoir été exécuté.
SRBench 2025 (édition courante du benchmark, distincte du sous-ensemble Strogatz déjà montré) fournit 12 jeux « first-principles » (loi physique connue) et 12 jeux « black-box » (réels, sans loi garantie), via PMLB. Testés en direct sur cette machine le 2026-08-04, un par un, avec mouhn --file.
| Jeu de données | Ce qui a été trouvé | R² held-out | Verdict |
|---|---|---|---|
| Kepler | y = 363,99 · a^1.5 | 1,0000 | Prouvé |
| Newtongravitation | forme log-linéaire (la forme littérale G·m₁m₂/r² a été réfutée au held-out) | ≈0,999 | Prouvé (structure) |
| Gaz idéal | idem — log-linéaire ; PV=nRT littéral réfuté | 0,9992 | Prouvé (structure) |
| Leavittpériode-luminosité | forme puissance initiale REFUSÉE au held-out ; rationnelle retenue à la place | — | Prouvé (auto-corrigé) |
| Schechter | loi rationnelle | 0,9988 | Prouvé |
| Supernovae (zg) | calibration 5-PL, 243 points réels | 0,9991 | Prouvé |
| Tully-Fisher | somme à 3 termes (1/DV, log DV, sin DV) | 0,996 | Prouvé |
| Absorption | Michaelis-Menten, Vmax/Km | 0,98 | Prouvé |
| Supernovae (zr) | quadratique par morceaux (seuil à x=5,46) — signalée « approximation locale », pas une loi universelle | 0,9818 | Prouvé (local) |
| Bode | sentinelle n=−1000 détectée et exclue automatiquement ; exp(n)+offset | 0,9622 | Prouvé (moteur amélioré) |
| Rydberg | target = −16,208 − 0,9995·log(|1/n₁²−1/n₂²|) | 1,0000 | Prouvé (moteur amélioré) |
| Planck | régime de Wien : target = −91,2 + 2,284·log(ν) − 4,787×10⁻¹¹·ν/T (coefficient ≈ −h/k) | 0,9999 | Prouvé (moteur amélioré) |
| Hubble | données non-univoques détectées (mélange de sous-populations) — dispersion astrophysique réelle, pas un bug | — | Abstention |
Piste black-box (12 jeux réels, sans loi connue) : 0 ajustement forcé. Sur tous les jeux traités (BNG_lowbwt, BNG_echoMonths, USCrime, pm10, cloud, SWD, fri_c0/c2, visualizing_environmental...), le moteur a soit abstenu proprement, soit rapporté un R² faible sans le déguiser en loi. C'est l'inverse d'un benchmark de régression symbolique classique, qui rapporte toujours le meilleur ajustement trouvé — même quand rien de physique ne le justifie.
Le moteur a été amélioré EN DIRECT pendant la construction de cette page : Rydberg, Bode et Planck abstenaient pour deux raisons de code, diagnostiquées puis corrigées — (1) toute famille puissance/exponentielle exige target>0, donc une cible uniformément négative (souvent déjà log(quelque chose de positif)) ne passait jamais par cette famille ; (2) une valeur sentinelle extrême dans une colonne d'entrée (le −1000 de Bode, un code pour « moins l'infini ») déjouait le détecteur d'aberrations existant, qui regarde le résidu en Y et non la valeur brute en X. Deux résolveurs additifs (tools/logscale_rescue_tools.py) ont été écrits, testés seuls, puis câblés comme secours automatiques dans la cascade de discover_law — zéro régression confirmée sur les 27 cas de benchmark_motor.py (24/27 inchangé, avant et après). Les trois lois ci-dessus ont ensuite été reprouvées par le moteur seul, sans indication, via mouhn --file. Effet de bord honnête : un bug préexistant a aussi été trouvé dans _outlier_offer (sa vérification de texte échoue car « NO LAW PROVED » contient « LAW PROVED » comme sous-chaîne) — signalé, pas encore corrigé. Un second bug réel (ZeroDivisionError dans discover_trig_ratio_law, déclenché par 192_vineyard) reste lui aussi signalé sans correction. Rien de tout cela n'a été poussé sur le dépôt : les changements vivent dans l'arbre de travail local.
La chaire « Mobilité et Transports Intelligents » (Mohamed Mosbah, LaBRI, depuis 2019) étudie le déplacement humain via GPS sur le campus. Aucun jeu de données public du LaBRI n'existe — ces trois scénarios reproduisent des lois de mobilité réelles et mesurées dans la littérature, à l'échelle réaliste d'une collecte de campus (N petit, bruit réel), exécutés en direct localement.
Loi de puissance des déplacements humains, P(Δr) ~ Δr−β, β mesuré ~1,75 dans l'article. Sur un échantillon de campus (N=28, bruit d'échantillonnage réaliste) : exposant retrouvé −1,712, R² held-out 0,899.
Croissance sous-linéaire des lieux visités, S(t) ~ tμ, μ mesuré ~0,6, cachée parmi 15 colonnes de télémétrie GPS (batterie, satellites, signal...). Le moteur a trouvé seul la bonne paire parmi 105 combinaisons possibles : μ = 0,58 — mais signale une confiance BASSE malgré l'exposant correct (la queue quasi-plate d'une loi sous-linéaire rend le R² d'extrapolation instable même quand l'ajustement est bon — honnêteté, pas défaut).
Batterie de l'appareil vs force du signal GPS — aucune loi causale réelle (indépendants par construction). Le moteur abstient : « not reporting a constant/exponent to avoid inventing a law ».
Exécuté en local le 2026-08-04, demo_labri_bordeaux.py — zéro dépendance externe, zéro réseau, appelle tools.dispatch() directement, le même chemin de code que l'agent réel.
Chaque chiffre de ce dossier est reproductible : même code, même donnée, même résultat — et peut être exécuté devant vous. Modèle : Qwen 3.6. Outil de découverte : mouhn_agentics, le moteur qui a produit chaque ligne de ce dossier.