RECHERCHEMOUHN · DOSSIER DE PREUVES

Trois questions que personne d'autre ne mesure.

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 ?

0,1–2,4 %
erreur sur la constante à 120 % de bruit, à partir de 2 000 points
14 / 14
systèmes dynamiques de Strogatz (SRBench) — coefficients exacts
honnête
sur le problème ouvert depuis 40 ans — s'abstient, puis trouve seul la vraie chimie
Modèle : Qwen 3.6 · Outil de découverte : mouhn_agentics · code ouvert, mesures reproductibles
01

La constante physique retrouvée, avec le bruit d'un vrai capteur.

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

Physique · Chute libre
d = (g/2)t²
0,2 %
Physique · Pendule
T = 2π√(L/g)
0,3 %
Physique · 3ᵉ loi de Kepler
T = a^1,5
0,8 %
Physique · Hooke
F = kx
1,5 %
Physique · Ohm
V = RI
0,0 %
Physique · Coulomb
F = kq₁q₂/r²
1,8 %
Chimie · Beer-Lambert
A = εLc
4,8 %
Chimie · Décroissance
N = N₀e^(−λt)
1,6 %
Biochimie · Michaelis-Menten
v = VmaxS/(Km+S)
2,7 %
Voir les constantes exactes et les niveaux de bruit
DomaineLoiBruitConstante retrouvéeErreurVerdict
PhysiqueChute libred = (g/2) t²6 %g (via C=g/2)0,2 %Prouvé
PhysiquePenduleT = 2π√(L/g)4 %g0,3 %Prouvé
PhysiqueKepler (3ᵉ loi)T = a^1,55 %exposant 3/20,8 %Prouvé
PhysiqueHookeF = k x4 %k (N/m)1,5 %Prouvé
PhysiqueOhmV = R I3 %R (Ω)0,0 %Prouvé
PhysiqueCoulombF = k q₁q₂/r²6 %exposant −21,8 %Prouvé
ChimieBeer-LambertA = ε L c2 %ε4,8 %Prouvé
ChimieDécroissance radioactiveN = N₀ e^(−λt)5 %demi-vie1,6 %Prouvé
BiochimieMichaelis-Mentenv = Vmax S/(Km+S)6 %Vmax, Km2,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.

Plus de bruit ne fait pas mentir le moteur — ça le fait taire, jusqu'à ce qu'il ait assez de points.

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.

N = 2 000 N = 20 000
0 % 1 % 2 % 3 % 20 % bruit 60 % bruit 120 % bruit

erreur retrouvée (%) vs. niveau de bruit — les deux séries sont mesurées, aucune n'est interpolée

Voir la grille exacte à 9 cellules
Niveau de bruit2 000 points20 000 points
20 % bruit0,5 % Prouvé0,1 % Prouvé
60 % bruit2,4 % Prouvé0,2 % Prouvé
120 % bruit2,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.

120 % bruit · N=20 000 → 0,1 % d'erreur
60 % bruit  · N=200    → abstention honnête
limite connue      → 20 % bruit, N=200 : loi fausse

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.

02

La formule n'est écrite nulle part dans le moteur. Il la trouve quand même.

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.

8 planètes, données réellesdroite ajustée, pente 1,5
log T = −1 0 1 2 3 Merc. Neptune

log(période) vs. log(distance), Mercure → Neptune — valeurs publiques, zéro LLM dans la lecture des données

Voir les trois redécouvertes
DomaineSource (données réelles)Loi retrouvéeRéférence publiéeVerdict
Astronomie3ᵉ loi de KeplerWikipédia — 8 planètesT = 365,27 · a^1,5T² ∝ a³ (Kepler, 1619)Exact
Science des matériauxDureté VickersMaterials Project — 36 composés superdurs (DFT)Hv ≈ 0,1495 · GHv ≈ 0,151 · G (Teter, 1998)Écart de 1 %
NanotechnologieCourbe de taille CdSeYu, Qu, Guo & Peng — Chem. Mater. 2003forme rationnelle D(λ), R² held-outcourbe publiée (même article)R² = 1,0000
Science des matériauxK → Hv, retesté en directmême cache Materials Project (36 composés)candidat Hv ≈ 4,10 · K^0,5R² held-out = −35,3 — ne généralise pasAbstention

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

03

Face au propre étalon du domaine.

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.

Avant — 5 / 14

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.

Après — 14 / 14

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

04

Le problème ouvert depuis 40 ans. Le moteur s'abstient — puis trouve la chimie, seul.

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.

Pas de loi

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.

L'abstention devient une carte

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 :

Tl
4,3×
Hg
3,1×
Pb
enrichi
Nd
enrichi
Bi
enrichi
Ca
enrichi
Sm
enrichi
Cu
paire centrale
Zn
poison

