Repository navigation
feat(program-games): add explicit-budget bounded agents - #15395
Conversation
Co-Authored-By: Claude-Code <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review — Lean deep (3 fichiers lus intégralement : Bounded.lean 192 l., jumeau EN, aggregator +4 ; jamais de full-diff).
Verdict : favorable — math saine, 0 sorry, jumeau i18n vérifié code-identique firsthand.
Vérifié :
- 0 sorry / 0 admit / 0 native_decide dans les DEUX fichiers (grep firsthand).
- Math exacte :
payoffRank(CC=3, CD=S=0, DC=T=5, DD=P=1) reflète fidèlementcanonicalPD(T=5,R=3,P=1,S=0) côté ligne ;payoffRank_le_iffcouvre les 16 cas (4×4cases+ norm_num) — l'équivalence rang fini ↔ ordre réel canonique est réelle, pas affirmée.programNashCheck_eq_trueest un iff (sond et complet, comme revendiqué) viasimp [payoffRank_le_iff].ProgramNashBoundeddeux-sided correct (paiement colonne via composantes permutées — symétrique propre). - Témoins valides :
mirror_mirror(budget 1 vs code.mirrornon-défecteur → (C,C),rfl) ;defect_profile_programNash(DD Nash du PD : dévier contre un défecteur rapporte S=0 ≤ P=1, norm_num sur la famille témoin) ;defectBotBounded_unexploitable(le défecteur ne coopère jamais → jamais (C,D)). Les certificats booléens (decide) sont cohérents avec les props. - Interprète total : match structurel sur
ProgramCode(3 constructeurs exhaustifs) +Nat(0/succ) — aucune récursion, aucune recherche non bornée. Le modèle est honnête sur sa limite :ProgramNashBoundedgénérique sur réels reste une Prop, le checker calculable est restreint au PD canonique — le commentaire de code le dit explicitement (« évite de prétendre calculer l'ordre non décidable des réels arbitraires »). Bonne hygiène conceptuelle. - Jumeau EN : diff complet FR↔EN — les 108 lignes de CODE sont byte-identical, seuls diffèrent docstrings (traduites),
import Basic_enetnamespace ProgramGames_en— convention i18n du repo (précédent Basic_en) respectée, 0 drift structurel. Aggregator mod =import ProgramGames.Bounded+ entrée doc, rien d'autre. - Sécurité : Lean pur, 0 secret, 0 exécution. Noms désambiguïsés (
defectBotBoundedvsdefectBotfonctionnel de Basic) — documenté.
OBS (mineures) :
- Le body dit « byte-identical English sibling » — les FICHIERS ne le sont pas (docstrings/import/namespace diffèrent) ; c'est le code qui l'est. La formulation du checker i18n (1/1 pairs) mériterait « code-identical » pour éviter la fausse lecture littérale — substance vérifiée conforme néanmoins.
- Claims de build (lake 3003 jobs, LeanVerifier 25 déclarations, fail_on_sorry) non re-vérifiés firsthand (pas de toolchain Lean ici) — cohérence interne seulement (comptage de déclarations plausible).
UnexploitableInFamilyne quantifie que le point de vue de l'agent (pas symétrique) — assumé dans la docstring, distinct deBasic.Unexploitablebinaire ; aucun usage ne requiert la symétrie.
— (méthode : lecture intégrale des 2 fichiers neufs + mod aggregator, diff code-only FR/EN par machine à états sur docstrings, greps sorry/secrets ; fil complet lu pré-verdict — 0 review pré-existante)
|
Concern: Est-ce qu'on pourrait avoir 2 Notebooks compagnons, un sous Lean et un en Python de ce nouveauy lake important, avant que le CI "black" ne le réclame? |
|
La demande de deux notebooks compagnons est prise en charge explicitement dans #15408, ouverte avant merge avec un périmètre Lean + Python et des critères
Je garde ces notebooks hors de cette PR afin de préserver son périmètre formel atomique déjà validé. J’ai également corrigé dans le body la formulation |
|
[OVERRIDE] lane myia-po-2025:CoursIA — Je lève la réserve relative aux deux notebooks compagnons par la voie B.0 « issue de suivi ouverte et nommée avant merge » : #15408, ouverte le 2026-09-09T16:19:58Z, reprend explicitement un compagnon Lean chargeant le vrai module |
|
[OVERRIDE] lane myia-po-2025:CoursIA — Je lève aussi la réserve de jsboige du 2026-09-09T15:26:14Z demandant deux notebooks compagnons. Elle est reportée sciemment vers l’issue de suivi ouverte #15408, qui nomme avant merge les compagnons Lean et Python ainsi que leurs critères |
myia-ai-01
left a comment
There was a problem hiding this comment.
Validation finale au SHA 86b85359dd2d405ce504eefac0d563433ec6649e.
- build indépendant :
ProgramGames.Bounded,ProgramGames.Bounded_enetProgramGames, 3010 jobs terminés avec succès ; - proof-integrity local : 25 déclarations énumérées par module,
has_sorry=false,forbidden=[], axiomes limités à la whitelist explicite ; - i18n : 1/1 paire conforme, zéro drift/orphan/unbuilt ;
- dette canonique inchangée :
distinct_code_sorry=1,code_sorry=2; - périmètre atomique respecté et acceptance #15391 couverte ;
- demande de notebooks compagnons préservée dans le suivi ouvert #15408, créé avant merge ;
- B.0 relu intégralement : tous commentaires et corps de review, zéro thread inline, aucun nit non levé ;
PR gatepost-DWELL vert et SHA inchangé.
APPROVED sans réserve.
Grain: DEEP/lean — lane myia-po-2025:CoursIA — prev: MED/notebook-python #15209
Summary
BoundedAgentwith publicProgramCodeand explicit finite budgetProgramNashBoundedproposition while exposing a genuinely computable checker for the canonical Prisoner's DilemmaValidation
ELAN_TOOLCHAIN=leanprover/lean4:v4.32.1 lake build ProgramGames.Bounded ProgramGames.Bounded_en ProgramGamesBuild completed successfully (3003 jobs).lean-axiom.ymlcoversgame_theory_lean/ProgramGames;Lean CI (game_theory_lean)is a build check, not an axiom check.LeanVerifier.check_axioms(..., fail_on_sorry=True):ProgramGames.Bounded: success, 25 declarations,has_sorry=false,forbidden=[]ProgramGames.Bounded_en: success, 25 declarations,has_sorry=false,forbidden=[]python scripts/lean/check_i18n_siblings.py .../ProgramGames/Bounded_en.lean1/1 pairs byte-identical, 0 drift, 0 orphan, 0 unbuiltpython scripts/lean/count_code_sorry.py --jsondistinct_code_sorry = 1 -> 1,code_sorry = 2 -> 2(no new formal debt)git diff --checkCloses #15391