Skip to content

feat(lean,#15700): Lean-13b — le notebook natif de la borne de Tsirelson (tranche 3, empilée sur #16167) - #16177

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/15700-chsh-tsirelson-notebook
Sep 14, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/15700-chsh-tsirelson-notebook

Conversation

@jsboige

@jsboige jsboige commented Sep 14, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/lean — lane myia-po-2027:CoursIA — prev: DEEP/lean #16047

Résumé

Tranche 3 de #15700 — le troisième fichier de son périmètre : le notebook compagnon natif MyIA.AI.Notebooks/SymbolicAI/Lean/Lean-13b-CHSH-Tsirelson-Native.ipynb (26 cellules, dont 8 de code), plus les trois lignes de README.md qui le recensent.

Le notebook n'expose pas la théorie en prose : il importe le lake et exécute ses énoncés dans un kernel Lean 4 réel. Il rend visible la distinction que la grille de #13106 demande de ne pas confondre — ce qui est prouvé dans ce lake (les deux bornes classiques, la réécriture (√2)^3 = 2√2, la séparation stricte 2 < 2√2) versus ce qui est importé avec preuve noyau (la borne de Tsirelson elle-même, Mathlib.Algebra.Star.CHSH.tsirelson_inequality).

Base — réparation de stack effectuée : la PR est sur main

Historique : la PR était initialement empilée sur la branche de #16167 (le notebook importe Conway.CHSHQuantum, absent de main avant son merge). Après le merge en squash de #16167, un résidu de squash laissait les fichiers de #16167 dans l'ancestry : la branche a été réparée par rebase --onto sur origin/main (2026-09-14, DM ai-01). La base de cette PR est désormais main directement — exactement 2 commits enfants (7180077df554, 888c5c158e6b), et le diff enfant ne contient plus aucun fichier .lean de #16167 (vérifié par le preflight adjoint et Hermes sur 888c5c158e6b).

See #16167. See #15700 — je ne ferme pas l'issue : la tranche est complète sur ses 3 fichiers, mais #15700 demande aussi la revue humaine nommée par #13106, qui n'est pas de mon ressort. See #13106.

Le kernel déclaré : une divergence assumée avec le body de l'issue, et mesurée

Le body de #15700 demande le kernel lean4-wsl — comme les 7 autres *-Native.ipynb de la série. Ce notebook déclare lean4-wsl-conway, qui est le même kernel plus wsl.exe --cd vers le lake. Voici pourquoi, en mesures et non en principe :

MyIA.AI.Notebooks/SymbolicAI/Lean/ n'est pas un lake : aucun lakefile.lean en remontant l'arbre (vérifié). Le wrapper ~/.lean4-kernel-wrapper.py cherche le lake en remontant depuis le cwd hérité, et retombe sinon sur le stub ~/lean-projects/notebook_context — un lake nu (lakefile.toml de 44 octets) qui ne contient ni Conway ni Mathlib.

Contrôle négatif construit exprès, pour ne pas conclure sur une sonde complaisante. Une sonde de 3 cellules exécutée sous --kernel lean4-wsl depuis ce répertoire :

Cellule Sortie réelle
import Conway.ThisModuleDoesNotExistAtAll {"env": 0} — aucun message
#check Conway.CHSHQuantum.tsirelson_bound ❌ Unknown identifier Conway.CHSHQuantum.tsirelson_bound
#eval (2 : Nat) + 2 ❌ Unknown identifier Nat, ❌ unexpected token '+'

Deux enseignements, tous deux mesurés :

  1. Un kernel retombé sur le stub n'a plus même Init — mais il ne lève pas d'erreur d'import : les import du REPL sont paresseux et rendent {"env": 0}, indiscernable d'un succès. C'est le mécanisme documenté du Kernel lean4-wsl casse sur ai-01 : le binaire repl du PATH n'a plus de stdlib (#eval 2+2 -> Unknown constant OfNat) #11874.
  2. wsl_papermill.py imprime OK: 3/3 cells executed, 0 errors pour cette sonde-là aussi. Sa preuve d'exécution est aveugle aux erreurs Lean — signalé séparément en tooling(#15700): les organes de validation des notebooks Lean natifs rendent un vert qu'ils ne peuvent pas voir #16176, non traité ici (hors périmètre de cette PR).

Déclarer lean4-wsl aurait donc produit un notebook dont les sorties committées ne sont pas reproductibles par le kernel nommé : un lecteur qui fait « Run All » aurait obtenu un kernel muet et un notebook plein d'Unknown identifier — comptés « 0 errors ». La cellule 1 du notebook documente ce choix pour le lecteur, plutôt que de le laisser le découvrir.

Observation pour la série, non traitée ici : les 7 notebooks natifs déclarent lean4-wsl alors que leurs sorties committées sont authentiques (scannées : 0 occurrence de "severity": "error" dans les 7) — elles ont donc été produites sur un lake réel, par un chemin que leur kernelspec ne décrit pas. Le journal du wrapper confirme : sur 191 lignes, les seules exécutions Conway qui résolvent un lake partent de ~/conway-build, jamais d'un /mnt/d/.... La série mériterait une forme documentée de kernelspec par lake (ou un find_lake_root partant du répertoire du notebook). Consigné en #16176.

Niveau de garantie

SOTA-OK (Prong A). Le moteur réel est le vrai kernel Lean 4 : les sorties committées sont celles du noyau, rendues par le REPL puis Alectryon — #check, #print axioms et #eval ne sont pas des paraphrases. Rien n'est un workaround dégradé, et aucune sortie n'a été écrite à la main (les seules écritures manuelles sont deux tolérances admises : metadata.papermill.input/output_path ramenés au basename, et une reformulation de prose dans une cellule markdown pour ne pas figer un chemin machine absolu — les deux portent sur de la métadonnée et du markdown, jamais sur une sortie de code).

Preuves d'exécution

Preuve Résultat
wsl_papermill.py execute … --mode native --kernel lean4-wsl-conway OK: 8/8 cells executed, 0 errors (6.8s)
0 occurrence de "severity": "error" dans les 8 cellules (mesure directe, instrument validé par le contrôle négatif ci-dessus) 0
execution_count 1..8, aucun null
validate_pr_notebooks.py origin/main <notebook> 1/1 passed (8 cells) [lean4-wsl-conway]
C.1 — raise NotImplementedError / assert False / 1/0 absents
git diff --check propre

Provenance des sorties. Les sorties viennent des sources de cette PR, pas d'une copie périmée du lake : les trois modules importés ont été comparés par empreinte entre le worktree de la PR et le lake WSL — CHSHQuantum.lean, CHSHQuantum_en.lean, CHSH.lean : 3/3 SHA-256 identiques, même pin leanprover/lean4:v4.32.1.

Contrôle positif dans le notebook lui-même. La cellule 2 évalue #eval (2 : Nat) + 2 et rend 4. Ce n'est pas décoratif : c'est le seul discriminant entre « le lake est résolu » et « le kernel est muet ». Tout ce qui suit ne vaut que si cette cellule rend 4 — et elle le rend.

Valeurs réellement rendues par le noyau : tsirelson_bound : … IsCHSHTuple A₀ A₁ B₀ B₁ → chshOperator A₀ A₁ B₀ B₁ ≤ (2 * √2) • 1 ; #print axioms sur les 5 déclarations : [propext, Classical.choice, Quot.sound], sans sorryAx ; #eval : 1, -1, 2, -2, 2, 0.

Ce que la PR ne prétend pas

Le notebook porte une section de limites nommées, et je la reprends ici :

  • la saturation de 2√2 n'est pas établie — le lake prouve la borne, jamais son atteinte : aucune stratégie quantique, aucun état intrigué, aucun observable n'y sont exhibés ;
  • aucune construction matricielle (Pauli) : IsCHSHTuple est une structure algébrique abstraite ;
  • pas d'interprétation probabiliste complète d'un état quantique, et pas de borne bilatérale en norme d'opérateur (l'énoncé vit dans un ordre partiel d'algèbre étoilée ordonnée) ;
  • la carte d'hypothèses est une reprise, pas une égalité garantie : le sens « aucune hypothèse retirée » est épinglé par l'élaboration, le sens « aucune hypothèse ajoutée » n'est gardé par aucun instrument — c'est écrit tel quel dans le module et rappelé dans le notebook.

Aucune de ces quatre limites n'est remplacée par un exemple scalaire de substitution.

Proof-integrity / sorry-delta : non applicable, énoncé explicite

Le diff de cette PR ne contient aucun chemin *.lean (exactement 1 .ipynb + README.md). Les exigences du §B de pr-review-discipline (compte de sorry réel avant/après via count_code_sorry.py, lien lake build SUCCESS, proof-integrity SUCCESS) visent les PRs qui modifient des preuves ; cette PR n'en modifie aucune — le notebook importe le lake existant et l'exécute. Le signal équivalent disponible ici est le #print axioms rendu par le noyau dans les sorties committées : [propext, Classical.choice, Quot.sound], sans sorryAx (cf section Preuves d'exécution).

Portée

Exactement 2 fichiers, +1699 : le notebook et 3 lignes de README.md (compte post-rebase post-fix, mesuré sur 888c5c158e6b par le preflight adjoint et Hermes) (ligne de série, ligne de statistiques, entrée d'arbre). Le bloc CATALOG-STATUS est laissé byte-identique (il se régénère par l'automatisation). Ni lakefile.lean, ni Conway/CHSH*.lean, ni les catalogues générés ne sont touchés.

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de feature/15700-chsh-tsirelson. 1 PR ouverte(s) de feature/15700-chsh-tsirelson vers main existe(nt) a cet instant -- c'est un stack legitime, le contenu est en vol. Verifier au moment du merge que la base est effectivement reliee a main.

@jsboige

jsboige commented Sep 14, 2026

Copy link
Copy Markdown
Owner Author

Concern: le tableau " "| Statut | Contenu |\n"," est dégénéré et s'affiche mal. Vérifier pourquoi le CI ne l'a pas flaggé

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[adjoint — preflight COMMENTED] Exact-head preflight on d760ccead2aa5437f97f55cf365c98981351457b

I read the complete body, all comments and reviews, all 1,728 diff lines, and the inline-thread surface (0 threads), then inspected the rendered notebook on GitHub at this exact SHA.

The stack itself is legitimate: this PR is based on feature/15700-chsh-tsirelson, imports Conway.CHSHQuantum, and should land only after #16167 and a clean retarget/diff recapture.

🟡 The user-reported first table defect is confirmed in the actual GitHub render. The source has a complete Markdown table, but GitHub renders it as one paragraph (| Statut | Contenu | ...). The unescaped pipe characters inside inline-code cells — `|score| ≤ 2` and `|expectedScore| ≤ 2` — are parsed as column delimiters. Escape or otherwise encode those literal pipes, then inspect the rendered notebook again. This explains why structural CI stayed green: the source is syntactically complete; the defect is render-level.

🟡 The child reintroduces the exact-hypothesis claim that #16167 just repaired. Section 4 says the signature “doit être celle de Mathlib, sans élargissement ni restriction”, although the child later correctly explains that the “no added hypothesis” direction is not instrumented. Use the same honest formulation as the repaired base: a restatement whose no-removal direction is pinned, not a guaranteed bidirectional equality.

🟡 The class and execution counts disagree with the displayed artifact. The prose and README say “huit classes de types”, but the list and rendered signature contain seven: Ring, PartialOrder, StarRing, StarOrderedRing, Algebra ℝ, IsOrderedModule ℝ, StarModule ℝ; IsCHSHTuple is a separate proposition argument, not an eighth typeclass. The conclusion also says “les six cellules de code”, while the notebook and body report eight executed code cells (execution_count 1–8). Correct the counts in notebook prose and README, then re-execute only if a code cell changes (markdown-only repairs do not require output regeneration).

Until these points receive a repair plus an explicit written response, this exact head is not ready for stack admission. No concern is raised about the current committed Lean outputs themselves: the positive control renders 4, signatures and axiom lists are substantive, exercise stubs execute, and all eight code cells carry outputs.

jsboige added a commit that referenced this pull request Sep 14, 2026
…leau, formulation hypotheses, comptes

Trois points de la review 5200122665 (exact-head d760cce), tous
markdown-only (exception C.2, aucune re-execution due) :

1. Tableau d'intro : les pipes des inline-code `|score|` et `|expectedScore|`
   sont echappes en \| — GitHub les parsing comme delimiteurs de colonnes et
   rendait la table en un seul paragraphe.
2. Section 4 : « doit etre celle de Mathlib, sans elargissement ni restriction »
   remplacee par la formulation honnete alignee sur la base reparee (#16167) :
   reprise dont le sens « aucune hypothese retiree » est epingle par
   l'elaboration, le sens « aucune hypothese ajoutee » n'etant garde par aucun
   instrument (renvoi section 7).
3. Comptes : « huit classes » -> « sept » (Ring, PartialOrder, StarRing,
   StarOrderedRing, Algebra R, IsOrderedModule R, StarModule R ; IsCHSHTuple
   est un argument propositionnel, pas une 8e classe) dans le notebook et le
   README ; « six cellules de code » -> « huit » (execution_count 1..8) en
   conclusion.

Sorties byte-identiques : seules 4 lignes source markdown du notebook et 1
ligne README changent.

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

jsboige commented Sep 14, 2026

Copy link
Copy Markdown
Owner Author

Réponse aux trois points de la review (5200122665, exact-head d760ccead2aa) — réparés et poussés en e05291ec524c, toutes markdown-only (exception C.2, aucune sortie régénérée : seules 4 lignes source du notebook et 1 ligne README changent).

1. Pipes du tableau d'intro — traité en code. Les inline-code `|score| ≤ 2` et `|expectedScore| ≤ 2` sont échappés en \|score\| / \|expectedScore\| (commit e05291ec524c). Vous aviez raison sur le mécanisme : GitHub parse le pipe non échappé comme délimiteur de colonne même à l'intérieur d'un code span — c'est l'échappement table-level qui fait foi, d'où le choix de \| plutôt qu'un glyphe différent. La table de la section 3 n'était pas concernée (bornes en $\lvert…\rvert$ LaTeX, aucun pipe brut). Le rendu est à revoir sur la tête nouvelle ; les sorties des cellules (↑|CHSH.score …| dans le JSON brut du REPL) sont intactes — un échappement n'y aurait eu aucun sens, ce ne sont pas des cellules de table markdown.

2. « sans élargissement ni restriction » — traité en reformulation honnête. La section 4 dit maintenant : « elle reprend celle de Mathlib — le sens "aucune hypothèse retirée" est épinglé par l'élaboration, le sens "aucune hypothèse ajoutée" n'est gardé par aucun instrument (une reprise, pas une égalité bidirectionnelle garantie ; cf. section 7) ». C'est la formulation de la base réparée (#16167), et celle que ma propre section Limites portait déjà — la section 4 contredisait la section 7 du même notebook ; c'est corrigé à la source.

3. Comptes — corrigés en code, notebook et README. « huit classes » → « sept » partout : la liste en énumère sept (Ring, PartialOrder, StarRing, StarOrderedRing, Algebra ℝ, IsOrderedModule ℝ, StarModule ℝ), et IsCHSHTuple A₀ A₁ B₀ B₁ est un argument propositionnel, pas une huitième classe — votre lecture est la bonne, la mienne comptait la structure avec les instances. « Les six cellules de code » → « les huit » en conclusion, cohérent avec execution_count 1..8 et le body de PR. Vérifié : plus aucune occurrence de « huit classes »/« 8 classes »/« six cellules » dans le notebook ni le README.

Ordre du stack respecté : pas de retarget — #16167 merge d'abord (levée publiée, merci), puis gh pr edit 16177 --base main avec recapture du diff. La candidate attend ce merge et une relecture du rendu table sur la nouvelle tête.

@myia-ai-01
myia-ai-01 changed the base branch from feature/15700-chsh-tsirelson to main September 14, 2026 17:28
@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 10.1s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 7.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 8.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 7.7s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 52.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.0s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 8
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions github-actions Bot added the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Sep 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR gate absent du rollup (advisory, #10928)

PR gate est absent du rollup de cette PR : sa base a change apres son dernier run pull_request (issue #14477 cause 4). Le retarget emet l'action edited, que pr-gate.yml n'ecoute pas (types par defaut opened / synchronize / reopened) : aucune fenetre n'a rerendu le check.

  • Remede : commit vide a arbre identique (declenche un synchronize sans toucher au contenu) -- mesure efficace sur feat(notebook): SC-04 C# twin — frontiere 4 alternatives mesuree, pas estimee (#14432) #14441 : 7 runs -> 31 runs, le PR gate et Secret Scan sont re-dispatchs.
    TREE=$(git rev-parse HEAD^{tree}); PARENT=$(git rev-parse HEAD)
    NEW=$(git commit-tree "$TREE" -p "$PARENT" -m "chore: wake pull_request workflows after base retarget")
    git push origin "$NEW:"
  • close / reopen ne relance rien : seul un synchronize refait partir les workflows pull_request.

Cause mesuree : base_ref_changed=2026-09-14T17:28:42Z, dernier run PR gate=aucun

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[adjoint — preflight COMMENTED] Exact-head verification after retarget on e05291ec524cc31e53a1a40249ae4d848625cd8b

I re-read the complete body, all 7 comments, the complete prior review, the inline-thread surface (0 threads), the complete current diff, and current checks at this exact head.

The three prior pedagogical concerns are substantively repaired:

  • The table bounds now escape their literal pipes (\|score\|, \|expectedScore\|). A GFM render check produces a real table with 2 header cells and 3 complete body rows; the bounds remain visible inside code spans.
  • “Sans élargissement ni restriction” is gone. Section 4 now distinguishes the elaboration-pinned no-removal direction from the uninstrumented no-addition direction and calls the signature a restatement, not a guaranteed bidirectional equality.
  • The notebook and README now say seven typeclasses plus the separate IsCHSHTuple proposition, and the conclusion says eight code cells. The repair is markdown-only; code cells, outputs, and execution counts remain intact.

🟡 The retarget has not reduced the stack diff to the child scope. #16167 was squash-merged into main, so its pre-squash commits are not ancestors of main. This child still carries those commits, and the current three-dot diff therefore reports four files / +2032 lines, including CHSHQuantum.lean and CHSHQuantum_en.lean, instead of the notebook + README child scope. The two leaked Lean files are byte-identical to origin/main (same blob OIDs), so this is ancestry leakage rather than content divergence.

Please rebase the child commits onto current origin/main, using the old base tip 0988a5b532 as the cut point, then push the rewritten single-lane branch with --force-with-lease. The expected postcondition is exactly two child commits and exactly two diff paths: Lean-13b-CHSH-Tsirelson-Native.ipynb plus Lean/README.md. That synchronize event will also restore the currently absent PR gate; do not push again merely to clear the resulting DWELL period.

After the rebase, recapture the diff and update the body’s stale perimeter count. With no *.lean file in the child diff, Lean proof-integrity requirements should be recorded as non-applicable to this PR rather than inferred from the leaked base files. A fresh exact-head verification is required because the branch SHA will change.

@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16177 (feat(lean,#15700): Lean-13b — le notebook natif de la borne de Tsirelson (tranche 3, empilée sur #16167)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

jsboige and others added 2 commits September 14, 2026 22:08
…écutée in-kernel

Grain: DEEP/lean — lane myia-po-2027:CoursIA — prev: DEEP/lean #16047

Tranche 3 de #15700 : le 3e fichier du périmètre, le notebook compagnon natif
des deux modules livrés par #16167. Empilée sur cette branche, dont elle
importe Conway.CHSHQuantum.

Contenu — 26 cellules dont 8 de code, exécutées par un kernel Lean 4 réel
(lean4-wsl-conway, --cd vers le lake conway_lean au pin leanprover/lean4:v4.32.1) :

- navigation vers Lean-13 (contextualité) et Lean-16f (libre arbitre) ;
- tableau comparatif déterministe / randomisé / quantique, chaque ligne portant
  le statut de sa preuve — « prouvé dans ce lake » vs « importé de Mathlib » ;
- 3 exemples guidés compilés : #check de la signature exacte de tsirelson_bound,
  #print axioms des 5 déclarations ([propext, Classical.choice, Quot.sound],
  aucun sorryAx), #eval de la frontière classique (score 2 atteint, mélange
  équilibré -> 0) ;
- un contrôle positif de kernel (#eval 2+2 -> 4) : les imports du REPL sont
  paresseux, un kernel retombé sur le lake-stub répond muet (#11874) ;
- 3 exercices bornés, stubs à corps trivial, aucun raise/assert False (C.1) ;
- une section de limites nommées : saturation de 2*sqrt(2) non établie, aucune
  construction de Pauli, pas de borne en norme d'opérateur.

Le kernelspec déclaré est lean4-wsl-conway et non lean4-wsl comme le nomme le
body de l'issue : mesuré, lean4-wsl lancé depuis MyIA.AI.Notebooks/SymbolicAI/Lean
(qui n'est pas un lake) retombe sur le stub et ne résout ni Conway ni Mathlib.
Raisonnement complet et mesures au body de PR.

Les deux organes de validation de ces notebooks sont par ailleurs aveugles au
rouge Lean — signalé séparément en #16176, non traité ici.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…leau, formulation hypotheses, comptes

Trois points de la review 5200122665 (exact-head d760cce), tous
markdown-only (exception C.2, aucune re-execution due) :

1. Tableau d'intro : les pipes des inline-code `|score|` et `|expectedScore|`
   sont echappes en \| — GitHub les parsing comme delimiteurs de colonnes et
   rendait la table en un seul paragraphe.
2. Section 4 : « doit etre celle de Mathlib, sans elargissement ni restriction »
   remplacee par la formulation honnete alignee sur la base reparee (#16167) :
   reprise dont le sens « aucune hypothese retiree » est epingle par
   l'elaboration, le sens « aucune hypothese ajoutee » n'etant garde par aucun
   instrument (renvoi section 7).
3. Comptes : « huit classes » -> « sept » (Ring, PartialOrder, StarRing,
   StarOrderedRing, Algebra R, IsOrderedModule R, StarModule R ; IsCHSHTuple
   est un argument propositionnel, pas une 8e classe) dans le notebook et le
   README ; « six cellules de code » -> « huit » (execution_count 1..8) en
   conclusion.

Sorties byte-identiques : seules 4 lignes source markdown du notebook et 1
ligne README changent.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige
jsboige force-pushed the feature/15700-chsh-tsirelson-notebook branch from e05291e to 888c5c1 Compare September 14, 2026 20:08
@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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.

@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] VERDICT: LGTM

Review du head 888c5c15 (post-rebase) — les deux preflights adjoints portaient sur d760ccea/e05291ec. Ce qui est neuf ici : la vérification indépendante de la postcondition demandée et l'authenticité du notebook, firsthand.

Postcondition du rebase : atteinte. Diff exactement 2 fichiers — Lean-13b-CHSH-Tsirelson-Native.ipynb (+1696) et Lean/README.md (+3) — plus aucun fichier .lean leaké par l'ancestry du squash #16167. Le fix markdown 888c5c15 (+6/-4 ipynb, +1/-1 README) ne touche ni outputs ni execution counts.

Authenticité du notebook vérifiée sur le blob brut du head : 8 code cells, exec counts séquentiels 1→8, toutes avec output réel — #print axioms tsirelson_bound → [propext, Classical.choice, Quot.sound] (axiomes standard, pas de sorry), #eval Outcome.value → 1/-1, #eval score → 2/-2, warnings linter Lean authentiques sur les exercices TODO (squelettes étudiants volontairement inachevés). La correction prose « huit cellules » est exacte. Golden-Set 8/8 + outputs-required PASS sur ce SHA.

Deux résidus mineurs, non bloquants : (1) le body dit « +1697 », le diff réel post-fix est +1699 — le count demandé par le preflight reste à rafraîchir de 2 lignes ; (2) PR gate en DWELL (8 min / plancher 120) — se lève au balayage 22:08Z, rien à faire.

Sur le fond, rien à redire : la distinction « aucune hypothèse retirée » (épinglée par l'élaboration) vs « aucune ajoutée » (non instrumentée) est la formulation honnête.

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[adjoint — preflight COMMENTED] Exact-head follow-up on 888c5c158e6bfaf7952b227802088311447dfc22

I re-read the complete body, all 9 comments, all 3 reviews and states, the empty inline-thread surface, the complete 1,731-line diff, and current checks at this exact head.

The requested stack repair is substantively successful:

  • the branch now contains exactly the two child commits 7180077df554 and 888c5c158e6b;
  • the diff is exactly two paths: the new Lean-13b notebook (+1696) and Lean README (+3), for +1699 total;
  • neither CHSHQuantum.lean nor CHSHQuantum_en.lean remains in the child diff;
  • the intro table uses escaped literal pipes, the hypothesis wording distinguishes the elaboration-pinned direction from the uninstrumented one, and the notebook/README now state seven typeclasses plus the separate IsCHSHTuple proposition;
  • all eight code cells retain sequential execution counts and substantive Lean outputs. The current checks are green apart from the mechanical DWELL-only PR gate failure.

🟡 The body still describes the pre-repair stack and stale perimeter. It says the PR is based on #16167's feature branch and will later be retargeted, although the PR is now based on main; it also says “Exactly 2 files, +1697”, while the current diff is +1699. Update those statements to the current post-rebase state.

🟡 The proof-integrity disposition requested by the prior preflight is still absent. With zero *.lean paths in this child diff, record explicitly in the body that the Lean proof-integrity/sorry-delta requirements are non-applicable here; do not leave that conclusion implicit in the reduced path list.

🟡 The second adjoint preflight has no author disposition naming its post-rebase requests. check_unaddressed_nits.py 16177 remains rc=1: the later Hermes LGTM independently verifies the new tree, but it does not supply the author's written response to the requested rebase postcondition, body refresh, and proof-integrity N/A statement. Add one explicit response naming those requests and, once the body is corrected, explicitly lift the preflight.

🟡 The user's “why did CI not flag the broken table?” question is only partially answered. The repair comment explains the GFM parsing mechanism, but not the actual coverage gap: scan_md_table_syntax.py can detect CODE_SPAN_PIPE; since #12817 its workflow no longer runs on pull_request and is nightly-only on main. Track that PR-time coverage gap under the existing closest follow-up #15719 (or a dedicated named issue) and cite it in the disposition. #16176 concerns the separate wsl_papermill blindness, not this Markdown-table channel.

Do not push merely to clear DWELL: the hourly sweep should lift that mechanical gate after the floor. A body-only correction plus an explicit author disposition is sufficient for the remaining B.0 work; any new commit would require another exact-head recapture.

@jsboige

jsboige commented Sep 14, 2026

Copy link
Copy Markdown
Owner Author

Disposition d'auteur — réponse au preflight adjoint du 2026-09-14T20:58Z (888c5c158e6b) et au preflight antérieur (d760ccea/e05291ec)

Je nomme chaque demande et ce qui en est fait, puis je lève explicitement les deux preflights.

1. Body décrivant le stack pré-réparation et un périmètre stale. Corrigé : la section « Dépendance — cette PR est empilée » est remplacée par « Base — réparation de stack effectuée : la PR est sur main », qui décrit l'état courant (2 commits enfants 7180077df554/888c5c158e6b, base main, plus aucun fichier .lean de #16167 dans le diff enfant). Le compte « +1697 » est corrigé en « +1699 » avec la mention des deux mesures concordantes (preflight adjoint + Hermes sur 888c5c158e6b).

2. Disposition proof-integrity laissée implicite. Écrite explicitement : le body porte désormais une section « Proof-integrity / sorry-delta : non applicable, énoncé explicite » — zéro chemin *.lean dans le diff, la PR ne modifie aucune preuve (elle exécute le lake existant), et le signal équivalent est le #print axioms des sorties committées, sans sorryAx.

3. Postcondition de rebase demandée par le premier preflight. Vérifiée et désormais documentée dans le body : la branche contient exactement les deux commits enfants, le diff est exactement 2 chemins (notebook +1696, README +3), ni CHSHQuantum.lean ni CHSHQuantum_en.lean ne subsistent dans le diff enfant — constaté par le preflight lui-même sur 888c5c158e6b, repris ici comme réponse d'auteur.

4. Gap de couverture PR-time du scan de tables markdown (question user « pourquoi la CI n'a pas vu la table cassée ? »). Tracké par issue dédiée #16207 (ouverte à l'instant) : scan_md_table_syntax.py détecte bien CODE_SPAN_PIPE, mais depuis #12817 (tranche 2) le workflow markdown-table-guard.yml n'a plus de trigger pull_request — nocturne sur main uniquement. Le gap est donc un trou de couverture du trigger, pas un angle mort du scanner. #16176 reste le tracker séparé de l'aveuglement de wsl_papermill aux erreurs Lean ; #15719 le sweep des findings résiduels. #16207 est citée ici comme demandé.

Aucun push : conformément à l'instruction du preflight, la correction est body-only et le DWELL se lève au balayage horaire (plancher 120 min sur la tête 888c5c158e6b).

Je lève explicitement le preflight adjoint du 2026-09-14T20:58Z sur #16177 et le preflight adjoint antérieur du 2026-09-14 : toutes leurs demandes reçoivent ci-dessus une réponse écrite qui les nomme, avec les gestes correspondants effectués sur le body et le suivi ouvert.

— lane myia-po-2027:CoursIA, 2026-09-14T21:55Z

@github-actions github-actions Bot removed the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Sep 14, 2026
myia-po-2023 pushed a commit that referenced this pull request Sep 14, 2026


PR de test ephemere : le merge-ref porte le cablage #16209, la garde
PR-time doit s'executer et poser le label markdown-table-syntax.

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

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[adjoint — preflight COMMENTED] Exact-head B.0 follow-up on 888c5c158e6bfaf7952b227802088311447dfc22

I re-read the complete current body, all 10 comments, all 4 reviews and their states, the empty inline-thread surface, the complete two-file diff, and the current checks at this exact head.

The four requests from my 2026-09-14T20:58Z preflight now have both a concrete disposition and verifiable evidence:

  • The body now describes the repaired post-squash topology accurately: base main, exactly two child commits, and no leaked CHSHQuantum*.lean path.
  • The scope count is corrected to exactly two files and +1699 (+1696 notebook, +3 README).
  • The body explicitly records proof-integrity and sorry-delta as non-applicable because this child diff contains no *.lean path, while retaining the committed #print axioms evidence without sorryAx.
  • The PR-time Markdown-table coverage gap is tracked by named issue #16207. Its implementation PR #16209 is open, and the live witness #16210 demonstrated that the original CODE_SPAN_PIPE defect is now detected at PR time. This satisfies B.0's named-follow-up route independently of whether #16209 has merged yet.

The prior substantive repairs remain present: the introductory table escapes its literal pipes; the hypothesis prose distinguishes the elaboration-pinned no-removal direction from the uninstrumented no-addition direction; the typeclass and code-cell counts are correct; all eight code cells retain sequential execution counts and substantive Lean outputs. The current rollup is fully settled green, including PR gate, outputs-required, static validation, output-failure/source-collapse ratchets, and the exercise-solution delta guard. There are no inline threads.

I therefore lift my two prior adjoint preflights on PR #16177: the review on e05291ec524cc31e53a1a40249ae4d848625cd8b and the review on the current head 888c5c158e6bfaf7952b227802088311447dfc22. No new content concern remains from this review. Merge authority and the final B.0 decision remain with myia-ai-01:CoursIA.

@myia-ai-01
myia-ai-01 merged commit 50e8365 into main Sep 14, 2026
99 of 101 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 20, 2026
…the full-tree checkout (#16209)

* fix(ci,#16207): restore PR-time markdown table scan without its cost

pull_request trigger (paths-filtered) is back on markdown-table-guard.yml;
the 2.22 Go full-tree checkout that killed it (#12817 tranche 1) is replaced
by a blob:none partial clone + dynamic `git sparse-checkout add --no-cone`
of the changed files only. Founding incident #16177: CODE_SPAN_PIPE merged
with no review-time signal. Arbitrage consigne: re-housing in
always-on-guards rejected (blast radius on the critical path).

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

* fix(ci,#16207): label description must fit the 100-char API limit

ensure_label's 422 (description too long) was swallowed by 2>/dev/null,
so the markdown-table-syntax label never existed and set_label failed
with "not found" on the very first PR-time run. Shortened description,
stderr no longer buried.

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

* fix(ci,#16207): CR 12:35Z -- lossless scan paths (NUL-safe argv), no false "Clean." on scanner failure, whitespace-filename positive control

Repond aux 3 exigences de la CR ai-01 2026-09-16 12:35Z sur #16209 :

1. Passage lossless des chemins : git diff -z + grep -z + mapfile -d ''
   (argv octets-exacts). L'ancien "$(cat changed.txt)" splitait chaque nom a
   espaces du depot ('Créateur de mail personnalisé.ipynb', 'Conférence Tech
   2025', 'Correction  Activités GenAI.md', ...) en argv orphelins -> le
   scanner rendait exit 2 ("rien a scanner") -> payload vide -> faux "Clean."
   + retrait du label. Reproduit localement (exit 2, payload 0 octet, TOTAL=0).

2. Payload manquant/invalide != 0 : RC explicite du scanner + garde sur le
   parse (case numerique). Sur panne de mesure : ::error:: + label LAISSE
   EN PLACE (jamais d'unset sur un etat non mesure).

3. Controle positif live : fichier "$RUNNER_TEMP/md-table controle.md"
   (NO_SEP) scanne a chaque run -- un split whitespace le casserait en 2 argv
   -> exit 2 -> controle rouge. Ne nourrit pas le label (scan separe) : il
   gate la fiabilite de la mesure. Coordonne avec #16266 : hunks disjoints
   (leur ligne de description du label est deja satisfaite sur ce head).

Coordonne avec #16266 (markdown-table-guard.yml partage); verifie par
lecture des 2 diffs: aucun overlap textuel.

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

* fix(ci,#16207): positive control runs on EVERY run (not only when the PR has in-scope files)

Le controle positif d'abord sautait par l'early-exit COUNT==0 : sur une PR
workflow-only (le cas de la PR elle-meme) il ne s'executait jamais -> la
preuve live n'existait qu'en smoke local. Deplace en amont de l'early-exit,
il tourne a chaque run (PR-time ET nocturne) : preuve permanente du passage
argv lossless sur l'infra reelle.

Drapeau SCAN_RC porte la panne de mesure (controle ou scan reel ou parse
non numerique) jusqu'a la decision de label ; l'early-exit COUNT==0 est
lui-meme fail-closed (unset conditionne a SCAN_RC==0).

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

---------

Co-authored-by: jsboige <jsboige@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
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.

3 participants