universal-physics-tensor 11.0.0 → 12.0.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 (287) hide show
  1. package/README.md +36 -34
  2. package/data/applied-cases.json +1892 -0
  3. package/data/applied-cases.schema.json +194 -0
  4. package/data/atlas/atlas.json +21 -21
  5. package/data/atlas/atlas.jsonld +1 -1
  6. package/data/atlas/diffusion.json +5 -5
  7. package/data/atlas/oscillators.json +7 -7
  8. package/data/atlas/waves.json +11 -11
  9. package/data/bridge-catalog.json +20 -4
  10. package/data/units.json +6 -25
  11. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  12. package/dist/atlas/benchmark/stats.js +6 -20
  13. package/dist/atlas/benchmark/stats.js.map +1 -1
  14. package/dist/atlas/physjs-entries.generated.d.ts +13 -4
  15. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  16. package/dist/atlas/physjs-entries.generated.js +15 -4
  17. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  18. package/dist/atlas/physjs-reviewed.js +2 -2
  19. package/dist/atlas/physjs-reviewed.js.map +1 -1
  20. package/dist/cases/catalog-checks.d.ts +10 -0
  21. package/dist/cases/catalog-checks.d.ts.map +1 -0
  22. package/dist/cases/catalog-checks.js +241 -0
  23. package/dist/cases/catalog-checks.js.map +1 -0
  24. package/dist/cases/catalog.d.ts +83 -0
  25. package/dist/cases/catalog.d.ts.map +1 -0
  26. package/dist/cases/catalog.js +118 -0
  27. package/dist/cases/catalog.js.map +1 -0
  28. package/dist/cases/engine.d.ts +13 -0
  29. package/dist/cases/engine.d.ts.map +1 -0
  30. package/dist/cases/engine.js +179 -0
  31. package/dist/cases/engine.js.map +1 -0
  32. package/dist/cases/index.d.ts.map +1 -1
  33. package/dist/cases/index.js +5 -7
  34. package/dist/cases/index.js.map +1 -1
  35. package/dist/cases/methods.d.ts +215 -0
  36. package/dist/cases/methods.d.ts.map +1 -0
  37. package/dist/cases/methods.js +743 -0
  38. package/dist/cases/methods.js.map +1 -0
  39. package/dist/cases/types.d.ts +12 -0
  40. package/dist/cases/types.d.ts.map +1 -1
  41. package/dist/cases/types.js.map +1 -1
  42. package/dist/cli/args.d.ts +2 -0
  43. package/dist/cli/args.d.ts.map +1 -1
  44. package/dist/cli/args.js.map +1 -1
  45. package/dist/cli/command.d.ts +3 -0
  46. package/dist/cli/command.d.ts.map +1 -1
  47. package/dist/cli/command.js.map +1 -1
  48. package/dist/cli/commands/_discovery-opts.d.ts +1 -0
  49. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  50. package/dist/cli/commands/_discovery-opts.js +1 -0
  51. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  52. package/dist/cli/commands/discover.d.ts.map +1 -1
  53. package/dist/cli/commands/discover.js +116 -71
  54. package/dist/cli/commands/discover.js.map +1 -1
  55. package/dist/cli/commands/evaluate.js +2 -2
  56. package/dist/cli/commands/evaluate.js.map +1 -1
  57. package/dist/cli/commands/explain.d.ts.map +1 -1
  58. package/dist/cli/commands/explain.js +22 -2
  59. package/dist/cli/commands/explain.js.map +1 -1
  60. package/dist/cli/commands/ground.d.ts.map +1 -1
  61. package/dist/cli/commands/ground.js +6 -1
  62. package/dist/cli/commands/ground.js.map +1 -1
  63. package/dist/cli/commands/map.d.ts.map +1 -1
  64. package/dist/cli/commands/map.js +9 -6
  65. package/dist/cli/commands/map.js.map +1 -1
  66. package/dist/cli/determination.d.ts +1 -0
  67. package/dist/cli/determination.d.ts.map +1 -1
  68. package/dist/cli/determination.js.map +1 -1
  69. package/dist/cli/flag-help.d.ts +1 -0
  70. package/dist/cli/flag-help.d.ts.map +1 -1
  71. package/dist/cli/flag-help.js +1 -0
  72. package/dist/cli/flag-help.js.map +1 -1
  73. package/dist/cli/graphs.d.ts +2 -0
  74. package/dist/cli/graphs.d.ts.map +1 -1
  75. package/dist/cli/graphs.js +1 -0
  76. package/dist/cli/graphs.js.map +1 -1
  77. package/dist/cli/main.d.ts +1 -0
  78. package/dist/cli/main.d.ts.map +1 -1
  79. package/dist/cli/main.js +1 -0
  80. package/dist/cli/main.js.map +1 -1
  81. package/dist/cli/output.d.ts +8 -0
  82. package/dist/cli/output.d.ts.map +1 -1
  83. package/dist/cli/output.js +8 -0
  84. package/dist/cli/output.js.map +1 -1
  85. package/dist/cli/statuses.d.ts.map +1 -1
  86. package/dist/cli/statuses.js +12 -2
  87. package/dist/cli/statuses.js.map +1 -1
  88. package/dist/cli/version.d.ts +1 -0
  89. package/dist/cli/version.d.ts.map +1 -1
  90. package/dist/cli/version.js +1 -0
  91. package/dist/cli/version.js.map +1 -1
  92. package/dist/cli-api.d.ts +2 -0
  93. package/dist/cli-api.d.ts.map +1 -1
  94. package/dist/cli-api.js +2 -0
  95. package/dist/cli-api.js.map +1 -1
  96. package/dist/composition/canonical-graph.d.ts +2 -2
  97. package/dist/composition/canonical-graph.js +2 -2
  98. package/dist/composition/canonical-graph.js.map +1 -1
  99. package/dist/composition/consequence.d.ts +15 -5
  100. package/dist/composition/consequence.d.ts.map +1 -1
  101. package/dist/composition/consequence.js +6 -4
  102. package/dist/composition/consequence.js.map +1 -1
  103. package/dist/composition/discovery.d.ts +78 -14
  104. package/dist/composition/discovery.d.ts.map +1 -1
  105. package/dist/composition/discovery.js +73 -23
  106. package/dist/composition/discovery.js.map +1 -1
  107. package/dist/composition/expr-eval.d.ts +1 -1
  108. package/dist/composition/expr-eval.d.ts.map +1 -1
  109. package/dist/composition/expr-eval.js +4 -4
  110. package/dist/composition/expr-eval.js.map +1 -1
  111. package/dist/composition/expr-simplify.d.ts +10 -14
  112. package/dist/composition/expr-simplify.d.ts.map +1 -1
  113. package/dist/composition/expr-simplify.js +49 -52
  114. package/dist/composition/expr-simplify.js.map +1 -1
  115. package/dist/composition/grounding.d.ts.map +1 -1
  116. package/dist/composition/grounding.js +19 -7
  117. package/dist/composition/grounding.js.map +1 -1
  118. package/dist/composition/mathts-quiet.d.ts +4 -6
  119. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  120. package/dist/composition/mathts-quiet.js +4 -14
  121. package/dist/composition/mathts-quiet.js.map +1 -1
  122. package/dist/composition/own-equation-magnitude.d.ts +95 -0
  123. package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
  124. package/dist/composition/own-equation-magnitude.js +270 -0
  125. package/dist/composition/own-equation-magnitude.js.map +1 -0
  126. package/dist/composition/probe/backend-protocol.d.ts +3 -0
  127. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  128. package/dist/composition/probe/backend-protocol.js.map +1 -1
  129. package/dist/composition/probe/candidate-store.d.ts +1 -0
  130. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  131. package/dist/composition/probe/candidate-store.js +1 -0
  132. package/dist/composition/probe/candidate-store.js.map +1 -1
  133. package/dist/composition/probe/corpus.d.ts +4 -2
  134. package/dist/composition/probe/corpus.d.ts.map +1 -1
  135. package/dist/composition/probe/corpus.js +3 -3
  136. package/dist/composition/probe/corpus.js.map +1 -1
  137. package/dist/composition/probe/dataset.d.ts +1 -0
  138. package/dist/composition/probe/dataset.d.ts.map +1 -1
  139. package/dist/composition/probe/dataset.js.map +1 -1
  140. package/dist/composition/probe/experiment-design.d.ts +2 -0
  141. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  142. package/dist/composition/probe/experiment-design.js.map +1 -1
  143. package/dist/composition/probe/falsify.d.ts +2 -0
  144. package/dist/composition/probe/falsify.d.ts.map +1 -1
  145. package/dist/composition/probe/falsify.js.map +1 -1
  146. package/dist/composition/probe/fit.d.ts +1 -0
  147. package/dist/composition/probe/fit.d.ts.map +1 -1
  148. package/dist/composition/probe/fit.js.map +1 -1
  149. package/dist/composition/probe/generator.d.ts +3 -0
  150. package/dist/composition/probe/generator.d.ts.map +1 -1
  151. package/dist/composition/probe/generator.js +5 -6
  152. package/dist/composition/probe/generator.js.map +1 -1
  153. package/dist/composition/probe/limits.d.ts +1 -0
  154. package/dist/composition/probe/limits.d.ts.map +1 -1
  155. package/dist/composition/probe/limits.js.map +1 -1
  156. package/dist/composition/probe/pipeline.d.ts +5 -0
  157. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  158. package/dist/composition/probe/pipeline.js +64 -21
  159. package/dist/composition/probe/pipeline.js.map +1 -1
  160. package/dist/composition/probe/power-law.d.ts.map +1 -1
  161. package/dist/composition/probe/power-law.js +3 -7
  162. package/dist/composition/probe/power-law.js.map +1 -1
  163. package/dist/composition/probe/problem.d.ts +1 -0
  164. package/dist/composition/probe/problem.d.ts.map +1 -1
  165. package/dist/composition/probe/problem.js.map +1 -1
  166. package/dist/composition/probe/residual.d.ts +1 -0
  167. package/dist/composition/probe/residual.d.ts.map +1 -1
  168. package/dist/composition/probe/residual.js +1 -0
  169. package/dist/composition/probe/residual.js.map +1 -1
  170. package/dist/composition/probe/run-manifest.d.ts +1 -0
  171. package/dist/composition/probe/run-manifest.d.ts.map +1 -1
  172. package/dist/composition/probe/run-manifest.js.map +1 -1
  173. package/dist/composition/probe/scalar-search.d.ts +50 -0
  174. package/dist/composition/probe/scalar-search.d.ts.map +1 -0
  175. package/dist/composition/probe/scalar-search.js +169 -0
  176. package/dist/composition/probe/scalar-search.js.map +1 -0
  177. package/dist/composition/probe/scoring.d.ts +1 -0
  178. package/dist/composition/probe/scoring.d.ts.map +1 -1
  179. package/dist/composition/probe/scoring.js.map +1 -1
  180. package/dist/composition/probe/study.d.ts +2 -2
  181. package/dist/composition/probe/study.d.ts.map +1 -1
  182. package/dist/composition/probe/study.js +6 -10
  183. package/dist/composition/probe/study.js.map +1 -1
  184. package/dist/composition/probe/t-tail.d.ts +3 -4
  185. package/dist/composition/probe/t-tail.d.ts.map +1 -1
  186. package/dist/composition/probe/t-tail.js +7 -10
  187. package/dist/composition/probe/t-tail.js.map +1 -1
  188. package/dist/composition/proposed-bridges.d.ts +11 -2
  189. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  190. package/dist/composition/proposed-bridges.js +7 -5
  191. package/dist/composition/proposed-bridges.js.map +1 -1
  192. package/dist/composition/rational-exponent.d.ts +2 -2
  193. package/dist/composition/rational-exponent.d.ts.map +1 -1
  194. package/dist/composition/rational-exponent.js +4 -4
  195. package/dist/composition/rational-exponent.js.map +1 -1
  196. package/dist/composition/representative-values.d.ts.map +1 -1
  197. package/dist/composition/representative-values.js +6 -0
  198. package/dist/composition/representative-values.js.map +1 -1
  199. package/dist/composition/retrodiction.d.ts +15 -0
  200. package/dist/composition/retrodiction.d.ts.map +1 -1
  201. package/dist/composition/retrodiction.js +10 -3
  202. package/dist/composition/retrodiction.js.map +1 -1
  203. package/dist/composition/user-equation.d.ts +1 -0
  204. package/dist/composition/user-equation.d.ts.map +1 -1
  205. package/dist/composition/user-equation.js +1 -0
  206. package/dist/composition/user-equation.js.map +1 -1
  207. package/dist/core/constants.d.ts +12 -11
  208. package/dist/core/constants.d.ts.map +1 -1
  209. package/dist/core/constants.js +24 -21
  210. package/dist/core/constants.js.map +1 -1
  211. package/dist/diff/bridge-ast-gradient.d.ts +27 -23
  212. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  213. package/dist/diff/bridge-ast-gradient.js +75 -173
  214. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  215. package/dist/dimensional/ast-types.d.ts +15 -0
  216. package/dist/dimensional/ast-types.d.ts.map +1 -1
  217. package/dist/dimensional/ast-types.js.map +1 -1
  218. package/dist/dimensional/curvature-composite.d.ts +1 -1
  219. package/dist/dimensional/curvature-composite.js.map +1 -1
  220. package/dist/dimensional/exact-scale.d.ts +41 -11
  221. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  222. package/dist/dimensional/exact-scale.js +115 -123
  223. package/dist/dimensional/exact-scale.js.map +1 -1
  224. package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
  225. package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
  226. package/dist/dimensional/mathts-unit-delegation.js +187 -0
  227. package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
  228. package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
  229. package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
  230. package/dist/dimensional/mathts-unit-wrapper.js +190 -0
  231. package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
  232. package/dist/dimensional/scalar-lowering.d.ts +21 -0
  233. package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
  234. package/dist/dimensional/scalar-lowering.js +45 -0
  235. package/dist/dimensional/scalar-lowering.js.map +1 -0
  236. package/dist/dimensional/unit-data.d.ts +5 -1
  237. package/dist/dimensional/unit-data.d.ts.map +1 -1
  238. package/dist/dimensional/unit-data.js +28 -4
  239. package/dist/dimensional/unit-data.js.map +1 -1
  240. package/dist/dimensional/units.d.ts +2 -0
  241. package/dist/dimensional/units.d.ts.map +1 -1
  242. package/dist/dimensional/units.js +59 -3
  243. package/dist/dimensional/units.js.map +1 -1
  244. package/dist/dimensional/validator.d.ts +2 -0
  245. package/dist/dimensional/validator.d.ts.map +1 -1
  246. package/dist/dimensional/validator.js.map +1 -1
  247. package/dist/index.js.map +1 -1
  248. package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
  249. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
  250. package/dist/numerical/connection-lowering-helpers.js +11 -15
  251. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  252. package/dist/numerical/pderiv.d.ts.map +1 -1
  253. package/dist/numerical/pderiv.js +2 -6
  254. package/dist/numerical/pderiv.js.map +1 -1
  255. package/dist/numerical/quadrature.js +3 -3
  256. package/dist/numerical/quadrature.js.map +1 -1
  257. package/dist/numerical/statistics.js +1 -1
  258. package/dist/numerical/statistics.js.map +1 -1
  259. package/dist/numerical/strides.d.ts +3 -2
  260. package/dist/numerical/strides.d.ts.map +1 -1
  261. package/dist/numerical/strides.js +3 -10
  262. package/dist/numerical/strides.js.map +1 -1
  263. package/package.json +9 -12
  264. package/dist/cases/brownian-sphere.d.ts +0 -68
  265. package/dist/cases/brownian-sphere.d.ts.map +0 -1
  266. package/dist/cases/brownian-sphere.js +0 -355
  267. package/dist/cases/brownian-sphere.js.map +0 -1
  268. package/dist/cases/damped-resonator.d.ts +0 -23
  269. package/dist/cases/damped-resonator.d.ts.map +0 -1
  270. package/dist/cases/damped-resonator.js +0 -221
  271. package/dist/cases/damped-resonator.js.map +0 -1
  272. package/dist/cases/kepler-rv.d.ts +0 -13
  273. package/dist/cases/kepler-rv.d.ts.map +0 -1
  274. package/dist/cases/kepler-rv.js +0 -173
  275. package/dist/cases/kepler-rv.js.map +0 -1
  276. package/dist/cases/lumped-cooling.d.ts +0 -51
  277. package/dist/cases/lumped-cooling.d.ts.map +0 -1
  278. package/dist/cases/lumped-cooling.js +0 -259
  279. package/dist/cases/lumped-cooling.js.map +0 -1
  280. package/dist/cases/resistor-noise.d.ts +0 -14
  281. package/dist/cases/resistor-noise.d.ts.map +0 -1
  282. package/dist/cases/resistor-noise.js +0 -215
  283. package/dist/cases/resistor-noise.js.map +0 -1
  284. package/dist/cases/skin-depth.d.ts +0 -17
  285. package/dist/cases/skin-depth.d.ts.map +0 -1
  286. package/dist/cases/skin-depth.js +0 -170
  287. package/dist/cases/skin-depth.js.map +0 -1
