universal-physics-tensor 0.20.0 → 0.22.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.
Files changed (69) hide show
  1. package/bin/upt.mjs +75 -4
  2. package/dist/bridges/equations/be-26-dna-tunneling.d.ts +15 -5
  3. package/dist/bridges/equations/be-26-dna-tunneling.d.ts.map +1 -1
  4. package/dist/bridges/equations/be-26-dna-tunneling.js +26 -7
  5. package/dist/bridges/equations/be-26-dna-tunneling.js.map +1 -1
  6. package/dist/canonical/canonical-equation.d.ts +79 -0
  7. package/dist/canonical/canonical-equation.d.ts.map +1 -0
  8. package/dist/canonical/canonical-equation.js +2 -0
  9. package/dist/canonical/canonical-equation.js.map +1 -0
  10. package/dist/canonical/dimensional-fields.d.ts +7 -0
  11. package/dist/canonical/dimensional-fields.d.ts.map +1 -0
  12. package/dist/canonical/dimensional-fields.js +31 -0
  13. package/dist/canonical/dimensional-fields.js.map +1 -0
  14. package/dist/canonical/entries/_l1-build.d.ts +22 -0
  15. package/dist/canonical/entries/_l1-build.d.ts.map +1 -0
  16. package/dist/canonical/entries/_l1-build.js +26 -0
  17. package/dist/canonical/entries/_l1-build.js.map +1 -0
  18. package/dist/canonical/entries/dimensional-classics.d.ts +11 -0
  19. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -0
  20. package/dist/canonical/entries/dimensional-classics.js +194 -0
  21. package/dist/canonical/entries/dimensional-classics.js.map +1 -0
  22. package/dist/canonical/entries/l1-gravity-thermo.d.ts +12 -0
  23. package/dist/canonical/entries/l1-gravity-thermo.d.ts.map +1 -0
  24. package/dist/canonical/entries/l1-gravity-thermo.js +128 -0
  25. package/dist/canonical/entries/l1-gravity-thermo.js.map +1 -0
  26. package/dist/canonical/entries/l1-quantum-em.d.ts +10 -0
  27. package/dist/canonical/entries/l1-quantum-em.d.ts.map +1 -0
  28. package/dist/canonical/entries/l1-quantum-em.js +141 -0
  29. package/dist/canonical/entries/l1-quantum-em.js.map +1 -0
  30. package/dist/canonical/entries/relativity.d.ts +14 -0
  31. package/dist/canonical/entries/relativity.d.ts.map +1 -0
  32. package/dist/canonical/entries/relativity.js +114 -0
  33. package/dist/canonical/entries/relativity.js.map +1 -0
  34. package/dist/canonical/linkage.d.ts +27 -0
  35. package/dist/canonical/linkage.d.ts.map +1 -0
  36. package/dist/canonical/linkage.js +139 -0
  37. package/dist/canonical/linkage.js.map +1 -0
  38. package/dist/canonical/normal-form.d.ts +25 -0
  39. package/dist/canonical/normal-form.d.ts.map +1 -0
  40. package/dist/canonical/normal-form.js +107 -0
  41. package/dist/canonical/normal-form.js.map +1 -0
  42. package/dist/canonical/registry.d.ts +26 -0
  43. package/dist/canonical/registry.d.ts.map +1 -0
  44. package/dist/canonical/registry.js +46 -0
  45. package/dist/canonical/registry.js.map +1 -0
  46. package/dist/canonical/seed-l-layer.d.ts +20 -0
  47. package/dist/canonical/seed-l-layer.d.ts.map +1 -0
  48. package/dist/canonical/seed-l-layer.js +39 -0
  49. package/dist/canonical/seed-l-layer.js.map +1 -0
  50. package/dist/composition/discovery.d.ts +40 -6
  51. package/dist/composition/discovery.d.ts.map +1 -1
  52. package/dist/composition/discovery.js +56 -7
  53. package/dist/composition/discovery.js.map +1 -1
  54. package/dist/composition/representative-values.d.ts +46 -0
  55. package/dist/composition/representative-values.d.ts.map +1 -0
  56. package/dist/composition/representative-values.js +69 -0
  57. package/dist/composition/representative-values.js.map +1 -0
  58. package/dist/composition/symbolic-constants.d.ts.map +1 -1
  59. package/dist/composition/symbolic-constants.js +15 -1
  60. package/dist/composition/symbolic-constants.js.map +1 -1
  61. package/dist/core/constants.d.ts +6 -0
  62. package/dist/core/constants.d.ts.map +1 -1
  63. package/dist/core/constants.js +6 -0
  64. package/dist/core/constants.js.map +1 -1
  65. package/dist/index.d.ts +7 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +15 -1
  68. package/dist/index.js.map +1 -1
  69. package/package.json +1 -1
