universal-physics-tensor 3.1.0 → 5.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 (238) hide show
  1. package/README.md +6 -6
  2. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  3. package/dist/atlas/catalog-formal-ref.js +2 -0
  4. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  5. package/dist/atlas/physjs-ref.d.ts +10 -4
  6. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  7. package/dist/atlas/physjs-ref.js +270 -4
  8. package/dist/atlas/physjs-ref.js.map +1 -1
  9. package/dist/bridges/be100-lyddane-sachs-teller.d.ts +41 -0
  10. package/dist/bridges/be100-lyddane-sachs-teller.d.ts.map +1 -0
  11. package/dist/bridges/be100-lyddane-sachs-teller.js +30 -0
  12. package/dist/bridges/be100-lyddane-sachs-teller.js.map +1 -0
  13. package/dist/bridges/be101-bkt-jump.d.ts +24 -0
  14. package/dist/bridges/be101-bkt-jump.d.ts.map +1 -0
  15. package/dist/bridges/be101-bkt-jump.js +29 -0
  16. package/dist/bridges/be101-bkt-jump.js.map +1 -0
  17. package/dist/bridges/be102-landauer-conductance.d.ts +24 -0
  18. package/dist/bridges/be102-landauer-conductance.d.ts.map +1 -0
  19. package/dist/bridges/be102-landauer-conductance.js +28 -0
  20. package/dist/bridges/be102-landauer-conductance.js.map +1 -0
  21. package/dist/bridges/be70-einstein-relation.d.ts +1 -1
  22. package/dist/bridges/be70-einstein-relation.d.ts.map +1 -1
  23. package/dist/bridges/be70-einstein-relation.js +4 -1
  24. package/dist/bridges/be70-einstein-relation.js.map +1 -1
  25. package/dist/bridges/be77-hagen-poiseuille.d.ts +50 -0
  26. package/dist/bridges/be77-hagen-poiseuille.d.ts.map +1 -0
  27. package/dist/bridges/be77-hagen-poiseuille.js +39 -0
  28. package/dist/bridges/be77-hagen-poiseuille.js.map +1 -0
  29. package/dist/bridges/be78-euler-buckling.d.ts +44 -0
  30. package/dist/bridges/be78-euler-buckling.d.ts.map +1 -0
  31. package/dist/bridges/be78-euler-buckling.js +33 -0
  32. package/dist/bridges/be78-euler-buckling.js.map +1 -0
  33. package/dist/bridges/be79-pull-in.d.ts +33 -0
  34. package/dist/bridges/be79-pull-in.d.ts.map +1 -0
  35. package/dist/bridges/be79-pull-in.js +35 -0
  36. package/dist/bridges/be79-pull-in.js.map +1 -0
  37. package/dist/bridges/be80-mott-gurney.d.ts +52 -0
  38. package/dist/bridges/be80-mott-gurney.d.ts.map +1 -0
  39. package/dist/bridges/be80-mott-gurney.js +38 -0
  40. package/dist/bridges/be80-mott-gurney.js.map +1 -0
  41. package/dist/bridges/be81-child-langmuir.d.ts +33 -0
  42. package/dist/bridges/be81-child-langmuir.d.ts.map +1 -0
  43. package/dist/bridges/be81-child-langmuir.js +38 -0
  44. package/dist/bridges/be81-child-langmuir.js.map +1 -0
  45. package/dist/bridges/be82-shockley-diode.d.ts +32 -0
  46. package/dist/bridges/be82-shockley-diode.d.ts.map +1 -0
  47. package/dist/bridges/be82-shockley-diode.js +37 -0
  48. package/dist/bridges/be82-shockley-diode.js.map +1 -0
  49. package/dist/bridges/be83-thomson.d.ts +46 -0
  50. package/dist/bridges/be83-thomson.d.ts.map +1 -0
  51. package/dist/bridges/be83-thomson.js +32 -0
  52. package/dist/bridges/be83-thomson.js.map +1 -0
  53. package/dist/bridges/be84-four-point.d.ts +45 -0
  54. package/dist/bridges/be84-four-point.d.ts.map +1 -0
  55. package/dist/bridges/be84-four-point.js +34 -0
  56. package/dist/bridges/be84-four-point.js.map +1 -0
  57. package/dist/bridges/be85-shot-noise.d.ts +30 -0
  58. package/dist/bridges/be85-shot-noise.d.ts.map +1 -0
  59. package/dist/bridges/be85-shot-noise.js +32 -0
  60. package/dist/bridges/be85-shot-noise.js.map +1 -0
  61. package/dist/bridges/be86-reynolds-analogy.d.ts +45 -0
  62. package/dist/bridges/be86-reynolds-analogy.d.ts.map +1 -0
  63. package/dist/bridges/be86-reynolds-analogy.js +30 -0
  64. package/dist/bridges/be86-reynolds-analogy.js.map +1 -0
  65. package/dist/bridges/be87-capacitor-noise.d.ts +27 -0
  66. package/dist/bridges/be87-capacitor-noise.d.ts.map +1 -0
  67. package/dist/bridges/be87-capacitor-noise.js +32 -0
  68. package/dist/bridges/be87-capacitor-noise.js.map +1 -0
  69. package/dist/bridges/be88-fermi-sea.d.ts +31 -0
  70. package/dist/bridges/be88-fermi-sea.d.ts.map +1 -0
  71. package/dist/bridges/be88-fermi-sea.js +35 -0
  72. package/dist/bridges/be88-fermi-sea.js.map +1 -0
  73. package/dist/bridges/be89-debye-cutoff.d.ts +39 -0
  74. package/dist/bridges/be89-debye-cutoff.d.ts.map +1 -0
  75. package/dist/bridges/be89-debye-cutoff.js +28 -0
  76. package/dist/bridges/be89-debye-cutoff.js.map +1 -0
  77. package/dist/bridges/be90-debye-heat.d.ts +30 -0
  78. package/dist/bridges/be90-debye-heat.d.ts.map +1 -0
  79. package/dist/bridges/be90-debye-heat.js +35 -0
  80. package/dist/bridges/be90-debye-heat.js.map +1 -0
  81. package/dist/bridges/be91-einstein-solid.d.ts +30 -0
  82. package/dist/bridges/be91-einstein-solid.d.ts.map +1 -0
  83. package/dist/bridges/be91-einstein-solid.js +37 -0
  84. package/dist/bridges/be91-einstein-solid.js.map +1 -0
  85. package/dist/bridges/be92-sommerfeld-heat.d.ts +30 -0
  86. package/dist/bridges/be92-sommerfeld-heat.d.ts.map +1 -0
  87. package/dist/bridges/be92-sommerfeld-heat.js +34 -0
  88. package/dist/bridges/be92-sommerfeld-heat.js.map +1 -0
  89. package/dist/bridges/be93-curie-weiss.d.ts +41 -0
  90. package/dist/bridges/be93-curie-weiss.d.ts.map +1 -0
  91. package/dist/bridges/be93-curie-weiss.js +45 -0
  92. package/dist/bridges/be93-curie-weiss.js.map +1 -0
  93. package/dist/bridges/be94-pauli-paramagnetism.d.ts +30 -0
  94. package/dist/bridges/be94-pauli-paramagnetism.d.ts.map +1 -0
  95. package/dist/bridges/be94-pauli-paramagnetism.js +33 -0
  96. package/dist/bridges/be94-pauli-paramagnetism.js.map +1 -0
  97. package/dist/bridges/be95-ginzburg-landau.d.ts +46 -0
  98. package/dist/bridges/be95-ginzburg-landau.d.ts.map +1 -0
  99. package/dist/bridges/be95-ginzburg-landau.js +32 -0
  100. package/dist/bridges/be95-ginzburg-landau.js.map +1 -0
  101. package/dist/bridges/be96-upper-critical.d.ts +24 -0
  102. package/dist/bridges/be96-upper-critical.d.ts.map +1 -0
  103. package/dist/bridges/be96-upper-critical.js +27 -0
  104. package/dist/bridges/be96-upper-critical.js.map +1 -0
  105. package/dist/bridges/be97-ambegaokar-baratoff.d.ts +24 -0
  106. package/dist/bridges/be97-ambegaokar-baratoff.d.ts.map +1 -0
  107. package/dist/bridges/be97-ambegaokar-baratoff.js +30 -0
  108. package/dist/bridges/be97-ambegaokar-baratoff.js.map +1 -0
  109. package/dist/bridges/be98-bcs-jump.d.ts +40 -0
  110. package/dist/bridges/be98-bcs-jump.d.ts.map +1 -0
  111. package/dist/bridges/be98-bcs-jump.js +29 -0
  112. package/dist/bridges/be98-bcs-jump.js.map +1 -0
  113. package/dist/bridges/be99-mass-action.d.ts +33 -0
  114. package/dist/bridges/be99-mass-action.d.ts.map +1 -0
  115. package/dist/bridges/be99-mass-action.js +37 -0
  116. package/dist/bridges/be99-mass-action.js.map +1 -0
  117. package/dist/bridges/bridge-equations.d.ts +52 -0
  118. package/dist/bridges/bridge-equations.d.ts.map +1 -1
  119. package/dist/bridges/bridge-equations.js +52 -0
  120. package/dist/bridges/bridge-equations.js.map +1 -1
  121. package/dist/bridges/carrier-sign.d.ts +33 -0
  122. package/dist/bridges/carrier-sign.d.ts.map +1 -0
  123. package/dist/bridges/carrier-sign.js +57 -0
  124. package/dist/bridges/carrier-sign.js.map +1 -0
  125. package/dist/bridges/evaluators.d.ts.map +1 -1
  126. package/dist/bridges/evaluators.js +138 -2
  127. package/dist/bridges/evaluators.js.map +1 -1
  128. package/dist/bridges/index.d.ts +57 -3
  129. package/dist/bridges/index.d.ts.map +1 -1
  130. package/dist/bridges/index.js +577 -3
  131. package/dist/bridges/index.js.map +1 -1
  132. package/dist/canonical/entries/condensed-matter.d.ts +5 -5
  133. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  134. package/dist/canonical/entries/condensed-matter.js +6 -2
  135. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  136. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  137. package/dist/cases/brownian-sphere.js +4 -4
  138. package/dist/cases/brownian-sphere.js.map +1 -1
  139. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  140. package/dist/cases/lumped-cooling.js +2 -2
  141. package/dist/cases/lumped-cooling.js.map +1 -1
  142. package/dist/cases/resistor-noise.d.ts.map +1 -1
  143. package/dist/cases/resistor-noise.js +2 -2
  144. package/dist/cases/resistor-noise.js.map +1 -1
  145. package/dist/cases/skin-depth.d.ts.map +1 -1
  146. package/dist/cases/skin-depth.js +2 -2
  147. package/dist/cases/skin-depth.js.map +1 -1
  148. package/dist/cases/types.d.ts +11 -1
  149. package/dist/cases/types.d.ts.map +1 -1
  150. package/dist/cases/types.js +9 -0
  151. package/dist/cases/types.js.map +1 -1
  152. package/dist/cli/closed-form-range.d.ts +1 -1
  153. package/dist/cli/closed-form-range.js +1 -1
  154. package/dist/cli/commands/audit.d.ts.map +1 -1
  155. package/dist/cli/commands/audit.js +24 -5
  156. package/dist/cli/commands/audit.js.map +1 -1
  157. package/dist/cli/commands/derive.d.ts.map +1 -1
  158. package/dist/cli/commands/derive.js +28 -7
  159. package/dist/cli/commands/derive.js.map +1 -1
  160. package/dist/cli/commands/explain.d.ts.map +1 -1
  161. package/dist/cli/commands/explain.js +10 -1
  162. package/dist/cli/commands/explain.js.map +1 -1
  163. package/dist/cli/commands/search.d.ts.map +1 -1
  164. package/dist/cli/commands/search.js +10 -4
  165. package/dist/cli/commands/search.js.map +1 -1
  166. package/dist/cli/search-index.d.ts +8 -1
  167. package/dist/cli/search-index.d.ts.map +1 -1
  168. package/dist/cli/search-index.js +75 -14
  169. package/dist/cli/search-index.js.map +1 -1
  170. package/dist/cli/statuses.d.ts.map +1 -1
  171. package/dist/cli/statuses.js +7 -0
  172. package/dist/cli/statuses.js.map +1 -1
  173. package/dist/composition/aliases.d.ts +9 -0
  174. package/dist/composition/aliases.d.ts.map +1 -1
  175. package/dist/composition/aliases.js +30 -0
  176. package/dist/composition/aliases.js.map +1 -1
  177. package/dist/composition/bridge-analysis.d.ts +9 -1
  178. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  179. package/dist/composition/bridge-analysis.js +39 -6
  180. package/dist/composition/bridge-analysis.js.map +1 -1
  181. package/dist/composition/canonical-graph.d.ts +7 -6
  182. package/dist/composition/canonical-graph.d.ts.map +1 -1
  183. package/dist/composition/canonical-graph.js +18 -9
  184. package/dist/composition/canonical-graph.js.map +1 -1
  185. package/dist/composition/canonical-prefactors.d.ts +4 -2
  186. package/dist/composition/canonical-prefactors.d.ts.map +1 -1
  187. package/dist/composition/canonical-prefactors.js +46 -2
  188. package/dist/composition/canonical-prefactors.js.map +1 -1
  189. package/dist/composition/catalog-graph.d.ts +6 -4
  190. package/dist/composition/catalog-graph.d.ts.map +1 -1
  191. package/dist/composition/catalog-graph.js +8 -4
  192. package/dist/composition/catalog-graph.js.map +1 -1
  193. package/dist/composition/edge.d.ts +17 -2
  194. package/dist/composition/edge.d.ts.map +1 -1
  195. package/dist/composition/edge.js +62 -2
  196. package/dist/composition/edge.js.map +1 -1
  197. package/dist/composition/edges/applied-physicist.d.ts +73 -1
  198. package/dist/composition/edges/applied-physicist.d.ts.map +1 -1
  199. package/dist/composition/edges/applied-physicist.js +427 -25
  200. package/dist/composition/edges/applied-physicist.js.map +1 -1
  201. package/dist/composition/edges/condensed-r5.d.ts +105 -0
  202. package/dist/composition/edges/condensed-r5.d.ts.map +1 -0
  203. package/dist/composition/edges/condensed-r5.js +505 -0
  204. package/dist/composition/edges/condensed-r5.js.map +1 -0
  205. package/dist/composition/explain.d.ts.map +1 -1
  206. package/dist/composition/explain.js +30 -3
  207. package/dist/composition/explain.js.map +1 -1
  208. package/dist/composition/index.d.ts +3 -1
  209. package/dist/composition/index.d.ts.map +1 -1
  210. package/dist/composition/index.js +3 -1
  211. package/dist/composition/index.js.map +1 -1
  212. package/dist/composition/quantities/applied-physicist.d.ts +78 -0
  213. package/dist/composition/quantities/applied-physicist.d.ts.map +1 -1
  214. package/dist/composition/quantities/applied-physicist.js +303 -0
  215. package/dist/composition/quantities/applied-physicist.js.map +1 -1
  216. package/dist/composition/quantities/condensed-r5.d.ts +110 -0
  217. package/dist/composition/quantities/condensed-r5.d.ts.map +1 -0
  218. package/dist/composition/quantities/condensed-r5.js +359 -0
  219. package/dist/composition/quantities/condensed-r5.js.map +1 -0
  220. package/dist/composition/quantities.d.ts +1 -0
  221. package/dist/composition/quantities.d.ts.map +1 -1
  222. package/dist/composition/quantities.js +1 -0
  223. package/dist/composition/quantities.js.map +1 -1
  224. package/dist/composition/retrodiction.d.ts.map +1 -1
  225. package/dist/composition/retrodiction.js +6 -1
  226. package/dist/composition/retrodiction.js.map +1 -1
  227. package/dist/dimensional/bridge-check.d.ts +1 -1
  228. package/dist/dimensional/bridge-check.d.ts.map +1 -1
  229. package/dist/dimensional/bridge-check.js +27 -1
  230. package/dist/dimensional/bridge-check.js.map +1 -1
  231. package/dist/dimensional/units.d.ts.map +1 -1
  232. package/dist/dimensional/units.js +39 -7
  233. package/dist/dimensional/units.js.map +1 -1
  234. package/dist/index.d.ts +4 -2
  235. package/dist/index.d.ts.map +1 -1
  236. package/dist/index.js +4 -2
  237. package/dist/index.js.map +1 -1
  238. package/package.json +1 -1