@@ -3,14 +3,13 @@
3
3
  *
4
4
  * MathTS `linearRegression.pValue` and `ols.pValues` are `2·(1 − studentTCDF)`
5
5
  * and round a far tail to 0 (TOOLS.md), so a probe never consumes them. The
6
- * tail here is the regularized incomplete beta `I_{ν/(ν+t²)}(ν/2, 1/2)`, MathTS
7
- * `betainc`, which is the two-sided probability itself and resolves where
8
- * `1 − CDF` cannot.
6
+ * tail here is `2·studentTCDF(−|t|, ν)`: the CDF at the negative point is the
7
+ * lower tail itself, so it resolves where `1 − CDF` cannot.
9
8
  *
10
9
  * @internal
11
10
  */
12
11
  /**
13
- * P(|T_ν| ≥ |t|) for Student's t with ν degrees of freedom: `I_{ν/(ν+t²)}(ν/2, 1/2)`.
12
+ * P(|T_ν| ≥ |t|) for Student's t with ν degrees of freedom: `2·studentTCDF(−|t|, ν)`.
14
13
  * `t = 0` is 1, an infinite `t` is 0. @throws RangeError when ν is not positive. @internal
15
14
  */
16
15
  export declare function studentTwoSidedP(t: number, df: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"t-tail.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/t-tail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAS9D"}
1
+ {"version":3,"file":"t-tail.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/t-tail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAO9D"}
@@ -3,15 +3,15 @@
3
3
  *
4
4
  * MathTS `linearRegression.pValue` and `ols.pValues` are `2·(1 − studentTCDF)`
5
5
  * and round a far tail to 0 (TOOLS.md), so a probe never consumes them. The
6
- * tail here is the regularized incomplete beta `I_{ν/(ν+t²)}(ν/2, 1/2)`, MathTS
7
- * `betainc`, which is the two-sided probability itself and resolves where
8
- * `1 − CDF` cannot.
6
+ * tail here is `2·studentTCDF(−|t|, ν)`: the CDF at the negative point is the
7
+ * lower tail itself, so it resolves where `1 − CDF` cannot.
9
8
  *
10
9
  * @internal
11
10
  */
12
- import { betainc } from '@danielsimonjr/mathts-functions';
11
+ import { studentTCDF } from '@danielsimonjr/mathts-functions';
12
+ import { numberFrom } from '../../core/mathts-read.js';
13
13
  /**
14
- * P(|T_ν| ≥ |t|) for Student's t with ν degrees of freedom: `I_{ν/(ν+t²)}(ν/2, 1/2)`.
14
+ * P(|T_ν| ≥ |t|) for Student's t with ν degrees of freedom: `2·studentTCDF(−|t|, ν)`.
15
15
  * `t = 0` is 1, an infinite `t` is 0. @throws RangeError when ν is not positive. @internal
16
16
  */
