universal-physics-tensor 0.4.5

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 (299) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +377 -0
  3. package/dist/bridges/equations/be-11-decoherence-master.d.ts +83 -0
  4. package/dist/bridges/equations/be-11-decoherence-master.d.ts.map +1 -0
  5. package/dist/bridges/equations/be-11-decoherence-master.js +116 -0
  6. package/dist/bridges/equations/be-11-decoherence-master.js.map +1 -0
  7. package/dist/bridges/equations/be-12-coherence-length.d.ts +80 -0
  8. package/dist/bridges/equations/be-12-coherence-length.d.ts.map +1 -0
  9. package/dist/bridges/equations/be-12-coherence-length.js +128 -0
  10. package/dist/bridges/equations/be-12-coherence-length.js.map +1 -0
  11. package/dist/bridges/equations/be-13-einstein-trace.d.ts +89 -0
  12. package/dist/bridges/equations/be-13-einstein-trace.d.ts.map +1 -0
  13. package/dist/bridges/equations/be-13-einstein-trace.js +143 -0
  14. package/dist/bridges/equations/be-13-einstein-trace.js.map +1 -0
  15. package/dist/bridges/equations/be-14-ryu-takayanagi.d.ts +67 -0
  16. package/dist/bridges/equations/be-14-ryu-takayanagi.d.ts.map +1 -0
  17. package/dist/bridges/equations/be-14-ryu-takayanagi.js +112 -0
  18. package/dist/bridges/equations/be-14-ryu-takayanagi.js.map +1 -0
  19. package/dist/bridges/equations/be-15-emergence.d.ts +164 -0
  20. package/dist/bridges/equations/be-15-emergence.d.ts.map +1 -0
  21. package/dist/bridges/equations/be-15-emergence.js +204 -0
  22. package/dist/bridges/equations/be-15-emergence.js.map +1 -0
  23. package/dist/bridges/equations/be-16-landauer.d.ts +180 -0
  24. package/dist/bridges/equations/be-16-landauer.d.ts.map +1 -0
  25. package/dist/bridges/equations/be-16-landauer.js +206 -0
  26. package/dist/bridges/equations/be-16-landauer.js.map +1 -0
  27. package/dist/bridges/equations/be-17-einstein-cartan.d.ts +245 -0
  28. package/dist/bridges/equations/be-17-einstein-cartan.d.ts.map +1 -0
  29. package/dist/bridges/equations/be-17-einstein-cartan.js +304 -0
  30. package/dist/bridges/equations/be-17-einstein-cartan.js.map +1 -0
  31. package/dist/bridges/equations/be-18-higgs-mass.d.ts +65 -0
  32. package/dist/bridges/equations/be-18-higgs-mass.d.ts.map +1 -0
  33. package/dist/bridges/equations/be-18-higgs-mass.js +86 -0
  34. package/dist/bridges/equations/be-18-higgs-mass.js.map +1 -0
  35. package/dist/bridges/equations/be-19-quantum-bounce.d.ts +72 -0
  36. package/dist/bridges/equations/be-19-quantum-bounce.d.ts.map +1 -0
  37. package/dist/bridges/equations/be-19-quantum-bounce.js +151 -0
  38. package/dist/bridges/equations/be-19-quantum-bounce.js.map +1 -0
  39. package/dist/bridges/equations/be-20-vacuum-energy.d.ts +72 -0
  40. package/dist/bridges/equations/be-20-vacuum-energy.d.ts.map +1 -0
  41. package/dist/bridges/equations/be-20-vacuum-energy.js +115 -0
  42. package/dist/bridges/equations/be-20-vacuum-energy.js.map +1 -0
  43. package/dist/bridges/equations/be-21-kss-bound.d.ts +72 -0
  44. package/dist/bridges/equations/be-21-kss-bound.d.ts.map +1 -0
  45. package/dist/bridges/equations/be-21-kss-bound.js +103 -0
  46. package/dist/bridges/equations/be-21-kss-bound.js.map +1 -0
  47. package/dist/bridges/equations/be-22-topological-entanglement.d.ts +90 -0
  48. package/dist/bridges/equations/be-22-topological-entanglement.d.ts.map +1 -0
  49. package/dist/bridges/equations/be-22-topological-entanglement.js +123 -0
  50. package/dist/bridges/equations/be-22-topological-entanglement.js.map +1 -0
  51. package/dist/bridges/equations/be-23-syk-planckian.d.ts +89 -0
  52. package/dist/bridges/equations/be-23-syk-planckian.d.ts.map +1 -0
  53. package/dist/bridges/equations/be-23-syk-planckian.js +155 -0
  54. package/dist/bridges/equations/be-23-syk-planckian.js.map +1 -0
  55. package/dist/bridges/equations/be-24-foerster-fret.d.ts +81 -0
  56. package/dist/bridges/equations/be-24-foerster-fret.d.ts.map +1 -0
  57. package/dist/bridges/equations/be-24-foerster-fret.js +121 -0
  58. package/dist/bridges/equations/be-24-foerster-fret.js.map +1 -0
  59. package/dist/bridges/equations/be-25-iit-phi.d.ts +220 -0
  60. package/dist/bridges/equations/be-25-iit-phi.d.ts.map +1 -0
  61. package/dist/bridges/equations/be-25-iit-phi.js +259 -0
  62. package/dist/bridges/equations/be-25-iit-phi.js.map +1 -0
  63. package/dist/bridges/equations/be-25-orch-or.d.ts +78 -0
  64. package/dist/bridges/equations/be-25-orch-or.d.ts.map +1 -0
  65. package/dist/bridges/equations/be-25-orch-or.js +121 -0
  66. package/dist/bridges/equations/be-25-orch-or.js.map +1 -0
  67. package/dist/bridges/equations/be-26-dna-tunneling.d.ts +75 -0
  68. package/dist/bridges/equations/be-26-dna-tunneling.d.ts.map +1 -0
  69. package/dist/bridges/equations/be-26-dna-tunneling.js +138 -0
  70. package/dist/bridges/equations/be-26-dna-tunneling.js.map +1 -0
  71. package/dist/bridges/equations/be-27-effective-temperature.d.ts +81 -0
  72. package/dist/bridges/equations/be-27-effective-temperature.d.ts.map +1 -0
  73. package/dist/bridges/equations/be-27-effective-temperature.js +120 -0
  74. package/dist/bridges/equations/be-27-effective-temperature.js.map +1 -0
  75. package/dist/bridges/equations/be-28-onsager-entropy-production.d.ts +175 -0
  76. package/dist/bridges/equations/be-28-onsager-entropy-production.d.ts.map +1 -0
  77. package/dist/bridges/equations/be-28-onsager-entropy-production.js +203 -0
  78. package/dist/bridges/equations/be-28-onsager-entropy-production.js.map +1 -0
  79. package/dist/bridges/equations/be-29-jarzynski.d.ts +86 -0
  80. package/dist/bridges/equations/be-29-jarzynski.d.ts.map +1 -0
  81. package/dist/bridges/equations/be-29-jarzynski.js +132 -0
  82. package/dist/bridges/equations/be-29-jarzynski.js.map +1 -0
  83. package/dist/bridges/equations/be-30-flm-first-law.d.ts +93 -0
  84. package/dist/bridges/equations/be-30-flm-first-law.d.ts.map +1 -0
  85. package/dist/bridges/equations/be-30-flm-first-law.js +109 -0
  86. package/dist/bridges/equations/be-30-flm-first-law.js.map +1 -0
  87. package/dist/bridges/equations/be-31-causal-set-bd.d.ts +96 -0
  88. package/dist/bridges/equations/be-31-causal-set-bd.d.ts.map +1 -0
  89. package/dist/bridges/equations/be-31-causal-set-bd.js +133 -0
  90. package/dist/bridges/equations/be-31-causal-set-bd.js.map +1 -0
  91. package/dist/bridges/equations/be-32-quantum-reference-frame.d.ts +113 -0
  92. package/dist/bridges/equations/be-32-quantum-reference-frame.d.ts.map +1 -0
  93. package/dist/bridges/equations/be-32-quantum-reference-frame.js +155 -0
  94. package/dist/bridges/equations/be-32-quantum-reference-frame.js.map +1 -0
  95. package/dist/bridges/equations/be-33-hertz-millis.d.ts +77 -0
  96. package/dist/bridges/equations/be-33-hertz-millis.d.ts.map +1 -0
  97. package/dist/bridges/equations/be-33-hertz-millis.js +113 -0
  98. package/dist/bridges/equations/be-33-hertz-millis.js.map +1 -0
  99. package/dist/bridges/equations/be-34-kibble-zurek.d.ts +76 -0
  100. package/dist/bridges/equations/be-34-kibble-zurek.d.ts.map +1 -0
  101. package/dist/bridges/equations/be-34-kibble-zurek.js +139 -0
  102. package/dist/bridges/equations/be-34-kibble-zurek.js.map +1 -0
  103. package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts +117 -0
  104. package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts.map +1 -0
  105. package/dist/bridges/equations/be-35-conformal-bootstrap.js +167 -0
  106. package/dist/bridges/equations/be-35-conformal-bootstrap.js.map +1 -0
  107. package/dist/bridges/equations/be-36-gw-speed-bound.d.ts +77 -0
  108. package/dist/bridges/equations/be-36-gw-speed-bound.d.ts.map +1 -0
  109. package/dist/bridges/equations/be-36-gw-speed-bound.js +107 -0
  110. package/dist/bridges/equations/be-36-gw-speed-bound.js.map +1 -0
  111. package/dist/bridges/equations/be-37-shapiro-delay.d.ts +260 -0
  112. package/dist/bridges/equations/be-37-shapiro-delay.d.ts.map +1 -0
  113. package/dist/bridges/equations/be-37-shapiro-delay.js +429 -0
  114. package/dist/bridges/equations/be-37-shapiro-delay.js.map +1 -0
  115. package/dist/bridges/equations/be-38-mond.d.ts +86 -0
  116. package/dist/bridges/equations/be-38-mond.d.ts.map +1 -0
  117. package/dist/bridges/equations/be-38-mond.js +122 -0
  118. package/dist/bridges/equations/be-38-mond.js.map +1 -0
  119. package/dist/bridges/equations/be-39-asymptotic-safety.d.ts +106 -0
  120. package/dist/bridges/equations/be-39-asymptotic-safety.d.ts.map +1 -0
  121. package/dist/bridges/equations/be-39-asymptotic-safety.js +155 -0
  122. package/dist/bridges/equations/be-39-asymptotic-safety.js.map +1 -0
  123. package/dist/bridges/equations/be-40-composite-higgs.d.ts +81 -0
  124. package/dist/bridges/equations/be-40-composite-higgs.d.ts.map +1 -0
  125. package/dist/bridges/equations/be-40-composite-higgs.js +149 -0
  126. package/dist/bridges/equations/be-40-composite-higgs.js.map +1 -0
  127. package/dist/bridges/equations/be-41-swampland.d.ts +67 -0
  128. package/dist/bridges/equations/be-41-swampland.d.ts.map +1 -0
  129. package/dist/bridges/equations/be-41-swampland.js +109 -0
  130. package/dist/bridges/equations/be-41-swampland.js.map +1 -0
  131. package/dist/bridges/equations/be-42-hawking-temperature.d.ts +67 -0
  132. package/dist/bridges/equations/be-42-hawking-temperature.d.ts.map +1 -0
  133. package/dist/bridges/equations/be-42-hawking-temperature.js +109 -0
  134. package/dist/bridges/equations/be-42-hawking-temperature.js.map +1 -0
  135. package/dist/bridges/equations/be-43-er-epr.d.ts +73 -0
  136. package/dist/bridges/equations/be-43-er-epr.d.ts.map +1 -0
  137. package/dist/bridges/equations/be-43-er-epr.js +114 -0
  138. package/dist/bridges/equations/be-43-er-epr.js.map +1 -0
  139. package/dist/bridges/equations/be-44-soft-hair.d.ts +151 -0
  140. package/dist/bridges/equations/be-44-soft-hair.d.ts.map +1 -0
  141. package/dist/bridges/equations/be-44-soft-hair.js +185 -0
  142. package/dist/bridges/equations/be-44-soft-hair.js.map +1 -0
  143. package/dist/bridges/equations/be-45-tcc.d.ts +116 -0
  144. package/dist/bridges/equations/be-45-tcc.d.ts.map +1 -0
  145. package/dist/bridges/equations/be-45-tcc.js +157 -0
  146. package/dist/bridges/equations/be-45-tcc.js.map +1 -0
  147. package/dist/bridges/equations/be-46-multiverse-measure.d.ts +163 -0
  148. package/dist/bridges/equations/be-46-multiverse-measure.d.ts.map +1 -0
  149. package/dist/bridges/equations/be-46-multiverse-measure.js +198 -0
  150. package/dist/bridges/equations/be-46-multiverse-measure.js.map +1 -0
  151. package/dist/bridges/equations/be-47-bbn-dark-sector.d.ts +72 -0
  152. package/dist/bridges/equations/be-47-bbn-dark-sector.d.ts.map +1 -0
  153. package/dist/bridges/equations/be-47-bbn-dark-sector.js +121 -0
  154. package/dist/bridges/equations/be-47-bbn-dark-sector.js.map +1 -0
  155. package/dist/bridges/equations/be-48-grw-localization.d.ts +84 -0
  156. package/dist/bridges/equations/be-48-grw-localization.d.ts.map +1 -0
  157. package/dist/bridges/equations/be-48-grw-localization.js +107 -0
  158. package/dist/bridges/equations/be-48-grw-localization.js.map +1 -0
  159. package/dist/bridges/equations/be-49-quantum-darwinism.d.ts +97 -0
  160. package/dist/bridges/equations/be-49-quantum-darwinism.d.ts.map +1 -0
  161. package/dist/bridges/equations/be-49-quantum-darwinism.js +129 -0
  162. package/dist/bridges/equations/be-49-quantum-darwinism.js.map +1 -0
  163. package/dist/bridges/equations/be-50-wheeler-feynman.d.ts +120 -0
  164. package/dist/bridges/equations/be-50-wheeler-feynman.d.ts.map +1 -0
  165. package/dist/bridges/equations/be-50-wheeler-feynman.js +151 -0
  166. package/dist/bridges/equations/be-50-wheeler-feynman.js.map +1 -0
  167. package/dist/bridges/gravitational-lensing.d.ts +52 -0
  168. package/dist/bridges/gravitational-lensing.d.ts.map +1 -0
  169. package/dist/bridges/gravitational-lensing.js +48 -0
  170. package/dist/bridges/gravitational-lensing.js.map +1 -0
  171. package/dist/bridges/index.d.ts +104 -0
  172. package/dist/bridges/index.d.ts.map +1 -0
  173. package/dist/bridges/index.js +1663 -0
  174. package/dist/bridges/index.js.map +1 -0
  175. package/dist/bridges/perihelion-precession.d.ts +62 -0
  176. package/dist/bridges/perihelion-precession.d.ts.map +1 -0
  177. package/dist/bridges/perihelion-precession.js +68 -0
  178. package/dist/bridges/perihelion-precession.js.map +1 -0
  179. package/dist/core/tensor.d.ts +135 -0
  180. package/dist/core/tensor.d.ts.map +1 -0
  181. package/dist/core/tensor.js +376 -0
  182. package/dist/core/tensor.js.map +1 -0
  183. package/dist/core/types.d.ts +131 -0
  184. package/dist/core/types.d.ts.map +1 -0
  185. package/dist/core/types.js +25 -0
  186. package/dist/core/types.js.map +1 -0
  187. package/dist/dimensional/algebra.d.ts +34 -0
  188. package/dist/dimensional/algebra.d.ts.map +1 -0
  189. package/dist/dimensional/algebra.js +90 -0
  190. package/dist/dimensional/algebra.js.map +1 -0
  191. package/dist/dimensional/bridge-check.d.ts +48 -0
  192. package/dist/dimensional/bridge-check.d.ts.map +1 -0
  193. package/dist/dimensional/bridge-check.js +137 -0
  194. package/dist/dimensional/bridge-check.js.map +1 -0
  195. package/dist/dimensional/connection-validators.d.ts +53 -0
  196. package/dist/dimensional/connection-validators.d.ts.map +1 -0
  197. package/dist/dimensional/connection-validators.js +84 -0
  198. package/dist/dimensional/connection-validators.js.map +1 -0
  199. package/dist/dimensional/connection.d.ts +40 -0
  200. package/dist/dimensional/connection.d.ts.map +1 -0
  201. package/dist/dimensional/connection.js +81 -0
  202. package/dist/dimensional/connection.js.map +1 -0
  203. package/dist/dimensional/constants.d.ts +30 -0
  204. package/dist/dimensional/constants.d.ts.map +1 -0
  205. package/dist/dimensional/constants.js +31 -0
  206. package/dist/dimensional/constants.js.map +1 -0
  207. package/dist/dimensional/errors.d.ts +161 -0
  208. package/dist/dimensional/errors.d.ts.map +1 -0
  209. package/dist/dimensional/errors.js +254 -0
  210. package/dist/dimensional/errors.js.map +1 -0
  211. package/dist/dimensional/fresh-label.d.ts +26 -0
  212. package/dist/dimensional/fresh-label.d.ts.map +1 -0
  213. package/dist/dimensional/fresh-label.js +31 -0
  214. package/dist/dimensional/fresh-label.js.map +1 -0
  215. package/dist/dimensional/metric-validators.d.ts +124 -0
  216. package/dist/dimensional/metric-validators.d.ts.map +1 -0
  217. package/dist/dimensional/metric-validators.js +141 -0
  218. package/dist/dimensional/metric-validators.js.map +1 -0
  219. package/dist/dimensional/metric.d.ts +67 -0
  220. package/dist/dimensional/metric.d.ts.map +1 -0
  221. package/dist/dimensional/metric.js +177 -0
  222. package/dist/dimensional/metric.js.map +1 -0
  223. package/dist/dimensional/tensor.d.ts +153 -0
  224. package/dist/dimensional/tensor.d.ts.map +1 -0
  225. package/dist/dimensional/tensor.js +138 -0
  226. package/dist/dimensional/tensor.js.map +1 -0
  227. package/dist/dimensional/types.d.ts +50 -0
  228. package/dist/dimensional/types.d.ts.map +1 -0
  229. package/dist/dimensional/types.js +66 -0
  230. package/dist/dimensional/types.js.map +1 -0
  231. package/dist/dimensional/validator.d.ts +84 -0
  232. package/dist/dimensional/validator.d.ts.map +1 -0
  233. package/dist/dimensional/validator.js +505 -0
  234. package/dist/dimensional/validator.js.map +1 -0
  235. package/dist/index.d.ts +25 -0
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +37 -0
  238. package/dist/index.js.map +1 -0
  239. package/dist/numerical/be37-covariant-eikonal.d.ts +90 -0
  240. package/dist/numerical/be37-covariant-eikonal.d.ts.map +1 -0
  241. package/dist/numerical/be37-covariant-eikonal.js +79 -0
  242. package/dist/numerical/be37-covariant-eikonal.js.map +1 -0
  243. package/dist/numerical/connection-lowering-helpers.d.ts +107 -0
  244. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -0
  245. package/dist/numerical/connection-lowering-helpers.js +315 -0
  246. package/dist/numerical/connection-lowering-helpers.js.map +1 -0
  247. package/dist/numerical/engine-registry.d.ts +50 -0
  248. package/dist/numerical/engine-registry.d.ts.map +1 -0
  249. package/dist/numerical/engine-registry.js +82 -0
  250. package/dist/numerical/engine-registry.js.map +1 -0
  251. package/dist/numerical/errors.d.ts +28 -0
  252. package/dist/numerical/errors.d.ts.map +1 -0
  253. package/dist/numerical/errors.js +39 -0
  254. package/dist/numerical/errors.js.map +1 -0
  255. package/dist/numerical/float64-engine.d.ts +53 -0
  256. package/dist/numerical/float64-engine.d.ts.map +1 -0
  257. package/dist/numerical/float64-engine.js +638 -0
  258. package/dist/numerical/float64-engine.js.map +1 -0
  259. package/dist/numerical/geodesic-integrator.d.ts +62 -0
  260. package/dist/numerical/geodesic-integrator.d.ts.map +1 -0
  261. package/dist/numerical/geodesic-integrator.js +103 -0
  262. package/dist/numerical/geodesic-integrator.js.map +1 -0
  263. package/dist/numerical/grid-field.d.ts +24 -0
  264. package/dist/numerical/grid-field.d.ts.map +1 -0
  265. package/dist/numerical/grid-field.js +2 -0
  266. package/dist/numerical/grid-field.js.map +1 -0
  267. package/dist/numerical/index.d.ts +80 -0
  268. package/dist/numerical/index.d.ts.map +1 -0
  269. package/dist/numerical/index.js +75 -0
  270. package/dist/numerical/index.js.map +1 -0
  271. package/dist/numerical/lowering.d.ts +48 -0
  272. package/dist/numerical/lowering.d.ts.map +1 -0
  273. package/dist/numerical/lowering.js +443 -0
  274. package/dist/numerical/lowering.js.map +1 -0
  275. package/dist/numerical/mathts-engine.d.ts +55 -0
  276. package/dist/numerical/mathts-engine.d.ts.map +1 -0
  277. package/dist/numerical/mathts-engine.js +164 -0
  278. package/dist/numerical/mathts-engine.js.map +1 -0
  279. package/dist/numerical/metric-inverse.d.ts +31 -0
  280. package/dist/numerical/metric-inverse.d.ts.map +1 -0
  281. package/dist/numerical/metric-inverse.js +68 -0
  282. package/dist/numerical/metric-inverse.js.map +1 -0
  283. package/dist/numerical/null-ray-integrator.d.ts +13 -0
  284. package/dist/numerical/null-ray-integrator.d.ts.map +1 -0
  285. package/dist/numerical/null-ray-integrator.js +53 -0
  286. package/dist/numerical/null-ray-integrator.js.map +1 -0
  287. package/dist/numerical/pderiv.d.ts +43 -0
  288. package/dist/numerical/pderiv.d.ts.map +1 -0
  289. package/dist/numerical/pderiv.js +121 -0
  290. package/dist/numerical/pderiv.js.map +1 -0
  291. package/dist/numerical/tensor-engine.d.ts +114 -0
  292. package/dist/numerical/tensor-engine.d.ts.map +1 -0
  293. package/dist/numerical/tensor-engine.js +64 -0
  294. package/dist/numerical/tensor-engine.js.map +1 -0
  295. package/dist/numerical/types.d.ts +37 -0
  296. package/dist/numerical/types.d.ts.map +1 -0
  297. package/dist/numerical/types.js +8 -0
  298. package/dist/numerical/types.js.map +1 -0
  299. package/package.json +72 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Dimensional algebra: per-base-exponent arithmetic.