@@ -21,9 +21,22 @@ import { evaluateKelvinPeltier } from '../../bridges/be73-kelvin-peltier.js';
21
21
  import { evaluateMagneticPressure } from '../../bridges/be74-magnetic-pressure.js';
22
22
  import { evaluateLondonPenetration } from '../../bridges/be75-london-penetration.js';
23
23
  import { evaluatePlasmaBeta } from '../../bridges/be76-plasma-beta.js';
24
+ import { evaluateHagenPoiseuille } from '../../bridges/be77-hagen-poiseuille.js';
25
+ import { evaluateEulerBuckling } from '../../bridges/be78-euler-buckling.js';
26
+ import { evaluatePullIn } from '../../bridges/be79-pull-in.js';
27
+ import { evaluateMottGurney } from '../../bridges/be80-mott-gurney.js';
28
+ import { evaluateChildLangmuir } from '../../bridges/be81-child-langmuir.js';
29
+ import { evaluateShockleyDiode } from '../../bridges/be82-shockley-diode.js';
30
+ import { sameCarrierSign } from '../../bridges/carrier-sign.js';
31
+ import { evaluateThomsonCoefficient } from '../../bridges/be83-thomson.js';
32
+ import { evaluateFourPointSheet } from '../../bridges/be84-four-point.js';
33
+ import { evaluateShotNoise } from '../../bridges/be85-shot-noise.js';
34
+ import { evaluateReynoldsAnalogy } from '../../bridges/be86-reynolds-analogy.js';
35
+ import { evaluateCapacitorNoise } from '../../bridges/be87-capacitor-noise.js';
24
36
  import { DIMENSIONLESS } from '../../dimensional/types.js';
