@stevenvo780/st-lang 4.9.0 → 4.11.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 (241) hide show
  1. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts +18 -0
  2. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts.map +1 -0
  3. package/dist/logic/profiles/natural-deduction-nk/formula.js +102 -0
  4. package/dist/logic/profiles/natural-deduction-nk/formula.js.map +1 -0
  5. package/dist/logic/profiles/natural-deduction-nk/index.d.ts +5 -0
  6. package/dist/logic/profiles/natural-deduction-nk/index.d.ts.map +1 -0
  7. package/dist/logic/profiles/natural-deduction-nk/index.js +28 -0
  8. package/dist/logic/profiles/natural-deduction-nk/index.js.map +1 -0
  9. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts +49 -0
  10. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts.map +1 -0
  11. package/dist/logic/profiles/natural-deduction-nk/prover.js +557 -0
  12. package/dist/logic/profiles/natural-deduction-nk/prover.js.map +1 -0
  13. package/dist/logic/profiles/natural-deduction-nk/types.d.ts +48 -0
  14. package/dist/logic/profiles/natural-deduction-nk/types.d.ts.map +1 -0
  15. package/dist/logic/profiles/natural-deduction-nk/types.js +35 -0
  16. package/dist/logic/profiles/natural-deduction-nk/types.js.map +1 -0
  17. package/dist/proof-systems/distributed-exchange/index.d.ts +101 -0
  18. package/dist/proof-systems/distributed-exchange/index.d.ts.map +1 -0
  19. package/dist/proof-systems/distributed-exchange/index.js +408 -0
  20. package/dist/proof-systems/distributed-exchange/index.js.map +1 -0
  21. package/dist/reasoning/automata/dfa.d.ts +17 -0
  22. package/dist/reasoning/automata/dfa.d.ts.map +1 -0
  23. package/dist/reasoning/automata/dfa.js +276 -0
  24. package/dist/reasoning/automata/dfa.js.map +1 -0
  25. package/dist/reasoning/automata/index.d.ts +8 -0
  26. package/dist/reasoning/automata/index.d.ts.map +1 -0
  27. package/dist/reasoning/automata/index.js +64 -0
  28. package/dist/reasoning/automata/index.js.map +1 -0
  29. package/dist/reasoning/automata/languages.d.ts +10 -0
  30. package/dist/reasoning/automata/languages.d.ts.map +1 -0
  31. package/dist/reasoning/automata/languages.js +78 -0
  32. package/dist/reasoning/automata/languages.js.map +1 -0
  33. package/dist/reasoning/automata/nfa.d.ts +8 -0
  34. package/dist/reasoning/automata/nfa.d.ts.map +1 -0
  35. package/dist/reasoning/automata/nfa.js +122 -0
  36. package/dist/reasoning/automata/nfa.js.map +1 -0
  37. package/dist/reasoning/automata/pda.d.ts +10 -0
  38. package/dist/reasoning/automata/pda.d.ts.map +1 -0
  39. package/dist/reasoning/automata/pda.js +169 -0
  40. package/dist/reasoning/automata/pda.js.map +1 -0
  41. package/dist/reasoning/automata/regex.d.ts +6 -0
  42. package/dist/reasoning/automata/regex.d.ts.map +1 -0
  43. package/dist/reasoning/automata/regex.js +259 -0
  44. package/dist/reasoning/automata/regex.js.map +1 -0
  45. package/dist/reasoning/automata/types.d.ts +69 -0
  46. package/dist/reasoning/automata/types.d.ts.map +1 -0
  47. package/dist/reasoning/automata/types.js +29 -0
  48. package/dist/reasoning/automata/types.js.map +1 -0
  49. package/dist/reasoning/computability/index.d.ts +239 -0
  50. package/dist/reasoning/computability/index.d.ts.map +1 -0
  51. package/dist/reasoning/computability/index.js +851 -0
  52. package/dist/reasoning/computability/index.js.map +1 -0
  53. package/dist/reasoning/graph-theory/index.d.ts +63 -0
  54. package/dist/reasoning/graph-theory/index.d.ts.map +1 -0
  55. package/dist/reasoning/graph-theory/index.js +1043 -0
  56. package/dist/reasoning/graph-theory/index.js.map +1 -0
  57. package/dist/reasoning/group-presentation/cayley.d.ts +8 -0
  58. package/dist/reasoning/group-presentation/cayley.d.ts.map +1 -0
  59. package/dist/reasoning/group-presentation/cayley.js +38 -0
  60. package/dist/reasoning/group-presentation/cayley.js.map +1 -0
  61. package/dist/reasoning/group-presentation/index.d.ts +8 -0
  62. package/dist/reasoning/group-presentation/index.d.ts.map +1 -0
  63. package/dist/reasoning/group-presentation/index.js +36 -0
  64. package/dist/reasoning/group-presentation/index.js.map +1 -0
  65. package/dist/reasoning/group-presentation/standard-groups.d.ts +6 -0
  66. package/dist/reasoning/group-presentation/standard-groups.d.ts.map +1 -0
  67. package/dist/reasoning/group-presentation/standard-groups.js +93 -0
  68. package/dist/reasoning/group-presentation/standard-groups.js.map +1 -0
  69. package/dist/reasoning/group-presentation/todd-coxeter.d.ts +10 -0
  70. package/dist/reasoning/group-presentation/todd-coxeter.d.ts.map +1 -0
  71. package/dist/reasoning/group-presentation/todd-coxeter.js +362 -0
  72. package/dist/reasoning/group-presentation/todd-coxeter.js.map +1 -0
  73. package/dist/reasoning/group-presentation/types.d.ts +7 -0
  74. package/dist/reasoning/group-presentation/types.d.ts.map +1 -0
  75. package/dist/reasoning/group-presentation/types.js +22 -0
  76. package/dist/reasoning/group-presentation/types.js.map +1 -0
  77. package/dist/reasoning/group-presentation/words.d.ts +10 -0
  78. package/dist/reasoning/group-presentation/words.d.ts.map +1 -0
  79. package/dist/reasoning/group-presentation/words.js +109 -0
  80. package/dist/reasoning/group-presentation/words.js.map +1 -0
  81. package/dist/reasoning/number-theory/crt.d.ts +9 -0
  82. package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
  83. package/dist/reasoning/number-theory/crt.js +39 -0
  84. package/dist/reasoning/number-theory/crt.js.map +1 -0
  85. package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
  86. package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
  87. package/dist/reasoning/number-theory/diophantine.js +87 -0
  88. package/dist/reasoning/number-theory/diophantine.js.map +1 -0
  89. package/dist/reasoning/number-theory/factorization.d.ts +12 -0
  90. package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
  91. package/dist/reasoning/number-theory/factorization.js +136 -0
  92. package/dist/reasoning/number-theory/factorization.js.map +1 -0
  93. package/dist/reasoning/number-theory/gcd.d.ts +8 -0
  94. package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
  95. package/dist/reasoning/number-theory/gcd.js +51 -0
  96. package/dist/reasoning/number-theory/gcd.js.map +1 -0
  97. package/dist/reasoning/number-theory/index.d.ts +9 -0
  98. package/dist/reasoning/number-theory/index.d.ts.map +1 -0
  99. package/dist/reasoning/number-theory/index.js +46 -0
  100. package/dist/reasoning/number-theory/index.js.map +1 -0
  101. package/dist/reasoning/number-theory/modular.d.ts +6 -0
  102. package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
  103. package/dist/reasoning/number-theory/modular.js +75 -0
  104. package/dist/reasoning/number-theory/modular.js.map +1 -0
  105. package/dist/reasoning/number-theory/primality.d.ts +6 -0
  106. package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
  107. package/dist/reasoning/number-theory/primality.js +144 -0
  108. package/dist/reasoning/number-theory/primality.js.map +1 -0
  109. package/dist/reasoning/number-theory/symbols.d.ts +3 -0
  110. package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
  111. package/dist/reasoning/number-theory/symbols.js +57 -0
  112. package/dist/reasoning/number-theory/symbols.js.map +1 -0
  113. package/dist/reasoning/real-analysis/index.d.ts +127 -0
  114. package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
  115. package/dist/reasoning/real-analysis/index.js +638 -0
  116. package/dist/reasoning/real-analysis/index.js.map +1 -0
  117. package/dist/reasoning/topology/index.d.ts +41 -0
  118. package/dist/reasoning/topology/index.d.ts.map +1 -0
  119. package/dist/reasoning/topology/index.js +739 -0
  120. package/dist/reasoning/topology/index.js.map +1 -0
  121. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
  122. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
  123. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
  124. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
  125. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts +2 -0
  126. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts.map +1 -0
  127. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js +328 -0
  128. package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js.map +1 -0
  129. package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
  130. package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
  131. package/dist/tests/reasoning/automata/automata.test.js +310 -0
  132. package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
  133. package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
  134. package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
  135. package/dist/tests/reasoning/computability/computability.test.js +246 -0
  136. package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
  137. package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts +2 -0
  138. package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts.map +1 -0
  139. package/dist/tests/reasoning/graph-theory/graph-theory.test.js +363 -0
  140. package/dist/tests/reasoning/graph-theory/graph-theory.test.js.map +1 -0
  141. package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts +2 -0
  142. package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts.map +1 -0
  143. package/dist/tests/reasoning/group-presentation/group-presentation.test.js +229 -0
  144. package/dist/tests/reasoning/group-presentation/group-presentation.test.js.map +1 -0
  145. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
  146. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
  147. package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
  148. package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
  149. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
  150. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
  151. package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
  152. package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
  153. package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
  154. package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
  155. package/dist/tests/reasoning/topology/topology.test.js +327 -0
  156. package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
  157. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts +2 -0
  158. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts.map +1 -0
  159. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js +411 -0
  160. package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js.map +1 -0
  161. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
  162. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
  163. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
  164. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
  165. package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts +2 -0
  166. package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts.map +1 -0
  167. package/dist/tests/tooling/lemma-library/lemma-library.test.js +197 -0
  168. package/dist/tests/tooling/lemma-library/lemma-library.test.js.map +1 -0
  169. package/dist/tests/tooling/provenance/ledger.test.d.ts +2 -0
  170. package/dist/tests/tooling/provenance/ledger.test.d.ts.map +1 -0
  171. package/dist/tests/tooling/provenance/ledger.test.js +545 -0
  172. package/dist/tests/tooling/provenance/ledger.test.js.map +1 -0
  173. package/dist/tooling/exporters/coq-v2/index.d.ts +68 -0
  174. package/dist/tooling/exporters/coq-v2/index.d.ts.map +1 -0
  175. package/dist/tooling/exporters/coq-v2/index.js +692 -0
  176. package/dist/tooling/exporters/coq-v2/index.js.map +1 -0
  177. package/dist/tooling/exporters/lean4/index.d.ts +47 -0
  178. package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
  179. package/dist/tooling/exporters/lean4/index.js +423 -0
  180. package/dist/tooling/exporters/lean4/index.js.map +1 -0
  181. package/dist/tooling/lemma-library/apply.d.ts +9 -0
  182. package/dist/tooling/lemma-library/apply.d.ts.map +1 -0
  183. package/dist/tooling/lemma-library/apply.js +94 -0
  184. package/dist/tooling/lemma-library/apply.js.map +1 -0
  185. package/dist/tooling/lemma-library/arithmetic.d.ts +3 -0
  186. package/dist/tooling/lemma-library/arithmetic.d.ts.map +1 -0
  187. package/dist/tooling/lemma-library/arithmetic.js +176 -0
  188. package/dist/tooling/lemma-library/arithmetic.js.map +1 -0
  189. package/dist/tooling/lemma-library/firstorder.d.ts +3 -0
  190. package/dist/tooling/lemma-library/firstorder.d.ts.map +1 -0
  191. package/dist/tooling/lemma-library/firstorder.js +136 -0
  192. package/dist/tooling/lemma-library/firstorder.js.map +1 -0
  193. package/dist/tooling/lemma-library/index.d.ts +13 -0
  194. package/dist/tooling/lemma-library/index.d.ts.map +1 -0
  195. package/dist/tooling/lemma-library/index.js +32 -0
  196. package/dist/tooling/lemma-library/index.js.map +1 -0
  197. package/dist/tooling/lemma-library/library.d.ts +34 -0
  198. package/dist/tooling/lemma-library/library.d.ts.map +1 -0
  199. package/dist/tooling/lemma-library/library.js +126 -0
  200. package/dist/tooling/lemma-library/library.js.map +1 -0
  201. package/dist/tooling/lemma-library/modal.d.ts +3 -0
  202. package/dist/tooling/lemma-library/modal.d.ts.map +1 -0
  203. package/dist/tooling/lemma-library/modal.js +138 -0
  204. package/dist/tooling/lemma-library/modal.js.map +1 -0
  205. package/dist/tooling/lemma-library/propositional.d.ts +3 -0
  206. package/dist/tooling/lemma-library/propositional.d.ts.map +1 -0
  207. package/dist/tooling/lemma-library/propositional.js +265 -0
  208. package/dist/tooling/lemma-library/propositional.js.map +1 -0
  209. package/dist/tooling/lemma-library/set-theory.d.ts +3 -0
  210. package/dist/tooling/lemma-library/set-theory.d.ts.map +1 -0
  211. package/dist/tooling/lemma-library/set-theory.js +134 -0
  212. package/dist/tooling/lemma-library/set-theory.js.map +1 -0
  213. package/dist/tooling/lemma-library/standard.d.ts +3 -0
  214. package/dist/tooling/lemma-library/standard.d.ts.map +1 -0
  215. package/dist/tooling/lemma-library/standard.js +27 -0
  216. package/dist/tooling/lemma-library/standard.js.map +1 -0
  217. package/dist/tooling/lemma-library/tfidf.d.ts +5 -0
  218. package/dist/tooling/lemma-library/tfidf.d.ts.map +1 -0
  219. package/dist/tooling/lemma-library/tfidf.js +100 -0
  220. package/dist/tooling/lemma-library/tfidf.js.map +1 -0
  221. package/dist/tooling/lemma-library/tokenize.d.ts +2 -0
  222. package/dist/tooling/lemma-library/tokenize.d.ts.map +1 -0
  223. package/dist/tooling/lemma-library/tokenize.js +74 -0
  224. package/dist/tooling/lemma-library/tokenize.js.map +1 -0
  225. package/dist/tooling/lemma-library/types.d.ts +53 -0
  226. package/dist/tooling/lemma-library/types.d.ts.map +1 -0
  227. package/dist/tooling/lemma-library/types.js +10 -0
  228. package/dist/tooling/lemma-library/types.js.map +1 -0
  229. package/dist/tooling/provenance/index.d.ts +3 -0
  230. package/dist/tooling/provenance/index.d.ts.map +1 -0
  231. package/dist/tooling/provenance/index.js +16 -0
  232. package/dist/tooling/provenance/index.js.map +1 -0
  233. package/dist/tooling/provenance/ledger.d.ts +89 -0
  234. package/dist/tooling/provenance/ledger.d.ts.map +1 -0
  235. package/dist/tooling/provenance/ledger.js +439 -0
  236. package/dist/tooling/provenance/ledger.js.map +1 -0
  237. package/dist/tooling/provenance/types.d.ts +70 -0
  238. package/dist/tooling/provenance/types.d.ts.map +1 -0
  239. package/dist/tooling/provenance/types.js +14 -0
  240. package/dist/tooling/provenance/types.js.map +1 -0
  241. package/package.json +1 -1
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — DFA
4
+ // ============================================================
5
+ //
6
+ // Operaciones sobre DFAs:
7
+ // · dfaAccepts — simulación de aceptación.
8
+ // · dfaMinimize — partición de equivalencia (Hopcroft).
9
+ // · dfaComplement — invierte aceptación tras totalizar.
10
+ // · dfaProduct — producto cartesiano con predicado de
11
+ // aceptación (base de union/intersection).
12
+ // · dfaUnion — L(a) ∪ L(b).
13
+ // · dfaIntersection — L(a) ∩ L(b).
14
+ // ============================================================
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.dfaAccepts = dfaAccepts;
17
+ exports.dfaTotalize = dfaTotalize;
18
+ exports.dfaComplement = dfaComplement;
19
+ exports.dfaProduct = dfaProduct;
20
+ exports.dfaUnion = dfaUnion;
21
+ exports.dfaIntersection = dfaIntersection;
22
+ exports.dfaMinimize = dfaMinimize;
23
+ /** ¿`M` acepta `input`? Si en algún punto no hay transición definida,
24
+ * rechaza inmediatamente (DFA visto como función parcial). */
25
+ function dfaAccepts(M, input) {
26
+ let current = M.initial;
27
+ for (const ch of input) {
28
+ if (current === undefined)
29
+ return false;
30
+ const row = M.transitions.get(current);
31
+ if (!row)
32
+ return false;
33
+ current = row.get(ch);
34
+ if (current === undefined)
35
+ return false;
36
+ }
37
+ return current !== undefined && M.accept.has(current);
38
+ }
39
+ /** Totaliza un DFA agregando un sink-state para las aristas faltantes.
40
+ * Devuelve un DFA equivalente con `transitions` totales sobre alfabeto. */
41
+ function dfaTotalize(M, sinkName = '__sink__') {
42
+ // Detectar si ya es total.
43
+ let needsSink = false;
44
+ for (const s of M.states) {
45
+ const row = M.transitions.get(s);
46
+ for (const a of M.alphabet) {
47
+ if (!row || !row.has(a)) {
48
+ needsSink = true;
49
+ break;
50
+ }
51
+ }
52
+ if (needsSink)
53
+ break;
54
+ }
55
+ if (!needsSink)
56
+ return M;
57
+ const states = new Set(M.states);
58
+ let sink = sinkName;
59
+ while (states.has(sink))
60
+ sink = sink + '_';
61
+ states.add(sink);
62
+ const transitions = new Map();
63
+ for (const s of states) {
64
+ const old = M.transitions.get(s);
65
+ const row = new Map();
66
+ for (const a of M.alphabet) {
67
+ const dst = old?.get(a);
68
+ row.set(a, dst ?? sink);
69
+ }
70
+ transitions.set(s, row);
71
+ }
72
+ return {
73
+ states,
74
+ alphabet: new Set(M.alphabet),
75
+ transitions,
76
+ initial: M.initial,
77
+ accept: new Set(M.accept),
78
+ };
79
+ }
80
+ /** Complemento de `M`: misma estructura, accept = states \ accept. */
81
+ function dfaComplement(M) {
82
+ const total = dfaTotalize(M);
83
+ const accept = new Set();
84
+ for (const s of total.states)
85
+ if (!total.accept.has(s))
86
+ accept.add(s);
87
+ return {
88
+ states: total.states,
89
+ alphabet: total.alphabet,
90
+ transitions: total.transitions,
91
+ initial: total.initial,
92
+ accept,
93
+ };
94
+ }
95
+ /** Producto cartesiano con predicado de aceptación arbitrario sobre
96
+ * (a-state, b-state). Sólo se crean estados alcanzables desde el par
97
+ * inicial. */
98
+ function dfaProduct(a, b, acceptPair) {
99
+ const ta = dfaTotalize(a);
100
+ const tb = dfaTotalize(b);
101
+ const alphabet = new Set([...ta.alphabet, ...tb.alphabet]);
102
+ const states = new Set();
103
+ const transitions = new Map();
104
+ const accept = new Set();
105
+ const encode = (sa, sb) => `(${sa}|${sb})`;
106
+ const initial = encode(ta.initial, tb.initial);
107
+ const queue = [[ta.initial, tb.initial]];
108
+ states.add(initial);
109
+ if (acceptPair(ta.initial, tb.initial))
110
+ accept.add(initial);
111
+ while (queue.length > 0) {
112
+ const pair = queue.shift();
113
+ if (!pair)
114
+ break;
115
+ const [sa, sb] = pair;
116
+ const key = encode(sa, sb);
117
+ const row = new Map();
118
+ transitions.set(key, row);
119
+ for (const sym of alphabet) {
120
+ const da = ta.transitions.get(sa)?.get(sym);
121
+ const db = tb.transitions.get(sb)?.get(sym);
122
+ if (da === undefined || db === undefined)
123
+ continue;
124
+ const nextKey = encode(da, db);
125
+ row.set(sym, nextKey);
126
+ if (!states.has(nextKey)) {
127
+ states.add(nextKey);
128
+ if (acceptPair(da, db))
129
+ accept.add(nextKey);
130
+ queue.push([da, db]);
131
+ }
132
+ }
133
+ }
134
+ return { states, alphabet, transitions, initial, accept };
135
+ }
136
+ function dfaUnion(a, b) {
137
+ return dfaProduct(a, b, (sa, sb) => a.accept.has(sa) || b.accept.has(sb));
138
+ }
139
+ function dfaIntersection(a, b) {
140
+ return dfaProduct(a, b, (sa, sb) => a.accept.has(sa) && b.accept.has(sb));
141
+ }
142
+ // ── Minimización ─────────────────────────────────────────────
143
+ //
144
+ // Partition refinement à la Hopcroft (versión clásica simplificada):
145
+ //
146
+ // 1. Totalizar M.
147
+ // 2. Eliminar estados inalcanzables desde el inicial.
148
+ // 3. Partición inicial P = {Final, NonFinal}.
149
+ // 4. Refinar: para cada (clase C, símbolo a), particionar cada otra
150
+ // clase Y según el predicado "δ(y,a) ∈ C".
151
+ // 5. Cuando P no cambia, cada clase = estado del DFA mínimo.
152
+ function dfaMinimize(M) {
153
+ const total = dfaTotalize(M);
154
+ // Reachable from initial.
155
+ const reachable = new Set([total.initial]);
156
+ const stack = [total.initial];
157
+ while (stack.length > 0) {
158
+ const s = stack.pop();
159
+ if (s === undefined)
160
+ break;
161
+ const row = total.transitions.get(s);
162
+ if (!row)
163
+ continue;
164
+ for (const dst of row.values()) {
165
+ if (!reachable.has(dst)) {
166
+ reachable.add(dst);
167
+ stack.push(dst);
168
+ }
169
+ }
170
+ }
171
+ const finals = new Set();
172
+ const nonFinals = new Set();
173
+ for (const s of reachable) {
174
+ if (total.accept.has(s))
175
+ finals.add(s);
176
+ else
177
+ nonFinals.add(s);
178
+ }
179
+ // Lista de bloques (clases). Cada estado tiene un blockId.
180
+ const blocks = [];
181
+ const blockOf = new Map();
182
+ const pushBlock = (block) => {
183
+ if (block.size === 0)
184
+ return -1;
185
+ const id = blocks.length;
186
+ blocks.push(block);
187
+ for (const s of block)
188
+ blockOf.set(s, id);
189
+ return id;
190
+ };
191
+ pushBlock(finals);
192
+ pushBlock(nonFinals);
193
+ let changed = true;
194
+ while (changed) {
195
+ changed = false;
196
+ for (let i = 0; i < blocks.length; i++) {
197
+ const B = blocks[i];
198
+ if (!B || B.size < 2)
199
+ continue;
200
+ // Particionar B agrupando por la firma (δ(s, a) → blockId) para todos los símbolos.
201
+ const signatureMap = new Map();
202
+ for (const s of B) {
203
+ const sig = [];
204
+ const row = total.transitions.get(s);
205
+ for (const a of total.alphabet) {
206
+ const dst = row?.get(a);
207
+ const bId = dst !== undefined ? (blockOf.get(dst) ?? -1) : -1;
208
+ sig.push(`${a}->${bId}`);
209
+ }
210
+ const key = sig.join('|');
211
+ let bucket = signatureMap.get(key);
212
+ if (!bucket) {
213
+ bucket = new Set();
214
+ signatureMap.set(key, bucket);
215
+ }
216
+ bucket.add(s);
217
+ }
218
+ if (signatureMap.size > 1) {
219
+ // Reemplazar B por el primer subbloque y agregar el resto.
220
+ const iter = signatureMap.values();
221
+ const first = iter.next().value;
222
+ blocks[i] = first;
223
+ for (const s of first)
224
+ blockOf.set(s, i);
225
+ let next = iter.next();
226
+ while (!next.done) {
227
+ pushBlock(next.value);
228
+ next = iter.next();
229
+ }
230
+ changed = true;
231
+ }
232
+ }
233
+ }
234
+ // Construir DFA minimizado.
235
+ const newStates = new Set();
236
+ const newTransitions = new Map();
237
+ const newAccept = new Set();
238
+ const blockName = (id) => `q${id}`;
239
+ for (let i = 0; i < blocks.length; i++) {
240
+ const b = blocks[i];
241
+ if (!b || b.size === 0)
242
+ continue;
243
+ const name = blockName(i);
244
+ newStates.add(name);
245
+ // Representante para acceptación / aristas: cualquier elemento.
246
+ const rep = b.values().next().value;
247
+ if (total.accept.has(rep))
248
+ newAccept.add(name);
249
+ const row = new Map();
250
+ const oldRow = total.transitions.get(rep);
251
+ for (const a of total.alphabet) {
252
+ const dst = oldRow?.get(a);
253
+ if (dst !== undefined) {
254
+ const bId = blockOf.get(dst);
255
+ if (bId !== undefined)
256
+ row.set(a, blockName(bId));
257
+ }
258
+ }
259
+ newTransitions.set(name, row);
260
+ }
261
+ const initialBlock = blockOf.get(total.initial);
262
+ if (initialBlock === undefined) {
263
+ throw new Error('dfaMinimize: estado inicial sin bloque (estado bug)');
264
+ }
265
+ // Eliminar el sink state si no es necesario para reconocer L(M):
266
+ // sólo lo quitamos si su bloque no contiene aristas entrantes desde
267
+ // estados accept. (En la práctica lo dejamos: complement lo necesita).
268
+ return {
269
+ states: newStates,
270
+ alphabet: new Set(total.alphabet),
271
+ transitions: newTransitions,
272
+ initial: blockName(initialBlock),
273
+ accept: newAccept,
274
+ };
275
+ }
276
+ //# sourceMappingURL=dfa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dfa.js","sourceRoot":"","sources":["../../../src/reasoning/automata/dfa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { EPSILON } from './types';
2
+ export type { DFA, NFA, PDA, PDATransition, Regex, Symbol } from './types';
3
+ export { dfaAccepts, dfaMinimize, dfaComplement, dfaProduct, dfaUnion, dfaIntersection, dfaTotalize, } from './dfa';
4
+ export { nfaAccepts, nfaToDfa, epsilonClosure } from './nfa';
5
+ export { parseRegex, regexToNfa, regexMatches } from './regex';
6
+ export { pdaAccepts, pdaPalindromes, pdaBalancedParens } from './pda';
7
+ export { dfaEvenZeros, dfaContainsAB, regexEmail } from './languages';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/index.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE3E,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,QAAQ,EACR,eAAe,EACf,WAAW,GACZ,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — Barrel
4
+ // ============================================================
5
+ //
6
+ // Teoría clásica de autómatas:
7
+ //
8
+ // DFA (Deterministic Finite Automaton)
9
+ // · dfaAccepts simulación
10
+ // · dfaMinimize Hopcroft partition refinement
11
+ // · dfaUnion/dfaIntersection/dfaComplement
12
+ //
13
+ // NFA (con ε-transiciones)
14
+ // · nfaAccepts BFS sobre el frontier
15
+ // · nfaToDfa subset construction
16
+ // · epsilonClosure
17
+ //
18
+ // Regex
19
+ // · parseRegex gramática '|', concat, *, +, ?, (), \\esc
20
+ // · regexToNfa Thompson construction
21
+ // · regexMatches match exacto
22
+ //
23
+ // PDA (push-down)
24
+ // · pdaAccepts BFS no determinista con memo
25
+ // · pdaPalindromes palíndromes sobre {a,b}
26
+ // · pdaBalancedParens paréntesis balanceados
27
+ //
28
+ // Lenguajes estándar:
29
+ // · dfaEvenZeros {0,1}* con # de '0' par
30
+ // · dfaContainsAB {a,b,c}* que contienen "ab"
31
+ // · regexEmail regex simplificada de email
32
+ //
33
+ // Constantes:
34
+ // · EPSILON = 'ε'
35
+ // ============================================================
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.regexEmail = exports.dfaContainsAB = exports.dfaEvenZeros = exports.pdaBalancedParens = exports.pdaPalindromes = exports.pdaAccepts = exports.regexMatches = exports.regexToNfa = exports.parseRegex = exports.epsilonClosure = exports.nfaToDfa = exports.nfaAccepts = exports.dfaTotalize = exports.dfaIntersection = exports.dfaUnion = exports.dfaProduct = exports.dfaComplement = exports.dfaMinimize = exports.dfaAccepts = exports.EPSILON = void 0;
38
+ var types_1 = require("./types");
39
+ Object.defineProperty(exports, "EPSILON", { enumerable: true, get: function () { return types_1.EPSILON; } });
40
+ var dfa_1 = require("./dfa");
41
+ Object.defineProperty(exports, "dfaAccepts", { enumerable: true, get: function () { return dfa_1.dfaAccepts; } });
42
+ Object.defineProperty(exports, "dfaMinimize", { enumerable: true, get: function () { return dfa_1.dfaMinimize; } });
43
+ Object.defineProperty(exports, "dfaComplement", { enumerable: true, get: function () { return dfa_1.dfaComplement; } });
44
+ Object.defineProperty(exports, "dfaProduct", { enumerable: true, get: function () { return dfa_1.dfaProduct; } });
45
+ Object.defineProperty(exports, "dfaUnion", { enumerable: true, get: function () { return dfa_1.dfaUnion; } });
46
+ Object.defineProperty(exports, "dfaIntersection", { enumerable: true, get: function () { return dfa_1.dfaIntersection; } });
47
+ Object.defineProperty(exports, "dfaTotalize", { enumerable: true, get: function () { return dfa_1.dfaTotalize; } });
48
+ var nfa_1 = require("./nfa");
49
+ Object.defineProperty(exports, "nfaAccepts", { enumerable: true, get: function () { return nfa_1.nfaAccepts; } });
50
+ Object.defineProperty(exports, "nfaToDfa", { enumerable: true, get: function () { return nfa_1.nfaToDfa; } });
51
+ Object.defineProperty(exports, "epsilonClosure", { enumerable: true, get: function () { return nfa_1.epsilonClosure; } });
52
+ var regex_1 = require("./regex");
53
+ Object.defineProperty(exports, "parseRegex", { enumerable: true, get: function () { return regex_1.parseRegex; } });
54
+ Object.defineProperty(exports, "regexToNfa", { enumerable: true, get: function () { return regex_1.regexToNfa; } });
55
+ Object.defineProperty(exports, "regexMatches", { enumerable: true, get: function () { return regex_1.regexMatches; } });
56
+ var pda_1 = require("./pda");
57
+ Object.defineProperty(exports, "pdaAccepts", { enumerable: true, get: function () { return pda_1.pdaAccepts; } });
58
+ Object.defineProperty(exports, "pdaPalindromes", { enumerable: true, get: function () { return pda_1.pdaPalindromes; } });
59
+ Object.defineProperty(exports, "pdaBalancedParens", { enumerable: true, get: function () { return pda_1.pdaBalancedParens; } });
60
+ var languages_1 = require("./languages");
61
+ Object.defineProperty(exports, "dfaEvenZeros", { enumerable: true, get: function () { return languages_1.dfaEvenZeros; } });
62
+ Object.defineProperty(exports, "dfaContainsAB", { enumerable: true, get: function () { return languages_1.dfaContainsAB; } });
63
+ Object.defineProperty(exports, "regexEmail", { enumerable: true, get: function () { return languages_1.regexEmail; } });
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/automata/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,uBAAuB;AACvB,+DAA+D;AAC/D,EAAE;AACF,+BAA+B;AAC/B,EAAE;AACF,yCAAyC;AACzC,uCAAuC;AACvC,0DAA0D;AAC1D,+CAA+C;AAC/C,EAAE;AACF,6BAA6B;AAC7B,kDAAkD;AAClD,gDAAgD;AAChD,uBAAuB;AACvB,EAAE;AACF,UAAU;AACV,sEAAsE;AACtE,kDAAkD;AAClD,yCAAyC;AACzC,EAAE;AACF,oBAAoB;AACpB,yDAAyD;AACzD,oDAAoD;AACpD,mDAAmD;AACnD,EAAE;AACF,wBAAwB;AACxB,oDAAoD;AACpD,wDAAwD;AACxD,wDAAwD;AACxD,EAAE;AACF,cAAc;AACd,oBAAoB;AACpB,+DAA+D;;;AAE/D,iCAAkC;AAAzB,gGAAA,OAAO,OAAA;AAGhB,6BAQe;AAPb,iGAAA,UAAU,OAAA;AACV,kGAAA,WAAW,OAAA;AACX,oGAAA,aAAa,OAAA;AACb,iGAAA,UAAU,OAAA;AACV,+FAAA,QAAQ,OAAA;AACR,sGAAA,eAAe,OAAA;AACf,kGAAA,WAAW,OAAA;AAGb,6BAA6D;AAApD,iGAAA,UAAU,OAAA;AAAE,+FAAA,QAAQ,OAAA;AAAE,qGAAA,cAAc,OAAA;AAE7C,iCAA+D;AAAtD,mGAAA,UAAU,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,qGAAA,YAAY,OAAA;AAE7C,6BAAsE;AAA7D,iGAAA,UAAU,OAAA;AAAE,qGAAA,cAAc,OAAA;AAAE,wGAAA,iBAAiB,OAAA;AAEtD,yCAAsE;AAA7D,yGAAA,YAAY,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA"}
@@ -0,0 +1,10 @@
1
+ import type { DFA, Regex } from './types';
2
+ /** Palabras sobre {0,1} con un número par de ceros. */
3
+ export declare function dfaEvenZeros(): DFA;
4
+ /** Palabras sobre {a,b,c} que contienen "ab" como subcadena. */
5
+ export declare function dfaContainsAB(): DFA;
6
+ /** Regex simplificada de email: letras+ '@' letras+ '.' letras+
7
+ * (ASCII inferior, sin números / símbolos). Es deliberadamente
8
+ * pedagógica; no aspira a RFC 5322. */
9
+ export declare function regexEmail(): Regex;
10
+ //# sourceMappingURL=languages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/languages.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAU,MAAM,SAAS,CAAC;AAGlD,uDAAuD;AACvD,wBAAgB,YAAY,IAAI,GAAG,CAyBlC;AAED,gEAAgE;AAChE,wBAAgB,aAAa,IAAI,GAAG,CAmCnC;AAED;;wCAEwC;AACxC,wBAAgB,UAAU,IAAI,KAAK,CASlC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — Lenguajes estándar de fábrica
4
+ // ============================================================
5
+ //
6
+ // DFAs / regex de ejemplo, útiles para tests y demos:
7
+ // · dfaEvenZeros() — palabras sobre {0,1} con número par de '0'.
8
+ // · dfaContainsAB() — palabras sobre {a,b,c} que contienen "ab".
9
+ // · regexEmail() — regex simplificada de email.
10
+ // ============================================================
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.dfaEvenZeros = dfaEvenZeros;
13
+ exports.dfaContainsAB = dfaContainsAB;
14
+ exports.regexEmail = regexEmail;
15
+ const regex_1 = require("./regex");
16
+ /** Palabras sobre {0,1} con un número par de ceros. */
17
+ function dfaEvenZeros() {
18
+ const states = new Set(['even', 'odd']);
19
+ const alphabet = new Set(['0', '1']);
20
+ const transitions = new Map();
21
+ transitions.set('even', new Map([
22
+ ['0', 'odd'],
23
+ ['1', 'even'],
24
+ ]));
25
+ transitions.set('odd', new Map([
26
+ ['0', 'even'],
27
+ ['1', 'odd'],
28
+ ]));
29
+ return {
30
+ states,
31
+ alphabet,
32
+ transitions,
33
+ initial: 'even',
34
+ accept: new Set(['even']),
35
+ };
36
+ }
37
+ /** Palabras sobre {a,b,c} que contienen "ab" como subcadena. */
38
+ function dfaContainsAB() {
39
+ const states = new Set(['q0', 'q1', 'q2']);
40
+ const alphabet = new Set(['a', 'b', 'c']);
41
+ const transitions = new Map();
42
+ transitions.set('q0', new Map([
43
+ ['a', 'q1'],
44
+ ['b', 'q0'],
45
+ ['c', 'q0'],
46
+ ]));
47
+ transitions.set('q1', new Map([
48
+ ['a', 'q1'],
49
+ ['b', 'q2'],
50
+ ['c', 'q0'],
51
+ ]));
52
+ transitions.set('q2', new Map([
53
+ ['a', 'q2'],
54
+ ['b', 'q2'],
55
+ ['c', 'q2'],
56
+ ]));
57
+ return {
58
+ states,
59
+ alphabet,
60
+ transitions,
61
+ initial: 'q0',
62
+ accept: new Set(['q2']),
63
+ };
64
+ }
65
+ /** Regex simplificada de email: letras+ '@' letras+ '.' letras+
66
+ * (ASCII inferior, sin números / símbolos). Es deliberadamente
67
+ * pedagógica; no aspira a RFC 5322. */
68
+ function regexEmail() {
69
+ // (a|b|...|z)+ @ (a|...|z)+ . (a|...|z)+
70
+ const letters = [];
71
+ for (let c = 'a'.charCodeAt(0); c <= 'z'.charCodeAt(0); c++) {
72
+ letters.push(String.fromCharCode(c));
73
+ }
74
+ const alt = letters.join('|');
75
+ const src = `(${alt})+@(${alt})+\\.(${alt})+`;
76
+ return (0, regex_1.parseRegex)(src);
77
+ }
78
+ //# sourceMappingURL=languages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../src/reasoning/automata/languages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { DFA, NFA } from './types';
2
+ /** Cierre-ε: el menor conjunto T ⊇ S cerrado bajo transiciones ε. */
3
+ export declare function epsilonClosure(M: NFA, states: ReadonlySet<string>): Set<string>;
4
+ export declare function nfaAccepts(M: NFA, input: string): boolean;
5
+ /** Subset construction: cada estado del DFA = subconjunto cerrado por ε
6
+ * de estados del NFA. Sólo se generan estados alcanzables. */
7
+ export declare function nfaToDfa(M: NFA): DFA;
8
+ //# sourceMappingURL=nfa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfa.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/nfa.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAU,MAAM,SAAS,CAAC;AAKhD,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAmB/E;AAgBD,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED;+DAC+D;AAC/D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAkDpC"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Automata — NFA + subset construction
4
+ // ============================================================
5
+ //
6
+ // · epsilonClosure(M, S) — cierre-ε de un set de estados.
7
+ // · nfaAccepts(M, w) — simulación BFS sobre el frontier.
8
+ // · nfaToDfa(M) — subset construction.
9
+ // ============================================================
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.epsilonClosure = epsilonClosure;
12
+ exports.nfaAccepts = nfaAccepts;
13
+ exports.nfaToDfa = nfaToDfa;
14
+ const types_1 = require("./types");
15
+ const epsOf = (M) => M.epsilon ?? types_1.EPSILON;
16
+ /** Cierre-ε: el menor conjunto T ⊇ S cerrado bajo transiciones ε. */
17
+ function epsilonClosure(M, states) {
18
+ const eps = epsOf(M);
19
+ const closure = new Set(states);
20
+ const stack = [...states];
21
+ while (stack.length > 0) {
22
+ const s = stack.pop();
23
+ if (s === undefined)
24
+ break;
25
+ const row = M.transitions.get(s);
26
+ if (!row)
27
+ continue;
28
+ const nextSet = row.get(eps);
29
+ if (!nextSet)
30
+ continue;
31
+ for (const n of nextSet) {
32
+ if (!closure.has(n)) {
33
+ closure.add(n);
34
+ stack.push(n);
35
+ }
36
+ }
37
+ }
38
+ return closure;
39
+ }
40
+ /** Step de la simulación: a partir de un set de estados, consumir un
41
+ * símbolo y luego cerrar bajo ε. */
42
+ function nfaStep(M, states, sym) {
43
+ const out = new Set();
44
+ for (const s of states) {
45
+ const row = M.transitions.get(s);
46
+ if (!row)
47
+ continue;
48
+ const nextSet = row.get(sym);
49
+ if (!nextSet)
50
+ continue;
51
+ for (const n of nextSet)
52
+ out.add(n);
53
+ }
54
+ return epsilonClosure(M, out);
55
+ }
56
+ function nfaAccepts(M, input) {
57
+ let current = epsilonClosure(M, new Set([M.initial]));
58
+ for (const ch of input) {
59
+ current = nfaStep(M, current, ch);
60
+ if (current.size === 0)
61
+ return false;
62
+ }
63
+ for (const s of current)
64
+ if (M.accept.has(s))
65
+ return true;
66
+ return false;
67
+ }
68
+ /** Subset construction: cada estado del DFA = subconjunto cerrado por ε
69
+ * de estados del NFA. Sólo se generan estados alcanzables. */
70
+ function nfaToDfa(M) {
71
+ const eps = epsOf(M);
72
+ const encode = (set) => {
73
+ return '{' + [...set].sort().join(',') + '}';
74
+ };
75
+ // Alfabeto del DFA = alfabeto del NFA sin ε.
76
+ const alphabet = new Set();
77
+ for (const a of M.alphabet)
78
+ if (a !== eps)
79
+ alphabet.add(a);
80
+ const startSet = epsilonClosure(M, new Set([M.initial]));
81
+ const startKey = encode(startSet);
82
+ const states = new Set([startKey]);
83
+ const transitions = new Map();
84
+ const accept = new Set();
85
+ const subsetOf = new Map();
86
+ subsetOf.set(startKey, startSet);
87
+ if ([...startSet].some((s) => M.accept.has(s)))
88
+ accept.add(startKey);
89
+ const queue = [startKey];
90
+ while (queue.length > 0) {
91
+ const key = queue.shift();
92
+ if (key === undefined)
93
+ break;
94
+ const subset = subsetOf.get(key);
95
+ if (!subset)
96
+ continue;
97
+ const row = new Map();
98
+ transitions.set(key, row);
99
+ for (const a of alphabet) {
100
+ const next = nfaStep(M, subset, a);
101
+ if (next.size === 0)
102
+ continue;
103
+ const nextKey = encode(next);
104
+ row.set(a, nextKey);
105
+ if (!states.has(nextKey)) {
106
+ states.add(nextKey);
107
+ subsetOf.set(nextKey, next);
108
+ if ([...next].some((s) => M.accept.has(s)))
109
+ accept.add(nextKey);
110
+ queue.push(nextKey);
111
+ }
112
+ }
113
+ }
114
+ return {
115
+ states,
116
+ alphabet,
117
+ transitions,
118
+ initial: startKey,
119
+ accept,
120
+ };
121
+ }
122
+ //# sourceMappingURL=nfa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfa.js","sourceRoot":"","sources":["../../../src/reasoning/automata/nfa.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,0CAA0C;AAC1C,+DAA+D;AAC/D,EAAE;AACF,8DAA8D;AAC9D,iEAAiE;AACjE,oDAAoD;AACpD,+DAA+D;;AAQ/D,wCAmBC;AAgBD,gCAQC;AAID,4BAkDC;AAtGD,mCAAkC;AAElC,MAAM,KAAK,GAAG,CAAC,CAAM,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,eAAO,CAAC;AAEvD,qEAAqE;AACrE,SAAgB,cAAc,CAAC,CAAM,EAAE,MAA2B;IAChE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAa,CAAC,GAAG,MAAM,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;qCACqC;AACrC,SAAS,OAAO,CAAC,CAAM,EAAE,MAA2B,EAAE,GAAW;IAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,UAAU,CAAC,CAAM,EAAE,KAAa;IAC9C,IAAI,OAAO,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;+DAC+D;AAC/D,SAAgB,QAAQ,CAAC,CAAM;IAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAErB,MAAM,MAAM,GAAG,CAAC,GAAwB,EAAU,EAAE;QAClD,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC/C,CAAC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;QAAE,IAAI,CAAC,KAAK,GAAG;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErE,MAAM,KAAK,GAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;gBAAE,SAAS;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpB,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ;QACR,WAAW;QACX,OAAO,EAAE,QAAQ;QACjB,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { PDA, Symbol } from './types';
2
+ /** ¿`M` acepta `input`?
3
+ * `maxSteps` cota el número de configuraciones expandidas. */
4
+ export declare function pdaAccepts(M: PDA, input: string, maxSteps?: number): boolean;
5
+ /** PDA que acepta palíndromes pares e impares sobre {a, b} usando un
6
+ * marcador no determinista (transición ε al "espejo"). */
7
+ export declare function pdaPalindromes(alphabet?: ReadonlyArray<Symbol>): PDA;
8
+ /** PDA que acepta paréntesis balanceados (alfabeto '(' ')'). */
9
+ export declare function pdaBalancedParens(): PDA;
10
+ //# sourceMappingURL=pda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/pda.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAiB,MAAM,EAAE,MAAM,SAAS,CAAC;AAW1D;+DAC+D;AAC/D,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAU,GAAG,OAAO,CAmD7E;AAID;2DAC2D;AAC3D,wBAAgB,cAAc,CAAC,QAAQ,GAAE,aAAa,CAAC,MAAM,CAAc,GAAG,GAAG,CAmEhF;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,IAAI,GAAG,CAsBvC"}