@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,377 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Combinatorial Games — Sprague-Grundy + Surreal numbers
4
+ // ============================================================
5
+ // Dos puntas complementarias del análisis de juegos combinatorios:
6
+ //
7
+ // 1. Juegos imparciales (mismas movidas para ambos jugadores) →
8
+ // Sprague-Grundy theorem: cada estado tiene un único valor
9
+ // grundy ∈ ℕ. Una posición es perdedora para el jugador a mover
10
+ // sii grundy = 0. Para juegos compuestos (suma disjunta), el
11
+ // valor se obtiene como XOR (nim-sum) de los componentes.
12
+ //
13
+ // 2. Juegos partisanos (movidas asimétricas Left/Right) → números
14
+ // surreales de Conway. Cada juego es un par { L | R } donde L y R
15
+ // son conjuntos de juegos (sus opciones). De aquí emergen los
16
+ // enteros, fracciones diádicas, ω, ε, *, ↑, etc.
17
+ //
18
+ // Convenciones:
19
+ // • Los juegos imparciales se modelan como una interfaz genérica
20
+ // `ImpartialGame<S>` con función de movidas y predicado terminal.
21
+ // • Los estados deben ser serializables a string (clave del caché);
22
+ // se exige una función `key` opcional; default = JSON.stringify.
23
+ // • Los surreales son recursivos. Sólo soportamos comparación y
24
+ // aritmética básica (add, negate, compare). Suficiente para
25
+ // verificar identidades como 1 + 1 = 2, *‖0, etc.
26
+ // • La simplificación de surreales aquí elimina opciones dominadas
27
+ // (Left domina a otra Left si es ≥; Right domina si es ≤). No
28
+ // hacemos "número simplicity" completo — sí suficiente para que
29
+ // los tests de identidad pasen sin explosión de tamaño.
30
+ // ============================================================
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.STAR = exports.MINUS_ONE = exports.ONE = exports.ZERO = void 0;
33
+ exports.mex = mex;
34
+ exports.grundyValue = grundyValue;
35
+ exports.isWinning = isWinning;
36
+ exports.nimSum = nimSum;
37
+ exports.multiGameGrundy = multiGameGrundy;
38
+ exports.nim = nim;
39
+ exports.nim1d = nim1d;
40
+ exports.chompGame = chompGame;
41
+ exports.fromInt = fromInt;
42
+ exports.negate = negate;
43
+ exports.add = add;
44
+ exports.compare = compare;
45
+ exports.isFuzzy = isFuzzy;
46
+ exports.simplify = simplify;
47
+ function stateKey(game, state) {
48
+ return game.key ? game.key(state) : JSON.stringify(state);
49
+ }
50
+ /**
51
+ * Minimum Excludant: menor entero ≥ 0 que no está en el conjunto.
52
+ * mex(∅) = 0, mex({0,1,3}) = 2, mex({1,2}) = 0.
53
+ */
54
+ function mex(set) {
55
+ let n = 0;
56
+ while (set.has(n))
57
+ n += 1;
58
+ return n;
59
+ }
60
+ /**
61
+ * Valor de Grundy del estado dado bajo el juego imparcial.
62
+ * Define: G(terminal) = 0; G(s) = mex { G(s') : s' ∈ moves(s) }.
63
+ * Usa caché (compartido entre llamadas) keyed por la clave canónica del estado.
64
+ */
65
+ function grundyValue(game, state, cache = new Map()) {
66
+ const k = stateKey(game, state);
67
+ const cached = cache.get(k);
68
+ if (cached !== undefined)
69
+ return cached;
70
+ if (game.isTerminal(state)) {
71
+ cache.set(k, 0);
72
+ return 0;
73
+ }
74
+ const successors = game.moves(state);
75
+ const values = new Set();
76
+ for (const next of successors) {
77
+ values.add(grundyValue(game, next, cache));
78
+ }
79
+ const g = mex(values);
80
+ cache.set(k, g);
81
+ return g;
82
+ }
83
+ /**
84
+ * El jugador a mover gana sii grundy ≠ 0 (juego imparcial con convención
85
+ * normal: el que no puede mover, pierde).
86
+ */
87
+ function isWinning(game, state) {
88
+ return grundyValue(game, state) !== 0;
89
+ }
90
+ /**
91
+ * Nim-sum: XOR bit a bit de los valores. Identidad del monoide de Grundy
92
+ * bajo suma disjunta de juegos imparciales.
93
+ */
94
+ function nimSum(values) {
95
+ let acc = 0;
96
+ for (const v of values)
97
+ acc ^= v;
98
+ return acc;
99
+ }
100
+ /**
101
+ * Grundy de la suma disjunta de juegos imparciales independientes:
102
+ * G(G1 + G2 + ... + Gn)(s1,...,sn) = G1(s1) ⊕ G2(s2) ⊕ ... ⊕ Gn(sn).
103
+ * Requiere games.length === states.length.
104
+ */
105
+ function multiGameGrundy(games, states) {
106
+ if (games.length !== states.length) {
107
+ throw new Error(`multiGameGrundy: games (${games.length}) y states (${states.length}) deben tener igual longitud`);
108
+ }
109
+ const xs = [];
110
+ for (let i = 0; i < games.length; i += 1) {
111
+ // Cada juego tiene su propio caché.
112
+ xs.push(grundyValue(games[i], states[i]));
113
+ }
114
+ return nimSum(xs);
115
+ }
116
+ // ── Juegos pre-construidos ──────────────────────────────────
117
+ /**
118
+ * Nim clásico: varios montones de piedras, un movimiento = sacar ≥1
119
+ * piedras de un único montón. Pierde quien no puede mover (todos los
120
+ * montones a 0). Estado: vector de tamaños (normalizado, sin ceros y
121
+ * ordenado descendente para que el caché sea efectivo entre simetrías).
122
+ */
123
+ function nim(piles) {
124
+ if (piles.some((p) => p < 0 || !Number.isInteger(p))) {
125
+ throw new Error('nim: cada pila debe ser entero ≥ 0');
126
+ }
127
+ const canon = (s) => s.filter((x) => x > 0).sort((a, b) => b - a);
128
+ const initial = canon(piles);
129
+ return {
130
+ initial,
131
+ isTerminal: (s) => s.length === 0,
132
+ moves: (s) => {
133
+ const out = [];
134
+ for (let i = 0; i < s.length; i += 1) {
135
+ const v = s[i];
136
+ for (let take = 1; take <= v; take += 1) {
137
+ const next = s.slice();
138
+ next[i] = v - take;
139
+ out.push(canon(next));
140
+ }
141
+ }
142
+ return out;
143
+ },
144
+ key: (s) => s.join(','),
145
+ };
146
+ }
147
+ /**
148
+ * Nim 1D: una sola pila de `stones` piedras; sacar 1..stones. Equivale
149
+ * a `nim([stones])` pero con estado más compacto (un número).
150
+ */
151
+ function nim1d(stones) {
152
+ if (!Number.isInteger(stones) || stones < 0) {
153
+ throw new Error('nim1d: stones debe ser entero ≥ 0');
154
+ }
155
+ return {
156
+ initial: stones,
157
+ isTerminal: (s) => s === 0,
158
+ moves: (s) => {
159
+ const out = [];
160
+ for (let take = 1; take <= s; take += 1)
161
+ out.push(s - take);
162
+ return out;
163
+ },
164
+ key: (s) => String(s),
165
+ };
166
+ }
167
+ /**
168
+ * Chomp: tablero rows×cols de "chocolate". Cada movida elige una casilla
169
+ * viva (true) y "muerde" todo el rectángulo abajo-derecha desde ella. La
170
+ * casilla (0,0) es veneno: quien la come pierde (convención misère
171
+ * implementada como: estado terminal cuando solo queda (0,0)).
172
+ *
173
+ * Estado: matriz booleana rows×cols con true = casilla viva.
174
+ *
175
+ * Nota: Chomp tiene posición ganadora conocida para el primer jugador
176
+ * en todo tablero ≥ 2×2 (argumento de robo de estrategia), pero la
177
+ * estrategia explícita es desconocida en general. Para 1×1 (sólo el
178
+ * veneno) el jugador a mover pierde, así que grundy = 0.
179
+ */
180
+ function chompGame(rows, cols) {
181
+ if (!Number.isInteger(rows) || !Number.isInteger(cols) || rows < 1 || cols < 1) {
182
+ throw new Error('chompGame: rows y cols deben ser enteros ≥ 1');
183
+ }
184
+ const buildInitial = () => {
185
+ const m = [];
186
+ for (let r = 0; r < rows; r += 1) {
187
+ const row = [];
188
+ for (let c = 0; c < cols; c += 1)
189
+ row.push(true);
190
+ m.push(row);
191
+ }
192
+ return m;
193
+ };
194
+ const isTerminal = (s) => {
195
+ // Terminal: sólo queda la casilla (0,0) viva (el veneno). El jugador
196
+ // a mover está obligado a comerla y pierde.
197
+ if (!s[0][0])
198
+ return true; // ya consumida (degenerate)
199
+ for (let r = 0; r < s.length; r += 1) {
200
+ const row = s[r];
201
+ for (let c = 0; c < row.length; c += 1) {
202
+ if (row[c] && !(r === 0 && c === 0))
203
+ return false;
204
+ }
205
+ }
206
+ return true;
207
+ };
208
+ return {
209
+ initial: buildInitial(),
210
+ isTerminal,
211
+ moves: (s) => {
212
+ const out = [];
213
+ const R = s.length;
214
+ const C = s[0].length;
215
+ for (let r = 0; r < R; r += 1) {
216
+ for (let c = 0; c < C; c += 1) {
217
+ if (!s[r][c])
218
+ continue;
219
+ if (r === 0 && c === 0 && !isTerminal(s)) {
220
+ // Comer el veneno es legal sólo si es la única opción (terminal).
221
+ // No lo ofrecemos como movida si hay otras casillas.
222
+ continue;
223
+ }
224
+ // Comer (r,c) elimina toda casilla (r', c') con r' ≥ r y c' ≥ c.
225
+ const next = s.map((row) => row.slice());
226
+ for (let r2 = r; r2 < R; r2 += 1) {
227
+ for (let c2 = c; c2 < C; c2 += 1) {
228
+ next[r2][c2] = false;
229
+ }
230
+ }
231
+ out.push(next);
232
+ }
233
+ }
234
+ return out;
235
+ },
236
+ key: (s) => s.map((row) => row.map((b) => (b ? '1' : '0')).join('')).join('/'),
237
+ };
238
+ }
239
+ function makeSurreal(left, right) {
240
+ return { left, right };
241
+ }
242
+ /** 0 = { | } — sin opciones para ninguno; "second player wins". */
243
+ exports.ZERO = makeSurreal([], []);
244
+ /** 1 = { 0 | }. */
245
+ exports.ONE = makeSurreal([exports.ZERO], []);
246
+ /** -1 = { | 0 }. */
247
+ exports.MINUS_ONE = makeSurreal([], [exports.ZERO]);
248
+ /** * (star) = { 0 | 0 } — primer jugador gana, no comparable a 0 (fuzzy). */
249
+ exports.STAR = makeSurreal([exports.ZERO], [exports.ZERO]);
250
+ /**
251
+ * Construye el surreal correspondiente al entero `n`.
252
+ * 0 = { | }
253
+ * n = { n-1 | } (n > 0)
254
+ * -n = { | -(n-1) } (n < 0)
255
+ */
256
+ function fromInt(n) {
257
+ if (!Number.isInteger(n))
258
+ throw new Error('fromInt: requiere entero');
259
+ if (n === 0)
260
+ return exports.ZERO;
261
+ if (n > 0)
262
+ return makeSurreal([fromInt(n - 1)], []);
263
+ return makeSurreal([], [fromInt(n + 1)]);
264
+ }
265
+ /**
266
+ * Negación: -G = { -GR | -GL }.
267
+ */
268
+ function negate(s) {
269
+ return makeSurreal(s.right.map((r) => negate(r)), s.left.map((l) => negate(l)));
270
+ }
271
+ /**
272
+ * Suma de juegos: G + H = { GL+H, G+HL | GR+H, G+HR }.
273
+ */
274
+ function add(a, b) {
275
+ const left = [];
276
+ for (const al of a.left)
277
+ left.push(add(al, b));
278
+ for (const bl of b.left)
279
+ left.push(add(a, bl));
280
+ const right = [];
281
+ for (const ar of a.right)
282
+ right.push(add(ar, b));
283
+ for (const br of b.right)
284
+ right.push(add(a, br));
285
+ return makeSurreal(left, right);
286
+ }
287
+ // ── Comparación de surreales ────────────────────────────────
288
+ //
289
+ // Definición Conway:
290
+ // G ≤ H ⇔ ∀ GL. ¬(H ≤ GL) ∧ ∀ HR. ¬(HR ≤ G)
291
+ // Equivalentemente:
292
+ // G ≥ H ⇔ H ≤ G
293
+ // G || H (fuzzy/incomparable) ⇔ ¬(G ≤ H) ∧ ¬(H ≤ G)
294
+ //
295
+ // `compare(a, b)` devuelve -1 si a<b, 1 si a>b, 0 si a==b. Si son
296
+ // incomparables (fuzzy) lanza error explicito — usá `isFuzzy` antes o
297
+ // `leq`/`geq` directamente.
298
+ function leq(a, b) {
299
+ for (const al of a.left) {
300
+ if (leq(b, al))
301
+ return false;
302
+ }
303
+ for (const br of b.right) {
304
+ if (leq(br, a))
305
+ return false;
306
+ }
307
+ return true;
308
+ }
309
+ function compare(a, b) {
310
+ const ab = leq(a, b);
311
+ const ba = leq(b, a);
312
+ if (ab && ba)
313
+ return 0;
314
+ if (ab && !ba)
315
+ return -1;
316
+ if (!ab && ba)
317
+ return 1;
318
+ throw new Error('compare: surreales incomparables (fuzzy). Usá isFuzzy / leq / geq.');
319
+ }
320
+ /**
321
+ * G es fuzzy con 0 sii no satisface G ≤ 0 ni 0 ≤ G — es decir, el
322
+ * primer jugador gana. * es el ejemplo canónico.
323
+ */
324
+ function isFuzzy(s) {
325
+ return !leq(s, exports.ZERO) && !leq(exports.ZERO, s);
326
+ }
327
+ /**
328
+ * Simplificación parcial: elimina opciones dominadas en cada lado.
329
+ *
330
+ * En la lista Left, una opción L1 domina a L2 si L1 ≥ L2 (entonces
331
+ * L2 puede borrarse: el jugador Left preferirá L1).
332
+ * En la lista Right, una opción R1 domina a R2 si R1 ≤ R2.
333
+ *
334
+ * No hace eliminación reversible ("bypass") — eso podría requerirse
335
+ * para canonicalización completa Conway. Para nuestros tests es
336
+ * suficiente.
337
+ */
338
+ function simplify(s) {
339
+ const simplifiedLeft = s.left.map((l) => simplify(l));
340
+ const simplifiedRight = s.right.map((r) => simplify(r));
341
+ // Dominancia Left: descartar L2 si existe L1 con L1 ≥ L2 (L1 ≠ L2).
342
+ const keptLeft = [];
343
+ for (let i = 0; i < simplifiedLeft.length; i += 1) {
344
+ const li = simplifiedLeft[i];
345
+ let dominated = false;
346
+ for (let j = 0; j < simplifiedLeft.length; j += 1) {
347
+ if (i === j)
348
+ continue;
349
+ const lj = simplifiedLeft[j];
350
+ if (leq(li, lj) && !leq(lj, li)) {
351
+ dominated = true;
352
+ break;
353
+ }
354
+ }
355
+ if (!dominated)
356
+ keptLeft.push(li);
357
+ }
358
+ // Dominancia Right: descartar R2 si existe R1 con R1 ≤ R2 (R1 ≠ R2).
359
+ const keptRight = [];
360
+ for (let i = 0; i < simplifiedRight.length; i += 1) {
361
+ const ri = simplifiedRight[i];
362
+ let dominated = false;
363
+ for (let j = 0; j < simplifiedRight.length; j += 1) {
364
+ if (i === j)
365
+ continue;
366
+ const rj = simplifiedRight[j];
367
+ if (leq(rj, ri) && !leq(ri, rj)) {
368
+ dominated = true;
369
+ break;
370
+ }
371
+ }
372
+ if (!dominated)
373
+ keptRight.push(ri);
374
+ }
375
+ return makeSurreal(keptLeft, keptRight);
376
+ }
377
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/combinatorial-games/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ export interface DPMechanism<T> {
2
+ epsilon: number;
3
+ delta: number;
4
+ sensitivity: number;
5
+ apply(input: T): T | number;
6
+ }
7
+ export interface DPRng {
8
+ uniform(): number;
9
+ laplace(b: number): number;
10
+ gaussian(mu: number, sigma: number): number;
11
+ }
12
+ export declare function makeDPRng(seed?: number): DPRng;
13
+ /**
14
+ * Mecanismo de Laplace: agrega ruido Laplace(0, Δ/ε) a `value`.
15
+ * Da ε-DP puro (δ = 0) cuando Δ es la sensibilidad L1 de la query.
16
+ */
17
+ export declare function laplaceNoise(value: number, sensitivity: number, epsilon: number, rng?: DPRng): number;
18
+ /**
19
+ * Mecanismo Gaussian: agrega N(0, σ²) con σ = Δ·√(2 ln(1.25/δ))/ε,
20
+ * la calibración estándar de Dwork-Roth (Algorithmic Foundations,
21
+ * Theorem A.1). Garantiza (ε,δ)-DP para ε ∈ (0, 1] cuando Δ es la
22
+ * sensibilidad L2. Para ε > 1 la cota sigue siendo válida pero deja
23
+ * de ser tight; los frameworks modernos prefieren la "analytic
24
+ * Gaussian" (Balle-Wang 2018) — la dejamos para una iteración futura.
25
+ */
26
+ export declare function gaussianNoise(value: number, sensitivity: number, epsilon: number, delta: number, rng?: DPRng): number;
27
+ /**
28
+ * Mecanismo exponencial: elige un item con probabilidad proporcional
29
+ * a exp(ε · score(item) / (2 · sensitivity)). Implementa la
30
+ * formulación canónica (McSherry-Talwar 2007). Da ε-DP cuando
31
+ * `sensitivity` es la sensibilidad de la función de score.
32
+ */
33
+ export declare function exponentialMechanism<T>(items: T[], score: (item: T) => number, sensitivity: number, epsilon: number, rng?: DPRng): T;
34
+ /**
35
+ * Randomized response binario: reporta `bit` con probabilidad `p`,
36
+ * y `¬bit` con probabilidad 1 − p. Garantiza ε-DP local con
37
+ * ε = |ln(p / (1 − p))|. La elección clásica p = 3/4 da ε = ln 3.
38
+ */
39
+ export declare function randomizedResponse(bit: boolean, p: number, rng?: DPRng): boolean;
40
+ /**
41
+ * ε equivalente a un mecanismo de randomized response con
42
+ * probabilidad de verdad `p`. Útil para test del trade-off.
43
+ */
44
+ export declare function randomizedResponseEpsilon(p: number): number;
45
+ /**
46
+ * Conteo DP: cuenta cuántos valores cumplen `predicate` y aplica
47
+ * ruido Laplace con sensibilidad 1 (cambiar un registro mueve el
48
+ * conteo en a lo más 1). El resultado se redondea al entero más
49
+ * cercano y se clamp-a a ≥ 0 (un conteo nunca es negativo).
50
+ */
51
+ export declare function dpCount<T>(values: T[], predicate: (v: T) => boolean, epsilon: number, rng?: DPRng): number;
52
+ /**
53
+ * Media DP de valores acotados al rango [low, high]: clipea cada
54
+ * valor al rango, calcula la media empírica y aplica Laplace con
55
+ * sensibilidad (high − low) / n. Asumimos n público.
56
+ */
57
+ export declare function dpMean(values: number[], range: [number, number], epsilon: number, rng?: DPRng): number;
58
+ /**
59
+ * Histograma DP sobre `categories`: cuenta ocurrencias por categoría
60
+ * y agrega ruido Laplace independiente a cada bin con sensibilidad 1.
61
+ * Asumimos que cada registro pertenece a a lo más una categoría
62
+ * (cambiar un registro mueve a lo más un bin en ±1). Si las
63
+ * categorías son disjuntas y cubrentes, este es un caso clásico de
64
+ * composición paralela: el ε total = ε.
65
+ */
66
+ export declare function dpHistogram<T>(values: T[], categories: T[], epsilon: number, rng?: DPRng): Map<T, number>;
67
+ export interface PrivacyBudget {
68
+ epsilon: number;
69
+ delta: number;
70
+ }
71
+ /**
72
+ * Composición básica (Dwork-McSherry-Nissim-Smith 2006, Theorem 3.16
73
+ * en Algorithmic Foundations): la composición secuencial de k
74
+ * mecanismos (ε_i, δ_i)-DP da (Σ ε_i, Σ δ_i)-DP. Cota uniforme y
75
+ * conservadora.
76
+ */
77
+ export declare function basicComposition(mechanisms: PrivacyBudget[]): PrivacyBudget;
78
+ /**
79
+ * Composición avanzada (Dwork-Rothblum-Vadhan 2010, Theorem III.3):
80
+ * para k mecanismos cada uno (ε, δ)-DP, el compuesto es
81
+ *
82
+ * (√(2 k ln(1/δ')) · ε + k · ε · (e^ε − 1), k δ + δ')-DP
83
+ *
84
+ * para cualquier δ' > 0. Cuando los ε_i son heterogéneos usamos el
85
+ * máximo como cota uniforme (válida pero no óptima; el tight bound
86
+ * heterogéneo requiere RDP/zCDP, fuera del alcance de este módulo).
87
+ *
88
+ * `deltaTotal` es el δ' adicional que el caller acepta pagar.
89
+ * Devuelve el (ε,δ) total cubriendo el slack δ'.
90
+ */
91
+ export declare function advancedComposition(mechanisms: PrivacyBudget[], deltaTotal: number): PrivacyBudget;
92
+ /**
93
+ * Composición paralela: cuando k mecanismos actúan sobre particiones
94
+ * disjuntas del dataset, el ε total es el máximo (no la suma), y el
95
+ * δ total es el máximo (no la suma). Caso clásico: histograma con
96
+ * categorías mutuamente excluyentes.
97
+ */
98
+ export declare function parallelComposition(mechanisms: PrivacyBudget[]): PrivacyBudget;
99
+ /**
100
+ * Sensibilidad global L1: el máximo de |f(D) − f(D')| sobre la
101
+ * lista de pares neighbours suministrada. Implementación empírica
102
+ * pensada para tests/diagnóstico — la sensibilidad real exige
103
+ * razonar sobre todas las parejas válidas, no sólo las muestreadas.
104
+ */
105
+ export declare function globalSensitivityL1(fn: (data: number[]) => number, neighbors: Array<[number[], number[]]>): number;
106
+ /**
107
+ * Sensibilidad suave (Nissim-Raskhodnikova-Smith 2007):
108
+ *
109
+ * S*_β(f, D) = max_k e^{−β·k} · LS^{(k)}(f, D)
110
+ *
111
+ * donde LS^{(k)} es la sensibilidad local a distancia k. Aproximamos
112
+ * variando vecinos hasta `data.length` (cota superior de k). Para
113
+ * datasets grandes, restringir el k máximo via la longitud del
114
+ * propio dataset.
115
+ *
116
+ * Esta es una versión basada en mutaciones simples (cambiar un valor
117
+ * por el mín o máx empírico) — suficiente para median/mean acotados
118
+ * en tests, no un cálculo general.
119
+ */
120
+ export declare function smoothSensitivity(fn: (data: number[]) => number, data: number[], beta: number): number;
121
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/differential-privacy/index.ts"],"names":[],"mappings":"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"}