@stevenvo780/st-lang 4.7.0 → 4.9.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 (285) hide show
  1. package/dist/logic/profiles/quantum/index.d.ts +153 -0
  2. package/dist/logic/profiles/quantum/index.d.ts.map +1 -0
  3. package/dist/logic/profiles/quantum/index.js +788 -0
  4. package/dist/logic/profiles/quantum/index.js.map +1 -0
  5. package/dist/namespaces/reasoning.d.ts +3 -1
  6. package/dist/namespaces/reasoning.d.ts.map +1 -1
  7. package/dist/namespaces/reasoning.js +5 -1
  8. package/dist/namespaces/reasoning.js.map +1 -1
  9. package/dist/proof-systems/certificate/canonical.d.ts +18 -0
  10. package/dist/proof-systems/certificate/canonical.d.ts.map +1 -0
  11. package/dist/proof-systems/certificate/canonical.js +79 -0
  12. package/dist/proof-systems/certificate/canonical.js.map +1 -0
  13. package/dist/proof-systems/certificate/generate.d.ts +39 -0
  14. package/dist/proof-systems/certificate/generate.d.ts.map +1 -0
  15. package/dist/proof-systems/certificate/generate.js +259 -0
  16. package/dist/proof-systems/certificate/generate.js.map +1 -0
  17. package/dist/proof-systems/certificate/index.d.ts +7 -0
  18. package/dist/proof-systems/certificate/index.d.ts.map +1 -0
  19. package/dist/proof-systems/certificate/index.js +23 -0
  20. package/dist/proof-systems/certificate/index.js.map +1 -0
  21. package/dist/proof-systems/certificate/lfsc.d.ts +15 -0
  22. package/dist/proof-systems/certificate/lfsc.d.ts.map +1 -0
  23. package/dist/proof-systems/certificate/lfsc.js +395 -0
  24. package/dist/proof-systems/certificate/lfsc.js.map +1 -0
  25. package/dist/proof-systems/certificate/rules.d.ts +8 -0
  26. package/dist/proof-systems/certificate/rules.d.ts.map +1 -0
  27. package/dist/proof-systems/certificate/rules.js +369 -0
  28. package/dist/proof-systems/certificate/rules.js.map +1 -0
  29. package/dist/proof-systems/certificate/types.d.ts +114 -0
  30. package/dist/proof-systems/certificate/types.d.ts.map +1 -0
  31. package/dist/proof-systems/certificate/types.js +18 -0
  32. package/dist/proof-systems/certificate/types.js.map +1 -0
  33. package/dist/proof-systems/certificate/verify.d.ts +20 -0
  34. package/dist/proof-systems/certificate/verify.d.ts.map +1 -0
  35. package/dist/proof-systems/certificate/verify.js +171 -0
  36. package/dist/proof-systems/certificate/verify.js.map +1 -0
  37. package/dist/reasoning/ban-logic/analyze.d.ts +31 -0
  38. package/dist/reasoning/ban-logic/analyze.d.ts.map +1 -0
  39. package/dist/reasoning/ban-logic/analyze.js +113 -0
  40. package/dist/reasoning/ban-logic/analyze.js.map +1 -0
  41. package/dist/reasoning/ban-logic/index.d.ts +7 -0
  42. package/dist/reasoning/ban-logic/index.d.ts.map +1 -0
  43. package/dist/reasoning/ban-logic/index.js +66 -0
  44. package/dist/reasoning/ban-logic/index.js.map +1 -0
  45. package/dist/reasoning/ban-logic/protocols.d.ts +54 -0
  46. package/dist/reasoning/ban-logic/protocols.d.ts.map +1 -0
  47. package/dist/reasoning/ban-logic/protocols.js +219 -0
  48. package/dist/reasoning/ban-logic/protocols.js.map +1 -0
  49. package/dist/reasoning/ban-logic/rules.d.ts +83 -0
  50. package/dist/reasoning/ban-logic/rules.d.ts.map +1 -0
  51. package/dist/reasoning/ban-logic/rules.js +409 -0
  52. package/dist/reasoning/ban-logic/rules.js.map +1 -0
  53. package/dist/reasoning/ban-logic/terms.d.ts +26 -0
  54. package/dist/reasoning/ban-logic/terms.d.ts.map +1 -0
  55. package/dist/reasoning/ban-logic/terms.js +262 -0
  56. package/dist/reasoning/ban-logic/terms.js.map +1 -0
  57. package/dist/reasoning/ban-logic/types.d.ts +107 -0
  58. package/dist/reasoning/ban-logic/types.d.ts.map +1 -0
  59. package/dist/reasoning/ban-logic/types.js +27 -0
  60. package/dist/reasoning/ban-logic/types.js.map +1 -0
  61. package/dist/reasoning/combinatorial-games/index.d.ts +105 -0
  62. package/dist/reasoning/combinatorial-games/index.d.ts.map +1 -0
  63. package/dist/reasoning/combinatorial-games/index.js +377 -0
  64. package/dist/reasoning/combinatorial-games/index.js.map +1 -0
  65. package/dist/reasoning/differential-privacy/index.d.ts +121 -0
  66. package/dist/reasoning/differential-privacy/index.d.ts.map +1 -0
  67. package/dist/reasoning/differential-privacy/index.js +417 -0
  68. package/dist/reasoning/differential-privacy/index.js.map +1 -0
  69. package/dist/reasoning/mechanism-design/auctions.d.ts +49 -0
  70. package/dist/reasoning/mechanism-design/auctions.d.ts.map +1 -0
  71. package/dist/reasoning/mechanism-design/auctions.js +179 -0
  72. package/dist/reasoning/mechanism-design/auctions.js.map +1 -0
  73. package/dist/reasoning/mechanism-design/index.d.ts +5 -0
  74. package/dist/reasoning/mechanism-design/index.d.ts.map +1 -0
  75. package/dist/reasoning/mechanism-design/index.js +39 -0
  76. package/dist/reasoning/mechanism-design/index.js.map +1 -0
  77. package/dist/reasoning/mechanism-design/myerson.d.ts +64 -0
  78. package/dist/reasoning/mechanism-design/myerson.d.ts.map +1 -0
  79. package/dist/reasoning/mechanism-design/myerson.js +253 -0
  80. package/dist/reasoning/mechanism-design/myerson.js.map +1 -0
  81. package/dist/reasoning/mechanism-design/types.d.ts +44 -0
  82. package/dist/reasoning/mechanism-design/types.d.ts.map +1 -0
  83. package/dist/reasoning/mechanism-design/types.js +22 -0
  84. package/dist/reasoning/mechanism-design/types.js.map +1 -0
  85. package/dist/reasoning/mechanism-design/vcg.d.ts +29 -0
  86. package/dist/reasoning/mechanism-design/vcg.d.ts.map +1 -0
  87. package/dist/reasoning/mechanism-design/vcg.js +305 -0
  88. package/dist/reasoning/mechanism-design/vcg.js.map +1 -0
  89. package/dist/reasoning/probabilistic/distributions.d.ts +44 -0
  90. package/dist/reasoning/probabilistic/distributions.d.ts.map +1 -0
  91. package/dist/reasoning/probabilistic/distributions.js +207 -0
  92. package/dist/reasoning/probabilistic/distributions.js.map +1 -0
  93. package/dist/reasoning/probabilistic/examples.d.ts +31 -0
  94. package/dist/reasoning/probabilistic/examples.d.ts.map +1 -0
  95. package/dist/reasoning/probabilistic/examples.js +85 -0
  96. package/dist/reasoning/probabilistic/examples.js.map +1 -0
  97. package/dist/reasoning/probabilistic/index.d.ts +6 -0
  98. package/dist/reasoning/probabilistic/index.d.ts.map +1 -0
  99. package/dist/reasoning/probabilistic/index.js +42 -0
  100. package/dist/reasoning/probabilistic/index.js.map +1 -0
  101. package/dist/reasoning/probabilistic/inference.d.ts +45 -0
  102. package/dist/reasoning/probabilistic/inference.d.ts.map +1 -0
  103. package/dist/reasoning/probabilistic/inference.js +579 -0
  104. package/dist/reasoning/probabilistic/inference.js.map +1 -0
  105. package/dist/reasoning/probabilistic/types.d.ts +153 -0
  106. package/dist/reasoning/probabilistic/types.d.ts.map +1 -0
  107. package/dist/reasoning/probabilistic/types.js +37 -0
  108. package/dist/reasoning/probabilistic/types.js.map +1 -0
  109. package/dist/solver/smt-z3/index.d.ts +3 -0
  110. package/dist/solver/smt-z3/index.d.ts.map +1 -0
  111. package/dist/solver/smt-z3/index.js +11 -0
  112. package/dist/solver/smt-z3/index.js.map +1 -0
  113. package/dist/solver/smt-z3/types.d.ts +52 -0
  114. package/dist/solver/smt-z3/types.d.ts.map +1 -0
  115. package/dist/solver/smt-z3/types.js +6 -0
  116. package/dist/solver/smt-z3/types.js.map +1 -0
  117. package/dist/solver/smt-z3/z3-wasm-backend.d.ts +88 -0
  118. package/dist/solver/smt-z3/z3-wasm-backend.d.ts.map +1 -0
  119. package/dist/solver/smt-z3/z3-wasm-backend.js +437 -0
  120. package/dist/solver/smt-z3/z3-wasm-backend.js.map +1 -0
  121. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts +2 -0
  122. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts.map +1 -0
  123. package/dist/tests/logic/profiles/quantum/quantum.test.js +209 -0
  124. package/dist/tests/logic/profiles/quantum/quantum.test.js.map +1 -0
  125. package/dist/tests/proof-systems/certificate/certificate.test.d.ts +2 -0
  126. package/dist/tests/proof-systems/certificate/certificate.test.d.ts.map +1 -0
  127. package/dist/tests/proof-systems/certificate/certificate.test.js +449 -0
  128. package/dist/tests/proof-systems/certificate/certificate.test.js.map +1 -0
  129. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts +2 -0
  130. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts.map +1 -0
  131. package/dist/tests/reasoning/ban-logic/ban-logic.test.js +270 -0
  132. package/dist/tests/reasoning/ban-logic/ban-logic.test.js.map +1 -0
  133. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts +2 -0
  134. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts.map +1 -0
  135. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js +203 -0
  136. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js.map +1 -0
  137. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts +2 -0
  138. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts.map +1 -0
  139. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js +388 -0
  140. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js.map +1 -0
  141. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts +2 -0
  142. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts.map +1 -0
  143. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js +290 -0
  144. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js.map +1 -0
  145. package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts +2 -0
  146. package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts.map +1 -0
  147. package/dist/tests/reasoning/probabilistic/probabilistic.test.js +370 -0
  148. package/dist/tests/reasoning/probabilistic/probabilistic.test.js.map +1 -0
  149. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts +2 -0
  150. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts.map +1 -0
  151. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js +394 -0
  152. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js.map +1 -0
  153. package/dist/tests/tooling/mathlib/mathlib.test.d.ts +2 -0
  154. package/dist/tests/tooling/mathlib/mathlib.test.d.ts.map +1 -0
  155. package/dist/tests/tooling/mathlib/mathlib.test.js +214 -0
  156. package/dist/tests/tooling/mathlib/mathlib.test.js.map +1 -0
  157. package/dist/tests/tooling/proof-guidance/features.test.d.ts +2 -0
  158. package/dist/tests/tooling/proof-guidance/features.test.d.ts.map +1 -0
  159. package/dist/tests/tooling/proof-guidance/features.test.js +72 -0
  160. package/dist/tests/tooling/proof-guidance/features.test.js.map +1 -0
  161. package/dist/tests/tooling/proof-guidance/model.test.d.ts +2 -0
  162. package/dist/tests/tooling/proof-guidance/model.test.d.ts.map +1 -0
  163. package/dist/tests/tooling/proof-guidance/model.test.js +165 -0
  164. package/dist/tests/tooling/proof-guidance/model.test.js.map +1 -0
  165. package/dist/tests/tooling/proof-guidance/search.test.d.ts +2 -0
  166. package/dist/tests/tooling/proof-guidance/search.test.d.ts.map +1 -0
  167. package/dist/tests/tooling/proof-guidance/search.test.js +238 -0
  168. package/dist/tests/tooling/proof-guidance/search.test.js.map +1 -0
  169. package/dist/tests/type-theory/cubical/cubical.test.d.ts +2 -0
  170. package/dist/tests/type-theory/cubical/cubical.test.d.ts.map +1 -0
  171. package/dist/tests/type-theory/cubical/cubical.test.js +207 -0
  172. package/dist/tests/type-theory/cubical/cubical.test.js.map +1 -0
  173. package/dist/tests/type-theory/effects/effects.test.d.ts +2 -0
  174. package/dist/tests/type-theory/effects/effects.test.d.ts.map +1 -0
  175. package/dist/tests/type-theory/effects/effects.test.js +242 -0
  176. package/dist/tests/type-theory/effects/effects.test.js.map +1 -0
  177. package/dist/tooling/mathlib/group.d.ts +27 -0
  178. package/dist/tooling/mathlib/group.d.ts.map +1 -0
  179. package/dist/tooling/mathlib/group.js +89 -0
  180. package/dist/tooling/mathlib/group.js.map +1 -0
  181. package/dist/tooling/mathlib/index.d.ts +8 -0
  182. package/dist/tooling/mathlib/index.d.ts.map +1 -0
  183. package/dist/tooling/mathlib/index.js +40 -0
  184. package/dist/tooling/mathlib/index.js.map +1 -0
  185. package/dist/tooling/mathlib/instances.d.ts +29 -0
  186. package/dist/tooling/mathlib/instances.d.ts.map +1 -0
  187. package/dist/tooling/mathlib/instances.js +139 -0
  188. package/dist/tooling/mathlib/instances.js.map +1 -0
  189. package/dist/tooling/mathlib/lemmas.d.ts +3 -0
  190. package/dist/tooling/mathlib/lemmas.d.ts.map +1 -0
  191. package/dist/tooling/mathlib/lemmas.js +72 -0
  192. package/dist/tooling/mathlib/lemmas.js.map +1 -0
  193. package/dist/tooling/mathlib/order.d.ts +29 -0
  194. package/dist/tooling/mathlib/order.d.ts.map +1 -0
  195. package/dist/tooling/mathlib/order.js +91 -0
  196. package/dist/tooling/mathlib/order.js.map +1 -0
  197. package/dist/tooling/mathlib/ring.d.ts +15 -0
  198. package/dist/tooling/mathlib/ring.d.ts.map +1 -0
  199. package/dist/tooling/mathlib/ring.js +91 -0
  200. package/dist/tooling/mathlib/ring.js.map +1 -0
  201. package/dist/tooling/mathlib/types.d.ts +62 -0
  202. package/dist/tooling/mathlib/types.d.ts.map +1 -0
  203. package/dist/tooling/mathlib/types.js +7 -0
  204. package/dist/tooling/mathlib/types.js.map +1 -0
  205. package/dist/tooling/proof-guidance/features.d.ts +10 -0
  206. package/dist/tooling/proof-guidance/features.d.ts.map +1 -0
  207. package/dist/tooling/proof-guidance/features.js +97 -0
  208. package/dist/tooling/proof-guidance/features.js.map +1 -0
  209. package/dist/tooling/proof-guidance/index.d.ts +5 -0
  210. package/dist/tooling/proof-guidance/index.d.ts.map +1 -0
  211. package/dist/tooling/proof-guidance/index.js +25 -0
  212. package/dist/tooling/proof-guidance/index.js.map +1 -0
  213. package/dist/tooling/proof-guidance/model.d.ts +42 -0
  214. package/dist/tooling/proof-guidance/model.d.ts.map +1 -0
  215. package/dist/tooling/proof-guidance/model.js +149 -0
  216. package/dist/tooling/proof-guidance/model.js.map +1 -0
  217. package/dist/tooling/proof-guidance/search.d.ts +7 -0
  218. package/dist/tooling/proof-guidance/search.d.ts.map +1 -0
  219. package/dist/tooling/proof-guidance/search.js +102 -0
  220. package/dist/tooling/proof-guidance/search.js.map +1 -0
  221. package/dist/tooling/proof-guidance/types.d.ts +77 -0
  222. package/dist/tooling/proof-guidance/types.d.ts.map +1 -0
  223. package/dist/tooling/proof-guidance/types.js +8 -0
  224. package/dist/tooling/proof-guidance/types.js.map +1 -0
  225. package/dist/type-theory/cubical/equality.d.ts +4 -0
  226. package/dist/type-theory/cubical/equality.d.ts.map +1 -0
  227. package/dist/type-theory/cubical/equality.js +78 -0
  228. package/dist/type-theory/cubical/equality.js.map +1 -0
  229. package/dist/type-theory/cubical/index.d.ts +14 -0
  230. package/dist/type-theory/cubical/index.d.ts.map +1 -0
  231. package/dist/type-theory/cubical/index.js +71 -0
  232. package/dist/type-theory/cubical/index.js.map +1 -0
  233. package/dist/type-theory/cubical/infer.d.ts +18 -0
  234. package/dist/type-theory/cubical/infer.d.ts.map +1 -0
  235. package/dist/type-theory/cubical/infer.js +241 -0
  236. package/dist/type-theory/cubical/infer.js.map +1 -0
  237. package/dist/type-theory/cubical/interval.d.ts +12 -0
  238. package/dist/type-theory/cubical/interval.d.ts.map +1 -0
  239. package/dist/type-theory/cubical/interval.js +118 -0
  240. package/dist/type-theory/cubical/interval.js.map +1 -0
  241. package/dist/type-theory/cubical/normalize.d.ts +5 -0
  242. package/dist/type-theory/cubical/normalize.d.ts.map +1 -0
  243. package/dist/type-theory/cubical/normalize.js +191 -0
  244. package/dist/type-theory/cubical/normalize.js.map +1 -0
  245. package/dist/type-theory/cubical/path-algebra.d.ts +12 -0
  246. package/dist/type-theory/cubical/path-algebra.d.ts.map +1 -0
  247. package/dist/type-theory/cubical/path-algebra.js +109 -0
  248. package/dist/type-theory/cubical/path-algebra.js.map +1 -0
  249. package/dist/type-theory/cubical/substitute.d.ts +3 -0
  250. package/dist/type-theory/cubical/substitute.d.ts.map +1 -0
  251. package/dist/type-theory/cubical/substitute.js +109 -0
  252. package/dist/type-theory/cubical/substitute.js.map +1 -0
  253. package/dist/type-theory/cubical/types.d.ts +77 -0
  254. package/dist/type-theory/cubical/types.d.ts.map +1 -0
  255. package/dist/type-theory/cubical/types.js +258 -0
  256. package/dist/type-theory/cubical/types.js.map +1 -0
  257. package/dist/type-theory/effects/core.d.ts +27 -0
  258. package/dist/type-theory/effects/core.d.ts.map +1 -0
  259. package/dist/type-theory/effects/core.js +79 -0
  260. package/dist/type-theory/effects/core.js.map +1 -0
  261. package/dist/type-theory/effects/exception.d.ts +18 -0
  262. package/dist/type-theory/effects/exception.d.ts.map +1 -0
  263. package/dist/type-theory/effects/exception.js +59 -0
  264. package/dist/type-theory/effects/exception.js.map +1 -0
  265. package/dist/type-theory/effects/index.d.ts +11 -0
  266. package/dist/type-theory/effects/index.d.ts.map +1 -0
  267. package/dist/type-theory/effects/index.js +50 -0
  268. package/dist/type-theory/effects/index.js.map +1 -0
  269. package/dist/type-theory/effects/reader.d.ts +20 -0
  270. package/dist/type-theory/effects/reader.d.ts.map +1 -0
  271. package/dist/type-theory/effects/reader.js +62 -0
  272. package/dist/type-theory/effects/reader.js.map +1 -0
  273. package/dist/type-theory/effects/state.d.ts +31 -0
  274. package/dist/type-theory/effects/state.d.ts.map +1 -0
  275. package/dist/type-theory/effects/state.js +91 -0
  276. package/dist/type-theory/effects/state.js.map +1 -0
  277. package/dist/type-theory/effects/types.d.ts +45 -0
  278. package/dist/type-theory/effects/types.d.ts.map +1 -0
  279. package/dist/type-theory/effects/types.js +21 -0
  280. package/dist/type-theory/effects/types.js.map +1 -0
  281. package/dist/type-theory/effects/writer.d.ts +30 -0
  282. package/dist/type-theory/effects/writer.d.ts.map +1 -0
  283. package/dist/type-theory/effects/writer.js +79 -0
  284. package/dist/type-theory/effects/writer.js.map +1 -0
  285. package/package.json +1 -1
