@stevenvo780/st-lang 4.14.1 → 4.15.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 (197) hide show
  1. package/dist/format/stnb/__tests__/executor.test.d.ts +2 -0
  2. package/dist/format/stnb/__tests__/executor.test.d.ts.map +1 -0
  3. package/dist/format/stnb/__tests__/executor.test.js +140 -0
  4. package/dist/format/stnb/__tests__/executor.test.js.map +1 -0
  5. package/dist/format/stnb/__tests__/parser.test.d.ts +2 -0
  6. package/dist/format/stnb/__tests__/parser.test.d.ts.map +1 -0
  7. package/dist/format/stnb/__tests__/parser.test.js +119 -0
  8. package/dist/format/stnb/__tests__/parser.test.js.map +1 -0
  9. package/dist/format/stnb/__tests__/renderer.test.d.ts +2 -0
  10. package/dist/format/stnb/__tests__/renderer.test.d.ts.map +1 -0
  11. package/dist/format/stnb/__tests__/renderer.test.js +109 -0
  12. package/dist/format/stnb/__tests__/renderer.test.js.map +1 -0
  13. package/dist/format/stnb/__tests__/roundtrip.test.d.ts +2 -0
  14. package/dist/format/stnb/__tests__/roundtrip.test.d.ts.map +1 -0
  15. package/dist/format/stnb/__tests__/roundtrip.test.js +91 -0
  16. package/dist/format/stnb/__tests__/roundtrip.test.js.map +1 -0
  17. package/dist/format/stnb/__tests__/serializer.test.d.ts +2 -0
  18. package/dist/format/stnb/__tests__/serializer.test.d.ts.map +1 -0
  19. package/dist/format/stnb/__tests__/serializer.test.js +60 -0
  20. package/dist/format/stnb/__tests__/serializer.test.js.map +1 -0
  21. package/dist/format/stnb/executor.d.ts +29 -0
  22. package/dist/format/stnb/executor.d.ts.map +1 -0
  23. package/dist/format/stnb/executor.js +139 -0
  24. package/dist/format/stnb/executor.js.map +1 -0
  25. package/dist/format/stnb/index.d.ts +19 -0
  26. package/dist/format/stnb/index.d.ts.map +1 -0
  27. package/dist/format/stnb/index.js +28 -0
  28. package/dist/format/stnb/index.js.map +1 -0
  29. package/dist/format/stnb/renderer-html.d.ts +11 -0
  30. package/dist/format/stnb/renderer-html.d.ts.map +1 -0
  31. package/dist/format/stnb/renderer-html.js +180 -0
  32. package/dist/format/stnb/renderer-html.js.map +1 -0
  33. package/dist/format/stnb/renderer-markdown.d.ts +13 -0
  34. package/dist/format/stnb/renderer-markdown.d.ts.map +1 -0
  35. package/dist/format/stnb/renderer-markdown.js +92 -0
  36. package/dist/format/stnb/renderer-markdown.js.map +1 -0
  37. package/dist/format/stnb/serializer.d.ts +14 -0
  38. package/dist/format/stnb/serializer.d.ts.map +1 -0
  39. package/dist/format/stnb/serializer.js +21 -0
  40. package/dist/format/stnb/serializer.js.map +1 -0
  41. package/dist/index.d.ts +5 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +7 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.d.ts +2 -0
  46. package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.d.ts.map +1 -0
  47. package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.js +141 -0
  48. package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.js.map +1 -0
  49. package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.d.ts +2 -0
  50. package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.d.ts.map +1 -0
  51. package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.js +55 -0
  52. package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.js.map +1 -0
  53. package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.d.ts +2 -0
  54. package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.d.ts.map +1 -0
  55. package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.js +149 -0
  56. package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.js.map +1 -0
  57. package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.d.ts +2 -0
  58. package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.d.ts.map +1 -0
  59. package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.js +105 -0
  60. package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.js.map +1 -0
  61. package/dist/logic/profiles/dl-hybrid/ast.d.ts +160 -0
  62. package/dist/logic/profiles/dl-hybrid/ast.d.ts.map +1 -0
  63. package/dist/logic/profiles/dl-hybrid/ast.js +261 -0
  64. package/dist/logic/profiles/dl-hybrid/ast.js.map +1 -0
  65. package/dist/logic/profiles/dl-hybrid/differential.d.ts +61 -0
  66. package/dist/logic/profiles/dl-hybrid/differential.d.ts.map +1 -0
  67. package/dist/logic/profiles/dl-hybrid/differential.js +291 -0
  68. package/dist/logic/profiles/dl-hybrid/differential.js.map +1 -0
  69. package/dist/logic/profiles/dl-hybrid/index.d.ts +10 -0
  70. package/dist/logic/profiles/dl-hybrid/index.d.ts.map +1 -0
  71. package/dist/logic/profiles/dl-hybrid/index.js +90 -0
  72. package/dist/logic/profiles/dl-hybrid/index.js.map +1 -0
  73. package/dist/logic/profiles/dl-hybrid/parser.d.ts +8 -0
  74. package/dist/logic/profiles/dl-hybrid/parser.d.ts.map +1 -0
  75. package/dist/logic/profiles/dl-hybrid/parser.js +410 -0
  76. package/dist/logic/profiles/dl-hybrid/parser.js.map +1 -0
  77. package/dist/logic/profiles/dl-hybrid/profile.d.ts +23 -0
  78. package/dist/logic/profiles/dl-hybrid/profile.d.ts.map +1 -0
  79. package/dist/logic/profiles/dl-hybrid/profile.js +122 -0
  80. package/dist/logic/profiles/dl-hybrid/profile.js.map +1 -0
  81. package/dist/logic/profiles/dl-hybrid/semantics.d.ts +16 -0
  82. package/dist/logic/profiles/dl-hybrid/semantics.d.ts.map +1 -0
  83. package/dist/logic/profiles/dl-hybrid/semantics.js +181 -0
  84. package/dist/logic/profiles/dl-hybrid/semantics.js.map +1 -0
  85. package/dist/logic/profiles/dl-hybrid/tableau.d.ts +38 -0
  86. package/dist/logic/profiles/dl-hybrid/tableau.d.ts.map +1 -0
  87. package/dist/logic/profiles/dl-hybrid/tableau.js +289 -0
  88. package/dist/logic/profiles/dl-hybrid/tableau.js.map +1 -0
  89. package/dist/reasoning/dl-hybrid/__tests__/invariant.test.d.ts +2 -0
  90. package/dist/reasoning/dl-hybrid/__tests__/invariant.test.d.ts.map +1 -0
  91. package/dist/reasoning/dl-hybrid/__tests__/invariant.test.js +74 -0
  92. package/dist/reasoning/dl-hybrid/__tests__/invariant.test.js.map +1 -0
  93. package/dist/reasoning/dl-hybrid/index.d.ts +3 -0
  94. package/dist/reasoning/dl-hybrid/index.d.ts.map +1 -0
  95. package/dist/reasoning/dl-hybrid/index.js +16 -0
  96. package/dist/reasoning/dl-hybrid/index.js.map +1 -0
  97. package/dist/reasoning/dl-hybrid/invariant-search.d.ts +39 -0
  98. package/dist/reasoning/dl-hybrid/invariant-search.d.ts.map +1 -0
  99. package/dist/reasoning/dl-hybrid/invariant-search.js +188 -0
  100. package/dist/reasoning/dl-hybrid/invariant-search.js.map +1 -0
  101. package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.d.ts +2 -0
  102. package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.d.ts.map +1 -0
  103. package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.js +72 -0
  104. package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.js.map +1 -0
  105. package/dist/reasoning/lemma-rag/__tests__/embedding.test.d.ts +2 -0
  106. package/dist/reasoning/lemma-rag/__tests__/embedding.test.d.ts.map +1 -0
  107. package/dist/reasoning/lemma-rag/__tests__/embedding.test.js +102 -0
  108. package/dist/reasoning/lemma-rag/__tests__/embedding.test.js.map +1 -0
  109. package/dist/reasoning/lemma-rag/__tests__/integration.test.d.ts +2 -0
  110. package/dist/reasoning/lemma-rag/__tests__/integration.test.d.ts.map +1 -0
  111. package/dist/reasoning/lemma-rag/__tests__/integration.test.js +40 -0
  112. package/dist/reasoning/lemma-rag/__tests__/integration.test.js.map +1 -0
  113. package/dist/reasoning/lemma-rag/__tests__/query.test.d.ts +2 -0
  114. package/dist/reasoning/lemma-rag/__tests__/query.test.d.ts.map +1 -0
  115. package/dist/reasoning/lemma-rag/__tests__/query.test.js +136 -0
  116. package/dist/reasoning/lemma-rag/__tests__/query.test.js.map +1 -0
  117. package/dist/reasoning/lemma-rag/__tests__/retrieval.test.d.ts +2 -0
  118. package/dist/reasoning/lemma-rag/__tests__/retrieval.test.d.ts.map +1 -0
  119. package/dist/reasoning/lemma-rag/__tests__/retrieval.test.js +147 -0
  120. package/dist/reasoning/lemma-rag/__tests__/retrieval.test.js.map +1 -0
  121. package/dist/reasoning/lemma-rag/benchmarks.d.ts +30 -0
  122. package/dist/reasoning/lemma-rag/benchmarks.d.ts.map +1 -0
  123. package/dist/reasoning/lemma-rag/benchmarks.js +177 -0
  124. package/dist/reasoning/lemma-rag/benchmarks.js.map +1 -0
  125. package/dist/reasoning/lemma-rag/embedding.d.ts +26 -0
  126. package/dist/reasoning/lemma-rag/embedding.d.ts.map +1 -0
  127. package/dist/reasoning/lemma-rag/embedding.js +243 -0
  128. package/dist/reasoning/lemma-rag/embedding.js.map +1 -0
  129. package/dist/reasoning/lemma-rag/index-store.d.ts +35 -0
  130. package/dist/reasoning/lemma-rag/index-store.d.ts.map +1 -0
  131. package/dist/reasoning/lemma-rag/index-store.js +105 -0
  132. package/dist/reasoning/lemma-rag/index-store.js.map +1 -0
  133. package/dist/reasoning/lemma-rag/index.d.ts +9 -0
  134. package/dist/reasoning/lemma-rag/index.d.ts.map +1 -0
  135. package/dist/reasoning/lemma-rag/index.js +34 -0
  136. package/dist/reasoning/lemma-rag/index.js.map +1 -0
  137. package/dist/reasoning/lemma-rag/query.d.ts +48 -0
  138. package/dist/reasoning/lemma-rag/query.d.ts.map +1 -0
  139. package/dist/reasoning/lemma-rag/query.js +92 -0
  140. package/dist/reasoning/lemma-rag/query.js.map +1 -0
  141. package/dist/reasoning/lemma-rag/retrieval.d.ts +33 -0
  142. package/dist/reasoning/lemma-rag/retrieval.d.ts.map +1 -0
  143. package/dist/reasoning/lemma-rag/retrieval.js +123 -0
  144. package/dist/reasoning/lemma-rag/retrieval.js.map +1 -0
  145. package/dist/reasoning/lemma-rag/types.d.ts +52 -0
  146. package/dist/reasoning/lemma-rag/types.d.ts.map +1 -0
  147. package/dist/reasoning/lemma-rag/types.js +13 -0
  148. package/dist/reasoning/lemma-rag/types.js.map +1 -0
  149. package/dist/reasoning/proof-mining/__tests__/extractor.test.d.ts +2 -0
  150. package/dist/reasoning/proof-mining/__tests__/extractor.test.d.ts.map +1 -0
  151. package/dist/reasoning/proof-mining/__tests__/extractor.test.js +263 -0
  152. package/dist/reasoning/proof-mining/__tests__/extractor.test.js.map +1 -0
  153. package/dist/reasoning/proof-mining/__tests__/generalizer.test.d.ts +2 -0
  154. package/dist/reasoning/proof-mining/__tests__/generalizer.test.d.ts.map +1 -0
  155. package/dist/reasoning/proof-mining/__tests__/generalizer.test.js +123 -0
  156. package/dist/reasoning/proof-mining/__tests__/generalizer.test.js.map +1 -0
  157. package/dist/reasoning/proof-mining/__tests__/integration.test.d.ts +2 -0
  158. package/dist/reasoning/proof-mining/__tests__/integration.test.d.ts.map +1 -0
  159. package/dist/reasoning/proof-mining/__tests__/integration.test.js +128 -0
  160. package/dist/reasoning/proof-mining/__tests__/integration.test.js.map +1 -0
  161. package/dist/reasoning/proof-mining/__tests__/persistence.test.d.ts +2 -0
  162. package/dist/reasoning/proof-mining/__tests__/persistence.test.d.ts.map +1 -0
  163. package/dist/reasoning/proof-mining/__tests__/persistence.test.js +119 -0
  164. package/dist/reasoning/proof-mining/__tests__/persistence.test.js.map +1 -0
  165. package/dist/reasoning/proof-mining/__tests__/ranker.test.d.ts +2 -0
  166. package/dist/reasoning/proof-mining/__tests__/ranker.test.d.ts.map +1 -0
  167. package/dist/reasoning/proof-mining/__tests__/ranker.test.js +93 -0
  168. package/dist/reasoning/proof-mining/__tests__/ranker.test.js.map +1 -0
  169. package/dist/reasoning/proof-mining/extractor.d.ts +73 -0
  170. package/dist/reasoning/proof-mining/extractor.d.ts.map +1 -0
  171. package/dist/reasoning/proof-mining/extractor.js +170 -0
  172. package/dist/reasoning/proof-mining/extractor.js.map +1 -0
  173. package/dist/reasoning/proof-mining/generalizer.d.ts +46 -0
  174. package/dist/reasoning/proof-mining/generalizer.d.ts.map +1 -0
  175. package/dist/reasoning/proof-mining/generalizer.js +245 -0
  176. package/dist/reasoning/proof-mining/generalizer.js.map +1 -0
  177. package/dist/reasoning/proof-mining/index.d.ts +62 -0
  178. package/dist/reasoning/proof-mining/index.d.ts.map +1 -0
  179. package/dist/reasoning/proof-mining/index.js +235 -0
  180. package/dist/reasoning/proof-mining/index.js.map +1 -0
  181. package/dist/reasoning/proof-mining/persistence.d.ts +35 -0
  182. package/dist/reasoning/proof-mining/persistence.d.ts.map +1 -0
  183. package/dist/reasoning/proof-mining/persistence.js +126 -0
  184. package/dist/reasoning/proof-mining/persistence.js.map +1 -0
  185. package/dist/reasoning/proof-mining/ranker.d.ts +29 -0
  186. package/dist/reasoning/proof-mining/ranker.d.ts.map +1 -0
  187. package/dist/reasoning/proof-mining/ranker.js +71 -0
  188. package/dist/reasoning/proof-mining/ranker.js.map +1 -0
  189. package/dist/reasoning/proof-mining/statistics.d.ts +11 -0
  190. package/dist/reasoning/proof-mining/statistics.d.ts.map +1 -0
  191. package/dist/reasoning/proof-mining/statistics.js +44 -0
  192. package/dist/reasoning/proof-mining/statistics.js.map +1 -0
  193. package/dist/reasoning/proof-mining/types.d.ts +117 -0
  194. package/dist/reasoning/proof-mining/types.d.ts.map +1 -0
  195. package/dist/reasoning/proof-mining/types.js +24 -0
  196. package/dist/reasoning/proof-mining/types.js.map +1 -0
  197. package/package.json +26 -1
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Proof Mining — Extracción de sub-pruebas reutilizables
4
+ // ============================================================
5
+ //
6
+ // Algoritmo:
7
+ //
8
+ // 1. Para cada proof P en el corpus, descomponer en sub-trees.
9
+ // Un sub-tree comienza en un paso s y abarca todos los pasos
10
+ // con depth > s.depth hasta que aparezca otro paso de depth
11
+ // ≤ s.depth (regreso al nivel del padre).
12
+ //
13
+ // 2. Para cada sub-tree, calcular una clave estructural (hash
14
+ // α-canónico): la secuencia de reglas + outputs normalizados a
15
+ // placeholders `?0`, `?1`, …
16
+ //
17
+ // 3. Agrupar sub-trees por clave. Los grupos con count ≥
18
+ // minReuseThreshold y size ≥ minSubtreeSize son candidatos
19
+ // a lemma.
20
+ //
21
+ // La descomposición es lineal en el tamaño del proof: cada paso
22
+ // participa en O(1) sub-trees (el que arranca en él) — aunque cada
23
+ // sub-tree puede tener O(size) pasos. Total: O(N · S) donde S es
24
+ // el tamaño promedio del sub-tree (usualmente pequeño).
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.extractSubtrees = extractSubtrees;
27
+ exports.subtreeKey = subtreeKey;
28
+ exports.groupSubtrees = groupSubtrees;
29
+ exports.extractAuxiliaryLemmas = extractAuxiliaryLemmas;
30
+ const canonical_1 = require("../../runtime/theorem-cache/canonical");
31
+ function genProofId(p, idx) {
32
+ return p.id ?? `proof-${idx}`;
33
+ }
34
+ /**
35
+ * Descompone un proof en sub-trees a partir de cada paso. El
36
+ * sub-tree con raíz en `i` incluye `steps[i]` y todos los
37
+ * descendientes consecutivos (depth > steps[i].depth) hasta que
38
+ * vuelve a aparecer un paso de depth ≤ steps[i].depth.
39
+ *
40
+ * Para steps[i] con depth d_i, el sub-tree es:
41
+ * steps[i], steps[i+1], …, steps[j-1]
42
+ * donde j es el menor índice > i con steps[j].depth ≤ d_i (o
43
+ * length si no existe).
44
+ */
45
+ function extractSubtrees(proof, proofId) {
46
+ const out = [];
47
+ const steps = proof.steps;
48
+ if (steps.length === 0)
49
+ return out;
50
+ // Cost prorrateado: cada paso aporta cost/length al sub-tree donde participa.
51
+ const perStepCost = proof.cost / Math.max(1, steps.length);
52
+ for (let i = 0; i < steps.length; i++) {
53
+ const root = steps[i];
54
+ if (root === undefined)
55
+ continue;
56
+ const rootDepth = root.depth;
57
+ let j = i + 1;
58
+ while (j < steps.length) {
59
+ const sj = steps[j];
60
+ if (sj === undefined)
61
+ break;
62
+ if (sj.depth <= rootDepth)
63
+ break;
64
+ j++;
65
+ }
66
+ const subSteps = steps.slice(i, j);
67
+ out.push({
68
+ proofId,
69
+ rootIndex: i,
70
+ steps: subSteps,
71
+ conclusion: root.output,
72
+ profile: proof.profile,
73
+ cost: perStepCost * subSteps.length,
74
+ });
75
+ }
76
+ return out;
77
+ }
78
+ /**
79
+ * Clave estructural canónica de un sub-tree.
80
+ *
81
+ * Combina: secuencia de reglas (por orden top-down) + diferencias
82
+ * relativas de depth (para reconstruir forma del árbol) + outputs
83
+ * normalizados α-canónicamente.
84
+ *
85
+ * El canónico depende del orden de aparición de los identificadores
86
+ * de cada output, lo que da un hash estable módulo renombrado de
87
+ * variables.
88
+ */
89
+ function subtreeKey(sub) {
90
+ if (sub.steps.length === 0)
91
+ return 'empty';
92
+ const root = sub.steps[0];
93
+ if (root === undefined)
94
+ return 'empty';
95
+ const baseDepth = root.depth;
96
+ const parts = [];
97
+ // Renombrado coherente de identificadores a través de todos los outputs
98
+ // del sub-tree. Concatenamos con separador para que aparezcan en el orden
99
+ // correcto y un único pase de canonicalización los renombra de forma
100
+ // consistente.
101
+ const joined = sub.steps.map((s) => s.output).join(' ⫶ ');
102
+ const canon = (0, canonical_1.canonicalString)(joined);
103
+ const outputs = canon.split(' ⫶ ');
104
+ for (let i = 0; i < sub.steps.length; i++) {
105
+ const s = sub.steps[i];
106
+ if (s === undefined)
107
+ continue;
108
+ const out = outputs[i] ?? (0, canonical_1.canonicalString)(s.output);
109
+ parts.push(`${s.rule}@${s.depth - baseDepth}:${out}`);
110
+ }
111
+ return parts.join('|');
112
+ }
113
+ /**
114
+ * Agrupa sub-trees por clave estructural canónica.
115
+ */
116
+ function groupSubtrees(candidates) {
117
+ const groups = new Map();
118
+ for (const c of candidates) {
119
+ const k = subtreeKey(c);
120
+ let g = groups.get(k);
121
+ if (g === undefined) {
122
+ g = {
123
+ key: k,
124
+ canonicalConclusion: (0, canonical_1.canonicalString)(c.conclusion),
125
+ members: [],
126
+ };
127
+ groups.set(k, g);
128
+ }
129
+ g.members.push(c);
130
+ }
131
+ return Array.from(groups.values());
132
+ }
133
+ /**
134
+ * Identifica sub-pruebas auxiliares en el corpus. Recibe un array
135
+ * de proofs, devuelve los grupos de sub-trees estructuralmente
136
+ * equivalentes que pasan los filtros (minReuseThreshold y
137
+ * minSubtreeSize).
138
+ *
139
+ * Esta función NO genera lemmas todavía — solo identifica los
140
+ * candidatos. `mineLemmas` los procesa, genera el statement y los
141
+ * persiste.
142
+ */
143
+ function extractAuxiliaryLemmas(corpus, options) {
144
+ const minReuse = options?.minReuseThreshold ?? 2;
145
+ const minSize = options?.minSubtreeSize ?? 2;
146
+ const allSubtrees = [];
147
+ for (let i = 0; i < corpus.length; i++) {
148
+ const p = corpus[i];
149
+ if (p === undefined)
150
+ continue;
151
+ const id = genProofId(p, i);
152
+ for (const sub of extractSubtrees(p, id)) {
153
+ if (sub.steps.length < minSize)
154
+ continue;
155
+ allSubtrees.push(sub);
156
+ }
157
+ }
158
+ const groups = groupSubtrees(allSubtrees);
159
+ // Filtrar por umbral de reuso, contando proofs DISTINTOS (no
160
+ // múltiples ocurrencias dentro del mismo proof).
161
+ const filtered = [];
162
+ for (const g of groups) {
163
+ const distinctProofs = new Set(g.members.map((m) => m.proofId));
164
+ if (distinctProofs.size >= minReuse) {
165
+ filtered.push(g);
166
+ }
167
+ }
168
+ return filtered;
169
+ }
170
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../../src/reasoning/proof-mining/extractor.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,4DAA4D;AAC5D,+DAA+D;AAC/D,EAAE;AACF,aAAa;AACb,EAAE;AACF,iEAAiE;AACjE,kEAAkE;AAClE,iEAAiE;AACjE,+CAA+C;AAC/C,EAAE;AACF,gEAAgE;AAChE,oEAAoE;AACpE,kCAAkC;AAClC,EAAE;AACF,2DAA2D;AAC3D,gEAAgE;AAChE,gBAAgB;AAChB,EAAE;AACF,gEAAgE;AAChE,mEAAmE;AACnE,iEAAiE;AACjE,wDAAwD;;AAmDxD,0CA8BC;AAaD,gCAoBC;AAKD,sCAgBC;AAYD,wDA8BC;AA/KD,qEAAwE;AAkCxE,SAAS,UAAU,CAAC,CAAa,EAAE,GAAW;IAC5C,OAAO,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,eAAe,CAAC,KAAiB,EAAE,OAAe;IAChE,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEnC,8EAA8E;IAC9E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,KAAK,SAAS;gBAAE,MAAM;YAC5B,IAAI,EAAE,CAAC,KAAK,IAAI,SAAS;gBAAE,MAAM;YACjC,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC;YACP,OAAO;YACP,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC,MAAM;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,GAAqB;IAC9C,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,wEAAwE;IACxE,0EAA0E;IAC1E,qEAAqE;IACrE,eAAe;IACf,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAA,2BAAe,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,UAA8B;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG;gBACF,GAAG,EAAE,CAAC;gBACN,mBAAmB,EAAE,IAAA,2BAAe,EAAC,CAAC,CAAC,UAAU,CAAC;gBAClD,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,sBAAsB,CACpC,MAAoB,EACpB,OAAiE;IAEjE,MAAM,QAAQ,GAAG,OAAO,EAAE,iBAAiB,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;gBAAE,SAAS;YACzC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE1C,6DAA6D;IAC7D,iDAAiD;IACjD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,cAAc,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { Term, FreshSupply } from '../../runtime/anti-unification';
2
+ /**
3
+ * Resultado de generalización: el statement (puede ser string con
4
+ * placeholders fresh), el conteo de variables abstractas
5
+ * introducidas y un flag de si la generalización es no-trivial
6
+ * (e.g. produjo placeholders).
7
+ */
8
+ export interface GeneralizationResult {
9
+ statement: string;
10
+ abstractionLevel: number;
11
+ nonTrivial: boolean;
12
+ }
13
+ /**
14
+ * Generaliza una lista de instancias concretas vía anti-unification
15
+ * sobre términos. Útil cuando el caller ya parsea fórmulas a un AST
16
+ * `Term`.
17
+ */
18
+ export declare function generalizeTerms(instances: Term[], freshSupply?: FreshSupply): GeneralizationResult;
19
+ /**
20
+ * Generaliza una lista de fórmulas string. Tokeniza, alinea
21
+ * posicionalmente, y donde haya desacuerdo introduce un placeholder
22
+ * fresh. Si la tokenización produce arrays de distinta longitud, no
23
+ * intenta align: devuelve el primer string y nonTrivial = false.
24
+ *
25
+ * Tabla de desacuerdos: si el mismo par (a, b) reaparece, recibe el
26
+ * mismo placeholder (consistencia, propiedad LGG).
27
+ *
28
+ * Para igualar reservadas (operadores, paréntesis) en todas las
29
+ * instancias, esas posiciones se mantienen literales. Solo los
30
+ * tokens-identificador se generalizan.
31
+ */
32
+ export declare function generalizeFormulas(instances: string[]): GeneralizationResult;
33
+ /**
34
+ * Generaliza un grupo (lista de strings de conclusión, repetida
35
+ * tantas veces como instancias haya), opcionalmente capeando el
36
+ * abstractionLevel máximo.
37
+ *
38
+ * Si `preserveSemantic` está activo y la generalización no es
39
+ * instanciable de vuelta para cubrir todas las instancias, devuelve
40
+ * el literal de la primera instancia con abstractionLevel = 0.
41
+ */
42
+ export declare function generalizeLemma(conclusions: string[], options?: {
43
+ maxAbstractionLevel?: number;
44
+ preserveSemantic?: boolean;
45
+ }): GeneralizationResult;
46
+ //# sourceMappingURL=generalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalizer.d.ts","sourceRoot":"","sources":["../../../src/reasoning/proof-mining/generalizer.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,oBAAoB,CAkBlG;AAmDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,oBAAoB,CA8D5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GACrE,oBAAoB,CA2BtB"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Proof Mining — Generalización de lemmas vía anti-unification
4
+ // ============================================================
5
+ //
6
+ // Después de extraer sub-trees con la misma forma estructural (la
7
+ // clave canónica los agrupa), queremos producir UN statement
8
+ // generalizado que represente al grupo.
9
+ //
10
+ // Ejemplo concreto:
11
+ // - Proof A contiene sub-tree concluyendo `P -> P`
12
+ // - Proof B contiene sub-tree concluyendo `Q -> Q`
13
+ // - Proof C contiene sub-tree concluyendo `R -> R`
14
+ // El statement generalizado debería ser `?x -> ?x` (reflexividad
15
+ // de la implicación, instancia del lemma “identity”).
16
+ //
17
+ // Para términos de primer orden (e.g. árboles AST), usamos el
18
+ // algoritmo de Plotkin del módulo runtime/anti-unification.
19
+ //
20
+ // Para strings (caso conclusión sin parser), aproximamos el lgg
21
+ // posicional: tokenizamos por whitespace + tokens-básicos, alineamos
22
+ // el array y reemplazamos los desacuerdos por placeholders fresh.
23
+ // Es una aproximación pragmática suficiente para conclusiones de
24
+ // fórmulas; quien quiera lgg sobre árboles AST puede ir directo a
25
+ // `antiUnifyMany` del runtime y feedearlo.
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.generalizeTerms = generalizeTerms;
28
+ exports.generalizeFormulas = generalizeFormulas;
29
+ exports.generalizeLemma = generalizeLemma;
30
+ const anti_unification_1 = require("../../runtime/anti-unification");
31
+ /**
32
+ * Generaliza una lista de instancias concretas vía anti-unification
33
+ * sobre términos. Útil cuando el caller ya parsea fórmulas a un AST
34
+ * `Term`.
35
+ */
36
+ function generalizeTerms(instances, freshSupply) {
37
+ if (instances.length === 0) {
38
+ return { statement: '', abstractionLevel: 0, nonTrivial: false };
39
+ }
40
+ if (instances.length === 1) {
41
+ const t = instances[0];
42
+ if (t === undefined) {
43
+ return { statement: '', abstractionLevel: 0, nonTrivial: false };
44
+ }
45
+ return { statement: termToReadable(t), abstractionLevel: 0, nonTrivial: false };
46
+ }
47
+ const supply = freshSupply ?? (0, anti_unification_1.defaultFreshSupply)('?');
48
+ const result = (0, anti_unification_1.antiUnifyMany)(instances, supply);
49
+ return {
50
+ statement: termToReadable(result.generalization),
51
+ abstractionLevel: result.variables.length,
52
+ nonTrivial: result.variables.length > 0,
53
+ };
54
+ }
55
+ /**
56
+ * Render legible de un Term (compatible con la convención de
57
+ * lemma-synthesis: var/const → name, func → name(args)).
58
+ */
59
+ function termToReadable(t) {
60
+ if (t.kind === 'var')
61
+ return t.name;
62
+ if (t.kind === 'const')
63
+ return t.name;
64
+ const args = t.args ?? [];
65
+ if (args.length === 0)
66
+ return t.name;
67
+ // Operadores binarios infijos
68
+ if (args.length === 2 && /^[+\-*/^∧∨↔→=<>≤≥&|]+$/.test(t.name)) {
69
+ const a0 = args[0];
70
+ const a1 = args[1];
71
+ if (a0 === undefined || a1 === undefined)
72
+ return t.name;
73
+ return `(${termToReadable(a0)} ${t.name} ${termToReadable(a1)})`;
74
+ }
75
+ return `${t.name}(${args.map(termToReadable).join(', ')})`;
76
+ }
77
+ // ── Generalización por tokens (sin parsear AST) ─────────────────
78
+ /**
79
+ * Tokeniza una fórmula para alineamiento posicional. Mantiene los
80
+ * operadores como tokens propios.
81
+ */
82
+ function tokenize(s) {
83
+ // Separa identificadores y operadores; ignora whitespace.
84
+ const out = [];
85
+ const re = /[A-Za-z_][A-Za-z0-9_]*|->|→|<->|↔|\(|\)|,|[¬∧∨∀∃⊤⊥=]|[^\sA-Za-z0-9_(),→↔¬∧∨∀∃⊤⊥=]+/g;
86
+ let m;
87
+ while ((m = re.exec(s)) !== null) {
88
+ out.push(m[0]);
89
+ }
90
+ return out;
91
+ }
92
+ const IDENT_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
93
+ const RESERVED = new Set([
94
+ 'not',
95
+ 'and',
96
+ 'or',
97
+ 'implies',
98
+ 'iff',
99
+ 'forall',
100
+ 'exists',
101
+ 'true',
102
+ 'false',
103
+ ]);
104
+ /**
105
+ * Generaliza una lista de fórmulas string. Tokeniza, alinea
106
+ * posicionalmente, y donde haya desacuerdo introduce un placeholder
107
+ * fresh. Si la tokenización produce arrays de distinta longitud, no
108
+ * intenta align: devuelve el primer string y nonTrivial = false.
109
+ *
110
+ * Tabla de desacuerdos: si el mismo par (a, b) reaparece, recibe el
111
+ * mismo placeholder (consistencia, propiedad LGG).
112
+ *
113
+ * Para igualar reservadas (operadores, paréntesis) en todas las
114
+ * instancias, esas posiciones se mantienen literales. Solo los
115
+ * tokens-identificador se generalizan.
116
+ */
117
+ function generalizeFormulas(instances) {
118
+ if (instances.length === 0) {
119
+ return { statement: '', abstractionLevel: 0, nonTrivial: false };
120
+ }
121
+ if (instances.length === 1) {
122
+ const s = instances[0];
123
+ return { statement: s ?? '', abstractionLevel: 0, nonTrivial: false };
124
+ }
125
+ const tokenized = instances.map(tokenize);
126
+ const len = tokenized[0]?.length ?? 0;
127
+ for (const t of tokenized) {
128
+ if (t.length !== len) {
129
+ // No alineable: caemos al canonical string como aproximación.
130
+ return {
131
+ statement: instances[0] ?? '',
132
+ abstractionLevel: 0,
133
+ nonTrivial: false,
134
+ };
135
+ }
136
+ }
137
+ // Tabla de desacuerdos: clave = tupla de tokens en cada lado en
138
+ // esa posición. Usamos JSON.stringify para clave estable.
139
+ const table = new Map();
140
+ let freshCounter = 0;
141
+ const fresh = () => `?${freshCounter++}`;
142
+ const variables = [];
143
+ const outTokens = [];
144
+ for (let i = 0; i < len; i++) {
145
+ const slice = tokenized.map((t) => t[i] ?? '');
146
+ const allEqual = slice.every((tok) => tok === slice[0]);
147
+ if (allEqual) {
148
+ outTokens.push(slice[0] ?? '');
149
+ continue;
150
+ }
151
+ // Solo abstraemos posiciones identificadoras (no operadores).
152
+ const allIdent = slice.every((tok) => IDENT_RE.test(tok) && !RESERVED.has(tok));
153
+ if (!allIdent) {
154
+ // Desacuerdo en operador o palabra reservada → no alineable.
155
+ return {
156
+ statement: instances[0] ?? '',
157
+ abstractionLevel: 0,
158
+ nonTrivial: false,
159
+ };
160
+ }
161
+ const key = JSON.stringify(slice);
162
+ let v = table.get(key);
163
+ if (v === undefined) {
164
+ v = fresh();
165
+ table.set(key, v);
166
+ variables.push(v);
167
+ }
168
+ outTokens.push(v);
169
+ }
170
+ return {
171
+ statement: outTokens.join(' '),
172
+ abstractionLevel: variables.length,
173
+ nonTrivial: variables.length > 0,
174
+ };
175
+ }
176
+ /**
177
+ * Generaliza un grupo (lista de strings de conclusión, repetida
178
+ * tantas veces como instancias haya), opcionalmente capeando el
179
+ * abstractionLevel máximo.
180
+ *
181
+ * Si `preserveSemantic` está activo y la generalización no es
182
+ * instanciable de vuelta para cubrir todas las instancias, devuelve
183
+ * el literal de la primera instancia con abstractionLevel = 0.
184
+ */
185
+ function generalizeLemma(conclusions, options) {
186
+ const max = options?.maxAbstractionLevel ?? 3;
187
+ const preserve = options?.preserveSemantic ?? true;
188
+ const result = generalizeFormulas(conclusions);
189
+ if (result.abstractionLevel > max) {
190
+ // Si abstrajimos demasiado, retornamos el literal.
191
+ return {
192
+ statement: conclusions[0] ?? '',
193
+ abstractionLevel: 0,
194
+ nonTrivial: false,
195
+ };
196
+ }
197
+ if (preserve && result.nonTrivial) {
198
+ // Sanity check: verificar que el pattern instanciado en cada
199
+ // posición produce las conclusiones originales. Por construcción
200
+ // del algoritmo posicional, esto siempre se cumple si todos los
201
+ // tokens-identificador coinciden con los slots. Hacemos chequeo
202
+ // explícito para defender contra cambios futuros.
203
+ if (!verifyPatternCoversAll(result.statement, conclusions)) {
204
+ return {
205
+ statement: conclusions[0] ?? '',
206
+ abstractionLevel: 0,
207
+ nonTrivial: false,
208
+ };
209
+ }
210
+ }
211
+ return result;
212
+ }
213
+ /**
214
+ * Verifica que el pattern (con placeholders `?0`, `?1`, …) sea
215
+ * instanciable para todas las conclusiones del grupo. Es un check
216
+ * defensivo: para el algoritmo posicional, esto siempre se cumple
217
+ * por construcción.
218
+ */
219
+ function verifyPatternCoversAll(pattern, conclusions) {
220
+ const patTokens = tokenize(pattern);
221
+ for (const c of conclusions) {
222
+ const cTokens = tokenize(c);
223
+ if (cTokens.length !== patTokens.length)
224
+ return false;
225
+ const bindings = new Map();
226
+ for (let i = 0; i < patTokens.length; i++) {
227
+ const p = patTokens[i] ?? '';
228
+ const cc = cTokens[i] ?? '';
229
+ if (p.startsWith('?')) {
230
+ const prev = bindings.get(p);
231
+ if (prev === undefined) {
232
+ bindings.set(p, cc);
233
+ }
234
+ else if (prev !== cc) {
235
+ return false;
236
+ }
237
+ }
238
+ else if (p !== cc) {
239
+ return false;
240
+ }
241
+ }
242
+ }
243
+ return true;
244
+ }
245
+ //# sourceMappingURL=generalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalizer.js","sourceRoot":"","sources":["../../../src/reasoning/proof-mining/generalizer.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kEAAkE;AAClE,+DAA+D;AAC/D,EAAE;AACF,kEAAkE;AAClE,6DAA6D;AAC7D,wCAAwC;AACxC,EAAE;AACF,oBAAoB;AACpB,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,iEAAiE;AACjE,sDAAsD;AACtD,EAAE;AACF,8DAA8D;AAC9D,4DAA4D;AAC5D,EAAE;AACF,gEAAgE;AAChE,qEAAqE;AACrE,kEAAkE;AAClE,iEAAiE;AACjE,kEAAkE;AAClE,2CAA2C;;AAsB3C,0CAkBC;AAgED,gDA8DC;AAWD,0CA8BC;AA7MD,qEAAmF;AAenF;;;;GAIG;AACH,SAAgB,eAAe,CAAC,SAAiB,EAAE,WAAyB;IAC1E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClF,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,IAAI,IAAA,qCAAkB,EAAC,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAA,gCAAa,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO;QACL,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC;QAChD,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;QACzC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,CAAO;IAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACpC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACrC,8BAA8B;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;QACxD,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7D,CAAC;AAED,mEAAmE;AAEnE;;;GAGG;AACH,SAAS,QAAQ,CAAC,CAAS;IACzB,0DAA0D;IAC1D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,qFAAqF,CAAC;IACjG,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,KAAK;IACL,KAAK;IACL,IAAI;IACJ,SAAS;IACT,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;CACR,CAAC,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,SAAgB,kBAAkB,CAAC,SAAmB;IACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACrB,8DAA8D;YAC9D,OAAO;gBACL,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC7B,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,0DAA0D;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,YAAY,EAAE,EAAE,CAAC;IACzC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,6DAA6D;YAC7D,OAAO;gBACL,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC7B,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,GAAG,KAAK,EAAE,CAAC;YACZ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,gBAAgB,EAAE,SAAS,CAAC,MAAM;QAClC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC7B,WAAqB,EACrB,OAAsE;IAEtE,MAAM,GAAG,GAAG,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,EAAE,gBAAgB,IAAI,IAAI,CAAC;IACnD,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC;QAClC,mDAAmD;QACnD,OAAO;YACL,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE;YAC/B,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,6DAA6D;QAC7D,iEAAiE;QACjE,gEAAgE;QAChE,gEAAgE;QAChE,kDAAkD;QAClD,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;YAC3D,OAAO;gBACL,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC/B,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAe,EAAE,WAAqB;IACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { TheoremCache } from '../../runtime/theorem-cache';
2
+ import type { RankingWeights } from './ranker';
3
+ import type { MinedLemma, MiningOptions, MiningResult, ProofTrace, UsageStats } from './types';
4
+ export type { MinedLemma, MiningOptions, MiningResult, ProofStep, ProofTrace, UsageStats, } from './types';
5
+ export type { SubtreeCandidate, SubtreeGroup } from './extractor';
6
+ export type { GeneralizationResult } from './generalizer';
7
+ export type { RankingWeights } from './ranker';
8
+ export { extractSubtrees, groupSubtrees, subtreeKey, extractAuxiliaryLemmas, } from './extractor';
9
+ export { generalizeLemma, generalizeFormulas, generalizeTerms, } from './generalizer';
10
+ export { rankLemmas, scoreLemma, topK } from './ranker';
11
+ export { persistLemmas, recoverLemmas, recoverLemmaFromCache, MINED_LEMMA_PROVER, } from './persistence';
12
+ export { computeStats, statsToString } from './statistics';
13
+ /**
14
+ * Mina lemmas del corpus de proofs. Devuelve los lemmas ordenados
15
+ * por score descendente + stats agregadas.
16
+ *
17
+ * Esta es la entrada principal del módulo. No persiste por defecto;
18
+ * para meter al cache, pasar `cache` o usar `ProofMiner`.
19
+ */
20
+ export declare function mineLemmas(corpus: ProofTrace[], options?: MiningOptions & {
21
+ weights?: RankingWeights;
22
+ cache?: TheoremCache;
23
+ }): MiningResult;
24
+ /**
25
+ * `ProofMiner` es una clase fachada con estado interno: acumula
26
+ * lemmas a través de múltiples corpus, los persiste en un cache
27
+ * común, y expone consultas.
28
+ */
29
+ export declare class ProofMiner {
30
+ private readonly cache;
31
+ private readonly options;
32
+ private readonly weights;
33
+ private readonly seen;
34
+ private totalProofsAnalyzed;
35
+ private totalCandidatesFound;
36
+ constructor(opts?: MiningOptions & {
37
+ weights?: RankingWeights;
38
+ cache?: TheoremCache;
39
+ });
40
+ /**
41
+ * Procesa un corpus de proofs y acumula los lemmas en estado.
42
+ * Lemmas con el mismo `id` se mergean: usageCount += new, savings
43
+ * += new, sourceProofs se unifican.
44
+ */
45
+ mine(corpus: ProofTrace[]): MiningResult;
46
+ /**
47
+ * Devuelve los lemmas acumulados, rankeados.
48
+ */
49
+ all(): MinedLemma[];
50
+ /**
51
+ * Top-k del catálogo acumulado.
52
+ */
53
+ top(k: number): MinedLemma[];
54
+ /**
55
+ * Stats agregadas.
56
+ */
57
+ stats(): UsageStats;
58
+ /** Cache subyacente (lectura). */
59
+ getCache(): TheoremCache;
60
+ clear(): void;
61
+ }
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/proof-mining/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAY3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,YAAY,EAEZ,UAAU,EACV,UAAU,EACX,MAAM,SAAS,CAAC;AAIjB,YAAY,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAsF3D;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,CAAC,EAAE,aAAa,GAAG;IAAE,OAAO,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE,GAC3E,YAAY,CA0Bd;AAID;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IACtD,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,oBAAoB,CAAK;gBAErB,IAAI,CAAC,EAAE,aAAa,GAAG;QAAE,OAAO,CAAC,EAAE,cAAc,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,CAAA;KAAE;IAMrF;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY;IAkCxC;;OAEG;IACH,GAAG,IAAI,UAAU,EAAE;IAInB;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAI5B;;OAEG;IACH,KAAK,IAAI,UAAU;IAQnB,kCAAkC;IAClC,QAAQ,IAAI,YAAY;IAIxB,KAAK,IAAI,IAAI;CAKd"}