@stevenvo780/st-lang 4.5.2 → 4.6.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 (185) hide show
  1. package/dist/categorical/fin-set.d.ts +39 -0
  2. package/dist/categorical/fin-set.d.ts.map +1 -0
  3. package/dist/categorical/fin-set.js +217 -0
  4. package/dist/categorical/fin-set.js.map +1 -0
  5. package/dist/categorical/free.d.ts +23 -0
  6. package/dist/categorical/free.d.ts.map +1 -0
  7. package/dist/categorical/free.js +168 -0
  8. package/dist/categorical/free.js.map +1 -0
  9. package/dist/categorical/functor.d.ts +40 -0
  10. package/dist/categorical/functor.d.ts.map +1 -0
  11. package/dist/categorical/functor.js +139 -0
  12. package/dist/categorical/functor.js.map +1 -0
  13. package/dist/categorical/index.d.ts +11 -0
  14. package/dist/categorical/index.d.ts.map +1 -0
  15. package/dist/categorical/index.js +33 -0
  16. package/dist/categorical/index.js.map +1 -0
  17. package/dist/categorical/limits.d.ts +64 -0
  18. package/dist/categorical/limits.d.ts.map +1 -0
  19. package/dist/categorical/limits.js +248 -0
  20. package/dist/categorical/limits.js.map +1 -0
  21. package/dist/categorical/monoidal.d.ts +14 -0
  22. package/dist/categorical/monoidal.d.ts.map +1 -0
  23. package/dist/categorical/monoidal.js +148 -0
  24. package/dist/categorical/monoidal.js.map +1 -0
  25. package/dist/categorical/poset.d.ts +14 -0
  26. package/dist/categorical/poset.d.ts.map +1 -0
  27. package/dist/categorical/poset.js +115 -0
  28. package/dist/categorical/poset.js.map +1 -0
  29. package/dist/categorical/types.d.ts +111 -0
  30. package/dist/categorical/types.d.ts.map +1 -0
  31. package/dist/categorical/types.js +15 -0
  32. package/dist/categorical/types.js.map +1 -0
  33. package/dist/csp-hoare/analysis.d.ts +51 -0
  34. package/dist/csp-hoare/analysis.d.ts.map +1 -0
  35. package/dist/csp-hoare/analysis.js +317 -0
  36. package/dist/csp-hoare/analysis.js.map +1 -0
  37. package/dist/csp-hoare/examples.d.ts +33 -0
  38. package/dist/csp-hoare/examples.d.ts.map +1 -0
  39. package/dist/csp-hoare/examples.js +108 -0
  40. package/dist/csp-hoare/examples.js.map +1 -0
  41. package/dist/csp-hoare/index.d.ts +6 -0
  42. package/dist/csp-hoare/index.d.ts.map +1 -0
  43. package/dist/csp-hoare/index.js +50 -0
  44. package/dist/csp-hoare/index.js.map +1 -0
  45. package/dist/csp-hoare/semantics.d.ts +49 -0
  46. package/dist/csp-hoare/semantics.d.ts.map +1 -0
  47. package/dist/csp-hoare/semantics.js +494 -0
  48. package/dist/csp-hoare/semantics.js.map +1 -0
  49. package/dist/csp-hoare/types.d.ts +60 -0
  50. package/dist/csp-hoare/types.d.ts.map +1 -0
  51. package/dist/csp-hoare/types.js +31 -0
  52. package/dist/csp-hoare/types.js.map +1 -0
  53. package/dist/hindley-milner/index.d.ts +7 -0
  54. package/dist/hindley-milner/index.d.ts.map +1 -0
  55. package/dist/hindley-milner/index.js +60 -0
  56. package/dist/hindley-milner/index.js.map +1 -0
  57. package/dist/hindley-milner/infer.d.ts +26 -0
  58. package/dist/hindley-milner/infer.d.ts.map +1 -0
  59. package/dist/hindley-milner/infer.js +278 -0
  60. package/dist/hindley-milner/infer.js.map +1 -0
  61. package/dist/hindley-milner/substitution.d.ts +21 -0
  62. package/dist/hindley-milner/substitution.d.ts.map +1 -0
  63. package/dist/hindley-milner/substitution.js +215 -0
  64. package/dist/hindley-milner/substitution.js.map +1 -0
  65. package/dist/hindley-milner/types.d.ts +84 -0
  66. package/dist/hindley-milner/types.d.ts.map +1 -0
  67. package/dist/hindley-milner/types.js +166 -0
  68. package/dist/hindley-milner/types.js.map +1 -0
  69. package/dist/hott/equality.d.ts +4 -0
  70. package/dist/hott/equality.d.ts.map +1 -0
  71. package/dist/hott/equality.js +108 -0
  72. package/dist/hott/equality.js.map +1 -0
  73. package/dist/hott/index.d.ts +13 -0
  74. package/dist/hott/index.d.ts.map +1 -0
  75. package/dist/hott/index.js +77 -0
  76. package/dist/hott/index.js.map +1 -0
  77. package/dist/hott/infer.d.ts +11 -0
  78. package/dist/hott/infer.d.ts.map +1 -0
  79. package/dist/hott/infer.js +465 -0
  80. package/dist/hott/infer.js.map +1 -0
  81. package/dist/hott/normalize.d.ts +5 -0
  82. package/dist/hott/normalize.d.ts.map +1 -0
  83. package/dist/hott/normalize.js +240 -0
  84. package/dist/hott/normalize.js.map +1 -0
  85. package/dist/hott/path-algebra.d.ts +25 -0
  86. package/dist/hott/path-algebra.d.ts.map +1 -0
  87. package/dist/hott/path-algebra.js +67 -0
  88. package/dist/hott/path-algebra.js.map +1 -0
  89. package/dist/hott/substitute.d.ts +3 -0
  90. package/dist/hott/substitute.d.ts.map +1 -0
  91. package/dist/hott/substitute.js +131 -0
  92. package/dist/hott/substitute.js.map +1 -0
  93. package/dist/hott/types.d.ts +126 -0
  94. package/dist/hott/types.d.ts.map +1 -0
  95. package/dist/hott/types.js +346 -0
  96. package/dist/hott/types.js.map +1 -0
  97. package/dist/index.d.ts +7 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +48 -3
  100. package/dist/index.js.map +1 -1
  101. package/dist/lemma-synthesis/index.d.ts +124 -0
  102. package/dist/lemma-synthesis/index.d.ts.map +1 -0
  103. package/dist/lemma-synthesis/index.js +640 -0
  104. package/dist/lemma-synthesis/index.js.map +1 -0
  105. package/dist/tactic-dsl/combinators.d.ts +6 -0
  106. package/dist/tactic-dsl/combinators.d.ts.map +1 -0
  107. package/dist/tactic-dsl/combinators.js +98 -0
  108. package/dist/tactic-dsl/combinators.js.map +1 -0
  109. package/dist/tactic-dsl/index.d.ts +39 -0
  110. package/dist/tactic-dsl/index.d.ts.map +1 -0
  111. package/dist/tactic-dsl/index.js +162 -0
  112. package/dist/tactic-dsl/index.js.map +1 -0
  113. package/dist/tactic-dsl/tactics.d.ts +21 -0
  114. package/dist/tactic-dsl/tactics.d.ts.map +1 -0
  115. package/dist/tactic-dsl/tactics.js +536 -0
  116. package/dist/tactic-dsl/tactics.js.map +1 -0
  117. package/dist/tactic-dsl/types.d.ts +54 -0
  118. package/dist/tactic-dsl/types.d.ts.map +1 -0
  119. package/dist/tactic-dsl/types.js +226 -0
  120. package/dist/tactic-dsl/types.js.map +1 -0
  121. package/dist/tests/categorical/categorical.test.d.ts +2 -0
  122. package/dist/tests/categorical/categorical.test.d.ts.map +1 -0
  123. package/dist/tests/categorical/categorical.test.js +300 -0
  124. package/dist/tests/categorical/categorical.test.js.map +1 -0
  125. package/dist/tests/csp-hoare/csp-hoare.test.d.ts +2 -0
  126. package/dist/tests/csp-hoare/csp-hoare.test.d.ts.map +1 -0
  127. package/dist/tests/csp-hoare/csp-hoare.test.js +313 -0
  128. package/dist/tests/csp-hoare/csp-hoare.test.js.map +1 -0
  129. package/dist/tests/hindley-milner/hindley-milner.test.d.ts +2 -0
  130. package/dist/tests/hindley-milner/hindley-milner.test.d.ts.map +1 -0
  131. package/dist/tests/hindley-milner/hindley-milner.test.js +327 -0
  132. package/dist/tests/hindley-milner/hindley-milner.test.js.map +1 -0
  133. package/dist/tests/hott/hott.test.d.ts +2 -0
  134. package/dist/tests/hott/hott.test.d.ts.map +1 -0
  135. package/dist/tests/hott/hott.test.js +271 -0
  136. package/dist/tests/hott/hott.test.js.map +1 -0
  137. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts +2 -0
  138. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts.map +1 -0
  139. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js +460 -0
  140. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js.map +1 -0
  141. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts +2 -0
  142. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts.map +1 -0
  143. package/dist/tests/tactic-dsl/tactic-dsl.test.js +259 -0
  144. package/dist/tests/tactic-dsl/tactic-dsl.test.js.map +1 -0
  145. package/dist/tests/tptp/bridge.test.d.ts +2 -0
  146. package/dist/tests/tptp/bridge.test.d.ts.map +1 -0
  147. package/dist/tests/tptp/bridge.test.js +154 -0
  148. package/dist/tests/tptp/bridge.test.js.map +1 -0
  149. package/dist/tests/tptp/emitter.test.d.ts +2 -0
  150. package/dist/tests/tptp/emitter.test.d.ts.map +1 -0
  151. package/dist/tests/tptp/emitter.test.js +128 -0
  152. package/dist/tests/tptp/emitter.test.js.map +1 -0
  153. package/dist/tests/tptp/parser.test.d.ts +2 -0
  154. package/dist/tests/tptp/parser.test.d.ts.map +1 -0
  155. package/dist/tests/tptp/parser.test.js +192 -0
  156. package/dist/tests/tptp/parser.test.js.map +1 -0
  157. package/dist/tests/tptp/tokenizer.test.d.ts +2 -0
  158. package/dist/tests/tptp/tokenizer.test.d.ts.map +1 -0
  159. package/dist/tests/tptp/tokenizer.test.js +60 -0
  160. package/dist/tests/tptp/tokenizer.test.js.map +1 -0
  161. package/dist/tptp/ast.d.ts +73 -0
  162. package/dist/tptp/ast.d.ts.map +1 -0
  163. package/dist/tptp/ast.js +35 -0
  164. package/dist/tptp/ast.js.map +1 -0
  165. package/dist/tptp/bridge.d.ts +14 -0
  166. package/dist/tptp/bridge.d.ts.map +1 -0
  167. package/dist/tptp/bridge.js +146 -0
  168. package/dist/tptp/bridge.js.map +1 -0
  169. package/dist/tptp/emitter.d.ts +5 -0
  170. package/dist/tptp/emitter.d.ts.map +1 -0
  171. package/dist/tptp/emitter.js +103 -0
  172. package/dist/tptp/emitter.js.map +1 -0
  173. package/dist/tptp/index.d.ts +7 -0
  174. package/dist/tptp/index.d.ts.map +1 -0
  175. package/dist/tptp/index.js +31 -0
  176. package/dist/tptp/index.js.map +1 -0
  177. package/dist/tptp/parser.d.ts +23 -0
  178. package/dist/tptp/parser.d.ts.map +1 -0
  179. package/dist/tptp/parser.js +440 -0
  180. package/dist/tptp/parser.js.map +1 -0
  181. package/dist/tptp/tokenizer.d.ts +14 -0
  182. package/dist/tptp/tokenizer.d.ts.map +1 -0
  183. package/dist/tptp/tokenizer.js +264 -0
  184. package/dist/tptp/tokenizer.js.map +1 -0
  185. package/package.json +4 -1
@@ -0,0 +1,640 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Lemma synthesis — Theory exploration tipo QuickSpec
4
+ // ============================================================
5
+ // Dada una signatura (sorts, constantes, funciones, predicados) y
6
+ // un evaluador semántico, sintetizamos conjeturas/lemmas
7
+ // automáticamente:
8
+ //
9
+ // 1. Enumeramos términos hasta cierta profundidad por sort.
10
+ // 2. Para cada par de términos de igual sort generamos una
11
+ // conjetura `t1 = t2`.
12
+ // 3. Evaluamos sobre N valuaciones aleatorias. Si todas pasan,
13
+ // la conjetura sobrevive (confidence ≈ 1 − falsificability).
14
+ // 4. Pruning: eliminamos trivialidades (t = t), conmutativas
15
+ // duplicadas (t1 = t2 vs t2 = t1) y consecuencias triviales
16
+ // (renombrado de variables, substitución de instancias).
17
+ // 5. Verificación opcional via prover externo.
18
+ //
19
+ // Esta es la idea original de QuickSpec / Hipster aplicada a
20
+ // términos cualesquiera, sin asumir un dominio fijo. El usuario
21
+ // provee el evaluador.
22
+ // ============================================================
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.__internals = exports.listsEvaluator = exports.booleansEvaluator = exports.naturalsEvaluator = void 0;
25
+ exports.termToString = termToString;
26
+ exports.freeVars = freeVars;
27
+ exports.enumerateTerms = enumerateTerms;
28
+ exports.synthesizeEqualities = synthesizeEqualities;
29
+ exports.pruneConsequences = pruneConsequences;
30
+ exports.verifyConjectures = verifyConjectures;
31
+ exports.naturalNumbersSignature = naturalNumbersSignature;
32
+ exports.booleansSignature = booleansSignature;
33
+ exports.listsSignature = listsSignature;
34
+ // ── Helpers de impresión ────────────────────────────────────
35
+ function termToString(t) {
36
+ switch (t.kind) {
37
+ case 'var':
38
+ case 'const':
39
+ return t.name;
40
+ case 'app':
41
+ if (t.args.length === 0)
42
+ return t.name;
43
+ // Notación infija para nombres "simbólicos" binarios
44
+ if (t.args.length === 2 && /^[+\-*/^∧∨↔→=<>≤≥&|]+$/.test(t.name)) {
45
+ return `(${termToString(t.args[0])} ${t.name} ${termToString(t.args[1])})`;
46
+ }
47
+ if (t.args.length === 1 && /^[¬!~]+$/.test(t.name)) {
48
+ return `${t.name}${termToString(t.args[0])}`;
49
+ }
50
+ return `${t.name}(${t.args.map(termToString).join(', ')})`;
51
+ }
52
+ }
53
+ const termKeyMemo = new WeakMap();
54
+ function termKey(t) {
55
+ if (typeof t !== 'object' || t === null)
56
+ return String(t);
57
+ const cached = termKeyMemo.get(t);
58
+ if (cached !== undefined)
59
+ return cached;
60
+ let k;
61
+ switch (t.kind) {
62
+ case 'var':
63
+ k = `v:${t.name}:${t.sort}`;
64
+ break;
65
+ case 'const':
66
+ k = `c:${t.name}:${t.sort}`;
67
+ break;
68
+ case 'app':
69
+ k = `a:${t.name}(${t.args.map(termKey).join(',')})`;
70
+ break;
71
+ }
72
+ termKeyMemo.set(t, k);
73
+ return k;
74
+ }
75
+ /** Lista las variables que aparecen en un término, en orden de primera aparición */
76
+ function freeVars(t) {
77
+ const seen = new Set();
78
+ const result = [];
79
+ const walk = (u) => {
80
+ if (u.kind === 'var') {
81
+ if (!seen.has(u.name)) {
82
+ seen.add(u.name);
83
+ result.push({ name: u.name, sort: u.sort });
84
+ }
85
+ return;
86
+ }
87
+ if (u.kind === 'app') {
88
+ for (const a of u.args)
89
+ walk(a);
90
+ }
91
+ };
92
+ walk(t);
93
+ return result;
94
+ }
95
+ // ── PRNG determinístico simple (mulberry32) ─────────────────
96
+ function mulberry32(seed) {
97
+ let s = seed >>> 0;
98
+ return () => {
99
+ s = (s + 0x6d2b79f5) >>> 0;
100
+ let t = s;
101
+ t = Math.imul(t ^ (t >>> 15), t | 1);
102
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
103
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
104
+ };
105
+ }
106
+ // ── Enumeración de términos ─────────────────────────────────
107
+ /**
108
+ * Enumera todos los términos cerrados (sobre constantes + variables
109
+ * declaradas) del sort dado, hasta `depth`. Profundidad 0 = solo
110
+ * variables y constantes; cada nivel agrega aplicaciones cuyos
111
+ * argumentos provienen de niveles inferiores.
112
+ */
113
+ function enumerateTerms(sig, sort, depth, variables = defaultVariables(sig)) {
114
+ if (depth < 0)
115
+ return [];
116
+ // Memo por (sort, depth)
117
+ const cache = new Map();
118
+ const buildBase = (s) => {
119
+ const out = [];
120
+ for (const v of variables) {
121
+ if (v.sort === s)
122
+ out.push({ kind: 'var', name: v.name, sort: s });
123
+ }
124
+ for (const c of sig.constants) {
125
+ if (c.sort === s)
126
+ out.push({ kind: 'const', name: c.name, sort: s });
127
+ }
128
+ return out;
129
+ };
130
+ const at = (s, d) => {
131
+ const key = `${s}@${d}`;
132
+ const cached = cache.get(key);
133
+ if (cached)
134
+ return cached;
135
+ if (d <= 0) {
136
+ const base = buildBase(s);
137
+ cache.set(key, base);
138
+ return base;
139
+ }
140
+ // Niveles previos (inclusivo): todos los términos de sort s con profundidad < d
141
+ const prev = at(s, d - 1);
142
+ const result = [...prev];
143
+ for (const f of sig.functions) {
144
+ if (f.resultSort !== s)
145
+ continue;
146
+ // Cartesiano de argumentos en niveles ≤ d − 1
147
+ const argPools = f.argSorts.map((as) => at(as, d - 1));
148
+ // Evitar explosión catastrófica
149
+ const totalSize = argPools.reduce((acc, p) => acc * p.length, 1);
150
+ if (totalSize > 50_000)
151
+ continue;
152
+ const idx = new Array(f.argSorts.length).fill(0);
153
+ const allEmpty = argPools.some((p) => p.length === 0);
154
+ if (allEmpty)
155
+ continue;
156
+ while (true) {
157
+ const args = idx.map((i, k) => argPools[k][i]);
158
+ // Al menos un argumento debe usar el nivel d − 1 estricto para
159
+ // ser "nuevo"; pero por simplicidad y para inclusividad, dejamos
160
+ // todos. Deduplicamos luego por clave.
161
+ result.push({ kind: 'app', name: f.name, args, sort: s });
162
+ let carry = idx.length - 1;
163
+ while (carry >= 0) {
164
+ idx[carry]++;
165
+ if (idx[carry] < argPools[carry].length)
166
+ break;
167
+ idx[carry] = 0;
168
+ carry--;
169
+ }
170
+ if (carry < 0)
171
+ break;
172
+ }
173
+ }
174
+ // Deduplicar
175
+ const seen = new Set();
176
+ const dedup = [];
177
+ for (const t of result) {
178
+ const k = termKey(t);
179
+ if (!seen.has(k)) {
180
+ seen.add(k);
181
+ dedup.push(t);
182
+ }
183
+ }
184
+ cache.set(key, dedup);
185
+ return dedup;
186
+ };
187
+ return at(sort, depth);
188
+ }
189
+ function defaultVariables(sig) {
190
+ const out = [];
191
+ for (const s of sig.sorts) {
192
+ out.push({ name: `${s.toLowerCase()[0] ?? 'x'}0`, sort: s });
193
+ out.push({ name: `${s.toLowerCase()[0] ?? 'x'}1`, sort: s });
194
+ out.push({ name: `${s.toLowerCase()[0] ?? 'x'}2`, sort: s });
195
+ }
196
+ return out;
197
+ }
198
+ function defaultRandomValue(sort, rng) {
199
+ // Generadores razonables por convención de nombre
200
+ const lo = sort.toLowerCase();
201
+ if (lo === 'nat' || lo === 'n' || lo === 'number' || lo === 'int') {
202
+ return Math.floor(rng() * 6);
203
+ }
204
+ if (lo === 'bool' || lo === 'b' || lo === 'boolean') {
205
+ return rng() < 0.5;
206
+ }
207
+ if (lo === 'list' || lo === 'l') {
208
+ const len = Math.floor(rng() * 4);
209
+ const list = [];
210
+ for (let i = 0; i < len; i++)
211
+ list.push(Math.floor(rng() * 4));
212
+ return list;
213
+ }
214
+ return rng();
215
+ }
216
+ /**
217
+ * Sintetiza conjeturas de igualdad: para cada par de términos del
218
+ * mismo sort, las evalúa sobre `numTests` valuaciones aleatorias.
219
+ * Sobreviven las que pasan todas las pruebas.
220
+ */
221
+ function synthesizeEqualities(sig, evaluator, opts = {}) {
222
+ const maxDepth = opts.maxDepth ?? 2;
223
+ const numTests = opts.numTests ?? 100;
224
+ const maxConj = opts.maxConjectures ?? 200;
225
+ const seed = opts.seed ?? 0xc0ffee;
226
+ const rng = mulberry32(seed);
227
+ const randVal = opts.randomValue ?? defaultRandomValue;
228
+ const varsPerSort = opts.varsPerSort ?? 3;
229
+ // Variables: K por cada sort que aparece
230
+ const variables = [];
231
+ for (const s of sig.sorts) {
232
+ for (let i = 0; i < varsPerSort; i++) {
233
+ variables.push({ name: `${s.toLowerCase()[0] ?? 'x'}${i}`, sort: s });
234
+ }
235
+ }
236
+ const conjectures = [];
237
+ for (const sort of sig.sorts) {
238
+ const terms = enumerateTerms(sig, sort, maxDepth, variables);
239
+ // Pre-evaluar cada término en cada valuación: clave de "comportamiento"
240
+ const valuations = [];
241
+ for (let t = 0; t < numTests; t++) {
242
+ const env = {};
243
+ for (const v of variables)
244
+ env[v.name] = randVal(v.sort, rng);
245
+ valuations.push(env);
246
+ }
247
+ // Mapa: signatura semántica → primer término que la produce
248
+ const sigToRep = new Map();
249
+ for (const term of terms) {
250
+ const traces = [];
251
+ let evalFailed = false;
252
+ for (const env of valuations) {
253
+ let val;
254
+ try {
255
+ val = evaluator(term, env);
256
+ }
257
+ catch {
258
+ evalFailed = true;
259
+ break;
260
+ }
261
+ traces.push(serializeValue(val));
262
+ }
263
+ if (evalFailed)
264
+ continue;
265
+ const key = traces.join('|');
266
+ const rep = sigToRep.get(key);
267
+ if (rep === undefined) {
268
+ sigToRep.set(key, term);
269
+ }
270
+ else {
271
+ // Encontramos otro término con misma extensión → conjetura
272
+ // Evitamos trivialidades: rep === term sintácticamente, o
273
+ // ambos son la misma var/const sin función aplicada.
274
+ if (termKey(rep) === termKey(term))
275
+ continue;
276
+ if (rep.kind !== 'app' && term.kind !== 'app')
277
+ continue;
278
+ const allVars = mergeVars(freeVars(rep), freeVars(term));
279
+ const formula = `∀${allVars.map((v) => `${v.name}:${v.sort}`).join(', ')}. ${termToString(rep)} = ${termToString(term)}`;
280
+ conjectures.push({
281
+ variables: allVars,
282
+ formula,
283
+ confidence: 1,
284
+ termLeft: rep,
285
+ termRight: term,
286
+ });
287
+ if (conjectures.length >= maxConj)
288
+ break;
289
+ }
290
+ }
291
+ if (conjectures.length >= maxConj)
292
+ break;
293
+ }
294
+ // Ordenar por tamaño del lado izquierdo (lemmas más simples primero)
295
+ conjectures.sort((a, b) => {
296
+ const sa = a.termLeft ? termSize(a.termLeft) : 0;
297
+ const sb = b.termLeft ? termSize(b.termLeft) : 0;
298
+ return sa - sb;
299
+ });
300
+ return conjectures;
301
+ }
302
+ function mergeVars(a, b) {
303
+ const seen = new Set();
304
+ const out = [];
305
+ for (const v of [...a, ...b]) {
306
+ if (!seen.has(v.name)) {
307
+ seen.add(v.name);
308
+ out.push(v);
309
+ }
310
+ }
311
+ return out;
312
+ }
313
+ function termSize(t) {
314
+ if (t.kind === 'var' || t.kind === 'const')
315
+ return 1;
316
+ return 1 + t.args.reduce((acc, a) => acc + termSize(a), 0);
317
+ }
318
+ function serializeValue(v) {
319
+ if (Array.isArray(v))
320
+ return `[${v.map(serializeValue).join(',')}]`;
321
+ if (v === null || v === undefined)
322
+ return String(v);
323
+ if (typeof v === 'number') {
324
+ // Quantizar para tolerar epsilon en aritmética real
325
+ if (!Number.isFinite(v))
326
+ return String(v);
327
+ if (Number.isInteger(v))
328
+ return String(v);
329
+ return v.toFixed(9);
330
+ }
331
+ if (typeof v === 'boolean')
332
+ return v ? 'true' : 'false';
333
+ if (typeof v === 'string')
334
+ return `"${v}"`;
335
+ if (typeof v === 'bigint')
336
+ return `${v.toString()}n`;
337
+ if (typeof v === 'object')
338
+ return JSON.stringify(v);
339
+ // function, symbol — last resort
340
+ return Object.prototype.toString.call(v);
341
+ }
342
+ // ── Pruning de consecuencias ────────────────────────────────
343
+ /**
344
+ * Descarta conjeturas redundantes:
345
+ * • Reflexivas (t = t).
346
+ * • Simétricas duplicadas (t1 = t2 vs t2 = t1).
347
+ * • Instancias de otras conjeturas más generales (un lemma
348
+ * ya hallado subsume a uno con más estructura específica).
349
+ */
350
+ function pruneConsequences(conjectures) {
351
+ // Paso 1: reflexivas
352
+ const noReflex = conjectures.filter((c) => {
353
+ if (!c.termLeft || !c.termRight)
354
+ return true;
355
+ return termKey(c.termLeft) !== termKey(c.termRight);
356
+ });
357
+ // Paso 2: simétricas duplicadas — clave canónica = par ordenado de termKey
358
+ const seen = new Map();
359
+ for (const c of noReflex) {
360
+ if (!c.termLeft || !c.termRight) {
361
+ seen.set(c.formula, c);
362
+ continue;
363
+ }
364
+ const k1 = termKey(c.termLeft);
365
+ const k2 = termKey(c.termRight);
366
+ const canonical = k1 < k2 ? `${k1}≡${k2}` : `${k2}≡${k1}`;
367
+ if (!seen.has(canonical))
368
+ seen.set(canonical, c);
369
+ }
370
+ const result = Array.from(seen.values());
371
+ // Paso 3: ordenar por tamaño y eliminar conjeturas que son
372
+ // "instancias" sintácticas más complejas de una previa.
373
+ result.sort((a, b) => {
374
+ const sa = (a.termLeft ? termSize(a.termLeft) : 0) + (a.termRight ? termSize(a.termRight) : 0);
375
+ const sb = (b.termLeft ? termSize(b.termLeft) : 0) + (b.termRight ? termSize(b.termRight) : 0);
376
+ return sa - sb;
377
+ });
378
+ // Paso 4: eliminar conjeturas en las que un lado es subsumido por
379
+ // un lemma anterior aplicado a un subtérmino (heurística simple:
380
+ // si reescribiendo con un lemma previo `l → r` colapsamos la
381
+ // conjetura actual en una reflexiva, es redundante). Usamos
382
+ // únicamente patrones con cabeza fija (no pure-vars): éstos sí
383
+ // discriminan y no explotan la búsqueda.
384
+ const survivors = [];
385
+ for (const c of result) {
386
+ if (!c.termLeft || !c.termRight) {
387
+ survivors.push(c);
388
+ continue;
389
+ }
390
+ let lhs = c.termLeft;
391
+ let rhs = c.termRight;
392
+ for (const prev of survivors) {
393
+ if (!prev.termLeft || !prev.termRight)
394
+ continue;
395
+ // No usar lemmas cuyo patrón sea una variable pura (matchearía
396
+ // cualquier cosa y explota el costo del prune sin agregar señal).
397
+ if (prev.termLeft.kind === 'var' && prev.termRight.kind !== 'var')
398
+ continue;
399
+ if (prev.termRight.kind === 'var' && prev.termLeft.kind !== 'var') {
400
+ // Usar como `replacement → pattern`: orientación grande→chica.
401
+ lhs = rewriteOnce(lhs, prev.termLeft, prev.termRight);
402
+ rhs = rewriteOnce(rhs, prev.termLeft, prev.termRight);
403
+ continue;
404
+ }
405
+ lhs = rewriteOnce(lhs, prev.termLeft, prev.termRight);
406
+ rhs = rewriteOnce(rhs, prev.termLeft, prev.termRight);
407
+ }
408
+ if (termKey(lhs) === termKey(rhs)) {
409
+ // Es consecuencia trivial de los anteriores
410
+ continue;
411
+ }
412
+ survivors.push(c);
413
+ }
414
+ return survivors;
415
+ }
416
+ /**
417
+ * Reescritura sintáctica simple: si `t` (o un subtérmino) matchea
418
+ * `pattern` con substitución σ, reemplaza por `σ(replacement)`.
419
+ * Solo intenta una sustitución de raíz para mantenerlo predecible.
420
+ */
421
+ function rewriteOnce(t, pattern, replacement) {
422
+ const subst = match(pattern, t, new Map());
423
+ if (subst)
424
+ return applySubst(replacement, subst);
425
+ if (t.kind === 'app') {
426
+ const newArgs = t.args.map((a) => rewriteOnce(a, pattern, replacement));
427
+ // Si nada cambió, devolver original (preserva identidad)
428
+ let changed = false;
429
+ for (let i = 0; i < newArgs.length; i++) {
430
+ if (termKey(newArgs[i]) !== termKey(t.args[i])) {
431
+ changed = true;
432
+ break;
433
+ }
434
+ }
435
+ if (!changed)
436
+ return t;
437
+ return { kind: 'app', name: t.name, args: newArgs, sort: t.sort };
438
+ }
439
+ return t;
440
+ }
441
+ function match(pattern, target, subst) {
442
+ // Mutable variant: records additions and rolls back on failure.
443
+ const added = [];
444
+ const tryMatch = (p, t) => {
445
+ if (p.kind === 'var') {
446
+ const prev = subst.get(p.name);
447
+ if (prev)
448
+ return termKey(prev) === termKey(t);
449
+ if (p.sort !== t.sort)
450
+ return false;
451
+ subst.set(p.name, t);
452
+ added.push(p.name);
453
+ return true;
454
+ }
455
+ if (p.kind === 'const') {
456
+ return t.kind === 'const' && p.name === t.name;
457
+ }
458
+ if (t.kind !== 'app')
459
+ return false;
460
+ if (p.name !== t.name)
461
+ return false;
462
+ if (p.args.length !== t.args.length)
463
+ return false;
464
+ for (let i = 0; i < p.args.length; i++) {
465
+ if (!tryMatch(p.args[i], t.args[i]))
466
+ return false;
467
+ }
468
+ return true;
469
+ };
470
+ if (tryMatch(pattern, target))
471
+ return subst;
472
+ // rollback
473
+ for (const k of added)
474
+ subst.delete(k);
475
+ return null;
476
+ }
477
+ function applySubst(t, subst) {
478
+ if (t.kind === 'var') {
479
+ const v = subst.get(t.name);
480
+ return v ?? t;
481
+ }
482
+ if (t.kind === 'const')
483
+ return t;
484
+ return {
485
+ kind: 'app',
486
+ name: t.name,
487
+ args: t.args.map((a) => applySubst(a, subst)),
488
+ sort: t.sort,
489
+ };
490
+ }
491
+ function verifyConjectures(conjectures, prover) {
492
+ return conjectures.map((c) => {
493
+ let r;
494
+ try {
495
+ r = prover(c);
496
+ }
497
+ catch {
498
+ return { ...c, status: 'unknown' };
499
+ }
500
+ if (r.proven)
501
+ return { ...c, status: 'verified' };
502
+ if (r.counter !== undefined)
503
+ return { ...c, status: 'counter', counter: r.counter };
504
+ return { ...c, status: 'unknown' };
505
+ });
506
+ }
507
+ // ── Signaturas de ejemplo ───────────────────────────────────
508
+ function naturalNumbersSignature() {
509
+ return {
510
+ sorts: ['Nat'],
511
+ constants: [{ name: '0', sort: 'Nat' }],
512
+ functions: [
513
+ { name: 'S', argSorts: ['Nat'], resultSort: 'Nat' },
514
+ { name: '+', argSorts: ['Nat', 'Nat'], resultSort: 'Nat' },
515
+ { name: '*', argSorts: ['Nat', 'Nat'], resultSort: 'Nat' },
516
+ ],
517
+ predicates: [],
518
+ };
519
+ }
520
+ function booleansSignature() {
521
+ return {
522
+ sorts: ['Bool'],
523
+ constants: [
524
+ { name: 'T', sort: 'Bool' },
525
+ { name: 'F', sort: 'Bool' },
526
+ ],
527
+ functions: [
528
+ { name: '¬', argSorts: ['Bool'], resultSort: 'Bool' },
529
+ { name: '∧', argSorts: ['Bool', 'Bool'], resultSort: 'Bool' },
530
+ { name: '∨', argSorts: ['Bool', 'Bool'], resultSort: 'Bool' },
531
+ ],
532
+ predicates: [],
533
+ };
534
+ }
535
+ function listsSignature() {
536
+ return {
537
+ sorts: ['List', 'Nat'],
538
+ constants: [
539
+ { name: 'nil', sort: 'List' },
540
+ { name: '0', sort: 'Nat' },
541
+ ],
542
+ functions: [
543
+ { name: 'S', argSorts: ['Nat'], resultSort: 'Nat' },
544
+ { name: 'cons', argSorts: ['Nat', 'List'], resultSort: 'List' },
545
+ { name: '++', argSorts: ['List', 'List'], resultSort: 'List' },
546
+ { name: 'length', argSorts: ['List'], resultSort: 'Nat' },
547
+ ],
548
+ predicates: [],
549
+ };
550
+ }
551
+ // ── Evaluadores de ejemplo (útiles para tests y demos) ──────
552
+ const naturalsEvaluator = (term, env) => {
553
+ const evalT = (t) => {
554
+ if (t.kind === 'var') {
555
+ const v = env[t.name];
556
+ return typeof v === 'number' ? v : 0;
557
+ }
558
+ if (t.kind === 'const')
559
+ return t.name === '0' ? 0 : 0;
560
+ switch (t.name) {
561
+ case 'S':
562
+ return evalT(t.args[0]) + 1;
563
+ case '+':
564
+ return evalT(t.args[0]) + evalT(t.args[1]);
565
+ case '*':
566
+ return evalT(t.args[0]) * evalT(t.args[1]);
567
+ default:
568
+ throw new Error(`unknown function ${t.name}`);
569
+ }
570
+ };
571
+ return evalT(term);
572
+ };
573
+ exports.naturalsEvaluator = naturalsEvaluator;
574
+ const booleansEvaluator = (term, env) => {
575
+ const evalT = (t) => {
576
+ if (t.kind === 'var') {
577
+ const v = env[t.name];
578
+ return typeof v === 'boolean' ? v : false;
579
+ }
580
+ if (t.kind === 'const')
581
+ return t.name === 'T';
582
+ switch (t.name) {
583
+ case '¬':
584
+ return !evalT(t.args[0]);
585
+ case '∧':
586
+ return evalT(t.args[0]) && evalT(t.args[1]);
587
+ case '∨':
588
+ return evalT(t.args[0]) || evalT(t.args[1]);
589
+ default:
590
+ throw new Error(`unknown function ${t.name}`);
591
+ }
592
+ };
593
+ return evalT(term);
594
+ };
595
+ exports.booleansEvaluator = booleansEvaluator;
596
+ const listsEvaluator = (term, env) => {
597
+ const evalT = (t) => {
598
+ if (t.kind === 'var') {
599
+ return env[t.name];
600
+ }
601
+ if (t.kind === 'const') {
602
+ if (t.name === 'nil')
603
+ return [];
604
+ if (t.name === '0')
605
+ return 0;
606
+ return undefined;
607
+ }
608
+ switch (t.name) {
609
+ case 'S':
610
+ return evalT(t.args[0]) + 1;
611
+ case 'cons': {
612
+ const h = evalT(t.args[0]);
613
+ const tl = evalT(t.args[1]);
614
+ return [h, ...tl];
615
+ }
616
+ case '++': {
617
+ const a = evalT(t.args[0]);
618
+ const b = evalT(t.args[1]);
619
+ return [...a, ...b];
620
+ }
621
+ case 'length':
622
+ return evalT(t.args[0]).length;
623
+ default:
624
+ throw new Error(`unknown function ${t.name}`);
625
+ }
626
+ };
627
+ return evalT(term);
628
+ };
629
+ exports.listsEvaluator = listsEvaluator;
630
+ // ── Re-exports para tests ───────────────────────────────────
631
+ exports.__internals = {
632
+ termKey,
633
+ termSize,
634
+ match,
635
+ rewriteOnce,
636
+ applySubst,
637
+ mulberry32,
638
+ serializeValue,
639
+ };
640
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lemma-synthesis/index.ts"],"names":[],"mappings":"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"}