@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,359 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CTL model checker — algoritmo clásico de labelling por punto fijo.
4
+ // ============================================================
5
+ // Complejidad O(|φ| · (|S| + |R|)) sobre modelos finitos.
6
+ //
7
+ // EX/AX: paso local sobre la relación R.
8
+ // EF/AF: punto fijo mínimo (lfp).
9
+ // EG/AG: punto fijo máximo (gfp).
10
+ // EU: punto fijo mínimo de E[A U B].
11
+ // AU: punto fijo mínimo de A[A U B] (fórmula con sucesores universales).
12
+ //
13
+ // Reducciones equivalentes (no usadas en el camino principal por eficiencia
14
+ // y claridad de witness):
15
+ // AX φ ≡ ¬EX ¬φ
16
+ // AF φ ≡ ¬EG ¬φ
17
+ // AG φ ≡ ¬EF ¬φ
18
+ // ============================================================
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.modelCheckCTL = modelCheckCTL;
21
+ exports.satisfiesCTL = satisfiesCTL;
22
+ function compile(M) {
23
+ const stateIds = M.states.map((s) => s.id);
24
+ const labelsByState = new Map();
25
+ const succ = new Map();
26
+ const pred = new Map();
27
+ for (const s of M.states) {
28
+ labelsByState.set(s.id, new Set(s.labels));
29
+ succ.set(s.id, new Set());
30
+ pred.set(s.id, new Set());
31
+ }
32
+ for (const [from, to] of M.transitions) {
33
+ if (!succ.has(from)) {
34
+ throw new Error(`CTL: transición desde estado desconocido "${from}"`);
35
+ }
36
+ if (!succ.has(to)) {
37
+ throw new Error(`CTL: transición hacia estado desconocido "${to}"`);
38
+ }
39
+ succ.get(from).add(to);
40
+ pred.get(to).add(from);
41
+ }
42
+ for (const init of M.initial) {
43
+ if (!labelsByState.has(init)) {
44
+ throw new Error(`CTL: estado inicial desconocido "${init}"`);
45
+ }
46
+ }
47
+ return { stateIds, labelsByState, succ, pred, initial: [...M.initial] };
48
+ }
49
+ function emptySat(model) {
50
+ const m = new Map();
51
+ for (const id of model.stateIds)
52
+ m.set(id, false);
53
+ return m;
54
+ }
55
+ function fullSat(model) {
56
+ const m = new Map();
57
+ for (const id of model.stateIds)
58
+ m.set(id, true);
59
+ return m;
60
+ }
61
+ function labelAtom(model, name) {
62
+ const sat = emptySat(model);
63
+ for (const id of model.stateIds) {
64
+ if (model.labelsByState.get(id).has(name))
65
+ sat.set(id, true);
66
+ }
67
+ return sat;
68
+ }
69
+ function labelNot(model, sub) {
70
+ const out = emptySat(model);
71
+ for (const id of model.stateIds)
72
+ out.set(id, !sub.get(id));
73
+ return out;
74
+ }
75
+ function labelAnd(model, subs) {
76
+ const out = fullSat(model);
77
+ for (const id of model.stateIds) {
78
+ let ok = true;
79
+ for (const s of subs) {
80
+ if (!s.get(id)) {
81
+ ok = false;
82
+ break;
83
+ }
84
+ }
85
+ out.set(id, ok);
86
+ }
87
+ return out;
88
+ }
89
+ function labelOr(model, subs) {
90
+ const out = emptySat(model);
91
+ for (const id of model.stateIds) {
92
+ let ok = false;
93
+ for (const s of subs) {
94
+ if (s.get(id)) {
95
+ ok = true;
96
+ break;
97
+ }
98
+ }
99
+ out.set(id, ok);
100
+ }
101
+ return out;
102
+ }
103
+ function labelEX(model, sub) {
104
+ const out = emptySat(model);
105
+ for (const id of model.stateIds) {
106
+ for (const s of model.succ.get(id)) {
107
+ if (sub.get(s)) {
108
+ out.set(id, true);
109
+ break;
110
+ }
111
+ }
112
+ }
113
+ return out;
114
+ }
115
+ function labelAX(model, sub) {
116
+ const out = emptySat(model);
117
+ for (const id of model.stateIds) {
118
+ const succs = model.succ.get(id);
119
+ let ok = true;
120
+ for (const s of succs) {
121
+ if (!sub.get(s)) {
122
+ ok = false;
123
+ break;
124
+ }
125
+ }
126
+ // Estado sin sucesores: AX φ trivialmente true.
127
+ out.set(id, ok);
128
+ }
129
+ return out;
130
+ }
131
+ /** EF φ = μZ. φ ∨ EX Z (lfp). */
132
+ function labelEF(model, sub) {
133
+ const z = emptySat(model);
134
+ for (const id of model.stateIds)
135
+ if (sub.get(id))
136
+ z.set(id, true);
137
+ const queue = [];
138
+ for (const id of model.stateIds)
139
+ if (z.get(id))
140
+ queue.push(id);
141
+ while (queue.length > 0) {
142
+ const cur = queue.shift();
143
+ for (const p of model.pred.get(cur)) {
144
+ if (!z.get(p)) {
145
+ z.set(p, true);
146
+ queue.push(p);
147
+ }
148
+ }
149
+ }
150
+ return z;
151
+ }
152
+ /** AF φ = μZ. φ ∨ AX Z (lfp). */
153
+ function labelAF(model, sub) {
154
+ const z = emptySat(model);
155
+ for (const id of model.stateIds)
156
+ if (sub.get(id))
157
+ z.set(id, true);
158
+ let changed = true;
159
+ while (changed) {
160
+ changed = false;
161
+ for (const id of model.stateIds) {
162
+ if (z.get(id))
163
+ continue;
164
+ const succs = model.succ.get(id);
165
+ if (succs.size === 0)
166
+ continue; // deadlock sin φ: nunca llegará a φ
167
+ let all = true;
168
+ for (const s of succs) {
169
+ if (!z.get(s)) {
170
+ all = false;
171
+ break;
172
+ }
173
+ }
174
+ if (all) {
175
+ z.set(id, true);
176
+ changed = true;
177
+ }
178
+ }
179
+ }
180
+ return z;
181
+ }
182
+ /** EG φ = νZ. φ ∧ EX Z (gfp). */
183
+ function labelEG(model, sub) {
184
+ const z = emptySat(model);
185
+ for (const id of model.stateIds)
186
+ if (sub.get(id))
187
+ z.set(id, true);
188
+ let changed = true;
189
+ while (changed) {
190
+ changed = false;
191
+ for (const id of model.stateIds) {
192
+ if (!z.get(id))
193
+ continue;
194
+ const succs = model.succ.get(id);
195
+ let hasSucc = false;
196
+ for (const s of succs) {
197
+ if (z.get(s)) {
198
+ hasSucc = true;
199
+ break;
200
+ }
201
+ }
202
+ if (!hasSucc) {
203
+ z.set(id, false);
204
+ changed = true;
205
+ }
206
+ }
207
+ }
208
+ return z;
209
+ }
210
+ /** AG φ = νZ. φ ∧ AX Z (gfp). */
211
+ function labelAG(model, sub) {
212
+ const z = emptySat(model);
213
+ for (const id of model.stateIds)
214
+ if (sub.get(id))
215
+ z.set(id, true);
216
+ let changed = true;
217
+ while (changed) {
218
+ changed = false;
219
+ for (const id of model.stateIds) {
220
+ if (!z.get(id))
221
+ continue;
222
+ const succs = model.succ.get(id);
223
+ let allOk = true;
224
+ for (const s of succs) {
225
+ if (!z.get(s)) {
226
+ allOk = false;
227
+ break;
228
+ }
229
+ }
230
+ // Estado sin sucesores: AX trivialmente true, mantiene Z.
231
+ if (!allOk) {
232
+ z.set(id, false);
233
+ changed = true;
234
+ }
235
+ }
236
+ }
237
+ return z;
238
+ }
239
+ /** E[A U B] = μZ. B ∨ (A ∧ EX Z) (lfp). */
240
+ function labelEU(model, subA, subB) {
241
+ const z = emptySat(model);
242
+ for (const id of model.stateIds)
243
+ if (subB.get(id))
244
+ z.set(id, true);
245
+ const queue = [];
246
+ for (const id of model.stateIds)
247
+ if (z.get(id))
248
+ queue.push(id);
249
+ while (queue.length > 0) {
250
+ const cur = queue.shift();
251
+ for (const p of model.pred.get(cur)) {
252
+ if (z.get(p))
253
+ continue;
254
+ if (subA.get(p)) {
255
+ z.set(p, true);
256
+ queue.push(p);
257
+ }
258
+ }
259
+ }
260
+ return z;
261
+ }
262
+ /** A[A U B] = μZ. B ∨ (A ∧ AX Z ∧ EX Z) (lfp).
263
+ * El EX Z extra evita que estados sin sucesores satisfagan A[A U B]
264
+ * cuando aún no hemos visto B — un deadlock no garantiza llegar a B.
265
+ */
266
+ function labelAU(model, subA, subB) {
267
+ const z = emptySat(model);
268
+ for (const id of model.stateIds)
269
+ if (subB.get(id))
270
+ z.set(id, true);
271
+ let changed = true;
272
+ while (changed) {
273
+ changed = false;
274
+ for (const id of model.stateIds) {
275
+ if (z.get(id))
276
+ continue;
277
+ if (!subA.get(id))
278
+ continue;
279
+ const succs = model.succ.get(id);
280
+ if (succs.size === 0)
281
+ continue;
282
+ let allOk = true;
283
+ for (const s of succs) {
284
+ if (!z.get(s)) {
285
+ allOk = false;
286
+ break;
287
+ }
288
+ }
289
+ if (allOk) {
290
+ z.set(id, true);
291
+ changed = true;
292
+ }
293
+ }
294
+ }
295
+ return z;
296
+ }
297
+ function label(model, phi) {
298
+ switch (phi.kind) {
299
+ case 'true':
300
+ return fullSat(model);
301
+ case 'false':
302
+ return emptySat(model);
303
+ case 'atom':
304
+ return labelAtom(model, phi.name);
305
+ case 'not':
306
+ return labelNot(model, label(model, phi.arg));
307
+ case 'and':
308
+ return labelAnd(model, phi.args.map((a) => label(model, a)));
309
+ case 'or':
310
+ return labelOr(model, phi.args.map((a) => label(model, a)));
311
+ case 'implies': {
312
+ const l = label(model, phi.left);
313
+ const r = label(model, phi.right);
314
+ const out = emptySat(model);
315
+ for (const id of model.stateIds) {
316
+ out.set(id, !l.get(id) || !!r.get(id));
317
+ }
318
+ return out;
319
+ }
320
+ case 'EX':
321
+ return labelEX(model, label(model, phi.arg));
322
+ case 'AX':
323
+ return labelAX(model, label(model, phi.arg));
324
+ case 'EF':
325
+ return labelEF(model, label(model, phi.arg));
326
+ case 'AF':
327
+ return labelAF(model, label(model, phi.arg));
328
+ case 'EG':
329
+ return labelEG(model, label(model, phi.arg));
330
+ case 'AG':
331
+ return labelAG(model, label(model, phi.arg));
332
+ case 'EU':
333
+ return labelEU(model, label(model, phi.left), label(model, phi.right));
334
+ case 'AU':
335
+ return labelAU(model, label(model, phi.left), label(model, phi.right));
336
+ }
337
+ }
338
+ /**
339
+ * Model checking de Computation Tree Logic.
340
+ * Devuelve un mapa `stateId → φ se cumple en ese estado`.
341
+ */
342
+ function modelCheckCTL(M, phi) {
343
+ const model = compile(M);
344
+ return label(model, phi);
345
+ }
346
+ /**
347
+ * `M ⊨ φ` cuando φ se cumple en todos los estados iniciales.
348
+ * Si `initial` está vacío, devuelve `true` por vacuidad (consistente con
349
+ * la lectura "no hay contraejemplo en S0").
350
+ */
351
+ function satisfiesCTL(M, phi) {
352
+ const sat = modelCheckCTL(M, phi);
353
+ for (const id of M.initial) {
354
+ if (!sat.get(id))
355
+ return false;
356
+ }
357
+ return true;
358
+ }
359
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/profiles/ctl/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { CTLFormula, KripkeState, KripkeStructure } from './types';
2
+ export { ctlToString } from './types';
3
+ export { modelCheckCTL, satisfiesCTL } from './check';
4
+ export { generateWitness } from './witness';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiles/ctl/index.ts"],"names":[],"mappings":"AAaA,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST CTL — punto de entrada público del perfil.
4
+ // ============================================================
5
+ // API:
6
+ // modelCheckCTL(M, φ) → Map<stateId, holds>
7
+ // satisfiesCTL(M, φ) → boolean (φ vale en todos los iniciales)
8
+ // generateWitness(M, φ, state) → string[] | null
9
+ // ctlToString(φ) → notación textual
10
+ //
11
+ // La estructura de Kripke se asume finita. El algoritmo de labelling es
12
+ // O(|φ| · (|S| + |R|)).
13
+ // ============================================================
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.generateWitness = exports.satisfiesCTL = exports.modelCheckCTL = exports.ctlToString = void 0;
16
+ var types_1 = require("./types");
17
+ Object.defineProperty(exports, "ctlToString", { enumerable: true, get: function () { return types_1.ctlToString; } });
18
+ var check_1 = require("./check");
19
+ Object.defineProperty(exports, "modelCheckCTL", { enumerable: true, get: function () { return check_1.modelCheckCTL; } });
20
+ Object.defineProperty(exports, "satisfiesCTL", { enumerable: true, get: function () { return check_1.satisfiesCTL; } });
21
+ var witness_1 = require("./witness");
22
+ Object.defineProperty(exports, "generateWitness", { enumerable: true, get: function () { return witness_1.generateWitness; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/profiles/ctl/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAC/D,OAAO;AACP,gDAAgD;AAChD,oEAAoE;AACpE,mDAAmD;AACnD,6CAA6C;AAC7C,EAAE;AACF,wEAAwE;AACxE,wBAAwB;AACxB,+DAA+D;;;AAG/D,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,iCAAsD;AAA7C,sGAAA,aAAa,OAAA;AAAE,qGAAA,YAAY,OAAA;AACpC,qCAA4C;AAAnC,0GAAA,eAAe,OAAA"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Estado de una estructura de Kripke.
3
+ * - `id` identificador único del estado.
4
+ * - `labels` proposiciones atómicas que se cumplen en el estado.
5
+ */
6
+ export interface KripkeState {
7
+ id: string;
8
+ labels: Set<string>;
9
+ }
10
+ /**
11
+ * Estructura de Kripke: M = (S, R, L, S0).
12
+ * - `states` conjunto de estados con sus etiquetas.
13
+ * - `transitions` relación R ⊆ S × S codificada como pares [from, to].
14
+ * - `initial` subconjunto de estados iniciales (S0).
15
+ */
16
+ export interface KripkeStructure {
17
+ states: KripkeState[];
18
+ transitions: Array<[string, string]>;
19
+ initial: string[];
20
+ }
21
+ /**
22
+ * AST de Computation Tree Logic. Cubre los 8 operadores temporales
23
+ * estándar: EX/AX, EF/AF, EG/AG, EU/AU.
24
+ */
25
+ export type CTLFormula = {
26
+ kind: 'atom';
27
+ name: string;
28
+ } | {
29
+ kind: 'true';
30
+ } | {
31
+ kind: 'false';
32
+ } | {
33
+ kind: 'not';
34
+ arg: CTLFormula;
35
+ } | {
36
+ kind: 'and';
37
+ args: CTLFormula[];
38
+ } | {
39
+ kind: 'or';
40
+ args: CTLFormula[];
41
+ } | {
42
+ kind: 'implies';
43
+ left: CTLFormula;
44
+ right: CTLFormula;
45
+ } | {
46
+ kind: 'EX';
47
+ arg: CTLFormula;
48
+ } | {
49
+ kind: 'AX';
50
+ arg: CTLFormula;
51
+ } | {
52
+ kind: 'EF';
53
+ arg: CTLFormula;
54
+ } | {
55
+ kind: 'AF';
56
+ arg: CTLFormula;
57
+ } | {
58
+ kind: 'EG';
59
+ arg: CTLFormula;
60
+ } | {
61
+ kind: 'AG';
62
+ arg: CTLFormula;
63
+ } | {
64
+ kind: 'EU';
65
+ left: CTLFormula;
66
+ right: CTLFormula;
67
+ } | {
68
+ kind: 'AU';
69
+ left: CTLFormula;
70
+ right: CTLFormula;
71
+ };
72
+ /** Renderiza una fórmula CTL a notación textual estándar. */
73
+ export declare function ctlToString(f: CTLFormula): string;
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiles/ctl/types.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;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,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAExD,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAiCjD"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST CTL — Computation Tree Logic
4
+ // ============================================================
5
+ // Estructuras de Kripke y AST de fórmulas CTL.
6
+ //
7
+ // Convenciones:
8
+ // - Operadores de camino "exists" (E) requieren al menos UN camino
9
+ // desde el estado actual que cumpla la propiedad temporal.
10
+ // - Operadores de camino "all" (A) requieren que TODOS los caminos
11
+ // desde el estado actual cumplan la propiedad temporal.
12
+ // - Estados sin sucesores se consideran "deadlock": AX φ es trivialmente
13
+ // verdadero, EX φ es trivialmente falso.
14
+ // - El modelo se asume finito. EG y EU se resuelven con punto fijo.
15
+ // ============================================================
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ctlToString = ctlToString;
18
+ /** Renderiza una fórmula CTL a notación textual estándar. */
19
+ function ctlToString(f) {
20
+ switch (f.kind) {
21
+ case 'atom':
22
+ return f.name;
23
+ case 'true':
24
+ return '⊤';
25
+ case 'false':
26
+ return '⊥';
27
+ case 'not':
28
+ return `¬${ctlToString(f.arg)}`;
29
+ case 'and':
30
+ return `(${f.args.map(ctlToString).join(' ∧ ')})`;
31
+ case 'or':
32
+ return `(${f.args.map(ctlToString).join(' ∨ ')})`;
33
+ case 'implies':
34
+ return `(${ctlToString(f.left)} → ${ctlToString(f.right)})`;
35
+ case 'EX':
36
+ return `EX ${ctlToString(f.arg)}`;
37
+ case 'AX':
38
+ return `AX ${ctlToString(f.arg)}`;
39
+ case 'EF':
40
+ return `EF ${ctlToString(f.arg)}`;
41
+ case 'AF':
42
+ return `AF ${ctlToString(f.arg)}`;
43
+ case 'EG':
44
+ return `EG ${ctlToString(f.arg)}`;
45
+ case 'AG':
46
+ return `AG ${ctlToString(f.arg)}`;
47
+ case 'EU':
48
+ return `E[${ctlToString(f.left)} U ${ctlToString(f.right)}]`;
49
+ case 'AU':
50
+ return `A[${ctlToString(f.left)} U ${ctlToString(f.right)}]`;
51
+ }
52
+ }
53
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/ctl/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAC/D,+CAA+C;AAC/C,EAAE;AACF,gBAAgB;AAChB,oEAAoE;AACpE,8DAA8D;AAC9D,oEAAoE;AACpE,2DAA2D;AAC3D,0EAA0E;AAC1E,4CAA4C;AAC5C,qEAAqE;AACrE,+DAA+D;;AA8C/D,kCAiCC;AAlCD,6DAA6D;AAC7D,SAAgB,WAAW,CAAC,CAAa;IACvC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,IAAI,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,CAAC;QACb,KAAK,KAAK;YACR,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpD,KAAK,IAAI;YACP,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpD,KAAK,SAAS;YACZ,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9D,KAAK,IAAI;YACP,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/D,KAAK,IAAI;YACP,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { CTLFormula, KripkeStructure } from './types';
2
+ /**
3
+ * Encuentra un camino testigo finito (`stateId[]`) que justifique
4
+ * que `phi` se cumple en `state`. Devuelve `null` si:
5
+ * - `phi` no se cumple en `state`, o
6
+ * - `phi` es universal (AX/AF/AG/AU) — no admite un único witness path, o
7
+ * - `state` no existe en el modelo.
8
+ *
9
+ * Convenciones del path devuelto:
10
+ * - EX φ → `[state, next]` con `next ⊨ φ`.
11
+ * - EF φ → camino más corto desde `state` hasta un estado con `φ`.
12
+ * - EG φ → camino que entra en un ciclo de estados con `φ`;
13
+ * el último elemento del camino aparece dos veces para
14
+ * marcar el lazo (lasso witness).
15
+ * - E[A U B] → camino donde todos los intermedios cumplen A y el
16
+ * último cumple B.
17
+ * - cualquier otro operador no existencial → `null`.
18
+ */
19
+ export declare function generateWitness(M: KripkeStructure, phi: CTLFormula, state: string): string[] | null;
20
+ //# sourceMappingURL=witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../../../src/profiles/ctl/witness.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAuD3D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,eAAe,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,GAAG,IAAI,CAuDjB"}