25
37
  import { CONSTANTS } from '../../dimensional/symbolic-constants.js';
26
- import { alfvenSpeedQ, incidenceAngleQ, magneticFluxDensityQ, metricG00Q, plasmaMassDensityQ, poyntingFluxQ, properTemperatureQ, radiationPressureQ, reflectanceQ, tolmanInvariantQ, soundSpeedQ, fastMagnetosonicSpeedQ, electricalMobilityQ, einsteinTemperatureQ, carrierChargeQ, diffusivityQ, latentHeatQ, clapeyronTemperatureQ, specificVolumeChangeQ, clapeyronSlopeQ, redshiftMetricG00OneQ, redshiftMetricG00TwoQ, gravitationalFrequencyRatioQ, seebeckCoefficientQ, peltierTemperatureQ, peltierCoefficientQ, magneticPressureQ, londonPenetrationDepthQ, plasmaBetaQ, carrierDensityQ, effectiveMassQ, temperatureQ, } from '../quantities.js';
38
+ import { withBoundAliases } from '../edge.js';
39
+ import { alfvenSpeedQ, incidenceAngleQ, magneticFluxDensityQ, metricG00Q, plasmaMassDensityQ, poyntingFluxQ, properTemperatureQ, radiationPressureQ, reflectanceQ, tolmanInvariantQ, soundSpeedQ, fastMagnetosonicSpeedQ, electricalMobilityQ, einsteinTemperatureQ, carrierChargeQ, diffusivityQ, latentHeatQ, clapeyronTemperatureQ, specificVolumeChangeQ, clapeyronSlopeQ, redshiftMetricG00OneQ, redshiftMetricG00TwoQ, gravitationalFrequencyRatioQ, seebeckCoefficientQ, peltierTemperatureQ, peltierCoefficientQ, magneticPressureQ, londonPenetrationDepthQ, plasmaBetaQ, carrierDensityQ, effectiveMassQ, temperatureQ, pipeRadiusQ, pipePressureDropQ, dynamicViscosityQ, pipeLengthQ, poiseuilleFlowQ, youngsModulusQ, areaMomentQ, columnLengthQ, bucklingLoadQ, pullInStiffnessQ, pullInGapQ, pullInAreaQ, pullInVoltageQ, mottPermittivityQ, mottMobilityQ, mottVoltageQ, mottThicknessQ, mottGurneyCurrentQ, childCarrierMassQ, childVoltageQ, childGapQ, childLangmuirCurrentQ, shockleySaturationQ, shockleyVoltageQ, shockleyTemperatureQ, shockleyCurrentQ, thomsonTemperatureQ, seebeckSlopeQ, thomsonCoefficientQ, fourPointVoltageQ, fourPointCurrentQ, sheetResistanceQ, shotCurrentQ, shotNoiseQ, skinFrictionQ, stantonNumberQ, capacitorTemperatureQ, capacitanceQ, capacitorVoltageVarianceQ, } from '../quantities.js';
27
40
  const finite = Number.isFinite;
