universal-physics-tensor 0.45.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -27
- package/dist/atlas/applicability.d.ts +108 -0
- package/dist/atlas/applicability.d.ts.map +1 -0
- package/dist/atlas/applicability.js +301 -0
- package/dist/atlas/applicability.js.map +1 -0
- package/dist/atlas/association.d.ts +92 -0
- package/dist/atlas/association.d.ts.map +1 -0
- package/dist/atlas/association.js +112 -0
- package/dist/atlas/association.js.map +1 -0
- package/dist/atlas/benchmark/backend-shapes.d.ts +47 -0
- package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -0
- package/dist/atlas/benchmark/backend-shapes.js +58 -0
- package/dist/atlas/benchmark/backend-shapes.js.map +1 -0
- package/dist/atlas/benchmark/baselines.d.ts +64 -0
- package/dist/atlas/benchmark/baselines.d.ts.map +1 -0
- package/dist/atlas/benchmark/baselines.js +112 -0
- package/dist/atlas/benchmark/baselines.js.map +1 -0
- package/dist/atlas/benchmark/leakage.d.ts +56 -0
- package/dist/atlas/benchmark/leakage.d.ts.map +1 -0
- package/dist/atlas/benchmark/leakage.js +100 -0
- package/dist/atlas/benchmark/leakage.js.map +1 -0
- package/dist/atlas/benchmark/loader.d.ts +56 -0
- package/dist/atlas/benchmark/loader.d.ts.map +1 -0
- package/dist/atlas/benchmark/loader.js +104 -0
- package/dist/atlas/benchmark/loader.js.map +1 -0
- package/dist/atlas/benchmark/run-atlas.d.ts +72 -0
- package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -0
- package/dist/atlas/benchmark/run-atlas.js +210 -0
- package/dist/atlas/benchmark/run-atlas.js.map +1 -0
- package/dist/atlas/benchmark/stats.d.ts +90 -0
- package/dist/atlas/benchmark/stats.d.ts.map +1 -0
- package/dist/atlas/benchmark/stats.js +159 -0
- package/dist/atlas/benchmark/stats.js.map +1 -0
- package/dist/atlas/benchmark/study.d.ts +120 -0
- package/dist/atlas/benchmark/study.d.ts.map +1 -0
- package/dist/atlas/benchmark/study.js +192 -0
- package/dist/atlas/benchmark/study.js.map +1 -0
- package/dist/atlas/benchmark/types.d.ts +79 -0
- package/dist/atlas/benchmark/types.d.ts.map +1 -0
- package/dist/atlas/benchmark/types.js +46 -0
- package/dist/atlas/benchmark/types.js.map +1 -0
- package/dist/atlas/composition-table.d.ts +55 -0
- package/dist/atlas/composition-table.d.ts.map +1 -0
- package/dist/atlas/composition-table.js +133 -0
- package/dist/atlas/composition-table.js.map +1 -0
- package/dist/atlas/conventions.d.ts +63 -0
- package/dist/atlas/conventions.d.ts.map +1 -0
- package/dist/atlas/conventions.js +93 -0
- package/dist/atlas/conventions.js.map +1 -0
- package/dist/atlas/coverage.d.ts +93 -0
- package/dist/atlas/coverage.d.ts.map +1 -0
- package/dist/atlas/coverage.js +69 -0
- package/dist/atlas/coverage.js.map +1 -0
- package/dist/atlas/derivation.d.ts +137 -0
- package/dist/atlas/derivation.d.ts.map +1 -0
- package/dist/atlas/derivation.js +190 -0
- package/dist/atlas/derivation.js.map +1 -0
- package/dist/atlas/derive-evidence.d.ts +218 -0
- package/dist/atlas/derive-evidence.d.ts.map +1 -0
- package/dist/atlas/derive-evidence.js +225 -0
- package/dist/atlas/derive-evidence.js.map +1 -0
- package/dist/atlas/diffusion/bridges-closure.d.ts +63 -0
- package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -0
- package/dist/atlas/diffusion/bridges-closure.js +324 -0
- package/dist/atlas/diffusion/bridges-closure.js.map +1 -0
- package/dist/atlas/diffusion/bridges.d.ts +36 -0
- package/dist/atlas/diffusion/bridges.d.ts.map +1 -0
- package/dist/atlas/diffusion/bridges.js +226 -0
- package/dist/atlas/diffusion/bridges.js.map +1 -0
- package/dist/atlas/diffusion/dimensions.d.ts +21 -0
- package/dist/atlas/diffusion/dimensions.d.ts.map +1 -0
- package/dist/atlas/diffusion/dimensions.js +21 -0
- package/dist/atlas/diffusion/dimensions.js.map +1 -0
- package/dist/atlas/diffusion/index.d.ts +16 -0
- package/dist/atlas/diffusion/index.d.ts.map +1 -0
- package/dist/atlas/diffusion/index.js +23 -0
- package/dist/atlas/diffusion/index.js.map +1 -0
- package/dist/atlas/diffusion/models.d.ts +24 -0
- package/dist/atlas/diffusion/models.d.ts.map +1 -0
- package/dist/atlas/diffusion/models.js +139 -0
- package/dist/atlas/diffusion/models.js.map +1 -0
- package/dist/atlas/diffusion/numerics.d.ts +181 -0
- package/dist/atlas/diffusion/numerics.d.ts.map +1 -0
- package/dist/atlas/diffusion/numerics.js +251 -0
- package/dist/atlas/diffusion/numerics.js.map +1 -0
- package/dist/atlas/error-algebra.d.ts +52 -0
- package/dist/atlas/error-algebra.d.ts.map +1 -0
- package/dist/atlas/error-algebra.js +55 -0
- package/dist/atlas/error-algebra.js.map +1 -0
- package/dist/atlas/export.d.ts +48 -0
- package/dist/atlas/export.d.ts.map +1 -0
- package/dist/atlas/export.js +106 -0
- package/dist/atlas/export.js.map +1 -0
- package/dist/atlas/families.d.ts +14 -0
- package/dist/atlas/families.d.ts.map +1 -0
- package/dist/atlas/families.js +20 -0
- package/dist/atlas/families.js.map +1 -0
- package/dist/atlas/index.d.ts +90 -0
- package/dist/atlas/index.d.ts.map +1 -0
- package/dist/atlas/index.js +69 -0
- package/dist/atlas/index.js.map +1 -0
- package/dist/atlas/link-prediction.d.ts +71 -0
- package/dist/atlas/link-prediction.d.ts.map +1 -0
- package/dist/atlas/link-prediction.js +128 -0
- package/dist/atlas/link-prediction.js.map +1 -0
- package/dist/atlas/model.d.ts +70 -0
- package/dist/atlas/model.d.ts.map +1 -0
- package/dist/atlas/model.js +26 -0
- package/dist/atlas/model.js.map +1 -0
- package/dist/atlas/oscillators/bridges-coarse.d.ts +71 -0
- package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -0
- package/dist/atlas/oscillators/bridges-coarse.js +146 -0
- package/dist/atlas/oscillators/bridges-coarse.js.map +1 -0
- package/dist/atlas/oscillators/bridges-exact.d.ts +70 -0
- package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -0
- package/dist/atlas/oscillators/bridges-exact.js +227 -0
- package/dist/atlas/oscillators/bridges-exact.js.map +1 -0
- package/dist/atlas/oscillators/bridges-limits.d.ts +118 -0
- package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -0
- package/dist/atlas/oscillators/bridges-limits.js +342 -0
- package/dist/atlas/oscillators/bridges-limits.js.map +1 -0
- package/dist/atlas/oscillators/dimensions.d.ts +34 -0
- package/dist/atlas/oscillators/dimensions.d.ts.map +1 -0
- package/dist/atlas/oscillators/dimensions.js +34 -0
- package/dist/atlas/oscillators/dimensions.js.map +1 -0
- package/dist/atlas/oscillators/index.d.ts +38 -0
- package/dist/atlas/oscillators/index.d.ts.map +1 -0
- package/dist/atlas/oscillators/index.js +37 -0
- package/dist/atlas/oscillators/index.js.map +1 -0
- package/dist/atlas/oscillators/models.d.ts +25 -0
- package/dist/atlas/oscillators/models.d.ts.map +1 -0
- package/dist/atlas/oscillators/models.js +160 -0
- package/dist/atlas/oscillators/models.js.map +1 -0
- package/dist/atlas/oscillators/rejections.d.ts +21 -0
- package/dist/atlas/oscillators/rejections.d.ts.map +1 -0
- package/dist/atlas/oscillators/rejections.js +54 -0
- package/dist/atlas/oscillators/rejections.js.map +1 -0
- package/dist/atlas/path-bound.d.ts +143 -0
- package/dist/atlas/path-bound.d.ts.map +1 -0
- package/dist/atlas/path-bound.js +268 -0
- package/dist/atlas/path-bound.js.map +1 -0
- package/dist/atlas/poster/associations.d.ts +66 -0
- package/dist/atlas/poster/associations.d.ts.map +1 -0
- package/dist/atlas/poster/associations.js +90 -0
- package/dist/atlas/poster/associations.js.map +1 -0
- package/dist/atlas/poster/derivations.d.ts +156 -0
- package/dist/atlas/poster/derivations.d.ts.map +1 -0
- package/dist/atlas/poster/derivations.js +430 -0
- package/dist/atlas/poster/derivations.js.map +1 -0
- package/dist/atlas/poster/statements.d.ts +198 -0
- package/dist/atlas/poster/statements.d.ts.map +1 -0
- package/dist/atlas/poster/statements.js +365 -0
- package/dist/atlas/poster/statements.js.map +1 -0
- package/dist/atlas/public.d.ts +26 -0
- package/dist/atlas/public.d.ts.map +1 -0
- package/dist/atlas/public.js +21 -0
- package/dist/atlas/public.js.map +1 -0
- package/dist/atlas/regime.d.ts +171 -0
- package/dist/atlas/regime.d.ts.map +1 -0
- package/dist/atlas/regime.js +309 -0
- package/dist/atlas/regime.js.map +1 -0
- package/dist/atlas/serialize.d.ts +50 -0
- package/dist/atlas/serialize.d.ts.map +1 -0
- package/dist/atlas/serialize.js +180 -0
- package/dist/atlas/serialize.js.map +1 -0
- package/dist/atlas/statement.d.ts +165 -0
- package/dist/atlas/statement.d.ts.map +1 -0
- package/dist/atlas/statement.js +176 -0
- package/dist/atlas/statement.js.map +1 -0
- package/dist/atlas/types.d.ts +308 -0
- package/dist/atlas/types.d.ts.map +1 -0
- package/dist/atlas/types.js +61 -0
- package/dist/atlas/types.js.map +1 -0
- package/dist/atlas/waves/bridges-closure.d.ts +39 -0
- package/dist/atlas/waves/bridges-closure.d.ts.map +1 -0
- package/dist/atlas/waves/bridges-closure.js +223 -0
- package/dist/atlas/waves/bridges-closure.js.map +1 -0
- package/dist/atlas/waves/bridges.d.ts +49 -0
- package/dist/atlas/waves/bridges.d.ts.map +1 -0
- package/dist/atlas/waves/bridges.js +265 -0
- package/dist/atlas/waves/bridges.js.map +1 -0
- package/dist/atlas/waves/index.d.ts +16 -0
- package/dist/atlas/waves/index.d.ts.map +1 -0
- package/dist/atlas/waves/index.js +23 -0
- package/dist/atlas/waves/index.js.map +1 -0
- package/dist/atlas/waves/models.d.ts +29 -0
- package/dist/atlas/waves/models.d.ts.map +1 -0
- package/dist/atlas/waves/models.js +127 -0
- package/dist/atlas/waves/models.js.map +1 -0
- package/dist/atlas/waves/numerics.d.ts +149 -0
- package/dist/atlas/waves/numerics.d.ts.map +1 -0
- package/dist/atlas/waves/numerics.js +218 -0
- package/dist/atlas/waves/numerics.js.map +1 -0
- package/dist/atlas/witness-artifact.d.ts +65 -0
- package/dist/atlas/witness-artifact.d.ts.map +1 -0
- package/dist/atlas/witness-artifact.js +78 -0
- package/dist/atlas/witness-artifact.js.map +1 -0
- package/dist/atlas/witness-numeric.d.ts +81 -0
- package/dist/atlas/witness-numeric.d.ts.map +1 -0
- package/dist/atlas/witness-numeric.js +105 -0
- package/dist/atlas/witness-numeric.js.map +1 -0
- package/dist/atlas/witness-result.d.ts +77 -0
- package/dist/atlas/witness-result.d.ts.map +1 -0
- package/dist/atlas/witness-result.js +39 -0
- package/dist/atlas/witness-result.js.map +1 -0
- package/dist/atlas/witness-specs.d.ts +110 -0
- package/dist/atlas/witness-specs.d.ts.map +1 -0
- package/dist/atlas/witness-specs.js +372 -0
- package/dist/atlas/witness-specs.js.map +1 -0
- package/dist/atlas/witness-symbolic.d.ts +79 -0
- package/dist/atlas/witness-symbolic.d.ts.map +1 -0
- package/dist/atlas/witness-symbolic.js +140 -0
- package/dist/atlas/witness-symbolic.js.map +1 -0
- package/dist/atlas/witnesses/quantum-support.d.ts +50 -0
- package/dist/atlas/witnesses/quantum-support.d.ts.map +1 -0
- package/dist/atlas/witnesses/quantum-support.js +48 -0
- package/dist/atlas/witnesses/quantum-support.js.map +1 -0
- package/dist/bridges/be11-decoherence-confrontation.js.map +1 -1
- package/dist/bridges/be21-kss-confrontation.js.map +1 -1
- package/dist/bridges/be23-planckian-confrontation.js.map +1 -1
- package/dist/bridges/be35-bootstrap-confrontation.js.map +1 -1
- package/dist/bridges/be36-gw170817-confrontation.js.map +1 -1
- package/dist/bridges/be37-cassini-confrontation.js.map +1 -1
- package/dist/bridges/be48-collapse-confrontation.js.map +1 -1
- package/dist/bridges/be51-lensing-confrontation.js.map +1 -1
- package/dist/bridges/be52-mercury-confrontation.js.map +1 -1
- package/dist/bridges/be55-quantum-hall-confrontation.js.map +1 -1
- package/dist/bridges/be56-casimir-confrontation.js.map +1 -1
- package/dist/bridges/be58-johnson-nyquist-confrontation.js.map +1 -1
- package/dist/bridges/be59-ac-josephson-confrontation.js.map +1 -1
- package/dist/bridges/be60-fractional-qh-confrontation.js.map +1 -1
- package/dist/bridges/be61-wiedemann-franz-confrontation.js.map +1 -1
- package/dist/bridges/be62-bcs-gap-confrontation.js.map +1 -1
- package/dist/bridges/be63-chandrasekhar-mass-confrontation.js.map +1 -1
- package/dist/bridges/be64-eddington-luminosity-confrontation.js.map +1 -1
- package/dist/bridges/be65-jeans-mass-confrontation.js.map +1 -1
- package/dist/bridges/bridge-equations.d.ts +2 -1
- package/dist/bridges/bridge-equations.d.ts.map +1 -1
- package/dist/bridges/bridge-equations.js +3 -2
- package/dist/bridges/bridge-equations.js.map +1 -1
- package/dist/bridges/catalog-adapter.d.ts.map +1 -1
- package/dist/bridges/catalog-adapter.js.map +1 -1
- package/dist/bridges/equations/_be-helpers.d.ts +2 -2
- package/dist/bridges/equations/_be-helpers.js +2 -2
- package/dist/bridges/equations/be-20-vacuum-energy.js.map +1 -1
- package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts +88 -58
- package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts.map +1 -1
- package/dist/bridges/equations/be-35-conformal-bootstrap.js +102 -62
- package/dist/bridges/equations/be-35-conformal-bootstrap.js.map +1 -1
- package/dist/bridges/equations/be-48-grw-localization.d.ts +9 -8
- package/dist/bridges/equations/be-48-grw-localization.d.ts.map +1 -1
- package/dist/bridges/equations/be-48-grw-localization.js +9 -8
- package/dist/bridges/equations/be-48-grw-localization.js.map +1 -1
- package/dist/bridges/gravitational-lensing.d.ts +10 -0
- package/dist/bridges/gravitational-lensing.d.ts.map +1 -1
- package/dist/bridges/gravitational-lensing.js.map +1 -1
- package/dist/bridges/index.d.ts +125 -7
- package/dist/bridges/index.d.ts.map +1 -1
- package/dist/bridges/index.js +483 -20
- package/dist/bridges/index.js.map +1 -1
- package/dist/bridges/perihelion-precession.d.ts +10 -0
- package/dist/bridges/perihelion-precession.d.ts.map +1 -1
- package/dist/bridges/perihelion-precession.js.map +1 -1
- package/dist/bridges/rhs-registry.js +2 -2
- package/dist/canonical/canonical-equation.d.ts +15 -0
- package/dist/canonical/canonical-equation.d.ts.map +1 -1
- package/dist/canonical/entries/_l1-build.d.ts +1 -1
- package/dist/canonical/entries/_l1-build.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.d.ts.map +1 -1
- package/dist/canonical/entries/atomic.js +23 -0
- package/dist/canonical/entries/atomic.js.map +1 -1
- package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
- package/dist/canonical/entries/nonmonomial.js +93 -0
- package/dist/canonical/entries/nonmonomial.js.map +1 -1
- package/dist/canonical/normal-form.js.map +1 -1
- package/dist/canonical/residual.d.ts +28 -0
- package/dist/canonical/residual.d.ts.map +1 -0
- package/dist/canonical/residual.js +31 -0
- package/dist/canonical/residual.js.map +1 -0
- package/dist/cli/command.d.ts +8 -0
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js +10 -0
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/commands/atlas.d.ts +3 -0
- package/dist/cli/commands/atlas.d.ts.map +1 -0
- package/dist/cli/commands/atlas.js +158 -0
- package/dist/cli/commands/atlas.js.map +1 -0
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/coverage.js +3 -3
- package/dist/cli/commands/index.d.ts +3 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/map.d.ts.map +1 -1
- package/dist/cli/commands/map.js +161 -27
- package/dist/cli/commands/map.js.map +1 -1
- package/dist/cli/commands/path.d.ts +3 -0
- package/dist/cli/commands/path.d.ts.map +1 -0
- package/dist/cli/commands/path.js +145 -0
- package/dist/cli/commands/path.js.map +1 -0
- package/dist/cli/commands/recover.d.ts.map +1 -1
- package/dist/cli/commands/recover.js +25 -6
- package/dist/cli/commands/recover.js.map +1 -1
- package/dist/cli/commands/regime.d.ts +14 -0
- package/dist/cli/commands/regime.d.ts.map +1 -0
- package/dist/cli/commands/regime.js +189 -0
- package/dist/cli/commands/regime.js.map +1 -0
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/graphs.d.ts.map +1 -1
- package/dist/cli/graphs.js +5 -1
- package/dist/cli/graphs.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +22 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output.d.ts +6 -1
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/version.js.map +1 -1
- package/dist/cli-api.d.ts +16 -0
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +18 -0
- package/dist/cli-api.js.map +1 -1
- package/dist/composition/axis-audit.js.map +1 -1
- package/dist/composition/bridge-prediction.d.ts.map +1 -1
- package/dist/composition/bridge-prediction.js +0 -0
- package/dist/composition/bridge-prediction.js.map +1 -1
- package/dist/composition/canonical-graph.d.ts +2 -2
- package/dist/composition/canonical-graph.js +2 -2
- package/dist/composition/canonical-graph.js.map +1 -1
- package/dist/composition/compose-symbolic.d.ts.map +1 -1
- package/dist/composition/compose-symbolic.js.map +1 -1
- package/dist/composition/compose.d.ts.map +1 -1
- package/dist/composition/compose.js +80 -1
- package/dist/composition/compose.js.map +1 -1
- package/dist/composition/consequence.js.map +1 -1
- package/dist/composition/discovery.js.map +1 -1
- package/dist/composition/edge.d.ts +64 -0
- package/dist/composition/edge.d.ts.map +1 -1
- package/dist/composition/edge.js +29 -0
- package/dist/composition/edge.js.map +1 -1
- package/dist/composition/edges/calibration.d.ts.map +1 -1
- package/dist/composition/edges/calibration.js +46 -0
- package/dist/composition/edges/calibration.js.map +1 -1
- package/dist/composition/edges/catalog-quantum.d.ts.map +1 -1
- package/dist/composition/edges/catalog-quantum.js +9 -0
- package/dist/composition/edges/catalog-quantum.js.map +1 -1
- package/dist/composition/edges/catalog-tranche.d.ts.map +1 -1
- package/dist/composition/edges/catalog-tranche.js +18 -0
- package/dist/composition/edges/catalog-tranche.js.map +1 -1
- package/dist/composition/enumerate.js.map +1 -1
- package/dist/composition/explain.js.map +1 -1
- package/dist/composition/expr-eval.d.ts.map +1 -1
- package/dist/composition/expr-eval.js.map +1 -1
- package/dist/composition/expr-simplify.d.ts +13 -0
- package/dist/composition/expr-simplify.d.ts.map +1 -1
- package/dist/composition/expr-simplify.js +25 -0
- package/dist/composition/expr-simplify.js.map +1 -1
- package/dist/composition/expr-subst.js.map +1 -1
- package/dist/composition/graph-viz-svg.d.ts.map +1 -1
- package/dist/composition/graph-viz.d.ts +118 -1
- package/dist/composition/graph-viz.d.ts.map +1 -1
- package/dist/composition/graph-viz.js +189 -6
- package/dist/composition/graph-viz.js.map +1 -1
- package/dist/composition/identifiability.js.map +1 -1
- package/dist/composition/index.d.ts +4 -2
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +2 -1
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/poster-source.d.ts +153 -0
- package/dist/composition/poster-source.d.ts.map +1 -0
- package/dist/composition/poster-source.js +183 -0
- package/dist/composition/poster-source.js.map +1 -0
- package/dist/composition/probe/backend-protocol.d.ts +34 -1
- package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
- package/dist/composition/probe/backend-protocol.js +9 -2
- package/dist/composition/probe/backend-protocol.js.map +1 -1
- package/dist/composition/probe/candidate-store.d.ts.map +1 -1
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/residual.d.ts.map +1 -1
- package/dist/composition/probe/residual.js.map +1 -1
- package/dist/composition/probe/search-budget.js.map +1 -1
- package/dist/composition/proposed-bridges.d.ts +2 -2
- package/dist/composition/proposed-bridges.d.ts.map +1 -1
- package/dist/composition/proposed-bridges.js +1 -1
- package/dist/composition/proposed-bridges.js.map +1 -1
- package/dist/composition/retrodiction.js.map +1 -1
- package/dist/composition/uncertainty.d.ts +52 -2
- package/dist/composition/uncertainty.d.ts.map +1 -1
- package/dist/composition/uncertainty.js +38 -2
- package/dist/composition/uncertainty.js.map +1 -1
- package/dist/composition/user-equation.d.ts.map +1 -1
- package/dist/core/flux-rules.d.ts.map +1 -1
- package/dist/core/flux-rules.js.map +1 -1
- package/dist/core/labeled-tensor.d.ts.map +1 -1
- package/dist/core/regime-registry.d.ts.map +1 -1
- package/dist/core/regime-rule-install.js.map +1 -1
- package/dist/core/tensor.d.ts.map +1 -1
- package/dist/core/tensor.js.map +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/diff/bridge-ast-gradient.js.map +1 -1
- package/dist/dimensional/ast-types.d.ts +31 -1
- package/dist/dimensional/ast-types.d.ts.map +1 -1
- package/dist/dimensional/bridge-check.d.ts +1 -1
- package/dist/dimensional/bridge-check.js +1 -1
- package/dist/dimensional/buckingham.d.ts.map +1 -1
- package/dist/dimensional/connection.d.ts +2 -0
- package/dist/dimensional/connection.d.ts.map +1 -1
- package/dist/dimensional/connection.js +2 -0
- package/dist/dimensional/connection.js.map +1 -1
- package/dist/dimensional/curvature-composite.d.ts +5 -3
- package/dist/dimensional/curvature-composite.d.ts.map +1 -1
- package/dist/dimensional/curvature-composite.js +1 -0
- package/dist/dimensional/curvature-composite.js.map +1 -1
- package/dist/dimensional/curvature-invariants.d.ts +2 -0
- package/dist/dimensional/curvature-invariants.d.ts.map +1 -1
- package/dist/dimensional/curvature-invariants.js +2 -0
- package/dist/dimensional/curvature-invariants.js.map +1 -1
- package/dist/dimensional/dimension-spec.d.ts.map +1 -1
- package/dist/dimensional/einstein-equation.d.ts +3 -3
- package/dist/dimensional/einstein-equation.js +3 -3
- package/dist/dimensional/errors.d.ts.map +1 -1
- package/dist/dimensional/metric.d.ts +5 -2
- package/dist/dimensional/metric.d.ts.map +1 -1
- package/dist/dimensional/metric.js +5 -2
- package/dist/dimensional/metric.js.map +1 -1
- package/dist/dimensional/tensor-trace.js.map +1 -1
- package/dist/dimensional/validator-registry.js.map +1 -1
- package/dist/dimensional/validator.d.ts +3 -2
- package/dist/dimensional/validator.d.ts.map +1 -1
- package/dist/dimensional/validator.js +23 -4
- package/dist/dimensional/validator.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
- package/dist/numerical/curvature-lowering-helpers.js +142 -1
- package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
- package/dist/numerical/errors.d.ts.map +1 -1
- package/dist/numerical/errors.js.map +1 -1
- package/dist/numerical/float64-engine.d.ts.map +1 -1
- package/dist/numerical/float64-engine.js +51 -24
- package/dist/numerical/float64-engine.js.map +1 -1
- package/dist/numerical/formula-dimension.d.ts.map +1 -1
- package/dist/numerical/formula-dimension.js.map +1 -1
- package/dist/numerical/formula.d.ts.map +1 -1
- package/dist/numerical/formula.js.map +1 -1
- package/dist/numerical/geometrized.d.ts.map +1 -1
- package/dist/numerical/gl4-integrator.d.ts +3 -3
- package/dist/numerical/gl4-integrator.js +3 -3
- package/dist/numerical/killing.d.ts +47 -5
- package/dist/numerical/killing.d.ts.map +1 -1
- package/dist/numerical/killing.js +41 -3
- package/dist/numerical/killing.js.map +1 -1
- package/dist/numerical/klein-gordon.d.ts +2 -2
- package/dist/numerical/klein-gordon.js +2 -2
- package/dist/numerical/lowering.d.ts +2 -2
- package/dist/numerical/lowering.d.ts.map +1 -1
- package/dist/numerical/lowering.js +5 -3
- package/dist/numerical/lowering.js.map +1 -1
- package/dist/numerical/mathts-engine.d.ts.map +1 -1
- package/dist/numerical/mathts-engine.js.map +1 -1
- package/dist/numerical/metric-inverse.js.map +1 -1
- package/dist/numerical/perihelion-finder.d.ts +15 -13
- package/dist/numerical/perihelion-finder.d.ts.map +1 -1
- package/dist/numerical/perihelion-finder.js +15 -13
- package/dist/numerical/perihelion-finder.js.map +1 -1
- package/dist/numerical/weyl-lowering.d.ts.map +1 -1
- package/dist/numerical/weyl-lowering.js +90 -40
- package/dist/numerical/weyl-lowering.js.map +1 -1
- package/package.json +121 -104
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 3 — `Derivation` (a hyperedge) and multicategory composition.
|
|
3
|
+
*
|
|
4
|
+
* A `Derivation` is many premises and one conclusion. Composing two of them is
|
|
5
|
+
* the operation design note `docs/planning/Atlas-Phase-3-Design.md` §0 names as
|
|
6
|
+
* the one that can silently produce a false claim, and it states the invariant
|
|
7
|
+
* this module exists to enforce:
|
|
8
|
+
*
|
|
9
|
+
* > A hyperedge composes only when EVERY premise edge is exact, and the
|
|
10
|
+
* > composite's premises are the union of the inputs' premises MINUS the
|
|
11
|
+
* > internal conclusions.
|
|
12
|
+
*
|
|
13
|
+
* Four gates enforce it, and each one is a reason to refuse:
|
|
14
|
+
*
|
|
15
|
+
* 1. **Consumption.** `second` must actually consume `first`'s conclusion. If
|
|
16
|
+
* it does not, the two are unrelated hyperedges and gluing them would
|
|
17
|
+
* assert a chain that was never drawn.
|
|
18
|
+
* 2. **Relation.** `composeRelation` decides, exactly as it does for a binary
|
|
19
|
+
* chain. **A hyperedge cannot launder a pair the binary table refuses**
|
|
20
|
+
* (§3): if the two relations land on one of the fifty-six
|
|
21
|
+
* `'no-composite-claim'` cells, the hyperedge carries no claim either. This
|
|
22
|
+
* is also where "only exact hyperedges compose" is enforced — the table's
|
|
23
|
+
* eight defined cells ARE that set, and re-deciding exactness here with a
|
|
24
|
+
* second rule would be a second place for it to rot.
|
|
25
|
+
* 3. **Context.** The union over every statement involved must EXIST.
|
|
26
|
+
* `statementContextUnion` returns a refusal rather than a merge when it
|
|
27
|
+
* does not, and that refusal propagates: no union, no composite.
|
|
28
|
+
* 4. **Premises.** The composite's premises are `first.premises ∪
|
|
29
|
+
* second.premises` minus the internal conclusions — here, `first.conclusion`.
|
|
30
|
+
*
|
|
31
|
+
* ## Why the primary API returns a union and does not throw
|
|
32
|
+
*
|
|
33
|
+
* The S3.1 brief says composition "throws". The design note (§2) says the
|
|
34
|
+
* refusal "is the correct output rather than an error", and requires the
|
|
35
|
+
* result type to make "these do not compose" expressible WITHOUT a number or a
|
|
36
|
+
* conclusion attached — mirroring `boundPath`'s no-claim. Both are served
|
|
37
|
+
* here: {@link composeDerivations} returns a discriminated union, and
|
|
38
|
+
* {@link composeDerivationsOrThrow} is a thin strict wrapper for callers that
|
|
39
|
+
* genuinely want a failure. The union is primary because it is the shape a
|
|
40
|
+
* caller cannot misread — a refusal has no `.derivation` to read.
|
|
41
|
+
*
|
|
42
|
+
* Pure: no I/O, no registry reads beyond the map a caller passes in.
|
|
43
|
+
*
|
|
44
|
+
* @module atlas/derivation
|
|
45
|
+
*/
|
|
46
|
+
import type { ContextUnionResult, Statement, StatementId } from './statement.js';
|
|
47
|
+
import type { RelationType } from './types.js';
|
|
48
|
+
/** A `Derivation` id — `'d-noether-energy'`, … . @internal */
|
|
49
|
+
export type DerivationId = string;
|
|
50
|
+
/**
|
|
51
|
+
* Many premises, one conclusion.
|
|
52
|
+
*
|
|
53
|
+
* `contextUnion` is a FIELD rather than a method because it is checked once,
|
|
54
|
+
* at construction, and carried: a record whose premises do not pool is a
|
|
55
|
+
* record that states no claim, and that fact travels with it.
|
|
56
|
+
*
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export interface Derivation {
|
|
60
|
+
readonly id: DerivationId;
|
|
61
|
+
readonly relation: RelationType;
|
|
62
|
+
readonly premises: readonly StatementId[];
|
|
63
|
+
readonly conclusion: StatementId;
|
|
64
|
+
readonly sideConditions: readonly string[];
|
|
65
|
+
/** CHECKED, never merged. A `'no-union'` here means this record claims nothing. */
|
|
66
|
+
readonly contextUnion: ContextUnionResult;
|
|
67
|
+
}
|
|
68
|
+
/** A `Derivation` without its checked union — what {@link makeDerivation} takes. @internal */
|
|
69
|
+
export type DerivationSpec = Omit<Derivation, 'contextUnion'>;
|
|
70
|
+
/**
|
|
71
|
+
* Build a `Derivation`, checking the context union of its premises AND its
|
|
72
|
+
* conclusion.
|
|
73
|
+
*
|
|
74
|
+
* The conclusion is included deliberately: a conclusion stated in a context
|
|
75
|
+
* incompatible with its own premises is exactly the false claim §0 warns
|
|
76
|
+
* about, and leaving it out would let one through.
|
|
77
|
+
*
|
|
78
|
+
* @throws RangeError via `statementContextUnion` if an id does not resolve.
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export declare function makeDerivation(spec: DerivationSpec, registry: ReadonlyMap<StatementId, Statement>): Derivation;
|
|
82
|
+
/** Why two hyperedges do not compose. @internal */
|
|
83
|
+
export type NoCompositeReason =
|
|
84
|
+
/** `second` does not consume `first`'s conclusion. */
|
|
85
|
+
'not-consumed'
|
|
86
|
+
/** The binary composition table refuses the pair of relations. */
|
|
87
|
+
| 'no-composite-claim'
|
|
88
|
+
/** The statements involved have no context union. */
|
|
89
|
+
| 'no-context-union'
|
|
90
|
+
/** One of the inputs already states no claim of its own. */
|
|
91
|
+
| 'input-states-no-claim';
|
|
92
|
+
/** The composite hyperedge. @internal */
|
|
93
|
+
export interface CompositeFormed {
|
|
94
|
+
readonly kind: 'composite';
|
|
95
|
+
readonly derivation: Derivation;
|
|
96
|
+
}
|
|
97
|
+
/** The two hyperedges do NOT compose, and this is why. @internal */
|
|
98
|
+
export interface CompositeRefused {
|
|
99
|
+
readonly kind: 'no-composite';
|
|
100
|
+
readonly reason: NoCompositeReason;
|
|
101
|
+
readonly detail: string;
|
|
102
|
+
}
|
|
103
|
+
/** The result of {@link composeDerivations}. @internal */
|
|
104
|
+
export type DerivationCompositionResult = CompositeFormed | CompositeRefused;
|
|
105
|
+
/** Thrown by {@link composeDerivationsOrThrow}. Carries the refusal verbatim. @internal */
|
|
106
|
+
export declare class DerivationCompositionError extends Error {
|
|
107
|
+
readonly reason: NoCompositeReason;
|
|
108
|
+
constructor(refusal: CompositeRefused);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Compose `first` then `second` into one hyperedge, or refuse and say why.
|
|
112
|
+
*
|
|
113
|
+
* `D1: {A, B} ⊢ C` composed with `D2: {C, E} ⊢ F` yields `{A, B, E} ⊢ F`:
|
|
114
|
+
* `C` is the internal conclusion and leaves the composite's premises.
|
|
115
|
+
*
|
|
116
|
+
* Premise ORDER is `first`'s surviving premises followed by `second`'s, each
|
|
117
|
+
* de-duplicated on first appearance. Stable rather than sorted, so a composite
|
|
118
|
+
* reads in the order the derivation was performed.
|
|
119
|
+
*
|
|
120
|
+
* @param id - the composite's id. Supplied by the caller rather than derived
|
|
121
|
+
* from the inputs, because a generated id would be a new identifier the
|
|
122
|
+
* registry does not know about.
|
|
123
|
+
* @internal
|
|
124
|
+
*/
|
|
125
|
+
export declare function composeDerivations(id: DerivationId, first: Derivation, second: Derivation, registry: ReadonlyMap<StatementId, Statement>): DerivationCompositionResult;
|
|
126
|
+
/**
|
|
127
|
+
* {@link composeDerivations}, throwing on refusal.
|
|
128
|
+
*
|
|
129
|
+
* For callers that treat a refusal as a failure. Prefer the union-returning
|
|
130
|
+
* form: a thrown error is easy to catch and discard, and a discarded refusal
|
|
131
|
+
* is how a composite gets used anyway.
|
|
132
|
+
*
|
|
133
|
+
* @throws DerivationCompositionError on any refusal.
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
export declare function composeDerivationsOrThrow(id: DerivationId, first: Derivation, second: Derivation, registry: ReadonlyMap<StatementId, Statement>): Derivation;
|
|
137
|
+
//# sourceMappingURL=derivation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivation.d.ts","sourceRoot":"","sources":["../../src/atlas/derivation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,mFAAmF;IACnF,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;CAC3C;AAED,8FAA8F;AAC9F,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,GAC5C,UAAU,CAKZ;AAED,mDAAmD;AACnD,MAAM,MAAM,iBAAiB;AAC3B,sDAAsD;AACpD,cAAc;AAChB,kEAAkE;GAChE,oBAAoB;AACtB,qDAAqD;GACnD,kBAAkB;AACpB,4DAA4D;GAC1D,uBAAuB,CAAC;AAE5B,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0DAA0D;AAC1D,MAAM,MAAM,2BAA2B,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE7E,2FAA2F;AAC3F,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,YAAY,OAAO,EAAE,gBAAgB,EAIpC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,GAC5C,2BAA2B,CA2F7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,GAC5C,UAAU,CAIZ"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 3 — `Derivation` (a hyperedge) and multicategory composition.
|
|
3
|
+
*
|
|
4
|
+
* A `Derivation` is many premises and one conclusion. Composing two of them is
|
|
5
|
+
* the operation design note `docs/planning/Atlas-Phase-3-Design.md` §0 names as
|
|
6
|
+
* the one that can silently produce a false claim, and it states the invariant
|
|
7
|
+
* this module exists to enforce:
|
|
8
|
+
*
|
|
9
|
+
* > A hyperedge composes only when EVERY premise edge is exact, and the
|
|
10
|
+
* > composite's premises are the union of the inputs' premises MINUS the
|
|
11
|
+
* > internal conclusions.
|
|
12
|
+
*
|
|
13
|
+
* Four gates enforce it, and each one is a reason to refuse:
|
|
14
|
+
*
|
|
15
|
+
* 1. **Consumption.** `second` must actually consume `first`'s conclusion. If
|
|
16
|
+
* it does not, the two are unrelated hyperedges and gluing them would
|
|
17
|
+
* assert a chain that was never drawn.
|
|
18
|
+
* 2. **Relation.** `composeRelation` decides, exactly as it does for a binary
|
|
19
|
+
* chain. **A hyperedge cannot launder a pair the binary table refuses**
|
|
20
|
+
* (§3): if the two relations land on one of the fifty-six
|
|
21
|
+
* `'no-composite-claim'` cells, the hyperedge carries no claim either. This
|
|
22
|
+
* is also where "only exact hyperedges compose" is enforced — the table's
|
|
23
|
+
* eight defined cells ARE that set, and re-deciding exactness here with a
|
|
24
|
+
* second rule would be a second place for it to rot.
|
|
25
|
+
* 3. **Context.** The union over every statement involved must EXIST.
|
|
26
|
+
* `statementContextUnion` returns a refusal rather than a merge when it
|
|
27
|
+
* does not, and that refusal propagates: no union, no composite.
|
|
28
|
+
* 4. **Premises.** The composite's premises are `first.premises ∪
|
|
29
|
+
* second.premises` minus the internal conclusions — here, `first.conclusion`.
|
|
30
|
+
*
|
|
31
|
+
* ## Why the primary API returns a union and does not throw
|
|
32
|
+
*
|
|
33
|
+
* The S3.1 brief says composition "throws". The design note (§2) says the
|
|
34
|
+
* refusal "is the correct output rather than an error", and requires the
|
|
35
|
+
* result type to make "these do not compose" expressible WITHOUT a number or a
|
|
36
|
+
* conclusion attached — mirroring `boundPath`'s no-claim. Both are served
|
|
37
|
+
* here: {@link composeDerivations} returns a discriminated union, and
|
|
38
|
+
* {@link composeDerivationsOrThrow} is a thin strict wrapper for callers that
|
|
39
|
+
* genuinely want a failure. The union is primary because it is the shape a
|
|
40
|
+
* caller cannot misread — a refusal has no `.derivation` to read.
|
|
41
|
+
*
|
|
42
|
+
* Pure: no I/O, no registry reads beyond the map a caller passes in.
|
|
43
|
+
*
|
|
44
|
+
* @module atlas/derivation
|
|
45
|
+
*/
|
|
46
|
+
import { composeRelation, NO_COMPOSITE_CLAIM } from './composition-table.js';
|
|
47
|
+
import { statementContextUnion } from './statement.js';
|
|
48
|
+
/**
|
|
49
|
+
* Build a `Derivation`, checking the context union of its premises AND its
|
|
50
|
+
* conclusion.
|
|
51
|
+
*
|
|
52
|
+
* The conclusion is included deliberately: a conclusion stated in a context
|
|
53
|
+
* incompatible with its own premises is exactly the false claim §0 warns
|
|
54
|
+
* about, and leaving it out would let one through.
|
|
55
|
+
*
|
|
56
|
+
* @throws RangeError via `statementContextUnion` if an id does not resolve.
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export function makeDerivation(spec, registry) {
|
|
60
|
+
return {
|
|
61
|
+
...spec,
|
|
62
|
+
contextUnion: statementContextUnion([...spec.premises, spec.conclusion], registry),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** Thrown by {@link composeDerivationsOrThrow}. Carries the refusal verbatim. @internal */
|
|
66
|
+
export class DerivationCompositionError extends Error {
|
|
67
|
+
reason;
|
|
68
|
+
constructor(refusal) {
|
|
69
|
+
super(refusal.detail);
|
|
70
|
+
this.name = 'DerivationCompositionError';
|
|
71
|
+
this.reason = refusal.reason;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compose `first` then `second` into one hyperedge, or refuse and say why.
|
|
76
|
+
*
|
|
77
|
+
* `D1: {A, B} ⊢ C` composed with `D2: {C, E} ⊢ F` yields `{A, B, E} ⊢ F`:
|
|
78
|
+
* `C` is the internal conclusion and leaves the composite's premises.
|
|
79
|
+
*
|
|
80
|
+
* Premise ORDER is `first`'s surviving premises followed by `second`'s, each
|
|
81
|
+
* de-duplicated on first appearance. Stable rather than sorted, so a composite
|
|
82
|
+
* reads in the order the derivation was performed.
|
|
83
|
+
*
|
|
84
|
+
* @param id - the composite's id. Supplied by the caller rather than derived
|
|
85
|
+
* from the inputs, because a generated id would be a new identifier the
|
|
86
|
+
* registry does not know about.
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export function composeDerivations(id, first, second, registry) {
|
|
90
|
+
// ── Gate 0: an input that claims nothing composes to nothing ──────────────
|
|
91
|
+
for (const [label, d] of [
|
|
92
|
+
['first', first],
|
|
93
|
+
['second', second],
|
|
94
|
+
]) {
|
|
95
|
+
if (d.contextUnion.kind === 'no-union') {
|
|
96
|
+
return {
|
|
97
|
+
kind: 'no-composite',
|
|
98
|
+
reason: 'input-states-no-claim',
|
|
99
|
+
detail: `${label} derivation '${d.id}' has no context union ` +
|
|
100
|
+
`(${d.contextUnion.reason}: ${d.contextUnion.detail}), so it states no claim to compose`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// ── Gate 1: `second` must consume `first`'s conclusion ────────────────────
|
|
105
|
+
if (!second.premises.includes(first.conclusion)) {
|
|
106
|
+
return {
|
|
107
|
+
kind: 'no-composite',
|
|
108
|
+
reason: 'not-consumed',
|
|
109
|
+
detail: `'${second.id}' does not take '${first.conclusion}' as a premise ` +
|
|
110
|
+
`(its premises are ${second.premises.map((p) => `'${p}'`).join(', ')}), ` +
|
|
111
|
+
`so '${first.id}' does not feed it`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// ── Gate 2: the binary table governs, and a hyperedge cannot launder it ───
|
|
115
|
+
const relation = composeRelation(first.relation, second.relation);
|
|
116
|
+
if (relation === NO_COMPOSITE_CLAIM) {
|
|
117
|
+
return {
|
|
118
|
+
kind: 'no-composite',
|
|
119
|
+
reason: NO_COMPOSITE_CLAIM,
|
|
120
|
+
detail: `'${first.id}' (${first.relation}) then '${second.id}' (${second.relation}) ` +
|
|
121
|
+
'composes to no relation; a hyperedge cannot assert what the binary table refuses',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// ── Gate 4 (computed before gate 3 so the union covers the right set) ─────
|
|
125
|
+
// The composite's premises: the union of the inputs' premises MINUS the
|
|
126
|
+
// internal conclusions. `first.conclusion` is the only internal one for a
|
|
127
|
+
// two-input composition; it is removed from BOTH sides, so a premise that
|
|
128
|
+
// `first` also happened to require does not survive as an input it no longer
|
|
129
|
+
// needs.
|
|
130
|
+
const internal = new Set([first.conclusion]);
|
|
131
|
+
const premises = [];
|
|
132
|
+
for (const p of [...first.premises, ...second.premises]) {
|
|
133
|
+
if (internal.has(p))
|
|
134
|
+
continue;
|
|
135
|
+
if (premises.includes(p))
|
|
136
|
+
continue;
|
|
137
|
+
premises.push(p);
|
|
138
|
+
}
|
|
139
|
+
// ── Gate 3: the pooled context must exist over EVERY statement involved ───
|
|
140
|
+
// Every statement, not just the surviving premises: the internal conclusion
|
|
141
|
+
// is what the two halves meet at, and an incompatibility there is exactly
|
|
142
|
+
// the one that would vanish from the composite's own field.
|
|
143
|
+
const involved = [
|
|
144
|
+
...new Set([
|
|
145
|
+
...first.premises,
|
|
146
|
+
first.conclusion,
|
|
147
|
+
...second.premises,
|
|
148
|
+
second.conclusion,
|
|
149
|
+
]),
|
|
150
|
+
];
|
|
151
|
+
const union = statementContextUnion(involved, registry);
|
|
152
|
+
if (union.kind === 'no-union') {
|
|
153
|
+
return {
|
|
154
|
+
kind: 'no-composite',
|
|
155
|
+
reason: 'no-context-union',
|
|
156
|
+
detail: `'${first.id}' and '${second.id}' have no context union ` +
|
|
157
|
+
`(${union.reason}: ${union.detail})`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
kind: 'composite',
|
|
162
|
+
derivation: {
|
|
163
|
+
id,
|
|
164
|
+
relation,
|
|
165
|
+
premises,
|
|
166
|
+
conclusion: second.conclusion,
|
|
167
|
+
sideConditions: [
|
|
168
|
+
...new Set([...first.sideConditions, ...second.sideConditions]),
|
|
169
|
+
],
|
|
170
|
+
contextUnion: union,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* {@link composeDerivations}, throwing on refusal.
|
|
176
|
+
*
|
|
177
|
+
* For callers that treat a refusal as a failure. Prefer the union-returning
|
|
178
|
+
* form: a thrown error is easy to catch and discard, and a discarded refusal
|
|
179
|
+
* is how a composite gets used anyway.
|
|
180
|
+
*
|
|
181
|
+
* @throws DerivationCompositionError on any refusal.
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
184
|
+
export function composeDerivationsOrThrow(id, first, second, registry) {
|
|
185
|
+
const result = composeDerivations(id, first, second, registry);
|
|
186
|
+
if (result.kind === 'no-composite')
|
|
187
|
+
throw new DerivationCompositionError(result);
|
|
188
|
+
return result.derivation;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=derivation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivation.js","sourceRoot":"","sources":["../../src/atlas/derivation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 1, S1.3 — evidence tags, DERIVED AT READ TIME.
|
|
3
|
+
*
|
|
4
|
+
* Design note: `docs/planning/Atlas-Phase-1-Design.md` §3 and §4.
|
|
5
|
+
*
|
|
6
|
+
* **The contract of this module: it has no write path.** No record stores an
|
|
7
|
+
* evidence set; every tag is computed from the artifacts a record actually
|
|
8
|
+
* carries, each time it is asked for. A tag is emitted ONLY when the artifact
|
|
9
|
+
* it names is present and passing. There is no default-true tag, no tag
|
|
10
|
+
* derived from another tag, no tag derived from `reviewStatus`, and no tag
|
|
11
|
+
* derived from prose. A record carrying no passing witness derives exactly
|
|
12
|
+
* `{'proposed'}`.
|
|
13
|
+
*
|
|
14
|
+
* ## The empty-set trap (design note §3, Adam A1 RED — confirmed by execution)
|
|
15
|
+
*
|
|
16
|
+
* `convention-checked` is the ONLY rule in the table whose quantifier is
|
|
17
|
+
* universal (`every`). Written as "`conventions` is present AND every declared
|
|
18
|
+
* field is consumed by a witness", it hands the tag to a record with ZERO
|
|
19
|
+
* witnesses, because `conventions = {}` declares nothing and `[].every(…)` is
|
|
20
|
+
* vacuously true. {@link deriveEvidence} therefore requires a NON-EMPTY
|
|
21
|
+
* declaration before the universal runs, and
|
|
22
|
+
* `tests/atlas/derive-evidence.test.ts` pins the empty-object case.
|
|
23
|
+
*
|
|
24
|
+
* **The general rule, for anything added here later:** a universal quantifier
|
|
25
|
+
* in a tag derivation must be paired with a non-emptiness check, or the tag is
|
|
26
|
+
* free. The other rules are existentials (`some`), which are false on the
|
|
27
|
+
* empty set and therefore safe.
|
|
28
|
+
*
|
|
29
|
+
* ## What "passing" means, and why the caller supplies it
|
|
30
|
+
*
|
|
31
|
+
* `Witness` records an id and the test file that runs it; nothing on the
|
|
32
|
+
* record says whether that test passed. Proving it is a filesystem act (see
|
|
33
|
+
* `tests/atlas/evidence-rule.test.ts`, which matches witness ids against test
|
|
34
|
+
* titles), and this module is pure. So the set of passing witness ids is an
|
|
35
|
+
* ARGUMENT, and it is REQUIRED — {@link NO_PASSING_WITNESSES} must be passed
|
|
36
|
+
* explicitly when nothing is verified.
|
|
37
|
+
*
|
|
38
|
+
* It used to DEFAULT to empty, which sounds conservative and was in fact a
|
|
39
|
+
* defect (Eve E1 RED, confirmed by execution). Defaulting the other way, to
|
|
40
|
+
* "all", would have been the free-tag defect above in a second location — but
|
|
41
|
+
* defaulting to empty created the mirror-image failure: a forgotten argument
|
|
42
|
+
* produced an answer identical to a real negative. A catalog-wide check written
|
|
43
|
+
* that way could only ever report "no row gains evidence", whatever the rows
|
|
44
|
+
* held, so it could not fail. Requiring the argument makes a vacuous result a
|
|
45
|
+
* STATED choice, and `tests/atlas/coverage.test.ts` now carries a positive
|
|
46
|
+
* control so that a negative result carries information.
|
|
47
|
+
*
|
|
48
|
+
* @module atlas/derive-evidence
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
import type { Conventions, EvidenceTag, FormalFidelity } from './types.js';
|
|
52
|
+
/**
|
|
53
|
+
* The verdict of `adjudicateBridgeEntry` (`src/bridges/membership.ts`),
|
|
54
|
+
* restated structurally so this module takes no dependency on `src/bridges`
|
|
55
|
+
* (the dependency must run one way — design note §1).
|
|
56
|
+
*
|
|
57
|
+
* `tests/atlas/derive-evidence.test.ts` pins this union against the real
|
|
58
|
+
* `BridgeVerdict` at compile time AND at runtime over the live catalog, so a
|
|
59
|
+
* fourth verdict fails the test rather than silently falling through.
|
|
60
|
+
*
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
export type MembershipVerdict = 'bridge' | 'not-a-bridge' | 'unadjudicated';
|
|
64
|
+
/**
|
|
65
|
+
* A witness as this derivation reads it.
|
|
66
|
+
*
|
|
67
|
+
* Structural, not an import of `Witness`, for two reasons that are findings in
|
|
68
|
+
* their own right (both reported to the Lead):
|
|
69
|
+
*
|
|
70
|
+
* - `Witness.kind` is `'symbolic' | 'numeric' | 'formal'` — there is NO
|
|
71
|
+
* `'dimensional'` member, so `dimension-checked` has no source on today's
|
|
72
|
+
* data. The kind is widened here to include `'dimensional'` so the rule is
|
|
73
|
+
* written once and correctly; it simply never fires until such a witness
|
|
74
|
+
* exists. Widening it is not inventing evidence: no record carries one.
|
|
75
|
+
* - `Witness` records no list of the convention fields a check consumes, so
|
|
76
|
+
* `consumes` is optional here. Absent ⇒ the witness consumes nothing ⇒
|
|
77
|
+
* `convention-checked` cannot be earned. Conservative by construction.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export interface WitnessLike {
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly kind: 'symbolic' | 'numeric' | 'formal' | 'dimensional';
|
|
84
|
+
/** Convention fields this check actually consumes, when it declares any. */
|
|
85
|
+
readonly consumes?: readonly (keyof Conventions)[];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A counterexample as this derivation reads it.
|
|
89
|
+
*
|
|
90
|
+
* `Counterexample` (`src/atlas/types.ts`) carries `description` and `witness`
|
|
91
|
+
* and has NO `resolvedBy` field — so on today's data every counterexample is
|
|
92
|
+
* unresolved. `resolvedBy` is read here as an optional property rather than
|
|
93
|
+
* assumed absent, so that adding it later resolves counterexamples without
|
|
94
|
+
* touching this file. This module adds no field to any type.
|
|
95
|
+
*
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
export interface CounterexampleLike {
|
|
99
|
+
readonly description?: string;
|
|
100
|
+
readonly witness?: string;
|
|
101
|
+
/** Present and non-empty ⇒ the counterexample is resolved and does not contradict. */
|
|
102
|
+
readonly resolvedBy?: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* A rejection as this projection reads it — structural, so this module still
|
|
106
|
+
* imports nothing from `src/bridges`.
|
|
107
|
+
*
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
export interface RejectionLike {
|
|
111
|
+
readonly beId: number;
|
|
112
|
+
readonly reason: string;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* A row's counterexamples INCLUDING the one its rejection constitutes.
|
|
116
|
+
*
|
|
117
|
+
* ROADMAP §7 Phase 1 asks for "a `RejectedBridgeAdjudication` ⇒ `contradicted`
|
|
118
|
+
* with the counterexample LINKED". The linking half is what matters and was
|
|
119
|
+
* missing: BE-35 had a counterexample written by hand and earned `contradicted`
|
|
120
|
+
* honestly, while BE-28, BE-29, BE-32 and BE-40 had none — and an earlier rule
|
|
121
|
+
* papered over that by FORCING `contradicted` onto every rejected row, which
|
|
122
|
+
* manufactured a refutation from nothing (Eve E1).
|
|
123
|
+
*
|
|
124
|
+
* This is the linking done properly. The rejection's own `reason` IS the
|
|
125
|
+
* counterexample: a row rejected for being single-regime is refuted AS A BRIDGE
|
|
126
|
+
* by exactly that argument. Projecting it means `contradicted` is then EARNED
|
|
127
|
+
* through the ordinary derivation rather than asserted by a special case.
|
|
128
|
+
*
|
|
129
|
+
* **It is a projection, not a copy.** The reason string is never duplicated into
|
|
130
|
+
* a catalog row; `bridges/rejected.ts` remains its single source, which is what
|
|
131
|
+
* the ROADMAP means by "cross-linked ... rather than duplicating it". The caller
|
|
132
|
+
* supplies the rejection, so this module still owns no view of WHICH ids are
|
|
133
|
+
* rejected.
|
|
134
|
+
*
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
export declare function counterexamplesWithRejection(record: EvidenceInput, rejection: RejectionLike | undefined): readonly CounterexampleLike[];
|
|
138
|
+
/** The artifacts a record carries, all optional. @internal */
|
|
139
|
+
export interface EvidenceInput {
|
|
140
|
+
readonly witnesses?: readonly WitnessLike[];
|
|
141
|
+
readonly conventions?: Conventions;
|
|
142
|
+
readonly counterexamples?: readonly CounterexampleLike[];
|
|
143
|
+
/**
|
|
144
|
+
* The record's formal reference, read ONLY for its fidelity. Structural so a
|
|
145
|
+
* caller can pass an `AtlasBridge` directly.
|
|
146
|
+
*/
|
|
147
|
+
readonly formalRef?: {
|
|
148
|
+
readonly fidelity: FormalFidelity;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* The empty passing set, for a caller that genuinely has nothing marked passing.
|
|
153
|
+
*
|
|
154
|
+
* ⚠ This is EXPORTED and must be passed EXPLICITLY. It used to be a default
|
|
155
|
+
* parameter value, and that was a defect found by post-implementation review
|
|
156
|
+
* (Eve, E1) and confirmed by execution: a record carrying three passing
|
|
157
|
+
* witnesses and a consumed convention derived `{'proposed'}` under the default —
|
|
158
|
+
* byte-identical to an empty record. A caller who simply forgot the argument got
|
|
159
|
+
* an answer indistinguishable from a real negative.
|
|
160
|
+
*
|
|
161
|
+
* That made a catalog-wide check VACUOUS rather than reassuring. "No row gains
|
|
162
|
+
* evidence" was the only outcome the call could produce, whatever the rows
|
|
163
|
+
* contained, so the check could not fail and proved nothing. Requiring the
|
|
164
|
+
* argument forces the caller to STATE which witnesses were verified, which is
|
|
165
|
+
* exactly the decision that must never be implicit.
|
|
166
|
+
*/
|
|
167
|
+
export declare const NO_PASSING_WITNESSES: ReadonlySet<string>;
|
|
168
|
+
/**
|
|
169
|
+
* Derive the evidence set of one record.
|
|
170
|
+
*
|
|
171
|
+
* @param record - the artifacts the record carries.
|
|
172
|
+
* @param passingWitnessIds - ids of witnesses VERIFIED to pass. REQUIRED: pass
|
|
173
|
+
* {@link NO_PASSING_WITNESSES} explicitly when nothing is verified, so that a
|
|
174
|
+
* vacuous result is a stated choice rather than a forgotten argument.
|
|
175
|
+
* @returns a fresh set; never cached, never stored.
|
|
176
|
+
* @internal
|
|
177
|
+
*/
|
|
178
|
+
export declare function deriveEvidence(record: EvidenceInput, passingWitnessIds: ReadonlySet<string>): ReadonlySet<EvidenceTag>;
|
|
179
|
+
/**
|
|
180
|
+
* Derive the evidence set of a catalog row, under the adjudication precedence
|
|
181
|
+
* of design note §4. The verdict is supplied by the caller — it comes from
|
|
182
|
+
* `adjudicateBridgeEntry`, which owns the rejected-id registry
|
|
183
|
+
* (`REJECTED_BRIDGE_IDS`). Reading that registry here would make this file a
|
|
184
|
+
* second source of truth about which ids are rejected.
|
|
185
|
+
*
|
|
186
|
+
* | Verdict | Derives |
|
|
187
|
+
* |---|---|
|
|
188
|
+
* | `'not-a-bridge'` | {@link deriveEvidence} runs normally — see below |
|
|
189
|
+
* | `'unadjudicated'` | `{'proposed'}` only — never a refutation, never support |
|
|
190
|
+
* | `'bridge'` | {@link deriveEvidence} runs normally |
|
|
191
|
+
*
|
|
192
|
+
* ## ⚠ `'not-a-bridge'` no longer forces `'contradicted'` (Eve E1, 2026-09-21)
|
|
193
|
+
*
|
|
194
|
+
* It used to, "regardless of witnesses", and that rule — written by me in design
|
|
195
|
+
* note §4 — **violated §3 of the same document.** `contradicted` means THE CLAIM
|
|
196
|
+
* IS REFUTED. `not-a-bridge` means THE ROW IS NOT A REGIME-CROSSING BRIDGE.
|
|
197
|
+
* Those are different assertions about different things, and conflating them made
|
|
198
|
+
* the library report BE-35 as `status: 'established'` and `evidence:
|
|
199
|
+
* {'contradicted'}` in the same breath — from which a reader cannot tell whether
|
|
200
|
+
* the equation is a true in-regime identity the bridge graph ignores, or a
|
|
201
|
+
* refuted statement.
|
|
202
|
+
*
|
|
203
|
+
* Measured when the rule was removed: of the five rejected rows, only **BE-35**
|
|
204
|
+
* carries an actual counterexample, and it derives `{'contradicted'}` NATURALLY
|
|
205
|
+
* through the normal path. **BE-28, BE-29, BE-32 and BE-40 carry none** — the old
|
|
206
|
+
* rule was manufacturing a refutation for four rows with no refuting artifact
|
|
207
|
+
* whatsoever. That is exactly what §3 forbids: a tag is emitted only when the
|
|
208
|
+
* artifact it names is present and passing.
|
|
209
|
+
*
|
|
210
|
+
* Membership already has a single owner — `adjudicateBridgeEntry` — and it does
|
|
211
|
+
* not need restating in the evidence vocabulary. Removing the case leaves each
|
|
212
|
+
* fact with exactly one source, which is what §4 was trying to achieve and this
|
|
213
|
+
* rule was quietly undermining.
|
|
214
|
+
*
|
|
215
|
+
* @internal
|
|
216
|
+
*/
|
|
217
|
+
export declare function deriveEvidenceForVerdict(verdict: MembershipVerdict, record: EvidenceInput, passingWitnessIds: ReadonlySet<string>): ReadonlySet<EvidenceTag>;
|
|
218
|
+
//# sourceMappingURL=derive-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-evidence.d.ts","sourceRoot":"","sources":["../../src/atlas/derive-evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;IACjE,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,aAAa,GAAG,SAAS,GACnC,SAAS,kBAAkB,EAAE,CAqB/B;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;KAAE,CAAC;CAC5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAC;AAmB3E;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,GACrC,WAAW,CAAC,WAAW,CAAC,CAyC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,aAAa,EACrB,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,GACrC,WAAW,CAAC,WAAW,CAAC,CAY1B"}
|