Repository navigation
enrich(smt,#13410): prose interpretative Z3-Python-12/14 (densite 759/759 -> 1318/1297) - #16021
Conversation
…/759 -> 1318/1297) Sous-grain densite de #13410 : les deux notebooks Z3 les plus bas de la famille SymbolicAI/SMT passent au-dessus du plancher par de la prose ancree sur leurs sorties reellement executees. Z3-Python-12-Real-Arithmetic, 5 cellules : la theorie se choisit a la declaration et non a l'import ; x=2 est un rationnel exact et non un flottant ; le '?' de 1.4142135623? marque un root-obj et non un float (1.4142135623**2 = 1.999999999793256, donc a cote de 2 de plus de 2e-10) ; unsat comme preuve d'absence et non comme echec de recherche ; inegalite triangulaire, ou (1,2,3) reste sat par inegalites larges. Z3-Python-14-BitVectors-Overflow, 7 cellules : theorie de decision et non approximation ; 4 500 000 000 -> 205 032 704 et le retournement du comparateur qui fonde ULT ; constater n'est pas prouver ; le quantificateur implicite du seuil 2^31 ; la meme preuve retournee en garantie de surete ; le temoin 0xFBFF0000 et la contrainte n != 0 sans laquelle le temoin serait trivial ; BV4 sat contre Int unsat sur le meme predicat. Edition markdown uniquement (exception C.2) : les cellules code sont intactes, execution_count et outputs preserves -- round-trip byte-identique verifie AVANT edition sur les deux fichiers (json.dumps ensure_ascii=False indent=1). Le diff est en insertions pures, 240 lignes ajoutees et 0 supprimee. Mesures - pedagogy_density : 12 = 759 -> 1318 ; 14 = 759 -> 1297 (plancher 1200), 2/2 ok - pas d'obligation jumeau : les entrees twin_pairs.d de la famille Z3 s'arretent a 01-06, et 12/14 n'ont pas de frere -Csharp sur disque - gardes : detect_markdown_rendering 0 violation ; enrich_quality_ci rc=0 ; check_null_exec OK ; check_cell_source_parses 0 finding ; compteurs en prose OK ; detect_repeated_prose passe de 2 a 1 finding sur le 12 (paire intro/conclusion preexistante, contenance 0.45 -> 0.38) See #13410 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
…uctural fold (#16112) The existing organ (#15901) measures source VOLUME. A cell whose source folds entirely into a comment is invisible to it by construction: on the founding case (PR #16097, Lean-18 cell 40cb37d5) the head GROWS 1132 -> 1728 chars because the same write that stripped the newlines appended a 639-char recovery note, so the magnitude gate stops before any floor. The BLOCKING notebook-cell-source-parses guard is blind too -- a fully commented cell parses clean -- which is why it stayed green on a cell whose code had disappeared. Adds two structural signals to the SAME check-run, no new fast-lane wiring: * `emptied` matched cell whose statement count went from > 0 to 0. * `orphan-output` non-empty outputs with 0 statements and no IPython magic (base-free by construction -- the issue's 3rd criterion). The existing exemptions speak about the base->head RELATION, so they arbitrate the comparative signal only; `orphan-output` is intra-cell and stays true whatever happens to the code elsewhere. Both exemption fractions measure 0.00 on the founding case, so nothing was suppressed. `_scan_line` / `_strip_ipython_magics` / `_is_python_kernel` are imported from check_cell_source_parses rather than reimplemented, so the organs cannot disagree about the same cell. Criterion 1 of the issue (unterminated-item count) is REFUTED by measurement, not implemented: per-character serialization already exists on main (GenAI/Texte/21_LoRA_FineTuning.ipynb cell 69b296cb -> 802 unterminated items, 10 statements, real output, healthy). Histogram over the 11970 code cells of main's 953 Python notebooks: {0: 11970, 1: 1, 802: 1}. The signal is withdrawn rather than shipped with a threshold; the folds it targeted are covered twice without it (code-first fold -> the blocking syntax guard; comment-first fold -> `emptied`). Calibration: 0 structural findings on main's full Python corpus; 0 structural findings on the 18 notebooks changed by 12 merged PRs (#16080, #16071, #16069, #16067, #16041, #16039, #16027, #16024, #16021, #16020, #16013, #16012). A first sweep without the no-magic guard flagged 6 cells, all `# comment` + `!python`/`%pip` -- the magic IS the producer, so the guard is measured necessity, not caution. Evidence: 30 tests green in the file, 89 across the sibling organ files; `--self-test` OK with BOTH founding-case replays firing (volume #15901 and structure #16110); live end-to-end run at #16097's head reports the exact measured finding with RC=1. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ML-2/ML-3 Python (#16381) * enrich(mlnet,#13410): tranche densite fondations scikit-learn ML-1/2/3 Python ML-1 753->1209 (graine, lecture des 4 points, coefficients OLS, jeu de test extrapolation, interpolation vs extrapolation, graphique, perfection 100% comme signal d'alerte, grammaire commune). ML-2 957->1231 (describe, expansion one-hot 7->9, R2=1.0 sur-apprentissage). ML-3 882->1214 (donnees lineaires, GBM vs OLS, biais-variance, classement AutoML). Markdown uniquement (exception C.2), baseline scoped 3 cles. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * revert(mlnet,#13410): baseline edits — canon des tranches = notebooks only Les tranches de densite (#16007, #16012, #16021, #16343, #16352) ne touchent jamais la baseline : elle est un snapshot Phase-1 ("burn down, do not grow"), ses valeurs ne se retro-fitent pas. Restauration de la version main. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(16381): rebaseline twin pairs ml-1/ml-2/ml-3 after markdown-only density tranche Pairs attested: ML-1 Introduction, ML-2 Data&Features, ML-3 Entrainement&AutoML (ML.NET/Python family). Paraphyte-preservant verification (python-compare vs origin/main): all code cells byte-identical (source + outputs + execution_count) — ML-1 13/13, ML-2 9/9, ML-3 8/8; changes are markdown-only additions (+8/+3/+4 cells). Command run per pair: python scripts/notebook_tools/check_twin_parity.py --update --pair "<name>" --by "myia-po-2026:CoursIA" Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ml,#16381): aligner moyennes 1 434 s / 4,4 km sur describe 1433.57 / 4.4125 Markdown-only fix (pas de re-exec, pas de cellule code touché) : - moyennes : 1 722 s et 4,8 km -> 1 434 s et 4,4 km (arrondi describe) - ecart-type : ~1 000 s -> ~958 s (aligne sur cellule describe plus haut) Source de verite : cellule C describe 7.000000 8.000000 7.000000 8.000000 mean 1.428571 1.875000 1433.571429 4.412500 Tells : c.1175-L1 (markdown-only PR diff, pas hand-edit d'output) + c.564 strict reponse nominative observation adjoint c.661 + c.974 strict 1 amend/cycle. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(ml,#16381): rebaseline twin pair ML-2 Data&Features post-markdown drift fix Suite au drift introduit par mon precedent commit `6f19facb2` (markdown 1 434s/4,4km aligne describe), le registre `twin_pairs.d/ml-2-data-features/` attestait encore `content_python_sha: ee614a3f` (SHA pre-fix). Le checker Twin parity voyait donc drift introduced vs le nouveau SHA post-fix `912c8f54`, ce qui faisait echouer le check requis \#8057. Nouvelle attestation YAML `0006-2026-09-18-myia-po-2026-CoursIA.yaml` : - python_sha: 9f0afcb - content_python_sha: 912c8f5490cb747d648bafa4f3a29b486974bb09dbec0b16ba5c2528ef00cad0 Fix substance : drift elimine (1 drift remaining = GameTheory-4c NashExistence = DRIFT PRE-EXISTING non lie a cette PR cf rapport CI `drift_introduced: 0 / drift_pre_existing: 1`). Tells : c.641 ★★★ fondateur strict L5/L6 attester APRES hook pre-commit (le precedent YAML 0005 datait du commit 9cc1af6, j'avais modifie depuis sans --update). c.974 strict 1 amend/PR (substance uniquement, pas body PR cette fois). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(ml,#16381): clarifier vendor_id/payment_type dtype str (pandas 2.x) Suite revue ai-01 c.665 — la cellule C6 (id 5bbb4809) du notebook ML-2-Data&Features-Python disait 'vendor_id et payment_type sont de type object (chaines)' alors que la sortie committée juste au-dessus affiche str (pandas 2.x). Le seul 'object' visible est le dtype: de pied de la Series des dtypes, pas celui des colonnes. Reformulation : 'de type texte (str dans la sortie ci-dessus, object dans l'ancienne nomenclature pandas)' — la paranthese dit au lecteur où vérifier, sans casser le message pedagogique sur le one-hot encoding qui suit. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(ml,#16381): re-attester twin pair ML-2 post dtype str fix Suite rebase-arm-DWELL c.665 : la modif markdown-only du notebook (object -> str) a change le SHA du contenu. Tell c.641 ★★★ re-attestation twin parity AFTER hook pre-commit. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ncement / 09-Einstein / 10-Cryptarithmetic (#16379) * enrich(z3,#13410): tranche densite SMT - lectures mesurees 08/09/10 08-Ordonnancement 735->1267 (NP-difficulte + bornes, anatomie du modele 7 vars / 6 disjonctives, lecture glouton 14h vs optimal 8h, lecture Gantt). 09-Einstein 1115->1228 (verification du temoin : 4 indices relus). 10-Cryptarithmetic 879->1290 (anatomie des retenues contre la solution, temoin vs preuve, lecture DANGER). Markdown uniquement (exception C.2), baseline scoped 3 cles. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * revert(z3,#13410): baseline edits — canon des tranches = notebooks only Les tranches de densite (#16007, #16012, #16021, #16343, #16352) ne touchent jamais la baseline : elle est un snapshot Phase-1 ("burn down, do not grow"), ses valeurs ne se retro-fitent pas. Restauration de la version main. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(z3,#13410): repositionne 2 cellules Interpretation apres leur code (check_interp_positioning) Einstein cell#7 et Cryptarithmetic cell#5 etaient parachutees entre deux headers, sans code au-dessus dans leur section (incident PyMC-15 #10580). Deplacees juste apres le code qu'elles interpretent (l'affichage du modele / le solveur SEND+MORE) : sources inchangees, ordre seul, outputs intacts. check_interp_positioning --check : OK repo-wide. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: DEEP/notebook-python — lane myia-po-2026:CoursIA — prev: LIGHT/tooling #15948
Résumé
Volet SMT de la veine densité #13410 : les deux notebooks Z3 les plus bas de la
famille
SymbolicAI/SMT/Z3-APIpassent au-dessus du plancher de 1200 caractères deprose par cellule de code, par de la prose d'interprétation ancrée sur les sorties
réellement exécutées.
Chaque cellule est placée après la cellule de code qu'elle lit, et ne dit rien que
la sortie imprimée ne montre :
Z3-Python-12 (arithmétique réelle) — la théorie se choisit à la déclaration des
variables et non à l'import (Real vs Int vs BitVec) ;
x = 2est un rationnel exactet non un flottant, ce qui est un résultat plus fort qu'une résolution numérique ; le
?de1.4142135623?marque un objet-racine et non unfloat—1.4142135623 ** 2vaut
1.999999999793256, donc à côté de2de plus de2e-10, alors que l'objet-racinevérifie
xs * xs == 2exactement ;unsatsurxn^2 + 1 = 0est une preuved'absence et non un échec de recherche ; sur l'inégalité triangulaire, le triplet
(1, 2, 3)resteraitsatparce que les inégalités sont larges — le cas dégénéré estaccepté par l'encodage.
Z3-Python-14 (bit-vectors) — Z3 reste une théorie de décision dans ce fragment ;
4 500 000 000devient205 032 704(4 500 000 000 - 4 294 967 296) et c'est leretournement du comparateur (
205 032 704 < 3 000 000 000) qui fondeULTcommedétecteur ; constater une valeur fixée n'est pas prouver sur des variables symboliques ;
le quantificateur implicite du seuil
2^31 = 2 147 483 648, moitié exacte de2^32;la même preuve retournée en garantie de sûreté (
1000 + 1000 = 2000, aucune enveloppeatteignable) ; le témoin
0xFBFF0000 = 4 227 792 896et la contrainten != 0sanslaquelle le témoin aurait été trivial ;
BV4satcontreIntunsatsur le mêmeprédicat, ce qui est l'argument le plus net de la section.
Validation
pedagogy_density.pybelow_threshold: 0detect_markdown_rendering.py --checkenrich_quality_ci.py --base --headcheck_null_exec.py(H.3)check_cell_source_parses.pycheck_prose_quantitative_claims.py --diffdetect_repeated_prose.pyorigin/main) et sa contenance baisse de 0.45 à 0.38Édition markdown uniquement (exception C.2) : aucune cellule de code n'est touchée —
execution_countetoutputspréservés. Le round-trip byte-identique a été vérifiéavant édition sur les deux fichiers (
json.dumps(ensure_ascii=False, indent=1)+newline final) ; le diff est en insertions pures : 240 ajouts, 0 suppression, donc
aucune cellule existante n'a été réécrite.
Pas d'obligation jumeau : les entrées
twin_pairs.dde la famille Z3 s'arrêtent à01-06, et 12/14 n'ont pas de frère-Csharpsur disque.Préflight collision : seule PR ouverte touchant
SMT/Z3-API= #15795(
Z3-Python-03-Tactics) — recouvrement de fichiers nul.Tous les chiffres cités sont soit lus sur la sortie de la cellule interprétée, soit
recalculés avant écriture (
1.4142135623 ** 2,4 500 000 000 - 2**32,0xFBFF0000).See #13410 (contribution partielle : 2 des notebooks sous plancher ; le tracker reste ouvert pour la surface restante)
🤖 Generated with Claude Code