Repository navigation
v4 T-4 Phase-3: dissolve python.dag PythonNumericTower wrapper → flat-nullary PythonScalar (#3309 fwd-port) - #3344
Conversation
…wrapper → flat-nullary PythonScalar Operator A-vs-B ruling (2): #3309's Practice-8 dissolution of the hollow nested PythonNumericTower / Numeric-tower wrapper carries unique value over the shape #3338 retained. Forward-ported onto post-#3338 main. - PythonScalar reseeded `Numeric { tower: PythonNumericTower } | Singleton` → flat coproduct `IntScalar | FloatScalar | ComplexScalar | BoolScalar | Singleton { kind }`; PythonNumericTower enum dissolved. - #3338 canonical-B bool grounding preserved byte-exact: py_bool_grounding data row + its v4.std.logic / v4.std.algebra imports untouched. - Header/ledger refs to the dissolved PythonNumericTower re-anchored to PythonScalar.BoolScalar (python.dag L2/L3/L5/L40; DECISIONS.md). - SL-3309-PYTHON-SCALAR-RESEED ledger row added. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PythonNumericTower.BoolLevel -> PythonScalar.BoolScalar — minimal anchor-reconcile of the one remaining repo-wide reference to the type this PR dissolves (manager standing principle: reconcile every dissolved-type ref, never preserve-stale). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Thanks for the review. The exploratory observation — |
…VS-B row by ID (#3346) Non-blocking ledger-traceability follow-up to merged #3344 (the #3309 reading-(2) forward-port). Adds a one-clause **Supersedes:** pointer to the SL-3309-PYTHON-SCALAR-RESEED row naming the dropped prior held-provisional SL-3309-PYTHON-PER-PRIMITIVE-A-VS-B row by ID, closed by operator A-vs-B ruling (2) + #3338 py_bool_grounding. By-ID only — no stale PyBool=Bool / open-gate text reintroduced (carrying that verbatim would itself be the stale closed-gate finding the dissolution removes). DECISIONS.md-only; no .dag change.
Issue
#3338 landed canonical-B bool grounding for
python.dagbut retained a hollow nestedPythonNumericTower/Numeric-tower wrapper:PythonScalar = Numeric { tower: PythonNumericTower } | Singleton { kind }. The single-fieldNumeric { tower }wrapper is a Practice-8 hollow prong (a wrapper adding no field of its own) andPythonNumericToweris a classifier reading zero spec facts.Operator A-vs-B ruling (2) (2026-05-19, relayed via
vivid-carp-207): #3309's Practice-8 dissolution of that wrapper carries unique value and is forward-ported onto post-#3338main.The dissolution
PythonScalaris reseeded into a flat-nullary coproduct:PythonNumericToweris dissolved. The flat coproduct mirrorsrust.dagRustScalar's structure (flat scalar coproduct with nullary variants), not its facts: Python's numeric primitives have zero intra-kind variance (oneint, onefloat, onecomplex— Python Language Reference §3.2), so the variants carry no fabricatedkind/widthcarrier.Preserved byte-exact (the #3338 canonical-B grounding mechanism)
data py_bool_grounding: BooleanAlgebra<Bool> = bool_boolean_algebra(data row untouched)import v4.std.logic { Bool, bool_boolean_algebra }/import v4.std.algebra { BooleanAlgebra }Header/ledger references to the dissolved
PythonNumericTower.BoolLevelare re-anchored toPythonScalar.BoolScalar(python.dag scope/owns/bool-header/grounding-comment; DECISIONS.mdpython.dag / singletonsbullet). NewSL-3309-PYTHON-SCALAR-RESEEDledger row added.Acceptance criteria (runnable)
compiled: 76 files emitted, 0 diagnosticsNumeric-tower /PythonNumericTowerremain:🤖 Generated with Claude Code