— littéralement les cuprates (HgBaCaCuO, TlBaCaCuO, BiSrCaCuO). Zn est le poison classique des cuprates, redécouvert à partir des données seules.

Thèse validée

« 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².

additif
R² 0,661
+ paires
R² 0,802

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.

05

Vrai bruit de bassin de traction. Le moteur trouve seul le pôle physique de vitesse de carène.

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.

forme trouvée, tracée à partir de sa propre équation
Fr ≈ 0,497 — pôle de vitesse de carène Fr 0,10 0,30 0,44

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.

forme  → Fr^3,922 · e^(−2,78·Fr) / (1 − Fr/0,497)
R² (échantillon)  → 0,9778
R² (held-out)  → 0,9808

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 coque, même loi — jusqu'à ce que le bruit tue le signal, honnêtement.

Même jeu de données, bruit multiplicatif synthétique croissant ajouté à la cible réelle. Testé en direct le 2026-08-04.

R² held-outseuil d'abstention
0,5 0,75 1,0 +0 % +30 % +80 % +150 %

à +30 % le moteur s'abstient déjà — la corrélation existe (0,98) mais aucune forme à une variable ne tient proprement

Voir le tableau exact du balayage de bruit
Bruit ajoutéR² échantillonR² held-outVerdictCe que dit le moteur
0 %données réelles0,9780,981Prouvépôle physique Fr≈0,497 retrouvé
+30 %synthétique—~0,94Abstentionsous la barre — corrélation 0,98 existe, aucune forme à 1 variable ne tient
+80 %synthétique0,7720,80 ± 0,05Abstentionmeilleur essai (par morceaux) — le moteur : « approximation locale, PAS la loi »
+150 %synthétique0,7020,539Abstentionle 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.

Ma machine, mon modèle, mes commandes. Rien de tout ça n'est une maquette.

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.

machine    → reynaldo · Linux CachyOS · x86_64
GPU        → NVIDIA RTX 4090, 24 564 MiB
modèle  → Qwen 3.6, backend local — pas d'API cloud
commande → mouhn --file yacht.csv "..."
sessions  → c9081 (loi propre) · c9082/c9083/c9084 (balayage de bruit)
horodatage → 2026-08-04, exécuté en écrivant ce dossier

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

Un autre test, pas le même : 24 vrais jeux de données, deux pistes séparées.

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.

Premiers principes — 12 / 13 prouvés

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

Boîte noire — 0 ajustement 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.

Voir les 13 résultats « premiers principes »
Jeu de donnéesCe qui a été trouvéR² held-outVerdict
Keplery = 363,99 · a^1,51,0000Prouvé
Newtongravitationforme log-linéaire (G·m₁m₂/r² littéral réfuté au held-out)≈0,999Prouvé (structure)
Gaz parfaitlog-linéaire ; PV=nRT littéral réfuté0,9992Prouvé (structure)
Leavittpériode-luminositéforme en puissance initiale REFUSÉE au held-out ; forme rationnelle retenue—Prouvé (auto-corrigé)
Schechterloi rationnelle0,9988Prouvé
Supernovae (zg)calibration à 5 paramètres, 243 points réels0,9991Prouvé
Tully-Fishersomme à 3 termes (1/DV, log DV, sin DV)0,996Prouvé
AbsorptionMichaelis-Menten, Vmax/Km0,98Prouvé
Supernovae (zr)quadratique par morceaux (seuil à x=5,46), signalé « approximation locale »0,9818Prouvé (local)
Bodesentinelle n=−1000 détectée et exclue automatiquement ; exp(n)+décalage0,9622Prouvé (moteur amélioré)
Rydbergcible = −16,208 − 0,9995·log(|1/n₁²−1/n₂²|)1,0000Prouvé (moteur amélioré)
Planckrégime de Wien : cible = −91,2 + 2,284·log(ν) − 4,787×10⁻¹¹·ν/T (coefficient ≈ −h/k)0,9999Prouvé (moteur amélioré)
Hubbledonné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.

Trois scénarios ancrés dans une vraie recherche du LaBRI (CNRS/Inria/Bordeaux INP).

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.

P(Δr) ~ Δr^−1,75, log-log
bas haut trajets courts trajets longs

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

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

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

Contrôle d'honnêteté

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.

Trois preuves, une seule discipline : ne jamais présenter comme prouvé ce qui ne l'est pas.

Bruiterreur mesurée, pas devinée — 0,1 %–4,8 % sous bruit réaliste, silence quand le signal est trop faible
RedécouverteKepler, Teter, CdSe — la loi n'était écrite nulle part dans le code
Honnêtetésur le problème ouvert (Tc), abstention puis vraie chimie trouvée seul

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.