@stevenvo780/st-lang 4.14.1 → 4.15.1
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.
- package/dist/format/stnb/__tests__/executor.test.d.ts +2 -0
- package/dist/format/stnb/__tests__/executor.test.d.ts.map +1 -0
- package/dist/format/stnb/__tests__/executor.test.js +140 -0
- package/dist/format/stnb/__tests__/executor.test.js.map +1 -0
- package/dist/format/stnb/__tests__/parser.test.d.ts +2 -0
- package/dist/format/stnb/__tests__/parser.test.d.ts.map +1 -0
- package/dist/format/stnb/__tests__/parser.test.js +119 -0
- package/dist/format/stnb/__tests__/parser.test.js.map +1 -0
- package/dist/format/stnb/__tests__/renderer.test.d.ts +2 -0
- package/dist/format/stnb/__tests__/renderer.test.d.ts.map +1 -0
- package/dist/format/stnb/__tests__/renderer.test.js +109 -0
- package/dist/format/stnb/__tests__/renderer.test.js.map +1 -0
- package/dist/format/stnb/__tests__/roundtrip.test.d.ts +2 -0
- package/dist/format/stnb/__tests__/roundtrip.test.d.ts.map +1 -0
- package/dist/format/stnb/__tests__/roundtrip.test.js +91 -0
- package/dist/format/stnb/__tests__/roundtrip.test.js.map +1 -0
- package/dist/format/stnb/__tests__/serializer.test.d.ts +2 -0
- package/dist/format/stnb/__tests__/serializer.test.d.ts.map +1 -0
- package/dist/format/stnb/__tests__/serializer.test.js +60 -0
- package/dist/format/stnb/__tests__/serializer.test.js.map +1 -0
- package/dist/format/stnb/executor.d.ts +29 -0
- package/dist/format/stnb/executor.d.ts.map +1 -0
- package/dist/format/stnb/executor.js +139 -0
- package/dist/format/stnb/executor.js.map +1 -0
- package/dist/format/stnb/index.d.ts +19 -0
- package/dist/format/stnb/index.d.ts.map +1 -0
- package/dist/format/stnb/index.js +28 -0
- package/dist/format/stnb/index.js.map +1 -0
- package/dist/format/stnb/renderer-html.d.ts +11 -0
- package/dist/format/stnb/renderer-html.d.ts.map +1 -0
- package/dist/format/stnb/renderer-html.js +180 -0
- package/dist/format/stnb/renderer-html.js.map +1 -0
- package/dist/format/stnb/renderer-markdown.d.ts +13 -0
- package/dist/format/stnb/renderer-markdown.d.ts.map +1 -0
- package/dist/format/stnb/renderer-markdown.js +92 -0
- package/dist/format/stnb/renderer-markdown.js.map +1 -0
- package/dist/format/stnb/serializer.d.ts +14 -0
- package/dist/format/stnb/serializer.d.ts.map +1 -0
- package/dist/format/stnb/serializer.js +21 -0
- package/dist/format/stnb/serializer.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.d.ts +2 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.js +141 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/differential.test.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.d.ts +2 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.js +55 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/examples.test.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.d.ts +2 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.js +149 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/parser.test.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.d.ts +2 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.js +105 -0
- package/dist/logic/profiles/dl-hybrid/__tests__/tableau.test.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/ast.d.ts +160 -0
- package/dist/logic/profiles/dl-hybrid/ast.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/ast.js +261 -0
- package/dist/logic/profiles/dl-hybrid/ast.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/differential.d.ts +61 -0
- package/dist/logic/profiles/dl-hybrid/differential.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/differential.js +291 -0
- package/dist/logic/profiles/dl-hybrid/differential.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/index.d.ts +10 -0
- package/dist/logic/profiles/dl-hybrid/index.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/index.js +90 -0
- package/dist/logic/profiles/dl-hybrid/index.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/parser.d.ts +8 -0
- package/dist/logic/profiles/dl-hybrid/parser.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/parser.js +410 -0
- package/dist/logic/profiles/dl-hybrid/parser.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/profile.d.ts +23 -0
- package/dist/logic/profiles/dl-hybrid/profile.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/profile.js +122 -0
- package/dist/logic/profiles/dl-hybrid/profile.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/semantics.d.ts +16 -0
- package/dist/logic/profiles/dl-hybrid/semantics.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/semantics.js +181 -0
- package/dist/logic/profiles/dl-hybrid/semantics.js.map +1 -0
- package/dist/logic/profiles/dl-hybrid/tableau.d.ts +38 -0
- package/dist/logic/profiles/dl-hybrid/tableau.d.ts.map +1 -0
- package/dist/logic/profiles/dl-hybrid/tableau.js +289 -0
- package/dist/logic/profiles/dl-hybrid/tableau.js.map +1 -0
- package/dist/reasoning/dl-hybrid/__tests__/invariant.test.d.ts +2 -0
- package/dist/reasoning/dl-hybrid/__tests__/invariant.test.d.ts.map +1 -0
- package/dist/reasoning/dl-hybrid/__tests__/invariant.test.js +74 -0
- package/dist/reasoning/dl-hybrid/__tests__/invariant.test.js.map +1 -0
- package/dist/reasoning/dl-hybrid/index.d.ts +3 -0
- package/dist/reasoning/dl-hybrid/index.d.ts.map +1 -0
- package/dist/reasoning/dl-hybrid/index.js +16 -0
- package/dist/reasoning/dl-hybrid/index.js.map +1 -0
- package/dist/reasoning/dl-hybrid/invariant-search.d.ts +39 -0
- package/dist/reasoning/dl-hybrid/invariant-search.d.ts.map +1 -0
- package/dist/reasoning/dl-hybrid/invariant-search.js +188 -0
- package/dist/reasoning/dl-hybrid/invariant-search.js.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.d.ts +2 -0
- package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.js +72 -0
- package/dist/reasoning/lemma-rag/__tests__/benchmarks.test.js.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/embedding.test.d.ts +2 -0
- package/dist/reasoning/lemma-rag/__tests__/embedding.test.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/embedding.test.js +102 -0
- package/dist/reasoning/lemma-rag/__tests__/embedding.test.js.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/integration.test.d.ts +2 -0
- package/dist/reasoning/lemma-rag/__tests__/integration.test.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/integration.test.js +40 -0
- package/dist/reasoning/lemma-rag/__tests__/integration.test.js.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/query.test.d.ts +2 -0
- package/dist/reasoning/lemma-rag/__tests__/query.test.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/query.test.js +136 -0
- package/dist/reasoning/lemma-rag/__tests__/query.test.js.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/retrieval.test.d.ts +2 -0
- package/dist/reasoning/lemma-rag/__tests__/retrieval.test.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/__tests__/retrieval.test.js +147 -0
- package/dist/reasoning/lemma-rag/__tests__/retrieval.test.js.map +1 -0
- package/dist/reasoning/lemma-rag/benchmarks.d.ts +30 -0
- package/dist/reasoning/lemma-rag/benchmarks.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/benchmarks.js +177 -0
- package/dist/reasoning/lemma-rag/benchmarks.js.map +1 -0
- package/dist/reasoning/lemma-rag/embedding.d.ts +26 -0
- package/dist/reasoning/lemma-rag/embedding.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/embedding.js +243 -0
- package/dist/reasoning/lemma-rag/embedding.js.map +1 -0
- package/dist/reasoning/lemma-rag/index-store.d.ts +35 -0
- package/dist/reasoning/lemma-rag/index-store.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/index-store.js +105 -0
- package/dist/reasoning/lemma-rag/index-store.js.map +1 -0
- package/dist/reasoning/lemma-rag/index.d.ts +9 -0
- package/dist/reasoning/lemma-rag/index.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/index.js +34 -0
- package/dist/reasoning/lemma-rag/index.js.map +1 -0
- package/dist/reasoning/lemma-rag/query.d.ts +48 -0
- package/dist/reasoning/lemma-rag/query.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/query.js +92 -0
- package/dist/reasoning/lemma-rag/query.js.map +1 -0
- package/dist/reasoning/lemma-rag/retrieval.d.ts +33 -0
- package/dist/reasoning/lemma-rag/retrieval.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/retrieval.js +123 -0
- package/dist/reasoning/lemma-rag/retrieval.js.map +1 -0
- package/dist/reasoning/lemma-rag/types.d.ts +52 -0
- package/dist/reasoning/lemma-rag/types.d.ts.map +1 -0
- package/dist/reasoning/lemma-rag/types.js +13 -0
- package/dist/reasoning/lemma-rag/types.js.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/extractor.test.d.ts +2 -0
- package/dist/reasoning/proof-mining/__tests__/extractor.test.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/extractor.test.js +263 -0
- package/dist/reasoning/proof-mining/__tests__/extractor.test.js.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/generalizer.test.d.ts +2 -0
- package/dist/reasoning/proof-mining/__tests__/generalizer.test.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/generalizer.test.js +123 -0
- package/dist/reasoning/proof-mining/__tests__/generalizer.test.js.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/integration.test.d.ts +2 -0
- package/dist/reasoning/proof-mining/__tests__/integration.test.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/integration.test.js +128 -0
- package/dist/reasoning/proof-mining/__tests__/integration.test.js.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/persistence.test.d.ts +2 -0
- package/dist/reasoning/proof-mining/__tests__/persistence.test.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/persistence.test.js +119 -0
- package/dist/reasoning/proof-mining/__tests__/persistence.test.js.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/ranker.test.d.ts +2 -0
- package/dist/reasoning/proof-mining/__tests__/ranker.test.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/__tests__/ranker.test.js +93 -0
- package/dist/reasoning/proof-mining/__tests__/ranker.test.js.map +1 -0
- package/dist/reasoning/proof-mining/extractor.d.ts +73 -0
- package/dist/reasoning/proof-mining/extractor.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/extractor.js +170 -0
- package/dist/reasoning/proof-mining/extractor.js.map +1 -0
- package/dist/reasoning/proof-mining/generalizer.d.ts +46 -0
- package/dist/reasoning/proof-mining/generalizer.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/generalizer.js +245 -0
- package/dist/reasoning/proof-mining/generalizer.js.map +1 -0
- package/dist/reasoning/proof-mining/index.d.ts +62 -0
- package/dist/reasoning/proof-mining/index.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/index.js +235 -0
- package/dist/reasoning/proof-mining/index.js.map +1 -0
- package/dist/reasoning/proof-mining/persistence.d.ts +35 -0
- package/dist/reasoning/proof-mining/persistence.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/persistence.js +126 -0
- package/dist/reasoning/proof-mining/persistence.js.map +1 -0
- package/dist/reasoning/proof-mining/ranker.d.ts +29 -0
- package/dist/reasoning/proof-mining/ranker.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/ranker.js +71 -0
- package/dist/reasoning/proof-mining/ranker.js.map +1 -0
- package/dist/reasoning/proof-mining/statistics.d.ts +11 -0
- package/dist/reasoning/proof-mining/statistics.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/statistics.js +44 -0
- package/dist/reasoning/proof-mining/statistics.js.map +1 -0
- package/dist/reasoning/proof-mining/types.d.ts +117 -0
- package/dist/reasoning/proof-mining/types.d.ts.map +1 -0
- package/dist/reasoning/proof-mining/types.js +24 -0
- package/dist/reasoning/proof-mining/types.js.map +1 -0
- package/package.json +31 -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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|