@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,291 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST dL-Hybrid — Resolución y análisis de ODEs (subset decidible)
4
+ // ============================================================
5
+ // Tres capacidades:
6
+ // 1. Clasificación de un sistema ODE como cerrado-soluble
7
+ // (constante x' = c o lineal x' = a*x + b con a, b constantes).
8
+ // 2. Solución analítica en tiempo t para esos casos:
9
+ // x' = c → x(t) = x₀ + c·t
10
+ // x' = a·x + b (a≠0) → x(t) = (x₀ + b/a)·e^{a·t} − b/a
11
+ // x' = a·x (a=0,b=0) → x(t) = x₀ (cubierto por caso constante)
12
+ // 3. Derivada de Lie L_f(p) = Σᵢ (∂p/∂xᵢ)·fᵢ para chequeo de
13
+ // invariantes diferenciales: si L_f(p) ≥ 0 en el dominio, entonces
14
+ // p ≥ 0 es invariante a lo largo de la evolución (Platzer 2010,
15
+ // teorema de invariantes diferenciales).
16
+ //
17
+ // Para casos no soportados (acoplamiento, no-lineal), retornar
18
+ // `{ kind: 'unsupported' }` y dejar que el tableau cierre como `unknown`.
19
+ //
20
+ // La derivada de Lie usa el motor existente `runtime/symbolic-diff` para
21
+ // la parte simbólica (Expr ↔ DLTerm via puentes).
22
+ // ============================================================
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.termToExpr = termToExpr;
25
+ exports.termIsConstant = termIsConstant;
26
+ exports.termIsLinearIn = termIsLinearIn;
27
+ exports.classifyOde = classifyOde;
28
+ exports.flow = flow;
29
+ exports.lieDerivative = lieDerivative;
30
+ exports.evalSym = evalSym;
31
+ const symbolic_diff_1 = require("../../../runtime/symbolic-diff");
32
+ // --- Puentes DLTerm ↔ SymExpr -----------------------------------------
33
+ /** Convierte un DLTerm en una Expr del motor symbolic-diff. */
34
+ function termToExpr(t) {
35
+ switch (t.kind) {
36
+ case 'num':
37
+ return (0, symbolic_diff_1.cst)(t.value);
38
+ case 'var':
39
+ return (0, symbolic_diff_1.v)(t.name);
40
+ case 'plus':
41
+ return (0, symbolic_diff_1.add)(termToExpr(t.left), termToExpr(t.right));
42
+ case 'minus':
43
+ return (0, symbolic_diff_1.sub)(termToExpr(t.left), termToExpr(t.right));
44
+ case 'times':
45
+ return (0, symbolic_diff_1.mul)(termToExpr(t.left), termToExpr(t.right));
46
+ case 'div':
47
+ // symbolic-diff no tiene 'sub'-div constructor con shortcut; usamos div directo.
48
+ return { kind: 'div', left: termToExpr(t.left), right: termToExpr(t.right) };
49
+ case 'neg':
50
+ return (0, symbolic_diff_1.neg)(termToExpr(t.arg));
51
+ case 'pow':
52
+ return (0, symbolic_diff_1.pow)(termToExpr(t.base), (0, symbolic_diff_1.cst)(t.exp));
53
+ }
54
+ }
55
+ /** Evalúa una Expr de symbolic-diff con una valuación numérica. */
56
+ function evalSymExpr(e, env) {
57
+ switch (e.kind) {
58
+ case 'const':
59
+ return e.value;
60
+ case 'var':
61
+ return env.get(e.name) ?? 0;
62
+ case 'add':
63
+ return e.args.reduce((acc, a) => acc + evalSymExpr(a, env), 0);
64
+ case 'mul':
65
+ return e.args.reduce((acc, a) => acc * evalSymExpr(a, env), 1);
66
+ case 'sub':
67
+ return evalSymExpr(e.left, env) - evalSymExpr(e.right, env);
68
+ case 'div': {
69
+ const d = evalSymExpr(e.right, env);
70
+ if (d === 0)
71
+ return NaN;
72
+ return evalSymExpr(e.left, env) / d;
73
+ }
74
+ case 'pow':
75
+ return Math.pow(evalSymExpr(e.base, env), evalSymExpr(e.exp, env));
76
+ case 'neg':
77
+ return -evalSymExpr(e.arg, env);
78
+ case 'sin':
79
+ return Math.sin(evalSymExpr(e.arg, env));
80
+ case 'cos':
81
+ return Math.cos(evalSymExpr(e.arg, env));
82
+ case 'tan':
83
+ return Math.tan(evalSymExpr(e.arg, env));
84
+ case 'log':
85
+ return Math.log(evalSymExpr(e.arg, env));
86
+ case 'exp':
87
+ return Math.exp(evalSymExpr(e.arg, env));
88
+ }
89
+ }
90
+ /** Verifica si un término es una constante numérica (con simplificación). */
91
+ function termIsConstant(t) {
92
+ const e = (0, symbolic_diff_1.simplify)(termToExpr(t));
93
+ if (e.kind === 'const')
94
+ return e.value;
95
+ if (e.kind === 'neg' && e.arg.kind === 'const')
96
+ return -e.arg.value;
97
+ return null;
98
+ }
99
+ /**
100
+ * Intenta extraer (a, b) tal que `rhs = a*var + b` sobre las constantes
101
+ * (ignora otras variables → en ese caso devuelve null).
102
+ */
103
+ function termIsLinearIn(t, varName) {
104
+ // Estrategia: simplifica, luego evalúa la derivada simbólica respecto
105
+ // a varName con 0 — eso da `a` si es lineal y libre de otras vars.
106
+ const e = (0, symbolic_diff_1.simplify)(termToExpr(t));
107
+ // El coeficiente a = d/dvar rhs, debe ser una constante.
108
+ const derivative = (0, symbolic_diff_1.simplify)((0, symbolic_diff_1.differentiate)(e, varName));
109
+ let a;
110
+ if (derivative.kind === 'const')
111
+ a = derivative.value;
112
+ else if (derivative.kind === 'neg' && derivative.arg.kind === 'const')
113
+ a = -derivative.arg.value;
114
+ else
115
+ return null;
116
+ // b = rhs(var=0, otras vars deben ser ignoradas: si aparecen → null).
117
+ // Validamos que no haya OTRAS variables.
118
+ const env = new Map([[varName, 0]]);
119
+ // Si la expresión menciona variables ajenas distintas a varName, falla.
120
+ const vars = new Set();
121
+ const collect = (x) => {
122
+ switch (x.kind) {
123
+ case 'var':
124
+ vars.add(x.name);
125
+ return;
126
+ case 'const':
127
+ return;
128
+ case 'add':
129
+ case 'mul':
130
+ x.args.forEach(collect);
131
+ return;
132
+ case 'sub':
133
+ case 'div':
134
+ collect(x.left);
135
+ collect(x.right);
136
+ return;
137
+ case 'pow':
138
+ collect(x.base);
139
+ collect(x.exp);
140
+ return;
141
+ case 'neg':
142
+ case 'sin':
143
+ case 'cos':
144
+ case 'tan':
145
+ case 'log':
146
+ case 'exp':
147
+ collect(x.arg);
148
+ return;
149
+ }
150
+ };
151
+ collect(e);
152
+ for (const v of vars) {
153
+ if (v !== varName)
154
+ return null;
155
+ }
156
+ const b = evalSymExpr(e, env);
157
+ if (Number.isNaN(b))
158
+ return null;
159
+ return { a, b };
160
+ }
161
+ /**
162
+ * Clasifica un sistema ODE en uno de los casos solubles cerrados.
163
+ * El sistema debe ser desacoplado: cada x' = f(x) sólo puede mencionar
164
+ * a la propia variable. Acoplamientos genéricos → unsupported.
165
+ */
166
+ function classifyOde(system) {
167
+ // Caso 1: todas constantes.
168
+ const rates = new Map();
169
+ let allConstant = true;
170
+ for (const eq of system.equations) {
171
+ const c = termIsConstant(eq.rhs);
172
+ if (c === null) {
173
+ allConstant = false;
174
+ break;
175
+ }
176
+ rates.set(eq.varName, c);
177
+ }
178
+ if (allConstant)
179
+ return { kind: 'constant', rates };
180
+ // Caso 2: sistema lineal desacoplado.
181
+ const coeffs = new Map();
182
+ for (const eq of system.equations) {
183
+ const lin = termIsLinearIn(eq.rhs, eq.varName);
184
+ if (lin === null) {
185
+ return {
186
+ kind: 'unsupported',
187
+ reason: `Ecuación ${eq.varName}' = ... no es lineal desacoplada cerrada.`,
188
+ };
189
+ }
190
+ coeffs.set(eq.varName, lin);
191
+ }
192
+ return { kind: 'linear', coeffs };
193
+ }
194
+ // --- Evolución analítica ---------------------------------------------
195
+ const EPS = 1e-9;
196
+ /**
197
+ * Calcula el estado tras evolucionar la ODE por tiempo t exacto (sin
198
+ * domain check). Sólo soporta `constant` y `linear`. Para no soportadas
199
+ * lanza error — el caller usa `classifyOde` antes.
200
+ */
201
+ function flow(system, initial, t) {
202
+ const klass = classifyOde(system);
203
+ if (klass.kind === 'unsupported') {
204
+ throw new Error(`flow: ODE no soportada (${klass.reason})`);
205
+ }
206
+ const next = new Map(initial);
207
+ if (klass.kind === 'constant') {
208
+ for (const [v, c] of klass.rates) {
209
+ next.set(v, (initial.get(v) ?? 0) + c * t);
210
+ }
211
+ return next;
212
+ }
213
+ // linear: x(t) = (x0 + b/a) e^{at} - b/a (a != 0)
214
+ // x(t) = x0 + b*t (a == 0)
215
+ for (const [v, { a, b }] of klass.coeffs) {
216
+ const x0 = initial.get(v) ?? 0;
217
+ if (Math.abs(a) < EPS) {
218
+ next.set(v, x0 + b * t);
219
+ }
220
+ else {
221
+ next.set(v, (x0 + b / a) * Math.exp(a * t) - b / a);
222
+ }
223
+ }
224
+ return next;
225
+ }
226
+ // --- Derivada de Lie --------------------------------------------------
227
+ /**
228
+ * Derivada de Lie de un término p a lo largo del campo vectorial f
229
+ * definido por la ODE:
230
+ * L_f(p) = Σᵢ (∂p/∂xᵢ) · fᵢ
231
+ * Si una variable de p no tiene ecuación, su derivada respecto al
232
+ * tiempo es 0 (variable estática).
233
+ */
234
+ function lieDerivative(p, system) {
235
+ const pExpr = termToExpr(p);
236
+ const eqsByVar = new Map();
237
+ for (const eq of system.equations)
238
+ eqsByVar.set(eq.varName, eq.rhs);
239
+ // Conjunto de variables que aparecen en p.
240
+ const pVars = new Set();
241
+ const collect = (x) => {
242
+ switch (x.kind) {
243
+ case 'var':
244
+ pVars.add(x.name);
245
+ return;
246
+ case 'const':
247
+ return;
248
+ case 'add':
249
+ case 'mul':
250
+ x.args.forEach(collect);
251
+ return;
252
+ case 'sub':
253
+ case 'div':
254
+ collect(x.left);
255
+ collect(x.right);
256
+ return;
257
+ case 'pow':
258
+ collect(x.base);
259
+ collect(x.exp);
260
+ return;
261
+ case 'neg':
262
+ case 'sin':
263
+ case 'cos':
264
+ case 'tan':
265
+ case 'log':
266
+ case 'exp':
267
+ collect(x.arg);
268
+ return;
269
+ }
270
+ };
271
+ collect(pExpr);
272
+ const terms = [];
273
+ for (const xi of pVars) {
274
+ const f_i = eqsByVar.get(xi);
275
+ if (!f_i)
276
+ continue; // variable estática
277
+ const dp_dxi = (0, symbolic_diff_1.differentiate)(pExpr, xi);
278
+ terms.push((0, symbolic_diff_1.mul)(dp_dxi, termToExpr(f_i)));
279
+ }
280
+ if (terms.length === 0)
281
+ return (0, symbolic_diff_1.cst)(0);
282
+ return (0, symbolic_diff_1.simplify)((0, symbolic_diff_1.add)(...terms));
283
+ }
284
+ /**
285
+ * Evalúa una Expr de symbolic-diff en un estado concreto. Útil para
286
+ * chequear si la derivada de Lie es ≥ 0 en un punto específico.
287
+ */
288
+ function evalSym(e, state) {
289
+ return evalSymExpr(e, state);
290
+ }
291
+ //# sourceMappingURL=differential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"differential.js","sourceRoot":"","sources":["../../../../src/logic/profiles/dl-hybrid/differential.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type { DLFormula, DLTerm, CompOp, HybridProgram, OdeSystem, State, } from './ast';
2
+ export { num, variable, plus, minus, times, divide, negTerm, power, comp, trueF, falseF, notF, andF, orF, implies, iff, box, diamond, assign, nondet, test, seq, choice, loop, ode, cloneState, termVars, formulaVars, programVars, termToString, programToString, formulaToString, } from './ast';
3
+ export { evalTerm, evalComp, evalQuantifierFree, substTerm, substFormula, } from './semantics';
4
+ export type { SolutionKind } from './differential';
5
+ export { termToExpr, termIsConstant, termIsLinearIn, classifyOde, flow, lieDerivative, evalSym, } from './differential';
6
+ export { parseFormula, parseProgram, parseTerm } from './parser';
7
+ export type { DLCheckResult, DLOptions } from './tableau';
8
+ export { checkValid, checkSatisfiable, evalInState, relevantVariables } from './tableau';
9
+ export { DLHybridProfile, runValidity, runSatisfiability } from './profile';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/logic/profiles/dl-hybrid/index.ts"],"names":[],"mappings":"AA0BA,YAAY,EACV,SAAS,EACT,MAAM,EACN,MAAM,EACN,aAAa,EACb,SAAS,EACT,KAAK,GACN,MAAM,OAAO,CAAC;AACf,OAAO,EACL,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,OAAO,EACP,GAAG,EACH,GAAG,EACH,OAAO,EACP,MAAM,EACN,MAAM,EACN,IAAI,EACJ,GAAG,EACH,MAAM,EACN,IAAI,EACJ,GAAG,EACH,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,IAAI,EACJ,aAAa,EACb,OAAO,GACR,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEzF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST dL-Hybrid — Punto de entrada público del perfil
4
+ // ============================================================
5
+ // Differential Dynamic Logic (Platzer 2008/2010), subset decidible para
6
+ // verificación de sistemas híbridos: programas con estado continuo
7
+ // (ODEs polinomiales lineales) y discreto (asignaciones, choice, tests).
8
+ //
9
+ // API:
10
+ // parseFormula(src) / parseProgram(src) / parseTerm(src)
11
+ // Lexer + parser de la sintaxis textual dL.
12
+ // checkValid(f, opts?) Decisión de validez (semántica acotada).
13
+ // checkSatisfiable(f, opts?) Decisión de satisfacibilidad.
14
+ // evalInState(f, s, opts?) Evaluación concreta en un estado.
15
+ // classifyOde, flow, lieDerivative
16
+ // Análisis y evolución analítica de sistemas ODE.
17
+ // DLHybridProfile Clase para registro en el `ProfileRegistry`.
18
+ //
19
+ // Limitaciones (subset):
20
+ // • Sólo ODEs desacopladas (cada x' = f(x) sólo menciona x).
21
+ // • x' = c (constantes) y x' = a*x + b (lineal con a, b constantes).
22
+ // • Validez decidida por enumeración acotada sobre una malla finita:
23
+ // no equivalente al cálculo completo de KeYmaera, pero suficiente para
24
+ // los ejemplos canónicos.
25
+ // • Loops α* expandidos a horizonte N (loopUnfold, default 3).
26
+ // ============================================================
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.evalInState = exports.checkSatisfiable = exports.checkValid = exports.parseTerm = exports.parseProgram = exports.parseFormula = exports.evalSym = exports.lieDerivative = exports.flow = exports.classifyOde = exports.termIsLinearIn = exports.termIsConstant = exports.termToExpr = exports.substFormula = exports.substTerm = exports.evalQuantifierFree = exports.evalComp = exports.evalTerm = exports.formulaToString = exports.programToString = exports.termToString = exports.programVars = exports.formulaVars = exports.termVars = exports.cloneState = exports.ode = exports.loop = exports.choice = exports.seq = exports.test = exports.nondet = exports.assign = exports.diamond = exports.box = exports.iff = exports.implies = exports.orF = exports.andF = exports.notF = exports.falseF = exports.trueF = exports.comp = exports.power = exports.negTerm = exports.divide = exports.times = exports.minus = exports.plus = exports.variable = exports.num = void 0;
29
+ exports.runSatisfiability = exports.runValidity = exports.DLHybridProfile = exports.relevantVariables = void 0;
30
+ var ast_1 = require("./ast");
31
+ Object.defineProperty(exports, "num", { enumerable: true, get: function () { return ast_1.num; } });
32
+ Object.defineProperty(exports, "variable", { enumerable: true, get: function () { return ast_1.variable; } });
33
+ Object.defineProperty(exports, "plus", { enumerable: true, get: function () { return ast_1.plus; } });
34
+ Object.defineProperty(exports, "minus", { enumerable: true, get: function () { return ast_1.minus; } });
35
+ Object.defineProperty(exports, "times", { enumerable: true, get: function () { return ast_1.times; } });
36
+ Object.defineProperty(exports, "divide", { enumerable: true, get: function () { return ast_1.divide; } });
37
+ Object.defineProperty(exports, "negTerm", { enumerable: true, get: function () { return ast_1.negTerm; } });
38
+ Object.defineProperty(exports, "power", { enumerable: true, get: function () { return ast_1.power; } });
39
+ Object.defineProperty(exports, "comp", { enumerable: true, get: function () { return ast_1.comp; } });
40
+ Object.defineProperty(exports, "trueF", { enumerable: true, get: function () { return ast_1.trueF; } });
41
+ Object.defineProperty(exports, "falseF", { enumerable: true, get: function () { return ast_1.falseF; } });
42
+ Object.defineProperty(exports, "notF", { enumerable: true, get: function () { return ast_1.notF; } });
43
+ Object.defineProperty(exports, "andF", { enumerable: true, get: function () { return ast_1.andF; } });
44
+ Object.defineProperty(exports, "orF", { enumerable: true, get: function () { return ast_1.orF; } });
45
+ Object.defineProperty(exports, "implies", { enumerable: true, get: function () { return ast_1.implies; } });
46
+ Object.defineProperty(exports, "iff", { enumerable: true, get: function () { return ast_1.iff; } });
47
+ Object.defineProperty(exports, "box", { enumerable: true, get: function () { return ast_1.box; } });
48
+ Object.defineProperty(exports, "diamond", { enumerable: true, get: function () { return ast_1.diamond; } });
49
+ Object.defineProperty(exports, "assign", { enumerable: true, get: function () { return ast_1.assign; } });
50
+ Object.defineProperty(exports, "nondet", { enumerable: true, get: function () { return ast_1.nondet; } });
51
+ Object.defineProperty(exports, "test", { enumerable: true, get: function () { return ast_1.test; } });
52
+ Object.defineProperty(exports, "seq", { enumerable: true, get: function () { return ast_1.seq; } });
53
+ Object.defineProperty(exports, "choice", { enumerable: true, get: function () { return ast_1.choice; } });
54
+ Object.defineProperty(exports, "loop", { enumerable: true, get: function () { return ast_1.loop; } });
55
+ Object.defineProperty(exports, "ode", { enumerable: true, get: function () { return ast_1.ode; } });
56
+ Object.defineProperty(exports, "cloneState", { enumerable: true, get: function () { return ast_1.cloneState; } });
57
+ Object.defineProperty(exports, "termVars", { enumerable: true, get: function () { return ast_1.termVars; } });
58
+ Object.defineProperty(exports, "formulaVars", { enumerable: true, get: function () { return ast_1.formulaVars; } });
59
+ Object.defineProperty(exports, "programVars", { enumerable: true, get: function () { return ast_1.programVars; } });
60
+ Object.defineProperty(exports, "termToString", { enumerable: true, get: function () { return ast_1.termToString; } });
61
+ Object.defineProperty(exports, "programToString", { enumerable: true, get: function () { return ast_1.programToString; } });
62
+ Object.defineProperty(exports, "formulaToString", { enumerable: true, get: function () { return ast_1.formulaToString; } });
63
+ var semantics_1 = require("./semantics");
64
+ Object.defineProperty(exports, "evalTerm", { enumerable: true, get: function () { return semantics_1.evalTerm; } });
65
+ Object.defineProperty(exports, "evalComp", { enumerable: true, get: function () { return semantics_1.evalComp; } });
66
+ Object.defineProperty(exports, "evalQuantifierFree", { enumerable: true, get: function () { return semantics_1.evalQuantifierFree; } });
67
+ Object.defineProperty(exports, "substTerm", { enumerable: true, get: function () { return semantics_1.substTerm; } });
68
+ Object.defineProperty(exports, "substFormula", { enumerable: true, get: function () { return semantics_1.substFormula; } });
69
+ var differential_1 = require("./differential");
70
+ Object.defineProperty(exports, "termToExpr", { enumerable: true, get: function () { return differential_1.termToExpr; } });
71
+ Object.defineProperty(exports, "termIsConstant", { enumerable: true, get: function () { return differential_1.termIsConstant; } });
72
+ Object.defineProperty(exports, "termIsLinearIn", { enumerable: true, get: function () { return differential_1.termIsLinearIn; } });
73
+ Object.defineProperty(exports, "classifyOde", { enumerable: true, get: function () { return differential_1.classifyOde; } });
74
+ Object.defineProperty(exports, "flow", { enumerable: true, get: function () { return differential_1.flow; } });
75
+ Object.defineProperty(exports, "lieDerivative", { enumerable: true, get: function () { return differential_1.lieDerivative; } });
76
+ Object.defineProperty(exports, "evalSym", { enumerable: true, get: function () { return differential_1.evalSym; } });
77
+ var parser_1 = require("./parser");
78
+ Object.defineProperty(exports, "parseFormula", { enumerable: true, get: function () { return parser_1.parseFormula; } });
79
+ Object.defineProperty(exports, "parseProgram", { enumerable: true, get: function () { return parser_1.parseProgram; } });
80
+ Object.defineProperty(exports, "parseTerm", { enumerable: true, get: function () { return parser_1.parseTerm; } });
81
+ var tableau_1 = require("./tableau");
82
+ Object.defineProperty(exports, "checkValid", { enumerable: true, get: function () { return tableau_1.checkValid; } });
83
+ Object.defineProperty(exports, "checkSatisfiable", { enumerable: true, get: function () { return tableau_1.checkSatisfiable; } });
84
+ Object.defineProperty(exports, "evalInState", { enumerable: true, get: function () { return tableau_1.evalInState; } });
85
+ Object.defineProperty(exports, "relevantVariables", { enumerable: true, get: function () { return tableau_1.relevantVariables; } });
86
+ var profile_1 = require("./profile");
87
+ Object.defineProperty(exports, "DLHybridProfile", { enumerable: true, get: function () { return profile_1.DLHybridProfile; } });
88
+ Object.defineProperty(exports, "runValidity", { enumerable: true, get: function () { return profile_1.runValidity; } });
89
+ Object.defineProperty(exports, "runSatisfiability", { enumerable: true, get: function () { return profile_1.runSatisfiability; } });
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/logic/profiles/dl-hybrid/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,qDAAqD;AACrD,+DAA+D;AAC/D,wEAAwE;AACxE,mEAAmE;AACnE,yEAAyE;AACzE,EAAE;AACF,OAAO;AACP,2DAA2D;AAC3D,gDAAgD;AAChD,wEAAwE;AACxE,6DAA6D;AAC7D,iEAAiE;AACjE,qCAAqC;AACrC,sDAAsD;AACtD,kEAAkE;AAClE,EAAE;AACF,yBAAyB;AACzB,+DAA+D;AAC/D,uEAAuE;AACvE,uEAAuE;AACvE,2EAA2E;AAC3E,8BAA8B;AAC9B,iEAAiE;AACjE,+DAA+D;;;;AAU/D,6BAiCe;AAhCb,0FAAA,GAAG,OAAA;AACH,+FAAA,QAAQ,OAAA;AACR,2FAAA,IAAI,OAAA;AACJ,4FAAA,KAAK,OAAA;AACL,4FAAA,KAAK,OAAA;AACL,6FAAA,MAAM,OAAA;AACN,8FAAA,OAAO,OAAA;AACP,4FAAA,KAAK,OAAA;AACL,2FAAA,IAAI,OAAA;AACJ,4FAAA,KAAK,OAAA;AACL,6FAAA,MAAM,OAAA;AACN,2FAAA,IAAI,OAAA;AACJ,2FAAA,IAAI,OAAA;AACJ,0FAAA,GAAG,OAAA;AACH,8FAAA,OAAO,OAAA;AACP,0FAAA,GAAG,OAAA;AACH,0FAAA,GAAG,OAAA;AACH,8FAAA,OAAO,OAAA;AACP,6FAAA,MAAM,OAAA;AACN,6FAAA,MAAM,OAAA;AACN,2FAAA,IAAI,OAAA;AACJ,0FAAA,GAAG,OAAA;AACH,6FAAA,MAAM,OAAA;AACN,2FAAA,IAAI,OAAA;AACJ,0FAAA,GAAG,OAAA;AACH,iGAAA,UAAU,OAAA;AACV,+FAAA,QAAQ,OAAA;AACR,kGAAA,WAAW,OAAA;AACX,kGAAA,WAAW,OAAA;AACX,mGAAA,YAAY,OAAA;AACZ,sGAAA,eAAe,OAAA;AACf,sGAAA,eAAe,OAAA;AAGjB,yCAMqB;AALnB,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,+GAAA,kBAAkB,OAAA;AAClB,sGAAA,SAAS,OAAA;AACT,yGAAA,YAAY,OAAA;AAId,+CAQwB;AAPtB,0GAAA,UAAU,OAAA;AACV,8GAAA,cAAc,OAAA;AACd,8GAAA,cAAc,OAAA;AACd,2GAAA,WAAW,OAAA;AACX,oGAAA,IAAI,OAAA;AACJ,6GAAA,aAAa,OAAA;AACb,uGAAA,OAAO,OAAA;AAGT,mCAAiE;AAAxD,sGAAA,YAAY,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,mGAAA,SAAS,OAAA;AAG9C,qCAAyF;AAAhF,qGAAA,UAAU,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAErE,qCAA4E;AAAnE,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,4GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,8 @@
1
+ import type { DLFormula, DLTerm, HybridProgram } from './ast';
2
+ /** Parsea una fórmula dL desde una cadena. Lanza Error en sintaxis inválida. */
3
+ export declare function parseFormula(src: string): DLFormula;
4
+ /** Parsea un programa híbrido desde una cadena. */
5
+ export declare function parseProgram(src: string): HybridProgram;
6
+ /** Parsea un término aritmético dL. */
7
+ export declare function parseTerm(src: string): DLTerm;
8
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/logic/profiles/dl-hybrid/parser.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAqB,MAAM,OAAO,CAAC;AA6WjF,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAKnD;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAKvD;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7C"}