@stevenvo780/st-lang 4.1.0 → 4.2.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 (265) hide show
  1. package/dist/belief-revision/agm.d.ts +76 -0
  2. package/dist/belief-revision/agm.d.ts.map +1 -0
  3. package/dist/belief-revision/agm.js +249 -0
  4. package/dist/belief-revision/agm.js.map +1 -0
  5. package/dist/belief-revision/index.d.ts +6 -0
  6. package/dist/belief-revision/index.d.ts.map +1 -0
  7. package/dist/belief-revision/index.js +33 -0
  8. package/dist/belief-revision/index.js.map +1 -0
  9. package/dist/belief-revision/parser.d.ts +16 -0
  10. package/dist/belief-revision/parser.d.ts.map +1 -0
  11. package/dist/belief-revision/parser.js +199 -0
  12. package/dist/belief-revision/parser.js.map +1 -0
  13. package/dist/belief-revision/sat.d.ts +19 -0
  14. package/dist/belief-revision/sat.d.ts.map +1 -0
  15. package/dist/belief-revision/sat.js +90 -0
  16. package/dist/belief-revision/sat.js.map +1 -0
  17. package/dist/belief-revision/types.d.ts +51 -0
  18. package/dist/belief-revision/types.d.ts.map +1 -0
  19. package/dist/belief-revision/types.js +10 -0
  20. package/dist/belief-revision/types.js.map +1 -0
  21. package/dist/curry-howard/index.d.ts +7 -0
  22. package/dist/curry-howard/index.d.ts.map +1 -0
  23. package/dist/curry-howard/index.js +46 -0
  24. package/dist/curry-howard/index.js.map +1 -0
  25. package/dist/curry-howard/infer.d.ts +9 -0
  26. package/dist/curry-howard/infer.d.ts.map +1 -0
  27. package/dist/curry-howard/infer.js +129 -0
  28. package/dist/curry-howard/infer.js.map +1 -0
  29. package/dist/curry-howard/proof.d.ts +7 -0
  30. package/dist/curry-howard/proof.d.ts.map +1 -0
  31. package/dist/curry-howard/proof.js +282 -0
  32. package/dist/curry-howard/proof.js.map +1 -0
  33. package/dist/curry-howard/reduce.d.ts +7 -0
  34. package/dist/curry-howard/reduce.d.ts.map +1 -0
  35. package/dist/curry-howard/reduce.js +266 -0
  36. package/dist/curry-howard/reduce.js.map +1 -0
  37. package/dist/curry-howard/types.d.ts +91 -0
  38. package/dist/curry-howard/types.d.ts.map +1 -0
  39. package/dist/curry-howard/types.js +149 -0
  40. package/dist/curry-howard/types.js.map +1 -0
  41. package/dist/fol-prover-equality/demodulate.d.ts +29 -0
  42. package/dist/fol-prover-equality/demodulate.d.ts.map +1 -0
  43. package/dist/fol-prover-equality/demodulate.js +197 -0
  44. package/dist/fol-prover-equality/demodulate.js.map +1 -0
  45. package/dist/fol-prover-equality/index.d.ts +8 -0
  46. package/dist/fol-prover-equality/index.d.ts.map +1 -0
  47. package/dist/fol-prover-equality/index.js +24 -0
  48. package/dist/fol-prover-equality/index.js.map +1 -0
  49. package/dist/fol-prover-equality/paramodulate.d.ts +46 -0
  50. package/dist/fol-prover-equality/paramodulate.d.ts.map +1 -0
  51. package/dist/fol-prover-equality/paramodulate.js +159 -0
  52. package/dist/fol-prover-equality/paramodulate.js.map +1 -0
  53. package/dist/fol-prover-equality/prove.d.ts +7 -0
  54. package/dist/fol-prover-equality/prove.d.ts.map +1 -0
  55. package/dist/fol-prover-equality/prove.js +307 -0
  56. package/dist/fol-prover-equality/prove.js.map +1 -0
  57. package/dist/fol-prover-equality/term-utils.d.ts +43 -0
  58. package/dist/fol-prover-equality/term-utils.d.ts.map +1 -0
  59. package/dist/fol-prover-equality/term-utils.js +230 -0
  60. package/dist/fol-prover-equality/term-utils.js.map +1 -0
  61. package/dist/fol-prover-equality/types.d.ts +20 -0
  62. package/dist/fol-prover-equality/types.d.ts.map +1 -0
  63. package/dist/fol-prover-equality/types.js +5 -0
  64. package/dist/fol-prover-equality/types.js.map +1 -0
  65. package/dist/index.d.ts +4 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +18 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/profiles/ctl/check.d.ts +13 -0
  70. package/dist/profiles/ctl/check.d.ts.map +1 -0
  71. package/dist/profiles/ctl/check.js +359 -0
  72. package/dist/profiles/ctl/check.js.map +1 -0
  73. package/dist/profiles/ctl/index.d.ts +5 -0
  74. package/dist/profiles/ctl/index.d.ts.map +1 -0
  75. package/dist/profiles/ctl/index.js +23 -0
  76. package/dist/profiles/ctl/index.js.map +1 -0
  77. package/dist/profiles/ctl/types.d.ts +74 -0
  78. package/dist/profiles/ctl/types.d.ts.map +1 -0
  79. package/dist/profiles/ctl/types.js +53 -0
  80. package/dist/profiles/ctl/types.js.map +1 -0
  81. package/dist/profiles/ctl/witness.d.ts +20 -0
  82. package/dist/profiles/ctl/witness.d.ts.map +1 -0
  83. package/dist/profiles/ctl/witness.js +149 -0
  84. package/dist/profiles/ctl/witness.js.map +1 -0
  85. package/dist/profiles/default-logic/entailment.d.ts +14 -0
  86. package/dist/profiles/default-logic/entailment.d.ts.map +1 -0
  87. package/dist/profiles/default-logic/entailment.js +36 -0
  88. package/dist/profiles/default-logic/entailment.js.map +1 -0
  89. package/dist/profiles/default-logic/extensions.d.ts +35 -0
  90. package/dist/profiles/default-logic/extensions.d.ts.map +1 -0
  91. package/dist/profiles/default-logic/extensions.js +276 -0
  92. package/dist/profiles/default-logic/extensions.js.map +1 -0
  93. package/dist/profiles/default-logic/index.d.ts +5 -0
  94. package/dist/profiles/default-logic/index.d.ts.map +1 -0
  95. package/dist/profiles/default-logic/index.js +33 -0
  96. package/dist/profiles/default-logic/index.js.map +1 -0
  97. package/dist/profiles/default-logic/types.d.ts +29 -0
  98. package/dist/profiles/default-logic/types.d.ts.map +1 -0
  99. package/dist/profiles/default-logic/types.js +25 -0
  100. package/dist/profiles/default-logic/types.js.map +1 -0
  101. package/dist/profiles/description-logic/index.d.ts +5 -0
  102. package/dist/profiles/description-logic/index.d.ts.map +1 -0
  103. package/dist/profiles/description-logic/index.js +39 -0
  104. package/dist/profiles/description-logic/index.js.map +1 -0
  105. package/dist/profiles/description-logic/nnf.d.ts +13 -0
  106. package/dist/profiles/description-logic/nnf.d.ts.map +1 -0
  107. package/dist/profiles/description-logic/nnf.js +123 -0
  108. package/dist/profiles/description-logic/nnf.js.map +1 -0
  109. package/dist/profiles/description-logic/tableau.d.ts +27 -0
  110. package/dist/profiles/description-logic/tableau.d.ts.map +1 -0
  111. package/dist/profiles/description-logic/tableau.js +491 -0
  112. package/dist/profiles/description-logic/tableau.js.map +1 -0
  113. package/dist/profiles/description-logic/types.d.ts +45 -0
  114. package/dist/profiles/description-logic/types.d.ts.map +1 -0
  115. package/dist/profiles/description-logic/types.js +71 -0
  116. package/dist/profiles/description-logic/types.js.map +1 -0
  117. package/dist/profiles/hybrid-logic/index.d.ts +5 -0
  118. package/dist/profiles/hybrid-logic/index.d.ts.map +1 -0
  119. package/dist/profiles/hybrid-logic/index.js +34 -0
  120. package/dist/profiles/hybrid-logic/index.js.map +1 -0
  121. package/dist/profiles/hybrid-logic/sat.d.ts +15 -0
  122. package/dist/profiles/hybrid-logic/sat.d.ts.map +1 -0
  123. package/dist/profiles/hybrid-logic/sat.js +142 -0
  124. package/dist/profiles/hybrid-logic/sat.js.map +1 -0
  125. package/dist/profiles/hybrid-logic/semantics.d.ts +20 -0
  126. package/dist/profiles/hybrid-logic/semantics.d.ts.map +1 -0
  127. package/dist/profiles/hybrid-logic/semantics.js +107 -0
  128. package/dist/profiles/hybrid-logic/semantics.js.map +1 -0
  129. package/dist/profiles/hybrid-logic/types.d.ts +78 -0
  130. package/dist/profiles/hybrid-logic/types.d.ts.map +1 -0
  131. package/dist/profiles/hybrid-logic/types.js +107 -0
  132. package/dist/profiles/hybrid-logic/types.js.map +1 -0
  133. package/dist/profiles/ltl-sat/index.d.ts +4 -0
  134. package/dist/profiles/ltl-sat/index.d.ts.map +1 -0
  135. package/dist/profiles/ltl-sat/index.js +40 -0
  136. package/dist/profiles/ltl-sat/index.js.map +1 -0
  137. package/dist/profiles/ltl-sat/sat.d.ts +8 -0
  138. package/dist/profiles/ltl-sat/sat.d.ts.map +1 -0
  139. package/dist/profiles/ltl-sat/sat.js +140 -0
  140. package/dist/profiles/ltl-sat/sat.js.map +1 -0
  141. package/dist/profiles/ltl-sat/tableau.d.ts +19 -0
  142. package/dist/profiles/ltl-sat/tableau.d.ts.map +1 -0
  143. package/dist/profiles/ltl-sat/tableau.js +358 -0
  144. package/dist/profiles/ltl-sat/tableau.js.map +1 -0
  145. package/dist/profiles/ltl-sat/types.d.ts +52 -0
  146. package/dist/profiles/ltl-sat/types.d.ts.map +1 -0
  147. package/dist/profiles/ltl-sat/types.js +101 -0
  148. package/dist/profiles/ltl-sat/types.js.map +1 -0
  149. package/dist/profiles/sequent-g3/index.d.ts +5 -0
  150. package/dist/profiles/sequent-g3/index.d.ts.map +1 -0
  151. package/dist/profiles/sequent-g3/index.js +23 -0
  152. package/dist/profiles/sequent-g3/index.js.map +1 -0
  153. package/dist/profiles/sequent-g3/latex.d.ts +7 -0
  154. package/dist/profiles/sequent-g3/latex.d.ts.map +1 -0
  155. package/dist/profiles/sequent-g3/latex.js +107 -0
  156. package/dist/profiles/sequent-g3/latex.js.map +1 -0
  157. package/dist/profiles/sequent-g3/normalize.d.ts +15 -0
  158. package/dist/profiles/sequent-g3/normalize.d.ts.map +1 -0
  159. package/dist/profiles/sequent-g3/normalize.js +121 -0
  160. package/dist/profiles/sequent-g3/normalize.js.map +1 -0
  161. package/dist/profiles/sequent-g3/prover.d.ts +16 -0
  162. package/dist/profiles/sequent-g3/prover.d.ts.map +1 -0
  163. package/dist/profiles/sequent-g3/prover.js +348 -0
  164. package/dist/profiles/sequent-g3/prover.js.map +1 -0
  165. package/dist/profiles/sequent-g3/types.d.ts +30 -0
  166. package/dist/profiles/sequent-g3/types.d.ts.map +1 -0
  167. package/dist/profiles/sequent-g3/types.js +16 -0
  168. package/dist/profiles/sequent-g3/types.js.map +1 -0
  169. package/dist/runtime/countermodel-min/index.d.ts +3 -0
  170. package/dist/runtime/countermodel-min/index.d.ts.map +1 -0
  171. package/dist/runtime/countermodel-min/index.js +9 -0
  172. package/dist/runtime/countermodel-min/index.js.map +1 -0
  173. package/dist/runtime/countermodel-min/minimize.d.ts +17 -0
  174. package/dist/runtime/countermodel-min/minimize.d.ts.map +1 -0
  175. package/dist/runtime/countermodel-min/minimize.js +0 -0
  176. package/dist/runtime/countermodel-min/minimize.js.map +1 -0
  177. package/dist/runtime/countermodel-min/types.d.ts +40 -0
  178. package/dist/runtime/countermodel-min/types.d.ts.map +1 -0
  179. package/dist/runtime/countermodel-min/types.js +6 -0
  180. package/dist/runtime/countermodel-min/types.js.map +1 -0
  181. package/dist/runtime/mus/extract.d.ts +34 -0
  182. package/dist/runtime/mus/extract.d.ts.map +1 -0
  183. package/dist/runtime/mus/extract.js +243 -0
  184. package/dist/runtime/mus/extract.js.map +1 -0
  185. package/dist/runtime/mus/index.d.ts +4 -0
  186. package/dist/runtime/mus/index.d.ts.map +1 -0
  187. package/dist/runtime/mus/index.js +12 -0
  188. package/dist/runtime/mus/index.js.map +1 -0
  189. package/dist/runtime/mus/quickxplain.d.ts +10 -0
  190. package/dist/runtime/mus/quickxplain.d.ts.map +1 -0
  191. package/dist/runtime/mus/quickxplain.js +100 -0
  192. package/dist/runtime/mus/quickxplain.js.map +1 -0
  193. package/dist/runtime/mus/types.d.ts +59 -0
  194. package/dist/runtime/mus/types.d.ts.map +1 -0
  195. package/dist/runtime/mus/types.js +20 -0
  196. package/dist/runtime/mus/types.js.map +1 -0
  197. package/dist/solver/cdcl-v2-incremental/index.d.ts +3 -0
  198. package/dist/solver/cdcl-v2-incremental/index.d.ts.map +1 -0
  199. package/dist/solver/cdcl-v2-incremental/index.js +16 -0
  200. package/dist/solver/cdcl-v2-incremental/index.js.map +1 -0
  201. package/dist/solver/cdcl-v2-incremental/solver.d.ts +83 -0
  202. package/dist/solver/cdcl-v2-incremental/solver.d.ts.map +1 -0
  203. package/dist/solver/cdcl-v2-incremental/solver.js +727 -0
  204. package/dist/solver/cdcl-v2-incremental/solver.js.map +1 -0
  205. package/dist/solver/cdcl-v2-incremental/types.d.ts +47 -0
  206. package/dist/solver/cdcl-v2-incremental/types.d.ts.map +1 -0
  207. package/dist/solver/cdcl-v2-incremental/types.js +13 -0
  208. package/dist/solver/cdcl-v2-incremental/types.js.map +1 -0
  209. package/dist/tests/belief-revision/agm.test.d.ts +2 -0
  210. package/dist/tests/belief-revision/agm.test.d.ts.map +1 -0
  211. package/dist/tests/belief-revision/agm.test.js +173 -0
  212. package/dist/tests/belief-revision/agm.test.js.map +1 -0
  213. package/dist/tests/countermodel-min/minimize.test.d.ts +2 -0
  214. package/dist/tests/countermodel-min/minimize.test.d.ts.map +1 -0
  215. package/dist/tests/countermodel-min/minimize.test.js +241 -0
  216. package/dist/tests/countermodel-min/minimize.test.js.map +1 -0
  217. package/dist/tests/ctl/check.test.d.ts +2 -0
  218. package/dist/tests/ctl/check.test.d.ts.map +1 -0
  219. package/dist/tests/ctl/check.test.js +337 -0
  220. package/dist/tests/ctl/check.test.js.map +1 -0
  221. package/dist/tests/curry-howard/infer.test.d.ts +2 -0
  222. package/dist/tests/curry-howard/infer.test.d.ts.map +1 -0
  223. package/dist/tests/curry-howard/infer.test.js +93 -0
  224. package/dist/tests/curry-howard/infer.test.js.map +1 -0
  225. package/dist/tests/curry-howard/proof.test.d.ts +2 -0
  226. package/dist/tests/curry-howard/proof.test.d.ts.map +1 -0
  227. package/dist/tests/curry-howard/proof.test.js +105 -0
  228. package/dist/tests/curry-howard/proof.test.js.map +1 -0
  229. package/dist/tests/curry-howard/reduce.test.d.ts +2 -0
  230. package/dist/tests/curry-howard/reduce.test.d.ts.map +1 -0
  231. package/dist/tests/curry-howard/reduce.test.js +109 -0
  232. package/dist/tests/curry-howard/reduce.test.js.map +1 -0
  233. package/dist/tests/default-logic/extensions.test.d.ts +2 -0
  234. package/dist/tests/default-logic/extensions.test.d.ts.map +1 -0
  235. package/dist/tests/default-logic/extensions.test.js +323 -0
  236. package/dist/tests/default-logic/extensions.test.js.map +1 -0
  237. package/dist/tests/description-logic/alc.test.d.ts +2 -0
  238. package/dist/tests/description-logic/alc.test.d.ts.map +1 -0
  239. package/dist/tests/description-logic/alc.test.js +253 -0
  240. package/dist/tests/description-logic/alc.test.js.map +1 -0
  241. package/dist/tests/fol-prover-equality/prove.test.d.ts +2 -0
  242. package/dist/tests/fol-prover-equality/prove.test.d.ts.map +1 -0
  243. package/dist/tests/fol-prover-equality/prove.test.js +179 -0
  244. package/dist/tests/fol-prover-equality/prove.test.js.map +1 -0
  245. package/dist/tests/hybrid-logic/semantics.test.d.ts +2 -0
  246. package/dist/tests/hybrid-logic/semantics.test.d.ts.map +1 -0
  247. package/dist/tests/hybrid-logic/semantics.test.js +169 -0
  248. package/dist/tests/hybrid-logic/semantics.test.js.map +1 -0
  249. package/dist/tests/ltl-sat/sat.test.d.ts +2 -0
  250. package/dist/tests/ltl-sat/sat.test.d.ts.map +1 -0
  251. package/dist/tests/ltl-sat/sat.test.js +160 -0
  252. package/dist/tests/ltl-sat/sat.test.js.map +1 -0
  253. package/dist/tests/mus/extract.test.d.ts +2 -0
  254. package/dist/tests/mus/extract.test.d.ts.map +1 -0
  255. package/dist/tests/mus/extract.test.js +352 -0
  256. package/dist/tests/mus/extract.test.js.map +1 -0
  257. package/dist/tests/sat-v2-incremental/basic.test.d.ts +2 -0
  258. package/dist/tests/sat-v2-incremental/basic.test.d.ts.map +1 -0
  259. package/dist/tests/sat-v2-incremental/basic.test.js +352 -0
  260. package/dist/tests/sat-v2-incremental/basic.test.js.map +1 -0
  261. package/dist/tests/sequent-g3/prover.test.d.ts +2 -0
  262. package/dist/tests/sequent-g3/prover.test.d.ts.map +1 -0
  263. package/dist/tests/sequent-g3/prover.test.js +205 -0
  264. package/dist/tests/sequent-g3/prover.test.js.map +1 -0
  265. package/package.json +1 -1
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST LTL-SAT — Decisor SAT vía búsqueda de lazo aceptante
4
+ // ============================================================
5
+ // Algoritmo (Vardi-Wolper en versión explícita):
6
+ //
7
+ // 1. NNF + clausura + enumerar atoms localmente consistentes.
8
+ // 2. Construir relación de transición sobre atoms.
9
+ // 3. Filtrar atoms iniciales: aquellos que contienen φ.
10
+ // 4. SAT(φ) ⇔ existe lazo (prefix → loop) accesible desde un
11
+ // atom inicial donde, para cada eventualidad presente en
12
+ // cualquier atom del lazo, hay un atom del lazo donde el
13
+ // "witness" está presente.
14
+ //
15
+ // La construcción es exponencial en |φ|; suficiente para fórmulas
16
+ // pedagógicas y tests (≤ ~15 operadores). No es competitivo con
17
+ // SPOT, pero es correcto y didáctico.
18
+ // ============================================================
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.isSatisfiable = isSatisfiable;
21
+ exports.isValid = isValid;
22
+ exports.toBuchi = toBuchi;
23
+ const tableau_1 = require("./tableau");
24
+ const types_1 = require("./types");
25
+ function buildModel(phi) {
26
+ const nnf = (0, tableau_1.toNNF)(phi);
27
+ const close = (0, tableau_1.closure)(nnf);
28
+ const atoms = (0, tableau_1.enumerateAtoms)(close);
29
+ const succ = (0, tableau_1.transitions)(atoms);
30
+ const initialKey = (0, types_1.formulaKey)(nnf);
31
+ const initialIds = atoms.filter((a) => a.formulas.has(initialKey)).map((a) => a.id);
32
+ return { atoms, succ, initialIds };
33
+ }
34
+ // Para cada eventualidad que aparece en algún atom del ciclo, debe haber
35
+ // un atom del ciclo donde el witness se cumple. Verificamos sobre la
36
+ // secuencia ordenada `loop`.
37
+ function fulfillsAllEventualities(atoms, loop) {
38
+ // Recolectamos las eventualidades que aparecen en TODOS los estados
39
+ // del lazo (porque cuando una eventualidad cruza el corte X-F φ del lazo
40
+ // debe cumplirse). Más simple: para cada eventualidad presente en al
41
+ // menos un estado del ciclo, debe haber un estado con el witness.
42
+ const pendingByEv = new Map();
43
+ for (const id of loop) {
44
+ const a = atoms[id];
45
+ for (const ev of (0, tableau_1.eventualitiesIn)(a)) {
46
+ if (!pendingByEv.has(ev.key))
47
+ pendingByEv.set(ev.key, ev.witnessFormulaKey);
48
+ }
49
+ }
50
+ for (const [, witnessKey] of pendingByEv) {
51
+ let satisfied = false;
52
+ for (const id of loop) {
53
+ if (atoms[id].formulas.has(witnessKey)) {
54
+ satisfied = true;
55
+ break;
56
+ }
57
+ }
58
+ if (!satisfied)
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ // Búsqueda: DFS desde cada inicial, explorando todos los caminos
64
+ // simples extendidos en busca de un lazo aceptante. Como los grafos son
65
+ // pequeños (caps internos), una exploración exhaustiva acotada basta.
66
+ function searchLasso(model) {
67
+ const { atoms, succ, initialIds } = model;
68
+ const N = atoms.length;
69
+ if (N === 0 || initialIds.length === 0)
70
+ return null;
71
+ // Soft cap para evitar explosión combinatoria.
72
+ const MAX_PATH_LEN = Math.min(N + 6, 60);
73
+ for (const start of initialIds) {
74
+ const path = [start];
75
+ const pathPos = new Map();
76
+ pathPos.set(start, 0);
77
+ const found = dfs(start, path, pathPos);
78
+ if (found)
79
+ return found;
80
+ }
81
+ return null;
82
+ function dfs(node, path, pathPos) {
83
+ const successors = succ.get(node) ?? [];
84
+ for (const next of successors) {
85
+ const cycleIdx = pathPos.get(next);
86
+ if (cycleIdx !== undefined) {
87
+ // Tenemos lazo: prefix = path[0..idx-1], loop = path[idx..end].
88
+ const prefix = path.slice(0, cycleIdx);
89
+ const loop = path.slice(cycleIdx);
90
+ if (loop.length > 0 && fulfillsAllEventualities(atoms, loop)) {
91
+ return { prefix, loop };
92
+ }
93
+ // Si no aceptante, intentamos otros sucesores (no recursamos por
94
+ // este nodo ya visitado en el path actual).
95
+ continue;
96
+ }
97
+ if (path.length >= MAX_PATH_LEN)
98
+ continue;
99
+ path.push(next);
100
+ pathPos.set(next, path.length - 1);
101
+ const r = dfs(next, path, pathPos);
102
+ if (r)
103
+ return r;
104
+ path.pop();
105
+ pathPos.delete(next);
106
+ }
107
+ return null;
108
+ }
109
+ }
110
+ function atomLabel(a) {
111
+ return (0, tableau_1.describeAtom)(a);
112
+ }
113
+ function isSatisfiable(phi) {
114
+ const model = buildModel(phi);
115
+ const lasso = searchLasso(model);
116
+ if (!lasso)
117
+ return { sat: false };
118
+ const witness = {
119
+ prefix: lasso.prefix.map((id) => atomLabel(model.atoms[id])),
120
+ loop: lasso.loop.map((id) => atomLabel(model.atoms[id])),
121
+ };
122
+ return { sat: true, witness };
123
+ }
124
+ function isValid(phi) {
125
+ const negated = (0, types_1.not)(phi);
126
+ return !isSatisfiable(negated).sat;
127
+ }
128
+ // Estimación de tamaño del autómata estilo Büchi: cuenta atoms (estados)
129
+ // y cuántos de ellos pueden ser "aceptantes" para alguna eventualidad
130
+ // (heurística simple: estados que no tienen eventualidades pendientes).
131
+ function toBuchi(phi) {
132
+ const model = buildModel(phi);
133
+ let accepting = 0;
134
+ for (const a of model.atoms) {
135
+ if ((0, tableau_1.eventualitiesIn)(a).length === 0)
136
+ accepting += 1;
137
+ }
138
+ return { states: model.atoms.length, accepting };
139
+ }
140
+ //# sourceMappingURL=sat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sat.js","sourceRoot":"","sources":["../../../src/profiles/ltl-sat/sat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { LTLFormula } from './types';
2
+ export declare function toNNF(f: LTLFormula): LTLFormula;
3
+ export declare function closure(f: LTLFormula): LTLFormula[];
4
+ export interface Atom {
5
+ id: number;
6
+ formulas: Map<string, LTLFormula>;
7
+ positiveLiterals: string[];
8
+ negativeLiterals: string[];
9
+ }
10
+ export declare function enumerateAtoms(closureFormulas: LTLFormula[]): Atom[];
11
+ export declare function transitions(atoms: Atom[]): Map<number, number[]>;
12
+ export interface Eventuality {
13
+ key: string;
14
+ witnessFormulaKey: string;
15
+ }
16
+ export declare function eventualitiesIn(atom: Atom): Eventuality[];
17
+ export declare function describeAtom(a: Atom): string;
18
+ export declare function describeFormula(f: LTLFormula): string;
19
+ //# sourceMappingURL=tableau.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableau.d.ts","sourceRoot":"","sources":["../../../src/profiles/ltl-sat/tableau.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAA+B,MAAM,SAAS,CAAC;AAIlE,wBAAgB,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAE/C;AAgED,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CA6CnD;AAID,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IAEX,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAElC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAqFD,wBAAgB,cAAc,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAgEpE;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAwBhE;AAOD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IAGZ,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,CAUzD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAK5C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAErD"}
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST LTL-SAT — Tableau / construcción de autómata estilo Büchi
4
+ // ============================================================
5
+ // Procedimiento de decisión clásico (Wolper, Vardi-Wolper):
6
+ //
7
+ // 1. Normalizar a NNF (negaciones empujadas hasta átomos).
8
+ // 2. Cerrar bajo subfórmulas y duales.
9
+ // 3. Generar "atoms" = subconjuntos máximalmente consistentes
10
+ // de la clausura que cumplen las reglas locales de tableau
11
+ // (α/β rules: una ∧ requiere ambas conyuntas; una ∨
12
+ // requiere ≥1 disyunta; etc.).
13
+ // 4. Construir transición: atom A → atom B sii cada Xφ ∈ A
14
+ // cumple φ ∈ B (y nada más restringe el siguiente estado).
15
+ // 5. Decidir SAT: existe lazo accesible desde un átomo que
16
+ // contiene φ tal que cada eventualidad (F ψ o φ U ψ) se
17
+ // cumple en el ciclo (presencia de ψ).
18
+ //
19
+ // El procedimiento es decidible: 2^O(|φ|) atoms, búsqueda de
20
+ // lazo en el grafo resultante (NL en el tamaño del grafo).
21
+ // ============================================================
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.toNNF = toNNF;
24
+ exports.closure = closure;
25
+ exports.enumerateAtoms = enumerateAtoms;
26
+ exports.transitions = transitions;
27
+ exports.eventualitiesIn = eventualitiesIn;
28
+ exports.describeAtom = describeAtom;
29
+ exports.describeFormula = describeFormula;
30
+ const types_1 = require("./types");
31
+ // --- NNF: negation normal form -----------------------------------------------
32
+ function toNNF(f) {
33
+ return pushNot(f, false);
34
+ }
35
+ function pushNot(f, negated) {
36
+ switch (f.kind) {
37
+ case 'atom':
38
+ return negated ? { kind: 'not', arg: f } : f;
39
+ case 'not':
40
+ return pushNot(f.arg, !negated);
41
+ case 'and':
42
+ if (negated) {
43
+ return { kind: 'or', args: f.args.map((a) => pushNot(a, true)) };
44
+ }
45
+ return { kind: 'and', args: f.args.map((a) => pushNot(a, false)) };
46
+ case 'or':
47
+ if (negated) {
48
+ return { kind: 'and', args: f.args.map((a) => pushNot(a, true)) };
49
+ }
50
+ return { kind: 'or', args: f.args.map((a) => pushNot(a, false)) };
51
+ case 'X':
52
+ // ¬X φ ≡ X ¬φ (en LTL lineal el next es funcional).
53
+ return { kind: 'X', arg: pushNot(f.arg, negated) };
54
+ case 'F':
55
+ // ¬F φ ≡ G ¬φ
56
+ return negated
57
+ ? { kind: 'G', arg: pushNot(f.arg, true) }
58
+ : { kind: 'F', arg: pushNot(f.arg, false) };
59
+ case 'G':
60
+ // ¬G φ ≡ F ¬φ
61
+ return negated
62
+ ? { kind: 'F', arg: pushNot(f.arg, true) }
63
+ : { kind: 'G', arg: pushNot(f.arg, false) };
64
+ case 'U':
65
+ // ¬(φ U ψ) ≡ (¬ψ) R (¬φ)
66
+ if (negated) {
67
+ return {
68
+ kind: 'R',
69
+ left: pushNot(f.right, true),
70
+ right: pushNot(f.left, true),
71
+ };
72
+ }
73
+ return {
74
+ kind: 'U',
75
+ left: pushNot(f.left, false),
76
+ right: pushNot(f.right, false),
77
+ };
78
+ case 'R':
79
+ // ¬(φ R ψ) ≡ (¬φ) U (¬ψ)
80
+ if (negated) {
81
+ return {
82
+ kind: 'U',
83
+ left: pushNot(f.left, true),
84
+ right: pushNot(f.right, true),
85
+ };
86
+ }
87
+ return {
88
+ kind: 'R',
89
+ left: pushNot(f.left, false),
90
+ right: pushNot(f.right, false),
91
+ };
92
+ }
93
+ }
94
+ // --- Closure ----------------------------------------------------------------
95
+ function closure(f) {
96
+ const seen = new Map();
97
+ function visit(g) {
98
+ const k = (0, types_1.formulaKey)(g);
99
+ if (seen.has(k))
100
+ return;
101
+ seen.set(k, g);
102
+ switch (g.kind) {
103
+ case 'atom':
104
+ return;
105
+ case 'not':
106
+ visit(g.arg);
107
+ return;
108
+ case 'and':
109
+ case 'or':
110
+ g.args.forEach(visit);
111
+ return;
112
+ case 'X':
113
+ visit(g.arg);
114
+ return;
115
+ case 'F':
116
+ // F φ ≡ φ ∨ X F φ; añadimos también X F φ a la clausura.
117
+ visit(g.arg);
118
+ visit({ kind: 'X', arg: g });
119
+ return;
120
+ case 'G':
121
+ // G φ ≡ φ ∧ X G φ
122
+ visit(g.arg);
123
+ visit({ kind: 'X', arg: g });
124
+ return;
125
+ case 'U':
126
+ // φ U ψ ≡ ψ ∨ (φ ∧ X(φ U ψ))
127
+ visit(g.left);
128
+ visit(g.right);
129
+ visit({ kind: 'X', arg: g });
130
+ return;
131
+ case 'R':
132
+ // φ R ψ ≡ ψ ∧ (φ ∨ X(φ R ψ))
133
+ visit(g.left);
134
+ visit(g.right);
135
+ visit({ kind: 'X', arg: g });
136
+ return;
137
+ }
138
+ }
139
+ visit(f);
140
+ return Array.from(seen.values());
141
+ }
142
+ // Devuelve true si la asignación parcial `present` es localmente consistente
143
+ // con respecto a las reglas tableau y *contiene* todas las fórmulas que se
144
+ // derivan obligatoriamente de las que ya están dentro.
145
+ function isLocallyConsistent(present, byKey) {
146
+ for (const [k, f] of byKey) {
147
+ if (!present.has(k))
148
+ continue;
149
+ switch (f.kind) {
150
+ case 'atom': {
151
+ const negKey = `n:${k}`;
152
+ if (present.has(negKey))
153
+ return false;
154
+ break;
155
+ }
156
+ case 'not': {
157
+ if (f.arg.kind === 'atom') {
158
+ // ¬p: p no debe estar.
159
+ if (present.has((0, types_1.formulaKey)(f.arg)))
160
+ return false;
161
+ }
162
+ // Cualquier otro `not` no debería existir tras NNF.
163
+ break;
164
+ }
165
+ case 'and':
166
+ for (const a of f.args) {
167
+ if (!present.has((0, types_1.formulaKey)(a)))
168
+ return false;
169
+ }
170
+ break;
171
+ case 'or': {
172
+ // Al menos una disyunta presente.
173
+ let ok = false;
174
+ for (const a of f.args) {
175
+ if (present.has((0, types_1.formulaKey)(a))) {
176
+ ok = true;
177
+ break;
178
+ }
179
+ }
180
+ if (!ok)
181
+ return false;
182
+ break;
183
+ }
184
+ case 'X':
185
+ // X φ no impone condiciones locales en el átomo actual; lo
186
+ // valida la relación de transición.
187
+ break;
188
+ case 'F': {
189
+ // F φ ≡ φ ∨ X F φ: φ presente o X(F φ) presente.
190
+ const phiKey = (0, types_1.formulaKey)(f.arg);
191
+ const xFphiKey = `X:${k}`;
192
+ if (!present.has(phiKey) && !present.has(xFphiKey))
193
+ return false;
194
+ break;
195
+ }
196
+ case 'G': {
197
+ // G φ ≡ φ ∧ X G φ: ambas.
198
+ const phiKey = (0, types_1.formulaKey)(f.arg);
199
+ const xGphiKey = `X:${k}`;
200
+ if (!present.has(phiKey) || !present.has(xGphiKey))
201
+ return false;
202
+ break;
203
+ }
204
+ case 'U': {
205
+ // φ U ψ ≡ ψ ∨ (φ ∧ X(φ U ψ))
206
+ const psiKey = (0, types_1.formulaKey)(f.right);
207
+ const phiKey = (0, types_1.formulaKey)(f.left);
208
+ const xUKey = `X:${k}`;
209
+ const optA = present.has(psiKey);
210
+ const optB = present.has(phiKey) && present.has(xUKey);
211
+ if (!optA && !optB)
212
+ return false;
213
+ break;
214
+ }
215
+ case 'R': {
216
+ // φ R ψ ≡ ψ ∧ (φ ∨ X(φ R ψ))
217
+ const psiKey = (0, types_1.formulaKey)(f.right);
218
+ const phiKey = (0, types_1.formulaKey)(f.left);
219
+ const xRKey = `X:${k}`;
220
+ if (!present.has(psiKey))
221
+ return false;
222
+ if (!present.has(phiKey) && !present.has(xRKey))
223
+ return false;
224
+ break;
225
+ }
226
+ }
227
+ }
228
+ return true;
229
+ }
230
+ // Genera todos los atoms (subconjuntos de la clausura) localmente
231
+ // consistentes. Para evitar explosión usamos enumeración por elección
232
+ // de subfórmulas en orden tópico con poda temprana.
233
+ function enumerateAtoms(closureFormulas) {
234
+ const byKey = new Map();
235
+ for (const g of closureFormulas)
236
+ byKey.set((0, types_1.formulaKey)(g), g);
237
+ // Particionamos en: átomos atómicos (incluyendo sus negaciones), y el resto.
238
+ // Para cada átomo proposicional decidimos true/false. Para el resto, lo
239
+ // derivamos por reglas; pero algunas elecciones quedan: ∨, U, R, F
240
+ // tienen disyunciones internas. Las enumeramos por subset de la clausura.
241
+ //
242
+ // Estrategia: enumerar sobre todos los subconjuntos de la clausura y
243
+ // filtrar por consistencia local. La clausura |Φ| ≤ O(|φ|*2). Para
244
+ // fórmulas pequeñas (~5-10 ops) esto da 2^20 ≈ 1M ⇒ aceptable en tests.
245
+ const keys = closureFormulas.map(types_1.formulaKey);
246
+ const atoms = [];
247
+ const n = keys.length;
248
+ // Búsqueda por backtracking con poda.
249
+ const present = new Set();
250
+ // Helper para chequeo de consistencia parcial: dado que el orden de
251
+ // selección es arbitrario, sólo evaluamos consistencia completa al final.
252
+ // (La poda más simple: cláusulas atom/¬atom contradictorias.)
253
+ function backtrack(i) {
254
+ if (atoms.length > 200000)
255
+ return; // safety hard cap
256
+ if (i === n) {
257
+ if (isLocallyConsistent(present, byKey)) {
258
+ const formulas = new Map();
259
+ const pos = [];
260
+ const neg = [];
261
+ for (const k of present) {
262
+ const ff = byKey.get(k);
263
+ if (!ff)
264
+ continue;
265
+ formulas.set(k, ff);
266
+ if (ff.kind === 'atom')
267
+ pos.push(ff.name);
268
+ else if (ff.kind === 'not' && ff.arg.kind === 'atom')
269
+ neg.push(ff.arg.name);
270
+ }
271
+ atoms.push({
272
+ id: atoms.length,
273
+ formulas,
274
+ positiveLiterals: pos.sort(),
275
+ negativeLiterals: neg.sort(),
276
+ });
277
+ }
278
+ return;
279
+ }
280
+ // Decide no incluir keys[i].
281
+ backtrack(i + 1);
282
+ // Decide incluir keys[i].
283
+ const k = keys[i];
284
+ const f = byKey.get(k);
285
+ if (!f)
286
+ return;
287
+ // Poda inmediata: si f es atom p y ¬p ya está, no incluir.
288
+ if (f.kind === 'atom') {
289
+ if (present.has(`n:${k}`))
290
+ return; // poda
291
+ }
292
+ else if (f.kind === 'not' && f.arg.kind === 'atom') {
293
+ if (present.has((0, types_1.formulaKey)(f.arg)))
294
+ return;
295
+ }
296
+ present.add(k);
297
+ backtrack(i + 1);
298
+ present.delete(k);
299
+ }
300
+ backtrack(0);
301
+ return atoms;
302
+ }
303
+ // --- Transition relation ----------------------------------------------------
304
+ // A → B sii: para toda Xφ ∈ A, φ ∈ B. (No exigimos lo recíproco porque B
305
+ // puede contener fórmulas "iniciales" de su estado.)
306
+ //
307
+ // IMPORTANTE: además, las fórmulas obligatorias de la siguiente generación
308
+ // (F, G, U, R) deben mantenerse consistentes. La regla X-φ ∈ A ⇒ φ ∈ B
309
+ // es suficiente porque la clausura ya contiene X(F φ), X(G φ), X(φ U ψ),
310
+ // X(φ R ψ) explícitamente.
311
+ function transitions(atoms) {
312
+ const out = new Map();
313
+ for (const a of atoms) {
314
+ // Recolectamos las obligaciones "next".
315
+ const nextObligations = [];
316
+ for (const f of a.formulas.values()) {
317
+ if (f.kind === 'X') {
318
+ nextObligations.push((0, types_1.formulaKey)(f.arg));
319
+ }
320
+ }
321
+ const succ = [];
322
+ for (const b of atoms) {
323
+ let ok = true;
324
+ for (const obl of nextObligations) {
325
+ if (!b.formulas.has(obl)) {
326
+ ok = false;
327
+ break;
328
+ }
329
+ }
330
+ if (ok)
331
+ succ.push(b.id);
332
+ }
333
+ out.set(a.id, succ);
334
+ }
335
+ return out;
336
+ }
337
+ function eventualitiesIn(atom) {
338
+ const ev = [];
339
+ for (const [k, f] of atom.formulas) {
340
+ if (f.kind === 'F') {
341
+ ev.push({ key: k, witnessFormulaKey: (0, types_1.formulaKey)(f.arg) });
342
+ }
343
+ else if (f.kind === 'U') {
344
+ ev.push({ key: k, witnessFormulaKey: (0, types_1.formulaKey)(f.right) });
345
+ }
346
+ }
347
+ return ev;
348
+ }
349
+ function describeAtom(a) {
350
+ const pos = a.positiveLiterals.join(',');
351
+ const neg = a.negativeLiterals.map((n) => `¬${n}`).join(',');
352
+ const all = [pos, neg].filter((s) => s.length > 0).join(',');
353
+ return all || '∅';
354
+ }
355
+ function describeFormula(f) {
356
+ return (0, types_1.formulaToString)(f);
357
+ }
358
+ //# sourceMappingURL=tableau.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableau.js","sourceRoot":"","sources":["../../../src/profiles/ltl-sat/tableau.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ export type LTLFormula = {
2
+ kind: 'atom';
3
+ name: string;
4
+ } | {
5
+ kind: 'not';
6
+ arg: LTLFormula;
7
+ } | {
8
+ kind: 'and';
9
+ args: LTLFormula[];
10
+ } | {
11
+ kind: 'or';
12
+ args: LTLFormula[];
13
+ } | {
14
+ kind: 'X';
15
+ arg: LTLFormula;
16
+ } | {
17
+ kind: 'F';
18
+ arg: LTLFormula;
19
+ } | {
20
+ kind: 'G';
21
+ arg: LTLFormula;
22
+ } | {
23
+ kind: 'U';
24
+ left: LTLFormula;
25
+ right: LTLFormula;
26
+ } | {
27
+ kind: 'R';
28
+ left: LTLFormula;
29
+ right: LTLFormula;
30
+ };
31
+ export declare const atom: (name: string) => LTLFormula;
32
+ export declare const not: (arg: LTLFormula) => LTLFormula;
33
+ export declare const and: (...args: LTLFormula[]) => LTLFormula;
34
+ export declare const or: (...args: LTLFormula[]) => LTLFormula;
35
+ export declare const next: (arg: LTLFormula) => LTLFormula;
36
+ export declare const eventually: (arg: LTLFormula) => LTLFormula;
37
+ export declare const globally: (arg: LTLFormula) => LTLFormula;
38
+ export declare const until: (left: LTLFormula, right: LTLFormula) => LTLFormula;
39
+ export declare const release: (left: LTLFormula, right: LTLFormula) => LTLFormula;
40
+ export declare const weakUntil: (left: LTLFormula, right: LTLFormula) => LTLFormula;
41
+ export declare const implies: (left: LTLFormula, right: LTLFormula) => LTLFormula;
42
+ export interface Witness {
43
+ prefix: string[];
44
+ loop: string[];
45
+ }
46
+ export interface SatResult {
47
+ sat: boolean;
48
+ witness?: Witness;
49
+ }
50
+ export declare function formulaToString(f: LTLFormula): string;
51
+ export declare function formulaKey(f: LTLFormula): string;
52
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiles/ltl-sat/types.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAGvD,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,UAAsC,CAAC;AAC3E,eAAO,MAAM,GAAG,GAAI,KAAK,UAAU,KAAG,UAAoC,CAAC;AAC3E,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,UAAU,EAAE,KAAG,UAAqC,CAAC;AAClF,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,UAAU,EAAE,KAAG,UAAoC,CAAC;AAChF,eAAO,MAAM,IAAI,GAAI,KAAK,UAAU,KAAG,UAAkC,CAAC;AAC1E,eAAO,MAAM,UAAU,GAAI,KAAK,UAAU,KAAG,UAAkC,CAAC;AAChF,eAAO,MAAM,QAAQ,GAAI,KAAK,UAAU,KAAG,UAAkC,CAAC;AAC9E,eAAO,MAAM,KAAK,GAAI,MAAM,UAAU,EAAE,OAAO,UAAU,KAAG,UAI1D,CAAC;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,OAAO,UAAU,KAAG,UAI5D,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,MAAM,UAAU,EAAE,OAAO,UAAU,KAAG,UACxB,CAAC;AAGzC,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,OAAO,UAAU,KAAG,UAAkC,CAAC;AAEjG,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAqBrD;AASD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAqBhD"}