package/bin/upt.mjs CHANGED
@@ -11,13 +11,16 @@
11
11
  * Run from a built checkout (`npm run build`) via `npm run upt -- <cmd>`,
12
12
  * or as an installed command (`npx universal-physics-tensor <cmd>`).
13
13
  */
14
- import { fileURLToPath } from 'node:url';
14
+ import { fileURLToPath, pathToFileURL } from 'node:url';
15
15
  import { dirname, join } from 'node:path';
16
16
 
17
17
  const here = dirname(fileURLToPath(import.meta.url));
18
- const dist = (...p) => join(here, '..', 'dist', ...p);
18
+ // Return a file:// URL, not a bare path: Node's ESM dynamic import() rejects
19
+ // absolute Windows paths ("protocol 'c:'") — it only accepts file/data/node URLs.
20
+ const dist = (...p) => pathToFileURL(join(here, '..', 'dist', ...p)).href;
19
21
 
20
22
  let api, analysis, formulaReg, dimSpecMod, prediction, discovery, coverage, simplifyMod;
23
+ let canonicalReg, linkageMod;
21
24
  try {
22
25
  api = await import(dist('index.js'));
23
26
  analysis = await import(dist('composition', 'bridge-analysis.js'));
@@ -27,6 +30,8 @@ try {
27
30
  discovery = await import(dist('composition', 'discovery.js'));
28
31
  coverage = await import(dist('bridges', 'confrontation-coverage.js'));
29
32
  simplifyMod = await import(dist('composition', 'expr-simplify.js'));
33
+ canonicalReg = await import(dist('canonical', 'registry.js'));
34
+ linkageMod = await import(dist('canonical', 'linkage.js'));
30
35
  } catch (err) {
31
36
  console.error('Could not load the built package. Run `npm run build` first.');
32
37
  console.error(String(err.message || err));
@@ -42,6 +47,8 @@ const { predictMissingBridges } = prediction;
42
47
  const { rankDiscoveries } = discovery;
43
48
  const { auditCoverage } = coverage;
44
49
  const { simplifyObservable } = simplifyMod;
50
+ const { CANONICAL_EQUATIONS, bridgesWithoutCanonicalPartner } = canonicalReg;
51
+ const { scanLinkages } = linkageMod;
45
52
 
46
53
  const GRAPH = CATALOG_GRAPH;
47
54
 
@@ -97,6 +104,17 @@ Usage:
97
104
  data-confronted vs graph-computable vs encoded-only vs thin — to
98
105
  target the physicist review. Fabricates nothing.
99
106
 
107
+ upt canonical
108
+ List the canonical-equation registry — the standard-physics L-layer
109
+ (textbook "answer key") with each entry's fidelity (L0/L1/L2),
110
+ domain, and bridge partners, plus the coverage gap.
111
+
112
+ upt recover
113
+ Validate bridges against standard physics: classify each bridge↔
114
+ canonical link as restates-canonical (F4 circularity — NOT a
115
+ discovery), recovers (undeclared structural match), or
116
+ dimensional-only.
117
+
100
118
  upt symbolic [--simplify]
101
119
  Compose bridges' SYMBOLIC (AST) forms, not just their numeric
102
120
  evaluators (the Observable contract). Shows the CT-1 / CT-1b chains
@@ -373,11 +391,13 @@ function discoverCmd() {
373
391
  const ranked = rankDiscoveries(GRAPH);
374
392
  const by = (v) => ranked.filter((r) => r.verdict === v);
375
393
  const promising = by('promising'), inert = by('inert'), contra = by('contradictory');
394
+ const clash = by('magnitude-clash');
376
395
  console.log('\nDiscovery — link candidates VETTED through the inference suite');
377
396
  console.log('⚠ a REVIEW SURFACE: `promising` means "worth a physicist\'s minute", not "true".');
378
397
  console.log(' Each candidate hypothesises an identification a≡b and tests its consequences.\n');
379
398
  console.log(` funnel: ${ranked.length} candidates → ${promising.length} promising ` +
380
- `· ${inert.length} inert · ${contra.length} contradictory (falsified)\n`);
399
+ `· ${inert.length} inert · ${clash.length} magnitude-clash ` +
400
+ `· ${contra.length} contradictory (falsified)\n`);
381
401
  if (promising.length) {
382
402
  console.log(' PROMISING (merges disconnected physics, unlocks quantities, stays consistent):');
383
403
  for (const r of promising) {
@@ -387,13 +407,19 @@ function discoverCmd() {
387
407
  } else {
388
408
  console.log(' no candidate is `promising` from the default {mass} anchor.');
389
409
  }
410
+ if (clash.length) {
411
+ console.log(`\n MAGNITUDE-CLASH (representative values differ by > N orders — a falsifier):`);
412
+ for (const r of clash) {
413
+ console.log(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} ~${r.ordersApart.toFixed(1)} orders apart`);
414
+ }
415
+ }
390
416
  if (contra.length) {
391
417
  console.log(`\n CONTRADICTORY (the identification falsifies itself numerically):`);
392
418
  for (const r of contra) {
393
419
  console.log(` ${(r.a + ' ≟ ' + r.b).padEnd(52)} disagreeing node(s): ${r.inconsistentNodes.join(', ')}`);
394
420
  }
395
421
  }
396
- console.log('\n (numeric check only exercises the anchor-reachable subgraph; weak priors on dimension.)');
422
+ console.log('\n (magnitude gate abstains where a representative value is unknown; weak priors on dimension.)');
397
423
  }
398
424
 
399
425
  // ── coverage (empirical-spine audit) ──────────────────────────────────────
@@ -481,6 +507,49 @@ function connectorsCmd() {
481
507
  console.log(' docs/research/Orphan-Connector-Analysis.md and proposed in spec Part-IX §9.');
482
508
  }
483
509
 
510
+ // ── canonical (the standard-physics L-layer registry) ─────────────────────
511
+ function canonicalCmd() {
512
+ const fidelity = (e) => (e.fieldEquation ? 'L2' : e.scalarAst ? 'L1' : 'L0');
513
+ console.log('\nCanonical-equation registry — the standard-physics L-layer (Π = L + B + E)');
514
+ console.log('the textbook "answer key" bridge equations are validated against.\n');
515
+ console.log(` ${CANONICAL_EQUATIONS.length} entries:\n`);
516
+ console.log(' fid domain id partners');
517
+ console.log(' ─────────────────────────────────────────────────────────────────');
518
+ for (const e of CANONICAL_EQUATIONS) {
519
+ const partners = [...e.partnerBridges, ...(e.restatesBridge ? [`=${e.restatesBridge}`] : [])].join(',') || '—';
520
+ console.log(` ${fidelity(e).padEnd(3)} ${e.domain.padEnd(19)} ${e.id.padEnd(24)} ${partners}`);
521
+ }
522
+ const gap = bridgesWithoutCanonicalPartner();
523
+ console.log(`\n coverage: ${gap.length} catalog bridges have no canonical partner yet`);
524
+ console.log(` (fidelity: L0 dimensional · L1 scalar-AST · L2 field-equation; "=NN" = restatesBridge)`);
525
+ }
526
+
527
+ // ── recover (bridge↔canonical linkage; the F4 circularity guard) ──────────
528
+ function recoverCmd() {
529
+ const all = scanLinkages();
530
+ const by = (c) => all.filter((r) => r.classification === c);
531
+ const restates = by('restates-canonical'), recovers = by('recovers'), dimOnly = by('dimensional-only');
532
+ console.log('\nBridge↔canonical recovery — validating bridges against standard physics');
533
+ console.log('⚠ structural match is "same relation UP TO a dimensionless factor"; that factor');
534
+ console.log(' may itself be physically substantive (e.g. ⟨e^-βW⟩). A review surface.\n');
535
+ console.log(` ${all.length} non-unrelated links → ${restates.length} restates-canonical ` +
536
+ `· ${recovers.length} recovers · ${dimOnly.length} dimensional-only\n`);
537
+ if (restates.length) {
538
+ console.log(' RESTATES-CANONICAL (the bridge IS the canonical law — F4: NOT a discovery):');
539
+ for (const r of restates) {
540
+ const rec = r.recovery && r.recovery.tested ? ` (recovery exact, err ${r.recovery.maxRelErr.toExponential(0)})` : '';
541
+ console.log(` ${r.canonicalId.padEnd(26)} ≡ bridge ${r.bridgeId}${rec}`);
542
+ }
543
+ }
544
+ if (recovers.length) {
545
+ console.log('\n RECOVERS (undeclared structural correspondence — worth a physicist\'s look):');
546
+ for (const r of recovers) {
547
+ console.log(` ${r.canonicalId.padEnd(26)} ~ bridge ${r.bridgeId} (same form up to a dimensionless factor)`);
548
+ }
549
+ }
550
+ console.log(`\n (${dimOnly.length} dimensional-only: same dimension, different form. Run \`upt canonical\` for the registry.)`);
551
+ }
552
+
484
553
  // ── dispatch ──────────────────────────────────────────────────────────────
485
554
  const [cmd, ...rest] = process.argv.slice(2);
486
555
  switch (cmd) {
@@ -493,6 +562,8 @@ switch (cmd) {
493
562
  case 'discover': case 'discovery': discoverCmd(); break;
494
563
  case 'connectors': case 'orphans': connectorsCmd(); break;
495
564
  case 'coverage': case 'grounding': coverageCmd(); break;
565
+ case 'canonical': case 'laws': canonicalCmd(); break;
566
+ case 'recover': case 'recovery': case 'validate': recoverCmd(); break;
496
567
  case 'symbolic': case 'compose-symbolic': await symbolicCmd(rest); break;
497
568
  case 'eval': case 'calc': await evalCmd(rest); break;
498
569
  case 'derive': case 'dim': await derive(rest); break;
@@ -35,14 +35,24 @@
35
35
  */
36
36
  import type { ExprNode, DimensionValidationReport } from '../../dimensional/validator.js';
37
37
  /**
38
- * Lemma AST: the WKB exponent (2/ℏ) · ∫ √(2m(V−E)) dx, exposed for
39
- * verification that it is dimensionless.
38
+ * Lemma AST: the WKB exponent (2/ℏ) · ∫_{x₁}^{x₂} √(2m(V−E)) dx, dimensionless.
39
+ *
40
+ * v0.21: the integral carries explicit barrier-endpoint bounds x₁, x₂ (a definite
41
+ * integral) — faithful to this bridge's rectangular-barrier model, since the
42
+ * integrand √(2m(V−E)) is constant in x (V_minus_E is a constant ENERGY symbol,
43
+ * not V(x)), so 16-pt Gauss–Legendre is EXACT and equals √(2m(V−E))·(x₂−x₁).
44
+ * This exposes m, V_minus_E, x₁, x₂ to differentiation (Adam+Eve GREEN). Domain
45
+ * guards (caller's): V_minus_E ≥ 0, m > 0, x₂ ≥ x₁.
40
46
  */
41
47
  export declare const DNA_TUNNELING_WKB_ARG: ExprNode;
42
48
  /**
43
- * RHS of the WKB tunneling rate: `ν₀ · ε · f`, where ε is a
44
- * dimensionless symbol stub for exp(-DNA_TUNNELING_WKB_ARG) and f is the
45
- * dimensionless f(T, pH, EM) prefactor.
49
+ * RHS of the WKB tunneling rate: `ν₀ · exp(−WKB) · f`. The Gamow exponential is
50
+ * encoded faithfully (v0.21) as `transcendental(exp, −1 · DNA_TUNNELING_WKB_ARG)`
51
+ * — a definite integral under the exp — so m, V_minus_E, and the barrier
52
+ * endpoints x₁, x₂ are visible to differentiation. `exp` of the DIMENSIONLESS
53
+ * WKB exponent is DIMENSIONLESS, so the round-trip dimensional_signature
54
+ * ([frequency]) is unchanged from the former symbol stub. The f(T, pH, EM)
55
+ * prefactor remains an opaque interpolation stub (no closed form).
46
56
  */
47
57
  export declare const DNA_TUNNELING_RHS: ExprNode;
48
58
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"be-26-dna-tunneling.d.ts","sourceRoot":"","sources":["../../../src/bridges/equations/be-26-dna-tunneling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAY1F;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAgCnC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAO/B,CAAC;AAOF;;GAEG;AACH,UAAU,kBAAkB;IAC1B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,CAAC,EAAE,MAAM,CAAC;IACV,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAkBtE;AAID;;;GAGG;AACH,gBAAgB;AAChB,wBAAgB,8BAA8B,IAAI,yBAAyB,CAE1E"}
1
+ {"version":3,"file":"be-26-dna-tunneling.d.ts","sourceRoot":"","sources":["../../../src/bridges/equations/be-26-dna-tunneling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAY1F;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAkCnC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAc/B,CAAC;AAOF;;GAEG;AACH,UAAU,kBAAkB;IAC1B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,CAAC,EAAE,MAAM,CAAC;IACV,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAkBtE;AAID;;;GAGG;AACH,gBAAgB;AAChB,wBAAgB,8BAA8B,IAAI,yBAAyB,CAE1E"}
@@ -38,8 +38,14 @@ import { hbar as DIM_hbar } from '../../dimensional/constants.js';
38
38
  import { PhysicalConstants } from '../../core/types.js';
39
39
  import { sym, validateFiniteInputs, validateBEDimensions } from './_be-helpers.js';
40
40
  /**
41
- * Lemma AST: the WKB exponent (2/ℏ) · ∫ √(2m(V−E)) dx, exposed for
42
- * verification that it is dimensionless.
41
+ * Lemma AST: the WKB exponent (2/ℏ) · ∫_{x₁}^{x₂} √(2m(V−E)) dx, dimensionless.
42
+ *
43
+ * v0.21: the integral carries explicit barrier-endpoint bounds x₁, x₂ (a definite
44
+ * integral) — faithful to this bridge's rectangular-barrier model, since the
45
+ * integrand √(2m(V−E)) is constant in x (V_minus_E is a constant ENERGY symbol,
46
+ * not V(x)), so 16-pt Gauss–Legendre is EXACT and equals √(2m(V−E))·(x₂−x₁).
47
+ * This exposes m, V_minus_E, x₁, x₂ to differentiation (Adam+Eve GREEN). Domain
48
+ * guards (caller's): V_minus_E ≥ 0, m > 0, x₂ ≥ x₁.
43
49
  */
44
50
  export const DNA_TUNNELING_WKB_ARG = {
45
51
  kind: 'op', op: '*',
@@ -53,9 +59,11 @@ export const DNA_TUNNELING_WKB_ARG = {
53
59
  ],
54
60
  },
55
61
  {
56
- // ∫ √(2m(V−E)) dx
62
+ // ∫_{x₁}^{x₂} √(2m(V−E)) dx
57
63
  kind: 'integral',
58
64
  over: sym('x', LENGTH),
65
+ lower: sym('x_1', LENGTH),
66
+ upper: sym('x_2', LENGTH),
59
67
  integrand: {
60
68
  // √(2m(V−E)) = (2m(V−E))^{1/2}
61
69
  kind: 'op', op: '^',
@@ -75,15 +83,26 @@ export const DNA_TUNNELING_WKB_ARG = {
75
83
  ],
76
84
  };
77
85
  /**
78
- * RHS of the WKB tunneling rate: `ν₀ · ε · f`, where ε is a
79
- * dimensionless symbol stub for exp(-DNA_TUNNELING_WKB_ARG) and f is the
80
- * dimensionless f(T, pH, EM) prefactor.
86
+ * RHS of the WKB tunneling rate: `ν₀ · exp(−WKB) · f`. The Gamow exponential is
87
+ * encoded faithfully (v0.21) as `transcendental(exp, −1 · DNA_TUNNELING_WKB_ARG)`
88
+ * — a definite integral under the exp — so m, V_minus_E, and the barrier
89
+ * endpoints x₁, x₂ are visible to differentiation. `exp` of the DIMENSIONLESS
90
+ * WKB exponent is DIMENSIONLESS, so the round-trip dimensional_signature
91
+ * ([frequency]) is unchanged from the former symbol stub. The f(T, pH, EM)
92
+ * prefactor remains an opaque interpolation stub (no closed form).
81
93
  */
82
94
  export const DNA_TUNNELING_RHS = {
83
95
  kind: 'op', op: '*',
84
96
  args: [
85
97
  sym('nu_0', FREQUENCY),
86
- sym('exp(-WKB_arg)', DIMENSIONLESS),
98
+ {
99
+ kind: 'transcendental',
100
+ fn: 'exp',
101
+ arg: {
102
+ kind: 'op', op: '*',
103
+ args: [sym('-1', DIMENSIONLESS), DNA_TUNNELING_WKB_ARG],
104
+ },
105
+ },
87
106
  sym('f(T,pH,EM)', DIMENSIONLESS),
88
107
  ],
89
108
  };
@@ -1 +1 @@
1
- {"version":3,"file":"be-26-dna-tunneling.js","sourceRoot":"","sources":["../../../src/bridges/equations/be-26-dna-tunneling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"be-26-dna-tunneling.js","sourceRoot":"","sources":["../../../src/bridges/equations/be-26-dna-tunneling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Canonical (textbook) physics equations — the ground-truth L-layer of the
3
+ * universal tensor (Π = L + B + E). A `CanonicalEquation` is the *answer key*
4
+ * that bridge equations (the B-layer) are validated against; it is NOT a
5
+ * speculative claim.
6
+ *
7
+ * Entries carry whichever FIDELITY LEVELS they can:
8
+ * - L0 (mandatory) — `dimensional`: target dim + governing vars (+ monomial
9
+ * when dimensionally determined). Reproduced by the Buckingham-π engine.
10
+ * - L1 (optional) — `scalarAst`: an `ExprNode` RHS, validated dimensionally.
11
+ * - L2 (optional) — `fieldEquation`: a tensor/PDE predicate node.
12
+ *
13
+ * Epistemic honesty (review finding F1): an L0-only entry must never read as
14
+ * more than "dimensionally consistent". `epistemicStatus` is the highest claim
15
+ * the entry supports; `freeDimensionlessGroups > 0` means dimensions cannot pin
16
+ * the form. Consumers must not use an entry above its `epistemicStatus`.
17
+ *
18
+ * See `docs/planning/Canonical-Equation-Registry-A-Design.md`.
19
+ *
20
+ * @module canonical/canonical-equation
21
+ */
22
+ import type { ExprNode } from '../dimensional/validator.js';
23
+ import type { DimensionalVariable } from '../dimensional/buckingham.js';
24
+ import type { TensorIndices } from '../core/types.js';
25
+ import type { EinsteinFieldEquationNode } from '../dimensional/einstein-equation.js';
26
+ /** Physics domain — indexes the registry and (later) the discovery kind filter. */
27
+ export type CanonicalDomain = 'mechanics' | 'gravitation' | 'general-relativity' | 'cosmology' | 'electromagnetism' | 'quantum' | 'thermodynamics' | 'statistical' | 'information';
28
+ /**
29
+ * The strongest claim an entry supports:
30
+ * - `dimensional` — only the dimensional signature (L0).
31
+ * - `scalar-up-to-constant`— the algebraic form, leading constant aside (L1).
32
+ * - `fully-quantitative` — the complete relation incl. the constant.
33
+ */
34
+ export type EpistemicStatus = 'dimensional' | 'scalar-up-to-constant' | 'fully-quantitative';
35
+ /** A field-equation predicate node (L2). Concrete node kinds live in the
36
+ * dimensional layer; widen this union as Maxwell/Klein–Gordon nodes land. */
37
+ export type FieldEquationNode = EinsteinFieldEquationNode;
38
+ /** Disambiguators for forms that share a dimensional signature (finding F3). */
39
+ export interface CanonicalForms {
40
+ /** Bekenstein–Hawking depends on horizon AREA, not radius. */
41
+ readonly areaOrRadius?: 'area' | 'radius';
42
+ /** Landauer uses the NATURAL log. */
43
+ readonly logBase?: 'e' | '2' | '10';
44
+ /** Stefan–Boltzmann `j=σT⁴` is a FLUX; luminosity `L=σAT⁴` changes σ. */
45
+ readonly quantityKind?: 'flux' | 'power' | 'energy';
46
+ }
47
+ /** A canonical (textbook) physics equation. */
48
+ export interface CanonicalEquation {
49
+ /** Stable id, e.g. 'CE-newton-gravitation'. */
50
+ readonly id: string;
51
+ readonly name: string;
52
+ readonly domain: CanonicalDomain;
53
+ /** LaTeX rendering (display only). */
54
+ readonly formula_latex: string;
55
+ readonly epistemicStatus: EpistemicStatus;
56
+ /** 0 ⇒ the L0 monomial is fully determined; ≥1 ⇒ dimensions can't pin it. */
57
+ readonly freeDimensionlessGroups: number;
58
+ readonly dimensional: {
59
+ readonly target: DimensionalVariable;
60
+ readonly governing: readonly DimensionalVariable[];
61
+ /** Textbook monomial exponents, or null when there are free groups. */
62
+ readonly monomial: Readonly<Record<string, number>> | null;
63
+ };
64
+ readonly scalarAst?: ExprNode;
65
+ readonly fieldEquation?: FieldEquationNode;
66
+ readonly forms?: CanonicalForms;
67
+ /** L-layer cell coordinates. */
68
+ readonly regime: TensorIndices;
69
+ /** Implicit regime assumptions (e.g. 'blackbody equilibrium'). */
70
+ readonly assumptions: readonly string[];
71
+ readonly references: readonly string[];
72
+ /** Bridges this law is the intended correspondence partner for (advisory;
73
+ * the check itself is Sub-project B). */
74
+ readonly partnerBridges: readonly string[];
75
+ /** Set when this law is LITERALLY a bridge's own relation (BH≡BE-21, …);
76
+ * Sub-project B uses it to discount the trivial X≡X match (finding F4). */
77
+ readonly restatesBridge?: string;
78
+ }
79
+ //# sourceMappingURL=canonical-equation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-equation.d.ts","sourceRoot":"","sources":["../../src/canonical/canonical-equation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAErF,mFAAmF;AACnF,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,kBAAkB,GAClB,SAAS,GACT,gBAAgB,GAChB,aAAa,GACb,aAAa,CAAC;AAElB;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,uBAAuB,GACvB,oBAAoB,CAAC;AAEzB;8EAC8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAE1D,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1C,qCAAqC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrD;AAED,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAG/B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,6EAA6E;IAC7E,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IAGzC,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;QACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;QACnD,uEAAuE;QACvE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;KAC5D,CAAC;IAEF,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAG3C,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAGhC,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;8CAC0C;IAC1C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;gFAC4E;IAC5E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canonical-equation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-equation.js","sourceRoot":"","sources":["../../src/canonical/canonical-equation.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { DimensionalVariable } from '../dimensional/buckingham.js';
2
+ /** L0 dimensional fields derived from the engine. */
3
+ export declare function dimensionalFields(target: DimensionalVariable, governing: readonly DimensionalVariable[]): {
4
+ monomial: Record<string, number> | null;
5
+ freeDimensionlessGroups: number;
6
+ };
7
+ //# sourceMappingURL=dimensional-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimensional-fields.d.ts","sourceRoot":"","sources":["../../src/canonical/dimensional-fields.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC;IACD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACxC,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAaA"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Compute the L0 dimensional fields of a canonical entry FROM the Buckingham-π
3
+ * engine, so `monomial` and `freeDimensionlessGroups` are always mutually
4
+ * consistent and never hand-asserted (HonestClaude).
5
+ *
6
+ * The two are consistent by construction: the target monomial is unique iff the
7
+ * governing set has no free dimensionless group, so
8
+ * `monomial !== null ⟺ freeDimensionlessGroups === 0`.
9
+ * Equations whose form dimensions CANNOT pin (Newton `F=Gm₁m₂/r²` — a free
10
+ * mass-ratio group; Bekenstein–Hawking — a free `c³A/Għ` group) get
11
+ * `monomial: null, freeDimensionlessGroups ≥ 1`; their scalar-AST (L1) carries
12
+ * the form dimensions can't.
13
+ *
14
+ * @module canonical/dimensional-fields
15
+ */
16
+ import { dimensionallyDetermines, buckinghamPi, } from '../dimensional/buckingham.js';
17
+ /** L0 dimensional fields derived from the engine. */
18
+ export function dimensionalFields(target, governing) {
19
+ const det = dimensionallyDetermines(target, governing);
20
+ const gPi = governing.length > 0 ? buckinghamPi([...governing]).piGroupCount : 0;
21
+ // Keep the invariant `monomial !== null ⟺ freeDimensionlessGroups === 0`
22
+ // UNCONDITIONALLY true: when the target is not in the governing span,
23
+ // `determined` is false yet `gPi` may be 0 — force ≥1 so null monomial always
24
+ // reports a free group.
25
+ const freeDimensionlessGroups = det.determined ? gPi : Math.max(1, gPi);
26
+ return {
27
+ monomial: det.determined ? { ...det.monomial } : null,
28
+ freeDimensionlessGroups,
29
+ };
30
+ }
31
+ //# sourceMappingURL=dimensional-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimensional-fields.js","sourceRoot":"","sources":["../../src/canonical/dimensional-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,uBAAuB,EACvB,YAAY,GACb,MAAM,8BAA8B,CAAC;AAGtC,qDAAqD;AACrD,MAAM,UAAU,iBAAiB,CAC/B,MAA2B,EAC3B,SAAyC;IAKzC,MAAM,GAAG,GAAG,uBAAuB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,GAAG,GACP,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,yEAAyE;IACzE,sEAAsE;IACtE,8EAA8E;IAC9E,wBAAwB;IACxB,MAAM,uBAAuB,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,QAAS,EAAE,CAAC,CAAC,CAAC,IAAI;QACtD,uBAAuB;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared builders for L1 (scalar-AST) canonical entries. Keeps the entry files
3
+ * declarative: `op`/`pow` assemble the `ExprNode`, and `l1` derives the L0
4
+ * fields from the Buckingham engine so `monomial` and `freeDimensionlessGroups`
5
+ * are always consistent.
6
+ *
7
+ * @module canonical/entries/_l1-build
8
+ */
9
+ import type { CanonicalEquation } from '../canonical-equation.js';
10
+ import type { ExprNode } from '../../dimensional/validator.js';
11
+ import type { Dimension } from '../../dimensional/types.js';
12
+ import type { DimensionalVariable } from '../../dimensional/buckingham.js';
13
+ /** Dimension builder. Arg order is (L, M, T, **I**, **Θ**) — note I precedes Θ. */
14
+ export declare const dim: (L?: number, M?: number, T?: number, I?: number, Theta?: number) => Dimension;
15
+ export declare const op: (o: "+" | "-" | "*" | "/" | "^", args: ExprNode[]) => ExprNode;
16
+ /** `base` raised to the numeric-literal power `n` (a dimensionless exponent). */
17
+ export declare const pow: (base: ExprNode, n: string) => ExprNode;
18
+ /** Everything an L1 entry declares except the engine-derived L0 fields. */
19
+ export type L1Rest = Omit<CanonicalEquation, 'freeDimensionlessGroups' | 'dimensional'>;
20
+ /** Build an L1 entry; L0 fields are derived from the engine for consistency. */
21
+ export declare const l1: (target: DimensionalVariable, governing: readonly DimensionalVariable[], rest: L1Rest) => CanonicalEquation;
22
+ //# sourceMappingURL=_l1-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_l1-build.d.ts","sourceRoot":"","sources":["../../../src/canonical/entries/_l1-build.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAK3E,mFAAmF;AACnF,eAAO,MAAM,GAAG,GAAI,UAAK,EAAE,UAAK,EAAE,UAAK,EAAE,UAAK,EAAE,cAAS,KAAG,SAQ1D,CAAC;AAEH,eAAO,MAAM,EAAE,GACb,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAC9B,MAAM,QAAQ,EAAE,KACf,QAAyC,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,GAAG,GAAI,MAAM,QAAQ,EAAE,GAAG,MAAM,KAAG,QACR,CAAC;AAEzC,2EAA2E;AAC3E,MAAM,MAAM,MAAM,GAAG,IAAI,CACvB,iBAAiB,EACjB,yBAAyB,GAAG,aAAa,CAC1C,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,EAAE,GACb,QAAQ,mBAAmB,EAC3B,WAAW,SAAS,mBAAmB,EAAE,EACzC,MAAM,MAAM,KACX,iBAUF,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { DIMENSIONLESS } from '../../dimensional/types.js';
2
+ import { sym } from '../../bridges/equations/_be-helpers.js';
3
+ import { dimensionalFields } from '../dimensional-fields.js';
4
+ /** Dimension builder. Arg order is (L, M, T, **I**, **Θ**) — note I precedes Θ. */
5
+ export const dim = (L = 0, M = 0, T = 0, I = 0, Theta = 0) => ({
6
+ L,
7
+ M,
8
+ T,
9
+ I,
10
+ Theta,
11
+ N: 0,
12
+ J: 0,
13
+ });
14
+ export const op = (o, args) => ({ kind: 'op', op: o, args });
15
+ /** `base` raised to the numeric-literal power `n` (a dimensionless exponent). */
16
+ export const pow = (base, n) => op('^', [base, sym(n, DIMENSIONLESS)]);
17
+ /** Build an L1 entry; L0 fields are derived from the engine for consistency. */
18
+ export const l1 = (target, governing, rest) => {
19
+ const { monomial, freeDimensionlessGroups } = dimensionalFields(target, governing);
20
+ return {
21
+ ...rest,
22
+ freeDimensionlessGroups,
23
+ dimensional: { target, governing, monomial },
24
+ };
25
+ };
26
+ //# sourceMappingURL=_l1-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_l1-build.js","sourceRoot":"","sources":["../../../src/canonical/entries/_l1-build.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,wCAAwC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,mFAAmF;AACnF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAa,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,CAAC;IACD,CAAC;IACD,CAAC;IACD,KAAK;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,GAAG,CAChB,CAA8B,EAC9B,IAAgB,EACN,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7C,iFAAiF;AACjF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,IAAc,EAAE,CAAS,EAAY,EAAE,CACzD,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAQzC,gFAAgF;AAChF,MAAM,CAAC,MAAM,EAAE,GAAG,CAChB,MAA2B,EAC3B,SAAyC,EACzC,IAAY,EACO,EAAE;IACrB,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,iBAAiB,CAC7D,MAAM,EACN,SAAS,CACV,CAAC;IACF,OAAO;QACL,GAAG,IAAI;QACP,uBAAuB;QACvB,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE;KAC7C,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * L0 (dimensional) canonical entries — the 9 textbook equations recovered by
3
+ * the Buckingham-π engine (promoted from the dimensional-derivation benchmark).
4
+ * Dimensions give the monomial exponents only, never the leading constant, so
5
+ * every entry here is `epistemicStatus: 'dimensional'`.
6
+ *
7
+ * @module canonical/entries/dimensional-classics
8
+ */
9
+ import type { CanonicalEquation } from '../canonical-equation.js';
10
+ export declare const DIMENSIONAL_CLASSICS: readonly CanonicalEquation[];
11
+ //# sourceMappingURL=dimensional-classics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimensional-classics.d.ts","sourceRoot":"","sources":["../../../src/canonical/entries/dimensional-classics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAiDlE,eAAO,MAAM,oBAAoB,EAAE,SAAS,iBAAiB,EA6K5D,CAAC"}