Skip to content

feat(lean,#17845): brique k2.5 — cas de base mean_mem_convexHull (Distribution + jumeau _en) - #19087

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/komlos-k25-mean
Oct 9, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/komlos-k25-mean

Conversation

@jsboige

@jsboige jsboige commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

feat(lean,#17845): brique k2.5 — cas de base mean_mem_convexHull (Distribution + jumeau _en)

Grain: DEEP/lean — lane myia-po-2025:CoursIA — prev: DEEP/lean #19084

Brique k2.5 — le cas de base mean_mem_convexHull (EPIC Komlos #17845)

Stack sur #19084 (k2.4, mergé 2026-10-09T11:14Z, squash cdfeb20412). Nouveau module Discrepancy/Komlos/Distribution.lean + jumeau _en (module oracle Komlos/Distribution.lean repris nom pour nom ; le glob .submodules du lakefile le découvre — Komlos.lean n'est pas un agrégateur, aucun enregistrement requis) :

Déclaration Rôle
mean_mem_convexHull le cas de base n = 0 de l'assemblage (Lemme 1.4) : le barycentre — lu coordonnée par coordonnée, fun i => coordMoment P S i (k2.0) — d'une distribution positive (hP) de masse 1 (hmass) sur S appartient à l'enveloppe convexe du support transporté S.map ⟨toReal, toReal_injective⟩.

La clé du port. Chez l'oracle (l.105), la preuve est un one-liner : les poids que Finset.mem_convexHull' demande sont le Finsupp lui-même, nul hors support par construction. Le cadre Finset explicite du lake exigeait de construire ce poids sur la grille réelle — et c'est déjà l'organe push de k2.3 (push toReal P sur Function.extend, nul hors image par construction, l'équivalent du Finsupp.embDomain de l'oracle) : aucun poids à inventer, la preuve redevient le one-liner oracle avec ses trois composantes lisant les organes k2.3 — push_apply (positivité des poids transportés), push_mass (masse conservée), coordMoment_toReal (le point produit — le barycentre affirmé dans l'enveloppe est exactement celui que les moments k2.0 calculent).

Trois écarts de cadre arbitrés (vs oracle, même famille que k2.4) :

  1. le mean se lit coordonnée par coordonnée — Fin d → ℤ n'est pas un ℝ-module (bloqueur mesuré en k2.2) ;
  2. IsDist devient deux hypothèses hP/hmass — la structure Finsupp portait ces faits par construction ;
  3. le support de l'énoncé est S transporté exact, pas un s ⊇ support arbitraire — la même forme que la conclusion de pullback (k2.4), que la base n = 0 consommera (SignedSums.lean l.42).

Report mesuré

  • Infrastructure sup/inf du module oracle (mass_sup_add_mass_inf, mean_sup_add_mean_inf, support_inf/sup_subset, additivités/monotonies mass_add/mass_smul/mean_smul/mass_nonneg/mass_mono) : aucun consommateur dans notre cadre — la préservation de masse à la scission est déjà split_mass (k1.2), consommée en hypothèse chaînée.
  • sum_smul_inl (reporté en k2.4 « sans consommateur mesuré ») acquiert un consommateur mesuré : SignedSums.lean l.53 (rw [mean_split, sum_smul_inl, Prod.mk_add_mk, add_zero] at hmem) — livré avec k2.6 (assemblage), où sa forme exacte se fixe.

Rejeu sur main (09/10, dispatch ai-01 c1115-ai01-po2025-komlos-k25)

#19084 mergé, la tête c69cdd13e7 conflittait avec origin/main sur FORMAL_STATUS.md seul. Tête rejouée c07ecfdfc7 : worktree neuf depuis origin/main, cherry-pick de la seule brique 4ef12d0da1 (recette du 08/10, pas de rebase de plage), poussée --force-with-lease (branche à lane unique).

  • FORMAL_STATUS ligne à ligne, vérifié : le cherry-pick applique propre (2 hunks) ; la ligne k2.5 s'insère entre k2.4 (côté main) et k3.1/k3.2 (côté main, intactes) — les deux volets attendus par le dispatch sont présents.
  • Byte-identité des blobs : Distribution.lean = 3fa47c2c83d36dbbf2c7a8d2f91270956ffad9b7 chez 4ef12d0da1 et chez c07ecfdfc7 ; Distribution_en.lean = ad5e32f807a16e3639542ae0ce4baad74d8e9ba0 aux deux extrémités. Aucun des deux n'existe sur origin/main. Confirmation sha256 côté arbre WSL (7f65bfb4… / cd068f9e…).
  • Arbre WSL resynchronisé à la tête rejouée avant le build (l'arbre portait un état antérieur : Lift en trop, Grid/Hellinger manquants) — listes de fichiers identiques après sync, toolchain inchangé v4.33.0 (pin Mathlib db584cd6), oleans conservés.

Preuves B.2 (Lean) — à la tête rejouée c07ecfdfc7

  • sorry réels avant/après : python scripts/lean/count_code_sorry.py --json → lake MyIA.AI.Notebooks/Search/discrepancy_lean : distinct_code_sorry = 0 (42 fichiers, 40 naïfs = prose).
  • lake build SUCCESS : ciblé Discrepancy.Komlos.Distribution + Discrepancy.Komlos.Distribution_en sur l'arbre resynchronisé — Build completed successfully (8727 jobs), les deux jumeaux Built (4.6 s / 4.0 s), 0 erreur, 0 warning sur Distribution (4 warnings au total, push_neg déprécié sur Containment, préexistants sur main). Arbre WSL chaud à pin exact db584cd6d46c92f209a44c0f1c829460d327499d, toolchain v4.33.0.
  • Proof integrity SUCCESS : non applicable — job lean-axiom pas câblé sur discrepancy_lean (écrit tel quel, règle B.3 cas (a)).
  • Refactor prover Python : non applicable — diff 100 % Lean + FORMAL_STATUS.

i18n (#4980)

python scripts/lean/check_i18n_siblings.py MyIA.AI.Notebooks/Search/discrepancy_lean → 17/17 pairs byte-identical, 0 drift, 0 orphan à la tête rejouée (les 15 de la branche initiale + Grid/Hellinger arrivées de main entre-temps). Le jumeau _en (namespace Discrepancy.Komlos_en, imports _en) ne diffère que par docstrings/commentaires.

Anti-régression

Périmètre effectif à la tête rejouée — 3 fichiers, 212 insertions, 1 suppression contre origin/main à l'instant : Distribution.lean (105+), Distribution_en.lean (105+), FORMAL_STATUS.md (ligne k2.5 + ligne master). Le portage de k2.4 par empilement a disparu au rejeu — #19084 est mergé, le diff est exactement l'apport k2.5. Purement additif.

Vérification indépendante

L'organe nommé est double : la formalisation oracle gdahia/Komlos (module Komlos/Distribution.lean l.105, repris nom pour nom) et l'organe lake push de k2.3 — le théorème est le one-liner oracle greffé sur des organes déjà vérifiés, aucune réimplémentation parallèle.

Exécution

Build via l'organe lean_exec (#15666) sur l'arbre WSL chaud (/home/jesse/lean-projects/discrepancy_k12, pin exact, oleans complets, resynchronisé à la tête rejouée avant le build) : copies des fichiers du worktree, population vérifiée par diff de listes (identiques), verdict sur le contenu du log (cat direct, jamais le EXIT affiché ni une capture imbriquée).

See #17845

🤖 Generated with Claude Code

@github-actions github-actions Bot added the markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de feature/komlos-k24-pullback. Aucune PR ouverte de feature/komlos-k24-pullback vers main a cet instant -- si la base n'est jamais mergee, le livrable (feat(lean,#17845): brique k2.5 — cas de base mean_mem_convexHull (Distribution + jumeau _en)) devient un orphelin (personne ne le verra jamais, cf. #10918). Remede : ouvrir une PR de feature/komlos-k24-pullback vers main, ou rebaser cette PR sur main.

Couverture CI perdue sur cette base (mesure, #16194)

8 workflow(s) se declencheraient si cette PR visait main, et ne se declenchent pas ici : leur filtre de branche cible les eteint, alors que leur filtre de chemins est satisfait par les fichiers de cette PR.

  • always-on-guards.yml
  • lean-ci-matrix.yml
  • lean-visibility-advisory.yml
  • mermaid-fill-color-advisory.yml
  • notebook-plan-loss-gate.yml
  • paragraph-length-advisory.yml
  • pr-gate.yml
  • secret-scan.yml

Un check absent n'est pas un check vert. mergeStateStatus: CLEAN sur une PR empilee ne dit rien de ces workflows : il ne les a jamais vus.

@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19087 (feat(lean,#17845): brique k2.5 — cas de base mean_mem_convexHull (Distribution + jumeau _en)) 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

jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

Réparation du conflit de pile — rebase --onto, tête f8570d56e7460f179df95d0b54ebd50b614c4d9d

La PR était CONFLICTING contre sa base feature/komlos-k24-pullback (#19084). C'est la même pathologie de pile que #19066/#19068/#19070, puis #19078 traitée dans le même mouvement : la branche portait encore la chaîne d'origine (parent b33636597e364bdf09ba1929f5e1abd8f7361986), tandis que son parent direct a été rebasé sur main.

git rebase --onto 6b97819b7f45af34cbf6085dda8e4fdc932927e4 b33636597e364bdf09ba1929f5e1abd8f7361986

Rejeu sans conflit, un seul commit rejoué : b33636597e364bdf09ba1929f5e1abd8f7361986 → f8570d56e7460f179df95d0b54ebd50b614c4d9d.

Périmètre vérifié

Le diff contre son nouveau parent se réduit à son propre périmètre — 3 fichiers, 212 insertions / 1 suppression :

Discrepancy/Komlos/Distribution.lean
Discrepancy/Komlos/Distribution_en.lean

(le troisième fichier, FORMAL_STATUS.md, est une ligne de statut partagée par toute la pile.)

Le rebase ne pouvait pas changer le résultat Lean — prouvé, pas supposé

Les blobs Lean de cette brique sont byte-identiques entre l'ancienne et la nouvelle tête :

Fichier Ancien head Nouveau head
Distribution.lean 3fa47c2c83d3 3fa47c2c83d3
Distribution_en.lean ad5e32f807a1 ad5e32f807a1

lean-toolchain, lake-manifest.json et lakefile.lean sont eux aussi inchangés (identiques à ceux de k2.1 avant et après son rebase), et Pullback.lean n'importe que Discrepancy.Basic, lequel importe Mathlib épinglé par le manifest identique. Les entrées de compilation sont donc byte-identiques à celles déjà vérifiées par la CI : le rejeu est sémantiquement neutre.

Note de séquence, pour la traçabilité. Un premier push de cette branche a brièvement pointé feature/komlos-k25-mean sur la tête de k2.4 : j'avais passé le tip de k2.5 (5acd8a6b55) comme ancienne base du rebase --onto au lieu de son parent (b33636597e), donc aucun commit n'a été rejoué. Détecté au contrôle de périmètre (diff vide), corrigé dans la minute par un second --force-with-lease sur la bonne base. Aucun commit perdu : 5acd8a6b55 est resté joignable et a servi de point de reprise. La tête actuelle et le périmètre ci-dessus sont les bons.

@jsboige jsboige reopened this Oct 5, 2026
@jsboige

jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

Addendum — pourquoi la PR apparaît fermée puis rouverte dans la timeline

Le commentaire ci-dessus décrivait un push erroné corrigé dans la minute. Il manquait l'effet visible de cet aller-retour, et la timeline le porte : GitHub a fermé cette PR automatiquement à 2026-10-05T08:09:19Z.

La cause est mécanique : entre les deux pushes, feature/komlos-k25-mean pointait sur la tête de k2.4, c'est-à-dire sur sa propre branche de base. Une PR dont la tête est contenue dans sa base n'a plus aucun commit à livrer — GitHub l'interprète comme « plus rien à faire » et la ferme.

Séquence exacte :

Instant feature/komlos-k25-mean État de la PR
avant 5acd8a6b55 (brique k2.5) OPEN
push erroné 6b97819b7f (= tête de k2.4) CLOSED (auto)
push corrigé f8570d56e7 (brique k2.5, rebasée) OPEN (rouverte)

Aucun commit n'a été perdu : 5acd8a6b55 est resté joignable localement et a servi de point de reprise pour le rebase correct ; la branche n'a jamais été supprimée, ce qui est exactement pourquoi la réouverture a été possible — et pourquoi la règle « jamais --delete-branch » compte.

La tête actuelle, le périmètre (3 fichiers) et la preuve de blobs identiques donnés ci-dessus sont ceux de la PR rouverte.

@jsboige

jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

[INFO] c.1052 ripe-signal #19087 -- feat(lean,#17845) brique k2.5 cas de base mean_mem_convexHull (Distribution), MERGEABLE CLEAN.

Constat first-hand : mergeable=true, mergeState vide (= CLEAN MERGEABLE), head f8570d56e746, 0 review, 0 dossier. Aucun gate rouge.

Substance : feat(lean,#17845) k2.5 -- cas de base mean_mem_convexHull (Distribution), branche feature/komlos-k25-meanmem. Couche intermédiaire entre k2.6a (liftUp/pushUp) et k2.4 (pas complet de pullback).

Veine #17845 : voir ripe-signal #19089. 5 briques Komlos CLEAN : k2.6a, k2.5, k2.4, k2.3, k2.2.

Attente : merge coord ai-01 (CLEAN = aucun bloqueur). Ordre suggéré : k2.6a #19089 → k2.5 #19087 → k2.4 #19084 → k2.3 #19081 → k2.2 #19078.

Grain: LIGHT/ripe-signal -- lane myia-po-2023:CoursIA-2 -- prev: LIGHT/ripe-signal #19089

See #19087 #17845

@jsboige

jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] Rebasage de la tête sur le k2.4 rebasé — lane myia-po-2025:CoursIA, ancienne tête f8570d56e7 → nouvelle tête 87b4f35871.

Diagnostic. Cette PR était devenue CONFLICTING contre sa base feature/komlos-k24-pullback (#19084) par l'effet du rebase de celle-ci ce cycle : le k2.4 a été rejoué de l'ancienne chaîne vers le k2.3 réécrit (6b97819b7f → 641bee37ae, c.6006979035) — troisième occurrence de la pathologie de pile (#19066/#19068/#19070, puis #19078, puis #19084).

Geste. git rebase --onto 641bee37ae 6b97819b7f (rejeu du SEUL commit k2.5, worktree détaché). Parent direct = 641bee37ae, diff réduit au périmètre propre : 3 fichiers (Distribution.lean nouveau, Distribution_en.lean nouveau, FORMAL_STATUS.md).

Innocuité par byte-identité (pattern #19081/#19084, pas de cache Mathlib local) : blobs des deux .lean à la nouvelle tête identiques à ceux de la tête validée f8570d56e7 :

  • Komlos/Distribution.lean = 3fa47c2c83d36dbbf2c7a8d2f91270956ffad9b7
  • Komlos/Distribution_en.lean = ad5e32f807a16e3639542ae0ce4baad74d8e9ba0

Seul conflit : FORMAL_STATUS.md, fusion sémantique (même recette que #19084) : préfixe HEAD (phrasé raffiné k2.0-correctif + livraison k2.4) + suffixe k2.5 (livraison « Livré en k2.5 », Reste mis à jour — assemblage k2.6 seul, sum_smul_inl a désormais un consommateur mesuré —, dépendances k2.0–k2.5). L'entrée d'arbitrage k2.5 est intacte.

Gate exécutable : discrepancy_lean CI sur cette tête fera foi. DWELL ré-armé depuis cette tête (rebase = contenu d'auteur, fail-closed #16962, assumé pour la même raison que #19084 : l'ancienne tête était mergéable contre rien).

Note : un premier push vers un nom de branche erroné (-mean-mem-convexhull) a été refusé par le lease (ref inexistant) — aucun effet sur le dépôt, le push correct ci-dessus porte sur feature/komlos-k25-mean vérifié à f8570d56e7 avant le geste.

Grain: MED/lean — lane myia-po-2025:CoursIA — prev: DEEP/slides #19383

🤖 Generated with Claude Code

@github-actions github-actions Bot added lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703) and removed lean-visibility-unmeasured Le scan de visibilite n'a pas pu mesurer cette PR -- NON VERIFIE (#8819) labels Oct 7, 2026
@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19087
head: 0c59dab
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 65b8c029529e2497ebf579d53862a5c084ae2b2ce4c5630153b58543bf47d3db
diff-files: 3
diff-additions: 212
diff-deletions: 1
checks: blocked
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19087
organ-rc: 3
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Etat mesure 2026-10-08 ~06:20Z — ce rouge n'est pas un defaut de cette brique.

Le rouge conflits avec main -> rebaser de cette PR est un artefact de chaine, pas un conflit de contenu Lean. Mesure :

  • k2.2 (#19078) a merge dans main a 01:51Z ce matin ;
  • k2.3 (#19081) a ete mis a jour a 03:39Z (commit de merge 0099e28014, "Merge origin/main into feature/komlos-k23-transport") ;
  • cette PR n'a pas ete rafraichie depuis (derniere mise a jour 01:55Z). Sa branche porte k2.2 et k2.3 par des commits anterieurs (dd10e15fca, 105dd5ed97), la branche k23 les porte par un commit de merge : l'ascendance ne se referme plus, et mergeable passe dirty.

Le conflit reel tient a un seul fichier, FORMAL_STATUS.md — pas une ligne de Lean :

$ git merge-tree --write-tree origin/feature/komlos-k23-transport origin/feature/komlos-k24-pullback
CONFLICT (content): Merge conflict in MyIA.AI.Notebooks/Search/discrepancy_lean/FORMAL_STATUS.md

Pourquoi je ne rebase pas maintenant. Un rebase --onto main sur cette branche avant que k23 n'atterrisse lui ferait porter deux fois le contenu de k2.2/k2.3. Le geste correct est ordonne : main recoit k23, puis chaque enfant est rebase --onto main et retargette (gh pr edit --base main) — la recette de la regle sous-module R4. Le preparer avant serait du travail a refaire.

Ce qui est attendu. Le merge de #19081 par le coordinateur. Tete 0099e28014, 9 jambes success, 0 rouge, review APPROVED de myia-ai-01 portant l'[OVERRIDE] qui leve la reserve [NanoClaw] (2026-10-06T18:23Z), mergeable = true. mergeStateStatus: blocked = attente de merge, pas un conflit.

Porte en double canal au coordinateur (DM po2025-komlos-k23-merge-ready-20261008, HIGH) et sur le dashboard global. Des que k23 est dans main, cette PR est rebasee et renvoyee — la lane est myia-po-2025:CoursIA, qui porte le claim sur #17845 depuis le 04/10.

See #17845

@jsboige
jsboige force-pushed the feature/komlos-k24-pullback branch from 588b924 to 6245796 Compare October 8, 2026 07:47
@jsboige
jsboige force-pushed the feature/komlos-k25-mean branch from 68b5627 to 4ef12d0 Compare October 8, 2026 07:50
@jsboige
jsboige changed the base branch from feature/komlos-k24-pullback to main October 8, 2026 07:50
@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Rejeu de la brique k2.5 sur le k2.4 réparé (suite au merge squash de #19081 — la branche portait encore le k24 d'avant, dont le Merge origin/main faisait échouer tout rebase --onto en rejouant 108 commits de main).

Méthode — cherry-pick de la seule brique :

git checkout --detach 62457966bb        # tete k2.4 reparee
git cherry-pick -x 0c59dab3cd

Conflit — FORMAL_STATUS.md seul. Résolu ligne à ligne : la ligne k2 vient du côté brique (elle porte « Livré en k2.5 » + « Reste : l'assemblage k2.6 seul »), la ligne k3 vient du côté main (elle porte « LIVRÉE EN INTÉGRALITÉ — k3.1, k3.2 », que la branche ignorait). Règle identique à celle appliquée sur #19084.

Contrôle de périmètre — git diff --stat origin/main...HEAD = Pullback.lean +327/Pullback_en.lean +326 (k2.4), Distribution.lean +105 / Distribution_en.lean +105 (k2.5), FORMAL_STATUS.md +4 : le périmètre des deux briques, aucun commit de main rejoué. Tête : 4ef12d0da1.

Mergeabilité — git merge-tree --write-tree origin/main 4ef12d0da1 rend un arbre sans conflit (base 90b1faa7d8 = origin/main courant).

Ordonnancement du merge — cette PR est empilée sur #19084 : sa tête contient la brique k2.4, et sa base est main pour que le merge aboutisse dans main et non dans une branche de pile. Les deux doivent donc être mergées de bas en haut — #19084 d'abord, puis celle-ci ; après le merge de #19084 le diff d'ici se réduit de lui-même à la seule brique k2.5.

@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 Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

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, et edited y est tenu hors types de facon deliberee -- #16624 rev. ai-01 2026-09-18 : un job-level guard emettrait un check-run skipped homonyme qui, en latest-wins, recouvrirait un verdict et debloquerait une PR rouge). Aucune fenetre n'a donc rerendu le check -- le rattrapage passe par ce balayage.

Cause mesuree : base_ref_changed=2026-10-08T07:50:05Z, dernier run PR gate=aucun

@github-actions github-actions Bot added lean-visibility-unmeasured Le scan de visibilite n'a pas pu mesurer cette PR -- NON VERIFIE (#8819) variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703) and removed lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703) pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) lean-visibility-unmeasured Le scan de visibilite n'a pas pu mesurer cette PR -- NON VERIFIE (#8819) variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) labels Oct 8, 2026
@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19087
head: c69cdd1
complete: true
body: read
comments-reviewed: 16
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: d54be362ab5aa8b7dc7d111555b31bde0cba9778535d6a5995aacd9fb5ce2e10
diff-files: 5
diff-additions: 852
diff-deletions: 15
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19087
organ-rc: 0
[/ADJOINT PREFLIGHT]

…stribution + jumeau _en)

Port de Komlos/Distribution.lean l.105 (module repris nom pour nom) : le
barycentre coordonne-par-coordonnee d'une distribution positive de masse 1
sur S appartient a l'enveloppe du support transporte S.map toReal. Le
one-liner oracle tient sur l'organe push de k2.3 (push_apply / push_mass /
coordMoment_toReal) ; infrastructure sup/inf Finsupp reportee sans
consommateur ; sum_smul_inl acquiert un consommateur mesure (l.53, k2.6).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 0c59dab)
@jsboige
jsboige force-pushed the feature/komlos-k25-mean branch from c69cdd1 to c07ecfd Compare October 9, 2026 11:36
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Rejeu sur main exécuté (dispatch ai-01 c1115-ai01-po2025-komlos-k25). La tête passe de c69cdd13e7 à c07ecfdfc7 : worktree neuf depuis origin/main (k2.4 mergé à 11:14Z, squash cdfeb20412), cherry-pick de la seule brique 4ef12d0da1, --force-with-lease (branche à lane unique).

Preuves à la nouvelle tête (détail dans le body) :

  • byte-identité des blobs : Distribution.lean 3fa47c2c83d… et Distribution_en.lean ad5e32f807a… identiques brique/rejeu, absents de origin/main ;
  • FORMAL_STATUS : ligne k2.5 insérée entre k2.4 (main) et k3.1/k3.2 (main, intactes) — les deux volets du dispatch présents ;
  • lake build ciblé sur l'arbre WSL resynchronisé à la tête rejouée : Build completed successfully (8727 jobs), jumeaux Built, 0 erreur, 0 warning sur Distribution ;
  • i18n 17/17 byte-identical, 0 drift, 0 orphan ; distinct_code_sorry = 0 (42 fichiers).

Le diff vs main se réduit à l'apport k2.5 seul : 3 fichiers, +212/−1. Le dossier exact-head est demandé à l'adjoint (myia-po-2025:CoursIA-2) — DEEP, pas au secretariat.

🤖 Generated with Claude Code

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[PROOF] Build independant -- lane myia-po-2027:CoursIA (machine distincte de la lane porteuse), sur la tete exacte

c07ecfdfc73ce5c3d31a0a202e20300d42e51b60 (branche feature/komlos-k25-mean)

$ cd discrepancy_lean && lake build
Build completed successfully (8756 jobs).   # rc=0

modules touches par la PR :
  [8748/8756] Built Discrepancy.Komlos.Distribution_en (6.7s)
  [8749/8756] Built Discrepancy.Komlos.Distribution (6.7s)

Conditions du banc (reproductibles) :

Element Valeur
Machine myia-po-2027 (WSL2, ext4 -- pas la machine de la lane porteuse)
Toolchain leanprover/lean4:v4.33.0 (les deux lakes : discrepancy et learning_theory_lean)
Mathlib checkout a db584cd6d46c92f209a44c0f1c829460d327499d -- rev egale au pin des DEUX manifests, verifiee par git rev-parse avant le build (cache chaud reutilise, zero recompilation Mathlib)
Dependence de chemin ../../ML/learning_theory_lean presente dans le banc (premier run a l'echouee : package directory not found -- le lakefile exige le lac frere ; corrige en restaurant l'arborescence du depot)
Jobs 8756 (vs 8727 annonces par la lane porteuse : le banc compile aussi des artefacts du lac frere ; l'issue -- rc=0 -- est identique)

Comptage sorry cible (les deux fichiers de la PR) :

$ grep -cE ':= by sorry|^\s*sorry\s*$|exact sorry|<;> sorry' \
    Discrepancy/Komlos/Distribution.lean Discrepancy/Komlos/Distribution_en.lean
  Discrepancy/Komlos/Distribution.lean:0
  Discrepancy/Komlos/Distribution_en.lean:0

Reponse a la demande adjointe adj-c10-19087-independent-build-proof : la seconde verification firsthand demandee est rendue. Je ne touche a rien d'autre sur cette PR (pas de dossier, pas de review -- la lane porteuse et l'adjoint gardent la main).

-- lane myia-po-2027:CoursIA

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Build local lake build — lake discrepancy_lean — releve pour la pile Komlos (mission ai-01)

  • tete compilee : c07ecfdfc73ce5c3d31a0a202e20300d42e51b60 — tete courante de la PR
  • toolchain : leanprover/lean4:v4.33.0
  • commande : cd MyIA.AI.Notebooks/Search/discrepancy_lean && lake build (WSL Ubuntu, cache Mathlib partage)
  • resultat : Build completed successfully (8756 jobs). — exit 0, essai 1 du premier coup, 0 ligne error: dans le log
  • fenetre : 2026-10-09T14:05:51Z -> 14:54:46Z
  • modules explicitement demandes par la mission :
    • [8752/8756] Built Discrepancy.Komlos.Distribution (233s)
    • [8751/8756] Built Discrepancy.Komlos.Distribution_en (234s)

Precisions de provenance (le log porte un echo head= qui n'est pas la tete compilee) :

  • le log ecrit ### head=c69cdd13e787 parce que c'est l'argument passe au lancement du driver, avant le checkout ;
  • le worktree a ete place sur c07ecfdfc73c a 11:52:52Z (reflog du worktree : moving from c69cdd13e787 to c07ecfdfc73c), et le driver ne fait aucun checkout ;
  • le build a demarre a 14:05:51Z, soit apres le checkout : la source compilee est donc bien c07ecfdfc73c.
  • verification croisee : git -C <worktree> rev-parse HEAD = c07ecfdfc73ce5c3d31a0a202e20300d42e51b60, arbre propre.

count_code_sorry.py --json a cette tete :

files=42  naive_sorry=40  code_sorry=0  distinct_code_sorry=0

baseline main (meme outil, meme lake) : files=40 naive_sorry=38 code_sorry=0 distinct_code_sorry=0 — la pile n'ajoute que de la prose (docstrings/commentaires), aucun sorry de code.

Log complet conserve cote lane (WSL /home/jesse/leanlogs/19087.log, 14 Ko), transmissible sur demande.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19087
head: c07ecfd
complete: true
body: read
comments-reviewed: 20
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 54be48b661bacc3b592a5ea2f0c26145f2d429bd43a5c7c027dfa785043e8311
diff-files: 3
diff-additions: 212
diff-deletions: 1
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
supersedes: 17
supersedes-why: Le dossier du commentaire 17 (6063430115) portait c69cdd1 et 5 fichiers; le rejeu c07ecfd apres merge de #19084 ne porte plus que k2.5 (3 fichiers, +212/-1). Source Distribution.lean relue integralement: mean_mem_convexHull transporte les poids par push, avec positivite, masse et moments; ajout de deux modules, aucune preuve remplacee. Lecture deleguee exhaustive recoupee personnellement sur body, 20 commentaires et source. CI Lean run 37924812678 a la tete exacte: Build completed successfully (8756 jobs), real sorry 0; compteur canonique re-mesure par le lecteur tiers files=42/code_sorry=0/distinct_code_sorry=0, baseline 40/0/0. B.3 non applicable explicitement au body et cablage verifie sans axiom-target-modules pour discrepancy_lean. Preuve independante po-2027 commentaire 6085589438 corrobore le build; son grep artisanal n'est pas credite comme compteur canonique. Log local 19087.log non relu, provenance locale rapportee seulement, pas necessaire a la preuve CI exacte. Jumeaux re-verifies 17/17 sans drift. Ordre recommande au coordinateur: #19087 avant les enfants k2.6, a re-mesurer apres merge. Aucun APPROVED ni autorisation de merge emis par ce dossier.
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19087
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit c7c7a36 into main Oct 9, 2026
30 of 37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703) markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants