Skip to content

feat(lean,#23499): Pli 2 Poincare -- note de conception, temoin de chaine FR/EN et carnet Lean-42 - #23506

Open
jsboige wants to merge 1 commit into
mainfrom
feature/18205-pli2-poincare
Open

jsboige wants to merge 1 commit into
mainfrom
feature/18205-pli2-poincare

Conversation

@jsboige

@jsboige jsboige commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-lean — lane myia-po-2025:CoursIA-2 — prev: MED/genai #22761

Pli 2 de l'EPIC origami géométrie différentielle (#18205), grain #23499. Trois livrables, dans l'ordre que le mainteneur a demandé (note d'abord, carnet ensuite).

Les trois marches

Marche Fichier État
1. Note de conception docs/lean/origami-pli2-note-conception.md livrée
2. Fichier de visite FR/EN differential_lean/PoincareChain.lean + PoincareChain_en.lean livrée
3. Carnet Lean-42-Poincare-Conjecture-Lean.ipynb livré, exécuté

Plus : differential_lean/lakefile.lean (les deux siblings entrent dans les globs, sans quoi ils ne seraient jamais élaborés — piège #6749) et SymbolicAI/Lean/README.md (ligne de table + entrée d'arbre).

Ce que le pli a trouvé, et qui n'était pas dans le body de l'EPIC

Le body de l'EPIC décrit la chaîne comme « Moise → chirurgie → extinction ». La lecture du module de l'énoncé dit autre chose, et c'est la matière du carnet :

  • la preuve de poincare_conjecture tient en 5 lignes de tactiques (module de 23 lignes, bloc du théorème de 11 lignes énoncé compris, 5 après := by — mesure 2026-10-30, recalculée par le carnet lui-même) ;
  • Moise est la porte d'entrée, pas une étape latérale : les hypothèses de l'énoncé sont purement topologiques, le flot de Ricci exige IsManifold (𝓡 3) ∞ M, et exists_isManifold_three est le seul passage du monde topologique au monde lisse ;
  • le moteur rend un difféomorphisme (smoothPoincareConjecture_holds), strictement plus fort que l'énoncé ; f.toHomeomorph est tout l'écart entre les deux ;
  • fineCutNeckSupplyStrong n'est pas la tête de la chaîne : c'est un maillon interne.

Note : la première version de ma note proposait Lean-38 et affirmait que la série s'arrêtait à Lean-37. Les deux étaient faux (Lean-38-Capstone-Geometry-Lean-Python.ipynb existe, la série va jusqu'à Lean-41). Corrigé en Lean-42, vérifié libre par git ls-tree (0 occurrence de Lean-4[2-9] sur main) et par recherche de PR. La correction de méthode est écrite dans la note (§5) plutôt que silencieuse.

Chiffres mesurés (recalculés par le carnet, pas recopiés)

Les chiffres de la prose viennent des sorties du carnet lui-même (C.5), et deux relevés indépendants — scripts de mesure hors dépôt et cellules du carnet — donnent exactement les mêmes comptes au pin v0.1.3 (7a48598d, Apache-2.0) :

Mesure Valeur
Modules du paquet DifferentialGeometry 17 555
Lignes du paquet 4 704 458
Clôture de l'énoncé 14 196 modules / 4 020 908 lignes
Part mobilisée 80,9 % des modules, 85,5 % des lignes

Contrôle de méthode : le même calcul reproduit exactement les trois petites clôtures du Pli 1 (33/13 432 · 47/23 522 · 383/181 252), ce qui vaut validation indépendante de l'instrument.

Critères d'acceptation — état honnête

# Critère Verdict
1 Note de conception : inventaire, ordre, numéro satisfait
2 Fichier de visite FR/EN ; lake build passe sur la machine témoin, journal cité ; count_code_sorry.py --json inchangé ; #print axioms relu dans les deux siblings partiel — cause nommée, voir ci-dessous
3 Carnet exécuté de bout en bout (C.2), trois exercices sans erreur volontaire (C.1) satisfait (preuves ci-dessous)
4 Graphe calculé, pas recopié ; prose adossée aux sorties (C.5) satisfait
5 Références citées depuis G:\Mon Drive\MyIA\IA\Bibliographie IA sans objet — voir ci-dessous

Réserve sur le critère 2 — lake build du témoin non reproduit, cause mesurée

Le fichier de visite est livré, les deux siblings sont dans les globs, et #print axioms y est appelé cinq fois dans chaque sibling (Moise → Hamilton → extinction contrôlée → difféomorphisme → homéomorphisme). Le lake build de la cible n'a pas encore rendu de journal vert.

Après un premier cycle où j'avais écrit « environnement défaillant » sans cause, j'ai rejoué le build seul (0 processus lean/lake présent au lancement, vérifié avant de partir) pour départager un verrou concurrent d'autre chose. Le verrou est réfuté, et la signature a changé :

✖ [3/6] Running DifferentialGeometry.Topology.PiecewiseLinear.Moise352Producer
error: no such file or directory (error code: 4294963238)
  file: ...\.lake\packages\DifferentialGeometry\DifferentialGeometry\Topology\PiecewiseLinear\Moise352Producer.lean
...
error: PoincareChain.lean: bad import 'DifferentialGeometry.Topology.PiecewiseLinear.Moise352Producer'

Le fichier existe (1 652 octets, mesuré) et le paquet est complet (17 555 .lean, 1,2 Go). L'erreur ne parle donc pas du fichier lu — elle parle du fichier écrit. Mesure des deux chemins, au caractère :

Chemin Longueur
source .lean du module amont 270
sortie .olean 292
sortie .olean.server (celle du premier échec) 299

Les trois dépassent MAX_PATH (260), la limite Windows pour une application non manifestée long-path-aware — et Lean n'est pas manifestée. C'est la cause réelle, et elle explique les deux signatures observées : le failed to create file …OpenPrivate.olean.server du cycle précédent et le no such file or directory de ce cycle sont le même défaut, vue de deux chemins de sortie différents.

Ce que cela corrige dans mon propre diagnostic : j'avais écarté la longueur de chemin au cycle précédent sur une mesure de 254 caractères — un autre chemin, plus court, que celui qui échoue. Une mesure qui ne porte pas sur l'objet en cause ne réfute rien ; j'ai pris un chiffre plausible pour une mesure.

Le correctif est identifié, pas appliqué : construire depuis une racine courte (worktree git sous D:\), ce qui ramène source et sorties autour de 115-140 caractères. La fermeture amont coûte 22 909 jobs et 11 253 s en local (Pli 1, #21916) — c'est un build de plusieurs heures, pas une vérification de fin de cycle. Je le déclare dû, pas acquis.

Le code livré n'est pas en cause : un fichier de #print axioms n'ajoute aucune preuve. Mais le critère demande un journal de build, et il n'y en a pas. Le grain reste ouvert — Part of #18205, See #23499, pas de clôture. Le journal du build rejoué viendra en commit séparé.

Note d'instrument, pour le lecteur suivant : lake update 2>&1 | tail -25 rend 0 alors que le log porte error: build failed — le code de sortie d'un pipeline est celui de tail. Les mesures ci-dessus ont été refaites avec capture complète.

Critère 5, sans objet — et pourquoi ce n'est pas une esquive

Le corps du grain prévoit des copies archivées dans G:\Mon Drive\MyIA\IA\Bibliographie IA. Ce pli ne récupère, n'utilise et ne cite aucune publication : son unique source externe est le dépôt qinz1yang/differential-geometry, épinglé au commit 7a48598d par le manifeste Lake du lake d'enveloppe — un artefact versionné, pas une publication. Il n'y a donc rien à archiver, et inventer un rayon GDrive pour un dépôt serait du rangement décoratif. Le relevé du 2026-10-30 ne trouve aucune entrée Poincaré/Ricci/Perelman/Hamilton dans le gisement.

Si le mainteneur veut que le carnet cite les trois préprints de Perelman, c'est un ajout de contenu — et il viendra avec les copies archivées, dans le même geste.

C.1 / C.2 — les preuves d'exécution

Carnet exécuté par Papermill deux fois (la seconde après correction d'une fuite de chemin machine dans une sortie — corrigée par la cause, pas par édition manuelle), sortie 0 les deux fois :

  • 28 cellules, dont 10 cellules de code ;
  • execution_count nul : 0 ;
  • erreurs : 0 ;
  • les trois exercices sont des stubs sans erreur volontaire (return None + print(…), # TODO etudiant conservé) : le carnet s'exécute de bout en bout exercices non complétés.

Première sortie de la cellule qui lit le module de l'énoncé :

Poincare.lean — 23 lignes
bloc du theoreme, enonce compris : 11 lignes
apres `:= by`, hors lignes vides : 5 lignes

Portée

  • Aucune source amont n'est recopiée dans CoursIA : le carnet lit un clone ou un paquet Lake présent sur la machine (variable DIFFERENTIAL_GEOMETRY_SRC sinon emplacements conventionnels), et s'arrête avec un message explicite si rien n'est trouvé.
  • Le lake d'enveloppe garde son écart de toolchain documenté (v4.33.1 côté amont, v4.33.0 côté flotte) ; rien n'est aligné ici.
  • Pas de total de notebooks ajouté à la main au README : CATALOG-STATUS reste byte-identique, la ligne de table et l'entrée d'arbre sont le seul ajout.

Part of #18205. See #23499.

🤖 Generated with Claude Code

…aine FR/EN et carnet Lean-42

Premiere et deuxieme marches du Pli 2 de l'EPIC #18205 (origami geometrie
differentielle), grain #23499.

- docs/lean/origami-pli2-note-conception.md : inventaire mesure sur le pin
  v0.1.3 (17 555 modules / 4 704 458 lignes pour le paquet amont ; 14 196 /
  4 020 908 pour la cloture de l'enonce), composition par famille, maillons
  mesures separement, pivots par in-degree, ordre des marches, matiere
  reservee aux Pli 3 et 4, numero de carnet propose (Lean-42). Le document
  porte aussi la correction de sa propre erreur : le premier jet proposait
  Lean-38 en croyant la serie arretee a Lean-37.

- differential_lean/PoincareChain.lean + _en : temoin de visite de la chaine
  de preuve (Moise -> extinction controlee -> Poincare lisse -> Poincare
  topologique), en sibling-pair i18n #4980, ajoute aux globs du lake pour que
  le frere EN soit elabore et non orphelin (#6749).

- Lean-42-Poincare-Conjecture-Lean.ipynb : le carnet. Le graphe d'imports est
  construit par le carnet (parcours en largeur sur les lignes import), jamais
  recopie ; la longueur de la preuve est comptee par le carnet (11 lignes de
  bloc, 5 apres := by) ; 10 cellules code, 0 erreur, execution papermill.

Note honnete de portee : le lake build du temoin n'a pas ete rejoue a terme
dans ce cycle. L'environnement echoue a la premiere dependance
(failed to create file ...OpenPrivate.olean.server) alors que la toolchain
attendue v4.33.1 est verifiee et que l'olean s'ecrit normalement dans le meme
dossier ; le detail et les pistes sont dans le body de la PR. Le build de ces
memes modules a ete valide en local au Pli 1 (#21916).

Part of #18205. See #23499.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

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

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

@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 6.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.2s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.1s

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: 10
  • 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 large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #23506 (feat(lean,#23499): Pli 2 Poincare -- note de conception, temoin de chaine FR/EN et carnet Lean-42) 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.

@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 — Pli 2 Poincaré : fond solide, 3 gardes bloquantes imputables au diff

Vérifications exécutées (head a0326bc4, 120 check-runs lus, logs fast-lane extraits) :

  • Carnet authentique et chiffres ancrés : papermill 2.7.0, start 09:13:37.980401 / end 09:13:50.720434 (µs distinctes, durée 12.740033 fractionnaire), exec 1→10, 0 erreur, per-cell papermill 28/28. Les 4 chiffres du body sont dans les outputs committés (17,555 modules / 4,704,458 lignes / 14,196 / 80.9 % / 85.5 %). Les 3 exercices sont bien des stubs return None + # TODO etudiant. Le listing Poincare.lean 23 lignes concorde (théorème l.12, := by l.16, 5 lignes de tactiques l.17-21). Le contenu de la cellule « Lecture du résultat » (Moise porte d'entrée, difféomorphisme vs homéomorphisme, toHomeomorph) est fidèle au listing committé.
  • Numérotation Lean-42 exacte : contents/SymbolicAI/Lean@main va jusqu'à Lean-41, aucun Lean-4[2-9] dans le dossier — le claim de correction Lean-38→42 est juste.
  • Jumeau EN : 5 #print axioms byte-identiques au FR (les 6ᵉ/7ᵉ hits sont le docstring), imports identiques — convention #4980 respectée.
  • lakefile : ajout de PoincareChain/PoincareChain_en aux globs — cohérent avec le piège #6749 documenté.
  • Body honnête : la réserve critère 2 (build Lake non reproduit, MAX_PATH 260 mesuré sur les 3 chemins) est un état déclaré « dû », pas caché.

Les 3 gardes en échec au head sont toutes imputables au diff (le Always-on guards rouge n'est que l'agrégat — log lu : « Organes bloquants en echec : fastlane ») :

  1. check-nav-chain FAILURE — [independent_chain] SymbolicAI/Lean. La série EST à convention nav (mesuré sur les blobs : 38↔39 se pointent, 41→40, 39→38+17+16a, 40→29+Langlands, 41→40+MIMO+22). Lean-42 a 0 lien .ipynb entrant et 0 sortant (aucune cellule Navigation). Remède mesuré éprouvé (#22481, #22462) : cellule ## Navigation dans Lean-42 avec un lien [<< Lean-41](Lean-41-Capstone-MIMO-Python.ipynb), et idéalement l'arête entrante depuis Lean-41.
  2. prose-counts FAILURE (#9377) — 9 compteurs : README l.206 (10 cellules, 23 lignes, 5 lignes, 17 555 modules) ×5, note 197 modules, 23 lignes, 17 555 modules, 83 fichiers ×4. Tous dans les lignes ajoutées par la PR. Remède : « Supprimer la mesure, garder le prédicat » — p.ex. 23 lignes → (0 sorry), 17 555 modules → la quasi-totalité du paquet.
  3. docs-index-guard FAILURE — docs/lean/origami-pli2-note-conception.md inatteignable depuis docs/README.md (277/278) : il manque la ligne d'index dans la section Lean (le Pli 1 y figure l.184 : lean/origami-reconnaissance.md). Un ajout de doc vivant sans ligne d'index est la classe #22071.

Le fond (note, témoins FR/EN, carnet mesuré, lakefile) est de qualité — le blocage est purement ces trois surfaces documentaires. Verdict COMMENT_WITH_CONCERNS : rien ne m'oppose au fond, mais je ne peux pas approuver avec 3 gardes bloquantes non réparées au head.

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

large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants