@stevenvo780/st-lang 4.8.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 (265) 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/logic/profiles/quantum/index.d.ts +153 -0
  18. package/dist/logic/profiles/quantum/index.d.ts.map +1 -0
  19. package/dist/logic/profiles/quantum/index.js +788 -0
  20. package/dist/logic/profiles/quantum/index.js.map +1 -0
  21. package/dist/namespaces/reasoning.d.ts +2 -1
  22. package/dist/namespaces/reasoning.d.ts.map +1 -1
  23. package/dist/namespaces/reasoning.js +3 -1
  24. package/dist/namespaces/reasoning.js.map +1 -1
  25. package/dist/proof-systems/certificate/canonical.d.ts +18 -0
  26. package/dist/proof-systems/certificate/canonical.d.ts.map +1 -0
  27. package/dist/proof-systems/certificate/canonical.js +79 -0
  28. package/dist/proof-systems/certificate/canonical.js.map +1 -0
  29. package/dist/proof-systems/certificate/generate.d.ts +39 -0
  30. package/dist/proof-systems/certificate/generate.d.ts.map +1 -0
  31. package/dist/proof-systems/certificate/generate.js +259 -0
  32. package/dist/proof-systems/certificate/generate.js.map +1 -0
  33. package/dist/proof-systems/certificate/index.d.ts +7 -0
  34. package/dist/proof-systems/certificate/index.d.ts.map +1 -0
  35. package/dist/proof-systems/certificate/index.js +23 -0
  36. package/dist/proof-systems/certificate/index.js.map +1 -0
  37. package/dist/proof-systems/certificate/lfsc.d.ts +15 -0
  38. package/dist/proof-systems/certificate/lfsc.d.ts.map +1 -0
  39. package/dist/proof-systems/certificate/lfsc.js +395 -0
  40. package/dist/proof-systems/certificate/lfsc.js.map +1 -0
  41. package/dist/proof-systems/certificate/rules.d.ts +8 -0
  42. package/dist/proof-systems/certificate/rules.d.ts.map +1 -0
  43. package/dist/proof-systems/certificate/rules.js +369 -0
  44. package/dist/proof-systems/certificate/rules.js.map +1 -0
  45. package/dist/proof-systems/certificate/types.d.ts +114 -0
  46. package/dist/proof-systems/certificate/types.d.ts.map +1 -0
  47. package/dist/proof-systems/certificate/types.js +18 -0
  48. package/dist/proof-systems/certificate/types.js.map +1 -0
  49. package/dist/proof-systems/certificate/verify.d.ts +20 -0
  50. package/dist/proof-systems/certificate/verify.d.ts.map +1 -0
  51. package/dist/proof-systems/certificate/verify.js +171 -0
  52. package/dist/proof-systems/certificate/verify.js.map +1 -0
  53. package/dist/reasoning/automata/dfa.d.ts +17 -0
  54. package/dist/reasoning/automata/dfa.d.ts.map +1 -0
  55. package/dist/reasoning/automata/dfa.js +276 -0
  56. package/dist/reasoning/automata/dfa.js.map +1 -0
  57. package/dist/reasoning/automata/index.d.ts +8 -0
  58. package/dist/reasoning/automata/index.d.ts.map +1 -0
  59. package/dist/reasoning/automata/index.js +64 -0
  60. package/dist/reasoning/automata/index.js.map +1 -0
  61. package/dist/reasoning/automata/languages.d.ts +10 -0
  62. package/dist/reasoning/automata/languages.d.ts.map +1 -0
  63. package/dist/reasoning/automata/languages.js +78 -0
  64. package/dist/reasoning/automata/languages.js.map +1 -0
  65. package/dist/reasoning/automata/nfa.d.ts +8 -0
  66. package/dist/reasoning/automata/nfa.d.ts.map +1 -0
  67. package/dist/reasoning/automata/nfa.js +122 -0
  68. package/dist/reasoning/automata/nfa.js.map +1 -0
  69. package/dist/reasoning/automata/pda.d.ts +10 -0
  70. package/dist/reasoning/automata/pda.d.ts.map +1 -0
  71. package/dist/reasoning/automata/pda.js +169 -0
  72. package/dist/reasoning/automata/pda.js.map +1 -0
  73. package/dist/reasoning/automata/regex.d.ts +6 -0
  74. package/dist/reasoning/automata/regex.d.ts.map +1 -0
  75. package/dist/reasoning/automata/regex.js +259 -0
  76. package/dist/reasoning/automata/regex.js.map +1 -0
  77. package/dist/reasoning/automata/types.d.ts +69 -0
  78. package/dist/reasoning/automata/types.d.ts.map +1 -0
  79. package/dist/reasoning/automata/types.js +29 -0
  80. package/dist/reasoning/automata/types.js.map +1 -0
  81. package/dist/reasoning/ban-logic/analyze.d.ts +31 -0
  82. package/dist/reasoning/ban-logic/analyze.d.ts.map +1 -0
  83. package/dist/reasoning/ban-logic/analyze.js +113 -0
  84. package/dist/reasoning/ban-logic/analyze.js.map +1 -0
  85. package/dist/reasoning/ban-logic/index.d.ts +7 -0
  86. package/dist/reasoning/ban-logic/index.d.ts.map +1 -0
  87. package/dist/reasoning/ban-logic/index.js +66 -0
  88. package/dist/reasoning/ban-logic/index.js.map +1 -0
  89. package/dist/reasoning/ban-logic/protocols.d.ts +54 -0
  90. package/dist/reasoning/ban-logic/protocols.d.ts.map +1 -0
  91. package/dist/reasoning/ban-logic/protocols.js +219 -0
  92. package/dist/reasoning/ban-logic/protocols.js.map +1 -0
  93. package/dist/reasoning/ban-logic/rules.d.ts +83 -0
  94. package/dist/reasoning/ban-logic/rules.d.ts.map +1 -0
  95. package/dist/reasoning/ban-logic/rules.js +409 -0
  96. package/dist/reasoning/ban-logic/rules.js.map +1 -0
  97. package/dist/reasoning/ban-logic/terms.d.ts +26 -0
  98. package/dist/reasoning/ban-logic/terms.d.ts.map +1 -0
  99. package/dist/reasoning/ban-logic/terms.js +262 -0
  100. package/dist/reasoning/ban-logic/terms.js.map +1 -0
  101. package/dist/reasoning/ban-logic/types.d.ts +107 -0
  102. package/dist/reasoning/ban-logic/types.d.ts.map +1 -0
  103. package/dist/reasoning/ban-logic/types.js +27 -0
  104. package/dist/reasoning/ban-logic/types.js.map +1 -0
  105. package/dist/reasoning/computability/index.d.ts +239 -0
  106. package/dist/reasoning/computability/index.d.ts.map +1 -0
  107. package/dist/reasoning/computability/index.js +851 -0
  108. package/dist/reasoning/computability/index.js.map +1 -0
  109. package/dist/reasoning/differential-privacy/index.d.ts +121 -0
  110. package/dist/reasoning/differential-privacy/index.d.ts.map +1 -0
  111. package/dist/reasoning/differential-privacy/index.js +417 -0
  112. package/dist/reasoning/differential-privacy/index.js.map +1 -0
  113. package/dist/reasoning/number-theory/crt.d.ts +9 -0
  114. package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
  115. package/dist/reasoning/number-theory/crt.js +39 -0
  116. package/dist/reasoning/number-theory/crt.js.map +1 -0
  117. package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
  118. package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
  119. package/dist/reasoning/number-theory/diophantine.js +87 -0
  120. package/dist/reasoning/number-theory/diophantine.js.map +1 -0
  121. package/dist/reasoning/number-theory/factorization.d.ts +12 -0
  122. package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
  123. package/dist/reasoning/number-theory/factorization.js +136 -0
  124. package/dist/reasoning/number-theory/factorization.js.map +1 -0
  125. package/dist/reasoning/number-theory/gcd.d.ts +8 -0
  126. package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
  127. package/dist/reasoning/number-theory/gcd.js +51 -0
  128. package/dist/reasoning/number-theory/gcd.js.map +1 -0
  129. package/dist/reasoning/number-theory/index.d.ts +9 -0
  130. package/dist/reasoning/number-theory/index.d.ts.map +1 -0
  131. package/dist/reasoning/number-theory/index.js +46 -0
  132. package/dist/reasoning/number-theory/index.js.map +1 -0
  133. package/dist/reasoning/number-theory/modular.d.ts +6 -0
  134. package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
  135. package/dist/reasoning/number-theory/modular.js +75 -0
  136. package/dist/reasoning/number-theory/modular.js.map +1 -0
  137. package/dist/reasoning/number-theory/primality.d.ts +6 -0
  138. package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
  139. package/dist/reasoning/number-theory/primality.js +144 -0
  140. package/dist/reasoning/number-theory/primality.js.map +1 -0
  141. package/dist/reasoning/number-theory/symbols.d.ts +3 -0
  142. package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
  143. package/dist/reasoning/number-theory/symbols.js +57 -0
  144. package/dist/reasoning/number-theory/symbols.js.map +1 -0
  145. package/dist/reasoning/real-analysis/index.d.ts +127 -0
  146. package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
  147. package/dist/reasoning/real-analysis/index.js +638 -0
  148. package/dist/reasoning/real-analysis/index.js.map +1 -0
  149. package/dist/reasoning/topology/index.d.ts +41 -0
  150. package/dist/reasoning/topology/index.d.ts.map +1 -0
  151. package/dist/reasoning/topology/index.js +739 -0
  152. package/dist/reasoning/topology/index.js.map +1 -0
  153. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
  154. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
  155. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
  156. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
  157. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts +2 -0
  158. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts.map +1 -0
  159. package/dist/tests/logic/profiles/quantum/quantum.test.js +209 -0
  160. package/dist/tests/logic/profiles/quantum/quantum.test.js.map +1 -0
  161. package/dist/tests/proof-systems/certificate/certificate.test.d.ts +2 -0
  162. package/dist/tests/proof-systems/certificate/certificate.test.d.ts.map +1 -0
  163. package/dist/tests/proof-systems/certificate/certificate.test.js +449 -0
  164. package/dist/tests/proof-systems/certificate/certificate.test.js.map +1 -0
  165. package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
  166. package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
  167. package/dist/tests/reasoning/automata/automata.test.js +310 -0
  168. package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
  169. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts +2 -0
  170. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts.map +1 -0
  171. package/dist/tests/reasoning/ban-logic/ban-logic.test.js +270 -0
  172. package/dist/tests/reasoning/ban-logic/ban-logic.test.js.map +1 -0
  173. package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
  174. package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
  175. package/dist/tests/reasoning/computability/computability.test.js +246 -0
  176. package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
  177. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts +2 -0
  178. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts.map +1 -0
  179. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js +388 -0
  180. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js.map +1 -0
  181. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
  182. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
  183. package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
  184. package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
  185. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
  186. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
  187. package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
  188. package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
  189. package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
  190. package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
  191. package/dist/tests/reasoning/topology/topology.test.js +327 -0
  192. package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
  193. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
  194. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
  195. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
  196. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
  197. package/dist/tests/tooling/mathlib/mathlib.test.d.ts +2 -0
  198. package/dist/tests/tooling/mathlib/mathlib.test.d.ts.map +1 -0
  199. package/dist/tests/tooling/mathlib/mathlib.test.js +214 -0
  200. package/dist/tests/tooling/mathlib/mathlib.test.js.map +1 -0
  201. package/dist/tests/type-theory/effects/effects.test.d.ts +2 -0
  202. package/dist/tests/type-theory/effects/effects.test.d.ts.map +1 -0
  203. package/dist/tests/type-theory/effects/effects.test.js +242 -0
  204. package/dist/tests/type-theory/effects/effects.test.js.map +1 -0
  205. package/dist/tooling/exporters/lean4/index.d.ts +47 -0
  206. package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
  207. package/dist/tooling/exporters/lean4/index.js +423 -0
  208. package/dist/tooling/exporters/lean4/index.js.map +1 -0
  209. package/dist/tooling/mathlib/group.d.ts +27 -0
  210. package/dist/tooling/mathlib/group.d.ts.map +1 -0
  211. package/dist/tooling/mathlib/group.js +89 -0
  212. package/dist/tooling/mathlib/group.js.map +1 -0
  213. package/dist/tooling/mathlib/index.d.ts +8 -0
  214. package/dist/tooling/mathlib/index.d.ts.map +1 -0
  215. package/dist/tooling/mathlib/index.js +40 -0
  216. package/dist/tooling/mathlib/index.js.map +1 -0
  217. package/dist/tooling/mathlib/instances.d.ts +29 -0
  218. package/dist/tooling/mathlib/instances.d.ts.map +1 -0
  219. package/dist/tooling/mathlib/instances.js +139 -0
  220. package/dist/tooling/mathlib/instances.js.map +1 -0
  221. package/dist/tooling/mathlib/lemmas.d.ts +3 -0
  222. package/dist/tooling/mathlib/lemmas.d.ts.map +1 -0
  223. package/dist/tooling/mathlib/lemmas.js +72 -0
  224. package/dist/tooling/mathlib/lemmas.js.map +1 -0
  225. package/dist/tooling/mathlib/order.d.ts +29 -0
  226. package/dist/tooling/mathlib/order.d.ts.map +1 -0
  227. package/dist/tooling/mathlib/order.js +91 -0
  228. package/dist/tooling/mathlib/order.js.map +1 -0
  229. package/dist/tooling/mathlib/ring.d.ts +15 -0
  230. package/dist/tooling/mathlib/ring.d.ts.map +1 -0
  231. package/dist/tooling/mathlib/ring.js +91 -0
  232. package/dist/tooling/mathlib/ring.js.map +1 -0
  233. package/dist/tooling/mathlib/types.d.ts +62 -0
  234. package/dist/tooling/mathlib/types.d.ts.map +1 -0
  235. package/dist/tooling/mathlib/types.js +7 -0
  236. package/dist/tooling/mathlib/types.js.map +1 -0
  237. package/dist/type-theory/effects/core.d.ts +27 -0
  238. package/dist/type-theory/effects/core.d.ts.map +1 -0
  239. package/dist/type-theory/effects/core.js +79 -0
  240. package/dist/type-theory/effects/core.js.map +1 -0
  241. package/dist/type-theory/effects/exception.d.ts +18 -0
  242. package/dist/type-theory/effects/exception.d.ts.map +1 -0
  243. package/dist/type-theory/effects/exception.js +59 -0
  244. package/dist/type-theory/effects/exception.js.map +1 -0
  245. package/dist/type-theory/effects/index.d.ts +11 -0
  246. package/dist/type-theory/effects/index.d.ts.map +1 -0
  247. package/dist/type-theory/effects/index.js +50 -0
  248. package/dist/type-theory/effects/index.js.map +1 -0
  249. package/dist/type-theory/effects/reader.d.ts +20 -0
  250. package/dist/type-theory/effects/reader.d.ts.map +1 -0
  251. package/dist/type-theory/effects/reader.js +62 -0
  252. package/dist/type-theory/effects/reader.js.map +1 -0
  253. package/dist/type-theory/effects/state.d.ts +31 -0
  254. package/dist/type-theory/effects/state.d.ts.map +1 -0
  255. package/dist/type-theory/effects/state.js +91 -0
  256. package/dist/type-theory/effects/state.js.map +1 -0
  257. package/dist/type-theory/effects/types.d.ts +45 -0
  258. package/dist/type-theory/effects/types.d.ts.map +1 -0
  259. package/dist/type-theory/effects/types.js +21 -0
  260. package/dist/type-theory/effects/types.js.map +1 -0
  261. package/dist/type-theory/effects/writer.d.ts +30 -0
  262. package/dist/type-theory/effects/writer.d.ts.map +1 -0
  263. package/dist/type-theory/effects/writer.js +79 -0
  264. package/dist/type-theory/effects/writer.js.map +1 -0
  265. package/package.json +1 -1
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Proof Certificate — Check-only verifier
4
+ // ============================================================
5
+ //
6
+ // El verificador NO hace búsqueda de prueba. Asume que el
7
+ // certificado declara cada paso con su regla y premisas, y se
8
+ // limita a:
9
+ // 1. validar integridad (hash + estructura);
10
+ // 2. validar acíclicidad de `depends`;
11
+ // 3. resolver premisas y delegar al `CertRuleChecker` de la regla;
12
+ // 4. comprobar que el goal aparece como conclusión.
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.canonicalize = void 0;
15
+ exports.verifyCertificate = verifyCertificate;
16
+ const canonical_1 = require("./canonical");
17
+ Object.defineProperty(exports, "canonicalize", { enumerable: true, get: function () { return canonical_1.canonicalize; } });
18
+ const rules_1 = require("./rules");
19
+ function detectCycle(steps) {
20
+ const byId = new Map();
21
+ for (const s of steps)
22
+ byId.set(s.id, s);
23
+ const WHITE = 0;
24
+ const GRAY = 1;
25
+ const BLACK = 2;
26
+ const color = new Map();
27
+ for (const s of steps)
28
+ color.set(s.id, WHITE);
29
+ let cyclePath = null;
30
+ function dfs(id, path) {
31
+ color.set(id, GRAY);
32
+ const step = byId.get(id);
33
+ if (!step)
34
+ return false;
35
+ for (const dep of step.depends) {
36
+ const cdep = color.get(dep);
37
+ if (cdep === undefined)
38
+ continue; // missing deps reportadas aparte
39
+ if (cdep === GRAY) {
40
+ const cycleStart = path.indexOf(dep);
41
+ cyclePath = cycleStart >= 0 ? path.slice(cycleStart).concat(dep) : [...path, id, dep];
42
+ return true;
43
+ }
44
+ if (cdep === WHITE) {
45
+ if (dfs(dep, [...path, id]))
46
+ return true;
47
+ }
48
+ }
49
+ color.set(id, BLACK);
50
+ return false;
51
+ }
52
+ for (const s of steps) {
53
+ if (color.get(s.id) === WHITE) {
54
+ if (dfs(s.id, []))
55
+ return cyclePath;
56
+ }
57
+ }
58
+ return null;
59
+ }
60
+ /**
61
+ * Verifica un certificado en modo check-only.
62
+ *
63
+ * Las reglas custom (parámetro `rules`) se prueban PRIMERO; si no
64
+ * está la regla, se busca en `STANDARD_RULES`. Esto permite a
65
+ * profiles externos extender el conjunto sin tocar el core.
66
+ */
67
+ async function verifyCertificate(cert, rules = rules_1.STANDARD_RULES) {
68
+ const errors = [];
69
+ const totalSteps = cert.steps.length;
70
+ let stepsVerified = 0;
71
+ // 1. Versión.
72
+ if (cert.version !== '1.0') {
73
+ errors.push(`unsupported certificate version: ${String(cert.version)}`);
74
+ }
75
+ // 2. Hash.
76
+ try {
77
+ const expected = await (0, canonical_1.hashCertificate)({
78
+ version: cert.version,
79
+ goal: cert.goal,
80
+ profile: cert.profile,
81
+ axioms: cert.axioms,
82
+ steps: cert.steps,
83
+ });
84
+ if (expected !== cert.hash) {
85
+ errors.push(`hash mismatch: expected ${expected}, got ${cert.hash}`);
86
+ }
87
+ }
88
+ catch (err) {
89
+ errors.push(`hash computation failed: ${err instanceof Error ? err.message : String(err)}`);
90
+ }
91
+ // 3. Ids únicos.
92
+ const seenIds = new Set();
93
+ for (const step of cert.steps) {
94
+ if (seenIds.has(step.id)) {
95
+ errors.push(`duplicate step id: ${step.id}`);
96
+ }
97
+ seenIds.add(step.id);
98
+ }
99
+ // 4. Referencias existentes.
100
+ const byId = new Map();
101
+ for (const s of cert.steps)
102
+ byId.set(s.id, s);
103
+ for (const step of cert.steps) {
104
+ for (const dep of step.depends) {
105
+ if (!byId.has(dep)) {
106
+ errors.push(`step "${step.id}" depends on missing step "${dep}"`);
107
+ }
108
+ }
109
+ }
110
+ // 5. Acíclicidad.
111
+ const cycle = detectCycle(cert.steps);
112
+ if (cycle) {
113
+ errors.push(`cycle detected in depends: ${cycle.join(' -> ')}`);
114
+ }
115
+ // 6. Orden topológico (deps deben aparecer antes que dependientes).
116
+ const indexOf = new Map();
117
+ cert.steps.forEach((s, i) => indexOf.set(s.id, i));
118
+ for (const step of cert.steps) {
119
+ const myIdx = indexOf.get(step.id) ?? -1;
120
+ for (const dep of step.depends) {
121
+ const depIdx = indexOf.get(dep);
122
+ if (depIdx !== undefined && depIdx >= myIdx) {
123
+ errors.push(`step "${step.id}" references "${dep}" out of topological order`);
124
+ }
125
+ }
126
+ }
127
+ // 7. Goal aparece como conclusión.
128
+ const normalizedGoal = (0, canonical_1.normalizeFormula)(cert.goal);
129
+ const goalFound = cert.steps.some((s) => (0, canonical_1.normalizeFormula)(s.conclusion) === normalizedGoal);
130
+ if (!goalFound && cert.steps.length > 0) {
131
+ errors.push(`goal "${cert.goal}" not produced by any step`);
132
+ }
133
+ // 8. Chequeo regla a regla.
134
+ if (!cycle) {
135
+ for (const step of cert.steps) {
136
+ const checker = rules.get(step.rule) ?? rules_1.STANDARD_RULES.get(step.rule);
137
+ if (!checker) {
138
+ errors.push(`step "${step.id}": unknown rule "${step.rule}"`);
139
+ continue;
140
+ }
141
+ // Resolver premisas: las conclusiones de los pasos referenciados
142
+ // en depends, en el orden declarado. Si alguna referencia falta,
143
+ // ya fue reportada en chequeo #4; aquí evitamos crashear.
144
+ const premises = step.depends.map((d) => {
145
+ const ref = byId.get(d);
146
+ return ref ? ref.conclusion : '';
147
+ });
148
+ let ok;
149
+ try {
150
+ ok = checker(step.args, step.conclusion, premises);
151
+ }
152
+ catch (err) {
153
+ errors.push(`step "${step.id}": checker for "${step.rule}" threw ${err instanceof Error ? err.message : String(err)}`);
154
+ continue;
155
+ }
156
+ if (!ok) {
157
+ errors.push(`step "${step.id}": rule "${step.rule}" does not justify conclusion "${step.conclusion}"`);
158
+ }
159
+ else {
160
+ stepsVerified++;
161
+ }
162
+ }
163
+ }
164
+ return {
165
+ valid: errors.length === 0,
166
+ errors,
167
+ stepsVerified,
168
+ totalSteps,
169
+ };
170
+ }
171
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/proof-systems/certificate/verify.ts"],"names":[],"mappings":"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"}
@@ -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"}