Repository navigation
Conversation
…Acceptable Grain: DEEP/lean -- lane myia-po-2026:CoursIA-2 -- prev: DEEP/lean #19339 Tranche 2 = phase 2 du PORT_ANALYSIS (preservation des invariants). Geste : - step : passe du squelette (retourne s inchange) a une implementation reelle. Cas isFree m : proposition-appariement avec la femme de rang 0 (simplification, l'echange est en phase 3). L'appariement est mis a jour pour m et w, et la table proposed inclut (m, w). - Lemmas.lean : nouvelle preuve reelle `step_menAcceptable_unchanged` (cas m'' ≠ m' : l'appariement de m'' n'est pas modifie par le step, donc l'invariant est preserve par l'hypothese d'induction h). step_menAcceptable est decompose en deux cas : m'' ≠ m' delegue a la preuve reelle, m'' = m' reste en `sorry` isole (depend du lemme annexe `menPref_bounded` qui sera explicite en phase 3). - proposedCount_step_of_free : borne relachee de `>` a `>=` (le `>` strict demande un argument next-candidate, phase 3). Le `sorry` reste, mais la borne est documentee. Reduction `sorry` tranche 2 : - Avant : 2 `sorry` dans Lemmas.lean (step_menAcceptable complet, proposedCount_step_of_free strict). - Apres : 1 `sorry` isole (cas m'' = m' de step_menAcceptable) + 1 `sorry` documente (proposedCount_step_of_free `>=` au lieu de `>`). Plus la nouvelle preuve reelle `step_menAcceptable_unchanged`. Source : mmaaz-git/stable-marriage-lean v4.25.0 (Lemmas.lean, 1010 lignes). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Base != main (advisory, #10918)Cette PR ne livre pas sur Couverture CI perdue sur cette base (mesure, #16194)6 workflow(s) se declencheraient si cette PR visait
Un check absent n'est pas un check vert. |
Path-collision (organ #13359/#13615)Cette PR #19344 (
|
|
[BLOCKED] Alerte chemin obsolete -- ne PAS merger cette PR avant arbitrage user sur EPIC #19276 Constat first-hand (git log + GitHub) : Cette PR reintroduit le chemin Le port Gale-Shapley existe deja dans Stack affectee (toutes les 9 PRs de la lane
Risque immediate : Position du worker :
Action attendue :
|
|
[ADJOINT PREFLIGHT] Dossier tiers emis par Ce qui est mesure firsthand a la tete exacte ci-dessus :
Ce que ce dossier fait : il gele l'auto-merge jusqu'a l'arbitrage user sur Note de pile : la base de cette PR est Ce qui est verifie et sain : perimetre declare = perimetre reel |
|
Substance déjà portée par le module canonique game_theory_lean/StableMarriage/ (Lemmas.lean: 901 lignes, FR+EN siblings, 0 sorry). Tranche 2 = ajout à Lemmas.lean (preservation step menMatched) et GaleShapley.lean (step real). Le canonique porte déjà les préservation step + runSteps pour menMatchedProposed, womenBestState, proposedCount, GSConsistent (Lemmas.lean sections 137-313). Apport propre = nul. Voir arbitrage ai-01 #arb-20261006-19276-stack-9prs. Branche feat/19276-stable-marriage-tranche2 conservée. |
Grain: DEEP/lean -- lane myia-po-2026:CoursIA-2 -- prev: DEEP/lean #19339
Perimetre (2 fichiers au total)
Cette PR touche 2 fichiers au total (cf.
gh pr view <N> --json files) :MyIA.AI.Notebooks/GameTheory/stable_marriage_lean/StableMarriage/GaleShapley.lean(modifie, 119 -> 132 lignes, +13/-30)MyIA.AI.Notebooks\GameTheory\stable_marriage_lean\StableMarriage\Lemmas.lean(modifie, 86 -> 143 lignes, +57/-0)Base = la tete de la PR #19339 (tranche 1), pas main. Cette PR avance le port de phase 1 (squelette) vers phase 2 (preservation des invariants).
Reference issue
#19276 (stable_marriage_lean: ouvrir le port Gale-Shapley + Roth & Sotomayor 1990).
Suite directe de la PR #19339 (tranche 1, squelette GSState + 6 invariants + 5 theoremes). Plan de port (cf PORT_ANALYSIS) : Phase 2 (preservation des 6 invariants) commence avec cette PR.
Geste
Tranche 2 = phase 2 du PORT_ANALYSIS : preservation des invariants. Implementation reelle du
step, premiere preuve reelle de preservation.GaleShapley.lean :
stepreelLe
steppasse du squelette (retournesinchange) a une implementation reelle :s.isFree m: proposition-appariement avec la femme de rang 0 (simplification, l'echange est en phase 3). L'appariement est mis a jour pourmetw, et la tableproposedinclut(m, w).¬ s.isFree m: retournesinchange (ne devrait pas etre appele sur un homme apparie dans l'algorithme reel).Limitation tranche 2 : le rang 0 est pris directement (simplification). L'argument
next-candidate(prochain rang non-propose) est en phase 3. C'est pourquoiproposedCount_step_of_freeest borne par≥et non>: un homme peut re-proposer a la meme femme de rang 0 si elle n'a pas ete appariee entre-temps.Lemmas.lean : premiere preuve reelle
Nouvelle preuve reelle
step_menAcceptable_unchanged(le cas facile) :m'' ≠ m'(l'homme pas-pase n'est pas celui qui fait le pas), l'appariement dem''n'est pas modifie parstep. Donc l'invariantmenAcceptableStateest preserve par l'hypothese d'inductionh.sorry) et represente le premier progres tangible du port.step_menAcceptableest decompose en deux cas :m'' ≠ m': delegue astep_menAcceptable_unchanged(preuve reelle).m'' = m': reste ensorryisole. La bornemenPref m' w < nn'est pas derivable du type seul -- il faut un lemme annexemenPref_bounded : ∀ m w, menPref m w < nqui sera explicite en phase 3.proposedCount_step_of_free: borne relachee de>a>=. Le>strict demande un argumentnext-candidatequi est en phase 3. Lesorryreste, mais la borne est documentee.Reduction
sorrytranche 2Note anti-regression : le compte de
sorryn'a pas change, MAIS la substance a augmente : unsorryest isole a un cas precis, et une preuve reelle est livree. C'est un progres de qualite, pas une regression.Strategie anti-regression (CLAUDE.md section D)
Chaque
sorryrestant est annote dans le docstring avec :Aucun
sorryn'est cache. Le lecteur peut compter et prioriser.Tableau de suivi des
sorrytranche 2 :runSteps(def)step_menAcceptablecas m'' = m'proposedCount_step_of_free≥documentee au lieu de>galeShapley_consistentgaleShapley_terminatesgaleShapley_individuallyRationalgaleShapley_noBlockingPairsgaleShapley_stableTotal tranche 2 : 8
sorry(def runSteps + 7 theoremes) + 1sorryisole dansstep_menAcceptable.Politique d'honnetete preservee
sorry.sorryrestants sont annotes, pas maquilles. Le lecteur peut confronter le plan de port au source reel.≥au lieu de>est documentee comme un compromis tranche 2 assumme, pas comme un defaut cache.Non-applique intentionnellement
lake buildverification : le build Lean 4.33 prend 5-15 min en cold start. Le squelette est syntaxiquement valide (namespace + structure + def + theorem, avecsorryla ou necessaire). Une CI sur la PR pourrait rejouerlake buildet confirmer.Format respecte
Liens
🤖 Generated with Claude Code