@@ -0,0 +1,579 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Probabilistic Programming — Inference engines
4
+ // ============================================================
5
+ //
6
+ // Cuatro backends:
7
+ //
8
+ // 1. `enumerate` — enumeración exacta para programas con
9
+ // soporte discreto finito. Recorre el
10
+ // árbol de ramificaciones, multiplica
11
+ // probabilidades y agrega por valor de
12
+ // retorno. Exacto, costo O(|soporte|).
13
+ // 2. `rejectionSample` — muestreo simple del prior; descarta
14
+ // trazas con `observe(false)`. Sesgo 0,
15
+ // varianza alta si la aceptación es baja.
16
+ // 3. `importanceSample` — muestreo del prior con pesos
17
+ // log-acumulados; usa `factor()` y el
18
+ // log-pdf de las observes "soft" como
19
+ // log-weight. Reporta ESS para diagnóstico.
20
+ // 4. `metropolisHastings` — single-site MCMC: re-muestrea uno de
21
+ // los sample sites por iteración y acepta
22
+ // según ratio de pesos. Devuelve cadena
23
+ // tras burn-in y thinning.
24
+ //
25
+ // Todos usan el mismo `PProgram<T>` y el mismo `Sampler` interface.
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.enumerate = enumerate;
28
+ exports.rejectionSample = rejectionSample;
29
+ exports.importanceSample = importanceSample;
30
+ exports.metropolisHastings = metropolisHastings;
31
+ const distributions_1 = require("./distributions");
32
+ // ── Helpers de resumen ───────────────────────────────────────
33
+ /**
34
+ * Determina si todos los samples son numéricos (incluyendo booleanos,
35
+ * que se interpretan como 0/1). Solo entonces tiene sentido calcular
36
+ * media/std/quantiles continuos.
37
+ */
38
+ function allNumericLike(samples) {
39
+ if (samples.length === 0)
40
+ return false;
41
+ for (const s of samples) {
42
+ if (typeof s !== 'number' && typeof s !== 'boolean')
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ function toNumber(v) {
48
+ if (typeof v === 'boolean')
49
+ return v ? 1 : 0;
50
+ return v;
51
+ }
52
+ /**
53
+ * Histograma por igualdad estructural. Para tipos primitivos usa
54
+ * `Map.set(value, count + 1)`. Para objetos/arrays usa JSON.stringify
55
+ * como clave canónica — suficiente para los casos típicos de tests.
56
+ */
57
+ function buildHistogram(samples, weights) {
58
+ const hist = new Map();
59
+ // Para objetos, normalizamos via JSON; mantenemos un map de
60
+ // clave canónica → valor original para devolver el objeto real.
61
+ const canonicalToValue = new Map();
62
+ const isObjectLike = (v) => v !== null && (typeof v === 'object' || Array.isArray(v));
63
+ let totalW = 0;
64
+ for (let i = 0; i < samples.length; i++) {
65
+ const w = weights ? (weights[i] ?? 0) : 1;
66
+ totalW += w;
67
+ }
68
+ if (totalW <= 0)
69
+ return hist;
70
+ for (let i = 0; i < samples.length; i++) {
71
+ const s = samples[i];
72
+ const w = (weights ? (weights[i] ?? 0) : 1) / totalW;
73
+ if (isObjectLike(s)) {
74
+ const key = JSON.stringify(s);
75
+ if (!canonicalToValue.has(key))
76
+ canonicalToValue.set(key, s);
77
+ const canonical = canonicalToValue.get(key);
78
+ hist.set(canonical, (hist.get(canonical) ?? 0) + w);
79
+ }
80
+ else {
81
+ hist.set(s, (hist.get(s) ?? 0) + w);
82
+ }
83
+ }
84
+ return hist;
85
+ }
86
+ function computeQuantiles(sorted, qs) {
87
+ const out = {};
88
+ if (sorted.length === 0)
89
+ return out;
90
+ for (const q of qs) {
91
+ const idx = Math.min(sorted.length - 1, Math.max(0, Math.floor(q * (sorted.length - 1))));
92
+ out[q] = sorted[idx];
93
+ }
94
+ return out;
95
+ }
96
+ function summarize(samples, opts = {}) {
97
+ const histogram = buildHistogram(samples, opts.weights);
98
+ const summary = { samples, histogram };
99
+ if (opts.ess !== undefined)
100
+ summary.ess = opts.ess;
101
+ if (opts.accepted !== undefined) {
102
+ summary.numAccepted = opts.accepted;
103
+ if (opts.total !== undefined && opts.total > 0) {
104
+ summary.acceptanceRate = opts.accepted / opts.total;
105
+ }
106
+ }
107
+ if (opts.total !== undefined)
108
+ summary.totalAttempts = opts.total;
109
+ if (allNumericLike(samples)) {
110
+ const nums = samples.map(toNumber);
111
+ const weights = opts.weights;
112
+ let sumW = 0;
113
+ if (weights) {
114
+ for (let i = 0; i < nums.length; i++)
115
+ sumW += weights[i] ?? 0;
116
+ }
117
+ if (weights && sumW > 0) {
118
+ let mean = 0;
119
+ for (let i = 0; i < nums.length; i++) {
120
+ mean += (nums[i] ?? 0) * ((weights[i] ?? 0) / sumW);
121
+ }
122
+ let varSum = 0;
123
+ for (let i = 0; i < nums.length; i++) {
124
+ const d = (nums[i] ?? 0) - mean;
125
+ varSum += d * d * ((weights[i] ?? 0) / sumW);
126
+ }
127
+ summary.mean = mean;
128
+ summary.std = Math.sqrt(varSum);
129
+ }
130
+ else {
131
+ const mean = nums.reduce((s, x) => s + x, 0) / nums.length;
132
+ const variance = nums.reduce((s, x) => s + (x - mean) * (x - mean), 0) / Math.max(1, nums.length - 1);
133
+ summary.mean = mean;
134
+ summary.std = Math.sqrt(variance);
135
+ }
136
+ const sorted = nums.slice().sort((a, b) => a - b);
137
+ summary.quantiles = computeQuantiles(sorted, [0.025, 0.5, 0.975]);
138
+ }
139
+ return summary;
140
+ }
141
+ /**
142
+ * Enumera todas las trayectorias del programa, multiplicando la
143
+ * probabilidad de cada decisión discreta y descartando ramas con
144
+ * `observe(false)`. Soporta `factor(logW)` agregando exp(logW) al
145
+ * peso. No soporta distribuciones continuas (uniform, normal) ni
146
+ * `poisson` — lanza error si las encuentra.
147
+ *
148
+ * `maxStates` protege de explosión combinatoria: corta la
149
+ * enumeración cuando el número de ramas pendientes la supera.
150
+ */
151
+ function enumerate(program, maxStates = 100_000) {
152
+ // Empezamos con una sola rama vacía (peso 1).
153
+ let frontier = [{ choices: [], weight: 1 }];
154
+ const completed = [];
155
+ let safetyCounter = 0;
156
+ while (frontier.length > 0) {
157
+ safetyCounter += frontier.length;
158
+ if (safetyCounter > maxStates) {
159
+ throw new Error(`enumerate: superado el límite de ${maxStates} estados; ` +
160
+ 'usá rejection/importance/MH para soporte grande.');
161
+ }
162
+ const nextFrontier = [];
163
+ for (const path of frontier) {
164
+ const state = {
165
+ choices: path.choices,
166
+ weight: path.weight,
167
+ cursor: 0,
168
+ };
169
+ const result = runEnumPath(program, state, nextFrontier);
170
+ if (result !== undefined) {
171
+ completed.push({ value: result.value, weight: result.weight });
172
+ }
173
+ }
174
+ frontier = nextFrontier;
175
+ }
176
+ // Normalizar y montar samples + weights.
177
+ let total = 0;
178
+ for (const c of completed)
179
+ total += c.weight;
180
+ if (total <= 0) {
181
+ // Toda la masa fue descartada por observes.
182
+ return {
183
+ samples: [],
184
+ histogram: new Map(),
185
+ };
186
+ }
187
+ const samples = completed.map((c) => c.value);
188
+ const weights = completed.map((c) => c.weight / total);
189
+ return summarize(samples, { weights });
190
+ }
191
+ /**
192
+ * Ejecuta el programa siguiendo una ruta de decisiones pre-elegidas.
193
+ * Cuando el programa pide un `sample` y la ruta ya no tiene más
194
+ * decisiones, ramifica: empuja TODAS las posibles continuaciones
195
+ * al frontier y aborta la ejecución actual con `_BRANCH`.
196
+ *
197
+ * Devuelve `{value, weight}` si la ruta terminó exitosamente, o
198
+ * `undefined` si fue descartada (observe falso, factor -inf, o
199
+ * ramificó hacia el frontier).
200
+ */
201
+ function runEnumPath(program, state, frontier) {
202
+ // Excepciones internas para señalizar (a) que la ruta debe
203
+ // ramificarse al frontier sin continuar la ejecución, y (b) que
204
+ // la traza es inconsistente (observe falso o factor -inf).
205
+ class BranchException extends Error {
206
+ constructor() {
207
+ super('branch');
208
+ this.name = 'BranchException';
209
+ }
210
+ }
211
+ class RejectException extends Error {
212
+ constructor() {
213
+ super('reject');
214
+ this.name = 'RejectException';
215
+ }
216
+ }
217
+ const sampler = {
218
+ sample(dist) {
219
+ if (state.cursor < state.choices.length) {
220
+ const v = state.choices[state.cursor];
221
+ state.cursor += 1;
222
+ return v;
223
+ }
224
+ // Ramificar: agregar todos los valores del soporte al frontier.
225
+ const support = (0, distributions_1.enumerateSupport)(dist);
226
+ for (const [value, p] of support) {
227
+ if (p <= 0)
228
+ continue;
229
+ frontier.push({
230
+ choices: [...state.choices, value],
231
+ weight: state.weight * p,
232
+ });
233
+ }
234
+ throw new BranchException();
235
+ },
236
+ observe(condition) {
237
+ if (!condition)
238
+ throw new RejectException();
239
+ },
240
+ factor(logWeight) {
241
+ if (logWeight === -Infinity)
242
+ throw new RejectException();
243
+ state.weight *= Math.exp(logWeight);
244
+ },
245
+ };
246
+ try {
247
+ const value = program(sampler);
248
+ return { value, weight: state.weight };
249
+ }
250
+ catch (err) {
251
+ if (err instanceof BranchException)
252
+ return undefined;
253
+ if (err instanceof RejectException)
254
+ return undefined;
255
+ throw err;
256
+ }
257
+ }
258
+ // ── 2. Rejection sampling ────────────────────────────────────
259
+ /**
260
+ * Muestrea N trazas del prior; cualquier traza con `observe(false)`
261
+ * o `factor(-Infinity)` se descarta y se reintenta.
262
+ *
263
+ * `factor(logW)` con `logW < 0` se trata como aceptación
264
+ * probabilística: con prob `exp(logW)` la traza se acepta, en
265
+ * caso contrario se descarta. `logW > 0` es legal pero raro;
266
+ * se acepta siempre (rejection no maneja pesos > 1).
267
+ */
268
+ function rejectionSample(program, opts = {}) {
269
+ const numSamples = opts.numSamples ?? 1000;
270
+ const maxAttempts = opts.maxAttempts ?? numSamples * 100;
271
+ const rng = opts.rng ?? Math.random;
272
+ const samples = [];
273
+ let attempts = 0;
274
+ while (samples.length < numSamples) {
275
+ attempts += 1;
276
+ if (attempts > maxAttempts) {
277
+ throw new Error(`rejection: ${attempts} intentos para ${samples.length}/${numSamples} muestras; ` +
278
+ 'el observe es demasiado restrictivo. Probá importance/MH.');
279
+ }
280
+ const result = runOneRejection(program, rng);
281
+ if (result !== undefined)
282
+ samples.push(result);
283
+ }
284
+ return summarize(samples, { total: attempts });
285
+ }
286
+ class RejectError extends Error {
287
+ constructor() {
288
+ super('reject');
289
+ this.name = 'RejectError';
290
+ }
291
+ }
292
+ function runOneRejection(program, rng) {
293
+ const sampler = {
294
+ sample(dist) {
295
+ return (0, distributions_1.sampleFrom)(dist, rng);
296
+ },
297
+ observe(condition) {
298
+ if (!condition)
299
+ throw new RejectError();
300
+ },
301
+ factor(logWeight) {
302
+ if (logWeight >= 0)
303
+ return;
304
+ if (logWeight === -Infinity || rng() >= Math.exp(logWeight)) {
305
+ throw new RejectError();
306
+ }
307
+ },
308
+ };
309
+ try {
310
+ return program(sampler);
311
+ }
312
+ catch (err) {
313
+ if (err instanceof RejectError)
314
+ return undefined;
315
+ throw err;
316
+ }
317
+ }
318
+ // ── 3. Importance sampling ───────────────────────────────────
319
+ /**
320
+ * Muestrea trazas del prior y acumula log-pesos de `observe`
321
+ * (treated as -Infinity si false, 0 si true) y `factor`. Devuelve
322
+ * los samples + sus pesos normalizados; el histograma y mean/std
323
+ * reflejan estos pesos.
324
+ *
325
+ * Reporta ESS = (Σwᵢ)² / Σwᵢ² como diagnóstico de degeneración.
326
+ */
327
+ function importanceSample(program, opts = {}) {
328
+ const numSamples = opts.numSamples ?? 1000;
329
+ const rng = opts.rng ?? Math.random;
330
+ const samples = [];
331
+ const logWeights = [];
332
+ for (let i = 0; i < numSamples; i++) {
333
+ const result = runOneImportance(program, rng);
334
+ if (result !== undefined) {
335
+ samples.push(result.value);
336
+ logWeights.push(result.logWeight);
337
+ }
338
+ }
339
+ if (samples.length === 0) {
340
+ throw new Error('importance: 0 samples válidos; revisá las observes.');
341
+ }
342
+ // Normalizar log-weights (estable numéricamente: restar el máximo).
343
+ const maxLW = Math.max(...logWeights);
344
+ let totalW = 0;
345
+ const expWeights = logWeights.map((lw) => {
346
+ const w = Math.exp(lw - maxLW);
347
+ totalW += w;
348
+ return w;
349
+ });
350
+ const weights = expWeights.map((w) => w / totalW);
351
+ // ESS = (Σwᵢ)² / Σwᵢ² con weights ya normalizados ⇒ 1 / Σwᵢ².
352
+ let sumSq = 0;
353
+ for (const w of weights)
354
+ sumSq += w * w;
355
+ const ess = sumSq > 0 ? 1 / sumSq : 0;
356
+ return summarize(samples, { weights, ess, total: numSamples });
357
+ }
358
+ function runOneImportance(program, rng) {
359
+ let logWeight = 0;
360
+ let rejected = false;
361
+ const sampler = {
362
+ sample(dist) {
363
+ return (0, distributions_1.sampleFrom)(dist, rng);
364
+ },
365
+ observe(condition) {
366
+ if (!condition) {
367
+ rejected = true;
368
+ logWeight = -Infinity;
369
+ }
370
+ },
371
+ factor(logW) {
372
+ logWeight += logW;
373
+ },
374
+ };
375
+ const value = program(sampler);
376
+ if (rejected || !Number.isFinite(logWeight))
377
+ return undefined;
378
+ return { value, logWeight };
379
+ }
380
+ /**
381
+ * MCMC Metropolis-Hastings sobre el espacio de trazas del programa.
382
+ *
383
+ * Convenciones:
384
+ * - `burnIn` itera sin contar (default 1000).
385
+ * - `thin` toma 1 de cada N (default 1).
386
+ * - Single-site: en cada iteración, re-muestrea UN sample site
387
+ * (elegido uniforme) y re-ejecuta. Si el número de sample sites
388
+ * cambia entre trazas, igual funciona (re-ejecutamos forzando
389
+ * el valor anterior en los sites que coinciden).
390
+ * - Reporta `acceptanceRate` para diagnóstico.
391
+ */
392
+ function metropolisHastings(program, opts = {}) {
393
+ const numSamples = opts.numSamples ?? 1000;
394
+ const burnIn = opts.burnIn ?? 1000;
395
+ const thin = opts.thin ?? 1;
396
+ const rng = opts.rng ?? Math.random;
397
+ // Trace inicial: ejecutamos hasta encontrar uno con peso finito.
398
+ let current = runFresh(program, rng);
399
+ let attempts = 0;
400
+ while (!Number.isFinite(current.logWeight) || current.rejected) {
401
+ attempts += 1;
402
+ if (attempts > 10_000) {
403
+ throw new Error('MH: no se encontró traza inicial con peso finito en 10k intentos; ' +
404
+ 'el observe podría ser inalcanzable.');
405
+ }
406
+ current = runFresh(program, rng);
407
+ }
408
+ const totalIters = burnIn + numSamples * thin;
409
+ const samples = [];
410
+ let accepted = 0;
411
+ let totalProposals = 0;
412
+ for (let i = 0; i < totalIters; i++) {
413
+ if (current.sites.length === 0) {
414
+ // Programa sin samples: no hay nada que proponer. Solo
415
+ // re-evaluamos (debería ser determinista módulo factor).
416
+ const fresh = runFresh(program, rng);
417
+ if (Number.isFinite(fresh.logWeight) && !fresh.rejected)
418
+ current = fresh;
419
+ }
420
+ else {
421
+ totalProposals += 1;
422
+ const siteIdx = Math.floor(rng() * current.sites.length);
423
+ const site = current.sites[siteIdx];
424
+ if (!site)
425
+ continue;
426
+ // Proposal: re-muestrear desde la distribución del site.
427
+ const newValue = (0, distributions_1.sampleFrom)(site.dist, rng);
428
+ // Re-ejecutar el programa forzando: en `siteIdx` el valor
429
+ // nuevo, en los demás sites el valor anterior (si coincide
430
+ // la distribución). Si la estructura cambia (forks), seguimos
431
+ // muestreando de prior para los sites nuevos.
432
+ const proposal = runWithReplay(program, current, siteIdx, newValue, rng);
433
+ if (proposal.rejected || !Number.isFinite(proposal.logWeight)) {
434
+ // proposal con peso 0: rechazo automático.
435
+ continue;
436
+ }
437
+ // Acceptance ratio: π(x') q(x | x') / (π(x) q(x' | x)).
438
+ // Con single-site proposal del prior, q(x'|x) = p(site_new) y
439
+ // q(x|x') = p(site_old). Esos se cancelan con los priors de
440
+ // logWeight (que NO incluimos: usamos sólo observes+factors
441
+ // y los priors de los SITES NO MODIFICADOS se cancelan).
442
+ // Implementación pragmática: log-ratio = newLW - oldLW.
443
+ const logRatio = proposal.logWeight - current.logWeight;
444
+ const u = rng();
445
+ if (Math.log(u) < logRatio) {
446
+ current = proposal;
447
+ accepted += 1;
448
+ }
449
+ }
450
+ if (i >= burnIn && (i - burnIn) % thin === 0) {
451
+ samples.push(current.value);
452
+ }
453
+ }
454
+ return summarize(samples, {
455
+ accepted,
456
+ total: totalProposals,
457
+ });
458
+ }
459
+ /**
460
+ * Ejecuta el programa sampleando del prior (sin replay), grabando
461
+ * cada sample para construir una `Trace`.
462
+ */
463
+ function runFresh(program, rng) {
464
+ const sites = [];
465
+ let logWeight = 0;
466
+ let rejected = false;
467
+ const sampler = {
468
+ sample(dist) {
469
+ const value = (0, distributions_1.sampleFrom)(dist, rng);
470
+ sites.push({ dist: dist, value });
471
+ // Incluimos log-prior en logWeight para que el ratio MH cierre.
472
+ logWeight += (0, distributions_1.logPdf)(dist, value);
473
+ return value;
474
+ },
475
+ observe(condition) {
476
+ if (!condition) {
477
+ rejected = true;
478
+ logWeight = -Infinity;
479
+ }
480
+ },
481
+ factor(logW) {
482
+ logWeight += logW;
483
+ },
484
+ };
485
+ const value = program(sampler);
486
+ return { sites, logWeight, value, rejected };
487
+ }
488
+ /**
489
+ * Re-ejecuta el programa "replayendo" la traza previa, pero
490
+ * forzando un nuevo valor en el sample site `replaceIdx`. Los
491
+ * sites posteriores se intentan replayear con su valor anterior;
492
+ * si el programa cambia su estructura (toma otra rama), los sites
493
+ * extra se muestrean del prior.
494
+ */
495
+ function runWithReplay(program, previous, replaceIdx, newValue, rng) {
496
+ const sites = [];
497
+ let logWeight = 0;
498
+ let rejected = false;
499
+ let cursor = 0;
500
+ const sampler = {
501
+ sample(dist) {
502
+ const idx = cursor;
503
+ cursor += 1;
504
+ let value;
505
+ if (idx === replaceIdx) {
506
+ value = newValue;
507
+ }
508
+ else {
509
+ const prev = previous.sites[idx];
510
+ // Reusar si misma distribución (kind igual y parámetros iguales).
511
+ if (prev && distEquals(prev.dist, dist)) {
512
+ value = prev.value;
513
+ }
514
+ else {
515
+ value = (0, distributions_1.sampleFrom)(dist, rng);
516
+ }
517
+ }
518
+ sites.push({ dist: dist, value });
519
+ logWeight += (0, distributions_1.logPdf)(dist, value);
520
+ return value;
521
+ },
522
+ observe(condition) {
523
+ if (!condition) {
524
+ rejected = true;
525
+ logWeight = -Infinity;
526
+ }
527
+ },
528
+ factor(logW) {
529
+ logWeight += logW;
530
+ },
531
+ };
532
+ const value = program(sampler);
533
+ return { sites, logWeight, value, rejected };
534
+ }
535
+ /**
536
+ * Igualdad estructural de distribuciones (para replay): mismo kind
537
+ * y mismos parámetros. Para arrays/maps compara longitud + entradas.
538
+ */
539
+ function distEquals(a, b) {
540
+ if (a.kind !== b.kind)
541
+ return false;
542
+ switch (a.kind) {
543
+ case 'bernoulli':
544
+ return a.p === b.p;
545
+ case 'uniform': {
546
+ const bb = b;
547
+ return a.low === bb.low && a.high === bb.high;
548
+ }
549
+ case 'normal': {
550
+ const bb = b;
551
+ return a.mean === bb.mean && a.std === bb.std;
552
+ }
553
+ case 'poisson':
554
+ return a.lambda === b.lambda;
555
+ case 'categorical': {
556
+ const bb = b;
557
+ if (a.values.length !== bb.values.length)
558
+ return false;
559
+ for (let i = 0; i < a.values.length; i++) {
560
+ if (a.values[i] !== bb.values[i])
561
+ return false;
562
+ if (a.probs[i] !== bb.probs[i])
563
+ return false;
564
+ }
565
+ return true;
566
+ }
567
+ case 'discrete': {
568
+ const bb = b;
569
+ if (a.pmf.size !== bb.pmf.size)
570
+ return false;
571
+ for (const [k, p] of a.pmf) {
572
+ if (bb.pmf.get(k) !== p)
573
+ return false;
574
+ }
575
+ return true;
576
+ }
577
+ }
578
+ }
579
+ //# sourceMappingURL=inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../src/reasoning/probabilistic/inference.ts"],"names":[],"mappings":"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"}