@stevenvo780/st-lang 4.5.0 → 4.5.2

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 (286) hide show
  1. package/README.md +78 -37
  2. package/dist/bdd/index.d.ts +4 -0
  3. package/dist/bdd/index.d.ts.map +1 -0
  4. package/dist/bdd/index.js +29 -0
  5. package/dist/bdd/index.js.map +1 -0
  6. package/dist/bdd/manager.d.ts +122 -0
  7. package/dist/bdd/manager.d.ts.map +1 -0
  8. package/dist/bdd/manager.js +524 -0
  9. package/dist/bdd/manager.js.map +1 -0
  10. package/dist/bdd/types.d.ts +20 -0
  11. package/dist/bdd/types.d.ts.map +1 -0
  12. package/dist/bdd/types.js +28 -0
  13. package/dist/bdd/types.js.map +1 -0
  14. package/dist/game-theory/common-games.d.ts +50 -0
  15. package/dist/game-theory/common-games.d.ts.map +1 -0
  16. package/dist/game-theory/common-games.js +112 -0
  17. package/dist/game-theory/common-games.js.map +1 -0
  18. package/dist/game-theory/dominance.d.ts +26 -0
  19. package/dist/game-theory/dominance.d.ts.map +1 -0
  20. package/dist/game-theory/dominance.js +203 -0
  21. package/dist/game-theory/dominance.js.map +1 -0
  22. package/dist/game-theory/index.d.ts +8 -0
  23. package/dist/game-theory/index.d.ts.map +1 -0
  24. package/dist/game-theory/index.js +47 -0
  25. package/dist/game-theory/index.js.map +1 -0
  26. package/dist/game-theory/lemke-howson.d.ts +3 -0
  27. package/dist/game-theory/lemke-howson.d.ts.map +1 -0
  28. package/dist/game-theory/lemke-howson.js +269 -0
  29. package/dist/game-theory/lemke-howson.js.map +1 -0
  30. package/dist/game-theory/linalg.d.ts +7 -0
  31. package/dist/game-theory/linalg.d.ts.map +1 -0
  32. package/dist/game-theory/linalg.js +69 -0
  33. package/dist/game-theory/linalg.js.map +1 -0
  34. package/dist/game-theory/pure-nash.d.ts +3 -0
  35. package/dist/game-theory/pure-nash.d.ts.map +1 -0
  36. package/dist/game-theory/pure-nash.js +86 -0
  37. package/dist/game-theory/pure-nash.js.map +1 -0
  38. package/dist/game-theory/support-enumeration.d.ts +3 -0
  39. package/dist/game-theory/support-enumeration.d.ts.map +1 -0
  40. package/dist/game-theory/support-enumeration.js +214 -0
  41. package/dist/game-theory/support-enumeration.js.map +1 -0
  42. package/dist/game-theory/types.d.ts +57 -0
  43. package/dist/game-theory/types.d.ts.map +1 -0
  44. package/dist/game-theory/types.js +191 -0
  45. package/dist/game-theory/types.js.map +1 -0
  46. package/dist/index.d.ts +19 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +75 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/information-theory/index.d.ts +29 -0
  51. package/dist/information-theory/index.d.ts.map +1 -0
  52. package/dist/information-theory/index.js +323 -0
  53. package/dist/information-theory/index.js.map +1 -0
  54. package/dist/namespaces/logic.d.ts +42 -0
  55. package/dist/namespaces/logic.d.ts.map +1 -0
  56. package/dist/namespaces/logic.js +112 -0
  57. package/dist/namespaces/logic.js.map +1 -0
  58. package/dist/namespaces/proof-systems.d.ts +18 -0
  59. package/dist/namespaces/proof-systems.d.ts.map +1 -0
  60. package/dist/namespaces/proof-systems.js +59 -0
  61. package/dist/namespaces/proof-systems.js.map +1 -0
  62. package/dist/namespaces/reasoning.d.ts +26 -0
  63. package/dist/namespaces/reasoning.d.ts.map +1 -0
  64. package/dist/namespaces/reasoning.js +72 -0
  65. package/dist/namespaces/reasoning.js.map +1 -0
  66. package/dist/namespaces/semantics.d.ts +21 -0
  67. package/dist/namespaces/semantics.d.ts.map +1 -0
  68. package/dist/namespaces/semantics.js +64 -0
  69. package/dist/namespaces/semantics.js.map +1 -0
  70. package/dist/namespaces/solvers.d.ts +22 -0
  71. package/dist/namespaces/solvers.d.ts.map +1 -0
  72. package/dist/namespaces/solvers.js +66 -0
  73. package/dist/namespaces/solvers.js.map +1 -0
  74. package/dist/namespaces/type-theory.d.ts +22 -0
  75. package/dist/namespaces/type-theory.d.ts.map +1 -0
  76. package/dist/namespaces/type-theory.js +65 -0
  77. package/dist/namespaces/type-theory.js.map +1 -0
  78. package/dist/optimization/branch-and-bound.d.ts +11 -0
  79. package/dist/optimization/branch-and-bound.d.ts.map +1 -0
  80. package/dist/optimization/branch-and-bound.js +311 -0
  81. package/dist/optimization/branch-and-bound.js.map +1 -0
  82. package/dist/optimization/index.d.ts +5 -0
  83. package/dist/optimization/index.d.ts.map +1 -0
  84. package/dist/optimization/index.js +20 -0
  85. package/dist/optimization/index.js.map +1 -0
  86. package/dist/optimization/simplex.d.ts +8 -0
  87. package/dist/optimization/simplex.d.ts.map +1 -0
  88. package/dist/optimization/simplex.js +408 -0
  89. package/dist/optimization/simplex.js.map +1 -0
  90. package/dist/optimization/standard-form.d.ts +11 -0
  91. package/dist/optimization/standard-form.d.ts.map +1 -0
  92. package/dist/optimization/standard-form.js +112 -0
  93. package/dist/optimization/standard-form.js.map +1 -0
  94. package/dist/optimization/types.d.ts +44 -0
  95. package/dist/optimization/types.d.ts.map +1 -0
  96. package/dist/optimization/types.js +15 -0
  97. package/dist/optimization/types.js.map +1 -0
  98. package/dist/profiles/hol/connectives.d.ts +46 -0
  99. package/dist/profiles/hol/connectives.d.ts.map +1 -0
  100. package/dist/profiles/hol/connectives.js +104 -0
  101. package/dist/profiles/hol/connectives.js.map +1 -0
  102. package/dist/profiles/hol/index.d.ts +7 -0
  103. package/dist/profiles/hol/index.d.ts.map +1 -0
  104. package/dist/profiles/hol/index.js +77 -0
  105. package/dist/profiles/hol/index.js.map +1 -0
  106. package/dist/profiles/hol/rules.d.ts +31 -0
  107. package/dist/profiles/hol/rules.d.ts.map +1 -0
  108. package/dist/profiles/hol/rules.js +258 -0
  109. package/dist/profiles/hol/rules.js.map +1 -0
  110. package/dist/profiles/hol/term.d.ts +52 -0
  111. package/dist/profiles/hol/term.d.ts.map +1 -0
  112. package/dist/profiles/hol/term.js +345 -0
  113. package/dist/profiles/hol/term.js.map +1 -0
  114. package/dist/profiles/hol/type-system.d.ts +38 -0
  115. package/dist/profiles/hol/type-system.d.ts.map +1 -0
  116. package/dist/profiles/hol/type-system.js +133 -0
  117. package/dist/profiles/hol/type-system.js.map +1 -0
  118. package/dist/profiles/hol/types.d.ts +59 -0
  119. package/dist/profiles/hol/types.d.ts.map +1 -0
  120. package/dist/profiles/hol/types.js +26 -0
  121. package/dist/profiles/hol/types.js.map +1 -0
  122. package/dist/smt-lib/ast.d.ts +138 -0
  123. package/dist/smt-lib/ast.d.ts.map +1 -0
  124. package/dist/smt-lib/ast.js +73 -0
  125. package/dist/smt-lib/ast.js.map +1 -0
  126. package/dist/smt-lib/emitter.d.ts +12 -0
  127. package/dist/smt-lib/emitter.d.ts.map +1 -0
  128. package/dist/smt-lib/emitter.js +174 -0
  129. package/dist/smt-lib/emitter.js.map +1 -0
  130. package/dist/smt-lib/index.d.ts +6 -0
  131. package/dist/smt-lib/index.d.ts.map +1 -0
  132. package/dist/smt-lib/index.js +31 -0
  133. package/dist/smt-lib/index.js.map +1 -0
  134. package/dist/smt-lib/parser.d.ts +13 -0
  135. package/dist/smt-lib/parser.d.ts.map +1 -0
  136. package/dist/smt-lib/parser.js +614 -0
  137. package/dist/smt-lib/parser.js.map +1 -0
  138. package/dist/smt-lib/tokenizer.d.ts +16 -0
  139. package/dist/smt-lib/tokenizer.d.ts.map +1 -0
  140. package/dist/smt-lib/tokenizer.js +234 -0
  141. package/dist/smt-lib/tokenizer.js.map +1 -0
  142. package/dist/tests/api/namespaces.test.d.ts +9 -0
  143. package/dist/tests/api/namespaces.test.d.ts.map +1 -0
  144. package/dist/tests/api/namespaces.test.js +218 -0
  145. package/dist/tests/api/namespaces.test.js.map +1 -0
  146. package/dist/tests/bdd/manager.test.d.ts +2 -0
  147. package/dist/tests/bdd/manager.test.d.ts.map +1 -0
  148. package/dist/tests/bdd/manager.test.js +472 -0
  149. package/dist/tests/bdd/manager.test.js.map +1 -0
  150. package/dist/tests/game-theory/game-theory.test.d.ts +2 -0
  151. package/dist/tests/game-theory/game-theory.test.d.ts.map +1 -0
  152. package/dist/tests/game-theory/game-theory.test.js +252 -0
  153. package/dist/tests/game-theory/game-theory.test.js.map +1 -0
  154. package/dist/tests/hol/hol.test.d.ts +2 -0
  155. package/dist/tests/hol/hol.test.d.ts.map +1 -0
  156. package/dist/tests/hol/hol.test.js +340 -0
  157. package/dist/tests/hol/hol.test.js.map +1 -0
  158. package/dist/tests/information-theory/information-theory.test.d.ts +2 -0
  159. package/dist/tests/information-theory/information-theory.test.d.ts.map +1 -0
  160. package/dist/tests/information-theory/information-theory.test.js +291 -0
  161. package/dist/tests/information-theory/information-theory.test.js.map +1 -0
  162. package/dist/tests/optimization/ilp.test.d.ts +2 -0
  163. package/dist/tests/optimization/ilp.test.d.ts.map +1 -0
  164. package/dist/tests/optimization/ilp.test.js +204 -0
  165. package/dist/tests/optimization/ilp.test.js.map +1 -0
  166. package/dist/tests/optimization/lp.test.d.ts +2 -0
  167. package/dist/tests/optimization/lp.test.d.ts.map +1 -0
  168. package/dist/tests/optimization/lp.test.js +224 -0
  169. package/dist/tests/optimization/lp.test.js.map +1 -0
  170. package/dist/tests/properties/agm.property.test.d.ts +2 -0
  171. package/dist/tests/properties/agm.property.test.d.ts.map +1 -0
  172. package/dist/tests/properties/agm.property.test.js +75 -0
  173. package/dist/tests/properties/agm.property.test.js.map +1 -0
  174. package/dist/tests/properties/anti-unification.property.test.d.ts +2 -0
  175. package/dist/tests/properties/anti-unification.property.test.d.ts.map +1 -0
  176. package/dist/tests/properties/anti-unification.property.test.js +43 -0
  177. package/dist/tests/properties/anti-unification.property.test.js.map +1 -0
  178. package/dist/tests/properties/argumentation.property.test.d.ts +2 -0
  179. package/dist/tests/properties/argumentation.property.test.d.ts.map +1 -0
  180. package/dist/tests/properties/argumentation.property.test.js +51 -0
  181. package/dist/tests/properties/argumentation.property.test.js.map +1 -0
  182. package/dist/tests/properties/bayesian.property.test.d.ts +2 -0
  183. package/dist/tests/properties/bayesian.property.test.d.ts.map +1 -0
  184. package/dist/tests/properties/bayesian.property.test.js +32 -0
  185. package/dist/tests/properties/bayesian.property.test.js.map +1 -0
  186. package/dist/tests/properties/bisimulation.property.test.d.ts +2 -0
  187. package/dist/tests/properties/bisimulation.property.test.d.ts.map +1 -0
  188. package/dist/tests/properties/bisimulation.property.test.js +50 -0
  189. package/dist/tests/properties/bisimulation.property.test.js.map +1 -0
  190. package/dist/tests/properties/cdcl.property.test.d.ts +2 -0
  191. package/dist/tests/properties/cdcl.property.test.d.ts.map +1 -0
  192. package/dist/tests/properties/cdcl.property.test.js +70 -0
  193. package/dist/tests/properties/cdcl.property.test.js.map +1 -0
  194. package/dist/tests/properties/coinduction.property.test.d.ts +2 -0
  195. package/dist/tests/properties/coinduction.property.test.d.ts.map +1 -0
  196. package/dist/tests/properties/coinduction.property.test.js +34 -0
  197. package/dist/tests/properties/coinduction.property.test.js.map +1 -0
  198. package/dist/tests/properties/constructive-reals.property.test.d.ts +2 -0
  199. package/dist/tests/properties/constructive-reals.property.test.d.ts.map +1 -0
  200. package/dist/tests/properties/constructive-reals.property.test.js +59 -0
  201. package/dist/tests/properties/constructive-reals.property.test.js.map +1 -0
  202. package/dist/tests/properties/csp.property.test.d.ts +2 -0
  203. package/dist/tests/properties/csp.property.test.d.ts.map +1 -0
  204. package/dist/tests/properties/csp.property.test.js +58 -0
  205. package/dist/tests/properties/csp.property.test.js.map +1 -0
  206. package/dist/tests/properties/generators.d.ts +78 -0
  207. package/dist/tests/properties/generators.d.ts.map +1 -0
  208. package/dist/tests/properties/generators.js +348 -0
  209. package/dist/tests/properties/generators.js.map +1 -0
  210. package/dist/tests/properties/ho-unify.property.test.d.ts +2 -0
  211. package/dist/tests/properties/ho-unify.property.test.d.ts.map +1 -0
  212. package/dist/tests/properties/ho-unify.property.test.js +46 -0
  213. package/dist/tests/properties/ho-unify.property.test.js.map +1 -0
  214. package/dist/tests/properties/hyperreal.property.test.d.ts +2 -0
  215. package/dist/tests/properties/hyperreal.property.test.d.ts.map +1 -0
  216. package/dist/tests/properties/hyperreal.property.test.js +33 -0
  217. package/dist/tests/properties/hyperreal.property.test.js.map +1 -0
  218. package/dist/tests/properties/intuit-nj.property.test.d.ts +2 -0
  219. package/dist/tests/properties/intuit-nj.property.test.d.ts.map +1 -0
  220. package/dist/tests/properties/intuit-nj.property.test.js +57 -0
  221. package/dist/tests/properties/intuit-nj.property.test.js.map +1 -0
  222. package/dist/tests/properties/lambda-calc.property.test.d.ts +2 -0
  223. package/dist/tests/properties/lambda-calc.property.test.d.ts.map +1 -0
  224. package/dist/tests/properties/lambda-calc.property.test.js +35 -0
  225. package/dist/tests/properties/lambda-calc.property.test.js.map +1 -0
  226. package/dist/tests/properties/mln.property.test.d.ts +2 -0
  227. package/dist/tests/properties/mln.property.test.d.ts.map +1 -0
  228. package/dist/tests/properties/mln.property.test.js +41 -0
  229. package/dist/tests/properties/mln.property.test.js.map +1 -0
  230. package/dist/tests/properties/mltt.property.test.d.ts +2 -0
  231. package/dist/tests/properties/mltt.property.test.d.ts.map +1 -0
  232. package/dist/tests/properties/mltt.property.test.js +33 -0
  233. package/dist/tests/properties/mltt.property.test.js.map +1 -0
  234. package/dist/tests/properties/nbe.property.test.d.ts +2 -0
  235. package/dist/tests/properties/nbe.property.test.d.ts.map +1 -0
  236. package/dist/tests/properties/nbe.property.test.js +44 -0
  237. package/dist/tests/properties/nbe.property.test.js.map +1 -0
  238. package/dist/tests/properties/planning.property.test.d.ts +2 -0
  239. package/dist/tests/properties/planning.property.test.d.ts.map +1 -0
  240. package/dist/tests/properties/planning.property.test.js +51 -0
  241. package/dist/tests/properties/planning.property.test.js.map +1 -0
  242. package/dist/tests/properties/profile-bridge.property.test.d.ts +2 -0
  243. package/dist/tests/properties/profile-bridge.property.test.d.ts.map +1 -0
  244. package/dist/tests/properties/profile-bridge.property.test.js +71 -0
  245. package/dist/tests/properties/profile-bridge.property.test.js.map +1 -0
  246. package/dist/tests/properties/refinement-types.property.test.d.ts +2 -0
  247. package/dist/tests/properties/refinement-types.property.test.d.ts.map +1 -0
  248. package/dist/tests/properties/refinement-types.property.test.js +37 -0
  249. package/dist/tests/properties/refinement-types.property.test.js.map +1 -0
  250. package/dist/tests/properties/sequent-g3.property.test.d.ts +2 -0
  251. package/dist/tests/properties/sequent-g3.property.test.d.ts.map +1 -0
  252. package/dist/tests/properties/sequent-g3.property.test.js +34 -0
  253. package/dist/tests/properties/sequent-g3.property.test.js.map +1 -0
  254. package/dist/tests/properties/symbolic-diff.property.test.d.ts +2 -0
  255. package/dist/tests/properties/symbolic-diff.property.test.d.ts.map +1 -0
  256. package/dist/tests/properties/symbolic-diff.property.test.js +49 -0
  257. package/dist/tests/properties/symbolic-diff.property.test.js.map +1 -0
  258. package/dist/tests/properties/system-f.property.test.d.ts +2 -0
  259. package/dist/tests/properties/system-f.property.test.d.ts.map +1 -0
  260. package/dist/tests/properties/system-f.property.test.js +37 -0
  261. package/dist/tests/properties/system-f.property.test.js.map +1 -0
  262. package/dist/tests/properties/theorem-cache.property.test.d.ts +2 -0
  263. package/dist/tests/properties/theorem-cache.property.test.d.ts.map +1 -0
  264. package/dist/tests/properties/theorem-cache.property.test.js +38 -0
  265. package/dist/tests/properties/theorem-cache.property.test.js.map +1 -0
  266. package/dist/tests/properties/trs.property.test.d.ts +2 -0
  267. package/dist/tests/properties/trs.property.test.d.ts.map +1 -0
  268. package/dist/tests/properties/trs.property.test.js +34 -0
  269. package/dist/tests/properties/trs.property.test.js.map +1 -0
  270. package/dist/tests/properties/unification.property.test.d.ts +2 -0
  271. package/dist/tests/properties/unification.property.test.d.ts.map +1 -0
  272. package/dist/tests/properties/unification.property.test.js +42 -0
  273. package/dist/tests/properties/unification.property.test.js.map +1 -0
  274. package/dist/tests/smt-lib/emitter.test.d.ts +2 -0
  275. package/dist/tests/smt-lib/emitter.test.d.ts.map +1 -0
  276. package/dist/tests/smt-lib/emitter.test.js +155 -0
  277. package/dist/tests/smt-lib/emitter.test.js.map +1 -0
  278. package/dist/tests/smt-lib/parser.test.d.ts +2 -0
  279. package/dist/tests/smt-lib/parser.test.d.ts.map +1 -0
  280. package/dist/tests/smt-lib/parser.test.js +164 -0
  281. package/dist/tests/smt-lib/parser.test.js.map +1 -0
  282. package/dist/tests/smt-lib/tokenizer.test.d.ts +2 -0
  283. package/dist/tests/smt-lib/tokenizer.test.d.ts.map +1 -0
  284. package/dist/tests/smt-lib/tokenizer.test.js +59 -0
  285. package/dist/tests/smt-lib/tokenizer.test.js.map +1 -0
  286. package/package.json +3 -1
