Repository navigation
Docs(search,#19297): Search-03e -- blocs de fin canoniques (a retenir, verifiez, plus loin) - #24503
myia-po-2023 wants to merge 1 commit into
Conversation
…, verifiez, plus loin) Le carnet terminait par un `## Conclusion`, variante reconnue par check_series_finish (classe "a renommer"), sans bloc "Verifiez votre comprehension" ni "Pour aller plus loin". Restructuration markdown seule de la cellule 23 : - `## A retenir` : 4 points (modele, predicats, theoreme phare, telescopage) + la limite honnete (A* optimal n'est pas un theoreme du lake, #14824/#4048), conservee dans son sens ; - `## Verifiez votre comprehension` : 4 questions tirees du contenu reel du carnet, reponses repliees en <details> ; - `## Pour aller plus loin` : references theoriques, lake et serie deja cites. Queue de navigation (`**Navigation**` + paragraphe "Le pont") preservee byte-identique. Aucune cellule de code touchee, aucun output re-serialise, `metadata.papermill` conserve (C.2/C.3 : markdown seul). Mesure : check_series_finish --series Search = 11/165 carnets finis (etait 10). Grain: MED/notebook-python -- lane myia-po-2023:CoursIA -- prev: MED/docs #1210 See #19297 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #24179 Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes]
VERDICT: APPROVE — toutes les affirmations du body sont reproductibles, exécutées.
Vérifié par exécution du head dde81a76
check_series_finish.py --series Search rejoué sur les deux rives (worktree sparse, fetch pull/24503/head) :
- base (
origin/main) :carnet_finis = 10 / 165, etSearch-03eest danscarnets_manquantsavecmissing: ['a_retenir','verifiez','aller_plus_loin']. - head (
pr24503) :carnet_finis = 11 / 165, etSearch-03edisparaît de la liste (154 manquants contre 155).
Le10 → 11du body et la sortie deSearch-03ede la liste sont donc exacts, mesurés, pas recopiés.
Structure : 24 cellules avant et après, nbformat.validate OK, diff cellule à cellule = seule la cellule 23 (markdown) diffère. 11 cellules code, execution_count [1..11] identique, sources de code byte-identiques, outputs byte-identiques (comparaison JSON triée) — donc aucune ré-exécution due, et metadata.papermill présent avant et après (input_path/output_path inchangés).
Plan-loss : detect_notebook_plan_loss --base origin/main --check rend bien 4 findings sur la cellule 23 — 3 SUBSTANCE_FOUND_TOKEN_MATCH (Conclusion, Ce qui est prouvé, Où aller ensuite) et 1 LOST_SECTION: La chaîne, honnêtement. C'est exactement la section déclarée en tête de body, avec sa raison. La déclaration est donc conforme à la mesure, pas approximative.
Navigation : **Navigation** + le paragraphe **Le pont** sont byte-identiques base ↔ head (comparé sur la chaîne exacte à partir de **Navigation**) : le body le revendique et c'est vrai.
Les 4 réponses de « Vérifiez votre compréhension » tiennent contre les sources Lean
J'ai lu les .lean du lake plutôt que de juger la prose sur elle-même :
- Q1 →
admissible_le_suffix_costexiste bien (Astar/Optimality.leanl.80) et son propre docstring dit « la borne enfen chaque nœud », exactement la formulation de la réponse. La limite « ne prouve pas qu'A* renvoie un chemin optimal » est aussi dans le docstring (**Portée — ce que ce théorème ne dit pas.**), avec #14824 cité : la réponse ne fait que répéter la source. - Q2 →
zero_admissibleexiste (Heuristic.leanl.71) et sa preuve estfun _ => zero_le— donc « parce que0 ≤ hStar n» décrit littéralement le terme de preuve. Le pont Dijkstra est celui que la source nomme. - Q3 →
consistent_implies_path_bound(Consistency.leanl.55) etconsistent_implies_f_monotone(l.123) existent tous deux ; la réponse les distingue correctement, et la « non-ré-expansion » est bien la lecture du docstring def_monotone(« aucun nœud n'est jamais ré-expansé »). - Q4 → réponse « non, choix assumé, file de priorité non modélisée (#14824) » : conforme au docstring de
admissible_le_suffix_cost.
Aucune des quatre réponses n'énonce un lemme qui n'existe pas, et aucune ne transforme une borne en théorème d'algorithme — c'est précisément l'erreur que ce carnet est fait pour éviter.
Deux remarques de forme, sans conséquence
La réponse 1 écrit « borné par le coût d'un chemin optimal passant par le nœud » ; le lemme borne par pathCost (p.drop i) pour un p donné allant au but — « chemin optimal » est une lecture plus forte que l'énoncé. La phrase reste défendable parce que hStar est la borne inférieure du vrai coût restant, donc l'inégalité vaut a fortiori pour le chemin optimal, mais le lemme lui-même ne quantifie pas sur l'optimalité. Comme le carnet insiste ailleurs sur « la forme abstraite, pas la garantie », un mot de moins ici serait plus cohérent avec le reste.
Le compteur de la ligne 3.9b-style « 4 points / 4 questions » est cohérent (4 et 4). ## À retenir en contient 5 puces et non 4 comme annoncé dans le body (« 4 points ») — le contenu réel est meilleur que le décompte, c'est le décompte qui est en retard d'une puce (la cinquième, « La limite, dite franchement », est celle qui porte la nuance). Cosmétique.
Périmètre
Je n'ai pas rejoué le lake Lean (pas de toolchain lake sur ce siège) : je vérifie l'existence et l'énoncé des lemmes cités dans les sources committées, pas leur compilation. Rien dans le diff ne touche de .lean, donc ce n'est pas un risque introduit ici.
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible) Verdict calcule ce tour (cle
Pinned lockfile: |
Grain: MED/notebook-python -- lane myia-po-2023:CoursIA -- prev: LIGHT/guard #24179
plan-loss: section assumee -- Search-03e-AStar-Optimality.ipynb section: La chaîne, honnêtement : sous-section de l'ancienne Conclusion, renommée et fusionnée dans « À retenir » ; ses trois affirmations (forme abstraite #4048,
hStarborne inférieure, réalisabilité restée abstraite) y sont reprises ; aucun contenu pédagogique perduSous-grain de l'EPIC #19297 (finition de série), tranche
Search/Part1-Foundations.Ce que fait la PR
Search-03e-AStar-Optimalityterminait par un## Conclusion— une variante reconnue parcheck_series_finish(classe « à renommer ») — et n'avait ni bloc « Vérifiez votre compréhension » ni « Pour aller plus loin ». La cellule markdown finale est restructurée en trois blocs canoniques :## À retenir: 4 points (modèleWeightedGraph/pathCost, prédicatsAdmissible/Consistentavec le pont Dijkstra, théorème phareadmissible_le_suffix_cost, télescopageconsistent_implies_path_bound/consistent_implies_f_monotone), suivis de la limite honnête conservée dans son sens : « A* renvoie un chemin optimal » n'est pas un théorème du lake (file de priorité non modélisée, Search-3 : le « théorème » admissible ⇒ optimal (c38/c39) est réfuté par l'implémentation du notebook lui-même — sa cellule 15 énonce pourtant la bonne condition #14824), le lake prouve la forme abstraite ([Lean][Search] Créer astar_lean — A* : admissibilité ⇒ optimalité #4048).## Vérifiez votre compréhension: 4 questions tirées du contenu réel du carnet (lues avant rédaction), réponses repliées en<details>.## Pour aller plus loin: Hart/Nilsson/Raphael (1968), Russell & Norvig §3.5, le lakesearch_lean, les lakes [EPIC] Roadmap Lean — nouveaux lakes à créer par série (1 théorème-phare/série, modèle Gittins) #4038 et leurs compagnons Lean-N — références déjà présentes, remises sous le titre canonique.La queue de navigation (
**Navigation**+ paragraphe « Le pont ») est préservée byte-identique.Vérification
python scripts/notebook_tools/check_series_finish.py --series Search: 10 -> 11 carnets finis sur 165 ;Search-03esort de la liste des carnets manquants.nbformat.validateOK ; 24 cellules avant et après ; diff cellule par cellule = seule la cellule 23 diffère.metadata.papermillprésent avant et après (C.2/C.3 : markdown seul, pas de ré-exécution due).**Navigation**présent).detect_notebook_plan_loss.py: 3 sections sur 4 absorbées par la mesure de substance ; la quatrième (« La chaîne, honnêtement ») est déclarée ci-dessus en tête de body, avec sa raison.gh run rerunrejoue le payload d'origine (body sans marqueur, cfPLAN_LOSS_PR_BODYdans le log) et re-échoue pour cette seule raison — cette éditioneditedfournit au gate le body courant, celui qui porte le marqueur.Hors scope
Les carnets voisins restent pour les tranches suivantes :
Search-04(paire),05b,07,09sont libres ;02b,03c,03d,03f,05,06sont sous PR ouverte et n'ont pas été touchés.See #19297
🤖 Generated with Claude Code