Repository navigation
feat(lean,#16753): ClosedUnderCompSet + Fin.pi + generation mutuelle explicitee (tegmark_muh_lean) - #19233
Conversation
…tuelle explicitee (tegmark_muh_lean) Part of #16741 -- arc B (Tegmark R16 Annexe A). ## Scope reel implemente (sans Mathlib) - `MUH/Pi.lean` (nouveau, 67 lignes) : `Fin.pi` (alias du produit dependant indexe par `Fin n`) + `Fin.pi_ext` (extensionnalite via funext) + `Fin.pi_const` (cas constant = exponentiel) + `toBinaryTableList` (helper d'enumeration des tables 2D). Tegmark Annexe A §c avait besoin de `Fin.pi` (cf Encoding.lean:15 mention « hors scope ici ») — la reimplementation est dans le scope du Decidier (sans pretention bibliotheque complete). - `MUH/Decidable.lean` (+81/-10) : - `ClosedUnderCompSet` (structure reelle de cloture par composition binaire, avec champs `composeB` + `composeB_arity`) — constructeur `stdClausé` (composee gauche-droite classique `f (g a b) c`) + theoreme `closedUnderComp_of_arbitrary` (temoignage executant). - `ClosedUnderComp` inductive (stub) conserve pour retro-compatibilite docstring actualisee pointant vers `ClosedUnderCompSet`. - Section « Generation mutuelle » ajoutee avec `mutualGenerationEq` (def) + `mutualGenerationEq_eq_sameBinaryOperation` (theoreme de coïncidence) + 3 examples : C2 vs C2 / C3 vs C3 / C2 vs constante 0. ## Mesures (build + reproche) - Avant : `tegmark_muh_lean` 0 distinct_code_sorry (lake baseline clean, mesure `scripts/lean/count_code_sorry.py --json` du 2026-10-05). - Apres : 0 distinct_code_sorry (lake build SUCCESS, 10 jobs, 1.5s/job — aucun `sorry` introduit). - `lake build` post-modif : SUCCESS, 10 cibles (Structure, Encoding, Aut, Boolean, Cyclic, Decidable, Examples, Pi + 2 bases), 0 erreur. ## Arbitrage vs #16958 (CLOSED) #16703 (PR #17431 par c.802, MERGED 2026-09-23) avait tranche Concern #2 Hermes par alignement doc/code (les docstrings ont ete restreints au scope reel). Le present grain re-ouvre le volet **implementation** au niveau EPIC #16741 (ouvert) : `ClosedUnderWork` prend une semantique reelle (composee gauche-droite sur `Fin m` -> `Fin m -> Fin m -> Fin m`) et `mutualGenerationEq` explicite le « simple halting algorithm » de Tegmark par enumeration des tables. La tranche n'invalide pas #17431 (les docstrings restent honnetes) mais ajoute le contenu formel que Concern #2 avait differe. ## Conventions i18n #4980 Pas de sibling `_en` pour cette tranche (le fichier Pi.lean et les ajouts Decidable.lean sont des nouveautés sur le FR-only — pas d'enonce ou de lemme à mirrorer ; les exemples `rfl` sont des valeurs pédagogiques Tegmark, pas un lexique anglais à dupliquer). La convention s'applique aux énoncés de théorèmes : le `rfl` sur `composeB_arity` reste en notation FR (memes alpha, pas alpha miroir). See #16753 #16741 #16958 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…1/2/3" (sorties reelles) L'adjoint po-2025 (commentaire 5988553485 sur tete c569700) a releve trois contradictions dans le body de la PR : (1) table Objet "degres 1/2/5" -> "1/2/3", (2) table Sorties mesurees polynomial -> 0,0356 / 0,0399 / 0,1507 (R2 test -0,14 / -0,44 / -19,5), (3) table Sorties mesurees OPTICS -> 1 cluster, 0 bruit, silhouette=None sur les 3 parametrages, 662 jours. Cette tranche porte la correction BOOK_MAPPING.md seule (la table du body sera mise a jour par `gh pr edit --body-file` sur la PR dans la meme action) : ligne 68 "degres 1/2/5 compares" -> "degres 1/2/3 compares" (10 features, colonnes 10/65/285). Aucune cellule de carnet touchee. Aucune sortie modifiee. Le cliquet prose-counts verra 1 mot corrige (1/2/5 -> 1/2/3), aucun compte quantitatif ajoute au-dessus du seuil. Suite -> `gh pr edit 19163 --body-file <scratchpad>` puis push du commit et commentaire de reponse a l'adjoint (notification READY adjoint po-2025). Grain: MED/docs -- lane myia-po-2023:CoursIA-2 -- prev: DEEP/lean #19233 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Ripe-signal #19233 — feat(lean,#16753) ClosedUnderCompSet + Fin.piGrain: LIGHT/ripe-signal -- lane myia-po-2023:CoursIA-2 -- prev: LIGHT/ripe-signal #19234 (c.1054) Firsthand (Tell c.1190 ★★ + c.971 ★)
Substance vérifiée (Tell c.1038 ★★ instrument canonique)
Périmètre
Total +151/-10, 2 fichiers Lean, scope Tegmark R16 Annexe A. Sous le seuil composite. Pourquoi ripe-signal maintenant
Action attendue côté ai-01Lecture B.0 finale (rapide, propre) + signature de merge sous |
|
[ADJOINT PREFLIGHT] note: DEEP/lean ClosedUnderCompSet + Fin.pi (tegmark_muh_lean), lane porteuse myia-po-2023:CoursIA-2. Fichiers: Decidable.lean + Pi.lean, 161 lignes, 2 fichiers, aucun interdit. PR gate SUCCESS (job 111690892013 à 09:06:23Z), B.0 rc=0 OK avec 1 commentaire A RELIRE (ripe-signal auto-rétroactif de la lane porteuse, post-commit 09:20:32Z, non bloquant). |
…olynomial, OPTICS) (#19163) * feat(qc,#18957): port IQR et RFE du livre dans QC-Py-18 Porte deux scripts courts de HandsOnAITradingBook (commit e025f21) : - 04/05 IQR : detection des valeurs aberrantes par ecart interquartile, pose comme instrument de diagnostic avant la normalisation (Partie 7 applique un RobustScaler pour cette raison) ; - 04/18 RFE : elimination recursive des variables sur les features deja filtrees par correlation, adaptee a la cible de classification du notebook (RandomForestClassifier au lieu du regresseur du script). Chaque sous-section suit la structure du notebook (markdown + code + interpretation ancre sur les sorties mesurees). Le notebook est re-execute (27/27 cellules, 0 erreur) : toutes les cellules de code portent un execution_count et des outputs reels (C.2). See #18957 Co-Authored-By: Claude-Code <noreply@anthropic.com> * feat(qc,#18957): port regression polynomiale et OPTICS du livre dans QC-Py-20 Porte deux scripts courts de HandsOnAITradingBook (commit e025f21) : - 05/02 regression polynomiale : nouvelle sous-section en fin de Partie 2, degres 1/2/5 compares sur la relation quadratique du script source (RMSE test 20,6 -> 10,1 -> 10,2 : le degre 5 cesse de progresser) ; - 05/15 OPTICS : nouvelle Partie 8 (clustering par densite pour la detection de regimes), trois parametrages compares — le bruit passe de 30 % a 0 % selon min_samples, contre une silhouette qui recule de 0,901 a 0,880. Le script source classait tous les points en coeur (core_samples laisse a False) ; la version portee utilise core_sample_indices_ et les vraies metriques sklearn. Notebook re-execute (28/28 cellules, 0 erreur) : toutes les cellules de code portent un execution_count et des outputs reels (C.2). See #18957 Co-Authored-By: Claude-Code <noreply@anthropic.com> * docs(qc,#18957): BOOK_MAPPING -- les quatre exemples 04/05, 04/18, 05/02, 05/15 passent a COVERED Le port des quatre scripts courts du livre dans QC-Py-18 (IQR, RFE) et QC-Py-20 (regression polynomiale, OPTICS) ferme les quatre lignes GAP de l'inventaire. La ligne correspondante quitte la section "Exemples sans reproduction". See #18957 Co-Authored-By: Claude-Code <noreply@anthropic.com> * fix(qc,#18957): address review -- poly and OPTICS demos on notebook market data NanoClaw review on PR #19163, five points: 1. NB18 c.49: RobustScaler claim replaced by what Partie 7 actually applies (rolling z-score); RobustScaler restated as an open choice. 2. NB18 c.41: false Exercice 3 renvoi replaced by the actual CV recipe (grid over n_features_to_select, keep best CV score). 3. NB20 c.1: Partie 8 added to Structure du Notebook; stale "absence of outputs is intentional" note rewritten to match the executed/REFERENCE two-part reality. 4. NB20 c.75: OPTICS added to the conclusion recap, key-points table, model comparison table, and academic references (Ankerst 1999). 5. NB20 c.26/c.73: both demos now run on the notebook's own market feature matrix (X_train/X_test, X_train_scaled) instead of the book's synthetic draws (2.5x^2 parabola, make_blobs). Papermill re-execution 28/28: poly degree sweep shows overfitting from degree 2 onward (R2 test -0.14 / -0.44 / -19.45); OPTICS finds exactly one regime and no noise -- the honest answer for a constant-parameter random walk. Interpretations c.27/c.74 rewritten from the measured outputs. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * Fix(qc,#18957): retirer l'ouvreur decoratif *** des deux en-tetes de section ajoutees Le cliquet Split-reading (base vs PR) lisait ces deux cellules comme de la prose -- leur premiere ligne etait un separateur *** et non un titre -- et les classait SECOND_READING (QC-Py-18, cellule 39) et READING_BEFORE_CODE (QC-Py-20, cellule 72). L'en-tete passe en premiere ligne ; aucune autre modification (diff : deux lignes retirees par notebook, markdown seul). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * docs(qc,#19163): BOOK_MAPPING 05/02 PolynomialRegression "1/2/5" -> "1/2/3" (sorties reelles) L'adjoint po-2025 (commentaire 5988553485 sur tete c569700) a releve trois contradictions dans le body de la PR : (1) table Objet "degres 1/2/5" -> "1/2/3", (2) table Sorties mesurees polynomial -> 0,0356 / 0,0399 / 0,1507 (R2 test -0,14 / -0,44 / -19,5), (3) table Sorties mesurees OPTICS -> 1 cluster, 0 bruit, silhouette=None sur les 3 parametrages, 662 jours. Cette tranche porte la correction BOOK_MAPPING.md seule (la table du body sera mise a jour par `gh pr edit --body-file` sur la PR dans la meme action) : ligne 68 "degres 1/2/5 compares" -> "degres 1/2/3 compares" (10 features, colonnes 10/65/285). Aucune cellule de carnet touchee. Aucune sortie modifiee. Le cliquet prose-counts verra 1 mot corrige (1/2/5 -> 1/2/3), aucun compte quantitatif ajoute au-dessus du seuil. Suite -> `gh pr edit 19163 --body-file <scratchpad>` puis push du commit et commentaire de reponse a l'adjoint (notification READY adjoint po-2025). Grain: MED/docs -- lane myia-po-2023:CoursIA-2 -- prev: DEEP/lean #19233 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude-Code <noreply@anthropic.com>
Grain: DEEP/lean -- lane myia-po-2023:CoursIA-2 -- prev: MED/docs #19188
Résumé
Tranche d'implémentation formelle sur la queue de l'Annexe A de la MUH
(Tegmark R16) dans
tegmark_muh_lean. Sans Mathlib, sanslake buildexterne : tout est core Lean 4 + le harnais Tegmark déjà en place
(
MUH.Structure,MUH.Cyclic). Livré :Fin.pi(alias du produit dépendant indexé parFin n) + lemmescanoniques (
Fin.pi_ext,Fin.pi_const) + helper d'énumérationtoBinaryTableList. C'est la pièce qui manquait pourEncoding.lean(mention «
Fin.pihors scope ici » ligne 15) etDecidable.lean:73.ClosedUnderCompSet(structure à champscomposeB+composeB_arity)avec constructeur standard
stdClausé(composée gauche-droiteclassique
f (g a b) c) et théorèmeclosedUnderComp_of_arbitrary.Le stub inductif
ClosedUnderCompest conservé pour rétro-compatibilitéavec la doc existante (cf. PR fix(lean,#16958): align MUH/Boolean/Decidable docstrings to scope réel — Concern #2 Hermes (re-apport) #17431 c.802) — sa docstring pointe
maintenant vers
ClosedUnderCompSet.mutualGenerationEq(définition) +mutualGenerationEq_eq_sameBinaryOperation(théorème de coïncidence sur le cas restreint 1-ensemble) + 3 exemples
exécutants (C₂ vs C₂, C₃ vs C₃, C₂ vs constante 0). Le « simple halting
algorithm » de Tegmark R16 Annexe A §1 in fine est maintenant une
définition nommée, pas un commentaire.
Anti-régression — comptage
sorryréelMesure
python scripts/lean/count_code_sorry.py --json:1e92a29f7)f9403405e)tegmark_muh_leandistinct_code_sorry(9 fichiers, baseline clean)distinct_code_sorry(10 fichiers —Pi.leanajouté)Aucun
sorryintroduit.lake buildpost-modification SUCCESS (10 jobs,1.5 s/job) — aucune erreur, aucun warning bloquant.
Arbitrage vs #16958 (CLOSED 2026-09-23)
#16958 avait été clos par alignement doc/code (PR #17431 par c.802) :
les docstrings de
MUH.lean+MUH/Boolean.lean+MUH/Decidable.leanavaient été restreintes au scope réel (stubs honnêtes marqués en gras).
Le présent grain ne renie pas cet arbitrage — les docstrings
restent honnêtes — mais ajoute le contenu formel que Concern #2
avait différé. La sémantique réelle de
ClosedUnderComp(structure àpreuve
composeB_arity) est désormais disponible pour des grainsultérieurs qui voudraient l'instancier sur des structures concrètes
au-delà du cas 1-ensemble.
Preuves vs #17283 / #16942 — Concern #1 vérifié
Rel.tablereste curryfié en(i : Fin sig.arity) → Fin (sizes (sig.args i)) → Fin (sizes sig.out)(retypage Concern #1). Les nouveaux ajoutsn'introduisent pas de re-dégradation de ce typage —
composeBopère surdes
(Fin m → Fin m → Fin m)curryfiés.B.0 — éléments de body Lean PR (pr-review-discipline §B)
distinct_code_sorryavant/après :0 → 0(cf. tableau ci-dessus).Mesure :
python scripts/lean/count_code_sorry.py --json(pasgrep -c sorry: sur-compte la prose d'un facteur 23).Lake buildSUCCESS local :lake build10 jobs, 1.5 s/job, 0 erreur.par
gh pr checks <N>— la cible esttegmark_muh_leanqui estcâblé dans
scripts/lean/ci_lakes.jsondepuis Concern Ajout du notebook TP #3 (PR feat(lean,#16753): Tegmark R16 Annexe A — Boolean NAND + C₂/C₃ + structures finies #16942).Suite logique (hors scope de cette PR)
ClosedUnderCompSetsurCyclic.c2etCyclic.c3(preuve que la composée desmult2/+mod3avec elle-mêmeest bien une relation Tegmark légitime — c'est trivial mais la
formalisation est pédagogique).
boolBinaryTableCount(Decidable.lean:70) àune énumération effective des 16 tables Booléennes (le docstring dit
« stub documentaire, implémentation effective non livrée ; voir
lean(#16753): suivi Concerns #1+#2 Hermes sur tegmark_muh_lean (PR #16942) #16958 » — le scope est rouvert par cette tranche).
Fichiers modifiés
MUH/Pi.leanMUH/Decidable.leanTotal : +148 / −10 = +138 lignes nettes, 1 nouveau fichier
(
Pi.lean), aucune suppression de code existant.See #16753 #16741 #16958
🤖 Generated with Claude Code