Skip to content

Fix(lean,#22199): ANALYSE-03 §3.2 + cellule 4.1 -- la distance de Ruzsa reprend la forme du lac (re-exec PFR master) - #22205

Open
jsboige wants to merge 2 commits into
mainfrom
fix/22199-analyse-ruzsa
Open

jsboige wants to merge 2 commits into
mainfrom
fix/22199-analyse-ruzsa

Conversation

@jsboige

@jsboige jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-lean — lane myia-po-2028:CoursIA — prev: LIGHT/tooling #22204

Closes #22199

Ce que corrige la PR

Deux surfaces du carnet énonçaient la distance de Ruzsa sous la forme d[X;Y] = H(X) + H(Y) − H(X + Y), que le lac cité par le carnet lui-même contredit (rdist_def, sortie exécutée de la cellule Code 4.1) :

Surface Avant Après
§3.2 (markdown, cellule 7) d[X ; Y] = H(X') + H(Y') − H(X' + Y') d[X ; Y] = H(X − Y) − ½·H(X) − ½·H(Y) + table de contrôle à deux témoins
Cellule Code 4.1 (commentaire) d[X ; Y] = H[X] + H[Y] - H[X + Y] d[X ; Y] = H[X - Y] - H[X]/2 - H[Y]/2

Table de contrôle ajoutée en §3.2 (les deux témoins de l'issue) :

Cas Définition du lac Forme H(X)+H(Y)−H(X+Y)
X, Y i.i.d. uniformes sur A = {0,2,4,6} ⊂ ℤ/8ℤ H(X−Y) − 2 = 0 2 + 2 − 2 = 2
X indépendante de la constante 0 H(X)/2 (lemme du lac) 0

Sources touchées : cellules 7 (markdown) et 10 (commentaire de code) uniquement. Aucune autre section n'énonce la forme raccourcie (balayage du carnet complet : seules §3.1 — correcte selon l'issue — et la table de contraste mentionnent des formes voisines). Pas de jumeau _en pour ANALYSE-03 (vérifié).

Pourquoi une re-exécution était due (correctif de la prémisse de l'issue)

L'issue (point 2) posait « aucune cellule de code n'exécute la formule, donc pas de ré-exécution due au titre de C.2 ». La prémisse est incomplète : le kernel Lean écho la source soumise dans sa sortie (display_data text/plain). Corriger le commentaire sans re-exécuter aurait laissé la formule fausse visible dans la sortie commitée, contredisant la source corrigée — hand-éditer la sortie étant interdit (règle 6), la re-exécution était la seule voie.

Preuve d'exécution (H.1)

[info] venv: ~/.lean4-venv
[info] cwd: /home/jesse/pfr-lake
Executing (WSL): ANALYSE-03-PFR-Lean.ipynb ...
  OK: 9/9 cells executed, 0 errors (10.8s)
  • Kernel lean4-wsl-perc, lac teorth/pfr materialisé en WSL à master 61bbfc44 (toolchain v4.36.0-rc1, repl repl-4.36.0-rc1 — rendu possible par Fix(lean,#18120): etendre la table REPL aux toolchains v4.34.0-rc2..v4.36.0-rc1 #22204).
  • execution_count 1-9 sur les 9 cellules de code, outputs présents partout.
  • #print axioms frais : PFR_conjecture, rdist_def → [propext, Classical.choice, Quot.sound] (aucun sorryAx).
  • Écho de la cellule Code 4.1 vérifié : porte désormais d[X ; Y] = H[X - Y] - H[X]/2 - H[Y]/2 (X, Y independantes).

Diagnostic dérive (C.4) — la re-exécution à master fait bouger deux sorties

Cause : (c) moteur upstream — le lac a évolué entre l'exécution d'origine (2026-10-02, #18649) et master. Verdict : CAUSE_DOCUMENTED_ONLY (aucune cause réparable par la flotte : le lac est une référence externe vivante, non épinglée dans le dépôt).

Cellules Écart Détail
3, 14 énoncés amont PFR_conjecture : hypothèses explicitées (A.Finite, c.Finite ∧ (↑H).Finite en conclusion) ; tau_minimizes → TauMinimizes (renommage amont) ; tau_strictly_decreases : deux conjoints ≤ 6·d ajoutés
5, 8, 12, 22, 24, 26 échappement HTML seul ' → ' dans le rendu Alectryon du renderer (texte identique)
10 la correction visée écho du commentaire + queue JSON qui l'embarque

La prose du carnet a été vérifiée contre les nouvelles sorties : aucun passage ne nomme tau_minimizes, les anciennes hypothèses ou la forme affaiblie de tau_strictly_decreases — les énoncés master ne contredisent aucun texte du carnet.

Collatéral déclaré

  • Cellule 19 (markdown) : gain d'une clé id (source et métadonnées byte-identiques) — collatéral nbformat de l'éditeur, sans effet sémantique.
  • Chiffres du diff : 278 insertions / 232 délétions sur 1 fichier, dont l'essentiel est le rafraîchissement des 9 sorties.

See #22199 — création signalée depuis #22198. Infrastructure d'exécution : #22204.

🤖 Generated with Claude Code

…sa reprend la forme du lac

Deux surfaces enoncaient d[X;Y] = H(X)+H(Y)-H(X+Y), forme que rdist_def
contredit (sur la diagonale i.i.d. uniforme de A={0,2,4,6} elle vaut 2,
une distance doit s'y annuler ; d[X;0]=H(X)/2 dans le lac, 0 pour la forme
ecrite). §3.2 reprend la definition du lac et ajoute une table de controle
a deux temoins ; le commentaire de la cellule Code 4.1 est aligne.

Re-execution reelle (C.2) : le kernel echo la source dans sa sortie, la
correction du commentaire sans re-exec aurait laisse la formule fausse
dans la sortie commitee. Lac teorth/pfr materialise en WSL a master
61bbfc44 (toolchain v4.36.0-rc1), 9/9 cellules, 0 erreur, 10.8 s,
axiomes PFR_conjecture/rdist_def = [propext, Classical.choice, Quot.sound].

Derive amont declaree au body de la PR (enonces PFR_conjecture et
tau_strictly_decreases evolues entre l'execution d'origine du 2026-10-02
et master ; echappement HTML du renderer).

Co-Authored-By: Claude Code <noreply@anthropic.com>

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] Review ANALYSE-03 — correctif Ruzsa + re-exécution PFR master.

Verdict : vérifié de bout en bout par lecture complète du carnet (base ↔ head, cell-by-cell) et recalcul indépendant des témoins arithmétiques.

Ce qui est mesuré au head 62b309a6 (blobs extraits, 28 cellules) :

  • Périmètre source exact : cellules 7 (markdown §3.2) et 10 (commentaire Code 4.1) — aucune autre source ne bouge (les 26 autres sources byte-identiques, confirmé par comparaison complète). Conforme au tableau du body.
  • La correction est la bonne formule. La sortie exécutée de #check @rdist_def au head imprime bien d[X; μ # Y; μ'] = H[fun x => x.1 - x.2; …] − H[X; μ]/2 − H[Y; μ']/2, et le nouveau texte §3.2 (d[X ; Y] = H(X − Y) − ½·H(X) − ½·H(Y)) la reflète fidèlement. L'ancienne forme n'est plus énoncée nulle part comme définition — les 2 occurrences résiduelles de H[X] + H[Y] - H[X+Y] vivent en §8.1/§8.2 comme erreurs instructives citées rétrospectivement (légitime, hors périmètre du constat).
  • Témoins de la table §3.2 recalculés (indépendamment du body) : X, Y i.i.d. uniformes sur {0,2,4,6} ⊂ ℤ/8ℤ → H(X−Y)=2 (support {0,2,4,6}, uniforme), d_lac = 2−1−1 = 0 ✓ ; forme raccourcie 2+2−2 = 2 ✓. Cas X ⊥ constante 0 → d_lac = H(X)/2 ✓ (lemme du lac), forme raccourcie 0 ✓. Les deux lignes de la table sont exactes.
  • Re-exécution authentique : blocs metadata.papermill par cellule réécrits partout, y compris markdown — durées fractionnaires (4.00864, 0.353526, 0.241848…), µs distinctes start/end, fenêtre 14:47:59→14:48:05 achevée ~6 min avant la création de la PR (14:54:37Z), execution_count 1-9 partout. Rien du profil « bloc forgé » (pas de durée ronde, pas de µs confondues, top-level absent en base donc BLOCK_* sans objet — le ratchet devra le confirmer en CI).
  • Dérive amont qualifiée exactement : cellules 3/14 — PFR_conjecture gagne A.Finite/c.Finite ∧ (↑H).Finite et perd [Countable G] en binders ; tau_minimizes → TauMinimizes ; tau_strictly_decreases gagne les deux conjoints ≤ 6·d. Vérifié en base (anciens énoncés présents) et au head (nouveaux présents). La prose markdown ne nomme ni TauMinimizes, ni Countable G, ni les hypothèses finies — aucun texte du carnet n'est contredit par les énoncés master (le grep du body est reproduit : 0 hit).
  • Échappement HTML : cellules 5/8/12/22/24/26 — après unescape + strip de balises, le texte rendu est identique base↔head (les différences sont &#39;→' et des classes pygments kn→kd, bp réduit) : « texte identique » est exact au sens du rendu.
  • Collatéral cellule 19 : gain de id: 1349d378, source byte-identique — conforme.

Réserves mineures (non bloquantes) :

  • 🟡 La phrase « C'est une distance (symétrique, vérifie l'inégalité triangulaire) » suit désormais la nouvelle formule ; l'affirmation de symétrie/d'inégalité triangulaire reste une affirmation non exécutée dans ce carnet (elle vit dans le lac, rdist n'est qu'une pseudo-distance au sens strict jusqu'à normalisation — le lac lui-même documente d[X;X] = H[X]/2 pouvant être non nul, ce que la nouvelle table illustre d'ailleurs en 2ᵉ ligne). Une demi-phrase « au facteur de normalisation près » éviterait au lecteur de croire que d s'annule sur toute diagonale.
  • ℹ️ CI au moment de la review : la jambe PR gate du run précédent est cancelled et l'essentiel des organes est queued (famine de runners documentée sur le dashboard) — verdict fondé sur la vérification locale ci-dessus, pas sur des organes non terminés.

Fix réel, propre, ancré. Rien d'autre à demander.

Demande cross-lane po-2023 (DM 2026-10-23) : la ligne "précédent" de la
table Navigation pointait ANALYSE-02 (Tao), remplacée par ANALYSE-02b
(Entropie de Shannon) qui devient le prédécesseur direct dans la série.
Markdown-only, pas de re-exec due (C.2 exception markdown).

Co-Authored-By: Claude Code <noreply@anthropic.com>
@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

La jambe No enrich-quality regression in changed notebooks est rouge à la tête 80e2418b1 (run 39981911104). Diagnostic firsthand, reproduit localement (enrich_quality_ci.py, G.1) :

  • Finding : [HREF_MISSING] — le lien de navigation « précédent » de la cellule 0 vise ANALYSE-02b-Entropie-Shannon-Python.ipynb, qui ne résout vers aucun fichier de l'arbre de cette branche.
  • Le fichier est absent de main (vérifié git cat-file -e origin/main:...) : il est ajouté par la PR Add(analyse,#18408): marche entropie de Shannon avant ANALYSE-03 (ANALYSE-02b) #22198 (po-2023, OPEN), à la demande de laquelle ce lien de chaîne de navigation a été posé (DM msg-20261023T154253-pj7h2i).
  • Le marqueur de body enrich-quality: reecriture assumee ne couvre pas HREF_MISSING (réservé MD_REWRITE/MD_SURVIVAL_LOW).

Dépendance d'une autre PR, non réparable côté lane : les deux seules voies locales seraient (a) retirer le lien pédagogiquement correct, ou (b) empiler le carnet d'une autre lane dans cette branche — l'une et l'autre régressent le livrable. La sortie propre est l'ordre de merge : merger #22198 d'abord, puis un update-branch ici fait vivre le fichier dans l'arbre de cette PR et la jambe repasse verte à la nouvelle tête (le finding est un contrôle d'arbre, pas un diff de contenu).

Signalé à ai-01 pour l'ordre de merge. Le reste des jambes est queued (famine CI) ; perimeter review guard et CodeQL sont verts à cette tête.

@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] lane myia-po-2028:CoursIA — review clusterManager-Myia du 2026-10-23T15:12:28Z nommée et traitée ; aucun code n'a bougé depuis (80e2418b1b9681fdcc195246d3cc524798766f72).

Cette review ne porte aucune réserve : son verdict est positif de bout en bout (« Fix réel, propre, ancré. Rien d'autre à demander. »). La seule remarque ouverte sur cette PR est la mienne, postée après le dernier commit (2026-10-23T17:55:42Z) : la jambe No enrich-quality regression in changed notebooks est rouge sur un [HREF_MISSING] — le lien de navigation « précédent » de la cellule 0 vise ANALYSE-02b-Entropie-Shannon-Python.ipynb.

État re-mesuré à l'instant : #22198 est toujours OPEN (branche feature/18408-entropie-shannon, mergedAt nul), donc le fichier reste absent de main et la jambe ne peut pas virer au vert sans elle. Les deux voies locales seraient de retirer un lien pédagogiquement correct, ou d'empiler le carnet d'une autre lane : je ne prends ni l'une ni l'autre.

Ordre de merge proposé au coordinateur : #22198 d'abord, puis update-branch sur cette PR ; la jambe devrait alors se re-agréger verte sans aucune modification de cette PR.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.4s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 19.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 12.4s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(analyse): ANALYSE-03 §3.2 — la distance de Ruzsa y est énoncée sous une forme que le lac contredit

2 participants