universal-physics-tensor 0.45.2 → 0.47.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 +85 -66
- package/bin/upt.mjs +22 -22
- 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 +350 -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 +230 -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 +345 -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 +325 -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 +226 -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 +266 -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.d.ts.map +1 -1
- package/dist/bridges/be51-lensing-confrontation.js +5 -3
- package/dist/bridges/be51-lensing-confrontation.js.map +1 -1
- package/dist/bridges/be52-mercury-confrontation.d.ts.map +1 -1
- package/dist/bridges/be52-mercury-confrontation.js +4 -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 -2
- package/dist/bridges/bridge-equations.d.ts.map +1 -1
- package/dist/bridges/bridge-equations.js +2 -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/confrontations.d.ts.map +1 -1
- package/dist/bridges/confrontations.js +7 -0
- package/dist/bridges/confrontations.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 +59 -72
- package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts.map +1 -1
- package/dist/bridges/equations/be-35-conformal-bootstrap.js +66 -98
- 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/observations/types.d.ts +14 -0
- package/dist/bridges/observations/types.d.ts.map +1 -1
- package/dist/bridges/observations/types.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/audit.js +3 -3
- package/dist/cli/commands/candidates.js +3 -3
- package/dist/cli/commands/canonical.js +3 -3
- package/dist/cli/commands/confront.d.ts.map +1 -1
- package/dist/cli/commands/confront.js +8 -1
- package/dist/cli/commands/confront.js.map +1 -1
- package/dist/cli/commands/connectors.js +7 -7
- package/dist/cli/commands/coverage.js +3 -3
- package/dist/cli/commands/derive.d.ts.map +1 -1
- package/dist/cli/commands/derive.js +40 -9
- package/dist/cli/commands/derive.js.map +1 -1
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +46 -27
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts.map +1 -1
- package/dist/cli/commands/evaluate.js +2 -1
- package/dist/cli/commands/evaluate.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +19 -6
- package/dist/cli/commands/explain.js.map +1 -1
- 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 +187 -36
- 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 +228 -0
- package/dist/cli/commands/path.js.map +1 -0
- package/dist/cli/commands/predict.js +4 -4
- package/dist/cli/commands/priority.js +2 -2
- package/dist/cli/commands/probe.d.ts.map +1 -1
- package/dist/cli/commands/probe.js +59 -2
- package/dist/cli/commands/probe.js.map +1 -1
- 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 +41 -0
- package/dist/cli/commands/regime.d.ts.map +1 -0
- package/dist/cli/commands/regime.js +243 -0
- package/dist/cli/commands/regime.js.map +1 -0
- package/dist/cli/commands/symbolic.js +5 -5
- package/dist/cli/errors.d.ts +13 -1
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/errors.js +13 -1
- package/dist/cli/errors.js.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 +29 -2
- 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 +21 -1
- package/dist/cli-api.d.ts.map +1 -1
- package/dist/cli-api.js +23 -1
- 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-compare.d.ts +65 -0
- package/dist/composition/canonical-compare.d.ts.map +1 -0
- package/dist/composition/canonical-compare.js +237 -0
- package/dist/composition/canonical-compare.js.map +1 -0
- 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/canonical-prefactors.d.ts +32 -0
- package/dist/composition/canonical-prefactors.d.ts.map +1 -0
- package/dist/composition/canonical-prefactors.js +80 -0
- package/dist/composition/canonical-prefactors.js.map +1 -0
- 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.d.ts +20 -3
- package/dist/composition/discovery.d.ts.map +1 -1
- package/dist/composition/discovery.js +30 -4
- 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.d.ts +9 -1
- package/dist/composition/explain.d.ts.map +1 -1
- package/dist/composition/explain.js +34 -8
- 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/grounding.d.ts.map +1 -1
- package/dist/composition/grounding.js +6 -1
- package/dist/composition/grounding.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/corpus.d.ts +12 -0
- package/dist/composition/probe/corpus.d.ts.map +1 -1
- package/dist/composition/probe/corpus.js +100 -0
- package/dist/composition/probe/corpus.js.map +1 -1
- package/dist/composition/probe/generator.d.ts +14 -0
- package/dist/composition/probe/generator.d.ts.map +1 -1
- package/dist/composition/probe/generator.js +24 -2
- package/dist/composition/probe/generator.js.map +1 -1
- package/dist/composition/probe/limits.js.map +1 -1
- package/dist/composition/probe/pipeline.d.ts +5 -0
- package/dist/composition/probe/pipeline.d.ts.map +1 -1
- package/dist/composition/probe/pipeline.js +20 -3
- package/dist/composition/probe/pipeline.js.map +1 -1
- package/dist/composition/probe/problem.js.map +1 -1
- package/dist/composition/probe/report.d.ts.map +1 -1
- package/dist/composition/probe/report.js +2 -0
- package/dist/composition/probe/report.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/constants.d.ts +13 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +13 -0
- package/dist/core/constants.js.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/diff/bridge-gradient.d.ts +1 -1
- package/dist/diff/bridge-gradient.js +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 +104 -0
- 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 +163 -104
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 1 — convention comparison.
|
|
3
|
+
*
|
|
4
|
+
* `Conventions` (`src/atlas/types.ts`) records the sign and unit choices a
|
|
5
|
+
* record depends on. Two records that disagree on one of those choices are not
|
|
6
|
+
* directly comparable, and this module says WHICH keys disagree.
|
|
7
|
+
*
|
|
8
|
+
* **`undefined` is "unknown", never "mismatch", and that asymmetry is the
|
|
9
|
+
* whole design.** A record that declares nothing about the metric signature
|
|
10
|
+
* has not chosen `'+---'`; it has not said. Reporting the absence as a
|
|
11
|
+
* disagreement would manufacture conflicts out of missing data — and because
|
|
12
|
+
* almost every record in the repo declares nothing today, it would manufacture
|
|
13
|
+
* them at scale. The same reasoning that makes design note §3 require a
|
|
14
|
+
* NON-EMPTY `conventions` before `convention-checked` can be derived applies
|
|
15
|
+
* in the mirror here: absence earns neither a tag nor an accusation.
|
|
16
|
+
*
|
|
17
|
+
* A mismatch is therefore reported only when BOTH sides declare the key and
|
|
18
|
+
* the declared values differ.
|
|
19
|
+
*
|
|
20
|
+
* @module atlas/conventions
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Every key of `Conventions`, as values. Written out rather than derived,
|
|
24
|
+
* because a type has no runtime extent; `tests/atlas/conventions.test.ts`
|
|
25
|
+
* pins this list against the interface so a new field cannot be added to
|
|
26
|
+
* `Conventions` and silently skipped by the comparison.
|
|
27
|
+
*/
|
|
28
|
+
const CONVENTION_KEYS = [
|
|
29
|
+
'heatWorkSign',
|
|
30
|
+
'metricSignature',
|
|
31
|
+
'fourierNormalization',
|
|
32
|
+
'unitSystem',
|
|
33
|
+
'capacitorChargeSign',
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* The convention keys on which `a` and `b` DECLARE different values.
|
|
37
|
+
*
|
|
38
|
+
* Returns an empty list when they agree, when either side is absent, and when
|
|
39
|
+
* neither declares a key in common.
|
|
40
|
+
*
|
|
41
|
+
* ⚠ **An empty list is NOT a statement that the two are compatible** — it means
|
|
42
|
+
* no DECLARED pair disagrees. Eve (E1, 2026-09-21) flagged that this conflates
|
|
43
|
+
* the safe case with the dangerous one: record A declaring `metricSignature:
|
|
44
|
+
* '-+++'` while B simply never declared it returns `[]`, exactly like genuine
|
|
45
|
+
* agreement, and a caller printing nothing leads a reader to infer "checked, no
|
|
46
|
+
* conflict". Silence is not agreement. Use {@link unknownConventionKeys} to
|
|
47
|
+
* surface that case, and prefer reporting the two together.
|
|
48
|
+
*
|
|
49
|
+
* @param a - one record's conventions, or `undefined` when it declares none.
|
|
50
|
+
* @param b - the other record's conventions, or `undefined`.
|
|
51
|
+
* @returns the mismatched keys, in `Conventions` declaration order.
|
|
52
|
+
*
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
export function checkConventions(a, b) {
|
|
56
|
+
if (a === undefined || b === undefined)
|
|
57
|
+
return [];
|
|
58
|
+
return CONVENTION_KEYS.filter((k) => {
|
|
59
|
+
const av = a[k];
|
|
60
|
+
const bv = b[k];
|
|
61
|
+
// Either side silent ⇒ unknown, not disagreement.
|
|
62
|
+
if (av === undefined || bv === undefined)
|
|
63
|
+
return false;
|
|
64
|
+
return av !== bv;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The convention keys where exactly ONE side declares a value — the cases
|
|
69
|
+
* {@link checkConventions} deliberately does not call mismatches.
|
|
70
|
+
*
|
|
71
|
+
* This exists because "no declared pair disagrees" and "these two are
|
|
72
|
+
* compatible" are different claims, and only the first is checkable from the
|
|
73
|
+
* data. A key listed here is a question, not a conflict: the records MIGHT use
|
|
74
|
+
* opposite sign conventions and one simply never said. Reporting it separately
|
|
75
|
+
* lets a reader distinguish *verified agreement* from *nobody wrote it down*,
|
|
76
|
+
* which is the distinction an empty mismatch list destroys.
|
|
77
|
+
*
|
|
78
|
+
* Both sides absent is NOT unknown — it is simply a key nobody uses, so it is
|
|
79
|
+
* omitted. Only an asymmetric declaration is reported.
|
|
80
|
+
*
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
export function unknownConventionKeys(a, b) {
|
|
84
|
+
const av = a ?? {};
|
|
85
|
+
const bv = b ?? {};
|
|
86
|
+
return CONVENTION_KEYS.filter((k) => {
|
|
87
|
+
const x = av[k];
|
|
88
|
+
const y = bv[k];
|
|
89
|
+
// Exactly one declared: the asymmetric case. Neither declared ⇒ not a question.
|
|
90
|
+
return (x === undefined) !== (y === undefined);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=conventions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conventions.js","sourceRoot":"","sources":["../../src/atlas/conventions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH;;;;;GAKG;AACH,MAAM,eAAe,GAA6B;IAChD,cAAc;IACd,iBAAiB;IACjB,sBAAsB;IACtB,YAAY;IACZ,qBAAqB;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,CAA0B,EAC1B,CAA0B;IAE1B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,kDAAkD;QAClD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACnC,CAA0B,EAC1B,CAA0B;IAE1B,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,gFAAgF;QAChF,OAAO,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 1, S1.3 — evidence coverage, counted BY TAG.
|
|
3
|
+
*
|
|
4
|
+
* Design note `docs/planning/Atlas-Phase-1-Design.md` §3: *"Any future commit
|
|
5
|
+
* that appears to raise a row's evidence without adding a witness is a bug,
|
|
6
|
+
* and the coverage report is what makes it visible: it reports counts BY TAG,
|
|
7
|
+
* so a jump is legible."*
|
|
8
|
+
*
|
|
9
|
+
* A single "how many records have evidence" total would hide exactly the
|
|
10
|
+
* movement this report exists to expose — one tag inflating while another
|
|
11
|
+
* drains reads as no change at all. So the report is per tag, every tag is
|
|
12
|
+
* present with an explicit zero, and `records` is reported beside the counts
|
|
13
|
+
* (the counts do not sum to it: a record carries several tags).
|
|
14
|
+
*
|
|
15
|
+
* Pure: no I/O, no catalog import, no caching — every function here takes
|
|
16
|
+
* what it counts as an argument, so it can never disagree with a registry.
|
|
17
|
+
*
|
|
18
|
+
* @module atlas/coverage
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
import type { EvidenceTag } from './types.js';
|
|
22
|
+
export { ALL_EVIDENCE_TAGS } from './types.js';
|
|
23
|
+
/** Counts by tag over a set of records. @internal */
|
|
24
|
+
export interface EvidenceCoverage {
|
|
25
|
+
/** How many records were counted. */
|
|
26
|
+
readonly records: number;
|
|
27
|
+
/** One entry per `EvidenceTag`, zero included. Counts overlap by design. */
|
|
28
|
+
readonly byTag: Readonly<Record<EvidenceTag, number>>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Count derived evidence sets by tag.
|
|
32
|
+
*
|
|
33
|
+
* @param evidenceSets - one derived set per record, e.g. the output of
|
|
34
|
+
* `deriveEvidence` mapped over a catalog. Deriving is the caller's job; this
|
|
35
|
+
* function never derives, so it cannot disagree with the derivation.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export declare function summarizeEvidence(evidenceSets: Iterable<ReadonlySet<EvidenceTag>>): EvidenceCoverage;
|
|
39
|
+
/**
|
|
40
|
+
* How much of the catalog carries the Phase 1 overlay.
|
|
41
|
+
*
|
|
42
|
+
* `summarizeEvidence` above answers "what support do these records have";
|
|
43
|
+
* this answers the different question "how much has anyone LOOKED at". The two
|
|
44
|
+
* must not be conflated: a row can be `verified` (its derived tag set is
|
|
45
|
+
* non-empty, which a machine check produces) while nobody has recorded a
|
|
46
|
+
* `relation` for it at all.
|
|
47
|
+
*
|
|
48
|
+
* - `schema` — the denominator: the 55 catalog rows plus the canonical
|
|
49
|
+
* registry. The atlas families are NOT in it; they are reported separately,
|
|
50
|
+
* because a nine-model pilot would otherwise dilute a catalog-wide fraction.
|
|
51
|
+
* - `audited` — a HUMAN set `relation` or `conventions` on the record.
|
|
52
|
+
* - `verified` — a derived evidence tag set is non-empty. Passed IN, never
|
|
53
|
+
* derived here, for the same reason `summarizeEvidence` never derives.
|
|
54
|
+
* - `notYetAudited` — `schema − audited`, stated rather than left to arithmetic.
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
export interface OverlayCoverage {
|
|
59
|
+
readonly schema: number;
|
|
60
|
+
readonly audited: number;
|
|
61
|
+
readonly verified: number;
|
|
62
|
+
readonly notYetAudited: number;
|
|
63
|
+
/** The atlas pilot, reported beside the catalog and never mixed into it. */
|
|
64
|
+
readonly atlas: {
|
|
65
|
+
readonly bridges: number;
|
|
66
|
+
readonly reviewed: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** A record that may carry the Phase 1 overlay. Structural, so this module
|
|
70
|
+
* imports no registry and cannot become a second source of truth. @internal */
|
|
71
|
+
export interface OverlayBearing {
|
|
72
|
+
readonly relation?: unknown;
|
|
73
|
+
readonly conventions?: unknown;
|
|
74
|
+
}
|
|
75
|
+
/** An atlas bridge, reduced to the one field this report reads. @internal */
|
|
76
|
+
export interface ReviewStatusBearing {
|
|
77
|
+
readonly reviewStatus: 'proposed' | 'reviewed';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Count overlay coverage over the catalog rows and canonical entries.
|
|
81
|
+
*
|
|
82
|
+
* Every input is PASSED IN. The module stays pure and importless, so it can
|
|
83
|
+
* never disagree with the registries — the caller states which registries it
|
|
84
|
+
* counted, exactly as `summarizeEvidence` requires its caller to state which
|
|
85
|
+
* evidence sets it derived.
|
|
86
|
+
*
|
|
87
|
+
* @param schemaRecords - the catalog rows and canonical entries, concatenated.
|
|
88
|
+
* @param verifiedCount - how many of them have a non-empty derived tag set.
|
|
89
|
+
* @param atlasBridges - the atlas pilot's bridges, reported separately.
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
export declare function overlayCoverage(schemaRecords: readonly OverlayBearing[], verifiedCount: number, atlasBridges: readonly ReviewStatusBearing[]): OverlayCoverage;
|
|
93
|
+
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/atlas/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAC/C,gBAAgB,CAWlB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED;+EAC+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC;CAChD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,SAAS,cAAc,EAAE,EACxC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,SAAS,mBAAmB,EAAE,GAC3C,eAAe,CAcjB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Phase 1, S1.3 — evidence coverage, counted BY TAG.
|
|
3
|
+
*
|
|
4
|
+
* Design note `docs/planning/Atlas-Phase-1-Design.md` §3: *"Any future commit
|
|
5
|
+
* that appears to raise a row's evidence without adding a witness is a bug,
|
|
6
|
+
* and the coverage report is what makes it visible: it reports counts BY TAG,
|
|
7
|
+
* so a jump is legible."*
|
|
8
|
+
*
|
|
9
|
+
* A single "how many records have evidence" total would hide exactly the
|
|
10
|
+
* movement this report exists to expose — one tag inflating while another
|
|
11
|
+
* drains reads as no change at all. So the report is per tag, every tag is
|
|
12
|
+
* present with an explicit zero, and `records` is reported beside the counts
|
|
13
|
+
* (the counts do not sum to it: a record carries several tags).
|
|
14
|
+
*
|
|
15
|
+
* Pure: no I/O, no catalog import, no caching — every function here takes
|
|
16
|
+
* what it counts as an argument, so it can never disagree with a registry.
|
|
17
|
+
*
|
|
18
|
+
* @module atlas/coverage
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
import { ALL_EVIDENCE_TAGS } from './types.js';
|
|
22
|
+
// Moved to `types.ts`: the derived-tag literals may appear under `src/atlas/`
|
|
23
|
+
// only there and in `derive-evidence.ts`. Re-exported so callers are unchanged.
|
|
24
|
+
export { ALL_EVIDENCE_TAGS } from './types.js';
|
|
25
|
+
/**
|
|
26
|
+
* Count derived evidence sets by tag.
|
|
27
|
+
*
|
|
28
|
+
* @param evidenceSets - one derived set per record, e.g. the output of
|
|
29
|
+
* `deriveEvidence` mapped over a catalog. Deriving is the caller's job; this
|
|
30
|
+
* function never derives, so it cannot disagree with the derivation.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function summarizeEvidence(evidenceSets) {
|
|
34
|
+
const byTag = Object.fromEntries(ALL_EVIDENCE_TAGS.map((t) => [t, 0]));
|
|
35
|
+
let records = 0;
|
|
36
|
+
for (const set of evidenceSets) {
|
|
37
|
+
records += 1;
|
|
38
|
+
for (const tag of set)
|
|
39
|
+
byTag[tag] += 1;
|
|
40
|
+
}
|
|
41
|
+
return { records, byTag };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Count overlay coverage over the catalog rows and canonical entries.
|
|
45
|
+
*
|
|
46
|
+
* Every input is PASSED IN. The module stays pure and importless, so it can
|
|
47
|
+
* never disagree with the registries — the caller states which registries it
|
|
48
|
+
* counted, exactly as `summarizeEvidence` requires its caller to state which
|
|
49
|
+
* evidence sets it derived.
|
|
50
|
+
*
|
|
51
|
+
* @param schemaRecords - the catalog rows and canonical entries, concatenated.
|
|
52
|
+
* @param verifiedCount - how many of them have a non-empty derived tag set.
|
|
53
|
+
* @param atlasBridges - the atlas pilot's bridges, reported separately.
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export function overlayCoverage(schemaRecords, verifiedCount, atlasBridges) {
|
|
57
|
+
const audited = schemaRecords.filter((r) => r.relation !== undefined || r.conventions !== undefined).length;
|
|
58
|
+
return {
|
|
59
|
+
schema: schemaRecords.length,
|
|
60
|
+
audited,
|
|
61
|
+
verified: verifiedCount,
|
|
62
|
+
notYetAudited: schemaRecords.length - audited,
|
|
63
|
+
atlas: {
|
|
64
|
+
bridges: atlasBridges.length,
|
|
65
|
+
reviewed: atlasBridges.filter((b) => b.reviewStatus === 'reviewed').length,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/atlas/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,8EAA8E;AAC9E,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAU/C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAgD;IAEhD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAGpE,CAAC;IACF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,GAAG;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AA8CD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAwC,EACxC,aAAqB,EACrB,YAA4C;IAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CAC/D,CAAC,MAAM,CAAC;IACT,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,MAAM;QAC5B,OAAO;QACP,QAAQ,EAAE,aAAa;QACvB,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,OAAO;QAC7C,KAAK,EAAE;YACL,OAAO,EAAE,YAAY,CAAC,MAAM;YAC5B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,MAAM;SAC3E;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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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"}
|