28
41
  const qsym = (q) => ({ kind: 'symbol', name: q.name, dim: q.dim });
29
42
  const csym = (name) => ({ kind: 'symbol', name, dim: CONSTANTS[name].dim });
@@ -34,6 +47,9 @@ const ratio = (num, den) => ({ kind: 'op', op: '/', args: [num, den] });
34
47
  const pow = (base, exp) => ({ kind: 'op', op: '^', args: [base, exp] });
35
48
  /** μ0 = 1/(ε0 c²). The same product the Alfvén and magnetosonic formulas use. */
36
49
  const mu0 = ratio(lit(1), prod(csym('epsilon_0'), pow(csym('c'), lit(2))));
50
+ /** π as a dimensionless leaf. `piMultipleValue` resolves the name. */
51
+ const pi = { kind: 'symbol', name: 'pi', dim: DIMENSIONLESS };
52
+ const expOf = (arg) => ({ kind: 'transcendental', fn: 'exp', arg });
37
53
  /** P_n = (I/c) (1+R) cos²θ. */
38
54
  const BE66_SYMBOLIC = prod(ratio(qsym(poyntingFluxQ), csym('c')), plus(lit(1), qsym(reflectanceQ)), pow({ kind: 'transcendental', fn: 'cos', arg: qsym(incidenceAngleQ) }, lit(2)));
39
55
  /** μ0 = 1/(ε0 c²). v_A = B / √(μ0 ρ). */
@@ -48,7 +64,7 @@ const BE68_SYMBOLIC = prod(qsym(properTemperatureQ), pow(prod(lit(-1), qsym(metr
48
64
  *
49
65
  * @public
50
66
  */
51
- export const be66Edge = {
67
+ export const be66Edge = withBoundAliases({
52
68
  id: 'be-66',
53
69
  beId: 66,
54
70
  kind: 'law',
@@ -77,7 +93,7 @@ export const be66Edge = {
77
93
  }).P_Pa,
78
94
  symbolic: BE66_SYMBOLIC,
79
95
  citation: 'OpenStax University Physics Volume 2, https://openstax.org/books/university-physics-volume-2/pages/16-4-momentum-and-radiation-pressure (absorber I/c, reflector 2I/c). The (1+R) cos²θ factor is this catalog\'s assembly.',
80
- };
96
+ });
81
97
  /**
82
98
  * BE-67 Alfvén speed: (magnetic-flux-density, plasma-mass-density) →
83
99
  * alfven-speed, `v_A = B / √(μ0 ρ)`. `ρ` is the total mass density.
@@ -86,7 +102,7 @@ export const be66Edge = {
86
102
  *
87
103
  * @public
88
104
  */
89
- export const be67Edge = {
105
+ export const be67Edge = withBoundAliases({
90
106
  id: 'be-67',
91
107
  beId: 67,
92
108
  kind: 'law',
@@ -111,7 +127,7 @@ export const be67Edge = {
111
127
  }).v_m_per_s,
112
128
  symbolic: BE67_SYMBOLIC,
113
129
  citation: 'Alfvén 1942 Nature 150:405. SI form B/√(μ0 ρ); ρ is the total mass density.',
114
- };
130
+ });
115
131
  /**
116
132
  * BE-68 Tolman–Ehrenfest: (proper-temperature, metric-g00) →
117
133
  * tolman-invariant, `T √(−g_00)`. Endpoints share the classical
@@ -120,7 +136,7 @@ export const be67Edge = {
120
136
  *
121
137
  * @public
122
138
  */
123
- export const be68Edge = {
139
+ export const be68Edge = withBoundAliases({
124
140
  id: 'be-68',
125
141
  beId: 68,
126
142
  kind: 'law',
@@ -145,7 +161,7 @@ export const be68Edge = {
145
161
  }).invariant_K,
146
162
  symbolic: BE68_SYMBOLIC,
147
163
  citation: 'Tolman & Ehrenfest 1930 Phys. Rev. 36:1791 (T0 √g_44). Catalog form T √(−g_00).',
148
- };
164
+ });
149
165
  /** |ω/k| = √(c_s² + B²/(μ0 ρ)), with μ0 = 1/(ε0 c²). */
150
166
  const BE69_SYMBOLIC = pow(plus(pow(qsym(soundSpeedQ), lit(2)), ratio(pow(qsym(magneticFluxDensityQ), lit(2)), prod(ratio(lit(1), prod(csym('epsilon_0'), pow(csym('c'), lit(2)))), qsym(plasmaMassDensityQ)))), lit(0.5));
151
167
  /** D = μ k_B T / q. */
@@ -164,7 +180,7 @@ const BE73_SYMBOLIC = prod(qsym(seebeckCoefficientQ), qsym(peltierTemperatureQ))
164
180
  *
165
181
  * @public
166
182
  */
167
- export const be69Edge = {
183
+ export const be69Edge = withBoundAliases({
168
184
  id: 'be-69',
169
185
  beId: 69,
170
186
  kind: 'law',
@@ -192,14 +208,14 @@ export const be69Edge = {
192
208
  }).v_m_per_s,
193
209
  symbolic: BE69_SYMBOLIC,
194
210
  citation: 'PhysJS.FastMagnetosonic.speed_eq. Perpendicular compressional phase speed. c_s = 0 is the Alfvén number of a different polarization.',
195
- };
211
+ });
196
212
  /**
197
213
  * BE-70 Einstein relation: (electrical-mobility, einstein-temperature,
198
214
  * carrier-charge) → diffusivity, `D = μ k_B T / q`.
199
215
  *
200
216
  * @public
201
217
  */