@@ -0,0 +1,524 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ROBDD — Manager con unique table + apply algorithm
4
+ // ============================================================
5
+ //
6
+ // Implementación clásica de Bryant (1986):
7
+ // - Unique table: garantiza canonicidad estructural
8
+ // - Apply: combinador genérico para AND/OR/XOR/... con memoización
9
+ // - ITE (If-Then-Else): operador universal, reduce las binarias
10
+ // - Quantificadores ∃/∀ implementados sobre apply
11
+ // - Sat counting con bigint para evitar overflow en >53 vars
12
+ //
13
+ // Convención: el orden de variables se respeta en todo el DAG.
14
+ // Si en una rama la variable de un hijo tiene índice de orden <=
15
+ // que el padre, hay un bug — el invariante de "ordered" se mantiene
16
+ // porque apply siempre desciende por la variable de menor orden.
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.BDDManager = void 0;
19
+ const types_1 = require("./types");
20
+ // Clave para unique table: variable + ids de hijos.
21
+ // Para terminales usamos 'T'/'F' como id especial.
22
+ function keyOf(variable, low, high) {
23
+ const lid = low.kind === 'terminal' ? (low.value ? 'T' : 'F') : `N${low.id}`;
24
+ const hid = high.kind === 'terminal' ? (high.value ? 'T' : 'F') : `N${high.id}`;
25
+ return `${variable}|${lid}|${hid}`;
26
+ }
27
+ function applyKey(op, a, b) {
28
+ const aid = a.kind === 'terminal' ? (a.value ? 'T' : 'F') : `N${a.id}`;
29
+ const bid = b.kind === 'terminal' ? (b.value ? 'T' : 'F') : `N${b.id}`;
30
+ return `${op}|${aid}|${bid}`;
31
+ }
32
+ function iteKey(c, t, e) {
33
+ const cid = c.kind === 'terminal' ? (c.value ? 'T' : 'F') : `N${c.id}`;
34
+ const tid = t.kind === 'terminal' ? (t.value ? 'T' : 'F') : `N${t.id}`;
35
+ const eid = e.kind === 'terminal' ? (e.value ? 'T' : 'F') : `N${e.id}`;
36
+ return `${cid}|${tid}|${eid}`;
37
+ }
38
+ class BDDManager {
39
+ numVars;
40
+ TRUE = { kind: 'terminal', value: true };
41
+ FALSE = { kind: 'terminal', value: false };
42
+ uniqueTable = new Map();
43
+ nextId = 1;
44
+ reductions = 0;
45
+ // memo caches per binary op + ite
46
+ memoAnd = new Map();
47
+ memoOr = new Map();
48
+ memoXor = new Map();
49
+ memoIte = new Map();
50
+ memoNot = new Map();
51
+ varOrder;
52
+ constructor(numVars) {
53
+ this.numVars = numVars;
54
+ if (numVars < 0)
55
+ throw new Error('BDDManager: numVars must be >= 0');
56
+ this.varOrder = Array.from({ length: numVars }, (_, i) => i);
57
+ }
58
+ // ----------------------------------------------------------
59
+ // Orden de variables
60
+ // ----------------------------------------------------------
61
+ /**
62
+ * Cambia el orden global de variables. Invalida memo caches porque
63
+ * el orden afecta la estructura de los nodos. NO reordena nodos ya
64
+ * construidos — si los reutilizas tras setVarOrder pueden quedar
65
+ * inconsistentes; recomendado para sesiones nuevas.
66
+ */
67
+ setVarOrder(order) {
68
+ if (order.length !== this.numVars) {
69
+ throw new Error(`setVarOrder: expected ${this.numVars} vars, got ${order.length}`);
70
+ }
71
+ const seen = new Set();
72
+ for (const v of order) {
73
+ if (v < 0 || v >= this.numVars) {
74
+ throw new Error(`setVarOrder: variable ${v} out of range`);
75
+ }
76
+ if (seen.has(v))
77
+ throw new Error(`setVarOrder: variable ${v} repeated`);
78
+ seen.add(v);
79
+ }
80
+ this.varOrder = [...order];
81
+ this.uniqueTable.clear();
82
+ this.memoAnd.clear();
83
+ this.memoOr.clear();
84
+ this.memoXor.clear();
85
+ this.memoIte.clear();
86
+ this.memoNot.clear();
87
+ this.nextId = 1;
88
+ }
89
+ /** Posición de la variable v dentro del orden actual (0 = top). */
90
+ orderPos(v) {
91
+ return this.varOrder.indexOf(v);
92
+ }
93
+ /** Devuelve la variable "top" de un nodo o +∞ si es terminal. */
94
+ topVarPos(b) {
95
+ if ((0, types_1.isTerminal)(b))
96
+ return Number.POSITIVE_INFINITY;
97
+ return this.orderPos(b.variable);
98
+ }
99
+ // ----------------------------------------------------------
100
+ // Constructores básicos
101
+ // ----------------------------------------------------------
102
+ true_() {
103
+ return this.TRUE;
104
+ }
105
+ false_() {
106
+ return this.FALSE;
107
+ }
108
+ /**
109
+ * Crea/recupera un nodo interno con reducción (R1) + (R2).
110
+ */
111
+ makeNode(variable, low, high) {
112
+ if (low === high) {
113
+ // R1: eliminación
114
+ this.reductions++;
115
+ return low;
116
+ }
117
+ const key = keyOf(variable, low, high);
118
+ const existing = this.uniqueTable.get(key);
119
+ if (existing) {
120
+ this.reductions++;
121
+ return existing;
122
+ }
123
+ const node = {
124
+ kind: 'internal',
125
+ variable,
126
+ low,
127
+ high,
128
+ id: this.nextId++,
129
+ };
130
+ this.uniqueTable.set(key, node);
131
+ return node;
132
+ }
133
+ /** BDD de la variable i: nodo (i, FALSE, TRUE). */
134
+ variable(i) {
135
+ if (i < 0 || i >= this.numVars) {
136
+ throw new Error(`variable(${i}): out of range 0..${this.numVars - 1}`);
137
+ }
138
+ return this.makeNode(i, this.FALSE, this.TRUE);
139
+ }
140
+ // ----------------------------------------------------------
141
+ // Operaciones
142
+ // ----------------------------------------------------------
143
+ /**
144
+ * Negación: implementada como ITE(b, FALSE, TRUE).
145
+ * Con memo dedicado para evitar recomputación.
146
+ */
147
+ not_(b) {
148
+ if ((0, types_1.isTerminal)(b)) {
149
+ return b.value ? this.FALSE : this.TRUE;
150
+ }
151
+ const key = `N${b.id}`;
152
+ const cached = this.memoNot.get(key);
153
+ if (cached)
154
+ return cached;
155
+ const result = this.makeNode(b.variable, this.not_(b.low), this.not_(b.high));
156
+ this.memoNot.set(key, result);
157
+ return result;
158
+ }
159
+ and_(a, b) {
160
+ return this.applyOp('and', a, b);
161
+ }
162
+ or_(a, b) {
163
+ return this.applyOp('or', a, b);
164
+ }
165
+ xor(a, b) {
166
+ return this.applyOp('xor', a, b);
167
+ }
168
+ /** A → B ≡ ¬A ∨ B */
169
+ implies(a, b) {
170
+ return this.or_(this.not_(a), b);
171
+ }
172
+ /** A ↔ B ≡ ¬(A ⊕ B) */
173
+ iff(a, b) {
174
+ return this.not_(this.xor(a, b));
175
+ }
176
+ /**
177
+ * If-Then-Else canónico: ite(c, t, e).
178
+ * Equivale a (c ∧ t) ∨ (¬c ∧ e). Implementado con descomposición
179
+ * Shannon directa para mejor caché.
180
+ */
181
+ ite(cond, thenB, elseB) {
182
+ // Casos base por terminales
183
+ if ((0, types_1.isTerminal)(cond))
184
+ return cond.value ? thenB : elseB;
185
+ if (thenB === elseB)
186
+ return thenB;
187
+ if ((0, types_1.isTerminal)(thenB) && (0, types_1.isTerminal)(elseB)) {
188
+ if (thenB.value && !elseB.value)
189
+ return cond;
190
+ if (!thenB.value && elseB.value)
191
+ return this.not_(cond);
192
+ }
193
+ const key = iteKey(cond, thenB, elseB);
194
+ const cached = this.memoIte.get(key);
195
+ if (cached)
196
+ return cached;
197
+ // Variable top: la de menor posición entre las tres
198
+ const pc = this.topVarPos(cond);
199
+ const pt = this.topVarPos(thenB);
200
+ const pe = this.topVarPos(elseB);
201
+ const top = Math.min(pc, pt, pe);
202
+ const v = this.varOrder[top];
203
+ const condLow = this.cofactor(cond, v, false);
204
+ const condHigh = this.cofactor(cond, v, true);
205
+ const thenLow = this.cofactor(thenB, v, false);
206
+ const thenHigh = this.cofactor(thenB, v, true);
207
+ const elseLow = this.cofactor(elseB, v, false);
208
+ const elseHigh = this.cofactor(elseB, v, true);
209
+ const low = this.ite(condLow, thenLow, elseLow);
210
+ const high = this.ite(condHigh, thenHigh, elseHigh);
211
+ const result = this.makeNode(v, low, high);
212
+ this.memoIte.set(key, result);
213
+ return result;
214
+ }
215
+ /**
216
+ * Cofactor de b respecto a (variable v = val).
217
+ * Si v no aparece o aparece más profundo, retorna b sin cambios.
218
+ */
219
+ cofactor(b, v, val) {
220
+ if ((0, types_1.isTerminal)(b))
221
+ return b;
222
+ const pb = this.orderPos(b.variable);
223
+ const pv = this.orderPos(v);
224
+ if (pb > pv)
225
+ return b; // v viene antes que b.variable en el orden → b no depende
226
+ if (b.variable === v) {
227
+ return val ? b.high : b.low;
228
+ }
229
+ // pb < pv: b depende de algo más alto; descender
230
+ const low = this.cofactor(b.low, v, val);
231
+ const high = this.cofactor(b.high, v, val);
232
+ return this.makeNode(b.variable, low, high);
233
+ }
234
+ /**
235
+ * Apply algorithm de Bryant — combinador binario con memoization.
236
+ * Maneja AND, OR, XOR (los más usados); el resto se deriva.
237
+ */
238
+ applyOp(op, a, b) {
239
+ // Terminales
240
+ const term = this.applyTerminal(op, a, b);
241
+ if (term)
242
+ return term;
243
+ const memo = this.memoFor(op);
244
+ const key = applyKey(op, a, b);
245
+ const cached = memo.get(key);
246
+ if (cached)
247
+ return cached;
248
+ // Variable top
249
+ const pa = this.topVarPos(a);
250
+ const pb = this.topVarPos(b);
251
+ const top = Math.min(pa, pb);
252
+ const v = this.varOrder[top];
253
+ const aLow = this.cofactor(a, v, false);
254
+ const aHigh = this.cofactor(a, v, true);
255
+ const bLow = this.cofactor(b, v, false);
256
+ const bHigh = this.cofactor(b, v, true);
257
+ const low = this.applyOp(op, aLow, bLow);
258
+ const high = this.applyOp(op, aHigh, bHigh);
259
+ const result = this.makeNode(v, low, high);
260
+ memo.set(key, result);
261
+ return result;
262
+ }
263
+ memoFor(op) {
264
+ if (op === 'and')
265
+ return this.memoAnd;
266
+ if (op === 'or')
267
+ return this.memoOr;
268
+ return this.memoXor;
269
+ }
270
+ applyTerminal(op, a, b) {
271
+ // Cortocircuitos
272
+ if (op === 'and') {
273
+ if (a === this.FALSE || b === this.FALSE)
274
+ return this.FALSE;
275
+ if (a === this.TRUE)
276
+ return b;
277
+ if (b === this.TRUE)
278
+ return a;
279
+ if (a === b)
280
+ return a;
281
+ }
282
+ else if (op === 'or') {
283
+ if (a === this.TRUE || b === this.TRUE)
284
+ return this.TRUE;
285
+ if (a === this.FALSE)
286
+ return b;
287
+ if (b === this.FALSE)
288
+ return a;
289
+ if (a === b)
290
+ return a;
291
+ }
292
+ else {
293
+ // xor
294
+ if (a === this.FALSE)
295
+ return b;
296
+ if (b === this.FALSE)
297
+ return a;
298
+ if (a === this.TRUE)
299
+ return this.not_(b);
300
+ if (b === this.TRUE)
301
+ return this.not_(a);
302
+ if (a === b)
303
+ return this.FALSE;
304
+ }
305
+ if ((0, types_1.isTerminal)(a) && (0, types_1.isTerminal)(b)) {
306
+ const av = a.value;
307
+ const bv = b.value;
308
+ let r;
309
+ if (op === 'and')
310
+ r = av && bv;
311
+ else if (op === 'or')
312
+ r = av || bv;
313
+ else
314
+ r = av !== bv;
315
+ return r ? this.TRUE : this.FALSE;
316
+ }
317
+ return undefined;
318
+ }
319
+ // ----------------------------------------------------------
320
+ // Cuantificadores
321
+ // ----------------------------------------------------------
322
+ /** ∃v. b ≡ b[v:=0] ∨ b[v:=1] */
323
+ exists(v, b) {
324
+ if (v < 0 || v >= this.numVars)
325
+ throw new Error(`exists: var ${v} out of range`);
326
+ const c0 = this.cofactor(b, v, false);
327
+ const c1 = this.cofactor(b, v, true);
328
+ return this.or_(c0, c1);
329
+ }
330
+ /** ∀v. b ≡ b[v:=0] ∧ b[v:=1] */
331
+ forall(v, b) {
332
+ if (v < 0 || v >= this.numVars)
333
+ throw new Error(`forall: var ${v} out of range`);
334
+ const c0 = this.cofactor(b, v, false);
335
+ const c1 = this.cofactor(b, v, true);
336
+ return this.and_(c0, c1);
337
+ }
338
+ // ----------------------------------------------------------
339
+ // Queries
340
+ // ----------------------------------------------------------
341
+ /**
342
+ * Cuenta el número de asignaciones satisfactorias sobre `numVars`.
343
+ * Usa bigint para soportar funciones con muchas variables.
344
+ */
345
+ satCount(b) {
346
+ return this.satCountAt(b, 0);
347
+ }
348
+ /**
349
+ * Conteo con "skip" de variables ausentes en la rama:
350
+ * cada variable saltada multiplica por 2.
351
+ */
352
+ satCountAt(b, depth) {
353
+ if ((0, types_1.isTerminal)(b)) {
354
+ if (!b.value)
355
+ return 0n;
356
+ // Todas las variables restantes son libres: 2^(numVars - depth)
357
+ const skipped = BigInt(this.numVars - depth);
358
+ return 1n << skipped;
359
+ }
360
+ const pos = this.orderPos(b.variable);
361
+ // Variables entre depth y pos están skipped → 2^(pos - depth)
362
+ const skipped = BigInt(pos - depth);
363
+ const factor = 1n << skipped;
364
+ const low = this.satCountAt(b.low, pos + 1);
365
+ const high = this.satCountAt(b.high, pos + 1);
366
+ return factor * (low + high);
367
+ }
368
+ isSatisfiable(b) {
369
+ return b !== this.FALSE;
370
+ }
371
+ isValid(b) {
372
+ return b === this.TRUE;
373
+ }
374
+ /**
375
+ * Equivalencia estructural. Como el manager canonicaliza, basta con
376
+ * comparar identidad de referencias.
377
+ */
378
+ equivalent(a, b) {
379
+ return a === b;
380
+ }
381
+ /**
382
+ * Evalúa b sobre una asignación `assignment[i] = valor de la var i`.
383
+ */
384
+ evaluate(b, assignment) {
385
+ if (assignment.length < this.numVars) {
386
+ throw new Error(`evaluate: assignment length ${assignment.length} < numVars ${this.numVars}`);
387
+ }
388
+ let cur = b;
389
+ while (!(0, types_1.isTerminal)(cur)) {
390
+ const v = cur.variable;
391
+ const val = assignment[v];
392
+ if (val === undefined) {
393
+ throw new Error(`evaluate: missing assignment for var ${v}`);
394
+ }
395
+ cur = val ? cur.high : cur.low;
396
+ }
397
+ return cur.value;
398
+ }
399
+ // ----------------------------------------------------------
400
+ // Conversión desde CNF / fórmulas
401
+ // ----------------------------------------------------------
402
+ /**
403
+ * Construye un BDD desde CNF. Cada clausula es un array de literales
404
+ * en la convención DIMACS:
405
+ * - literal i > 0 → variable (i-1) positiva
406
+ * - literal i < 0 → variable (-i-1) negada
407
+ * El resultado es el AND de las disyunciones de cada clausula.
408
+ *
409
+ * Optimización: ordena clausulas por longitud creciente para que la
410
+ * unidad de propagación temprana mantenga el BDD pequeño.
411
+ */
412
+ fromCNF(clauses) {
413
+ if (clauses.length === 0)
414
+ return this.TRUE;
415
+ // Validación de literales
416
+ for (const cl of clauses) {
417
+ for (const lit of cl) {
418
+ if (lit === 0)
419
+ throw new Error('fromCNF: literal 0 not allowed (DIMACS)');
420
+ const v = Math.abs(lit) - 1;
421
+ if (v >= this.numVars) {
422
+ throw new Error(`fromCNF: literal ${lit} exceeds numVars ${this.numVars}`);
423
+ }
424
+ }
425
+ }
426
+ // Ordenar clausulas: cortas primero (más restrictivas)
427
+ const ordered = [...clauses].sort((a, b) => a.length - b.length);
428
+ let acc = this.TRUE;
429
+ for (const clause of ordered) {
430
+ let disj = this.FALSE;
431
+ for (const lit of clause) {
432
+ const v = Math.abs(lit) - 1;
433
+ const x = this.variable(v);
434
+ const litBdd = lit > 0 ? x : this.not_(x);
435
+ disj = this.or_(disj, litBdd);
436
+ }
437
+ acc = this.and_(acc, disj);
438
+ if (acc === this.FALSE)
439
+ return acc; // cortocircuito UNSAT
440
+ }
441
+ return acc;
442
+ }
443
+ /**
444
+ * Construye un BDD desde una fórmula simbólica con sintaxis libre.
445
+ * Soporta: `{ kind: 'var', index: number }`, `{ kind: 'true' }`,
446
+ * `{ kind: 'false' }`, `{ kind: 'not', child }`,
447
+ * `{ kind: 'and'|'or'|'xor'|'implies'|'iff', left, right }`,
448
+ * `{ kind: 'ite', cond, then, else }`.
449
+ *
450
+ * Si llega algo no reconocido lanza error — el formato es estricto
451
+ * para evitar `any` silenciosos.
452
+ */
453
+ fromFormula(formula) {
454
+ const k = formula.kind;
455
+ if (k === 'true')
456
+ return this.TRUE;
457
+ if (k === 'false')
458
+ return this.FALSE;
459
+ if (k === 'var') {
460
+ const idx = formula.index;
461
+ if (typeof idx !== 'number')
462
+ throw new Error('fromFormula: var.index must be number');
463
+ return this.variable(idx);
464
+ }
465
+ if (k === 'not') {
466
+ const child = formula.child;
467
+ return this.not_(this.fromFormula(child));
468
+ }
469
+ if (k === 'and' || k === 'or' || k === 'xor' || k === 'implies' || k === 'iff') {
470
+ const left = formula.left;
471
+ const right = formula.right;
472
+ const L = this.fromFormula(left);
473
+ const R = this.fromFormula(right);
474
+ if (k === 'and')
475
+ return this.and_(L, R);
476
+ if (k === 'or')
477
+ return this.or_(L, R);
478
+ if (k === 'xor')
479
+ return this.xor(L, R);
480
+ if (k === 'implies')
481
+ return this.implies(L, R);
482
+ return this.iff(L, R);
483
+ }
484
+ if (k === 'ite') {
485
+ const c = formula.cond;
486
+ const t = formula.then;
487
+ const e = formula.else;
488
+ return this.ite(this.fromFormula(c), this.fromFormula(t), this.fromFormula(e));
489
+ }
490
+ throw new Error(`fromFormula: unknown kind "${k}"`);
491
+ }
492
+ // ----------------------------------------------------------
493
+ // Stats / introspección
494
+ // ----------------------------------------------------------
495
+ stats() {
496
+ return {
497
+ nodes: this.uniqueTable.size,
498
+ reductions: this.reductions,
499
+ };
500
+ }
501
+ /**
502
+ * Cuenta los nodos alcanzables desde `b` (sin contar terminales).
503
+ * Útil para comparar tamaños bajo distintos órdenes de variables.
504
+ */
505
+ countReachable(b) {
506
+ const seen = new Set();
507
+ const stack = [b];
508
+ while (stack.length > 0) {
509
+ const cur = stack.pop();
510
+ if (cur === undefined)
511
+ break;
512
+ if ((0, types_1.isTerminal)(cur))
513
+ continue;
514
+ if (seen.has(cur.id))
515
+ continue;
516
+ seen.add(cur.id);
517
+ stack.push(cur.low);
518
+ stack.push(cur.high);
519
+ }
520
+ return seen.size;
521
+ }
522
+ }
523
+ exports.BDDManager = BDDManager;
524
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/bdd/manager.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,qDAAqD;AACrD,+DAA+D;AAC/D,EAAE;AACF,2CAA2C;AAC3C,sDAAsD;AACtD,qEAAqE;AACrE,kEAAkE;AAClE,oDAAoD;AACpD,+DAA+D;AAC/D,EAAE;AACF,+DAA+D;AAC/D,iEAAiE;AACjE,oEAAoE;AACpE,iEAAiE;;;AAGjE,mCAAqC;AAIrC,oDAAoD;AACpD,mDAAmD;AACnD,SAAS,KAAK,CAAC,QAAgB,EAAE,GAAY,EAAE,IAAa;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IAChF,OAAO,GAAG,QAAQ,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,CAAU,EAAE,CAAU;IAClD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,OAAO,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,MAAM,CAAC,CAAU,EAAE,CAAU,EAAE,CAAU;IAChD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,OAAO,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,CAAC;AAED,MAAa,UAAU;IAiBF;IAhBF,IAAI,GAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClD,KAAK,GAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAE7D,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,MAAM,GAAG,CAAC,CAAC;IACX,UAAU,GAAG,CAAC,CAAC;IAEvB,kCAAkC;IAC1B,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE7C,QAAQ,CAAW;IAEnB,YAAmB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAChC,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,6DAA6D;IAC7D,qBAAqB;IACrB,6DAA6D;IAE7D;;;;;OAKG;IACH,WAAW,CAAC,KAAe;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,OAAO,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,mEAAmE;IAC3D,QAAQ,CAAC,CAAS;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,iEAAiE;IACzD,SAAS,CAAC,CAAU;QAC1B,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,6DAA6D;IAC7D,wBAAwB;IACxB,6DAA6D;IAE7D,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,QAAgB,EAAE,GAAY,EAAE,IAAa;QAC5D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,kBAAkB;YAClB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAiB;YACzB,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,GAAG;YACH,IAAI;YACJ,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;SAClB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,QAAQ,CAAC,CAAS;QAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,sBAAsB,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,6DAA6D;IAC7D,cAAc;IACd,6DAA6D;IAE7D;;;OAGG;IACH,IAAI,CAAC,CAAU;QACb,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,CAAU,EAAE,CAAU;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,CAAU,EAAE,CAAU;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,CAAU,EAAE,CAAU;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,CAAU,EAAE,CAAU;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,GAAG,CAAC,CAAU,EAAE,CAAU;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAa,EAAE,KAAc,EAAE,KAAc;QAC/C,4BAA4B;QAC5B,IAAI,IAAA,kBAAU,EAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,IAAA,kBAAU,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAU,EAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,oDAAoD;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,QAAQ,CAAC,CAAU,EAAE,CAAS,EAAE,GAAY;QAClD,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC,0DAA0D;QACjF,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9B,CAAC;QACD,iDAAiD;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACK,OAAO,CAAC,EAAwB,EAAE,CAAU,EAAE,CAAU;QAC9D,aAAa;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,eAAe;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,OAAO,CAAC,EAAwB;QACtC,IAAI,EAAE,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,aAAa,CAAC,EAAwB,EAAE,CAAU,EAAE,CAAU;QACpE,iBAAiB;QACjB,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC;YAC5D,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC;YACzD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM;YACN,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACjC,CAAC;QAED,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;YACnB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;YACnB,IAAI,CAAU,CAAC;YACf,IAAI,EAAE,KAAK,KAAK;gBAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;iBAC1B,IAAI,EAAE,KAAK,IAAI;gBAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;;gBAC9B,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,6DAA6D;IAC7D,kBAAkB;IAClB,6DAA6D;IAE7D,gCAAgC;IAChC,MAAM,CAAC,CAAS,EAAE,CAAU;QAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACjF,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,CAAS,EAAE,CAAU;QAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACjF,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,6DAA6D;IAC7D,UAAU;IACV,6DAA6D;IAE7D;;;OAGG;IACH,QAAQ,CAAC,CAAU;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,CAAU,EAAE,KAAa;QAC1C,IAAI,IAAA,kBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACxB,gEAAgE;YAChE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;YAC7C,OAAO,EAAE,IAAI,OAAO,CAAC;QACvB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtC,8DAA8D;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAC9C,OAAO,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,CAAU;QACtB,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,CAAU;QAChB,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,CAAU,EAAE,CAAU;QAC/B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,CAAU,EAAE,UAAqB;QACxC,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,CAAC,MAAM,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,CAAC,IAAA,kBAAU,EAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;YACvB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,CAAC;QACD,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,6DAA6D;IAC7D,kCAAkC;IAClC,6DAA6D;IAE7D;;;;;;;;;OASG;IACH,OAAO,CAAC,OAAmB;QACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC3C,0BAA0B;QAC1B,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;gBACrB,IAAI,GAAG,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QACD,uDAAuD;QACvD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,GAAG,GAAY,IAAI,CAAC,IAAI,CAAC;QAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,GAAG,CAAC,CAAC,sBAAsB;QAC5D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,OAA+C;QACzD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+C,CAAC;YACtE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,IAA8C,CAAC;YACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAA+C,CAAC;YACtE,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,IAA8C,CAAC;YACjE,MAAM,CAAC,GAAG,OAAO,CAAC,IAA8C,CAAC;YACjE,MAAM,CAAC,GAAG,OAAO,CAAC,IAA8C,CAAC;YACjE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,6DAA6D;IAC7D,wBAAwB;IACxB,6DAA6D;IAE7D,KAAK;QACH,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YAC5B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,CAAU;QACvB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,KAAK,GAAc,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACxB,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM;YAC7B,IAAI,IAAA,kBAAU,EAAC,GAAG,CAAC;gBAAE,SAAS;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAreD,gCAqeC"}
@@ -0,0 +1,20 @@
1
+ export type BDDNode = {
2
+ kind: 'terminal';
3
+ value: boolean;
4
+ } | {
5
+ kind: 'internal';
6
+ variable: number;
7
+ low: BDDNode;
8
+ high: BDDNode;
9
+ id: number;
10
+ };
11
+ export interface BDDStats {
12
+ nodes: number;
13
+ reductions: number;
14
+ }
15
+ export declare function isTerminal(b: BDDNode): b is {
16
+ kind: 'terminal';
17
+ value: boolean;
18
+ };
19
+ export declare function nodeId(b: BDDNode): string;
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bdd/types.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAEhF;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEzC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ROBDD — Tipos de nodos
4
+ // ============================================================
5
+ //
6
+ // Un ROBDD (Reduced Ordered Binary Decision Diagram) representa
7
+ // una función booleana como un DAG canónico bajo un orden fijo de
8
+ // variables. Cada nodo interno tiene:
9
+ // - una variable `variable` (índice según el orden global)
10
+ // - un sucesor `low` para la asignación variable = 0
11
+ // - un sucesor `high` para la asignación variable = 1
12
+ //
13
+ // Las hojas son terminales `true` o `false`. La canonicidad se
14
+ // obtiene compartiendo nodos vía unique table y aplicando las
15
+ // reglas de reducción:
16
+ // (R1) eliminación: si low === high, no se crea nodo interno
17
+ // (R2) isomorfismo: dos nodos con el mismo (var, low, high)
18
+ // comparten identidad estructural
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.isTerminal = isTerminal;
21
+ exports.nodeId = nodeId;
22
+ function isTerminal(b) {
23
+ return b.kind === 'terminal';
24
+ }
25
+ function nodeId(b) {
26
+ return b.kind === 'terminal' ? (b.value ? 'T' : 'F') : `N${b.id}`;
27
+ }
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bdd/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAC/D,EAAE;AACF,gEAAgE;AAChE,kEAAkE;AAClE,sCAAsC;AACtC,6DAA6D;AAC7D,uDAAuD;AACvD,wDAAwD;AACxD,EAAE;AACF,+DAA+D;AAC/D,8DAA8D;AAC9D,uBAAuB;AACvB,+DAA+D;AAC/D,8DAA8D;AAC9D,yCAAyC;;AAWzC,gCAEC;AAED,wBAEC;AAND,SAAgB,UAAU,CAAC,CAAU;IACnC,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC/B,CAAC;AAED,SAAgB,MAAM,CAAC,CAAU;IAC/B,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { NormalFormGame } from './types';
2
+ /**
3
+ * Prisoner's dilemma. Estrategias: 0=cooperate, 1=defect.
4
+ * Pagos típicos (T > R > P > S):
5
+ * T=5, R=3, P=1, S=0
6
+ *
7
+ * C D
8
+ * C (3,3) (0,5)
9
+ * D (5,0) (1,1)
10
+ *
11
+ * Único Nash: (D, D) con payoff (1, 1).
12
+ */
13
+ export declare function prisonersDilemma(): NormalFormGame;
14
+ /**
15
+ * Rock-Paper-Scissors (zero-sum). Estrategias: 0=R, 1=P, 2=S.
16
+ * Único Nash: (1/3, 1/3, 1/3) por jugador, payoff (0, 0).
17
+ */
18
+ export declare function rockPaperScissors(): NormalFormGame;
19
+ /**
20
+ * Battle of the sexes. Dos jugadores prefieren coordinar pero
21
+ * en cosas distintas. Estrategias: 0=Opera, 1=Football.
22
+ *
23
+ * O F
24
+ * O (2,1) (0,0)
25
+ * F (0,0) (1,2)
26
+ *
27
+ * Tres Nash: (O,O), (F,F), mixto.
28
+ */
29
+ export declare function battleOfSexes(): NormalFormGame;
30
+ /**
31
+ * Matching pennies (zero-sum). Estrategias: 0=H, 1=T.
32
+ *
33
+ * H T
34
+ * H ( 1,-1) (-1, 1)
35
+ * T (-1, 1) ( 1,-1)
36
+ *
37
+ * Único Nash: (1/2, 1/2).
38
+ */
39
+ export declare function matchingPennies(): NormalFormGame;
40
+ /**
41
+ * Coordination "stag hunt". Estrategias: 0=Stag, 1=Hare.
42
+ *
43
+ * S H
44
+ * S (4,4) (0,3)
45
+ * H (3,0) (2,2)
46
+ *
47
+ * Nash puros: (S,S) y (H,H); además uno mixto.
48
+ */
49
+ export declare function stagHunt(): NormalFormGame;
50
+ //# sourceMappingURL=common-games.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-games.d.ts","sourceRoot":"","sources":["../../src/game-theory/common-games.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAUjD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAYlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAU9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,cAAc,CAUhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,IAAI,cAAc,CAUzC"}