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
package/README.md
CHANGED
|
@@ -45,41 +45,41 @@ Think of this as:
|
|
|
45
45
|
git clone https://github.com/danielsimonjr/universal-physics-tensor.git
|
|
46
46
|
cd universal-physics-tensor
|
|
47
47
|
|
|
48
|
-
# Install dependencies
|
|
49
|
-
|
|
48
|
+
# Install dependencies (Bun is the local/CI package manager; Node ≥ 18 is the runtime)
|
|
49
|
+
bun install
|
|
50
50
|
|
|
51
51
|
# Build the project
|
|
52
|
-
|
|
52
|
+
bun run build
|
|
53
53
|
|
|
54
54
|
# Run the smoke test
|
|
55
55
|
node test-example.js
|
|
56
56
|
|
|
57
57
|
# Bridge-inference CLI (no TypeScript needed) — `upt` subcommands:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
58
|
+
bun run upt -- explain hawking-temperature mass=1.989e30 # explain a built-in quantity
|
|
59
|
+
bun run upt -- priority # triage speculative bridges
|
|
60
|
+
bun run upt -- audit # derive the bridges by dimensions
|
|
61
|
+
bun run upt -- predict # empty regime cells as link hypotheses
|
|
62
|
+
bun run upt -- discover # vet link candidates (merge/unlock/consistency)
|
|
63
|
+
bun run upt -- discover --source=canonical # run the funnel on standard physics ALONE (no bridges)
|
|
64
|
+
bun run upt -- discover --derive # surface machine-derived identity consequences (--max-orders / --anchor flags available)
|
|
65
|
+
bun run upt -- probe scan # experimental expression/residual frontier (Product B; not `upt discover`)
|
|
66
|
+
bun run upt -- probe run --problem=tests/fixtures/discovery/pendulum-scaling/public/problem.json
|
|
67
|
+
bun run upt -- connectors # which isolated bridges can connect to the core
|
|
68
|
+
bun run upt -- coverage # audit each bridge's empirical grounding
|
|
69
|
+
bun run upt -- canonical # the standard-physics L-layer registry (answer key)
|
|
70
|
+
bun run upt -- recover # validate bridges against standard physics
|
|
71
|
+
bun run upt -- symbolic --simplify # compose + fold bridges' SYMBOLIC forms (MathTS simplify)
|
|
72
|
+
bun run upt -- confront # run the catalog's committed real-data confrontations (predicted vs observed)
|
|
73
|
+
bun run upt -- map --source=both --format=mermaid # VISUAL map of the graph (Mermaid; also --format=dot|svg, --proposed, --out=PATH)
|
|
74
|
+
bun run upt -- map --equation "period = 2*pi*sqrt(length/gravity)" # drop YOUR OWN equation onto the map: dimensional check + where it lands
|
|
75
75
|
# ...and YOUR OWN equations:
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
bun run upt -- eval "hbar*c^3/(8*pi*G*M*k_B)" hbar=1.054571817e-34 c=299792458 G=6.6743e-11 M=1.989e30 k_B=1.380649e-23
|
|
77
|
+
bun run upt -- derive period:time length:length gravity:acceleration --formula "2*pi*sqrt(length/gravity)"
|
|
78
78
|
# → period ∝ length^0.5·gravity^-0.5 ; formula dimension: [time] ✓ matches target ;
|
|
79
79
|
# formula MATCHES, recovered prefactor ≈ 6.2832 (2π)
|
|
80
|
-
|
|
80
|
+
bun run upt -- help
|
|
81
81
|
# Once published, the same commands run via `npx universal-physics-tensor <cmd>`.
|
|
82
|
-
# (`
|
|
82
|
+
# (`bun run explain` and `bun run bridge-priority` remain as aliases.)
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
`eval`/`derive --formula` use the MathTS expression engine
|
|
@@ -226,6 +226,7 @@ for how the documents evolved.
|
|
|
226
226
|
- **Supplements** - [Part VII: Tensor Algebra](docs/specification/Part-VII-Tensor-Algebra.md) · [Part VIII: Metric Layer](docs/specification/Part-VIII-Metric-Layer.md) · [Part IX: Composition](docs/specification/Part-IX-Composition.md) · [Part X: Curvature & Field Equations](docs/specification/Part-X-Curvature-and-Field-Equations.md) · [Part XI: Proposed Equations](docs/specification/Part-XI-Proposed-Equations.md) (non-normative; machine-derived identity consequences, unadjudicated)
|
|
227
227
|
|
|
228
228
|
### Planning & Development
|
|
229
|
+
- **[ROADMAP.md](ROADMAP.md)** - Strategic direction: from bridge catalog to a verified, regime-aware physics atlas (phased, with exit criteria)
|
|
229
230
|
- **[Development Plan](docs/planning/Development-Plan.md)** - Phased implementation roadmap
|
|
230
231
|
- **[Implementation Plan](docs/planning/Implementation-Plan.md)** - Technical architecture
|
|
231
232
|
- **[System Requirements](docs/planning/System-Requirements.md)** - Functional requirements
|
|
@@ -282,7 +283,7 @@ The current machine-checked state is:
|
|
|
282
283
|
| Bridge catalog | **55 entries (BE-11…65)**: 19 established, 33 speculative, 3 highly speculative; the JSON artifact is freshness-tested against the TypeScript registry |
|
|
283
284
|
| Empirical spine | **19 committed confrontations**, exposed through `upt confront` with rigor/caveat metadata |
|
|
284
285
|
| Composition layer | **41 bridge edges** plus the canonical L-layer graph; dimensional, symbolic, discovery, consequence, and visualization tooling |
|
|
285
|
-
| Canonical reference layer | **
|
|
286
|
+
| Canonical reference layer | **107 canonical equations** used as the non-speculative answer-key layer for bridge recovery/linkage |
|
|
286
287
|
| Architecture | Generated dependency graph reports **0 circular dependencies** and a clean unused-analysis report; `npm run docs:deps` is CI freshness-gated |
|
|
287
288
|
| Quality gates | Build, strict source+test TypeScript checks, full Vitest suite, active-plan audit, package-content smoke test, and nightly long-horizon GL4/Shapiro accuracy tests |
|
|
288
289
|
|
|
@@ -298,7 +299,7 @@ external evidence/domain review before promotion.
|
|
|
298
299
|
- Longer-horizon production ideas are explicitly non-blocking and live in
|
|
299
300
|
[`docs/planning/Future-Production-Hardening.md`](docs/planning/Future-Production-Hardening.md).
|
|
300
301
|
- Historical implementation plans are preserved as records; the live code-completion
|
|
301
|
-
ledger is [`
|
|
302
|
+
ledger is [`ACTIVE.md`](ACTIVE.md) and is what
|
|
302
303
|
`npm run audit:plans` gates.
|
|
303
304
|
|
|
304
305
|
## Contributing
|
|
@@ -334,7 +335,7 @@ This is an **engineer's approach to theoretical physics** — systematic, organi
|
|
|
334
335
|
|
|
335
336
|
## License
|
|
336
337
|
|
|
337
|
-
MIT License - see [LICENSE](LICENSE)
|
|
338
|
+
Code: MIT License - see [LICENSE](LICENSE). Exported atlas data (`data/atlas/`): CC BY 4.0 - see [LICENSE-DATA](LICENSE-DATA).
|
|
338
339
|
|
|
339
340
|
## Author
|
|
340
341
|
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 4, S4.1 — the applicability checker.
|
|
3
|
+
*
|
|
4
|
+
* Design note: `docs/planning/Atlas-Phase-4-Design.md` §1.
|
|
5
|
+
*
|
|
6
|
+
* **This module answers "what about this bridge is not checked?", and it
|
|
7
|
+
* returns FINDINGS rather than a boolean.** A boolean would have to choose
|
|
8
|
+
* between "unchecked" and "wrong", and those are the two states the module
|
|
9
|
+
* exists to keep apart. Every finding therefore carries a
|
|
10
|
+
* {@link ApplicabilitySeverity}:
|
|
11
|
+
*
|
|
12
|
+
* - `'blocking'` — the data CONTRADICTS ITSELF. A dimensional failure, two
|
|
13
|
+
* records declaring opposite conventions, a literal zero divisor.
|
|
14
|
+
* - `'question'` — the data is SILENT. A divisor nobody guarded, a convention
|
|
15
|
+
* only one side declares, two premise models whose relationship is
|
|
16
|
+
* unrecorded.
|
|
17
|
+
*
|
|
18
|
+
* `src/atlas/conventions.ts` already argues this asymmetry at length for the
|
|
19
|
+
* convention comparison: absence is not disagreement. The same reasoning
|
|
20
|
+
* governs every rule here. Collapsing the two severities would report "four
|
|
21
|
+
* findings" for a record whose only defect is that nobody wrote something
|
|
22
|
+
* down, and would bury a genuine contradiction among them.
|
|
23
|
+
*
|
|
24
|
+
* **Nothing here mutates a record and nothing here is a verdict.** The checker
|
|
25
|
+
* has no authority to promote or reject: it produces the list a reviewer reads.
|
|
26
|
+
* That is the same firewall the rest of the repo keeps — no machine verdict
|
|
27
|
+
* mutates a catalog.
|
|
28
|
+
*
|
|
29
|
+
* @module atlas/applicability
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
import type { ExprNode } from '../dimensional/ast-types.js';
|
|
33
|
+
import type { AtlasModel } from './model.js';
|
|
34
|
+
import type { Conventions } from './types.js';
|
|
35
|
+
/** Whether a finding is a contradiction in the data or a silence in it. @internal */
|
|
36
|
+
export type ApplicabilitySeverity = 'blocking' | 'question';
|
|
37
|
+
/**
|
|
38
|
+
* The rule that produced a finding. A closed union so a caller can filter by
|
|
39
|
+
* rule without matching on prose.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export type ApplicabilityFindingKind = 'dimensional-inconsistency' | 'convention-mismatch' | 'convention-undeclared' | 'division-unguarded' | 'division-by-zero' | 'squaring-adds-solutions' | 'model-incompatibility';
|
|
44
|
+
/** One thing a reviewer must resolve before believing the record. @internal */
|
|
45
|
+
export interface ApplicabilityFinding {
|
|
46
|
+
readonly kind: ApplicabilityFindingKind;
|
|
47
|
+
readonly severity: ApplicabilitySeverity;
|
|
48
|
+
/** Human-readable statement of what is unresolved. */
|
|
49
|
+
readonly detail: string;
|
|
50
|
+
/**
|
|
51
|
+
* Where it was found: an AST path (`'args[1]'`), a convention key, or a
|
|
52
|
+
* model id. Absent when the finding is about the record as a whole.
|
|
53
|
+
*/
|
|
54
|
+
readonly where?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* What the checker is given. Every field is optional EXCEPT the side
|
|
58
|
+
* conditions, which are required so that "this record states none" is a
|
|
59
|
+
* written choice (`[]`) rather than a forgotten argument — the same reasoning
|
|
60
|
+
* that made `passingWitnessIds` required in `derive-evidence.ts`.
|
|
61
|
+
*
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export interface ApplicabilityInput {
|
|
65
|
+
/** The transformation's AST, when the record encodes one. */
|
|
66
|
+
readonly ast?: ExprNode;
|
|
67
|
+
/** The record's stated side conditions, as free prose. REQUIRED; `[]` is a statement. */
|
|
68
|
+
readonly sideConditions: readonly string[];
|
|
69
|
+
/** The premise records' declared conventions. */
|
|
70
|
+
readonly premiseConventions?: Conventions;
|
|
71
|
+
/** The conclusion record's declared conventions. */
|
|
72
|
+
readonly conclusionConventions?: Conventions;
|
|
73
|
+
/** The premise models (many). */
|
|
74
|
+
readonly premises?: readonly AtlasModel[];
|
|
75
|
+
/** The conclusion model (one). */
|
|
76
|
+
readonly conclusion?: AtlasModel;
|
|
77
|
+
/**
|
|
78
|
+
* Family pairs already bridged, so a genuine cross-family step is not
|
|
79
|
+
* reported as unrecorded. Unordered: `['a','b']` covers `['b','a']`.
|
|
80
|
+
*/
|
|
81
|
+
readonly declaredBridges?: readonly (readonly [string, string])[];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Every unresolved question and contradiction the checker can see in a record.
|
|
85
|
+
*
|
|
86
|
+
* An EMPTY result means "no rule fired", which is weaker than "this bridge is
|
|
87
|
+
* valid" and must not be reported as the latter. The rules in hand cover
|
|
88
|
+
* dimensions, declared conventions, division guards, even-power equating and
|
|
89
|
+
* model families; a bridge can be wrong in ways none of them reaches.
|
|
90
|
+
*
|
|
91
|
+
* @param input - the record's checkable parts. `sideConditions` is required.
|
|
92
|
+
* @returns findings in rule order (dimensions, conventions, AST, models);
|
|
93
|
+
* never `null`, never throws on a malformed AST.
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
export declare function checkApplicability(input: ApplicabilityInput): readonly ApplicabilityFinding[];
|
|
97
|
+
/**
|
|
98
|
+
* The `'blocking'` subset of {@link checkApplicability}.
|
|
99
|
+
*
|
|
100
|
+
* Offered because the two severities are read by different callers — a report
|
|
101
|
+
* shows both, a gate looks only at contradictions — and filtering on the
|
|
102
|
+
* severity string at every call site is how one of them eventually filters on
|
|
103
|
+
* the wrong one.
|
|
104
|
+
*
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export declare function blockingFindings(findings: readonly ApplicabilityFinding[]): readonly ApplicabilityFinding[];
|
|
108
|
+
//# sourceMappingURL=applicability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applicability.d.ts","sourceRoot":"","sources":["../../src/atlas/applicability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,qFAAqF;AACrF,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAChC,2BAA2B,GAC3B,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,GACpB,kBAAkB,GAClB,yBAAyB,GACzB,uBAAuB,CAAC;AAE5B,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACxB,yFAAyF;IACzF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,iDAAiD;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,WAAW,CAAC;IAC7C,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC1C,kCAAkC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;CACnE;AAoLD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,GACxB,SAAS,oBAAoB,EAAE,CAkFjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GACxC,SAAS,oBAAoB,EAAE,CAEjC"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 4, S4.1 — the applicability checker.
|
|
3
|
+
*
|
|
4
|
+
* Design note: `docs/planning/Atlas-Phase-4-Design.md` §1.
|
|
5
|
+
*
|
|
6
|
+
* **This module answers "what about this bridge is not checked?", and it
|
|
7
|
+
* returns FINDINGS rather than a boolean.** A boolean would have to choose
|
|
8
|
+
* between "unchecked" and "wrong", and those are the two states the module
|
|
9
|
+
* exists to keep apart. Every finding therefore carries a
|
|
10
|
+
* {@link ApplicabilitySeverity}:
|
|
11
|
+
*
|
|
12
|
+
* - `'blocking'` — the data CONTRADICTS ITSELF. A dimensional failure, two
|
|
13
|
+
* records declaring opposite conventions, a literal zero divisor.
|
|
14
|
+
* - `'question'` — the data is SILENT. A divisor nobody guarded, a convention
|
|
15
|
+
* only one side declares, two premise models whose relationship is
|
|
16
|
+
* unrecorded.
|
|
17
|
+
*
|
|
18
|
+
* `src/atlas/conventions.ts` already argues this asymmetry at length for the
|
|
19
|
+
* convention comparison: absence is not disagreement. The same reasoning
|
|
20
|
+
* governs every rule here. Collapsing the two severities would report "four
|
|
21
|
+
* findings" for a record whose only defect is that nobody wrote something
|
|
22
|
+
* down, and would bury a genuine contradiction among them.
|
|
23
|
+
*
|
|
24
|
+
* **Nothing here mutates a record and nothing here is a verdict.** The checker
|
|
25
|
+
* has no authority to promote or reject: it produces the list a reviewer reads.
|
|
26
|
+
* That is the same firewall the rest of the repo keeps — no machine verdict
|
|
27
|
+
* mutates a catalog.
|
|
28
|
+
*
|
|
29
|
+
* @module atlas/applicability
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
import { validate } from '../dimensional/validator.js';
|
|
33
|
+
import { checkConventions, unknownConventionKeys } from './conventions.js';
|
|
34
|
+
/**
|
|
35
|
+
* Non-vanishing markers a side condition may use. Matched case-insensitively
|
|
36
|
+
* against the side-condition prose.
|
|
37
|
+
*
|
|
38
|
+
* ⚠ **Shallow by design, and the asymmetry is the point** (design note §1.3).
|
|
39
|
+
* A side condition is free text and no parser exists for it. The failure mode
|
|
40
|
+
* is a FALSE QUESTION — a genuinely guarded divisor phrased in words this list
|
|
41
|
+
* does not know — never a false clearance, because a divisor absent from the
|
|
42
|
+
* prose cannot match any marker. The check over-asks rather than over-clears.
|
|
43
|
+
*/
|
|
44
|
+
const NONVANISHING_MARKERS = [
|
|
45
|
+
'≠ 0',
|
|
46
|
+
'≠0',
|
|
47
|
+
'!= 0',
|
|
48
|
+
'!=0',
|
|
49
|
+
'<> 0',
|
|
50
|
+
'<>0',
|
|
51
|
+
'nonzero',
|
|
52
|
+
'non-zero',
|
|
53
|
+
'non zero',
|
|
54
|
+
'> 0',
|
|
55
|
+
'>0',
|
|
56
|
+
'positive',
|
|
57
|
+
];
|
|
58
|
+
/** Free symbol names appearing anywhere in a subtree. */
|
|
59
|
+
function symbolNames(node, into = new Set()) {
|
|
60
|
+
if (node.kind === 'symbol') {
|
|
61
|
+
into.add(node.name);
|
|
62
|
+
return into;
|
|
63
|
+
}
|
|
64
|
+
for (const child of childNodes(node))
|
|
65
|
+
symbolNames(child, into);
|
|
66
|
+
return into;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The `ExprNode` children of a node, for the scalar grammar this checker
|
|
70
|
+
* reasons about. Tensor and curvature node families have no children here and
|
|
71
|
+
* return `[]`: the side-condition and squaring rules are statements about
|
|
72
|
+
* scalar algebra, and silently descending into a tensor node would invite
|
|
73
|
+
* findings whose `where` path means nothing to a reader.
|
|
74
|
+
*/
|
|
75
|
+
function childNodes(node) {
|
|
76
|
+
switch (node.kind) {
|
|
77
|
+
case 'op':
|
|
78
|
+
return node.args;
|
|
79
|
+
case 'integral':
|
|
80
|
+
return [node.over, node.integrand, ...(node.lower ? [node.lower] : []),
|
|
81
|
+
...(node.upper ? [node.upper] : [])];
|
|
82
|
+
case 'derivative':
|
|
83
|
+
return [node.of, node.wrt];
|
|
84
|
+
case 'dirac-delta':
|
|
85
|
+
return [node.arg];
|
|
86
|
+
case 'variational-derivative':
|
|
87
|
+
return [node.functional, node.field, node.over];
|
|
88
|
+
case 'transcendental':
|
|
89
|
+
return [node.arg];
|
|
90
|
+
case 'abs':
|
|
91
|
+
return [node.arg];
|
|
92
|
+
default:
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The numeric value of a leaf that IS a literal, or `null`.
|
|
98
|
+
*
|
|
99
|
+
* Literals are `symbol` leaves whose `name` parses as a number — the same
|
|
100
|
+
* convention `validator.ts` uses to recognise a literal exponent, so the two
|
|
101
|
+
* cannot disagree about what a literal is.
|
|
102
|
+
*/
|
|
103
|
+
function literalValue(node) {
|
|
104
|
+
if (node.kind !== 'symbol')
|
|
105
|
+
return null;
|
|
106
|
+
if (node.name.trim() === '')
|
|
107
|
+
return null;
|
|
108
|
+
const v = Number(node.name);
|
|
109
|
+
return Number.isFinite(v) ? v : null;
|
|
110
|
+
}
|
|
111
|
+
/** Is `name` guarded as non-vanishing by any of the stated side conditions? */
|
|
112
|
+
function isGuarded(name, sideConditions) {
|
|
113
|
+
const needle = name.toLowerCase();
|
|
114
|
+
return sideConditions.some((raw) => {
|
|
115
|
+
const s = raw.toLowerCase();
|
|
116
|
+
if (!s.includes(needle))
|
|
117
|
+
return false;
|
|
118
|
+
return NONVANISHING_MARKERS.some((m) => s.includes(m));
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** An even, integer literal exponent, or `null` when the exponent is anything else. */
|
|
122
|
+
function evenLiteralExponent(node) {
|
|
123
|
+
if (node.kind !== 'op' || node.op !== '^')
|
|
124
|
+
return null;
|
|
125
|
+
const exp = node.args[1];
|
|
126
|
+
if (exp === undefined)
|
|
127
|
+
return null;
|
|
128
|
+
const v = literalValue(exp);
|
|
129
|
+
if (v === null || !Number.isInteger(v) || v === 0)
|
|
130
|
+
return null;
|
|
131
|
+
return v % 2 === 0 ? v : null;
|
|
132
|
+
}
|
|
133
|
+
/** Walk the AST, applying the side-condition and squaring rules. */
|
|
134
|
+
function checkAst(node, sideConditions, path, out) {
|
|
135
|
+
if (node.kind === 'op' && node.op === '/') {
|
|
136
|
+
const divisor = node.args[1];
|
|
137
|
+
if (divisor !== undefined) {
|
|
138
|
+
const lit = literalValue(divisor);
|
|
139
|
+
if (lit === 0) {
|
|
140
|
+
out.push({
|
|
141
|
+
kind: 'division-by-zero',
|
|
142
|
+
severity: 'blocking',
|
|
143
|
+
detail: 'Division by the literal 0.',
|
|
144
|
+
where: `${path}args[1]`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else if (lit === null) {
|
|
148
|
+
// Not a literal: it needs a stated non-vanishing side condition.
|
|
149
|
+
const names = [...symbolNames(divisor)];
|
|
150
|
+
const unguarded = names.filter((n) => !isGuarded(n, sideConditions));
|
|
151
|
+
// Every name guarded ⇒ nothing to ask. A divisor with NO symbols and no
|
|
152
|
+
// literal value (a tensor leaf, say) is reported, because nothing about
|
|
153
|
+
// it can be checked and silence there would read as clearance.
|
|
154
|
+
if (names.length === 0 || unguarded.length > 0) {
|
|
155
|
+
const subject = names.length === 0 ? 'the divisor' : unguarded.join(', ');
|
|
156
|
+
out.push({
|
|
157
|
+
kind: 'division-unguarded',
|
|
158
|
+
severity: 'question',
|
|
159
|
+
detail: `Division whose divisor (${subject}) has no stated non-vanishing side ` +
|
|
160
|
+
'condition. This is a question, not a defect: the divisor may well be ' +
|
|
161
|
+
'non-zero and simply unstated.',
|
|
162
|
+
where: `${path}args[1]`,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Difference (or sum) of two equal even powers ⇒ the relation was obtained by
|
|
169
|
+
// squaring, which admits the sign-flipped branch. See design note §1.4 for why
|
|
170
|
+
// an isolated even power is NOT reported.
|
|
171
|
+
if (node.kind === 'op' && (node.op === '-' || node.op === '+')) {
|
|
172
|
+
const exps = node.args.map(evenLiteralExponent);
|
|
173
|
+
for (let i = 0; i < exps.length; i += 1) {
|
|
174
|
+
for (let j = i + 1; j < exps.length; j += 1) {
|
|
175
|
+
const a = exps[i];
|
|
176
|
+
if (a !== null && a !== undefined && a === exps[j]) {
|
|
177
|
+
out.push({
|
|
178
|
+
kind: 'squaring-adds-solutions',
|
|
179
|
+
severity: 'question',
|
|
180
|
+
detail: `Two terms raised to the same even power (${a}) are equated. Raising a ` +
|
|
181
|
+
'relation to an even power admits the sign-flipped branch, so a side ' +
|
|
182
|
+
'condition fixing the sign is needed for the step to be reversible.',
|
|
183
|
+
where: `${path}args[${i}]`,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const children = childNodes(node);
|
|
190
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
191
|
+
const child = children[i];
|
|
192
|
+
if (child !== undefined)
|
|
193
|
+
checkAst(child, sideConditions, `${path}args[${i}].`, out);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** Is this family pair recorded as already bridged? Unordered. */
|
|
197
|
+
function bridgeDeclared(a, b, declared) {
|
|
198
|
+
return declared.some(([x, y]) => (x === a && y === b) || (x === b && y === a));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Every unresolved question and contradiction the checker can see in a record.
|
|
202
|
+
*
|
|
203
|
+
* An EMPTY result means "no rule fired", which is weaker than "this bridge is
|
|
204
|
+
* valid" and must not be reported as the latter. The rules in hand cover
|
|
205
|
+
* dimensions, declared conventions, division guards, even-power equating and
|
|
206
|
+
* model families; a bridge can be wrong in ways none of them reaches.
|
|
207
|
+
*
|
|
208
|
+
* @param input - the record's checkable parts. `sideConditions` is required.
|
|
209
|
+
* @returns findings in rule order (dimensions, conventions, AST, models);
|
|
210
|
+
* never `null`, never throws on a malformed AST.
|
|
211
|
+
* @internal
|
|
212
|
+
*/
|
|
213
|
+
export function checkApplicability(input) {
|
|
214
|
+
const out = [];
|
|
215
|
+
// 1. Dimensions — the existing validator, unchanged.
|
|
216
|
+
if (input.ast !== undefined) {
|
|
217
|
+
const result = validate(input.ast);
|
|
218
|
+
for (const v of result.violations) {
|
|
219
|
+
// A warning-severity violation does not make the record inconsistent;
|
|
220
|
+
// reporting it as blocking would contradict `validate`'s own verdict.
|
|
221
|
+
const severity = (v.severity ?? 'error') === 'error' ? 'blocking' : 'question';
|
|
222
|
+
out.push({
|
|
223
|
+
kind: 'dimensional-inconsistency',
|
|
224
|
+
severity,
|
|
225
|
+
detail: v.note,
|
|
226
|
+
where: v.location === '' ? undefined : v.location,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (result.inferredDimension === null && result.violations.length === 0) {
|
|
230
|
+
out.push({
|
|
231
|
+
kind: 'dimensional-inconsistency',
|
|
232
|
+
severity: 'blocking',
|
|
233
|
+
detail: 'No dimension could be inferred for the transformation AST.',
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// 2. Conventions — mismatches block, asymmetric declarations are questions.
|
|
238
|
+
const mismatches = checkConventions(input.premiseConventions, input.conclusionConventions);
|
|
239
|
+
for (const key of mismatches) {
|
|
240
|
+
out.push({
|
|
241
|
+
kind: 'convention-mismatch',
|
|
242
|
+
severity: 'blocking',
|
|
243
|
+
detail: `Premise and conclusion declare different values for '${key}'. Two records ` +
|
|
244
|
+
'that disagree on a sign or unit choice are not directly comparable.',
|
|
245
|
+
where: key,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
for (const key of unknownConventionKeys(input.premiseConventions, input.conclusionConventions)) {
|
|
249
|
+
out.push({
|
|
250
|
+
kind: 'convention-undeclared',
|
|
251
|
+
severity: 'question',
|
|
252
|
+
detail: `Exactly one side declares '${key}'. Silence is not agreement: the other ` +
|
|
253
|
+
'record may use the opposite choice and simply never said.',
|
|
254
|
+
where: key,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// 3. Side conditions over the AST.
|
|
258
|
+
if (input.ast !== undefined)
|
|
259
|
+
checkAst(input.ast, input.sideConditions, '', out);
|
|
260
|
+
// 4. Model compatibility.
|
|
261
|
+
const premises = input.premises ?? [];
|
|
262
|
+
const declared = input.declaredBridges ?? [];
|
|
263
|
+
const conclusionFamily = input.conclusion?.family;
|
|
264
|
+
const families = new Set(premises.map((m) => m.family));
|
|
265
|
+
if (conclusionFamily !== undefined)
|
|
266
|
+
families.add(conclusionFamily);
|
|
267
|
+
const familyList = [...families];
|
|
268
|
+
for (let i = 0; i < familyList.length; i += 1) {
|
|
269
|
+
for (let j = i + 1; j < familyList.length; j += 1) {
|
|
270
|
+
const a = familyList[i];
|
|
271
|
+
const b = familyList[j];
|
|
272
|
+
if (a === undefined || b === undefined)
|
|
273
|
+
continue;
|
|
274
|
+
if (bridgeDeclared(a, b, declared))
|
|
275
|
+
continue;
|
|
276
|
+
out.push({
|
|
277
|
+
kind: 'model-incompatibility',
|
|
278
|
+
severity: 'question',
|
|
279
|
+
detail: `Models span families '${a}' and '${b}' with no declared bridge between ` +
|
|
280
|
+
'them. An unrecorded cross-family step is exactly what the atlas exists ' +
|
|
281
|
+
'to make visible.',
|
|
282
|
+
where: `${a}|${b}`,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return out;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* The `'blocking'` subset of {@link checkApplicability}.
|
|
290
|
+
*
|
|
291
|
+
* Offered because the two severities are read by different callers — a report
|
|
292
|
+
* shows both, a gate looks only at contradictions — and filtering on the
|
|
293
|
+
* severity string at every call site is how one of them eventually filters on
|
|
294
|
+
* the wrong one.
|
|
295
|
+
*
|
|
296
|
+
* @internal
|
|
297
|
+
*/
|
|
298
|
+
export function blockingFindings(findings) {
|
|
299
|
+
return findings.filter((f) => f.severity === 'blocking');
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=applicability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applicability.js","sourceRoot":"","sources":["../../src/atlas/applicability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 1 — the association registry.
|
|
3
|
+
*
|
|
4
|
+
* An `Association` records that two things SHARE something: a constant, a
|
|
5
|
+
* symbol, a structure, or a line of historical influence. That is the whole of
|
|
6
|
+
* its meaning. It asserts **no relation** between the two, makes **no
|
|
7
|
+
* composite claim**, and is explicitly NOT a graph edge — design note §5: *"No
|
|
8
|
+
* `Association` semantics beyond a registry of typed pairs — the registry is a
|
|
9
|
+
* container in Sprint 1, and it makes no composite claims."*
|
|
10
|
+
*
|
|
11
|
+
* The distinction is the point. `CATALOG_GRAPH` edges are claims that one
|
|
12
|
+
* quantity DETERMINES another. An association is the opposite epistemic act:
|
|
13
|
+
* it is where the atlas writes down a resemblance it has already decided is
|
|
14
|
+
* NOT a link, so the resemblance stops being re-surfaced as if it were fresh.
|
|
15
|
+
* An association that also appeared as an edge would be a contradiction, and
|
|
16
|
+
* `tests/atlas/association.test.ts` pins that it never does.
|
|
17
|
+
*
|
|
18
|
+
* **The seed is the `'decoy'` half of the adjudication ledger.** A `decoy`
|
|
19
|
+
* verdict means a physicist looked at `a ≟ b` and found a coincidence with no
|
|
20
|
+
* mechanism — precisely a shared appearance with no relation behind it. Every
|
|
21
|
+
* `'decoy'` row in `ADJUDICATIONS` (`src/composition/adjudication.ts`) gets
|
|
22
|
+
* one entry here, id-linked, with its `grounds` copied VERBATIM as the `note`.
|
|
23
|
+
*
|
|
24
|
+
* **No new physics is added by this module**, and two deliberate choices keep
|
|
25
|
+
* it that way:
|
|
26
|
+
*
|
|
27
|
+
* - `note` is the adjudicator's own prose, never a restatement. Verbatimness
|
|
28
|
+
* is pinned by test against the live ledger, so a re-worded ledger entry
|
|
29
|
+
* fails rather than silently diverging from its copy here.
|
|
30
|
+
* - `kind` is assigned MECHANICALLY, not per pair. Every seed is
|
|
31
|
+
* `'shared-structure'` because every one of them reached the ledger the
|
|
32
|
+
* same way: the identification funnel pairs quantities that share a
|
|
33
|
+
* dimensional signature. Choosing a different `kind` per row would be a
|
|
34
|
+
* fresh physics judgement about each pair, which is exactly the claim this
|
|
35
|
+
* registry exists not to make.
|
|
36
|
+
*
|
|
37
|
+
* **Why the seed is written out rather than derived from `ADJUDICATIONS` at
|
|
38
|
+
* import time.** `src/composition/` may import atlas TYPES only, never the
|
|
39
|
+
* barrel, because a value import in the other direction closes a cycle
|
|
40
|
+
* `docs:deps` reports (`compose.ts` already imports `atlas/composition-table`).
|
|
41
|
+
* An `atlas → composition/adjudication → discovery → …` value import risks the
|
|
42
|
+
* same cycle from the other side. So this module stays a leaf, and the
|
|
43
|
+
* drift protection moves into the test, which is free to import both.
|
|
44
|
+
*
|
|
45
|
+
* @module atlas/association
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* What two records share. Each value names an observable resemblance, not a
|
|
49
|
+
* relation: none of them implies that either record determines, derives,
|
|
50
|
+
* approximates or restricts the other.
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export type AssociationKind = 'shared-constant' | 'shared-symbol' | 'shared-structure' | 'historical-influence';
|
|
55
|
+
/**
|
|
56
|
+
* One recorded resemblance between two named things.
|
|
57
|
+
*
|
|
58
|
+
* A container, deliberately. It has no `relation`, no `bound`, no `regime` and
|
|
59
|
+
* no `evidence` — the fields that would let it make a claim are absent because
|
|
60
|
+
* it makes none.
|
|
61
|
+
*
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export interface Association {
|
|
65
|
+
/**
|
|
66
|
+
* Stable identity. For a seeded entry this is the `CandidateAdjudication.id`
|
|
67
|
+
* it came from — `candidateId(a, b)`, the two names sorted and joined with
|
|
68
|
+
* `~` — so the association and the verdict that produced it share a key.
|
|
69
|
+
*/
|
|
70
|
+
readonly id: string;
|
|
71
|
+
readonly kind: AssociationKind;
|
|
72
|
+
/** The two names, in the order `id` encodes them (sorted, `~`-split). */
|
|
73
|
+
readonly between: readonly [string, string];
|
|
74
|
+
/** Why the resemblance is only a resemblance. Adjudicator's prose, verbatim. */
|
|
75
|
+
readonly note: string;
|
|
76
|
+
/** Repo-relative path of the record this note was copied from. */
|
|
77
|
+
readonly citation: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The seeded registry: one entry per `'decoy'` adjudication, in ledger order.
|
|
81
|
+
*
|
|
82
|
+
* Kept in step with `ADJUDICATIONS` by
|
|
83
|
+
* `tests/atlas/association.test.ts`, which re-derives this array from the live
|
|
84
|
+
* ledger and deep-equals it. Adding a `'decoy'` verdict without adding its
|
|
85
|
+
* association here fails that test.
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export declare const ASSOCIATIONS: readonly Association[];
|
|
90
|
+
/** Look up an association by its `candidateId`-shaped key. @internal */
|
|
91
|
+
export declare function associationFor(id: string): Association | undefined;
|
|
92
|
+
//# sourceMappingURL=association.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"association.d.ts","sourceRoot":"","sources":["../../src/atlas/association.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,sBAAsB,CAAC;AAE3B;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,WAAW,EAyD9C,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAElE"}
|