@stevenvo780/st-lang 4.9.0 → 4.10.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 (121) 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/reasoning/automata/dfa.d.ts +17 -0
  18. package/dist/reasoning/automata/dfa.d.ts.map +1 -0
  19. package/dist/reasoning/automata/dfa.js +276 -0
  20. package/dist/reasoning/automata/dfa.js.map +1 -0
  21. package/dist/reasoning/automata/index.d.ts +8 -0
  22. package/dist/reasoning/automata/index.d.ts.map +1 -0
  23. package/dist/reasoning/automata/index.js +64 -0
  24. package/dist/reasoning/automata/index.js.map +1 -0
  25. package/dist/reasoning/automata/languages.d.ts +10 -0
  26. package/dist/reasoning/automata/languages.d.ts.map +1 -0
  27. package/dist/reasoning/automata/languages.js +78 -0
  28. package/dist/reasoning/automata/languages.js.map +1 -0
  29. package/dist/reasoning/automata/nfa.d.ts +8 -0
  30. package/dist/reasoning/automata/nfa.d.ts.map +1 -0
  31. package/dist/reasoning/automata/nfa.js +122 -0
  32. package/dist/reasoning/automata/nfa.js.map +1 -0
  33. package/dist/reasoning/automata/pda.d.ts +10 -0
  34. package/dist/reasoning/automata/pda.d.ts.map +1 -0
  35. package/dist/reasoning/automata/pda.js +169 -0
  36. package/dist/reasoning/automata/pda.js.map +1 -0
  37. package/dist/reasoning/automata/regex.d.ts +6 -0
  38. package/dist/reasoning/automata/regex.d.ts.map +1 -0
  39. package/dist/reasoning/automata/regex.js +259 -0
  40. package/dist/reasoning/automata/regex.js.map +1 -0
  41. package/dist/reasoning/automata/types.d.ts +69 -0
  42. package/dist/reasoning/automata/types.d.ts.map +1 -0
  43. package/dist/reasoning/automata/types.js +29 -0
  44. package/dist/reasoning/automata/types.js.map +1 -0
  45. package/dist/reasoning/computability/index.d.ts +239 -0
  46. package/dist/reasoning/computability/index.d.ts.map +1 -0
  47. package/dist/reasoning/computability/index.js +851 -0
  48. package/dist/reasoning/computability/index.js.map +1 -0
  49. package/dist/reasoning/number-theory/crt.d.ts +9 -0
  50. package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
  51. package/dist/reasoning/number-theory/crt.js +39 -0
  52. package/dist/reasoning/number-theory/crt.js.map +1 -0
  53. package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
  54. package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
  55. package/dist/reasoning/number-theory/diophantine.js +87 -0
  56. package/dist/reasoning/number-theory/diophantine.js.map +1 -0
  57. package/dist/reasoning/number-theory/factorization.d.ts +12 -0
  58. package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
  59. package/dist/reasoning/number-theory/factorization.js +136 -0
  60. package/dist/reasoning/number-theory/factorization.js.map +1 -0
  61. package/dist/reasoning/number-theory/gcd.d.ts +8 -0
  62. package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
  63. package/dist/reasoning/number-theory/gcd.js +51 -0
  64. package/dist/reasoning/number-theory/gcd.js.map +1 -0
  65. package/dist/reasoning/number-theory/index.d.ts +9 -0
  66. package/dist/reasoning/number-theory/index.d.ts.map +1 -0
  67. package/dist/reasoning/number-theory/index.js +46 -0
  68. package/dist/reasoning/number-theory/index.js.map +1 -0
  69. package/dist/reasoning/number-theory/modular.d.ts +6 -0
  70. package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
  71. package/dist/reasoning/number-theory/modular.js +75 -0
  72. package/dist/reasoning/number-theory/modular.js.map +1 -0
  73. package/dist/reasoning/number-theory/primality.d.ts +6 -0
  74. package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
  75. package/dist/reasoning/number-theory/primality.js +144 -0
  76. package/dist/reasoning/number-theory/primality.js.map +1 -0
  77. package/dist/reasoning/number-theory/symbols.d.ts +3 -0
  78. package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
  79. package/dist/reasoning/number-theory/symbols.js +57 -0
  80. package/dist/reasoning/number-theory/symbols.js.map +1 -0
  81. package/dist/reasoning/real-analysis/index.d.ts +127 -0
  82. package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
  83. package/dist/reasoning/real-analysis/index.js +638 -0
  84. package/dist/reasoning/real-analysis/index.js.map +1 -0
  85. package/dist/reasoning/topology/index.d.ts +41 -0
  86. package/dist/reasoning/topology/index.d.ts.map +1 -0
  87. package/dist/reasoning/topology/index.js +739 -0
  88. package/dist/reasoning/topology/index.js.map +1 -0
  89. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
  90. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
  91. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
  92. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
  93. package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
  94. package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
  95. package/dist/tests/reasoning/automata/automata.test.js +310 -0
  96. package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
  97. package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
  98. package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
  99. package/dist/tests/reasoning/computability/computability.test.js +246 -0
  100. package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
  101. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
  102. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
  103. package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
  104. package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
  105. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
  106. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
  107. package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
  108. package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
  109. package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
  110. package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
  111. package/dist/tests/reasoning/topology/topology.test.js +327 -0
  112. package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
  113. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
  114. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
  115. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
  116. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
  117. package/dist/tooling/exporters/lean4/index.d.ts +47 -0
  118. package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
  119. package/dist/tooling/exporters/lean4/index.js +423 -0
  120. package/dist/tooling/exporters/lean4/index.js.map +1 -0
  121. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Natural Deduction NK (Gentzen classical) — Tipos