3
+ *
4
+ * Operations follow standard dimensional analysis (Bridgman, "Dimensional Analysis", 1922):
5
+ * - multiply: add exponents per base
6
+ * - divide: subtract exponents per base
7
+ * - power: scale exponents by the scalar `n`
8
+ * - add/sub: permitted only when both operands have the same dimension
9
+ *
10
+ * @module dimensional/algebra
11
+ */
12
+ import { NAMED_DIMENSIONS } from './types.js';
13
+ import { DimensionMismatchError } from './errors.js';
14
+ /** Re-exported for backward compatibility with consumers that import
15
+ * `DimensionMismatchError` from `algebra.js`. The canonical definition
16
+ * now lives in `errors.ts` alongside the new `UPTError` base class. */
17
+ export { DimensionMismatchError };
18
+ const BASES = ['L', 'M', 'T', 'I', 'Theta', 'N', 'J'];
19
+ export function multiply(a, b) {
20
+ const out = {};
21
+ for (const base of BASES) {
22
+ out[base] = a[base] + b[base];
23
+ }
24
+ return out;
25
+ }
26
+ export function divide(a, b) {
27
+ const out = {};
28
+ for (const base of BASES) {
29
+ out[base] = a[base] - b[base];
30
+ }
31
+ return out;
32
+ }
33
+ export function power(a, n) {
34
+ const out = {};
35
+ for (const base of BASES) {
36
+ out[base] = a[base] * n;
37
+ }
38
+ return out;
39
+ }
40
+ export function equals(a, b) {
41
+ for (const base of BASES) {
42
+ if (a[base] !== b[base])
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ export function add(a, b) {
48
+ if (!equals(a, b)) {
49
+ throw new DimensionMismatchError(`Cannot add unlike dimensions: ${format(a)} + ${format(b)}`, a, b);
50
+ }
51
+ return { ...a };
52
+ }
53
+ export function subtract(a, b) {
54
+ if (!equals(a, b)) {
55
+ throw new DimensionMismatchError(`Cannot subtract unlike dimensions: ${format(a)} - ${format(b)}`, a, b);
56
+ }
57
+ return { ...a };
58
+ }
59
+ /**
60
+ * Format a `Dimension` for human display.
61
+ *
62
+ * Strategy:
63
+ * 1. If `d` matches a named SI dimension exactly, return e.g. "[energy]".
64
+ * "dimensionless" is rendered as "[1]" for compactness.
65
+ * 2. Otherwise emit the bracketed product form, e.g. "[M L^2 T^-2]".
66
+ * Bases with exponent 0 are omitted; exponent 1 is written without "^1".
67
+ */
68
+ export function format(d) {
69
+ for (const [name, ref] of NAMED_DIMENSIONS) {
70
+ if (equals(d, ref)) {
71
+ if (name === 'dimensionless')
72
+ return '[1]';
73
+ return `[${name}]`;
74
+ }
75
+ }
76
+ const parts = [];
77
+ for (const base of BASES) {
78
+ const exp = d[base];
79
+ if (exp === 0)
80
+ continue;
81
+ if (exp === 1)
82
+ parts.push(base);
83
+ else
84
+ parts.push(`${base}^${exp}`);
85
+ }
86
+ if (parts.length === 0)
87
+ return '[1]';
88
+ return `[${parts.join(' ')}]`;
89
+ }
90
+ //# sourceMappingURL=algebra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algebra.js","sourceRoot":"","sources":["../../src/dimensional/algebra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Bridge-index integration scaffold.
3
+ *
4
+ * The 40 bridges in `src/bridges/index.ts` carry `formula_latex` strings
5
+ * but only a handful (BE-11, BE-14 today) have a machine-evaluable AST.
6
+ * The encoding is Tier 5 work, one bridge at a time.
7
+ *
8
+ * `inferDimensionForBridge(id, expr)` runs `validate()` on the AST. If
9
+ * the supplied `id` is registered in `EXPECTED_DIMENSION_BY_BRIDGE`, the
10
+ * inferred dim is also cross-checked against the expected one — a
11
+ * mismatch returns `null` (a real "bridge expected ENTROPY but got
12
+ * AREA" error). If the id is not registered, the inferred dim is
13
+ * returned unchanged (current MVP behaviour for entries with no
14
+ * dimensional_signature yet).
15
+ *
16
+ * @module dimensional/bridge-check
17
+ */
18
+ import { Dimension } from './types.js';
19
+ import { ExprNode } from './validator.js';
20
+ /**
21
+ * Per-bridge expected SI dimension lookup. Seeded with every entry that
22
+ * has an AST encoding registered in `src/bridges/equations/`. Add a new
23
+ * row whenever a new Tier-5 AST encoding lands; the
24
+ * `dimensional-signature-catalog` round-trip test plus the
25
+ * `Wave-G expected-dimension entries` size guard in
26
+ * `tests/dimensional/bridge-check.test.ts` enforce that this map stays
27
+ * in sync with the encoded modules.
28
+ *
29
+ * Entries with bracketed-product signatures (e.g. BE-19 `[T^-2]`,
30
+ * BE-47 `[L^-3 T^-1]`) require a constructed `Dimension` literal — see
31
+ * `T_INV2` and `INV_VOLUME_PER_TIME` above for the pattern.
32
+ */
33
+ export declare const EXPECTED_DIMENSION_BY_BRIDGE: ReadonlyMap<number, Dimension>;
34
+ /**
35
+ * Infer the SI dimensional signature of a bridge equation expression.
36
+ *
37
+ * @param bridgeId The id from `BRIDGE_EQUATIONS` (11..50). If present
38
+ * in `EXPECTED_DIMENSION_BY_BRIDGE` the inferred dim
39
+ * is cross-checked against the expected; mismatch =>
40
+ * null. If absent, the inferred dim is returned as-is.
41
+ * @param expr Hand-encoded ExprNode AST for the equation's RHS
42
+ * (or LHS).
43
+ * @returns The inferred SI dimension, or `null` if the expression is
44
+ * dimensionally inconsistent or fails the per-bridge expected
45
+ * dimension check.
46
+ */
47
+ export declare function inferDimensionForBridge(bridgeId: number, expr: ExprNode): Dimension | null;
48
+ //# sourceMappingURL=bridge-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-check.d.ts","sourceRoot":"","sources":["../../src/dimensional/bridge-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,SAAS,EAWV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAqDpD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAyCtE,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,SAAS,GAAG,IAAI,CAQlB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Bridge-index integration scaffold.
3
+ *
4
+ * The 40 bridges in `src/bridges/index.ts` carry `formula_latex` strings
5
+ * but only a handful (BE-11, BE-14 today) have a machine-evaluable AST.
6
+ * The encoding is Tier 5 work, one bridge at a time.
7
+ *
8
+ * `inferDimensionForBridge(id, expr)` runs `validate()` on the AST. If
9
+ * the supplied `id` is registered in `EXPECTED_DIMENSION_BY_BRIDGE`, the
10
+ * inferred dim is also cross-checked against the expected one — a
11
+ * mismatch returns `null` (a real "bridge expected ENTROPY but got
12
+ * AREA" error). If the id is not registered, the inferred dim is
13
+ * returned unchanged (current MVP behaviour for entries with no
14
+ * dimensional_signature yet).
15
+ *
16
+ * @module dimensional/bridge-check
17
+ */
18
+ import { DIMENSIONLESS, ENERGY, ENTROPY, FREQUENCY, TIME, MASS, LENGTH, AREA, FORCE, TEMPERATURE, } from './types.js';
19
+ import { validate } from './validator.js';
20
+ import { equals, multiply, power } from './algebra.js';
21
+ /** [T^-2] — bracketed-product literal for BE-19's H² Friedmann RHS. */
22
+ const T_INV2 = { L: 0, M: 0, T: -2, I: 0, Theta: 0, N: 0, J: 0 };
23
+ /** [L^-3 T^-1] — bracketed-product literal for BE-47's BBN-dark dY/dt RHS. */
24
+ const INV_VOLUME_PER_TIME = multiply(power(LENGTH, -3), { L: 0, M: 0, T: -1, I: 0, Theta: 0, N: 0, J: 0 });
25
+ /** [L^3 M T^-3 I^-2] — bracketed-product literal for BE-23's resistivity (Ω·m). */
26
+ const RESISTIVITY = {
27
+ L: 3, M: 1, T: -3, I: -2, Theta: 0, N: 0, J: 0,
28
+ };
29
+ /** [energy^4] = [L^8 M^4 T^-8] — bracketed-product literal for BE-40's composite Higgs V(h). */
30
+ const ENERGY_4 = power(ENERGY, 4);
31
+ /** [L^-2] — bracketed-product literal for BE-31's Benincasa-Dowker discrete Ricci scalar. */
32
+ const INV_LENGTH_2 = power(LENGTH, -2);
33
+ /** [T Θ] — bracketed-product literal for BE-21's KSS viscosity-to-entropy ratio. */
34
+ const TIME_TIMES_TEMPERATURE = {
35
+ L: 0, M: 0, T: 1, I: 0, Theta: 1, N: 0, J: 0,
36
+ };
37
+ /** [L^-3 M] — bracketed-product literal for BE-20's cosmological-constant mass density. */
38
+ const MASS_DENSITY = {
39
+ L: -3, M: 1, T: 0, I: 0, Theta: 0, N: 0, J: 0,
40
+ };
41
+ /**
42
+ * [L^-2 M^2 T^-2] — bracketed-product literal for BE-17's squared-
43
+ * invariant scalar reduction S²_spin = (c⁴/(8πG))² · T_λμν T^λμν
44
+ * (Wave Z-C 2026-05-07). Spin-density-squared = (angular-momentum-
45
+ * density)² is a custom dim not in NAMED_DIMENSIONS.
46
+ */
47
+ const SPIN_DENSITY_SQUARED = {
48
+ L: -2, M: 2, T: -2, I: 0, Theta: 0, N: 0, J: 0,
49
+ };
50
+ /**
51
+ * [L^2 T^-1] — bracketed-product literal for BE-44's soft-hair squared-
52
+ * norm Q_soft² = ∫(∂_u C)² du. News [velocity] = [L T^-1], squared
53
+ * [L^2 T^-2], integral times measure [T] gives [L^2 T^-1]. Wave Z-C
54
+ * 2026-05-07.
55
+ */
56
+ const SOFT_HAIR_L2_SQUARED = {
57
+ L: 2, M: 0, T: -1, I: 0, Theta: 0, N: 0, J: 0,
58
+ };
59
+ /**
60
+ * Per-bridge expected SI dimension lookup. Seeded with every entry that
61
+ * has an AST encoding registered in `src/bridges/equations/`. Add a new
62
+ * row whenever a new Tier-5 AST encoding lands; the
63
+ * `dimensional-signature-catalog` round-trip test plus the
64
+ * `Wave-G expected-dimension entries` size guard in
65
+ * `tests/dimensional/bridge-check.test.ts` enforce that this map stays
66
+ * in sync with the encoded modules.
67
+ *
68
+ * Entries with bracketed-product signatures (e.g. BE-19 `[T^-2]`,
69
+ * BE-47 `[L^-3 T^-1]`) require a constructed `Dimension` literal — see
70
+ * `T_INV2` and `INV_VOLUME_PER_TIME` above for the pattern.
71
+ */
72
+ export const EXPECTED_DIMENSION_BY_BRIDGE = new Map([
73
+ [11, FREQUENCY],
74
+ [12, LENGTH], // BE-12 thermal de Broglie wavelength λ_T = √(2π ℏ²/(m k_B T)) — Wave T 2026-05-06.
75
+ [13, INV_LENGTH_2], // BE-13 trace of Einstein equations R = 4Λ - (8πG/c⁴)T — Wave Y 2026-05-07.
76
+ [18, ENERGY], // BE-18 Higgs-like dark-fermion mass m_dark = g·v — Wave Y 2026-05-07.
77
+ [14, ENTROPY],
78
+ [15, AREA], // BE-15 Model A Kawasaki-Gunton coarsening L(t)² = Γ·t — Wave Z-D 2026-05-11. Late-stage coarsening length-scale; full Langevin equation requires δ-correlator + functional-derivative + functional-integral grammar extensions (out of scope).
79
+ [16, ENERGY], // BE-16 Landauer's principle E_min = k_B · T · ln(2) — Wave Z-E 2026-05-11. Reformulated from 'invalid' (broken C(ρ) ansatz, Wave P-D-style replacement per OpenAI o3 consultation). Canonical information-↔-thermodynamics bridge per Landauer 1961, experimentally tested by Bérut 2012 and Jun 2014.
80
+ [17, SPIN_DENSITY_SQUARED], // BE-17 Einstein-Cartan squared-invariant reduction S²_spin = (c⁴/(8πG))² · T_λμν T^λμν — Wave Z-C 2026-05-07.
81
+ [19, T_INV2],
82
+ [20, MASS_DENSITY], // BE-20 observed cosmological-constant mass density ρ_Λ = c²Λ/(8πG) — Wave Y 2026-05-07.
83
+ [21, TIME_TIMES_TEMPERATURE], // BE-21 KSS viscosity-to-entropy bound η/s = ℏ/(4π k_B) — Wave Y 2026-05-07.
84
+ [22, DIMENSIONLESS],
85
+ [23, RESISTIVITY], // BE-23 SYK Planckian resistivity ρ(T) = ρ_0 + (m* k_B T)/(n_e e² ℏ)·α_SYK — Wave V 2026-05-07.
86
+ [24, DIMENSIONLESS], // BE-24 Förster FRET efficiency η = R_0⁶/(R_0⁶ + R⁶) — Wave V 2026-05-07.
87
+ [25, DIMENSIONLESS], // BE-25 IIT inner intrinsic information ii(s,s̃) = p(s̃|s)·log₂[p(s̃|s)/p(s̃)] — Wave Z-B 2026-05-07. Re-added under the IIT reformulation (Wave P-D R-D2); legacy Penrose-Hameroff `be-25-orch-or.ts` AST remains archived (Wave Q B2). ii has units of bits (pseudo-unit; not in SI 7-base) and types DIMENSIONLESS. Outer MIP min over partitions is deferred grammar-extension.
88
+ [26, FREQUENCY],
89
+ [27, TEMPERATURE], // BE-27 Cugliandolo-Kurchan effective temperature T_eff = T(1+Σ_active/(k_BT)) — Wave Y 2026-05-07.
90
+ [28, { L: 2, M: 1, T: -3, I: 0, Theta: -1, N: 0, J: 0 }], // BE-28 Onsager linear-response entropy production σ = Σ J·X — Wave Z-G 2026-05-11. **User-confirmed relabeling** from MEPP variational principle (which would require variational-δ + Lagrange + discrete-sum grammar extensions). Honest-claude: does NOT capture MEPP's variational maximization claim; see module docstring.
91
+ [29, ENERGY], // BE-29 Jarzynski free-energy equality ΔF = -k_B T ln⟨exp(-βW)⟩ — Wave Y 2026-05-07.
92
+ [30, DIMENSIONLESS], // BE-30 FLM first law δS_EE = δ⟨H_R⟩ — Wave Y 2026-05-07.
93
+ [31, INV_LENGTH_2], // BE-31 Benincasa-Dowker discrete Ricci scalar R(p) = (4/√6) ℓ_P^-2 [1 + N_0 - 9N_1 + 16N_2 - 8N_3] — Wave W 2026-05-07.
94
+ [32, DIMENSIONLESS], // BE-32 QRF Born-rule overlap probability P = |⟨ψ_A|U(g)|ψ_B⟩|² = c² + s² — Wave Z 2026-05-07.
95
+ [33, LENGTH], // BE-33 Hertz-Millis ξ(T) = ξ_0 · (T/T_0)^(-ν/z) — Wave V 2026-05-07.
96
+ [34, DIMENSIONLESS],
97
+ [35, DIMENSIONLESS], // BE-35 CFT bootstrap crossing residual R_cross = C²·[g_block(u,v) - g_block(v,u)] — Wave Z 2026-05-07.
98
+ [36, DIMENSIONLESS], // BE-36 GW170817 graviton-speed bound |c_GW-c|/c ≤ 10⁻¹⁵ — Wave Y 2026-05-07.
99
+ [37, TIME], // BE-37 Shapiro gravitational time-delay Δt = (2GM/c³)·ln(R_far/R_near) — Wave Z-F 2026-05-11. Reformulated from 'invalid' (operationally-meaningless vacuum c(t,x)≠const per Ellis-Uzan 2005) to the canonical operationally-meaningful gravitational time-delay (Shapiro 1964, Cassini 2003).
100
+ [38, FORCE], // BE-38 Milgrom MOND F = F_N · ν(z) — Wave U 2026-05-06.
101
+ [39, DIMENSIONLESS], // BE-39 asymptotic-safety β_g (canonical EH-truncation; β_λ has same dim) — Wave X 2026-05-07.
102
+ [40, ENERGY_4], // BE-40 Composite Higgs V(h) = -α f⁴ sin² + β f⁴ [sin⁴ - sin²cos²] — Wave V 2026-05-07.
103
+ [41, MASS],
104
+ [42, TEMPERATURE], // BE-42 Hawking temperature T_H = ℏc³/(8π G M k_B) — Wave Y 2026-05-07.
105
+ [43, ENTROPY], // BE-43 ER=EPR S = k_B · A_wormhole / (4 ℓ_P²) — Wave V 2026-05-07.
106
+ [44, SOFT_HAIR_L2_SQUARED], // BE-44 Soft-hair L²-norm Q_soft² = ∫(∂_u C)² du — Wave Z-C 2026-05-07. Squared-norm scalar reduction of BMS supertranslation charge; integral primitive over u-direction at null infinity (celestial 2-sphere absorbed).
107
+ [45, DIMENSIONLESS], // BE-45 TCC e-fold bound N_e_max = log(M_P/H_inf) - γ log(r/0.01) — Wave W 2026-05-07.
108
+ [46, DIMENSIONLESS], // BE-46 Weinberg-Vilenkin anthropic probability P(Λ) = A·exp(-α/Λ) — Wave Z 2026-05-07.
109
+ [47, INV_VOLUME_PER_TIME],
110
+ [48, FREQUENCY], // BE-48 GRW mass-amplified localization rate λ_GRW(m) = λ_0 (m/m_0) — Wave Y 2026-05-07.
111
+ [49, DIMENSIONLESS], // BE-49 Quantum Darwinism I(S:F_k) = I(S:E) - α k^(-β) — Wave W 2026-05-07.
112
+ [50, DIMENSIONLESS], // BE-50 Wheeler-Feynman time-symmetry residual r_TS = (A_ret-A_adv)/(A_ret+A_adv) — Wave Z 2026-05-07.
113
+ ]);
114
+ /**
115
+ * Infer the SI dimensional signature of a bridge equation expression.
116
+ *
117
+ * @param bridgeId The id from `BRIDGE_EQUATIONS` (11..50). If present
118
+ * in `EXPECTED_DIMENSION_BY_BRIDGE` the inferred dim
119
+ * is cross-checked against the expected; mismatch =>
120
+ * null. If absent, the inferred dim is returned as-is.
121
+ * @param expr Hand-encoded ExprNode AST for the equation's RHS
122
+ * (or LHS).
123
+ * @returns The inferred SI dimension, or `null` if the expression is
124
+ * dimensionally inconsistent or fails the per-bridge expected
125
+ * dimension check.
126
+ */
127
+ export function inferDimensionForBridge(bridgeId, expr) {
128
+ const r = validate(expr);
129
+ if (!r.ok || r.inferredDimension === null)
130
+ return null;
131
+ const expected = EXPECTED_DIMENSION_BY_BRIDGE.get(bridgeId);
132
+ if (expected !== undefined && !equals(r.inferredDimension, expected)) {
133
+ return null;
134
+ }
135
+ return r.inferredDimension;
136
+ }
137
+ //# sourceMappingURL=bridge-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-check.js","sourceRoot":"","sources":["../../src/dimensional/bridge-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Per-kind validation for v0.4.0 connection-layer AST nodes.
3
+ *
4
+ * Mirrors the pattern of `metric-validators.ts`: each validator is a pure
5
+ * function returning a local `{dim, freeIndices, role?}` carrier that
6
+ * validator.ts merges into its InferContext accumulator.
7
+ *
8
+ * Per docs/specification/Part-IX-Connection-Layer.md (to be written in
9
+ * Task 18) and v0.4.0-Design.md §4 + §7.
10
+ *
11
+ * @module dimensional/connection-validators
12
+ */
13
+ import type { Dimension } from './types.js';
14
+ import type { Role } from './tensor.js';
15
+ import type { MetricTensorNode, CovariantIndex, PartialDerivativeChildResult } from './metric-validators.js';
16
+ /**
17
+ * ExprNode-like — uses `unknown` for `of`/`wrt` because connection-validators.ts
18
+ * MUST NOT import from validator.ts (module cycle). The validator's case arm
19
+ * threads a callback that knows the real ExprNode type.
20
+ */
21
+ export interface CovariantDerivativeNode {
22
+ readonly kind: 'covariant-derivative';
23
+ readonly of: unknown;
24
+ readonly wrt: unknown;
25
+ readonly wrtIndex: CovariantIndex;
26
+ readonly gLower: MetricTensorNode;
27
+ readonly gInverse: MetricTensorNode;
28
+ }
29
+ export interface CovariantDerivativeValidationResult {
30
+ readonly dim: Dimension;
31
+ readonly freeIndices: Map<string, {
32
+ upper: number;
33
+ lower: number;
34
+ }>;
35
+ readonly role?: Role;
36
+ }
37
+ /**
38
+ * Validate a covariant-derivative node. Pure-function module-cycle-free
39
+ * pattern (matches validatePartialDerivative). Recursion via the
40
+ * `validateChild` callback supplied by the caller (validator.ts's
41
+ * `infer()` dispatch).
42
+ *
43
+ * Throws:
44
+ * - PartialDerivativeIndexVarianceError if wrtIndex.variance !== 'lower'
45
+ * - MetricSignatureError if gLower is not both-lower or gInverse is not both-upper
46
+ *
47
+ * Note: the gLower / gInverse free indices are CONSUMED INTERNALLY by the
48
+ * Christoffel formula's contractions and do NOT propagate upward. The
49
+ * output freeIndices is just `of.freeIndices ∪ {wrtIndex.label: lower}`
50
+ * (same structural rule as tensor-partial-derivative).
51
+ */
52
+ export declare function validateCovariantDerivative(node: CovariantDerivativeNode, validateChild: (child: unknown) => PartialDerivativeChildResult): CovariantDerivativeValidationResult;
53
+ //# sourceMappingURL=connection-validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-validators.d.ts","sourceRoot":"","sources":["../../src/dimensional/connection-validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,4BAA4B,EAC7B,MAAM,wBAAwB,CAAC;AAOhC;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,EAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,4BAA4B,GAC9D,mCAAmC,CAsErC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Per-kind validation for v0.4.0 connection-layer AST nodes.
3
+ *
4
+ * Mirrors the pattern of `metric-validators.ts`: each validator is a pure
5
+ * function returning a local `{dim, freeIndices, role?}` carrier that
6
+ * validator.ts merges into its InferContext accumulator.
7
+ *
8
+ * Per docs/specification/Part-IX-Connection-Layer.md (to be written in
9
+ * Task 18) and v0.4.0-Design.md §4 + §7.
10
+ *
11
+ * @module dimensional/connection-validators
12
+ */
13
+ import { divide } from './algebra.js';
14
+ import { PartialDerivativeIndexVarianceError, MetricSignatureError, DuplicateCoordinateWarning, } from './errors.js';
15
+ /**
16
+ * Validate a covariant-derivative node. Pure-function module-cycle-free
17
+ * pattern (matches validatePartialDerivative). Recursion via the
18
+ * `validateChild` callback supplied by the caller (validator.ts's
19
+ * `infer()` dispatch).
20
+ *
21
+ * Throws:
22
+ * - PartialDerivativeIndexVarianceError if wrtIndex.variance !== 'lower'
23
+ * - MetricSignatureError if gLower is not both-lower or gInverse is not both-upper
24
+ *
25
+ * Note: the gLower / gInverse free indices are CONSUMED INTERNALLY by the
26
+ * Christoffel formula's contractions and do NOT propagate upward. The
27
+ * output freeIndices is just `of.freeIndices ∪ {wrtIndex.label: lower}`
28
+ * (same structural rule as tensor-partial-derivative).
29
+ */
30
+ export function validateCovariantDerivative(node, validateChild) {
31
+ if (node.wrtIndex.variance !== 'lower') {
32
+ throw new PartialDerivativeIndexVarianceError(node.wrtIndex.label);
33
+ }
34
+ if (node.gLower.indices[0].variance !== 'lower' ||
35
+ node.gLower.indices[1].variance !== 'lower') {
36
+ throw new MetricSignatureError(node.gLower.name, `covariant-derivative requires gLower to be both-lower (got ` +
37
+ `[${node.gLower.indices[0].variance}, ${node.gLower.indices[1].variance}])`);
38
+ }
39
+ if (node.gInverse.indices[0].variance !== 'upper' ||
40
+ node.gInverse.indices[1].variance !== 'upper') {
41
+ throw new MetricSignatureError(node.gInverse.name, `covariant-derivative requires gInverse to be both-upper (got ` +
42
+ `[${node.gInverse.indices[0].variance}, ${node.gInverse.indices[1].variance}])`);
43
+ }
44
+ const ofResult = validateChild(node.of);
45
+ const wrtResult = validateChild(node.wrt);
46
+ // gLower and gInverse are validated via validateChild ONLY for their dim
47
+ // sanity-check; their free indices are deliberately discarded — the
48
+ // Christoffel contractions inside ∇_μ consume them internally.
49
+ // (We don't even need to call validateChild on them; their dims are
50
+ // structurally known and any malformed metric would have failed the
51
+ // signature checks above.)
52
+ // Per §VIII.4 (pderiv-label-collision-rejected analog):
53
+ // wrtIndex.label must not collide with of.freeIndices.
54
+ //
55
+ // I1 HYBRID DECISION: throw by default (soundness > friendliness);
56
+ // env var UPT_ALLOW_COORD_SHADOW=1 downgrades to process.emitWarning.
57
+ // Task 13 covers BOTH paths (default throws; env=1 warns).
58
+ if (ofResult.freeIndices.has(node.wrtIndex.label)) {
59
+ const conflict = node.wrtIndex.label;
60
+ if (typeof process !== 'undefined' && process.env?.UPT_ALLOW_COORD_SHADOW === '1') {
61
+ process.emitWarning(new DuplicateCoordinateWarning(conflict, conflict));
62
+ }
63
+ else {
64
+ throw new MetricSignatureError(`covariant-derivative`, `wrt='${conflict}' shadows an existing free index '${conflict}'. ` +
65
+ `Rename the operand's free index or set UPT_ALLOW_COORD_SHADOW=1 to ` +
66
+ `downgrade to a warning.`);
67
+ }
68
+ }
69
+ // Output freeIndices = of.freeIndices ∪ {wrtIndex.label: lower}.
70
+ const freeIndices = new Map();
71
+ for (const [label, counts] of ofResult.freeIndices)
72
+ freeIndices.set(label, counts);
73
+ freeIndices.set(node.wrtIndex.label, { upper: 0, lower: 1 });
74
+ // Output dim = divide(of.dim, wrt.dim) — same as pderiv.
75
+ const dim = divide(ofResult.dim, wrtResult.dim);
76
+ // Role passthrough: propagate of.role only when the child has one; omit
77
+ // otherwise. Mirrors the `role?: Role` optional declaration on
78
+ // CovariantDerivativeValidationResult — don't force a 'field' default when
79
+ // the child has no role (e.g. a plain scalar operand).
80
+ return ofResult.role !== undefined
81
+ ? { dim, freeIndices, role: ofResult.role }
82
+ : { dim, freeIndices };
83
+ }
84
+ //# sourceMappingURL=connection-validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-validators.js","sourceRoot":"","sources":["../../src/dimensional/connection-validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * v0.4.0 connection-layer helpers (composite-formula builders that produce
3
+ * trees of v0.3.0 AST nodes). The substantive new operator (∇_μ) is a
4
+ * dedicated ExprNode kind defined in connection-validators.ts; this module
5
+ * holds the Christoffel formula builder (a composite, like raise/lower).
6
+ *
7
+ * Per docs/specification/Part-IX-Connection-Layer.md (Task 18) and
8
+ * v0.4.0-Design.md §5.
9
+ *
10
+ * @module dimensional/connection
11
+ */
12
+ import type { TensorSymbolNode } from './tensor.js';
13
+ import type { MetricTensorNode } from './metric-validators.js';
14
+ import type { ExprNode } from './validator.js';
15
+ /**
16
+ * Christoffel symbol Γ^λ_μν = (1/2) g^λρ (∂_μ g_ρν + ∂_ν g_ρμ − ∂_ρ g_μν).
17
+ *
18
+ * Builds a composite tree of v0.3.0 nodes. The negation is encoded as binary
19
+ * subtraction at the outer level: (∂_μ g_ρν + ∂_ν g_ρμ) − ∂_ρ g_μν.
20
+ * Unary minus is NOT supported in v0.4.0 (validator special-cases '-' as
21
+ * binary-only).
22
+ *
23
+ * The fresh dummy label ρ is generated via the deterministic freshLabel scheme
24
+ * (Part-VIII §VIII.5 TENSOR-RULE raise-lower-fresh-label-deterministic):
25
+ * tries 'ρ' first; falls back to 'ρ_1', 'ρ_2', … until non-colliding.
26
+ *
27
+ * Per v0.4.0-Design.md §5; Levi-Civita connection only.
28
+ *
29
+ * @param gLower Covariant metric g_ab (both indices lower).
30
+ * @param gInverse Contravariant inverse metric g^ab (both indices upper).
31
+ * @param upper Free upper index label λ.
32
+ * @param lowerA First free lower index label μ.
33
+ * @param lowerB Second free lower index label ν.
34
+ * @param xCoord Coordinate tensor x^α — used as the wrt argument for pderiv.
35
+ */
36
+ export declare function christoffel(gLower: MetricTensorNode, gInverse: MetricTensorNode, upper: string, // λ
37
+ lowerA: string, // μ
38
+ lowerB: string, // ν
39
+ xCoord: TensorSymbolNode): ExprNode;
40
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/dimensional/connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,MAAM,EAAU,IAAI;AAC3B,MAAM,EAAE,MAAM,EAAS,IAAI;AAC3B,MAAM,EAAE,MAAM,EAAS,IAAI;AAC3B,MAAM,EAAE,gBAAgB,GACvB,QAAQ,CAuDV"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * v0.4.0 connection-layer helpers (composite-formula builders that produce
3
+ * trees of v0.3.0 AST nodes). The substantive new operator (∇_μ) is a
4
+ * dedicated ExprNode kind defined in connection-validators.ts; this module
5
+ * holds the Christoffel formula builder (a composite, like raise/lower).
6
+ *
7
+ * Per docs/specification/Part-IX-Connection-Layer.md (Task 18) and
8
+ * v0.4.0-Design.md §5.
9
+ *
10
+ * @module dimensional/connection
11
+ */
12
+ import { DIMENSIONLESS } from './types.js';
13
+ import { contract } from './tensor.js';
14
+ import { metric, pderiv } from './metric.js';
15
+ import { freshLabel } from './fresh-label.js';
16
+ /**
17
+ * Christoffel symbol Γ^λ_μν = (1/2) g^λρ (∂_μ g_ρν + ∂_ν g_ρμ − ∂_ρ g_μν).
18
+ *
19
+ * Builds a composite tree of v0.3.0 nodes. The negation is encoded as binary
20
+ * subtraction at the outer level: (∂_μ g_ρν + ∂_ν g_ρμ) − ∂_ρ g_μν.
21
+ * Unary minus is NOT supported in v0.4.0 (validator special-cases '-' as
22
+ * binary-only).
23
+ *
24
+ * The fresh dummy label ρ is generated via the deterministic freshLabel scheme
25
+ * (Part-VIII §VIII.5 TENSOR-RULE raise-lower-fresh-label-deterministic):
26
+ * tries 'ρ' first; falls back to 'ρ_1', 'ρ_2', … until non-colliding.
27
+ *
28
+ * Per v0.4.0-Design.md §5; Levi-Civita connection only.
29
+ *
30
+ * @param gLower Covariant metric g_ab (both indices lower).
31
+ * @param gInverse Contravariant inverse metric g^ab (both indices upper).
32
+ * @param upper Free upper index label λ.
33
+ * @param lowerA First free lower index label μ.
34
+ * @param lowerB Second free lower index label ν.
35
+ * @param xCoord Coordinate tensor x^α — used as the wrt argument for pderiv.
36
+ */
37
+ export function christoffel(gLower, gInverse, upper, // λ
38
+ lowerA, // μ
39
+ lowerB, // ν
40
+ xCoord) {
41
+ // Collect labels in use to generate a fresh dummy.
42
+ const taken = new Set([upper, lowerA, lowerB]);
43
+ for (const idx of gLower.indices)
44
+ taken.add(idx.label);
45
+ for (const idx of gInverse.indices)
46
+ taken.add(idx.label);
47
+ // Finding #2 fix: include xCoord's own index labels so the fresh dummy
48
+ // cannot alias a coordinate-tensor index (e.g. xCoord with label 'ρ').
49
+ for (const idx of xCoord.indices)
50
+ taken.add(idx.label);
51
+ const rho = freshLabel('ρ', taken);
52
+ // Renamed inverse metric so its indices match: g^{λ rho}.
53
+ const gInverseRenamed = metric(gInverse.name, [
54
+ { label: upper, variance: 'upper' },
55
+ { label: rho, variance: 'upper' },
56
+ ], gInverse.dim, gInverse.signature, gInverse.derivativeStrategy);
57
+ // The three lowered metrics: g_{ρ ν}, g_{ρ μ}, g_{μ ν}.
58
+ const gRho_nu = metric(gLower.name, [{ label: rho, variance: 'lower' }, { label: lowerB, variance: 'lower' }], gLower.dim, gLower.signature, gLower.derivativeStrategy);
59
+ const gRho_mu = metric(gLower.name, [{ label: rho, variance: 'lower' }, { label: lowerA, variance: 'lower' }], gLower.dim, gLower.signature, gLower.derivativeStrategy);
60
+ const gMu_nu = metric(gLower.name, [{ label: lowerA, variance: 'lower' }, { label: lowerB, variance: 'lower' }], gLower.dim, gLower.signature, gLower.derivativeStrategy);
61
+ // The three pderiv terms: ∂_μ g_{ρν}, ∂_ν g_{ρμ}, ∂_ρ g_{μν}.
62
+ const dmu_gRhoNu = pderiv(gRho_nu, xCoord, { label: lowerA, variance: 'lower' });
63
+ const dnu_gRhoMu = pderiv(gRho_mu, xCoord, { label: lowerB, variance: 'lower' });
64
+ const drho_gMuNu = pderiv(gMu_nu, xCoord, { label: rho, variance: 'lower' });
65
+ // Sum: (∂_μ g_{ρν} + ∂_ν g_{ρμ}) − ∂_ρ g_{μν}.
66
+ // Binary subtraction — unary minus is NOT supported in v0.4.0.
67
+ const innerSum = {
68
+ kind: 'op', op: '+',
69
+ args: [dmu_gRhoNu, dnu_gRhoMu],
70
+ };
71
+ const sumExpr = {
72
+ kind: 'op', op: '-',
73
+ args: [innerSum, drho_gMuNu], // binary subtraction
74
+ };
75
+ // Half-factor: dimensionless scalar.
76
+ const half = { kind: 'symbol', name: '(1/2)', dim: DIMENSIONLESS };
77
+ // Final: (1/2) · g^{λρ} · sumExpr
78
+ // Γ has units 1/LENGTH (geometrized DIMENSIONLESS metric).
79
+ return contract(half, gInverseRenamed, sumExpr);
80
+ }
81
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/dimensional/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * SI dimensional signatures of fundamental physical constants.
3
+ *
4
+ * These are *dimensions only* — numerical values for the constants themselves
5
+ * live in `src/core/types.ts` (`PhysicalConstants`). The split is intentional:
6
+ * - `core/types.ts` owns numeric values (CODATA 2018) for runtime computation.
7
+ * - this module owns the SI dimensional signatures for the validator.
8
+ *
9
+ * Sources for the dimensional signatures:
10
+ * - CODATA 2018 / NIST CODATA values: https://physics.nist.gov/cuu/Constants/
11
+ * - BIPM SI Brochure 9th ed. (2019)
12
+ * - Planck-unit derivations: Planck (1899); see Wald, "General Relativity"
13
+ * (1984), §G for the canonical Planck-length / Planck-time relations.
14
+ *
15
+ * @module dimensional/constants
16
+ */
17
+ import { Dimension } from './types.js';
18
+ /** Reduced Planck constant ℏ — action [M L^2 T^-1]. */
19
+ export declare const hbar: Dimension;
20
+ /** Speed of light c — velocity [L T^-1]. */
21
+ export declare const c: Dimension;
22
+ /** Newton's gravitational constant G — [L^3 M^-1 T^-2]. */
23
+ export declare const G: Dimension;
24
+ /** Boltzmann constant k_B — energy / temperature [M L^2 T^-2 Θ^-1]. */
25
+ export declare const k_B: Dimension;
26
+ /** Elementary charge e — [T I] (coulombs). */
27
+ export declare const e: Dimension;
28
+ /** Planck length ℓ_P — [L]. */
29
+ export declare const l_P: Dimension;
30
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/dimensional/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,SAAS,EAKV,MAAM,YAAY,CAAC;AAEpB,uDAAuD;AACvD,eAAO,MAAM,IAAI,EAAE,SAAkB,CAAC;AAEtC,4CAA4C;AAC5C,eAAO,MAAM,CAAC,EAAE,SAAoB,CAAC;AAErC,2DAA2D;AAC3D,eAAO,MAAM,CAAC,EAAE,SAA8D,CAAC;AAE/E,uEAAuE;AACvE,eAAO,MAAM,GAAG,EAAE,SAA8D,CAAC;AAEjF,8CAA8C;AAC9C,eAAO,MAAM,CAAC,EAAE,SAAkB,CAAC;AAInC,+BAA+B;AAC/B,eAAO,MAAM,GAAG,EAAE,SAAkB,CAAC"}