17
17
  export function studentTwoSidedP(t, df) {
@@ -23,10 +23,7 @@ export function studentTwoSidedP(t, df) {
23
23
  return 1;
24
24
  if (!Number.isFinite(t))
25
25
  return 0;
26
- const x = df / (df + t * t);
27
- const v = betainc(df / 2, 0.5, x);
28
- if (typeof v !== 'number')
29
- throw new TypeError('betainc did not return a number for number arguments');
30
- return Math.min(1, Math.max(0, v));
26
+ const lower = numberFrom('studentTCDF', studentTCDF(-Math.abs(t), df));
27
+ return Math.min(1, Math.max(0, 2 * lower));
31
28
  }
32
29
  //# sourceMappingURL=t-tail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"t-tail.js","sourceRoot":"","sources":["../../../src/composition/probe/t-tail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,EAAU;IACpD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAY,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IACvG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC","sourcesContent":["/**\n * The two-sided tail of Student's t, computed directly.\n *\n * MathTS `linearRegression.pValue` and `ols.pValues` are `2·(1 − studentTCDF)`\n * and round a far tail to 0 (TOOLS.md), so a probe never consumes them. The\n * tail here is the regularized incomplete beta `I_{ν/(ν+t²)}(ν/2, 1/2)`, MathTS\n * `betainc`, which is the two-sided probability itself and resolves where\n * `1 − CDF` cannot.\n *\n * @internal\n */\n\nimport { betainc } from '@danielsimonjr/mathts-functions';\n\n/**\n * P(|T_ν| ≥ |t|) for Student's t with ν degrees of freedom: `I_{ν/(ν+t²)}(ν/2, 1/2)`.\n * `t = 0` is 1, an infinite `t` is 0. @throws RangeError when ν is not positive. @internal\n */\nexport function studentTwoSidedP(t: number, df: number): number {\n if (!(df > 0)) throw new RangeError('studentTwoSidedP: degrees of freedom must be positive');\n if (Number.isNaN(t)) throw new RangeError('studentTwoSidedP: t is NaN');\n if (t === 0) return 1;\n if (!Number.isFinite(t)) return 0;\n const x = df / (df + t * t);\n const v: unknown = betainc(df / 2, 0.5, x);\n if (typeof v !== 'number') throw new TypeError('betainc did not return a number for number arguments');\n return Math.min(1, Math.max(0, v));\n}\n"]}
1
+ {"version":3,"file":"t-tail.js","sourceRoot":"","sources":["../../../src/composition/probe/t-tail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,EAAU;IACpD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["/**\n * The two-sided tail of Student's t, computed directly.\n *\n * MathTS `linearRegression.pValue` and `ols.pValues` are `2·(1 − studentTCDF)`\n * and round a far tail to 0 (TOOLS.md), so a probe never consumes them. The\n * tail here is `2·studentTCDF(−|t|, ν)`: the CDF at the negative point is the\n * lower tail itself, so it resolves where `1 − CDF` cannot.\n *\n * @internal\n */\n\nimport { studentTCDF } from '@danielsimonjr/mathts-functions';\nimport { numberFrom } from '../../core/mathts-read.js';\n\n/**\n * P(|T_ν| ≥ |t|) for Student's t with ν degrees of freedom: `2·studentTCDF(−|t|, ν)`.\n * `t = 0` is 1, an infinite `t` is 0. @throws RangeError when ν is not positive. @internal\n */\nexport function studentTwoSidedP(t: number, df: number): number {\n if (!(df > 0)) throw new RangeError('studentTwoSidedP: degrees of freedom must be positive');\n if (Number.isNaN(t)) throw new RangeError('studentTwoSidedP: t is NaN');\n if (t === 0) return 1;\n if (!Number.isFinite(t)) return 0;\n const lower = numberFrom('studentTCDF', studentTCDF(-Math.abs(t), df));\n return Math.min(1, Math.max(0, 2 * lower));\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Identity-consequence surfacer — turns a `promising` discovery identification
2
+ * Identity-consequence surfacer — turns a promising (either tier) discovery identification
3
3
  * into the ONE algebraic relation it implies, as an UNADJUDICATED proposal.
4
4
  *
5
5
  * When the discovery funnel flags `a ≟ b` (two canonical quantities of equal
@@ -89,6 +89,13 @@ export interface ProposedBridge {
89
89
  readonly a: string;
90
90
  readonly b: string;
91
91
  readonly dim: string;
92
+ /**
93
+ * The source row's magnitude evidence: true when it was `promising` (the magnitude
94
+ * falsifier ran and could have failed), false when it was `promising-unchecked` (the gate
95
+ * abstained, or its pass was anchor-invariant). A proposal from an unchecked
96
+ * identification is printed as such.
97
+ */
98
+ readonly magnitudeEvidence: boolean;
92
99
  };
93
100
  readonly sourceEquationIds: readonly [string, string];
94
101
  readonly solvedFor: string;
@@ -150,7 +157,9 @@ interface EquationSource {
150
157
  * @internal */
151
158
  export declare function resolveSources(name: string): EquationSource[];
152
159
  /**
153
- * Derive the implied relation for each `promising` identification in `candidates`.
160
+ * Derive the implied relation for each identification in `candidates` in either promising tier
161
+ * (`promising` or `promising-unchecked`, {@link isPromisingTier}); each proposal records which in
162
+ * `derivedFrom.identification.magnitudeEvidence`.
154
163
  * Returns ONE proposal per admissible candidate (Adam M2), structurally
155
164
  * de-duplicated (`dedupByNormalForm`).
156
165
  *
@@ -1 +1 @@
1
- {"version":3,"file":"proposed-bridges.d.ts","sourceRoot":"","sources":["../../src/composition/proposed-bridges.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposed-bridges.d.ts","sourceRoot":"","sources":["../../src/composition/proposed-bridges.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Identity-consequence surfacer — turns a `promising` discovery identification
2
+ * Identity-consequence surfacer — turns a promising (either tier) discovery identification
3
3
  * into the ONE algebraic relation it implies, as an UNADJUDICATED proposal.
4
4
  *
5
5
  * When the discovery funnel flags `a ≟ b` (two canonical quantities of equal
@@ -42,7 +42,7 @@ import { normalForm } from '../canonical/normal-form.js';
42
42
  import { isRegisteredConstant } from '../dimensional/symbolic-constants.js';
43
43
  import { forEachScalarLeaf, isDecimalLiteral, mapScalarLeaves } from '../dimensional/ast-leaves.js';
44
44
  import { evalExpr } from './expr-eval.js';
45
- import { rankDiscoveries } from './discovery.js';
45
+ import { rankDiscoveries, isPromisingTier } from './discovery.js';
46
46
  import { CANONICAL_GRAPH } from './canonical-graph.js';
47
47
  import { CATALOG_GRAPH } from './catalog-graph.js';
48
48
  import { rationalExponentOf } from './formula-shape.js';
@@ -295,7 +295,9 @@ export function resolveSources(name) {
295
295
  return out;
296
296
  }
297
297
  /**
298
- * Derive the implied relation for each `promising` identification in `candidates`.
298
+ * Derive the implied relation for each identification in `candidates` in either promising tier
299
+ * (`promising` or `promising-unchecked`, {@link isPromisingTier}); each proposal records which in
300
+ * `derivedFrom.identification.magnitudeEvidence`.
299
301
  * Returns ONE proposal per admissible candidate (Adam M2), structurally
300
302
  * de-duplicated (`dedupByNormalForm`).
301
303
  *
@@ -319,7 +321,7 @@ export function resolveSources(name) {
319
321
  export function deriveProposedBridges(candidates = rankDiscoveries(CANONICAL_GRAPH)) {
320
322
  const out = [];
321
323
  for (const cand of candidates) {
322
- if (cand.verdict !== 'promising')
324
+ if (!isPromisingTier(cand.verdict))
323
325
  continue;
324
326
  const [t0, t1] = [cand.a, cand.b].sort();
325
327
  // Enumerate every admissible source pair (de-ambiguation by enumeration).
@@ -368,7 +370,7 @@ function derivePair(cand, t0, t1, E1, E2) {
368
370
  return {
369
371
  id: `IC-${t0}--${t1}--${solveFor.name}`,
370
372
  derivedFrom: {
371
- identification: { a: cand.a, b: cand.b, dim: cand.dim },
373
+ identification: { a: cand.a, b: cand.b, dim: cand.dim, magnitudeEvidence: cand.verdict === 'promising' },
372
374
  sourceEquationIds: [E1.id, E2.id],
373
375
  solvedFor: solveFor.name,
374
376
  },
@@ -1 +1 @@
1
- {"version":3,"file":"proposed-bridges.js","sourceRoot":"","sources":["../../src/composition/proposed-bridges.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Identity-consequence surfacer — turns a `promising` discovery identification\n * into the ONE algebraic relation it implies, as an UNADJUDICATED proposal.\n *\n * When the discovery funnel flags `a ≟ b` (two canonical quantities of equal\n * dimension), and `a`, `b` are the TARGETS of two canonical equations `Eₐ`, `E_b`,\n * the hypothesised identity `a ≡ b` makes their right-hand sides equal:\n *\n * Eₐ.scalarAst = E_b.scalarAst\n *\n * Eliminating (isolating) one free variable yields a relation among the union of\n * the two governing sets — e.g. Landauer `k_B T ln2` ≟ Planck–Einstein `h ν`\n * gives `ν = (k_B ln2 / h) · T`, the \"Landauer photon\".\n *\n * CRITICAL — this is NOT new physics and NOT a bridge. It is the algebraic\n * consequence of an UNADJUDICATED identification, surfaced for a physicist to\n * judge (Part-VI §XXVII-B: the enumerator proposes, humans dispose). Every\n * emitted record carries `status: 'unadjudicated'` — a literal that is NOT a\n * member of `BridgeEquationStatus`, so a proposal can never be assigned where a\n * catalog entry is expected. The generator NEVER writes `BRIDGE_EQUATIONS` and a\n * proposal is NEVER added to `CANONICAL_GRAPH` (no coincidence-amplifying loop).\n *\n * Scope (v0.24.0 pilot): canonical-only `promising` candidates whose BOTH source\n * equations (a) have a non-null `dimensional.monomial` (determinate) and (b) are\n * `epistemicStatus: 'fully-quantitative'` (so the eliminated prefactor is a\n * closed numeric constant, not an operator-valued stub — this gates out\n * `CE-jarzynski`). See `docs/planning/v0.24.0-{Design,Review-Findings}.md`.\n *\n * INTERNAL tooling — deliberately NOT re-exported from `src/index.ts`.\n *\n * @module composition/proposed-bridges\n */\n\nimport { Fraction } from '@danielsimonjr/mathts-core';\nimport type { ExprNode } from '../dimensional/validator.js';\nimport { validate } from '../dimensional/validator.js';\nimport { sym, symbolPower } from '../dimensional/ast-builders.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { DIMENSIONLESS } from '../dimensional/types.js';\nimport { equals, format } from '../dimensional/algebra.js';\nimport type { DimensionalVariable } from '../dimensional/buckingham.js';\nimport type { BridgeEquationStatus } from '../bridges/index.js';\nimport { canonicalByTarget, canonicalById } from '../canonical/registry.js';\nimport type { KnownIssue } from '../bridges/index.js';\nimport { BRIDGE_EQUATIONS } from '../bridges/index.js';\nimport { catalogIdNumber } from '../bridges/catalog-load.js';\nimport { normalForm } from '../canonical/normal-form.js';\nimport { isRegisteredConstant } from '../dimensional/symbolic-constants.js';\nimport { forEachScalarLeaf, isDecimalLiteral, mapScalarLeaves } from '../dimensional/ast-leaves.js';\nimport { evalExpr } from './expr-eval.js';\nimport { rankDiscoveries } from './discovery.js';\nimport type { VettedCandidate } from './discovery.js';\nimport { CANONICAL_GRAPH } from './canonical-graph.js';\nimport { CATALOG_GRAPH } from './catalog-graph.js';\nimport { rationalExponentOf } from './formula-shape.js';\nimport { equalUpToConstant } from './algebraic-equivalence.js';\nimport { formatRational, fractionToNumber } from './rational-exponent.js';\n\n// ── monomial algebra over flat ExprNode forms ───────────────────────────────\n\n/**\n * A flat monomial: leaf name → its dimension and signed exact exponent.\n * `k_B·T·ln2 / h` ⇒ {k_B:+1, T:+1, ln2:+1, h:-1}. The exponent is a core\n * `Fraction`, so solving for a cubed leaf carries `1/3`, not\n * `0.3333333333333333`, and a cancellation is an exact zero.\n *\n * @internal\n */\nexport type Mono = Map<string, { dim: Dimension; exp: Fraction }>;\n\nconst ONE = new Fraction(1);\nconst MINUS_ONE = new Fraction(-1);\n\n/** Thrown when an AST is not a product / quotient / integer-power of symbols. @internal */\nexport class NotAMonomialError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotAMonomialError';\n }\n}\n\nfunction mergeInto(into: Mono, from: Mono, scale: Fraction): void {\n for (const [name, { dim, exp }] of from) {\n const cur = into.get(name);\n if (cur === undefined) {\n into.set(name, { dim, exp: exp.multiply(scale) });\n } else {\n if (!equals(cur.dim, dim)) {\n throw new NotAMonomialError(\n `leaf '${name}' appears with inconsistent dimensions`,\n );\n }\n cur.exp = cur.exp.add(exp.multiply(scale));\n }\n }\n}\n\n/**\n * Decompose a flat-monomial `ExprNode` into a leaf→exponent map. Throws\n * `NotAMonomialError` on sums, differences, or non-symbol bases — this is the\n * AST-level monomial gate.\n *\n * @internal\n */\nexport function toMonomial(ast: ExprNode): Mono {\n const out: Mono = new Map();\n switch (ast.kind) {\n case 'symbol':\n out.set(ast.name, { dim: ast.dim, exp: ONE });\n return out;\n case 'op':\n switch (ast.op) {\n case '*':\n for (const a of ast.args) mergeInto(out, toMonomial(a), ONE);\n return out;\n case '/': {\n const [num, ...dens] = ast.args;\n mergeInto(out, toMonomial(num), ONE);\n for (const d of dens) mergeInto(out, toMonomial(d), MINUS_ONE);\n return out;\n }\n case '^': {\n const [base, expNode] = ast.args;\n if (expNode.kind !== 'symbol') {\n throw new NotAMonomialError('non-literal exponent');\n }\n const n = rationalExponentOf(expNode.name);\n if (n === undefined) {\n throw new NotAMonomialError(`non-numeric exponent '${expNode.name}'`);\n }\n mergeInto(out, toMonomial(base), n);\n return out;\n }\n default:\n throw new NotAMonomialError(`operator '${ast.op}' is not monomial`);\n }\n default:\n throw new NotAMonomialError(`node kind '${ast.kind}' is not monomial`);\n }\n}\n\n/** Rebuild a flat-monomial `ExprNode` from a leaf→exponent map (numerator =\n * positive exponents, denominator = negative). Zero exponents drop out. The\n * exponent literal is the double built from the fraction (`1/3` is written\n * `0.3333333333333333`), so one rational is always one spelling.\n *\n * This is not merged with `monomialToExpr` (composition/probe/generator.ts),\n * which writes one product with negative exponents in code-unit name order;\n * this one orders names by `localeCompare` and splits a quotient. The\n * proposals' printed formulas and the IC dedup key read this tree, so one\n * builder would move them. Both build each factor with `symbolPower`.\n * @internal */\nexport function fromMonomial(m: Mono): ExprNode {\n const factor = (name: string, dim: Dimension, e: Fraction): ExprNode =>\n symbolPower(sym(name, dim), fractionToNumber(e));\n\n const num: ExprNode[] = [];\n const den: ExprNode[] = [];\n for (const [name, { dim, exp }] of [...m].sort((a, b) => a[0].localeCompare(b[0]))) {\n if (exp.isZero()) continue;\n if (exp.numerator > 0n) num.push(factor(name, dim, exp));\n else den.push(factor(name, dim, exp.abs()));\n }\n const product = (xs: ExprNode[]): ExprNode =>\n xs.length === 1 ? xs[0] : { kind: 'op', op: '*', args: xs };\n\n const numerator = num.length === 0 ? sym('1', DIMENSIONLESS) : product(num);\n if (den.length === 0) return numerator;\n return { kind: 'op', op: '/', args: [numerator, product(den)] };\n}\n\n// ── the proposal record ─────────────────────────────────────────────────────\n\n/**\n * A machine-DERIVED candidate bridge — the MATH ONLY. The algebraic consequence\n * of an UNADJUDICATED identification; never a status claim. Structurally distinct\n * from `BridgeEquationEntry` (omits every physics-judgment field) and carries the\n * literal `status: 'unadjudicated'`, which is NOT a `BridgeEquationStatus`.\n *\n * @internal\n */\nexport interface ProposedBridge {\n /** `IC-<sorted-a>--<sorted-b>--<solvedFor>`. */\n readonly id: string;\n readonly derivedFrom: {\n readonly identification: { readonly a: string; readonly b: string; readonly dim: string };\n readonly sourceEquationIds: readonly [string, string];\n readonly solvedFor: string;\n };\n readonly target: DimensionalVariable;\n /** Free (non-constant) inputs of the derived relation. */\n readonly governing: readonly DimensionalVariable[];\n readonly formulaLatex: string;\n /** Dimensionally-VALIDATED derived RHS (round-trips to `dimensionalSignature`). */\n readonly scalarAst: ExprNode;\n /** `format()` of the inferred dimension — same convention as the catalog. */\n readonly dimensionalSignature: string;\n /** Mechanical derivation description — NO physics claim. */\n readonly provenance: string;\n /** Other identifications that derive the SAME relation (same normal form, up\n * to dimensionless constants), collapsed into this proposal by the dedup pass.\n * Empty unless a wider candidate scope produced structural duplicates. */\n readonly alsoDerivableFrom: readonly string[];\n /** ALWAYS the literal 'unadjudicated'. NOT a BridgeEquationStatus. */\n readonly status: 'unadjudicated';\n /** Numerically evaluate the derived RHS; constants auto-resolve, supply the\n * free `governing` leaves (e.g. `{ T: 300 }`). */\n evaluate(values: Readonly<Record<string, number>>): number;\n}\n\nconst isConstant = isRegisteredConstant;\n\n/** One leaf of a monomial with its exact exponent. @internal */\nexport interface MonoLeaf {\n readonly name: string;\n readonly dim: Dimension;\n readonly exp: Fraction;\n}\n\n/** The single non-constant leaf of a monomial, or null if 0 or >1. */\nfunction uniqueNonConstantLeaf(m: Mono): MonoLeaf | null {\n const free = [...m].filter(([name]) => !isConstant(name));\n if (free.length !== 1) return null;\n const [name, { dim, exp }] = free[0];\n return { name, dim, exp };\n}\n\n/** The LaTeX of a monomial, exponents rendered from their fractions (`y^{1/3}`). @internal */\nexport function latexFromMono(m: Mono): string {\n const num: string[] = [];\n const den: string[] = [];\n for (const [name, { exp }] of [...m].sort((a, b) => a[0].localeCompare(b[0]))) {\n if (exp.isZero()) continue;\n const magnitude = exp.abs();\n const tok = magnitude.equals(ONE) ? name : `${name}^{${formatRational(magnitude)}}`;\n (exp.numerator > 0n ? num : den).push(tok);\n }\n const n = num.join(' \\\\cdot ') || '1';\n return den.length ? `\\\\frac{${n}}{${den.join(' \\\\cdot ')}}` : n;\n}\n\n/**\n * Isolate `solveFor` from `m1 = m2`: `solveFor^e = m1 / (m2 without solveFor)`,\n * every exponent divided by `e`, exactly. `m2` must hold `solveFor`.\n *\n * @internal\n */\nexport function isolateLeaf(m1: Mono, m2: Mono, solveFor: MonoLeaf): Mono {\n const result: Mono = new Map();\n mergeInto(result, m1, ONE);\n const m2NoSolve: Mono = new Map(m2);\n m2NoSolve.delete(solveFor.name);\n mergeInto(result, m2NoSolve, MINUS_ONE);\n if (!solveFor.exp.equals(ONE)) {\n for (const v of result.values()) v.exp = v.exp.divide(solveFor.exp);\n }\n return result;\n}\n\n// ── leaf-name canonicalization ──────────────────────────────────────────────\n// A canonical equation's `scalarAst` uses private symbols (`T`) while its\n// `dimensional.governing` and the whole composition graph (and bridge `symbolic`\n// forms) use quantity names (`temperature`). Aligning the AST leaves to the\n// governing names lets a derivation from a canonical equation and one from a\n// bridge edge of the SAME physics collapse under `dedupByNormalForm`.\n\nfunction collectLeafDims(ast: ExprNode, into: Map<string, Dimension>): void {\n forEachScalarLeaf(\n ast,\n (leaf) => {\n if (!into.has(leaf.name)) into.set(leaf.name, leaf.dim);\n },\n {},\n );\n}\n\n/** Map each non-constant `scalarAst` leaf to the governing quantity of equal\n * dimension, when that match is unique (else leave it — never guess). */\nfunction leafCanonMap(\n scalarAst: ExprNode,\n governing: readonly DimensionalVariable[],\n): Map<string, string> {\n const leaves = new Map<string, Dimension>();\n collectLeafDims(scalarAst, leaves);\n const govFree = governing.filter((g) => !isConstant(g.name));\n const map = new Map<string, string>();\n for (const [leaf, dim] of leaves) {\n if (isConstant(leaf) || isDecimalLiteral(leaf)) continue;\n if (govFree.some((g) => g.name === leaf)) continue; // already a graph name\n const matches = govFree.filter((g) => equals(g.dim, dim));\n if (matches.length === 1) map.set(leaf, matches[0].name);\n }\n return map;\n}\n\nfunction renameLeaves(ast: ExprNode, map: ReadonlyMap<string, string>): ExprNode {\n if (map.size === 0) return ast;\n return mapScalarLeaves(\n ast,\n (leaf) => {\n const r = map.get(leaf.name);\n return r ? { ...leaf, name: r } : leaf;\n },\n {},\n );\n}\n\n// ── the generator ───────────────────────────────────────────────────────────\n\n/**\n * An admissible source for the elimination: a target name backed by a flat\n * monomial `scalarAst` whose prefactor is a closed constant. Canonical equations\n * and bridge edges both project to this shape, so the generator no longer needs\n * to know which it came from.\n */\ninterface EquationSource {\n /** `CE-…` (canonical) or `BE-<n>` (bridge). */\n readonly id: string;\n readonly kind: 'canonical' | 'bridge';\n readonly scalarAst: ExprNode;\n readonly targetDim: Dimension;\n /** `epistemicStatus` (canonical) or `confidence` (bridge) — recorded, not gated. */\n readonly grade: string;\n}\n\n/** True if the monomial carries a dimensionless leaf that is neither a known\n * constant, a numeric literal, NOR a declared input quantity — i.e. an\n * operator-valued STUB (e.g. Jarzynski's `ln_avg_exp_minus_betaW`), not a clean\n * dimensionless INPUT like a coupling constant (BE-18's `yukawa-coupling`). */\nfunction hasNonConstantStub(m: Mono, inputs: ReadonlySet<string>): boolean {\n for (const [name, { dim }] of m) {\n if (\n equals(dim, DIMENSIONLESS) &&\n !isConstant(name) &&\n !isDecimalLiteral(name) &&\n !inputs.has(name)\n ) {\n return true;\n }\n }\n return false;\n}\n\n/** ALL admissible sources for `name` — every canonical equation AND every bridge\n * edge whose target is `name` and whose form is a clean monomial. A target with\n * several sources (e.g. BE-42 Hawking's two parametrisations) is DE-AMBIGUATED by\n * enumeration, not skipped; coinciding derivations collapse later under dedup.\n * @internal */\nexport function resolveSources(name: string): EquationSource[] {\n const out: EquationSource[] = [];\n\n // Canonical: a determinate monomial AND a fully-quantitative form.\n for (const e of canonicalByTarget(name)) {\n if (\n e.scalarAst &&\n e.dimensional.monomial !== null &&\n e.epistemicStatus === 'fully-quantitative'\n ) {\n // Align the AST's private leaf symbols (`T`) with the governing quantity\n // names (`temperature`) so canonical- and bridge-sourced derivations of the\n // same relation collapse under dedup.\n const scalarAst = renameLeaves(\n e.scalarAst,\n leafCanonMap(e.scalarAst, e.dimensional.governing),\n );\n out.push({\n id: e.id,\n kind: 'canonical',\n scalarAst,\n targetDim: e.dimensional.target.dim,\n grade: e.epistemicStatus,\n });\n }\n }\n\n // Bridge: edges carrying a clean-monomial `symbolic` form. `confidence` is about\n // FRAMING, not formula completeness, so it is recorded — not gated; the\n // structural stub check enforces a closed prefactor instead.\n for (const edge of CATALOG_GRAPH) {\n if (edge.target.name !== name || !edge.symbolic) continue;\n let m: Mono;\n try {\n m = toMonomial(edge.symbolic);\n } catch (err) {\n if (err instanceof NotAMonomialError) continue;\n throw err;\n }\n if (hasNonConstantStub(m, new Set(edge.sources.map((s) => s.name)))) continue;\n const dim = validate(edge.symbolic).inferredDimension;\n if (!dim || !equals(dim, edge.target.dim)) continue;\n out.push({\n id: edge.beId !== null ? `BE-${edge.beId}` : edge.id,\n kind: 'bridge',\n scalarAst: edge.symbolic,\n targetDim: edge.target.dim,\n grade: edge.confidence,\n });\n }\n\n return out;\n}\n\n/**\n * Derive the implied relation for each `promising` identification in `candidates`.\n * Returns ONE proposal per admissible candidate (Adam M2), structurally\n * de-duplicated (`dedupByNormalForm`).\n *\n * Candidate-set-agnostic: pass `rankDiscoveries(CANONICAL_GRAPH)` (default),\n * `…(CATALOG_GRAPH)`, or `…([...CATALOG_GRAPH, ...CANONICAL_GRAPH])` to widen the\n * source — the CLI `discover --derive` forwards whichever `--source=` graph is\n * selected. Each endpoint is resolved by `resolveSource` to a canonical equation\n * OR a bridge edge with a clean-monomial `symbolic` form, so a candidate yields a\n * proposal when BOTH endpoints resolve (the Landauer photon, for instance, is\n * derivable both from `CE-landauer` and — at `--source=both` — from the BE-16\n * bridge). A target with SEVERAL admissible sources (BE-42 Hawking's two\n * parametrisations, or a canonical + bridge pair) is de-ambiguated by ENUMERATION\n * — every source pair is tried and coincidences collapse under dedup. HONEST\n * BOUNDARY: an endpoint with no clean-monomial source (a bridge with no `symbolic`\n * form or a non-monomial one) yields nothing.\n *\n * Pure; reads the registries, writes nothing.\n *\n * @internal\n */\nexport function deriveProposedBridges(\n candidates: readonly VettedCandidate[] = rankDiscoveries(CANONICAL_GRAPH),\n): readonly ProposedBridge[] {\n const out: ProposedBridge[] = [];\n for (const cand of candidates) {\n if (cand.verdict !== 'promising') continue;\n const [t0, t1] = [cand.a, cand.b].sort();\n // Enumerate every admissible source pair (de-ambiguation by enumeration).\n for (const E1 of resolveSources(t0)) {\n for (const E2 of resolveSources(t1)) {\n const p = derivePair(cand, t0, t1, E1, E2);\n if (p) out.push(p);\n }\n }\n }\n return disambiguateIds(dedupByNormalForm(out));\n}\n\n/** Derive one proposal from a fixed source pair, or null if inadmissible. */\nfunction derivePair(\n cand: VettedCandidate,\n t0: string,\n t1: string,\n E1: EquationSource,\n E2: EquationSource,\n): ProposedBridge | null {\n let m1: Mono;\n let m2: Mono;\n try {\n m1 = toMonomial(E1.scalarAst);\n m2 = toMonomial(E2.scalarAst);\n } catch (e) {\n if (e instanceof NotAMonomialError) return null;\n throw e;\n }\n\n const solveFor = uniqueNonConstantLeaf(m2);\n if (!solveFor) return null; // no single observable to isolate\n if (m1.has(solveFor.name)) return null; // degenerate overlap (Design §5.2)\n\n // Isolate solveFor from `m1 = m2`: solveFor^e = m1 / (m2 without solveFor).\n const result = isolateLeaf(m1, m2, solveFor);\n\n const scalarAst = fromMonomial(result);\n const dim = validate(scalarAst).inferredDimension;\n if (!dim || !equals(dim, solveFor.dim)) return null; // round-trip guard\n\n const governing: DimensionalVariable[] = [...result]\n .filter(([name]) => !isConstant(name))\n .map(([name, { dim: d }]) => ({ name, dim: d }));\n\n const src = (e: EquationSource) => `${e.id} (${e.kind}, ${e.grade})`;\n const provenance =\n `Monomial elimination of the UNADJUDICATED identification ${cand.a} ≡ ${cand.b} ` +\n `(${src(E1)}.rhs = ${src(E2)}.rhs), solved for '${solveFor.name}'. ` +\n `Algebraic consequence of a hypothesised identity — NOT a new physical ` +\n `relation and NOT a bridge. Invertible (any free leaf may be isolated).`;\n\n return {\n id: `IC-${t0}--${t1}--${solveFor.name}`,\n derivedFrom: {\n identification: { a: cand.a, b: cand.b, dim: cand.dim },\n sourceEquationIds: [E1.id, E2.id],\n solvedFor: solveFor.name,\n },\n target: { name: solveFor.name, dim: solveFor.dim },\n governing,\n formulaLatex: `${solveFor.name} = ${latexFromMono(result)}`,\n scalarAst,\n dimensionalSignature: format(dim),\n provenance,\n alsoDerivableFrom: [],\n status: 'unadjudicated',\n evaluate: (values) => evalExpr(scalarAst, values),\n };\n}\n\n/** Make ids unique: when distinct proposals (different source pairs) collide on\n * the base `IC-<a>--<b>--<solveFor>` id, suffix each with its source pair. */\nfunction disambiguateIds(\n proposals: readonly ProposedBridge[],\n): readonly ProposedBridge[] {\n const counts = new Map<string, number>();\n for (const p of proposals) counts.set(p.id, (counts.get(p.id) ?? 0) + 1);\n return proposals.map((p) =>\n (counts.get(p.id) ?? 0) > 1\n ? { ...p, id: `${p.id}--${p.derivedFrom.sourceEquationIds.join('+')}` }\n : p,\n );\n}\n\n/**\n * The hash a proposal dedupes under: `normalForm` of its monomial rebuilt\n * from the exact exponents (so `0.3333333333333333` and\n * `0.33333333333333337` are one `1/3`), or of the AST itself when it is not\n * a monomial.\n */\nfunction dedupKey(p: ProposedBridge): string {\n let canonical: ExprNode = p.scalarAst;\n try {\n canonical = fromMonomial(toMonomial(p.scalarAst));\n } catch (err) {\n if (!(err instanceof NotAMonomialError)) throw err;\n }\n return `${normalForm(canonical)}::${p.dimensionalSignature}`;\n}\n\n/**\n * Collapse proposals that derive the SAME relation — equal `normalForm` (up to\n * dimensionless constants) of the exact monomial AND equal target dimension —\n * into the first, recording the others' identifications in\n * `alsoDerivableFrom`. Distinct stubs do NOT collapse (e.g. Landauer's dropped\n * `ln2` vs an operator stub hash differently), so this only merges genuine\n * structural twins that a wider candidate scope can produce (Design §9 #2).\n * Deterministic: input order is preserved.\n *\n * @internal\n */\nexport function dedupByNormalForm(\n proposals: readonly ProposedBridge[],\n): readonly ProposedBridge[] {\n const byKey = new Map<string, ProposedBridge>();\n const order: string[] = [];\n const extras = new Map<string, string[]>();\n\n for (const p of proposals) {\n let key = dedupKey(p);\n // On a hash miss, the algebraic step: a kept proposal of the same dimension\n // that is this one up to a constant owns the key (`a/(b/c)` for `a·c/b`).\n if (!byKey.has(key)) {\n const twin = order.find((k) => {\n const candidate = byKey.get(k)!;\n return candidate.dimensionalSignature === p.dimensionalSignature && equalUpToConstant(candidate.scalarAst, p.scalarAst).equal;\n });\n if (twin !== undefined) key = twin;\n }\n const kept = byKey.get(key);\n if (kept === undefined) {\n byKey.set(key, p);\n order.push(key);\n extras.set(key, [...p.alsoDerivableFrom]);\n } else {\n const tag = `${p.derivedFrom.identification.a} ≡ ${p.derivedFrom.identification.b}`;\n extras.get(key)!.push(tag, ...p.alsoDerivableFrom);\n }\n }\n\n return order.map((key) => {\n const p = byKey.get(key)!;\n const merged = [...new Set(extras.get(key)!)].sort();\n return merged.length === p.alsoDerivableFrom.length\n ? p\n : { ...p, alsoDerivableFrom: merged };\n });\n}\n\n// ── promotion gate (guardrail #5) ───────────────────────────────────────────\n\n/** The human inputs a proposal CANNOT supply — fabricating them is forbidden. */\ninterface PromotionEvidence {\n /** Literature anchor establishing the relation (appears / contradicts / neither). */\n readonly citation: string;\n /** Human-chosen catalog status — never defaulted. */\n readonly status: BridgeEquationStatus;\n /** Path to the recorded adversarial + literature review. */\n readonly reviewRef: string;\n}\n\n/** A review-ready promotion request — the artifact a human turns into a catalog\n * entry. Holding one does NOT mutate `BRIDGE_EQUATIONS`. */\ninterface PromotionRequest {\n readonly proposal: ProposedBridge;\n readonly evidence: PromotionEvidence;\n}\n\n/** Thrown when a proposal is promoted without the evidence the promotion requires. @internal */\nexport class MissingEvidenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MissingEvidenceError';\n }\n}\n\n/**\n * Gate a proposal toward the catalog. THROWS `MissingEvidenceError` unless every\n * human input is present and non-blank (operationalises \"null, not guessed\").\n * Returns a `PromotionRequest`; it deliberately does NOT synthesise a\n * `BridgeEquationEntry` — the physics-judgment fields are human work.\n *\n * @internal\n */\nexport function promoteProposal(\n proposal: ProposedBridge,\n evidence: PromotionEvidence,\n): PromotionRequest {\n const blank = (s: unknown): boolean => typeof s !== 'string' || s.trim() === '';\n if (blank(evidence.citation)) throw new MissingEvidenceError('citation required');\n if (blank(evidence.reviewRef)) throw new MissingEvidenceError('reviewRef required');\n if (!evidence.status) throw new MissingEvidenceError('status required (not defaulted)');\n return { proposal, evidence };\n}\n\n// ── PROPOSED_BRIDGES review surface (catalog field-shape, own registry) ──────\n\n/**\n * A derived proposal in the catalog's field SHAPE, for review — but in its OWN\n * registry and carrying `status: 'unadjudicated'` (NOT a `BridgeEquationStatus`).\n * This is deliberately NOT a `BridgeEquationEntry`: it omits the spec-only fields\n * (`source_part`/`source_section`/numeric `id`) and never enters `BRIDGE_EQUATIONS`,\n * which stays the faithful encoding of the specification.\n *\n * @internal\n */\ninterface ProposedBridgeEntry {\n readonly id: string;\n readonly name: string;\n readonly category: 'Z';\n readonly category_name: 'Machine-Derived Identity Consequences (UNADJUDICATED)';\n /** The two regimes bridged — the source equations' domains. */\n readonly bridges: readonly [string, string];\n /** ALWAYS 'unadjudicated' — not a catalog status. */\n readonly status: 'unadjudicated';\n readonly context: string;\n readonly formula_latex: string;\n readonly dimensional_signature: string;\n /** Honest references: a derivation note + the SOURCE equations' citations,\n * never a fabricated citation for the derived relation itself. */\n readonly references: readonly string[];\n readonly known_issues: readonly KnownIssue[];\n readonly derivedFrom: ProposedBridge['derivedFrom'];\n readonly notes: string;\n}\n\n/** Domain label + citations for a source id — canonical (`CE-…`) or bridge\n * (`BE-<n>`), so the entry surface works for either source kind. */\nfunction equationMeta(id: string): { domain: string; references: readonly string[] } {\n const ce = canonicalById(id);\n if (ce) return { domain: ce.domain, references: ce.references };\n const n = catalogIdNumber(id);\n const be = n === undefined ? undefined : BRIDGE_EQUATIONS.find((e) => e.id === n);\n if (be) return { domain: `${be.bridges[0]}↔${be.bridges[1]} (${be.status})`, references: be.references };\n return { domain: 'unknown', references: [] };\n}\n\n/** Render a `ProposedBridge` into the catalog field-shape, filled honestly. @internal */\nexport function toProposedEntry(p: ProposedBridge): ProposedBridgeEntry {\n const [id1, id2] = p.derivedFrom.sourceEquationIds;\n const M1 = equationMeta(id1);\n const M2 = equationMeta(id2);\n const { a, b } = p.derivedFrom.identification;\n const srcRefs = [\n [id1, M1] as const,\n [id2, M2] as const,\n ].flatMap(([id, m]) => m.references.map((r) => `source ${id}: ${r}`));\n return {\n id: p.id,\n name: `${a} ≡ ${b} ⇒ ${p.derivedFrom.solvedFor} (derived)`,\n category: 'Z',\n category_name: 'Machine-Derived Identity Consequences (UNADJUDICATED)',\n bridges: [M1.domain, M2.domain],\n status: 'unadjudicated',\n context:\n `Algebraic consequence of the UNADJUDICATED identification ${a} ≡ ${b} ` +\n `(${id1}.rhs = ${id2}.rhs), solved for ${p.derivedFrom.solvedFor}. A ` +\n `dimensional coincidence surfaced by the discovery funnel — no physical ` +\n `mechanism is asserted, and it is NOT a bridge.`,\n formula_latex: p.formulaLatex,\n dimensional_signature: p.dimensionalSignature,\n references: [\n 'Machine-derived; the combined relation has no independent literature.',\n ...srcRefs,\n ],\n known_issues: [\n {\n severity: 'phenomenological-ansatz',\n description:\n 'Machine-derived dimensional coincidence: the algebraic consequence ' +\n 'of an unadjudicated identification, with no mechanism and no ' +\n 'independent literature. Promotion to BRIDGE_EQUATIONS requires an ' +\n 'adversarial + literature review (Part-VI §XXVII-B) via promoteProposal().',\n fixable: 'unknown',\n },\n ],\n derivedFrom: p.derivedFrom,\n notes:\n p.provenance +\n (p.alsoDerivableFrom.length\n ? ` Also derivable from: ${p.alsoDerivableFrom.join('; ')}.`\n : ''),\n };\n}\n\n/**\n * The PROPOSED-BRIDGE review surface: derived identity-consequences in the\n * catalog's field shape, in their OWN registry, every entry `status:\n * 'unadjudicated'`. Separate from `BRIDGE_EQUATIONS` (the faithful spec\n * encoding), which this never mutates. Default scope: canonical-only — widen with\n * `deriveProposedBridges(rankDiscoveries(graph)).map(toProposedEntry)`.\n *\n * @internal\n */\nexport const PROPOSED_BRIDGES: readonly ProposedBridgeEntry[] =\n deriveProposedBridges().map(toProposedEntry);\n"]}
1
+ {"version":3,"file":"proposed-bridges.js","sourceRoot":"","sources":["../../src/composition/proposed-bridges.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Identity-consequence surfacer — turns a promising (either tier) discovery identification\n * into the ONE algebraic relation it implies, as an UNADJUDICATED proposal.\n *\n * When the discovery funnel flags `a ≟ b` (two canonical quantities of equal\n * dimension), and `a`, `b` are the TARGETS of two canonical equations `Eₐ`, `E_b`,\n * the hypothesised identity `a ≡ b` makes their right-hand sides equal:\n *\n * Eₐ.scalarAst = E_b.scalarAst\n *\n * Eliminating (isolating) one free variable yields a relation among the union of\n * the two governing sets — e.g. Landauer `k_B T ln2` ≟ Planck–Einstein `h ν`\n * gives `ν = (k_B ln2 / h) · T`, the \"Landauer photon\".\n *\n * CRITICAL — this is NOT new physics and NOT a bridge. It is the algebraic\n * consequence of an UNADJUDICATED identification, surfaced for a physicist to\n * judge (Part-VI §XXVII-B: the enumerator proposes, humans dispose). Every\n * emitted record carries `status: 'unadjudicated'` — a literal that is NOT a\n * member of `BridgeEquationStatus`, so a proposal can never be assigned where a\n * catalog entry is expected. The generator NEVER writes `BRIDGE_EQUATIONS` and a\n * proposal is NEVER added to `CANONICAL_GRAPH` (no coincidence-amplifying loop).\n *\n * Scope (v0.24.0 pilot): canonical-only `promising` candidates whose BOTH source\n * equations (a) have a non-null `dimensional.monomial` (determinate) and (b) are\n * `epistemicStatus: 'fully-quantitative'` (so the eliminated prefactor is a\n * closed numeric constant, not an operator-valued stub — this gates out\n * `CE-jarzynski`). See `docs/planning/v0.24.0-{Design,Review-Findings}.md`.\n *\n * INTERNAL tooling — deliberately NOT re-exported from `src/index.ts`.\n *\n * @module composition/proposed-bridges\n */\n\nimport { Fraction } from '@danielsimonjr/mathts-core';\nimport type { ExprNode } from '../dimensional/validator.js';\nimport { validate } from '../dimensional/validator.js';\nimport { sym, symbolPower } from '../dimensional/ast-builders.js';\nimport type { Dimension } from '../dimensional/types.js';\nimport { DIMENSIONLESS } from '../dimensional/types.js';\nimport { equals, format } from '../dimensional/algebra.js';\nimport type { DimensionalVariable } from '../dimensional/buckingham.js';\nimport type { BridgeEquationStatus } from '../bridges/index.js';\nimport { canonicalByTarget, canonicalById } from '../canonical/registry.js';\nimport type { KnownIssue } from '../bridges/index.js';\nimport { BRIDGE_EQUATIONS } from '../bridges/index.js';\nimport { catalogIdNumber } from '../bridges/catalog-load.js';\nimport { normalForm } from '../canonical/normal-form.js';\nimport { isRegisteredConstant } from '../dimensional/symbolic-constants.js';\nimport { forEachScalarLeaf, isDecimalLiteral, mapScalarLeaves } from '../dimensional/ast-leaves.js';\nimport { evalExpr } from './expr-eval.js';\nimport { rankDiscoveries, isPromisingTier } from './discovery.js';\nimport type { VettedCandidate } from './discovery.js';\nimport { CANONICAL_GRAPH } from './canonical-graph.js';\nimport { CATALOG_GRAPH } from './catalog-graph.js';\nimport { rationalExponentOf } from './formula-shape.js';\nimport { equalUpToConstant } from './algebraic-equivalence.js';\nimport { formatRational, fractionToNumber } from './rational-exponent.js';\n\n// ── monomial algebra over flat ExprNode forms ───────────────────────────────\n\n/**\n * A flat monomial: leaf name → its dimension and signed exact exponent.\n * `k_B·T·ln2 / h` ⇒ {k_B:+1, T:+1, ln2:+1, h:-1}. The exponent is a core\n * `Fraction`, so solving for a cubed leaf carries `1/3`, not\n * `0.3333333333333333`, and a cancellation is an exact zero.\n *\n * @internal\n */\nexport type Mono = Map<string, { dim: Dimension; exp: Fraction }>;\n\nconst ONE = new Fraction(1);\nconst MINUS_ONE = new Fraction(-1);\n\n/** Thrown when an AST is not a product / quotient / integer-power of symbols. @internal */\nexport class NotAMonomialError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotAMonomialError';\n }\n}\n\nfunction mergeInto(into: Mono, from: Mono, scale: Fraction): void {\n for (const [name, { dim, exp }] of from) {\n const cur = into.get(name);\n if (cur === undefined) {\n into.set(name, { dim, exp: exp.multiply(scale) });\n } else {\n if (!equals(cur.dim, dim)) {\n throw new NotAMonomialError(\n `leaf '${name}' appears with inconsistent dimensions`,\n );\n }\n cur.exp = cur.exp.add(exp.multiply(scale));\n }\n }\n}\n\n/**\n * Decompose a flat-monomial `ExprNode` into a leaf→exponent map. Throws\n * `NotAMonomialError` on sums, differences, or non-symbol bases — this is the\n * AST-level monomial gate.\n *\n * @internal\n */\nexport function toMonomial(ast: ExprNode): Mono {\n const out: Mono = new Map();\n switch (ast.kind) {\n case 'symbol':\n out.set(ast.name, { dim: ast.dim, exp: ONE });\n return out;\n case 'op':\n switch (ast.op) {\n case '*':\n for (const a of ast.args) mergeInto(out, toMonomial(a), ONE);\n return out;\n case '/': {\n const [num, ...dens] = ast.args;\n mergeInto(out, toMonomial(num), ONE);\n for (const d of dens) mergeInto(out, toMonomial(d), MINUS_ONE);\n return out;\n }\n case '^': {\n const [base, expNode] = ast.args;\n if (expNode.kind !== 'symbol') {\n throw new NotAMonomialError('non-literal exponent');\n }\n const n = rationalExponentOf(expNode.name);\n if (n === undefined) {\n throw new NotAMonomialError(`non-numeric exponent '${expNode.name}'`);\n }\n mergeInto(out, toMonomial(base), n);\n return out;\n }\n default:\n throw new NotAMonomialError(`operator '${ast.op}' is not monomial`);\n }\n default:\n throw new NotAMonomialError(`node kind '${ast.kind}' is not monomial`);\n }\n}\n\n/** Rebuild a flat-monomial `ExprNode` from a leaf→exponent map (numerator =\n * positive exponents, denominator = negative). Zero exponents drop out. The\n * exponent literal is the double built from the fraction (`1/3` is written\n * `0.3333333333333333`), so one rational is always one spelling.\n *\n * This is not merged with `monomialToExpr` (composition/probe/generator.ts),\n * which writes one product with negative exponents in code-unit name order;\n * this one orders names by `localeCompare` and splits a quotient. The\n * proposals' printed formulas and the IC dedup key read this tree, so one\n * builder would move them. Both build each factor with `symbolPower`.\n * @internal */\nexport function fromMonomial(m: Mono): ExprNode {\n const factor = (name: string, dim: Dimension, e: Fraction): ExprNode =>\n symbolPower(sym(name, dim), fractionToNumber(e));\n\n const num: ExprNode[] = [];\n const den: ExprNode[] = [];\n for (const [name, { dim, exp }] of [...m].sort((a, b) => a[0].localeCompare(b[0]))) {\n if (exp.isZero()) continue;\n if (exp.numerator > 0n) num.push(factor(name, dim, exp));\n else den.push(factor(name, dim, exp.abs()));\n }\n const product = (xs: ExprNode[]): ExprNode =>\n xs.length === 1 ? xs[0] : { kind: 'op', op: '*', args: xs };\n\n const numerator = num.length === 0 ? sym('1', DIMENSIONLESS) : product(num);\n if (den.length === 0) return numerator;\n return { kind: 'op', op: '/', args: [numerator, product(den)] };\n}\n\n// ── the proposal record ─────────────────────────────────────────────────────\n\n/**\n * A machine-DERIVED candidate bridge — the MATH ONLY. The algebraic consequence\n * of an UNADJUDICATED identification; never a status claim. Structurally distinct\n * from `BridgeEquationEntry` (omits every physics-judgment field) and carries the\n * literal `status: 'unadjudicated'`, which is NOT a `BridgeEquationStatus`.\n *\n * @internal\n */\nexport interface ProposedBridge {\n /** `IC-<sorted-a>--<sorted-b>--<solvedFor>`. */\n readonly id: string;\n readonly derivedFrom: {\n readonly identification: {\n readonly a: string;\n readonly b: string;\n readonly dim: string;\n /**\n * The source row's magnitude evidence: true when it was `promising` (the magnitude\n * falsifier ran and could have failed), false when it was `promising-unchecked` (the gate\n * abstained, or its pass was anchor-invariant). A proposal from an unchecked\n * identification is printed as such.\n */\n readonly magnitudeEvidence: boolean;\n };\n readonly sourceEquationIds: readonly [string, string];\n readonly solvedFor: string;\n };\n readonly target: DimensionalVariable;\n /** Free (non-constant) inputs of the derived relation. */\n readonly governing: readonly DimensionalVariable[];\n readonly formulaLatex: string;\n /** Dimensionally-VALIDATED derived RHS (round-trips to `dimensionalSignature`). */\n readonly scalarAst: ExprNode;\n /** `format()` of the inferred dimension — same convention as the catalog. */\n readonly dimensionalSignature: string;\n /** Mechanical derivation description — NO physics claim. */\n readonly provenance: string;\n /** Other identifications that derive the SAME relation (same normal form, up\n * to dimensionless constants), collapsed into this proposal by the dedup pass.\n * Empty unless a wider candidate scope produced structural duplicates. */\n readonly alsoDerivableFrom: readonly string[];\n /** ALWAYS the literal 'unadjudicated'. NOT a BridgeEquationStatus. */\n readonly status: 'unadjudicated';\n /** Numerically evaluate the derived RHS; constants auto-resolve, supply the\n * free `governing` leaves (e.g. `{ T: 300 }`). */\n evaluate(values: Readonly<Record<string, number>>): number;\n}\n\nconst isConstant = isRegisteredConstant;\n\n/** One leaf of a monomial with its exact exponent. @internal */\nexport interface MonoLeaf {\n readonly name: string;\n readonly dim: Dimension;\n readonly exp: Fraction;\n}\n\n/** The single non-constant leaf of a monomial, or null if 0 or >1. */\nfunction uniqueNonConstantLeaf(m: Mono): MonoLeaf | null {\n const free = [...m].filter(([name]) => !isConstant(name));\n if (free.length !== 1) return null;\n const [name, { dim, exp }] = free[0];\n return { name, dim, exp };\n}\n\n/** The LaTeX of a monomial, exponents rendered from their fractions (`y^{1/3}`). @internal */\nexport function latexFromMono(m: Mono): string {\n const num: string[] = [];\n const den: string[] = [];\n for (const [name, { exp }] of [...m].sort((a, b) => a[0].localeCompare(b[0]))) {\n if (exp.isZero()) continue;\n const magnitude = exp.abs();\n const tok = magnitude.equals(ONE) ? name : `${name}^{${formatRational(magnitude)}}`;\n (exp.numerator > 0n ? num : den).push(tok);\n }\n const n = num.join(' \\\\cdot ') || '1';\n return den.length ? `\\\\frac{${n}}{${den.join(' \\\\cdot ')}}` : n;\n}\n\n/**\n * Isolate `solveFor` from `m1 = m2`: `solveFor^e = m1 / (m2 without solveFor)`,\n * every exponent divided by `e`, exactly. `m2` must hold `solveFor`.\n *\n * @internal\n */\nexport function isolateLeaf(m1: Mono, m2: Mono, solveFor: MonoLeaf): Mono {\n const result: Mono = new Map();\n mergeInto(result, m1, ONE);\n const m2NoSolve: Mono = new Map(m2);\n m2NoSolve.delete(solveFor.name);\n mergeInto(result, m2NoSolve, MINUS_ONE);\n if (!solveFor.exp.equals(ONE)) {\n for (const v of result.values()) v.exp = v.exp.divide(solveFor.exp);\n }\n return result;\n}\n\n// ── leaf-name canonicalization ──────────────────────────────────────────────\n// A canonical equation's `scalarAst` uses private symbols (`T`) while its\n// `dimensional.governing` and the whole composition graph (and bridge `symbolic`\n// forms) use quantity names (`temperature`). Aligning the AST leaves to the\n// governing names lets a derivation from a canonical equation and one from a\n// bridge edge of the SAME physics collapse under `dedupByNormalForm`.\n\nfunction collectLeafDims(ast: ExprNode, into: Map<string, Dimension>): void {\n forEachScalarLeaf(\n ast,\n (leaf) => {\n if (!into.has(leaf.name)) into.set(leaf.name, leaf.dim);\n },\n {},\n );\n}\n\n/** Map each non-constant `scalarAst` leaf to the governing quantity of equal\n * dimension, when that match is unique (else leave it — never guess). */\nfunction leafCanonMap(\n scalarAst: ExprNode,\n governing: readonly DimensionalVariable[],\n): Map<string, string> {\n const leaves = new Map<string, Dimension>();\n collectLeafDims(scalarAst, leaves);\n const govFree = governing.filter((g) => !isConstant(g.name));\n const map = new Map<string, string>();\n for (const [leaf, dim] of leaves) {\n if (isConstant(leaf) || isDecimalLiteral(leaf)) continue;\n if (govFree.some((g) => g.name === leaf)) continue; // already a graph name\n const matches = govFree.filter((g) => equals(g.dim, dim));\n if (matches.length === 1) map.set(leaf, matches[0].name);\n }\n return map;\n}\n\nfunction renameLeaves(ast: ExprNode, map: ReadonlyMap<string, string>): ExprNode {\n if (map.size === 0) return ast;\n return mapScalarLeaves(\n ast,\n (leaf) => {\n const r = map.get(leaf.name);\n return r ? { ...leaf, name: r } : leaf;\n },\n {},\n );\n}\n\n// ── the generator ───────────────────────────────────────────────────────────\n\n/**\n * An admissible source for the elimination: a target name backed by a flat\n * monomial `scalarAst` whose prefactor is a closed constant. Canonical equations\n * and bridge edges both project to this shape, so the generator no longer needs\n * to know which it came from.\n */\ninterface EquationSource {\n /** `CE-…` (canonical) or `BE-<n>` (bridge). */\n readonly id: string;\n readonly kind: 'canonical' | 'bridge';\n readonly scalarAst: ExprNode;\n readonly targetDim: Dimension;\n /** `epistemicStatus` (canonical) or `confidence` (bridge) — recorded, not gated. */\n readonly grade: string;\n}\n\n/** True if the monomial carries a dimensionless leaf that is neither a known\n * constant, a numeric literal, NOR a declared input quantity — i.e. an\n * operator-valued STUB (e.g. Jarzynski's `ln_avg_exp_minus_betaW`), not a clean\n * dimensionless INPUT like a coupling constant (BE-18's `yukawa-coupling`). */\nfunction hasNonConstantStub(m: Mono, inputs: ReadonlySet<string>): boolean {\n for (const [name, { dim }] of m) {\n if (\n equals(dim, DIMENSIONLESS) &&\n !isConstant(name) &&\n !isDecimalLiteral(name) &&\n !inputs.has(name)\n ) {\n return true;\n }\n }\n return false;\n}\n\n/** ALL admissible sources for `name` — every canonical equation AND every bridge\n * edge whose target is `name` and whose form is a clean monomial. A target with\n * several sources (e.g. BE-42 Hawking's two parametrisations) is DE-AMBIGUATED by\n * enumeration, not skipped; coinciding derivations collapse later under dedup.\n * @internal */\nexport function resolveSources(name: string): EquationSource[] {\n const out: EquationSource[] = [];\n\n // Canonical: a determinate monomial AND a fully-quantitative form.\n for (const e of canonicalByTarget(name)) {\n if (\n e.scalarAst &&\n e.dimensional.monomial !== null &&\n e.epistemicStatus === 'fully-quantitative'\n ) {\n // Align the AST's private leaf symbols (`T`) with the governing quantity\n // names (`temperature`) so canonical- and bridge-sourced derivations of the\n // same relation collapse under dedup.\n const scalarAst = renameLeaves(\n e.scalarAst,\n leafCanonMap(e.scalarAst, e.dimensional.governing),\n );\n out.push({\n id: e.id,\n kind: 'canonical',\n scalarAst,\n targetDim: e.dimensional.target.dim,\n grade: e.epistemicStatus,\n });\n }\n }\n\n // Bridge: edges carrying a clean-monomial `symbolic` form. `confidence` is about\n // FRAMING, not formula completeness, so it is recorded — not gated; the\n // structural stub check enforces a closed prefactor instead.\n for (const edge of CATALOG_GRAPH) {\n if (edge.target.name !== name || !edge.symbolic) continue;\n let m: Mono;\n try {\n m = toMonomial(edge.symbolic);\n } catch (err) {\n if (err instanceof NotAMonomialError) continue;\n throw err;\n }\n if (hasNonConstantStub(m, new Set(edge.sources.map((s) => s.name)))) continue;\n const dim = validate(edge.symbolic).inferredDimension;\n if (!dim || !equals(dim, edge.target.dim)) continue;\n out.push({\n id: edge.beId !== null ? `BE-${edge.beId}` : edge.id,\n kind: 'bridge',\n scalarAst: edge.symbolic,\n targetDim: edge.target.dim,\n grade: edge.confidence,\n });\n }\n\n return out;\n}\n\n/**\n * Derive the implied relation for each identification in `candidates` in either promising tier\n * (`promising` or `promising-unchecked`, {@link isPromisingTier}); each proposal records which in\n * `derivedFrom.identification.magnitudeEvidence`.\n * Returns ONE proposal per admissible candidate (Adam M2), structurally\n * de-duplicated (`dedupByNormalForm`).\n *\n * Candidate-set-agnostic: pass `rankDiscoveries(CANONICAL_GRAPH)` (default),\n * `…(CATALOG_GRAPH)`, or `…([...CATALOG_GRAPH, ...CANONICAL_GRAPH])` to widen the\n * source — the CLI `discover --derive` forwards whichever `--source=` graph is\n * selected. Each endpoint is resolved by `resolveSource` to a canonical equation\n * OR a bridge edge with a clean-monomial `symbolic` form, so a candidate yields a\n * proposal when BOTH endpoints resolve (the Landauer photon, for instance, is\n * derivable both from `CE-landauer` and — at `--source=both` — from the BE-16\n * bridge). A target with SEVERAL admissible sources (BE-42 Hawking's two\n * parametrisations, or a canonical + bridge pair) is de-ambiguated by ENUMERATION\n * — every source pair is tried and coincidences collapse under dedup. HONEST\n * BOUNDARY: an endpoint with no clean-monomial source (a bridge with no `symbolic`\n * form or a non-monomial one) yields nothing.\n *\n * Pure; reads the registries, writes nothing.\n *\n * @internal\n */\nexport function deriveProposedBridges(\n candidates: readonly VettedCandidate[] = rankDiscoveries(CANONICAL_GRAPH),\n): readonly ProposedBridge[] {\n const out: ProposedBridge[] = [];\n for (const cand of candidates) {\n if (!isPromisingTier(cand.verdict)) continue;\n const [t0, t1] = [cand.a, cand.b].sort();\n // Enumerate every admissible source pair (de-ambiguation by enumeration).\n for (const E1 of resolveSources(t0)) {\n for (const E2 of resolveSources(t1)) {\n const p = derivePair(cand, t0, t1, E1, E2);\n if (p) out.push(p);\n }\n }\n }\n return disambiguateIds(dedupByNormalForm(out));\n}\n\n/** Derive one proposal from a fixed source pair, or null if inadmissible. */\nfunction derivePair(\n cand: VettedCandidate,\n t0: string,\n t1: string,\n E1: EquationSource,\n E2: EquationSource,\n): ProposedBridge | null {\n let m1: Mono;\n let m2: Mono;\n try {\n m1 = toMonomial(E1.scalarAst);\n m2 = toMonomial(E2.scalarAst);\n } catch (e) {\n if (e instanceof NotAMonomialError) return null;\n throw e;\n }\n\n const solveFor = uniqueNonConstantLeaf(m2);\n if (!solveFor) return null; // no single observable to isolate\n if (m1.has(solveFor.name)) return null; // degenerate overlap (Design §5.2)\n\n // Isolate solveFor from `m1 = m2`: solveFor^e = m1 / (m2 without solveFor).\n const result = isolateLeaf(m1, m2, solveFor);\n\n const scalarAst = fromMonomial(result);\n const dim = validate(scalarAst).inferredDimension;\n if (!dim || !equals(dim, solveFor.dim)) return null; // round-trip guard\n\n const governing: DimensionalVariable[] = [...result]\n .filter(([name]) => !isConstant(name))\n .map(([name, { dim: d }]) => ({ name, dim: d }));\n\n const src = (e: EquationSource) => `${e.id} (${e.kind}, ${e.grade})`;\n const provenance =\n `Monomial elimination of the UNADJUDICATED identification ${cand.a} ≡ ${cand.b} ` +\n `(${src(E1)}.rhs = ${src(E2)}.rhs), solved for '${solveFor.name}'. ` +\n `Algebraic consequence of a hypothesised identity — NOT a new physical ` +\n `relation and NOT a bridge. Invertible (any free leaf may be isolated).`;\n\n return {\n id: `IC-${t0}--${t1}--${solveFor.name}`,\n derivedFrom: {\n identification: { a: cand.a, b: cand.b, dim: cand.dim, magnitudeEvidence: cand.verdict === 'promising' },\n sourceEquationIds: [E1.id, E2.id],\n solvedFor: solveFor.name,\n },\n target: { name: solveFor.name, dim: solveFor.dim },\n governing,\n formulaLatex: `${solveFor.name} = ${latexFromMono(result)}`,\n scalarAst,\n dimensionalSignature: format(dim),\n provenance,\n alsoDerivableFrom: [],\n status: 'unadjudicated',\n evaluate: (values) => evalExpr(scalarAst, values),\n };\n}\n\n/** Make ids unique: when distinct proposals (different source pairs) collide on\n * the base `IC-<a>--<b>--<solveFor>` id, suffix each with its source pair. */\nfunction disambiguateIds(\n proposals: readonly ProposedBridge[],\n): readonly ProposedBridge[] {\n const counts = new Map<string, number>();\n for (const p of proposals) counts.set(p.id, (counts.get(p.id) ?? 0) + 1);\n return proposals.map((p) =>\n (counts.get(p.id) ?? 0) > 1\n ? { ...p, id: `${p.id}--${p.derivedFrom.sourceEquationIds.join('+')}` }\n : p,\n );\n}\n\n/**\n * The hash a proposal dedupes under: `normalForm` of its monomial rebuilt\n * from the exact exponents (so `0.3333333333333333` and\n * `0.33333333333333337` are one `1/3`), or of the AST itself when it is not\n * a monomial.\n */\nfunction dedupKey(p: ProposedBridge): string {\n let canonical: ExprNode = p.scalarAst;\n try {\n canonical = fromMonomial(toMonomial(p.scalarAst));\n } catch (err) {\n if (!(err instanceof NotAMonomialError)) throw err;\n }\n return `${normalForm(canonical)}::${p.dimensionalSignature}`;\n}\n\n/**\n * Collapse proposals that derive the SAME relation — equal `normalForm` (up to\n * dimensionless constants) of the exact monomial AND equal target dimension —\n * into the first, recording the others' identifications in\n * `alsoDerivableFrom`. Distinct stubs do NOT collapse (e.g. Landauer's dropped\n * `ln2` vs an operator stub hash differently), so this only merges genuine\n * structural twins that a wider candidate scope can produce (Design §9 #2).\n * Deterministic: input order is preserved.\n *\n * @internal\n */\nexport function dedupByNormalForm(\n proposals: readonly ProposedBridge[],\n): readonly ProposedBridge[] {\n const byKey = new Map<string, ProposedBridge>();\n const order: string[] = [];\n const extras = new Map<string, string[]>();\n\n for (const p of proposals) {\n let key = dedupKey(p);\n // On a hash miss, the algebraic step: a kept proposal of the same dimension\n // that is this one up to a constant owns the key (`a/(b/c)` for `a·c/b`).\n if (!byKey.has(key)) {\n const twin = order.find((k) => {\n const candidate = byKey.get(k)!;\n return candidate.dimensionalSignature === p.dimensionalSignature && equalUpToConstant(candidate.scalarAst, p.scalarAst).equal;\n });\n if (twin !== undefined) key = twin;\n }\n const kept = byKey.get(key);\n if (kept === undefined) {\n byKey.set(key, p);\n order.push(key);\n extras.set(key, [...p.alsoDerivableFrom]);\n } else {\n const tag = `${p.derivedFrom.identification.a} ≡ ${p.derivedFrom.identification.b}`;\n extras.get(key)!.push(tag, ...p.alsoDerivableFrom);\n }\n }\n\n return order.map((key) => {\n const p = byKey.get(key)!;\n const merged = [...new Set(extras.get(key)!)].sort();\n return merged.length === p.alsoDerivableFrom.length\n ? p\n : { ...p, alsoDerivableFrom: merged };\n });\n}\n\n// ── promotion gate (guardrail #5) ───────────────────────────────────────────\n\n/** The human inputs a proposal CANNOT supply — fabricating them is forbidden. */\ninterface PromotionEvidence {\n /** Literature anchor establishing the relation (appears / contradicts / neither). */\n readonly citation: string;\n /** Human-chosen catalog status — never defaulted. */\n readonly status: BridgeEquationStatus;\n /** Path to the recorded adversarial + literature review. */\n readonly reviewRef: string;\n}\n\n/** A review-ready promotion request — the artifact a human turns into a catalog\n * entry. Holding one does NOT mutate `BRIDGE_EQUATIONS`. */\ninterface PromotionRequest {\n readonly proposal: ProposedBridge;\n readonly evidence: PromotionEvidence;\n}\n\n/** Thrown when a proposal is promoted without the evidence the promotion requires. @internal */\nexport class MissingEvidenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MissingEvidenceError';\n }\n}\n\n/**\n * Gate a proposal toward the catalog. THROWS `MissingEvidenceError` unless every\n * human input is present and non-blank (operationalises \"null, not guessed\").\n * Returns a `PromotionRequest`; it deliberately does NOT synthesise a\n * `BridgeEquationEntry` — the physics-judgment fields are human work.\n *\n * @internal\n */\nexport function promoteProposal(\n proposal: ProposedBridge,\n evidence: PromotionEvidence,\n): PromotionRequest {\n const blank = (s: unknown): boolean => typeof s !== 'string' || s.trim() === '';\n if (blank(evidence.citation)) throw new MissingEvidenceError('citation required');\n if (blank(evidence.reviewRef)) throw new MissingEvidenceError('reviewRef required');\n if (!evidence.status) throw new MissingEvidenceError('status required (not defaulted)');\n return { proposal, evidence };\n}\n\n// ── PROPOSED_BRIDGES review surface (catalog field-shape, own registry) ──────\n\n/**\n * A derived proposal in the catalog's field SHAPE, for review — but in its OWN\n * registry and carrying `status: 'unadjudicated'` (NOT a `BridgeEquationStatus`).\n * This is deliberately NOT a `BridgeEquationEntry`: it omits the spec-only fields\n * (`source_part`/`source_section`/numeric `id`) and never enters `BRIDGE_EQUATIONS`,\n * which stays the faithful encoding of the specification.\n *\n * @internal\n */\ninterface ProposedBridgeEntry {\n readonly id: string;\n readonly name: string;\n readonly category: 'Z';\n readonly category_name: 'Machine-Derived Identity Consequences (UNADJUDICATED)';\n /** The two regimes bridged — the source equations' domains. */\n readonly bridges: readonly [string, string];\n /** ALWAYS 'unadjudicated' — not a catalog status. */\n readonly status: 'unadjudicated';\n readonly context: string;\n readonly formula_latex: string;\n readonly dimensional_signature: string;\n /** Honest references: a derivation note + the SOURCE equations' citations,\n * never a fabricated citation for the derived relation itself. */\n readonly references: readonly string[];\n readonly known_issues: readonly KnownIssue[];\n readonly derivedFrom: ProposedBridge['derivedFrom'];\n readonly notes: string;\n}\n\n/** Domain label + citations for a source id — canonical (`CE-…`) or bridge\n * (`BE-<n>`), so the entry surface works for either source kind. */\nfunction equationMeta(id: string): { domain: string; references: readonly string[] } {\n const ce = canonicalById(id);\n if (ce) return { domain: ce.domain, references: ce.references };\n const n = catalogIdNumber(id);\n const be = n === undefined ? undefined : BRIDGE_EQUATIONS.find((e) => e.id === n);\n if (be) return { domain: `${be.bridges[0]}↔${be.bridges[1]} (${be.status})`, references: be.references };\n return { domain: 'unknown', references: [] };\n}\n\n/** Render a `ProposedBridge` into the catalog field-shape, filled honestly. @internal */\nexport function toProposedEntry(p: ProposedBridge): ProposedBridgeEntry {\n const [id1, id2] = p.derivedFrom.sourceEquationIds;\n const M1 = equationMeta(id1);\n const M2 = equationMeta(id2);\n const { a, b } = p.derivedFrom.identification;\n const srcRefs = [\n [id1, M1] as const,\n [id2, M2] as const,\n ].flatMap(([id, m]) => m.references.map((r) => `source ${id}: ${r}`));\n return {\n id: p.id,\n name: `${a} ≡ ${b} ⇒ ${p.derivedFrom.solvedFor} (derived)`,\n category: 'Z',\n category_name: 'Machine-Derived Identity Consequences (UNADJUDICATED)',\n bridges: [M1.domain, M2.domain],\n status: 'unadjudicated',\n context:\n `Algebraic consequence of the UNADJUDICATED identification ${a} ≡ ${b} ` +\n `(${id1}.rhs = ${id2}.rhs), solved for ${p.derivedFrom.solvedFor}. A ` +\n `dimensional coincidence surfaced by the discovery funnel — no physical ` +\n `mechanism is asserted, and it is NOT a bridge.`,\n formula_latex: p.formulaLatex,\n dimensional_signature: p.dimensionalSignature,\n references: [\n 'Machine-derived; the combined relation has no independent literature.',\n ...srcRefs,\n ],\n known_issues: [\n {\n severity: 'phenomenological-ansatz',\n description:\n 'Machine-derived dimensional coincidence: the algebraic consequence ' +\n 'of an unadjudicated identification, with no mechanism and no ' +\n 'independent literature. Promotion to BRIDGE_EQUATIONS requires an ' +\n 'adversarial + literature review (Part-VI §XXVII-B) via promoteProposal().',\n fixable: 'unknown',\n },\n ],\n derivedFrom: p.derivedFrom,\n notes:\n p.provenance +\n (p.alsoDerivableFrom.length\n ? ` Also derivable from: ${p.alsoDerivableFrom.join('; ')}.`\n : ''),\n };\n}\n\n/**\n * The PROPOSED-BRIDGE review surface: derived identity-consequences in the\n * catalog's field shape, in their OWN registry, every entry `status:\n * 'unadjudicated'`. Separate from `BRIDGE_EQUATIONS` (the faithful spec\n * encoding), which this never mutates. Default scope: canonical-only — widen with\n * `deriveProposedBridges(rankDiscoveries(graph)).map(toProposedEntry)`.\n *\n * @internal\n */\nexport const PROPOSED_BRIDGES: readonly ProposedBridgeEntry[] =\n deriveProposedBridges().map(toProposedEntry);\n"]}
@@ -33,8 +33,8 @@ export interface RationalizeOptions {
33
33
  * @internal
34
34
  */
35
35
  export declare function rationalize(x: number, options?: RationalizeOptions): Fraction | undefined;
36
- /** The double a fraction stands for (numerator over denominator, one rounding). @internal */
36
+ /** The double a fraction stands for, MathTS `Fraction#toNumber`. @internal */
37
37
  export declare function fractionToNumber(f: Fraction): number;
38
- /** `9/8`, `2`, `-1/3`: the fraction in lowest terms, no sign on the denominator. @internal */
38
+ /** `9/8`, `2`, `-1/3`: the fraction in lowest terms, no sign on the denominator; MathTS `Fraction#toString`. @internal */
39
39
  export declare function formatRational(f: Fraction): string;
40
40
  //# sourceMappingURL=rational-exponent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rational-exponent.d.ts","sourceRoot":"","sources":["../../src/composition/rational-exponent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qGAAqG;IACrG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,QAAQ,GAAG,SAAS,CAiB7F;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAElD"}
1
+ {"version":3,"file":"rational-exponent.d.ts","sourceRoot":"","sources":["../../src/composition/rational-exponent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qGAAqG;IACrG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,QAAQ,GAAG,SAAS,CAiB7F;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAElD"}
@@ -54,12 +54,12 @@ export function rationalize(x, options = {}) {
54
54
  }
55
55
  return undefined;
56
56
  }
57
- /** The double a fraction stands for (numerator over denominator, one rounding). @internal */
57
+ /** The double a fraction stands for, MathTS `Fraction#toNumber`. @internal */
58
58
  export function fractionToNumber(f) {
59
- return Number(f.numerator) / Number(f.denominator);
59
+ return f.toNumber();
60
60
  }
61
- /** `9/8`, `2`, `-1/3`: the fraction in lowest terms, no sign on the denominator. @internal */
61
+ /** `9/8`, `2`, `-1/3`: the fraction in lowest terms, no sign on the denominator; MathTS `Fraction#toString`. @internal */
62
62
  export function formatRational(f) {
63
- return f.denominator === 1n ? f.numerator.toString() : `${f.numerator}/${f.denominator}`;
63
+ return f.toString();
64
64
  }
65
65
  //# sourceMappingURL=rational-exponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rational-exponent.js","sourceRoot":"","sources":["../../src/composition/rational-exponent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAU3C,SAAS,MAAM,CAAC,SAAmB,EAAE,CAAS,EAAE,SAAiB;IAC/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,OAAO,GAAuB,EAAE;IACrE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,2EAA2E;QAC3E,8EAA8E;QAC9E,kEAAkE;QAClE,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3F,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,gBAAgB,CAAC,CAAW;IAC1C,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AACrD,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,CAAW;IACxC,OAAO,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3F,CAAC","sourcesContent":["/**\n * Exact rationals from doubles, for exponents and prefactors.\n *\n * A monomial exponent read from an AST literal (`0.5`, `0.3333333333333333`)\n * and a prefactor recovered by a fit are doubles that stand for small\n * rationals. This module turns one into a core `Fraction` when a rational\n * with a bounded denominator reproduces it to a stated relative tolerance,\n * and refuses otherwise, so an irrational is never approximated into a\n * rational and a rounding error never becomes a denominator of 10¹⁶.\n *\n * `Fraction.fromNumber(x, cap)` is asked first. Before `@danielsimonjr/mathts-core`\n * 0.18.1 it could return a denominator above its cap; the cap and the tolerance\n * are still checked here, which costs nothing and catches a regression. When that answer is refused, a bounded-denominator scan (the one\n * `dimensional/buckingham.ts` uses for dimension exponents) is the second\n * method, so a rational the continued fraction stepped past is still found.\n *\n * @module composition/rational-exponent\n */\n\nimport { Fraction } from '@danielsimonjr/mathts-core';\n\n/** The denominator cap the Buckingham enumerator uses for exponents. @internal */\nexport const DEFAULT_MAX_DENOMINATOR = 720;\n\n/** Options of {@link rationalize}. @internal */\nexport interface RationalizeOptions {\n /** Largest denominator accepted (default {@link DEFAULT_MAX_DENOMINATOR}). */\n readonly maxDenominator?: number;\n /** Relative tolerance `|n/d − x| ≤ tolerance·|x|` (default 1e-9); for `x = 0` the match is exact. */\n readonly tolerance?: number;\n}\n\nfunction within(candidate: Fraction, x: number, tolerance: number): boolean {\n const value = fractionToNumber(candidate);\n if (x === 0) return value === 0;\n return Math.abs(value - x) <= tolerance * Math.abs(x);\n}\n\n/**\n * The rational with denominator ≤ `maxDenominator` that reproduces `x` to\n * the tolerance, or `undefined` when there is none.\n *\n * @internal\n */\nexport function rationalize(x: number, options: RationalizeOptions = {}): Fraction | undefined {\n if (!Number.isFinite(x)) return undefined;\n const maxDenominator = options.maxDenominator ?? DEFAULT_MAX_DENOMINATOR;\n const tolerance = options.tolerance ?? 1e-9;\n if (Number.isInteger(x)) return new Fraction(x, 1);\n const guess = Fraction.fromNumber(x, BigInt(maxDenominator));\n if (guess.denominator <= BigInt(maxDenominator) && within(guess, x, tolerance)) return guess;\n for (let d = 1; d <= maxDenominator; d++) {\n const n = Math.round(x * d);\n // A safe-integer n/d is the same correctly rounded quotient as the reduced\n // fraction's, so a miss is decided on doubles and no Fraction is built for it\n // (the clean-prefactor rule asks this 43,200 times for one miss).\n if (Number.isSafeInteger(n) && !(Math.abs(n / d - x) <= tolerance * Math.abs(x))) continue;\n const candidate = new Fraction(n, d);\n if (within(candidate, x, tolerance)) return candidate;\n }\n return undefined;\n}\n\n/** The double a fraction stands for (numerator over denominator, one rounding). @internal */\nexport function fractionToNumber(f: Fraction): number {\n return Number(f.numerator) / Number(f.denominator);\n}\n\n/** `9/8`, `2`, `-1/3`: the fraction in lowest terms, no sign on the denominator. @internal */\nexport function formatRational(f: Fraction): string {\n return f.denominator === 1n ? f.numerator.toString() : `${f.numerator}/${f.denominator}`;\n}\n"]}
1
+ {"version":3,"file":"rational-exponent.js","sourceRoot":"","sources":["../../src/composition/rational-exponent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAU3C,SAAS,MAAM,CAAC,SAAmB,EAAE,CAAS,EAAE,SAAiB;IAC/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,OAAO,GAAuB,EAAE;IACrE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,2EAA2E;QAC3E,8EAA8E;QAC9E,kEAAkE;QAClE,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC3F,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,CAAW;IAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,0HAA0H;AAC1H,MAAM,UAAU,cAAc,CAAC,CAAW;IACxC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC","sourcesContent":["/**\n * Exact rationals from doubles, for exponents and prefactors.\n *\n * A monomial exponent read from an AST literal (`0.5`, `0.3333333333333333`)\n * and a prefactor recovered by a fit are doubles that stand for small\n * rationals. This module turns one into a core `Fraction` when a rational\n * with a bounded denominator reproduces it to a stated relative tolerance,\n * and refuses otherwise, so an irrational is never approximated into a\n * rational and a rounding error never becomes a denominator of 10¹⁶.\n *\n * `Fraction.fromNumber(x, cap)` is asked first. Before `@danielsimonjr/mathts-core`\n * 0.18.1 it could return a denominator above its cap; the cap and the tolerance\n * are still checked here, which costs nothing and catches a regression. When that answer is refused, a bounded-denominator scan (the one\n * `dimensional/buckingham.ts` uses for dimension exponents) is the second\n * method, so a rational the continued fraction stepped past is still found.\n *\n * @module composition/rational-exponent\n */\n\nimport { Fraction } from '@danielsimonjr/mathts-core';\n\n/** The denominator cap the Buckingham enumerator uses for exponents. @internal */\nexport const DEFAULT_MAX_DENOMINATOR = 720;\n\n/** Options of {@link rationalize}. @internal */\nexport interface RationalizeOptions {\n /** Largest denominator accepted (default {@link DEFAULT_MAX_DENOMINATOR}). */\n readonly maxDenominator?: number;\n /** Relative tolerance `|n/d − x| ≤ tolerance·|x|` (default 1e-9); for `x = 0` the match is exact. */\n readonly tolerance?: number;\n}\n\nfunction within(candidate: Fraction, x: number, tolerance: number): boolean {\n const value = fractionToNumber(candidate);\n if (x === 0) return value === 0;\n return Math.abs(value - x) <= tolerance * Math.abs(x);\n}\n\n/**\n * The rational with denominator ≤ `maxDenominator` that reproduces `x` to\n * the tolerance, or `undefined` when there is none.\n *\n * @internal\n */\nexport function rationalize(x: number, options: RationalizeOptions = {}): Fraction | undefined {\n if (!Number.isFinite(x)) return undefined;\n const maxDenominator = options.maxDenominator ?? DEFAULT_MAX_DENOMINATOR;\n const tolerance = options.tolerance ?? 1e-9;\n if (Number.isInteger(x)) return new Fraction(x, 1);\n const guess = Fraction.fromNumber(x, BigInt(maxDenominator));\n if (guess.denominator <= BigInt(maxDenominator) && within(guess, x, tolerance)) return guess;\n for (let d = 1; d <= maxDenominator; d++) {\n const n = Math.round(x * d);\n // A safe-integer n/d is the same correctly rounded quotient as the reduced\n // fraction's, so a miss is decided on doubles and no Fraction is built for it\n // (the clean-prefactor rule asks this 43,200 times for one miss).\n if (Number.isSafeInteger(n) && !(Math.abs(n / d - x) <= tolerance * Math.abs(x))) continue;\n const candidate = new Fraction(n, d);\n if (within(candidate, x, tolerance)) return candidate;\n }\n return undefined;\n}\n\n/** The double a fraction stands for, MathTS `Fraction#toNumber`. @internal */\nexport function fractionToNumber(f: Fraction): number {\n return f.toNumber();\n}\n\n/** `9/8`, `2`, `-1/3`: the fraction in lowest terms, no sign on the denominator; MathTS `Fraction#toString`. @internal */\nexport function formatRational(f: Fraction): string {\n return f.toString();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"representative-values.d.ts","sourceRoot":"","sources":["../../src/composition/representative-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAS9D;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAC1C,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CA0DpC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,SAAS,CAEjC"}
1
+ {"version":3,"file":"representative-values.d.ts","sourceRoot":"","sources":["../../src/composition/representative-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAS9D;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAC1C,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAiEpC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,SAAS,CAEjC"}
@@ -99,6 +99,12 @@ export const REPRESENTATIVE_VALUES = {
99
99
  source: 'BE-26 DNA H-bond proton-tunneling distance ~1 Å (Löwdin 1963)',
100
100
  },
101
101
  'planck-length': { value: 1.616e-35, source: 'ℓ_P = √(ℏG/c³)' },
102
+ // The Hubble distance is a definite cosmological scale, not a generic length: c over the
103
+ // hubble-rate row above (a test pins the two rows together, so one cannot move alone).
104
+ 'hubble-distance': {
105
+ value: 1.363e26,
106
+ source: 'D_H = c/H0 = 2.998e8 m/s / 2.2e-18 s^-1 ≈ 1.363e26 m, with H0 ≈ 67 km/s/Mpc (Planck 2018), the hubble-rate row',
107
+ },
102
108
  // Canonical-graph atomic length scales — sourced so the gate compares real
103
109
  // magnitudes instead of falling back to the {mass: M_sun} anchor, which makes
104
110
  // a 1/mass quantity like the Compton wavelength absurdly small (~10⁻⁷³ m) and
@@ -1 +1 @@
1
- {"version":3,"file":"representative-values.js","sourceRoot":"","sources":["../../src/composition/representative-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAiBH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAuB;IACpD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAC;IACtD,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAClB,qCAAqC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,uCAAuC,CAChH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAE9B;IACF,2EAA2E;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,gCAAgC,EAAE;IAC3E,uBAAuB,EAAE;QACvB,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,gEAAgE;KACzE;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,0CAA0C;KACnD;IAED,2EAA2E;IAC3E,yBAAyB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC5E,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE;IACzE,0BAA0B,EAAE;QAC1B,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,uBAAuB;KAChC;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,sDAAsD;KAC/D;IAED,2EAA2E;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;IAC3D,gBAAgB,EAAE;QAChB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,4DAA4D;KACrE;IAED,2EAA2E;IAC3E,iBAAiB,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,mCAAmC;KAC5C;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,iEAAiE;KAC1E;IACD,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,+DAA+D;KACxE;IACD,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAC/D,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,6DAA6D;IAC7D,oBAAoB,EAAE;QACpB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,mEAAmE;KAC5E;IACD,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,uCAAuC,EAAE;IAEpF,2EAA2E;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;CAC7D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY;IAEZ,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC","sourcesContent":["/**\n * Order-of-magnitude representative values for the discovery falsifier.\n *\n * The discovery loop (`discovery.ts`) vets a hypothesised identification a≡b,\n * but its numeric check (`retrodict`) runs from a single anchor and cannot\n * evaluate the quantities a dimensional coincidence \"unlocks\" — so it never\n * contradicts them, and they surface as `promising` (e.g.\n * `landauer-erasure-energy ≟ planck-mass-energy`, ~30 orders apart). The graph\n * structurally CANNOT supply the magnitudes that would falsify these.\n *\n * This table injects that missing ground truth: a sourced, order-of-magnitude\n * value for quantities that have a WELL-DEFINED physical scale. Two classes are\n * deliberately ABSENT:\n * - generic quantities (`mass`, `energy`, `length`, …) — no single scale (the\n * discovery gate now reads these from the graph at the anchor instead, see\n * `discovery.ts`); and\n * - speculative-physics quantities with no agreed scale (`dark-fermion-mass`,\n * `scalar-field-value`, `inflation-hubble-energy`, `boundary-length`, the\n * time-dependent `coarsening-length`) — a value would be fabrication, so the\n * gate correctly abstains on them.\n * When a value is absent the gate abstains; it never false-rejects on unknowns.\n *\n * Values are order-of-magnitude estimates (good to ~1 order), each carrying its\n * provenance. Nothing here is fabricated; coarse by design. When the canonical-\n * equation registry lands it can supply these centrally and this table folds in.\n *\n * INTERNAL — surfaced via `upt discover`.\n *\n * @module composition/representative-values\n */\n\n/** A sourced order-of-magnitude value for one quantity. @internal */\nexport interface RepresentativeValue {\n /** Order-of-magnitude value in the quantity's SI unit (good to ~1 order). */\n readonly value: number;\n /** Provenance — how the estimate is obtained (a citation or a one-liner). */\n readonly source: string;\n /**\n * The value's stated uncertainty, as a standard deviation in decades of `log10|value|`.\n * Absent means {@link DEFAULT_SIGMA_DECADES}, the table's \"good to about one order\"; a row\n * states another only with a source for it. The graded magnitude gate\n * (`discovery.ts`, `magnitudeP`) reads it; the verdict threshold does not.\n */\n readonly sigmaDecades?: number;\n}\n\n/**\n * The σ in decades a representative value carries when its row states none: one decade, the\n * precision this table has always claimed (\"good to ~1 order\"). Not a per-row measurement.\n *\n * @internal\n */\nexport const DEFAULT_SIGMA_DECADES = 1;\n\n/**\n * The σ in decades of a representative value: its own `sigmaDecades`, else the default. A stated\n * σ that is not a finite number > 0 is refused with a `RangeError` naming the row's source: σ = 0\n * would make the falsifier's strength 0 (certain) and a negative or NaN σ would make it NaN.\n *\n * @internal\n */\nexport function sigmaDecadesOf(rv: RepresentativeValue): number {\n const sigma = rv.sigmaDecades;\n if (sigma === undefined) return DEFAULT_SIGMA_DECADES;\n if (!(Number.isFinite(sigma) && sigma > 0)) {\n throw new RangeError(\n `representative value sigmaDecades ${String(sigma)} (source: ${rv.source}) must be a finite number > 0 decades`,\n );\n }\n return sigma;\n}\n\n/**\n * Scale-specific quantities only. Keyed by the canonical quantity name used in\n * the composition graph. Generic quantities are intentionally omitted.\n *\n * @internal\n */\nexport const REPRESENTATIVE_VALUES: Readonly<\n Record<string, RepresentativeValue>\n> = {\n // ── frequencies / rates [s^-1] ──────────────────────────────────────────\n 'hubble-rate': { value: 2.2e-18, source: 'H0 ≈ 67 km/s/Mpc (Planck 2018)' },\n 'grw-localization-rate': {\n value: 1e-16,\n source: 'GRW collapse rate λ ≈ 10^-16 s^-1 (Ghirardi–Rimini–Weber 1986)',\n },\n 'attempt-frequency': {\n value: 1e13,\n source: 'Debye/phonon attempt frequency ~10^13 Hz',\n },\n\n // ── energies [J] ────────────────────────────────────────────────────────\n 'landauer-erasure-energy': { value: 2.9e-21, source: 'kT·ln2 at T = 300 K' },\n 'planck-mass-energy': { value: 1.96e9, source: 'm_P·c² (m_P = √(ℏc/G))' },\n 'vacuum-expectation-value': {\n value: 3.94e-8,\n source: 'Higgs VEV v ≈ 246 GeV',\n },\n 'barrier-height': {\n value: 3.2e-20,\n source: 'BE-26 Löwdin DNA proton-transfer barrier V−E ~0.2 eV',\n },\n\n // ── masses [kg] ─────────────────────────────────────────────────────────\n 'planck-mass': { value: 2.176e-8, source: 'm_P = √(ℏc/G)' },\n 'tunneling-mass': {\n value: 1.673e-27,\n source: 'BE-26 tunneling particle is the proton, m_p = 1.673e-27 kg',\n },\n\n // ── lengths [m] ─────────────────────────────────────────────────────────\n 'foerster-radius': {\n value: 5e-9,\n source: 'typical FRET Förster radius ~5 nm',\n },\n 'donor-acceptor-distance': {\n value: 5e-9,\n source: 'BE-24 FRET donor–acceptor separation ~5 nm (same regime as R_0)',\n },\n 'barrier-width': {\n value: 1e-10,\n source: 'BE-26 DNA H-bond proton-tunneling distance ~1 Å (Löwdin 1963)',\n },\n 'planck-length': { value: 1.616e-35, source: 'ℓ_P = √(ℏG/c³)' },\n // Canonical-graph atomic length scales — sourced so the gate compares real\n // magnitudes instead of falling back to the {mass: M_sun} anchor, which makes\n // a 1/mass quantity like the Compton wavelength absurdly small (~10⁻⁷³ m) and\n // produces a spurious clash against the (fixed) Bohr radius.\n 'compton-wavelength': {\n value: 2.426e-12,\n source: 'electron Compton wavelength λ_C = h/(m_e c) = 2.43e-12 m (CODATA)',\n },\n 'bohr-radius': { value: 5.292e-11, source: 'Bohr radius a_0 = 5.29e-11 m (CODATA)' },\n\n // ── times [s] ───────────────────────────────────────────────────────────\n 'planck-time': { value: 5.39e-44, source: 't_P = √(ℏG/c⁵)' },\n};\n\n/**\n * The sourced order-of-magnitude value for `name`, or `undefined` when the\n * quantity has no well-defined representative scale (the gate then abstains).\n *\n * @internal\n */\nexport function representativeValue(\n name: string,\n): RepresentativeValue | undefined {\n return REPRESENTATIVE_VALUES[name];\n}\n"]}
1
+ {"version":3,"file":"representative-values.js","sourceRoot":"","sources":["../../src/composition/representative-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAiBH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAuB;IACpD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAC;IACtD,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,UAAU,CAClB,qCAAqC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,uCAAuC,CAChH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAE9B;IACF,2EAA2E;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,gCAAgC,EAAE;IAC3E,uBAAuB,EAAE;QACvB,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,gEAAgE;KACzE;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,0CAA0C;KACnD;IAED,2EAA2E;IAC3E,yBAAyB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC5E,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE;IACzE,0BAA0B,EAAE;QAC1B,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,uBAAuB;KAChC;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,sDAAsD;KAC/D;IAED,2EAA2E;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;IAC3D,gBAAgB,EAAE;QAChB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,4DAA4D;KACrE;IAED,2EAA2E;IAC3E,iBAAiB,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,mCAAmC;KAC5C;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,iEAAiE;KAC1E;IACD,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,+DAA+D;KACxE;IACD,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAC/D,yFAAyF;IACzF,uFAAuF;IACvF,iBAAiB,EAAE;QACjB,KAAK,EAAE,QAAQ;QACf,MAAM,EACJ,gHAAgH;KACnH;IACD,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,6DAA6D;IAC7D,oBAAoB,EAAE;QACpB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,mEAAmE;KAC5E;IACD,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,uCAAuC,EAAE;IAEpF,2EAA2E;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;CAC7D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY;IAEZ,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC","sourcesContent":["/**\n * Order-of-magnitude representative values for the discovery falsifier.\n *\n * The discovery loop (`discovery.ts`) vets a hypothesised identification a≡b,\n * but its numeric check (`retrodict`) runs from a single anchor and cannot\n * evaluate the quantities a dimensional coincidence \"unlocks\" — so it never\n * contradicts them, and they surface as `promising` (e.g.\n * `landauer-erasure-energy ≟ planck-mass-energy`, ~30 orders apart). The graph\n * structurally CANNOT supply the magnitudes that would falsify these.\n *\n * This table injects that missing ground truth: a sourced, order-of-magnitude\n * value for quantities that have a WELL-DEFINED physical scale. Two classes are\n * deliberately ABSENT:\n * - generic quantities (`mass`, `energy`, `length`, …) — no single scale (the\n * discovery gate now reads these from the graph at the anchor instead, see\n * `discovery.ts`); and\n * - speculative-physics quantities with no agreed scale (`dark-fermion-mass`,\n * `scalar-field-value`, `inflation-hubble-energy`, `boundary-length`, the\n * time-dependent `coarsening-length`) — a value would be fabrication, so the\n * gate correctly abstains on them.\n * When a value is absent the gate abstains; it never false-rejects on unknowns.\n *\n * Values are order-of-magnitude estimates (good to ~1 order), each carrying its\n * provenance. Nothing here is fabricated; coarse by design. When the canonical-\n * equation registry lands it can supply these centrally and this table folds in.\n *\n * INTERNAL — surfaced via `upt discover`.\n *\n * @module composition/representative-values\n */\n\n/** A sourced order-of-magnitude value for one quantity. @internal */\nexport interface RepresentativeValue {\n /** Order-of-magnitude value in the quantity's SI unit (good to ~1 order). */\n readonly value: number;\n /** Provenance — how the estimate is obtained (a citation or a one-liner). */\n readonly source: string;\n /**\n * The value's stated uncertainty, as a standard deviation in decades of `log10|value|`.\n * Absent means {@link DEFAULT_SIGMA_DECADES}, the table's \"good to about one order\"; a row\n * states another only with a source for it. The graded magnitude gate\n * (`discovery.ts`, `magnitudeP`) reads it; the verdict threshold does not.\n */\n readonly sigmaDecades?: number;\n}\n\n/**\n * The σ in decades a representative value carries when its row states none: one decade, the\n * precision this table has always claimed (\"good to ~1 order\"). Not a per-row measurement.\n *\n * @internal\n */\nexport const DEFAULT_SIGMA_DECADES = 1;\n\n/**\n * The σ in decades of a representative value: its own `sigmaDecades`, else the default. A stated\n * σ that is not a finite number > 0 is refused with a `RangeError` naming the row's source: σ = 0\n * would make the falsifier's strength 0 (certain) and a negative or NaN σ would make it NaN.\n *\n * @internal\n */\nexport function sigmaDecadesOf(rv: RepresentativeValue): number {\n const sigma = rv.sigmaDecades;\n if (sigma === undefined) return DEFAULT_SIGMA_DECADES;\n if (!(Number.isFinite(sigma) && sigma > 0)) {\n throw new RangeError(\n `representative value sigmaDecades ${String(sigma)} (source: ${rv.source}) must be a finite number > 0 decades`,\n );\n }\n return sigma;\n}\n\n/**\n * Scale-specific quantities only. Keyed by the canonical quantity name used in\n * the composition graph. Generic quantities are intentionally omitted.\n *\n * @internal\n */\nexport const REPRESENTATIVE_VALUES: Readonly<\n Record<string, RepresentativeValue>\n> = {\n // ── frequencies / rates [s^-1] ──────────────────────────────────────────\n 'hubble-rate': { value: 2.2e-18, source: 'H0 ≈ 67 km/s/Mpc (Planck 2018)' },\n 'grw-localization-rate': {\n value: 1e-16,\n source: 'GRW collapse rate λ ≈ 10^-16 s^-1 (Ghirardi–Rimini–Weber 1986)',\n },\n 'attempt-frequency': {\n value: 1e13,\n source: 'Debye/phonon attempt frequency ~10^13 Hz',\n },\n\n // ── energies [J] ────────────────────────────────────────────────────────\n 'landauer-erasure-energy': { value: 2.9e-21, source: 'kT·ln2 at T = 300 K' },\n 'planck-mass-energy': { value: 1.96e9, source: 'm_P·c² (m_P = √(ℏc/G))' },\n 'vacuum-expectation-value': {\n value: 3.94e-8,\n source: 'Higgs VEV v ≈ 246 GeV',\n },\n 'barrier-height': {\n value: 3.2e-20,\n source: 'BE-26 Löwdin DNA proton-transfer barrier V−E ~0.2 eV',\n },\n\n // ── masses [kg] ─────────────────────────────────────────────────────────\n 'planck-mass': { value: 2.176e-8, source: 'm_P = √(ℏc/G)' },\n 'tunneling-mass': {\n value: 1.673e-27,\n source: 'BE-26 tunneling particle is the proton, m_p = 1.673e-27 kg',\n },\n\n // ── lengths [m] ─────────────────────────────────────────────────────────\n 'foerster-radius': {\n value: 5e-9,\n source: 'typical FRET Förster radius ~5 nm',\n },\n 'donor-acceptor-distance': {\n value: 5e-9,\n source: 'BE-24 FRET donor–acceptor separation ~5 nm (same regime as R_0)',\n },\n 'barrier-width': {\n value: 1e-10,\n source: 'BE-26 DNA H-bond proton-tunneling distance ~1 Å (Löwdin 1963)',\n },\n 'planck-length': { value: 1.616e-35, source: 'ℓ_P = √(ℏG/c³)' },\n // The Hubble distance is a definite cosmological scale, not a generic length: c over the\n // hubble-rate row above (a test pins the two rows together, so one cannot move alone).\n 'hubble-distance': {\n value: 1.363e26,\n source:\n 'D_H = c/H0 = 2.998e8 m/s / 2.2e-18 s^-1 ≈ 1.363e26 m, with H0 ≈ 67 km/s/Mpc (Planck 2018), the hubble-rate row',\n },\n // Canonical-graph atomic length scales — sourced so the gate compares real\n // magnitudes instead of falling back to the {mass: M_sun} anchor, which makes\n // a 1/mass quantity like the Compton wavelength absurdly small (~10⁻⁷³ m) and\n // produces a spurious clash against the (fixed) Bohr radius.\n 'compton-wavelength': {\n value: 2.426e-12,\n source: 'electron Compton wavelength λ_C = h/(m_e c) = 2.43e-12 m (CODATA)',\n },\n 'bohr-radius': { value: 5.292e-11, source: 'Bohr radius a_0 = 5.29e-11 m (CODATA)' },\n\n // ── times [s] ───────────────────────────────────────────────────────────\n 'planck-time': { value: 5.39e-44, source: 't_P = √(ℏG/c⁵)' },\n};\n\n/**\n * The sourced order-of-magnitude value for `name`, or `undefined` when the\n * quantity has no well-defined representative scale (the gate then abstains).\n *\n * @internal\n */\nexport function representativeValue(\n name: string,\n): RepresentativeValue | undefined {\n return REPRESENTATIVE_VALUES[name];\n}\n"]}
@@ -30,6 +30,15 @@
30
30
  */
31
31
  import type { BridgeEdge } from './edge.js';
32
32
  import type { QuantityIdentification } from './compose.js';
33
+ /**
34
+ * Source values, plus a dimensionless group the edge multiplies when the
35
+ * ground truth names it. The group is not a source: Buckingham cannot see
36
+ * it, and a missing group is the unset coefficient, not a missing input.
37
+ * Exported for the own-equation magnitudes (`own-equation-magnitude.ts`),
38
+ * which evaluate an edge the same way.
39
+ * @internal
40
+ */
41
+ export declare function evaluationInputs(edge: BridgeEdge, values: ReadonlyMap<string, number>): Record<string, number>;
33
42
  /** Outcome of retrodicting one node. @public */
34
43
  export type RetrodictionOutcome = 'consistent' | 'inconsistent' | 'single' | 'unrecoverable';
35
44
  /** One derivation's recovered value for a masked node. @public */
@@ -94,6 +103,12 @@ export interface RetrodictionReport {
94
103
  /** The headline gate: no inconsistent node was found. */
95
104
  readonly allConsistent: boolean;
96
105
  }
106
+ /**
107
+ * True when the error says the edge does not fire here (or at all, for an unset coefficient).
108
+ * Exported so the own-equation magnitudes read an edge's refusal by this one rule.
109
+ * @internal
110
+ */
111
+ export declare function refusesThePoint(err: unknown): boolean;
97
112
  /**
98
113
  * Monotone forward EVALUATION: propagate values from `groundTruth` through
99
114
  * the graph (domain-checked; identifications supply identified names;
@@ -1 +1 @@
1
- {"version":3,"file":"retrodiction.d.ts","sourceRoot":"","sources":["../../src/composition/retrodiction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retrodiction.d.ts","sourceRoot":"","sources":["../../src/composition/retrodiction.ts"],"names":[],"mappings":"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"}