202
- export const be70Edge = {
218
+ export const be70Edge = withBoundAliases({
203
219
  id: 'be-70',
204
220
  beId: 70,
205
221
  kind: 'law',
@@ -213,12 +229,13 @@ export const be70Edge = {
213
229
  target: diffusivityQ,
214
230
  confidence: 'established',
215
231
  domain: {
216
- description: 'μ finite, T ≠ 0, q ≠ 0',
232
+ description: 'μ finite, T ≠ 0, q ≠ 0, and μ and q have the same sign',
217
233
  predicate: (i) => finite(i['electrical-mobility']) &&
218
234
  finite(i['einstein-temperature']) &&
219
235
  i['einstein-temperature'] !== 0 &&
220
236
  finite(i['carrier-charge']) &&
221
- i['carrier-charge'] !== 0,
237
+ i['carrier-charge'] !== 0 &&
238
+ sameCarrierSign(i['electrical-mobility'], i['carrier-charge']),
222
239
  },
223
240
  evaluate: (i) => evaluateEinsteinRelation({
224
241
  mu_m2_per_Vs: i['electrical-mobility'],
@@ -227,14 +244,14 @@ export const be70Edge = {
227
244
  }).D_m2_per_s,
228
245
  symbolic: BE70_SYMBOLIC,
229
246
  citation: 'PhysJS.EinsteinRelation.diffusion_eq. Drift cancels diffusion on a Boltzmann profile.',
230
- };
247
+ });
231
248
  /**
232
249
  * BE-71 Clapeyron slope: (specific-latent-heat, clapeyron-temperature,
233
250
  * specific-volume-change) → clapeyron-slope, `dP/dT = L/(T Δv)`.
234
251
  *
235
252
  * @public
236
253
  */
237
- export const be71Edge = {
254
+ export const be71Edge = withBoundAliases({
238
255
  id: 'be-71',
239
256
  beId: 71,
240
257
  kind: 'law',
@@ -262,7 +279,7 @@ export const be71Edge = {
262
279
  }).slope_Pa_per_K,
263
280
  symbolic: BE71_SYMBOLIC,
264
281
  citation: 'PhysJS.Clapeyron.slope_eq. L = T (s2−s1) is already substituted. The entropy slope is not a second edge.',
265
- };
282
+ });
266
283
  /**
267
284
  * BE-72 gravitational redshift: (redshift-metric-g00-1,
268
285
  * redshift-metric-g00-2) → gravitational-frequency-ratio,
@@ -271,7 +288,7 @@ export const be71Edge = {
271
288
  *
272
289
  * @public
273
290
  */
274
- export const be72Edge = {
291
+ export const be72Edge = withBoundAliases({
275
292
  id: 'be-72',
276
293
  beId: 72,
277
294
  kind: 'law',
@@ -296,7 +313,7 @@ export const be72Edge = {
296
313
  }).frequency_ratio,
297
314
  symbolic: BE72_SYMBOLIC,
298
315
  citation: 'PhysJS.GravitationalRedshift.frequency_ratio. Not PhysJS.TolmanEhrenfest.hydrostatic_constant. tolman_same_ratio is nested and is not this edge.',
299
- };
316
+ });
300
317
  /**
301
318
  * BE-73 Kelvin relation: (seebeck-coefficient, peltier-temperature) →
302
319
  * peltier-coefficient, `Π = S T`. Onsager reciprocity is the structure
@@ -304,7 +321,7 @@ export const be72Edge = {
304
321
  *
305
322
  * @public
306
323
  */
307
- export const be73Edge = {
324
+ export const be73Edge = withBoundAliases({
308
325
  id: 'be-73',
309
326
  beId: 73,
310
327
  kind: 'law',
@@ -326,7 +343,7 @@ export const be73Edge = {
326
343
  }).Pi_V,
327
344
  symbolic: BE73_SYMBOLIC,
328
345
  citation: 'PhysJS.KelvinRelation.peltier_eq. L12 = L21 is ThermoelectricOnsager.onsager, a structure field, not an axiom and not an input.',
329
- };
346
+ });
330
347
  /** p_B = B² / (2 μ0). The 2 is the inductor integral, not a Buckingham constant. */
331
348
  const BE74_SYMBOLIC = ratio(pow(qsym(magneticFluxDensityQ), lit(2)), prod(lit(2), mu0));
332
349
  /** λ_L = √(m / (μ0 n e²)). `e` is the elementary charge. */
