Jusqu'où le bruit peut-il monter avant que la loi ne se perde ? Redécouvre-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 vrai capteur — sur la plage qu'un vrai instrument couvrirait, pas une plage uniforme arbitraire (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 courants), pas une plage arbitraire. Suite complète : 27 cas, 24 corrects, 2 abstentions honnêtes, 1 erreur connue (section suivante). Mesure en direct 2026-08-03, mouhn_agentics/benchmark_motor.py.
Loi test y = 4,9x², bruit multiplicatif jusqu'à 120 % — un bruit qui dépasse le signal lui-même. Un tirage par cellule, graine fixe.
erreur retrouvée (%) vs. niveau de bruit — les deux séries sont mesurées, aucune n'est interpolée
| Niveau de bruit | 2 000 points | 20 000 points |
|---|---|---|
| 20 % bruit | 0,5 % Prouvé | 0,1 % Prouvé |
| 60 % bruit | 2,4 % Prouvé | 0,2 % Prouvé |
| 120 % bruit | 2,2 % Prouvé | 0,1 % Prouvé |
À 200 points — non montré comme colonne à part ci-dessus car il se comporte différemment — le moteur lit 79,6 % d'erreur à 20 % de bruit (le seul raté connu, rapporté à tort comme un ajustement plutôt qu'une abstention) et un silence honnête à 60 % et 120 % de bruit.
Sur 8 des 9 cellules N faible / bruit fort, le moteur reste silencieux 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 ton de la réponse.
Dit clairement : 1 cas sur 27 se trompe au lieu de rester silencieux (20 % de bruit, N=200, 79,6 % d'erreur) — le seul des 27 où le moteur a tort plutôt que de s'abstenir. Suivi par ce même benchmark à chaque changement de code.
Trois jeux de données publics indépendants, sans lien avec le catalogue de lois du moteur — seulement des colonnes numériques et une cible. Celui-ci se vérifie à l'œil nu : les 8 vraies planètes, tracées.
log(période) vs. log(distance), Mercure → Neptune — valeurs publiques, zéro LLM dans la lecture des données
| Domaine | Source (données réelles) | Loi retrouvée | Référence publiée | Verdict |
|---|---|---|---|---|
| Astronomie3ᵉ loi de Kepler | Wikipédia — 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) | Écart de 1 % |
| NanotechnologieCourbe de taille CdSe | Yu, Qu, Guo & Peng — Chem. Mater. 2003 | forme rationnelle D(λ), R² held-out | 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 | R² held-out = −35,3 — ne généralise pas | Abstention |
Kepler : simple analyse du tableau HTML Wikipédia, zéro LLM dans la lecture des données. CdSe : 79/80 réplications bootstrap s'accordent sur la même forme. Dernière ligne : retesté EN DIRECT le 2026-08-04 (mouhn --json, discover_materials_law) plutôt que réutilisé tel quel — le candidat précédent (Hv ≈ 6,15 · K^0,5) ne s'est pas reproduit : le moteur trouve un coefficient différent (4,10) et le contrôle held-out échoue franchement (R²=−35,3 sur 7 points jamais vus). Pas de loi propre entre K et Hv dans ce sous-ensemble — abstention, pas invention. Reste du tableau : mesuré les 2026-07-18/21, commit c3d259e (Kepler et G→Hv reconfirmés sur le HEAD actuel, R²=0,9926 pour G→Hv).
14 systèmes d'équations différentielles à deux 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 linéaire à 4 termes, exact, a été manqué par une sélection gloutonne : elle choisit un résidu qui explique mieux que le vrai terme, et converge, avec confiance, vers une mauvaise réponse.
Bibliothèque compositionnelle (puissances, trigonométrie, saturations, Michaelis-Menten) × énumération exhaustive au lieu d'un classement glouton. Tous les coefficients exacts. Zéro régression : le sous-ensemble facile AI Feynman reste à 17/17.
Retrouvés exactement, p. ex. : predprey1 = (4x − xy + 3x² − x³)/(1+x), bacres1 = (20 − x − xy + 10x² − 0,5x³)/(1+0,5x²). Mesuré le 2026-07-24, commits 68153eb/8d1d792 (confirmé sur le HEAD actuel).
21 263 vrais supraconducteurs (UCI Superconductivity), 81 propriétés + Tc (0–185K). 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 (R² held-out=0,58) ; une régression linéaire sur 81 variables plafonne à 0,735. Une forêt aléatoire tirée de la littérature atteint ~0,92 — mais comme boîte noire, sans loi lisible. Le moteur a raison de refuser : c'est exactement pour ça que la supraconductivité à haute Tc 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 exactement dans les éléments des cuprates — trouvé sans supervision :
— littéralement les cuprates (HgBaCaCuO, TlBaCaCuO, BiSrCaCuO). Zn est le poison classique des cuprates, redécouvert à partir des données seules.
« Ce n'est pas un nouveau matériau, c'est un mélange d'éléments connus » — modèle additif → + paires d'éléments, un gain réel de +0,140 en R².
Paires synergiques : Cu+Ba, Cu+Bi, Cu+Hg, Cu+Tl — les cuprates, brique par brique. Anti-synergie : Cu+Zn, Y+Zn.
Recherche kNN générative sur la composition : R²=0,917, meilleurs candidats = variantes HgBaCaCuO (~135K, le record connu). Mesuré le 2026-07-23.
UCI Yacht Hydrodynamics : 308 mesures réelles d'un bassin de traction (Delft), résistance résiduaire d'une coque de voilier. Aucune formule donnée — seulement des colonnes et une cible, testé en direct le 2026-08-04.
R(Fr) = Fr^3,922 · e^(−2,78·Fr) / (1 − Fr/0,497), tracée directement à partir de l'équation retrouvée
Douze appels d'outils, 6 formes essayées et refusées avant celle qui tient — le moteur explore et se corrige à voix haute, pas un premier essai déjà poli. Le dénominateur place un pôle à Fr ≈ 0,497, presque exactement la limite théorique de « vitesse de carène » où la résistance de vague diverge.
Jeu de données 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é — une prochaine étape honnête, pas encore une affirmation. Testé en direct le 2026-08-04, session c9081, outils discover_law → discover_search → test_hypothesis ×10 → recall_law (6 formes refusées, 6 contrôles réussis).
Même jeu de données, bruit multiplicatif synthétique croissant ajouté à la cible réelle. Testé en direct le 2026-08-04.
à +30 % le moteur s'abstient déjà — la corrélation existe (0,98) mais aucune forme à une variable ne tient proprement
| Bruit ajouté | R² échantillon | R² held-out | Verdict | Ce que dit le moteur |
|---|---|---|---|---|
| 0 %données réelles | 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 (par morceaux) — le moteur : « approximation locale, PAS la loi » |
| +150 %synthétique | 0,702 | 0,539 | Abstention | le 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 case resterait à 15,6 % — toujours trop élevé pour une loi propre ; 9× (2 772 lignes) l'amènerait à 10,4 %. La même discipline appliquée à un domaine jamais vu avant ce jour-là. Testé en direct, sessions c9082/c9083/c9084.
Chaque résultat de ce dossier a tourné en direct sur ma propre machine pendant la construction de ce site — pas une API cloud générique.
mouhn --file yacht.csv "..."c9081 (loi propre) · c9082/c9083/c9084 (balayage de bruit)Le mécanisme de robustesse au bruit n'est pas une promesse marketing : c'est discover_law_noise_guided dans le code source, qui regroupe les points en cases et moyenne le bruit de chaque case (il chute en 1/√n) — mais avec une porte explicite, len(full_rows) > 500. Le jeu de données du voilier n'a que 308 lignes réelles, sous la porte, donc il s'abstient dès 30 % de bruit au lieu de la franchir. Pas un défaut caché : 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 exacte 500. Rien dans ce dossier n'a été écrit avant d'être exécuté.
SRBench 2025 (l'édition actuelle du benchmark) fournit 12 jeux « premiers principes » et 12 jeux « boîte noire », via PMLB. Testé en direct sur cette machine, 2026-08-04, un à la fois.
Le seul point creux est Hubble : données non-univaluées détectées (vraie dispersion astrophysique, sous-populations mélangées) — signalé honnêtement, pas forcé.
Sur les 11 vrais jeux menés à terme (BNG_lowbwt, BNG_echoMonths, USCrime, pm10, cloud, SWD, fri_c0/c2, visualizing_environmental…), chacun s'est soit abstenu proprement, soit a rapporté un R² faible sans le déguiser en loi — l'inverse d'un benchmark classique de régression symbolique, qui rapporte toujours le meilleur ajustement trouvé, même quand rien de physique ne le justifie.
| 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 (G·m₁m₂/r² littéral réfuté au held-out) | ≈0,999 | Prouvé (structure) |
| Gaz parfait | log-linéaire ; PV=nRT littéral réfuté | 0,9992 | Prouvé (structure) |
| Leavittpériode-luminosité | forme en puissance initiale REFUSÉE au held-out ; forme rationnelle retenue | — | Prouvé (auto-corrigé) |
| Schechter | loi rationnelle | 0,9988 | Prouvé |
| Supernovae (zg) | calibration à 5 paramètres, 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é « approximation locale » | 0,9818 | Prouvé (local) |
| Bode | sentinelle n=−1000 détectée et exclue automatiquement ; exp(n)+décalage | 0,9622 | Prouvé (moteur amélioré) |
| Rydberg | cible = −16,208 − 0,9995·log(|1/n₁²−1/n₂²|) | 1,0000 | Prouvé (moteur amélioré) |
| Planck | régime de Wien : cible = −91,2 + 2,284·log(ν) − 4,787×10⁻¹¹·ν/T (coefficient ≈ −h/k) | 0,9999 | Prouvé (moteur amélioré) |
| Hubble | données non-univaluées — vraie dispersion, pas un bug | — | Abstention |
Le moteur a été amélioré EN DIRECT pendant la construction de cette page : Rydberg, Bode et Planck s'abstenaient pour deux raisons de code, diagnostiquées puis corrigées — (1) toute famille puissance/exponentielle exige cible>0, donc une cible uniformément négative (souvent déjà un 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 lit le résidu en Y, pas 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 solutions de repli automatiques dans la cascade de discover_law — zéro régression confirmée sur les 27 cas de benchmark_motor.py (24/27 inchangés, avant et après). Les trois lois ci-dessus ont ensuite été re-prouvées par le moteur seul, sans indice, via mouhn --file. Effet secondaire honnête : un bug préexistant a aussi été trouvé dans _outlier_offer (son contrôle textuel échoue car « NO LAW PROVED » contient « LAW PROVED » comme sous-chaîne) — signalé, pas encore corrigé. Un second vrai bug (ZeroDivisionError dans discover_trig_ratio_law, déclenché par 192_vineyard) est aussi signalé sans correction. Rien de tout ça n'a été poussé sur le dépôt : les changements vivent dans l'arbre de travail local.
La chaire « Mobilité et Transport Intelligent » (Mohamed Mosbah, LaBRI, depuis 2019) étudie le mouvement humain via le GPS du campus. Ces trois scénarios reproduisent des lois de mobilité réelles et mesurées dans la littérature, à l'échelle du campus, exécutés en direct localement.
exposant −1,712 retrouvé sur un échantillon campus (N=28) vs. −1,75 publié (Gonzalez, Hidalgo & Barabási, Nature 2008) — R² held-out 0,899
Croissance sous-linéaire des lieux visités, S(t) ~ t^μ, μ mesuré ~0,6, caché parmi 15 colonnes de télémétrie GPS. Le moteur a trouvé la bonne paire seul parmi 105 combinaisons possibles : μ = 0,58 — signalé confiance FAIBLE malgré l'exposant correct (la queue quasi plate rend l'extrapolation du R² instable même quand l'ajustement est bon — de l'honnêteté, pas un défaut).
Batterie de l'appareil vs. force du signal GPS — aucune vraie loi causale (indépendants par construction). Le moteur s'abstient : « ne rapporte pas de constante/exposant pour éviter d'inventer une loi ».
Exécuté localement 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 nombre de ce dossier est reproductible : même code, mêmes données, même résultat — et ça 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.