Repository navigation
[Lean][infra] Carte du materiel Lean et regle d'accretion d'un lac (suite de #4365) #23097
Description
Part of #4362
D'où vient cette issue
Concern de jsboigeEPF sur la PR #23030, verbatim :
Quid de https://github.com/jsboige/CoursIA/blob/main/MyIA.AI.Notebooks/GameTheory/game_theory_lean/SocialChoice/Arrow.lean ? Il faut un vrai audit et une consolidation du matériel Lean du dépôt […] trop où sont les choses en l'état. On avait fait un effort pour commencer à rassembler ce qui pouvait l'être. L'effort n'a pas été suivi et l'entropie a repris le dessus. Prévoir une issue spécifique.
Cette issue est cette issue spécifique. Le Concern porte deux affirmations : l'effort n'a pas été suivi, et l'entropie a repris le dessus. La mesure départage les deux, et le résultat n'est pas celui qu'on attendait.
Première mesure — l'état, rejouable
| Mesure | Commande | Résultat |
|---|---|---|
| Lakes du dépôt | git ls-files '*lakefile.lean' '*lakefile.toml' hors .lake/packages |
40 lakefiles — 39 lacs propres + 1 amont vendu (reference_docs/stable_marriage/upstream) |
| Modules Lean propres | git ls-files '*.lean' hors .lake/packages, _peters/ |
880 |
| Miroirs de traduction | git ls-files '*_en.lean' hors packages |
384 |
| Lakes déclarés au CI | scripts/lean/ci_lakes.json |
27 entrées |
| Couverture du gate d'axiomes | python scripts/lean/check_axiom_gate_coverage.py --ref HEAD --check |
23 couverts | 13 sans gate (jamais eu) | 0 perdus, rc 0 |
Six plus gros lacs, en modules propres : grothendieck_lean 196, conway_lean 91, learning_theory_lean 62, game_theory_lean 62, discrepancy_lean 54, knot_lean 47.
Deuxième mesure — l'effort a bien été suivi, et il a été fermé sur mesure
#4365 — « Regrouper les lakes cohésifs (GameTheory 6→2) » — est CLOSED depuis le 2026-08-14, et sa fermeture n'est pas un label : ai-01 y a repris les trois critères d'acceptance un par un contre main. Verdict mesuré, verbatim de la clôture :
| Lake | État au 2026-08-14 |
|---|---|
cooperative_games_lean |
absent (absorbé dans game_theory_lean) |
stable_marriage_lean |
absent (absorbé) |
social_choice_lean |
coquille à 0 module retirée par #10151, tombstone redirigeant vers ../game_theory_lean/SocialChoice/ |
minimax_lean (9) · conway_cgt_lean (3) |
séparés volontairement, clause anti-god-lake |
social_choice_lean_peters |
non absorbé, et assumé INTRINSIC (#7081) — toolchain Peters v4.27.0-rc1 contre v4.31.0-rc1 chez nous |
Donc l'effort a été suivi, mesuré, et clos avec son résidu nommé.
Troisième mesure — ce qui a repris, c'est l'accrétion, pas la dispersion
Dates d'ajout du lakefile de chaque lac GameTheory (git log -1 --diff-filter=A), contre la date de clôture de #4365 (2026-08-14) :
| Lake | Modules | Premier commit du lakefile | Vs clôture #4365 |
|---|---|---|---|
conway_cgt_lean |
3 | 2026-06-05 | antérieur |
lean_game_defs |
12 | 2026-06-10 | antérieur |
lean_game_defs_ext |
28 | 2026-06-10 | antérieur |
minimax_lean |
9 | 2026-06-24 | antérieur |
game_theory_lean |
62 | 2026-07-10 | antérieur (47 modules à la clôture) |
assignment_lean |
13 | 2026-08-23 | +9 jours |
asymmetric_information_lean |
12 | 2026-08-26 | +12 jours |
Deux lacs sont nés dans les deux semaines qui ont suivi la clôture de la consolidation, et game_theory_lean est passé de 47 à 62 modules. Ce n'est pas la consolidation qui a échoué : c'est la série qui a ré-accrété après elle. #4365 ne pouvait pas couvrir des lacs qui n'existaient pas encore, et il n'existe aujourd'hui aucune règle qui dise si un nouveau lac de série est légitime ou s'il doit être un module de plus dans le lac de la série.
C'est le vrai sujet de cette issue, et il est structurel, pas historique.
Ce que la mesure écarte aussi
Aucune duplication de preuves entre lacs. Les seuls noms de modules qui se répètent sont des conventions : lakefile.lean (36), Basic.lean (19), Basic_en.lean (16), Examples.lean (3). Aucun théorème n'est prouvé deux fois sous le même nom de module dans deux lacs. Consolider ne veut donc pas dire « fusionner des doublons » — il n'y en a pas.
Et le gate d'axiomes le dit lui-même, verbatim :
Cette couverture est une MESURE, pas un verdict de sûreté : un lake sans gate d'axiomes n'est pas illicite, il doit seulement être CONNU comme tel (#17097 critère 3).
Donc cette issue ne demande pas de câbler treize gates. Elle demande que les treize soient connus, et qu'une règle d'accrétion existe.
Tranches, dans l'ordre
T1 — La carte datée, et l'organe qui la régénère
Une page docs/reference/lean-material-map.md : par lac — chemin, modules propres, miroirs _en, présence au ci_lakes.json, verdict du gate d'axiomes, dette distinct_code_sorry, et date de naissance du lac. Plus l'organe qui la produit (scripts/lean/lean_material_map.py --json --check), parce qu'une table recopiée à la main dérive à chaque merge — c'est la maladie que l'issue soigne, et la colonne « date de naissance » est ce qui rend l'accrétion visible sans recherche git.
Sortie : la page, et --check qui échoue quand page et arbre divergent.
T2 — La règle d'accrétion d'un lac (la tranche qui décide)
Un lac nouveau dans une série existante : quand est-ce légitime ? Trois cas à trancher, chacun avec sa mesure :
- Toolchain divergente → légitime (
social_choice_lean_peters, INTRINSIC docs(gt,#4365): document INTRINSIC verdict for social_choice_lean_peters #7081). Rien à changer. - Théorie distincte → légitime (
minimax,conway_cgt), déjà tranché par la clause anti-god-lake de [Lean][infra] Regrouper les lakes cohesifs post-convergence (GameTheory 6->2, modele multi-module) #4365. - Même théorie, même toolchain → c'est le cas non couvert.
assignment_leanetasymmetric_information_leansont-ils 1 et 3 ? La question se tranche en lisantSocialChoice/et les imports, pas par principe.
Sortie : une phrase de règle, écrite là où un contributeur la lira (README de la série + docs/reference/lean-material-map.md), et pour les deux lacs récents, soit un statut documenté, soit un grain de fusion ouvert séparément.
T3 — lean_game_defs et lean_game_defs_ext : un lac ou deux ?
Douze et vingt-huit modules, le second nommé comme l'extension du premier. Lire les deux lakefile et les imports croisés, puis dire si _ext est une extension réelle (le nom doit alors le dire et le lakefile le refléter) ou un lac indépendant (le nom est alors trompeur). Le geste par défaut est documenter ; la fusion n'est retenue que si elle ne casse aucun import de notebook.
T4 — Les treize sans gate, déclarés connus
Publier dans docs/reference/lean-axiom-coverage.md la liste des treize lacs avec, pour chacun, la raison (lac externe, build trop lourd, jamais câblé). La liste est déjà produite par l'organe ; il s'agit de la publier au lieu de la laisser dans une sortie de commande. Critère 3 de #17097, coût CI nul.
Acceptance
- T1 : la page existe,
lean_material_map.py --checkrend 0 surmain, et régénérer la page depuis l'arbre redonne le même fichier - T2 : la règle d'accrétion est écrite en une phrase, et
assignment_lean/asymmetric_information_leanreçoivent chacun un verdict explicite (légitime-documenté, ou grain de fusion ouvert et nommé) - T3 : la décision est écrite avec sa mesure (imports croisés, contenu des deux
lakefile), et lelakefileou le nom reflète la décision - T4 : les treize lacs sont énumérés dans
lean-axiom-coverage.mdavec leur raison - Aucun
sorryajouté :count_code_sorry.py --jsondistinct_code_sorrymesuré avant/après chaque tranche, non augmenté
Ce que cette issue n'est pas
- Ce n'est pas une réouverture de [Lean][infra] Regrouper les lakes cohesifs post-convergence (GameTheory 6->2, modele multi-module) #4365 : celui-ci a livré ce qu'il annonçait, mesuré pièce par pièce, et sa clôture est fondée. L'objet ici est l'après, qui n'avait pas été couvert.
- Ce n'est pas un mandat de câbler treize gates d'axiomes : l'organe de couverture dit lui-même que la couverture n'est pas un verdict de sûreté.
- Ce n'est pas une fusion décidée d'avance : T2 et T3 se tranchent par la mesure, et le défaut de repli est de documenter, pas de déplacer.
- Ce n'est pas une revue de traduction : les 384 miroirs
_ensont une dimension de la carte (T1), pas un chantier ici.
🤖 Generated with Claude Code
Activity
jsboige commentedon Oct 28, 2026
[DELIVERED] lane myia-po-2025:CoursIA -- PR #23105 (T1)
T1 est livrée :
scripts/lean/lean_material_map.pyproduitdocs/reference/lean-material-map.md, et--checkrend 1 quand la page et l'arbre divergent (vérifié par contrôle positif : édition manuelle -> 1, régénération -> 0, et sur un worktree neuf depuisorigin/main).En écrivant l'organe, trois chiffres de cette issue se sont révélés faux à la mesure, et la PR les corrige plutôt que de les recopier :
.leansuivis, dont 377 miroirs_en— soit 503 modules propres. Les six chiffres par lac de l'issue se réconcilient exactement quand on replie les miroirs (grothendieck99+97=196,conway50+41=91,game_theory38+24=62,learning_theory32+30=62,discrepancy31+23=54,knot24+23=47) : les totaux étaient bons, seule l'étiquette « modules » était fausse.ci_lakes.json, pas le CI. Une première version de l'organe classait « hors CI » les deux plus gros lacs du dépôt, alors quelean-asymmetric-information.ymlporte sonproject-pathen clair. En lisant aussi.github/workflows/, le compte est 35 déclarés, 3 sans aucun workflow — et ces trois-là sont les plus récents :kls_lean(2026-10-08, 4 modules),differential_lean(2026-10-07, 3),torchlean_lean(2026-10-22, 3). Lester ces trois lacs au CI est un grain à part, que je ne prends pas ici.git ls-files '*.lean'. Cette ligne existe parce que la première version de l'organe attribuait chaque fichier au dossier immédiat et perdait en silence tous les modules des lacs arborescents (game_theory_leanannonçait 10 modules au lieu de 38).Un écart assumé avec le texte de T1 : la colonne
distinct_code_sorryest opt-in (--with-sorry), pas dans la page par défaut —count_code_sorry.py --jsondépasse les deux minutes sur tout le dépôt, ce qui est incompatible avec un--checkcâblable en CI.Restent ouvertes : T2 (règle d'accrétion), T3 (
lean_game_defs/_ext), T4 (publier les lacs sans gate), et le câblage de--checkdans un workflow — ce dernier est une décision de gate, pas un détail d'implémentation, et je ne l'ai pas prise seule.🤖 Generated with Claude Code
Fix(docs,#23097): la carte du materiel entre dans l'index docs/README.md
jsboige commentedon Oct 28, 2026
[CLAIMED] lane myia-po-2025:CoursIA -- T2 : regle d'accretion d'un lac (lecture croisee SocialChoice/assignment_lean/asymmetric_information_lean, verdict par la mesure, regle ecrite) -- paths: MyIA.AI.Notebooks/GameTheory/game_theory_lean/, MyIA.AI.Notebooks/GameTheory/assignment_lean/, MyIA.AI.Notebooks/GameTheory/asymmetric_information_lean/**, MyIA.AI.Notebooks/GameTheory/README.md, docs/reference/lean-material-map.md
Grain: MED/lean — lane myia-po-2025:CoursIA — prev: MED/tooling #23105
jsboige commentedon Oct 28, 2026
[DELIVERED] lane myia-po-2025:CoursIA -- PR #23113 -- T2 regle d'accretion d'un lac et verdicts des deux lacs recents -- paths: scripts/lean/lean_material_map.py, docs/reference/lean-material-map.md, MyIA.AI.Notebooks/GameTheory/README.md
Feat(lean,#23097): carte du materiel Lean et son organe generateur (T…