@@ -340,7 +357,7 @@ const BE76_SYMBOLIC = ratio(prod(qsym(carrierDensityQ), csym('k_B'), qsym(temper
340
357
  *
341
358
  * @public
342
359
  */
343
- export const be74Edge = {
360
+ export const be74Edge = withBoundAliases({
344
361
  id: 'be-74',
345
362
  beId: 74,
346
363
  kind: 'law',
@@ -358,7 +375,7 @@ export const be74Edge = {
358
375
  evaluate: (i) => evaluateMagneticPressure({ B_T: i['magnetic-flux-density'] }).p_Pa,
359
376
  symbolic: BE74_SYMBOLIC,
360
377
  citation: 'PhysJS.MagneticPressure.pressure_eq. U = (L/2) I². C = 1 is the battery work per volume, not this pressure.',
361
- };
378
+ });
362
379
  /**
363
380
  * BE-75 London penetration depth: (effective-mass, carrier-density) →
364
381
  * london-penetration-depth, `λ_L = √(m/(μ0 n e²))`. `e` and `μ0` are
@@ -366,7 +383,7 @@ export const be74Edge = {
366
383
  *
367
384
  * @public
368
385
  */
369
- export const be75Edge = {
386
+ export const be75Edge = withBoundAliases({
370
387
  id: 'be-75',
371
388
  beId: 75,
372
389
  kind: 'law',
@@ -388,7 +405,7 @@ export const be75Edge = {
388
405
  }).lambda_m,
389
406
  symbolic: BE75_SYMBOLIC,
390
407
  citation: 'PhysJS.LondonPenetration.depth_eq. Units also admit μ0 e²/m. Not the classical skin depth.',
391
- };
408
+ });
392
409
  /**
393
410
  * BE-76 plasma beta: (carrier-density, temperature, magnetic-pressure) →
394
411
  * plasma-beta, `β = n k_B T / p_B`. The magnetic-pressure source is
@@ -398,7 +415,7 @@ export const be75Edge = {
398
415
  *
399
416
  * @public
400
417
  */
401
- export const be76Edge = {
418
+ export const be76Edge = withBoundAliases({
402
419
  id: 'be-76',
403
420
  beId: 76,
404
421
  kind: 'bridge',
@@ -425,7 +442,381 @@ export const be76Edge = {
425
442
  }).beta,
426
443
  symbolic: BE76_SYMBOLIC,
427
444
  citation: 'PhysJS.PlasmaBeta.beta_eq. p_B is PhysJS.MagneticPressure.pressure_eq. Using B²/μ0 is half of this beta. Not a plasma-β inequality.',
428
- };
445
+ });
446
+ /** Q = π R⁴ ΔP / (8 μ L). The 8 is the no-slip integral. */
447
+ const BE77_SYMBOLIC = ratio(prod(pi, pow(qsym(pipeRadiusQ), lit(4)), qsym(pipePressureDropQ)), prod(lit(8), qsym(dynamicViscosityQ), qsym(pipeLengthQ)));
448
+ /** P_cr = π² E I / L². Pinned ends. Not the cantilever load. */
449
+ const BE78_SYMBOLIC = ratio(prod(pow(pi, lit(2)), qsym(youngsModulusQ), qsym(areaMomentQ)), pow(qsym(columnLengthQ), lit(2)));
450
+ /** V_pi = √(8 k g0³ / (27 ε0 A)). The fold is g = 2 g0/3. */
451
+ const BE79_SYMBOLIC = pow(ratio(prod(lit(8), qsym(pullInStiffnessQ), pow(qsym(pullInGapQ), lit(3))), prod(lit(27), csym('epsilon_0'), qsym(pullInAreaQ))), lit(0.5));
452
+ /** J = (9/8) ε μ V² / d³. Not Child–Langmuir. */
453
+ const BE80_SYMBOLIC = ratio(prod(lit(9), qsym(mottPermittivityQ), qsym(mottMobilityQ), pow(qsym(mottVoltageQ), lit(2))), prod(lit(8), pow(qsym(mottThicknessQ), lit(3))));
454
+ /** J = (4 ε0 / 9) √(2 e / m) V^{3/2} / d². `e` is the elementary charge. */
455
+ const BE81_SYMBOLIC = ratio(prod(lit(4), csym('epsilon_0'), pow(ratio(prod(lit(2), csym('e')), qsym(childCarrierMassQ)), lit(0.5)), pow(qsym(childVoltageQ), lit(1.5))), prod(lit(9), pow(qsym(childGapQ), lit(2))));
456
+ /** I = I_s (exp(e V / (k_B T)) − 1). Ideality is 1. The minus is the literal −1. */
457
+ const BE82_SYMBOLIC = prod(qsym(shockleySaturationQ), plus(expOf(ratio(prod(csym('e'), qsym(shockleyVoltageQ)), prod(csym('k_B'), qsym(shockleyTemperatureQ)))), lit(-1)));
458
+ /** μ_T = T dS/dT. Not Π = S T. */
459
+ const BE83_SYMBOLIC = prod(qsym(thomsonTemperatureQ), qsym(seebeckSlopeQ));
460
+ /** R_s = (π / ln 2) (V / I). The radial 1/r field is a hypothesis. */
461
+ const BE84_SYMBOLIC = prod(ratio(pi, csym('ln2')), ratio(qsym(fourPointVoltageQ), qsym(fourPointCurrentQ)));
462
+ /** S_I = 2 e I. One-sided. `e` is the elementary charge. */
463
+ const BE85_SYMBOLIC = prod(lit(2), csym('e'), qsym(shotCurrentQ));
464
+ /** St = C_f / 2 at Pr = 1 with matched wall slopes. */
465
+ const BE86_SYMBOLIC = ratio(qsym(skinFrictionQ), lit(2));
466
+ /** ⟨v²⟩ = k_B T / C. One quadratic term. */
467
+ const BE87_SYMBOLIC = ratio(prod(csym('k_B'), qsym(capacitorTemperatureQ)), qsym(capacitanceQ));
468
+ /**
469
+ * BE-77 Hagen–Poiseuille: (radius, pressure drop, viscosity, length) →
470
+ * flux. The axial balance, centerline slope 0, and no-slip are hypotheses.
471
+ *
472
+ * @public
473
+ */
474
+ export const be77Edge = withBoundAliases({
475
+ id: 'be-77',
476
+ beId: 77,
477
+ kind: 'law',
478
+ label: 'Hagen–Poiseuille flux Q = π R⁴ ΔP / (8 μ L)',
479
+ sources: [pipeRadiusQ, pipePressureDropQ, dynamicViscosityQ, pipeLengthQ],
480
+ aliases: {
481
+ 'pipe-radius': ['R_m', 'R'],
482
+ 'pipe-pressure-drop': ['deltaP_Pa', 'deltaP'],
483
+ 'dynamic-viscosity': ['mu_Pa_s'],
484
+ 'pipe-length': ['L_m', 'L'],
485
+ },
486
+ target: poiseuilleFlowQ,
487
+ confidence: 'established',
488
+ domain: {
489
+ description: 'R > 0, ΔP finite, μ ≠ 0, L ≠ 0; circular pipe, not a square duct',
490
+ predicate: (i) => finite(i['pipe-radius']) &&
491
+ i['pipe-radius'] > 0 &&
492
+ finite(i['pipe-pressure-drop']) &&
493
+ finite(i['dynamic-viscosity']) &&
494
+ i['dynamic-viscosity'] !== 0 &&
495
+ finite(i['pipe-length']) &&
496
+ i['pipe-length'] !== 0,
497
+ },
498
+ evaluate: (i) => evaluateHagenPoiseuille({
499
+ R_m: i['pipe-radius'],
500
+ deltaP_Pa: i['pipe-pressure-drop'],
501
+ mu_Pa_s: i['dynamic-viscosity'],
502
+ L_m: i['pipe-length'],
503
+ }).Q_m3_per_s,
504
+ symbolic: BE77_SYMBOLIC,
505
+ citation: 'PhysJS.HagenPoiseuille.flow_eq. f_D Re = 64 follows from Darcy definitions. The Fanning factor is 16. Not a square duct.',
506
+ });
507
+ /**
508
+ * BE-78 Euler buckling: (modulus, area moment, length) → pinned load.
509
+ * The cantilever load is a different factor.
510
+ *
511
+ * @public
512
+ */
513
+ export const be78Edge = withBoundAliases({
514
+ id: 'be-78',
515
+ beId: 78,
516
+ kind: 'law',
517
+ label: 'Euler pinned load P_cr = π² E I / L²',
518
+ sources: [youngsModulusQ, areaMomentQ, columnLengthQ],
519
+ aliases: {
520
+ 'youngs-modulus': ['E_Pa', 'E'],
521
+ 'area-moment': ['I_m4'],
522
+ 'column-length': ['L_m', 'L'],
523
+ },
524
+ target: bucklingLoadQ,
525
+ confidence: 'established',
526
+ domain: {
527
+ description: 'E > 0, I > 0, L > 0; pinned ends y(0) = y(L) = 0',
528
+ predicate: (i) => finite(i['youngs-modulus']) &&
529
+ i['youngs-modulus'] > 0 &&
530
+ finite(i['area-moment']) &&
531
+ i['area-moment'] > 0 &&
532
+ finite(i['column-length']) &&
533
+ i['column-length'] > 0,
534
+ },
535
+ evaluate: (i) => evaluateEulerBuckling({
536
+ E_Pa: i['youngs-modulus'],
537
+ I_m4: i['area-moment'],
538
+ L_m: i['column-length'],
539
+ }).P_N,
540
+ symbolic: BE78_SYMBOLIC,
541
+ citation: 'PhysJS.EulerBuckling.critical_load. The beam equation is a hypothesis. The clamped-free load is π² E I / (4 L²), not this load.',
542
+ });
543
+ /**
544
+ * BE-79 pull-in: (stiffness, rest gap, area) → voltage. Parallel-plate
545
+ * and quasi-static balance are hypotheses. Not a fringing field.
546
+ *
547
+ * @public
548
+ */
549
+ export const be79Edge = withBoundAliases({
550
+ id: 'be-79',
551
+ beId: 79,
552
+ kind: 'law',
553
+ label: 'Pull-in voltage V_pi = √(8 k g0³ / (27 ε0 A))',
554
+ sources: [pullInStiffnessQ, pullInGapQ, pullInAreaQ],
555
+ aliases: {
556
+ 'pull-in-stiffness': ['k_N_per_m', 'k'],
557
+ 'pull-in-gap': ['g0_m', 'g0'],
558
+ 'pull-in-area': ['A_m2', 'A'],
559
+ },
560
+ target: pullInVoltageQ,
561
+ confidence: 'established',
562
+ domain: {
563
+ description: 'k > 0, g0 > 0, A > 0; the fold is g = 2 g0/3, not g0/2',
564
+ predicate: (i) => finite(i['pull-in-stiffness']) &&
565
+ i['pull-in-stiffness'] > 0 &&
566
+ finite(i['pull-in-gap']) &&
567
+ i['pull-in-gap'] > 0 &&
568
+ finite(i['pull-in-area']) &&
569
+ i['pull-in-area'] > 0,
570
+ },
571
+ evaluate: (i) => evaluatePullIn({
572
+ k_N_per_m: i['pull-in-stiffness'],
573
+ g0_m: i['pull-in-gap'],
574
+ A_m2: i['pull-in-area'],
575
+ }).V_pi_V,
576
+ symbolic: BE79_SYMBOLIC,
577
+ citation: 'PhysJS.PullIn.pull_in_eq. C = ε0 A/g and the linear spring are hypotheses. g = g0/2 is not the fold.',
578
+ });
579
+ /**
580
+ * BE-80 Mott–Gurney: drift, Poisson, and an injecting contact. Not
581
+ * Child–Langmuir.
582
+ *
583
+ * @public
584
+ */
585
+ export const be80Edge = withBoundAliases({
586
+ id: 'be-80',
587
+ beId: 80,
588
+ kind: 'law',
589
+ label: 'Mott–Gurney current J = (9/8) ε μ V² / d³',
590
+ sources: [mottPermittivityQ, mottMobilityQ, mottVoltageQ, mottThicknessQ],
591
+ aliases: {
592
+ 'mott-permittivity': ['eps'],
593
+ 'mott-mobility': ['mu_m2_per_Vs', 'mu'],
594
+ 'mott-voltage': ['V_volts', 'V'],
595
+ 'mott-thickness': ['d_m', 'd'],
596
+ },
597
+ target: mottGurneyCurrentQ,
598
+ confidence: 'established',
599
+ domain: {
600
+ description: 'ε > 0, μ > 0, V finite, d > 0; E(0) = 0',
601
+ predicate: (i) => finite(i['mott-permittivity']) &&
602
+ i['mott-permittivity'] > 0 &&
603
+ finite(i['mott-mobility']) &&
604
+ i['mott-mobility'] > 0 &&
605
+ finite(i['mott-voltage']) &&
606
+ finite(i['mott-thickness']) &&
607
+ i['mott-thickness'] > 0,
608
+ },
609
+ evaluate: (i) => evaluateMottGurney({
610
+ eps: i['mott-permittivity'],
611
+ mu_m2_per_Vs: i['mott-mobility'],
612
+ V_volts: i['mott-voltage'],
613
+ d_m: i['mott-thickness'],
614
+ }).J_A_per_m2,
615
+ symbolic: BE80_SYMBOLIC,
616
+ citation: 'PhysJS.MottGurney.current_eq. Drift, Poisson, and the injecting contact are hypotheses. Not Child–Langmuir.',
617
+ });
618
+ /**
619
+ * BE-81 Child–Langmuir. Collisionless energy, Poisson, and the 4/3
620
+ * profile. Poisson is not claimed at the cathode. `e` is elementary.
621
+ *
622
+ * @public
623
+ */
624
+ export const be81Edge = withBoundAliases({
625
+ id: 'be-81',
626
+ beId: 81,
627
+ kind: 'law',
628
+ label: 'Child–Langmuir current J = (4 ε0/9) √(2 e/m) V^{3/2}/d²',
629
+ sources: [childCarrierMassQ, childVoltageQ, childGapQ],
630
+ aliases: {
631
+ 'child-carrier-mass': ['m_kg', 'm'],
632
+ 'child-voltage': ['V_volts', 'V'],
633
+ 'child-gap': ['d_m', 'd'],
634
+ },
635
+ target: childLangmuirCurrentQ,
636
+ confidence: 'established',
637
+ domain: {
638
+ description: 'm > 0, V > 0, d > 0; cathode field 0; Poisson not at x = 0',
639
+ predicate: (i) => finite(i['child-carrier-mass']) &&
640
+ i['child-carrier-mass'] > 0 &&
641
+ finite(i['child-voltage']) &&
642
+ i['child-voltage'] > 0 &&
643
+ finite(i['child-gap']) &&
644
+ i['child-gap'] > 0,
645
+ },
646
+ evaluate: (i) => evaluateChildLangmuir({
647
+ m_kg: i['child-carrier-mass'],
648
+ V_volts: i['child-voltage'],
649
+ d_m: i['child-gap'],
650
+ }).J_A_per_m2,
651
+ symbolic: BE81_SYMBOLIC,
652
+ citation: 'PhysJS.ChildLangmuir.current_eq. e is the elementary charge. Not a drift-only solid.',
653
+ });
654
+ /**
655
+ * BE-82 Shockley diode at ideality 1. Not a diffusion-length ODE.
656
+ *
657
+ * @public
658
+ */
659
+ export const be82Edge = withBoundAliases({
660
+ id: 'be-82',
661
+ beId: 82,
662
+ kind: 'law',
663
+ label: 'Shockley diode I = I_s (exp(e V/(k_B T)) − 1)',
664
+ sources: [shockleySaturationQ, shockleyVoltageQ, shockleyTemperatureQ],
665
+ aliases: {
666
+ 'shockley-saturation': ['I_s_A', 'I_s'],
667
+ 'shockley-voltage': ['V_volts', 'V'],
668
+ 'shockley-temperature': ['T_K', 'T'],
669
+ },
670
+ target: shockleyCurrentQ,
671
+ confidence: 'established',
672
+ domain: {
673
+ description: 'I_s and V finite, T ≠ 0; ideality 1',
674
+ predicate: (i) => finite(i['shockley-saturation']) &&
675
+ finite(i['shockley-voltage']) &&
676
+ finite(i['shockley-temperature']) &&
677
+ i['shockley-temperature'] !== 0,
678
+ },
679
+ evaluate: (i) => evaluateShockleyDiode({
680
+ I_s_A: i['shockley-saturation'],
681
+ V_volts: i['shockley-voltage'],
682
+ T_K: i['shockley-temperature'],
683
+ }).I_A,
684
+ symbolic: BE82_SYMBOLIC,
685
+ citation: 'PhysJS.ShockleyDiode.shockley_eq. Quasi-equilibrium, detailed balance at V = 0, and low injection are hypotheses. Ideality 2 is not this current.',
686
+ });
687
+ /**
688
+ * BE-83 Thomson coefficient. Builds on the Kelvin relation read along
689
+ * temperature. The quantities do not meet be-73, so the edges do not compose.
690
+ *
691
+ * @public
692
+ */
693
+ export const be83Edge = withBoundAliases({
694
+ id: 'be-83',
695
+ beId: 83,
696
+ kind: 'law',
697
+ label: 'Thomson coefficient μ_T = T dS/dT',
698
+ sources: [thomsonTemperatureQ, seebeckSlopeQ],
699
+ aliases: {
700
+ 'thomson-temperature': ['T_K', 'T'],
701
+ 'seebeck-slope': ['dS_dT_V_per_K2', 'dS_dT'],
702
+ },
703
+ target: thomsonCoefficientQ,
704
+ confidence: 'established',
705
+ domain: {
706
+ description: 'T and dS/dT finite; Kelvin along temperature and the Thomson split are hypotheses',
707
+ predicate: (i) => finite(i['thomson-temperature']) && finite(i['seebeck-slope']),
708
+ },
709
+ evaluate: (i) => evaluateThomsonCoefficient({
710
+ T_K: i['thomson-temperature'],
711
+ dS_dT_V_per_K2: i['seebeck-slope'],
712
+ }).mu_V_per_K,
713
+ symbolic: BE83_SYMBOLIC,
714
+ citation: 'PhysJS.Thomson.thomson_eq. Π(t) = S(t) t is PhysJS.KelvinRelation.peltier_eq read along temperature. Not a second copy of Π = S T.',
715
+ });
716
+ /**
717
+ * BE-84 four-point sheet resistance. The radial 1/r potential is a premise.
718
+ *
719
+ * @public
720
+ */
721
+ export const be84Edge = withBoundAliases({
722
+ id: 'be-84',
723
+ beId: 84,
724
+ kind: 'law',
725
+ label: 'Four-point sheet resistance R_s = (π / ln 2) (V/I)',
726
+ sources: [fourPointVoltageQ, fourPointCurrentQ],
727
+ aliases: {
728
+ 'four-point-voltage': ['V_volts', 'V'],
729
+ 'four-point-current': ['I_A', 'I'],
730
+ },
731
+ target: sheetResistanceQ,
732
+ confidence: 'established',
733
+ domain: {
734
+ description: 'V finite, I ≠ 0; probes at 0, s, 2s, 3s; radial field (I R_s)/(2 π r)',
735
+ predicate: (i) => finite(i['four-point-voltage']) && finite(i['four-point-current']) && i['four-point-current'] !== 0,
736
+ },
737
+ evaluate: (i) => evaluateFourPointSheet({
738
+ V_volts: i['four-point-voltage'],
739
+ I_A: i['four-point-current'],
740
+ }).R_s_ohm,
741
+ symbolic: BE84_SYMBOLIC,
742
+ citation: 'PhysJS.FourPoint.sheet_eq. The Laplace field and linear superposition are hypotheses. A sink at 4s is 2π/ln 3. Not PhysJS.Crossing.antisymmetry.',
743
+ });
744
+ /**
745
+ * BE-85 one-sided shot noise. Not Johnson–Nyquist and not the two-sided e I.
746
+ *
747
+ * @public
748
+ */
749
+ export const be85Edge = withBoundAliases({
750
+ id: 'be-85',
751
+ beId: 85,
752
+ kind: 'law',
753
+ label: 'Shot noise S_I = 2 e I',
754
+ sources: [shotCurrentQ],
755
+ aliases: {
756
+ 'shot-current': ['I_A', 'I'],
757
+ },
758
+ target: shotNoiseQ,
759
+ confidence: 'established',
760
+ domain: {
761
+ description: 'I finite; Poisson Var(N) = mean(N); one-sided Δf = 1/(2 T)',
762
+ predicate: (i) => finite(i['shot-current']),
763
+ },
764
+ evaluate: (i) => evaluateShotNoise({ I_A: i['shot-current'] }).S_I_A2_per_Hz,
765
+ symbolic: BE85_SYMBOLIC,
766
+ citation: 'PhysJS.ShotNoise.shot_eq. e is the elementary charge. The two-sided bandwidth gives e I. Not Johnson–Nyquist.',
767
+ });
768
+ /**
769
+ * BE-86 Reynolds analogy. Matched wall slopes and Pr = 1 are hypotheses.
770
+ *
771
+ * @public
772
+ */
773
+ export const be86Edge = withBoundAliases({
774
+ id: 'be-86',
775
+ beId: 86,
776
+ kind: 'law',
777
+ label: 'Reynolds analogy St = C_f / 2',
778
+ sources: [skinFrictionQ],
779
+ aliases: {
780
+ 'skin-friction': ['C_f'],
781
+ },
782
+ target: stantonNumberQ,
783
+ confidence: 'established',
784
+ domain: {
785
+ description: 'C_f finite; normalized wall gradients agree and Pr = 1',
786
+ predicate: (i) => finite(i['skin-friction']),
787
+ },
788
+ evaluate: (i) => evaluateReynoldsAnalogy({ C_f: i['skin-friction'] }).St,
789
+ symbolic: BE86_SYMBOLIC,
790
+ citation: 'PhysJS.ReynoldsAnalogy.reynolds_eq. St Pr = C_f/2 when the slopes match. Pr = 1 is the hypothesis that drops Pr. Not a Nusselt correlation.',
791
+ });
792
+ /**
793
+ * BE-87 capacitor voltage variance. One quadratic term, not (3/2) k_B T/C.
794
+ *
795
+ * @public
796
+ */
797
+ export const be87Edge = withBoundAliases({
798
+ id: 'be-87',
799
+ beId: 87,
800
+ kind: 'law',
801
+ label: 'Capacitor noise ⟨v²⟩ = k_B T / C',
802
+ sources: [capacitorTemperatureQ, capacitanceQ],
803
+ aliases: {
804
+ 'capacitor-temperature': ['T_K', 'T'],
805
+ capacitance: ['C_F', 'C'],
806
+ },
807
+ target: capacitorVoltageVarianceQ,
808
+ confidence: 'established',
809
+ domain: {
810
+ description: 'T finite, C > 0; U = (C/2) V²',
811
+ predicate: (i) => finite(i['capacitor-temperature']) && finite(i['capacitance']) && i['capacitance'] > 0,
812
+ },
813
+ evaluate: (i) => evaluateCapacitorNoise({
814
+ T_K: i['capacitor-temperature'],
815
+ C_F: i['capacitance'],
816
+ }).v2_V2,
817
+ symbolic: BE87_SYMBOLIC,
818
+ citation: 'PhysJS.CapacitorNoise.noise_eq. (3/2) k_B T/C is not this variance. Dropping the energy half gives k_B T/(2 C).',
819
+ });
429
820
  /** The applied-physicist edges, in catalog-id order. @public */
430
821
  export const APPLIED_PHYSICIST_EDGES = [
431
822
  be66Edge,
@@ -439,5 +830,16 @@ export const APPLIED_PHYSICIST_EDGES = [
439
830
  be74Edge,
440
831
  be75Edge,
441
832
  be76Edge,
833
+ be77Edge,
834
+ be78Edge,
835
+ be79Edge,
836
+ be80Edge,
837
+ be81Edge,
838
+ be82Edge,
839
+ be83Edge,
840
+ be84Edge,
841
+ be85Edge,
842
+ be86Edge,
843
+ be87Edge,
442
844
  ];
443
845
  //# sourceMappingURL=applied-physicist.js.map