4
+ // ============================================================
5
+ //
6
+ // Sistema NK de Gentzen para lógica proposicional clásica.
7
+ // Extiende NJ (intuicionista) con reglas que justifican el
8
+ // tercero excluido / doble negación clásica.
9
+ //
10
+ // Reglas intuicionistas heredadas (idéntico a NJ):
11
+ // - Conjunción: ∧I, ∧EL, ∧ER
12
+ // - Disyunción: ∨IL, ∨IR, ∨E (con descarga)
13
+ // - Implicación: →I (descarga), →E (modus ponens)
14
+ // - Negación: ¬I (descarga, deriva ⊥), ¬E (deriva ⊥)
15
+ // - Falsedad: ⊥E (ex falso quodlibet)
16
+ // - Asunción: hipótesis del contexto
17
+ //
18
+ // Reglas clásicas añadidas:
19
+ // - doubleNegE: ¬¬φ ⊢ φ (eliminación doble negación)
20
+ // - LEM: ⊢ φ ∨ ¬φ (tercero excluido como axioma)
21
+ // - pierce: ⊢ ((φ→ψ)→φ)→φ (ley de Peirce como axioma)
22
+ // - rAA: asume ¬φ, deriva ⊥, concluye φ (reductio ad absurdum)
23
+ //
24
+ // La regla rAA es la dual clásica de ¬I: en NJ, asumiendo φ y
25
+ // derivando ⊥ se concluye ¬φ; en NK, asumiendo ¬φ y derivando
26
+ // ⊥ se concluye φ. Con sólo rAA añadida a NJ se obtiene
27
+ // completitud para la lógica clásica proposicional.
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.CLASSICAL_ONLY_RULES = void 0;
30
+ /**
31
+ * Conjunto de reglas que sólo existen en NK (no en NJ).
32
+ * Útil para detectar si una prueba NK es trasladable a NJ.
33
+ */
34
+ exports.CLASSICAL_ONLY_RULES = ['doubleNegE', 'LEM', 'pierce', 'rAA'];
35
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/logic/profiles/natural-deduction-nk/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,mDAAmD;AACnD,+DAA+D;AAC/D,EAAE;AACF,2DAA2D;AAC3D,2DAA2D;AAC3D,6CAA6C;AAC7C,EAAE;AACF,mDAAmD;AACnD,iCAAiC;AACjC,gDAAgD;AAChD,qDAAqD;AACrD,2DAA2D;AAC3D,4CAA4C;AAC5C,2CAA2C;AAC3C,EAAE;AACF,4BAA4B;AAC5B,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,EAAE;AACF,8DAA8D;AAC9D,8DAA8D;AAC9D,wDAAwD;AACxD,oDAAoD;;;AAiDpD;;;GAGG;AACU,QAAA,oBAAoB,GAA0B,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { DFA } from './types';
2
+ /** ¿`M` acepta `input`? Si en algún punto no hay transición definida,
3
+ * rechaza inmediatamente (DFA visto como función parcial). */
4
+ export declare function dfaAccepts(M: DFA, input: string): boolean;
5
+ /** Totaliza un DFA agregando un sink-state para las aristas faltantes.
6
+ * Devuelve un DFA equivalente con `transitions` totales sobre alfabeto. */
7
+ export declare function dfaTotalize(M: DFA, sinkName?: string): DFA;
8
+ /** Complemento de `M`: misma estructura, accept = states \ accept. */
9
+ export declare function dfaComplement(M: DFA): DFA;
10
+ /** Producto cartesiano con predicado de aceptación arbitrario sobre
11
+ * (a-state, b-state). Sólo se crean estados alcanzables desde el par
12
+ * inicial. */
13
+ export declare function dfaProduct(a: DFA, b: DFA, acceptPair: (sa: string, sb: string) => boolean): DFA;
14
+ export declare function dfaUnion(a: DFA, b: DFA): DFA;
15
+ export declare function dfaIntersection(a: DFA, b: DFA): DFA;
16
+ export declare function dfaMinimize(M: DFA): DFA;
17
+ //# sourceMappingURL=dfa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dfa.d.ts","sourceRoot":"","sources":["../../../src/reasoning/automata/dfa.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAU,MAAM,SAAS,CAAC;AAE3C;+DAC+D;AAC/D,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAUzD;AAED;4EAC4E;AAC5E,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,SAAa,GAAG,GAAG,CAsC9D;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAWzC;AAED;;eAEe;AACf,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,GAAG,CAuC/F;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,CAE5C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,CAEnD;AAaD,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAuHvC"}
@@ -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"}