@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,16 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST dL-Hybrid — Reasoning helpers
4
+ // ============================================================
5
+ // API pública para análisis de invariantes diferenciales (regla de
6
+ // Platzer 2010). Estos helpers viven fuera del core del perfil para
7
+ // no inflar el bundle del runtime; quien sólo necesite parse + check
8
+ // puede ignorarlos.
9
+ // ============================================================
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.describeVerdict = exports.suggestInvariants = exports.checkDifferentialInvariant = void 0;
12
+ var invariant_search_1 = require("./invariant-search");
13
+ Object.defineProperty(exports, "checkDifferentialInvariant", { enumerable: true, get: function () { return invariant_search_1.checkDifferentialInvariant; } });
14
+ Object.defineProperty(exports, "suggestInvariants", { enumerable: true, get: function () { return invariant_search_1.suggestInvariants; } });
15
+ Object.defineProperty(exports, "describeVerdict", { enumerable: true, get: function () { return invariant_search_1.describeVerdict; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/dl-hybrid/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAC/D,mEAAmE;AACnE,oEAAoE;AACpE,qEAAqE;AACrE,oBAAoB;AACpB,+DAA+D;;;AAG/D,uDAI4B;AAH1B,8HAAA,0BAA0B,OAAA;AAC1B,qHAAA,iBAAiB,OAAA;AACjB,mHAAA,eAAe,OAAA"}
@@ -0,0 +1,39 @@
1
+ import type { DLTerm, OdeSystem, State } from '../../logic/profiles/dl-hybrid';
2
+ /** Veredicto sobre un candidato de invariante diferencial. */
3
+ export type InvariantVerdict = {
4
+ kind: 'invariant';
5
+ reason: 'exact' | 'lie-nonnegative';
6
+ samples: number;
7
+ } | {
8
+ kind: 'not-invariant';
9
+ counterexample: State;
10
+ lieValue: number;
11
+ } | {
12
+ kind: 'unknown';
13
+ reason: string;
14
+ };
15
+ export interface InvariantOptions {
16
+ /** Conjunto de estados a verificar la condición L_f(p) ≥ 0. */
17
+ samples?: State[];
18
+ /** Malla por defecto si `samples` no se pasa. */
19
+ meshValues?: number[];
20
+ }
21
+ /**
22
+ * Verifica si `p ≥ 0` es invariante diferencial del sistema bajo el
23
+ * dominio implícito (sin restringir). Chequea L_f(p) ≥ 0 en una malla.
24
+ */
25
+ export declare function checkDifferentialInvariant(p: DLTerm, system: OdeSystem, opts?: InvariantOptions): InvariantVerdict;
26
+ /**
27
+ * Sugiere candidatos típicos de invariante diferencial para un sistema
28
+ * ODE y devuelve los que satisfacen la condición suficiente. Si no
29
+ * encuentra nada, devuelve lista vacía.
30
+ */
31
+ export interface CandidateResult {
32
+ candidate: DLTerm;
33
+ description: string;
34
+ verdict: InvariantVerdict;
35
+ }
36
+ export declare function suggestInvariants(system: OdeSystem, opts?: InvariantOptions): CandidateResult[];
37
+ /** Formatea un veredicto para inspección humana. */
38
+ export declare function describeVerdict(c: CandidateResult): string;
39
+ //# sourceMappingURL=invariant-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant-search.d.ts","sourceRoot":"","sources":["../../../src/reasoning/dl-hybrid/invariant-search.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAY/E,8DAA8D;AAC9D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,cAAc,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;IAClB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAMD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE,gBAAgB,GACtB,gBAAgB,CA8DlB;AAgCD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe,EAAE,CAmD/F;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAS1D"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST dL-Hybrid — Búsqueda heurística de invariantes diferenciales
4
+ // ============================================================
5
+ // Dado un sistema ODE y una propiedad objetivo de la forma p(x) ≥ 0,
6
+ // determina si p es un invariante diferencial bajo la regla:
7
+ //
8
+ // Si L_f(p) ≥ 0 en todo punto del dominio Q, entonces p ≥ 0 es
9
+ // invariante a lo largo de la evolución continua (Platzer 2010,
10
+ // "Differential Invariants for ODEs").
11
+ //
12
+ // Esta es una condición *suficiente*: si la chequeamos en una malla de
13
+ // muestras y se cumple en todas, reportamos `likely-invariant`; si falla
14
+ // en alguna, `not-invariant`; si la derivada de Lie es identicamente
15
+ // cero, el invariante es exacto (consonant con el flujo).
16
+ //
17
+ // La búsqueda automática prueba algunos candidatos típicos:
18
+ // • p(x) = x - c (semihalfplanes)
19
+ // • p(x) = c - x (cotas superiores)
20
+ // • p(x, y) = x² + y² - r² (esferas / círculos en R²)
21
+ // ============================================================
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.checkDifferentialInvariant = checkDifferentialInvariant;
24
+ exports.suggestInvariants = suggestInvariants;
25
+ exports.describeVerdict = describeVerdict;
26
+ const dl_hybrid_1 = require("../../logic/profiles/dl-hybrid");
27
+ const DEFAULTS = {
28
+ meshValues: [-2, -1, -0.5, 0, 0.5, 1, 2],
29
+ };
30
+ /**
31
+ * Verifica si `p ≥ 0` es invariante diferencial del sistema bajo el
32
+ * dominio implícito (sin restringir). Chequea L_f(p) ≥ 0 en una malla.
33
+ */
34
+ function checkDifferentialInvariant(p, system, opts) {
35
+ // El chequeo de invariante NO requiere que la ODE sea soluble cerrada:
36
+ // basta con poder calcular la derivada de Lie y muestrearla. La
37
+ // clasificación se consulta para distinguir "no podemos evaluar"
38
+ // (genuinamente unknown) de "sistema acoplado pero el invariante se
39
+ // verifica numéricamente".
40
+ const lie = (0, dl_hybrid_1.lieDerivative)(p, system);
41
+ // Si L_f(p) se simplifica a 0 → invariante exacto.
42
+ if (lie.kind === 'const' && lie.value === 0) {
43
+ return { kind: 'invariant', reason: 'exact', samples: 0 };
44
+ }
45
+ // Caso general: chequeo en una malla.
46
+ // Variables relevantes para la malla: las del sistema ODE más las
47
+ // variables libres que aparezcan en la derivada de Lie (ej. ODEs
48
+ // acopladas que mencionan `y` aunque `y` no tenga su propia ecuación).
49
+ const meshVars = new Set();
50
+ for (const eq of system.equations)
51
+ meshVars.add(eq.varName);
52
+ const collectVars = (e) => {
53
+ switch (e.kind) {
54
+ case 'var':
55
+ meshVars.add(e.name);
56
+ return;
57
+ case 'const':
58
+ return;
59
+ case 'add':
60
+ case 'mul':
61
+ e.args.forEach(collectVars);
62
+ return;
63
+ case 'sub':
64
+ case 'div':
65
+ collectVars(e.left);
66
+ collectVars(e.right);
67
+ return;
68
+ case 'pow':
69
+ collectVars(e.base);
70
+ collectVars(e.exp);
71
+ return;
72
+ case 'neg':
73
+ case 'sin':
74
+ case 'cos':
75
+ case 'tan':
76
+ case 'log':
77
+ case 'exp':
78
+ collectVars(e.arg);
79
+ return;
80
+ }
81
+ };
82
+ collectVars(lie);
83
+ const samples = opts?.samples ?? buildMesh(Array.from(meshVars), opts?.meshValues ?? DEFAULTS.meshValues);
84
+ let checked = 0;
85
+ for (const s of samples) {
86
+ const val = (0, dl_hybrid_1.evalSym)(lie, s);
87
+ if (Number.isNaN(val))
88
+ continue;
89
+ checked++;
90
+ if (val < -1e-9) {
91
+ return { kind: 'not-invariant', counterexample: s, lieValue: val };
92
+ }
93
+ }
94
+ if (checked === 0) {
95
+ return { kind: 'unknown', reason: 'Ninguna muestra evaluable; ODE puede involucrar divisiones.' };
96
+ }
97
+ return { kind: 'invariant', reason: 'lie-nonnegative', samples: checked };
98
+ }
99
+ /** Construye una malla cartesiana sobre el conjunto de variables dado. */
100
+ function buildMesh(vars, values) {
101
+ if (vars.length === 0)
102
+ return [new Map()];
103
+ if (vars.length > 3) {
104
+ // Modo light para evitar explosión combinatoria.
105
+ const result = [];
106
+ for (const v of values) {
107
+ const s = new Map();
108
+ for (const x of vars)
109
+ s.set(x, v);
110
+ result.push(s);
111
+ }
112
+ return result;
113
+ }
114
+ const result = [];
115
+ const recurse = (idx, current) => {
116
+ if (idx === vars.length) {
117
+ result.push(new Map(current));
118
+ return;
119
+ }
120
+ const name = vars[idx];
121
+ if (!name)
122
+ return;
123
+ for (const val of values) {
124
+ current.set(name, val);
125
+ recurse(idx + 1, current);
126
+ }
127
+ };
128
+ recurse(0, new Map());
129
+ return result;
130
+ }
131
+ function suggestInvariants(system, opts) {
132
+ const found = [];
133
+ const vars = system.equations.map((e) => e.varName);
134
+ // 1) Halfplanes p = xᵢ - c y p = c - xᵢ para algunos c.
135
+ for (const v of vars) {
136
+ for (const c of [-1, 0, 1]) {
137
+ const upper = c === 0 ? (0, dl_hybrid_1.variable)(v) : (0, dl_hybrid_1.minus)((0, dl_hybrid_1.variable)(v), (0, dl_hybrid_1.num)(c));
138
+ const verdict = checkDifferentialInvariant(upper, system, opts);
139
+ if (verdict.kind === 'invariant') {
140
+ found.push({
141
+ candidate: upper,
142
+ description: `${v} ≥ ${c}`,
143
+ verdict,
144
+ });
145
+ }
146
+ const lower = (0, dl_hybrid_1.minus)((0, dl_hybrid_1.num)(c), (0, dl_hybrid_1.variable)(v));
147
+ const v2 = checkDifferentialInvariant(lower, system, opts);
148
+ if (v2.kind === 'invariant') {
149
+ found.push({
150
+ candidate: lower,
151
+ description: `${v} ≤ ${c}`,
152
+ verdict: v2,
153
+ });
154
+ }
155
+ }
156
+ }
157
+ // 2) Esferas x² + y² - r² (si hay al menos 2 vars).
158
+ if (vars.length >= 2) {
159
+ const x = vars[0];
160
+ const y = vars[1];
161
+ if (x && y) {
162
+ for (const r of [1, 2]) {
163
+ const sphere = (0, dl_hybrid_1.minus)((0, dl_hybrid_1.plus)((0, dl_hybrid_1.power)((0, dl_hybrid_1.variable)(x), 2), (0, dl_hybrid_1.power)((0, dl_hybrid_1.variable)(y), 2)), (0, dl_hybrid_1.num)(r * r));
164
+ const verdict = checkDifferentialInvariant(sphere, system, opts);
165
+ if (verdict.kind === 'invariant') {
166
+ found.push({
167
+ candidate: sphere,
168
+ description: `${x}² + ${y}² ≤ ${r * r}`,
169
+ verdict,
170
+ });
171
+ }
172
+ }
173
+ }
174
+ }
175
+ return found;
176
+ }
177
+ /** Formatea un veredicto para inspección humana. */
178
+ function describeVerdict(c) {
179
+ switch (c.verdict.kind) {
180
+ case 'invariant':
181
+ return `[OK] ${c.description} (term=${(0, dl_hybrid_1.termToString)(c.candidate)}) reason=${c.verdict.reason}, samples=${c.verdict.samples}`;
182
+ case 'not-invariant':
183
+ return `[NO] ${c.description} (term=${(0, dl_hybrid_1.termToString)(c.candidate)}) L_f(p)=${c.verdict.lieValue} en contra-ejemplo`;
184
+ case 'unknown':
185
+ return `[?] ${c.description} reason=${c.verdict.reason}`;
186
+ }
187
+ }
188
+ //# sourceMappingURL=invariant-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant-search.js","sourceRoot":"","sources":["../../../src/reasoning/dl-hybrid/invariant-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=benchmarks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmarks.test.d.ts","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/benchmarks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Tests: benchmarks.ts — sanity checks sobre el test-set de recall
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const benchmarks_1 = require("../benchmarks");
8
+ const standard_1 = require("../../../tooling/lemma-library/standard");
9
+ (0, vitest_1.describe)('BENCHMARK_PAIRS', () => {
10
+ (0, vitest_1.it)('tiene exactamente 20 pares', () => {
11
+ (0, vitest_1.expect)(benchmarks_1.BENCHMARK_PAIRS.length).toBe(20);
12
+ });
13
+ (0, vitest_1.it)('todos los pares tienen query no vacía', () => {
14
+ for (const pair of benchmarks_1.BENCHMARK_PAIRS) {
15
+ (0, vitest_1.expect)(pair.query.trim().length).toBeGreaterThan(0);
16
+ }
17
+ });
18
+ (0, vitest_1.it)('todos los pares tienen expectedId no vacío', () => {
19
+ for (const pair of benchmarks_1.BENCHMARK_PAIRS) {
20
+ (0, vitest_1.expect)(pair.expectedId.trim().length).toBeGreaterThan(0);
21
+ }
22
+ });
23
+ });
24
+ (0, vitest_1.describe)('runBenchmark sobre standardLibrary', () => {
25
+ const lemmas = (0, standard_1.standardLibrary)().all();
26
+ (0, vitest_1.it)('devuelve 3 resultados (keyword, embedding, hybrid)', () => {
27
+ const results = (0, benchmarks_1.runBenchmark)(lemmas);
28
+ (0, vitest_1.expect)(results.length).toBe(3);
29
+ const methods = results.map((r) => r.method);
30
+ (0, vitest_1.expect)(methods).toContain('keyword');
31
+ (0, vitest_1.expect)(methods).toContain('embedding');
32
+ (0, vitest_1.expect)(methods).toContain('hybrid');
33
+ });
34
+ (0, vitest_1.it)('hybrid Recall@1 >= keyword Recall@1', () => {
35
+ const results = (0, benchmarks_1.runBenchmark)(lemmas);
36
+ const keyword = results.find((r) => r.method === 'keyword');
37
+ const hybrid = results.find((r) => r.method === 'hybrid');
38
+ (0, vitest_1.expect)(hybrid.recallAt1).toBeGreaterThanOrEqual(keyword.recallAt1 * 0.8);
39
+ });
40
+ (0, vitest_1.it)('hybrid Recall@5 >= embedding Recall@5', () => {
41
+ const results = (0, benchmarks_1.runBenchmark)(lemmas);
42
+ const embedding = results.find((r) => r.method === 'embedding');
43
+ const hybrid = results.find((r) => r.method === 'hybrid');
44
+ // hybrid debería ser al menos tan bueno como embedding solo a R@5
45
+ (0, vitest_1.expect)(hybrid.recallAt5).toBeGreaterThanOrEqual(embedding.recallAt5 * 0.8);
46
+ });
47
+ (0, vitest_1.it)('recall values están en [0, 1]', () => {
48
+ const results = (0, benchmarks_1.runBenchmark)(lemmas);
49
+ for (const r of results) {
50
+ (0, vitest_1.expect)(r.recallAt1).toBeGreaterThanOrEqual(0);
51
+ (0, vitest_1.expect)(r.recallAt1).toBeLessThanOrEqual(1);
52
+ (0, vitest_1.expect)(r.recallAt3).toBeGreaterThanOrEqual(0);
53
+ (0, vitest_1.expect)(r.recallAt3).toBeLessThanOrEqual(1);
54
+ (0, vitest_1.expect)(r.recallAt5).toBeGreaterThanOrEqual(0);
55
+ (0, vitest_1.expect)(r.recallAt5).toBeLessThanOrEqual(1);
56
+ }
57
+ });
58
+ });
59
+ (0, vitest_1.describe)('formatBenchmarkResults', () => {
60
+ (0, vitest_1.it)('devuelve string legible con los métodos', () => {
61
+ const results = (0, benchmarks_1.runBenchmark)((0, standard_1.standardLibrary)().all());
62
+ const text = (0, benchmarks_1.formatBenchmarkResults)(results);
63
+ (0, vitest_1.expect)(text).toContain('keyword');
64
+ (0, vitest_1.expect)(text).toContain('hybrid');
65
+ (0, vitest_1.expect)(text).toContain('R@1');
66
+ });
67
+ (0, vitest_1.it)('devuelve mensaje cuando no hay resultados', () => {
68
+ const text = (0, benchmarks_1.formatBenchmarkResults)([]);
69
+ (0, vitest_1.expect)(text.length).toBeGreaterThan(0);
70
+ });
71
+ });
72
+ //# sourceMappingURL=benchmarks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmarks.test.js","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/benchmarks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=embedding.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.test.d.ts","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/embedding.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Tests: HashEmbedding — propiedades del vector de embedding
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const embedding_1 = require("../embedding");
8
+ const types_1 = require("../types");
9
+ (0, vitest_1.describe)('hashEmbed — dimensión y tipos', () => {
10
+ (0, vitest_1.it)('devuelve un Float32Array de dimensión EMBEDDING_DIM', () => {
11
+ const v = (0, embedding_1.hashEmbed)('P → Q');
12
+ (0, vitest_1.expect)(v).toBeInstanceOf(Float32Array);
13
+ (0, vitest_1.expect)(v.length).toBe(types_1.EMBEDDING_DIM);
14
+ });
15
+ (0, vitest_1.it)('no contiene NaN ni Infinity', () => {
16
+ const v = (0, embedding_1.hashEmbed)('∀x. P(x) ∧ Q(x)');
17
+ for (let i = 0; i < v.length; i++) {
18
+ (0, vitest_1.expect)(Number.isFinite(v[i])).toBe(true);
19
+ }
20
+ });
21
+ (0, vitest_1.it)('vector vacío no tiene NaN', () => {
22
+ const v = (0, embedding_1.hashEmbed)('');
23
+ for (let i = 0; i < v.length; i++) {
24
+ (0, vitest_1.expect)(Number.isFinite(v[i])).toBe(true);
25
+ }
26
+ });
27
+ (0, vitest_1.it)('EMBEDDING_DIM es 256', () => {
28
+ (0, vitest_1.expect)(types_1.EMBEDDING_DIM).toBe(256);
29
+ });
30
+ });
31
+ (0, vitest_1.describe)('hashEmbed — determinismo', () => {
32
+ (0, vitest_1.it)('la misma fórmula produce el mismo vector (llamada simple)', () => {
33
+ const f = '(P ∧ Q) → P';
34
+ const v1 = (0, embedding_1.hashEmbed)(f);
35
+ const v2 = (0, embedding_1.hashEmbed)(f);
36
+ (0, vitest_1.expect)(Array.from(v1)).toEqual(Array.from(v2));
37
+ });
38
+ (0, vitest_1.it)('la misma fórmula produce el mismo vector (llamadas repetidas)', () => {
39
+ const f = '¬¬P → P';
40
+ const vecs = Array.from({ length: 5 }, () => (0, embedding_1.hashEmbed)(f));
41
+ for (const v of vecs) {
42
+ (0, vitest_1.expect)(Array.from(v)).toEqual(Array.from(vecs[0]));
43
+ }
44
+ });
45
+ (0, vitest_1.it)('fórmulas diferentes producen vectores diferentes', () => {
46
+ const v1 = (0, embedding_1.hashEmbed)('P → Q');
47
+ const v2 = (0, embedding_1.hashEmbed)('P ∧ Q');
48
+ const diff = Array.from(v1).reduce((acc, x, i) => acc + Math.abs(x - (v2[i] ?? 0)), 0);
49
+ (0, vitest_1.expect)(diff).toBeGreaterThan(0);
50
+ });
51
+ });
52
+ (0, vitest_1.describe)('hashEmbed — normalización L2', () => {
53
+ (0, vitest_1.it)('el vector normalizado tiene norma ≈ 1', () => {
54
+ const v = (0, embedding_1.hashEmbed)('P ∨ ¬P');
55
+ let norm = 0;
56
+ for (let i = 0; i < v.length; i++)
57
+ norm += (v[i] ?? 0) ** 2;
58
+ (0, vitest_1.expect)(Math.sqrt(norm)).toBeCloseTo(1.0, 5);
59
+ });
60
+ (0, vitest_1.it)('normalizeEmbedding(zero) no produce NaN', () => {
61
+ const zero = new Float32Array(types_1.EMBEDDING_DIM);
62
+ const norm = (0, embedding_1.normalizeEmbedding)(zero);
63
+ for (let i = 0; i < norm.length; i++) {
64
+ (0, vitest_1.expect)(Number.isFinite(norm[i])).toBe(true);
65
+ }
66
+ });
67
+ (0, vitest_1.it)('normalizeEmbedding idempotente sobre vector ya normalizado', () => {
68
+ const v = (0, embedding_1.hashEmbed)('□P → P');
69
+ const v2 = (0, embedding_1.normalizeEmbedding)(v);
70
+ let norm = 0;
71
+ for (let i = 0; i < v2.length; i++)
72
+ norm += (v2[i] ?? 0) ** 2;
73
+ (0, vitest_1.expect)(Math.sqrt(norm)).toBeCloseTo(1.0, 5);
74
+ });
75
+ });
76
+ (0, vitest_1.describe)('hashEmbed — localidad semántica', () => {
77
+ (0, vitest_1.it)('commutativity: P∧Q y Q∧P tienen similarity > 0.5', () => {
78
+ const v1 = (0, embedding_1.hashEmbed)('P ∧ Q');
79
+ const v2 = (0, embedding_1.hashEmbed)('Q ∧ P');
80
+ let dot = 0;
81
+ for (let i = 0; i < v1.length; i++)
82
+ dot += (v1[i] ?? 0) * (v2[i] ?? 0);
83
+ (0, vitest_1.expect)(dot).toBeGreaterThan(0.5);
84
+ });
85
+ (0, vitest_1.it)('fórmulas modales cercanas tienen similarity > 0.3', () => {
86
+ const v1 = (0, embedding_1.hashEmbed)('□P → P');
87
+ const v2 = (0, embedding_1.hashEmbed)('□Q → Q');
88
+ let dot = 0;
89
+ for (let i = 0; i < v1.length; i++)
90
+ dot += (v1[i] ?? 0) * (v2[i] ?? 0);
91
+ (0, vitest_1.expect)(dot).toBeGreaterThan(0.3);
92
+ });
93
+ (0, vitest_1.it)('fórmulas de distintos dominios tienen similarity < 0.95', () => {
94
+ const vProp = (0, embedding_1.hashEmbed)('P ∧ Q → P');
95
+ const vArith = (0, embedding_1.hashEmbed)('∀n. n + 0 = n');
96
+ let dot = 0;
97
+ for (let i = 0; i < vProp.length; i++)
98
+ dot += (vProp[i] ?? 0) * (vArith[i] ?? 0);
99
+ (0, vitest_1.expect)(dot).toBeLessThan(0.95);
100
+ });
101
+ });
102
+ //# sourceMappingURL=embedding.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.test.js","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/embedding.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Tests: integration — RAG sobre la biblioteca real (standardLibrary)
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const vitest_1 = require("vitest");
7
+ const query_1 = require("../query");
8
+ const standard_1 = require("../../../tooling/lemma-library/standard");
9
+ (0, vitest_1.describe)('LemmaRAG sobre standardLibrary real', () => {
10
+ const lib = (0, standard_1.standardLibrary)();
11
+ const lemmas = lib.all();
12
+ (0, vitest_1.it)('indexa todos los lemas sin errores', () => {
13
+ const rag = new query_1.LemmaRAG();
14
+ (0, vitest_1.expect)(() => rag.index(lemmas)).not.toThrow();
15
+ (0, vitest_1.expect)(rag.size()).toBe(lemmas.length);
16
+ });
17
+ (0, vitest_1.it)('query de "double negation" recupera prop.double-negation-elim en top-3', () => {
18
+ const rag = new query_1.LemmaRAG();
19
+ rag.index(lemmas);
20
+ const results = rag.query('double negation elimination', { k: 3 });
21
+ const ids = results.map((r) => r.lemma.id);
22
+ (0, vitest_1.expect)(ids).toContain('prop.double-negation-elim');
23
+ });
24
+ (0, vitest_1.it)('query de "modus ponens" recupera prop.modus-ponens en top-5', () => {
25
+ const rag = new query_1.LemmaRAG();
26
+ rag.index(lemmas);
27
+ const results = rag.query('modus ponens inference rule implication', { k: 5 });
28
+ const ids = results.map((r) => r.lemma.id);
29
+ (0, vitest_1.expect)(ids).toContain('prop.modus-ponens');
30
+ });
31
+ (0, vitest_1.it)('filtro de dominio no devuelve lemas de otros dominios', () => {
32
+ const rag = new query_1.LemmaRAG();
33
+ rag.index(lemmas);
34
+ const results = rag.query('commutativity identity', { k: 10, domain: 'arithmetic' });
35
+ for (const r of results) {
36
+ (0, vitest_1.expect)(r.lemma.domain).toBe('arithmetic');
37
+ }
38
+ });
39
+ });
40
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/integration.test.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,sEAAsE;AACtE,+DAA+D;;AAE/D,mCAA8C;AAC9C,oCAAoC;AACpC,sEAA0E;AAE1E,IAAA,iBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,MAAM,GAAG,GAAG,IAAA,0BAAe,GAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,gBAAQ,EAAE,CAAC;QAC3B,IAAA,eAAM,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,GAAG,GAAG,IAAI,gBAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,GAAG,GAAG,IAAI,gBAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAG,IAAI,gBAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACrF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAA,eAAM,EAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=query.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../../../../src/reasoning/lemma-rag/__tests__/query.test.ts"],"names":[],"mappings":""}