@stevenvo780/st-lang 4.2.0 → 4.3.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 (293) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +36 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lambda-calc/church.d.ts +8 -0
  6. package/dist/lambda-calc/church.d.ts.map +1 -0
  7. package/dist/lambda-calc/church.js +67 -0
  8. package/dist/lambda-calc/church.js.map +1 -0
  9. package/dist/lambda-calc/combinators.d.ts +8 -0
  10. package/dist/lambda-calc/combinators.d.ts.map +1 -0
  11. package/dist/lambda-calc/combinators.js +24 -0
  12. package/dist/lambda-calc/combinators.js.map +1 -0
  13. package/dist/lambda-calc/index.d.ts +8 -0
  14. package/dist/lambda-calc/index.d.ts.map +1 -0
  15. package/dist/lambda-calc/index.js +48 -0
  16. package/dist/lambda-calc/index.js.map +1 -0
  17. package/dist/lambda-calc/reduce.d.ts +18 -0
  18. package/dist/lambda-calc/reduce.d.ts.map +1 -0
  19. package/dist/lambda-calc/reduce.js +174 -0
  20. package/dist/lambda-calc/reduce.js.map +1 -0
  21. package/dist/lambda-calc/substitution.d.ts +6 -0
  22. package/dist/lambda-calc/substitution.d.ts.map +1 -0
  23. package/dist/lambda-calc/substitution.js +120 -0
  24. package/dist/lambda-calc/substitution.js.map +1 -0
  25. package/dist/lambda-calc/types.d.ts +19 -0
  26. package/dist/lambda-calc/types.d.ts.map +1 -0
  27. package/dist/lambda-calc/types.js +72 -0
  28. package/dist/lambda-calc/types.js.map +1 -0
  29. package/dist/profiles/intuitionistic-nj/formula.d.ts +19 -0
  30. package/dist/profiles/intuitionistic-nj/formula.d.ts.map +1 -0
  31. package/dist/profiles/intuitionistic-nj/formula.js +99 -0
  32. package/dist/profiles/intuitionistic-nj/formula.js.map +1 -0
  33. package/dist/profiles/intuitionistic-nj/index.d.ts +5 -0
  34. package/dist/profiles/intuitionistic-nj/index.d.ts.map +1 -0
  35. package/dist/profiles/intuitionistic-nj/index.js +24 -0
  36. package/dist/profiles/intuitionistic-nj/index.js.map +1 -0
  37. package/dist/profiles/intuitionistic-nj/kripke.d.ts +17 -0
  38. package/dist/profiles/intuitionistic-nj/kripke.d.ts.map +1 -0
  39. package/dist/profiles/intuitionistic-nj/kripke.js +206 -0
  40. package/dist/profiles/intuitionistic-nj/kripke.js.map +1 -0
  41. package/dist/profiles/intuitionistic-nj/prover.d.ts +13 -0
  42. package/dist/profiles/intuitionistic-nj/prover.d.ts.map +1 -0
  43. package/dist/profiles/intuitionistic-nj/prover.js +418 -0
  44. package/dist/profiles/intuitionistic-nj/prover.js.map +1 -0
  45. package/dist/profiles/intuitionistic-nj/types.d.ts +55 -0
  46. package/dist/profiles/intuitionistic-nj/types.d.ts.map +1 -0
  47. package/dist/profiles/intuitionistic-nj/types.js +21 -0
  48. package/dist/profiles/intuitionistic-nj/types.js.map +1 -0
  49. package/dist/profiles/many-valued/index.d.ts +39 -0
  50. package/dist/profiles/many-valued/index.d.ts.map +1 -0
  51. package/dist/profiles/many-valued/index.js +250 -0
  52. package/dist/profiles/many-valued/index.js.map +1 -0
  53. package/dist/profiles/modal-frame-axioms/formula.d.ts +23 -0
  54. package/dist/profiles/modal-frame-axioms/formula.d.ts.map +1 -0
  55. package/dist/profiles/modal-frame-axioms/formula.js +158 -0
  56. package/dist/profiles/modal-frame-axioms/formula.js.map +1 -0
  57. package/dist/profiles/modal-frame-axioms/index.d.ts +6 -0
  58. package/dist/profiles/modal-frame-axioms/index.d.ts.map +1 -0
  59. package/dist/profiles/modal-frame-axioms/index.js +41 -0
  60. package/dist/profiles/modal-frame-axioms/index.js.map +1 -0
  61. package/dist/profiles/modal-frame-axioms/systems.d.ts +29 -0
  62. package/dist/profiles/modal-frame-axioms/systems.d.ts.map +1 -0
  63. package/dist/profiles/modal-frame-axioms/systems.js +96 -0
  64. package/dist/profiles/modal-frame-axioms/systems.js.map +1 -0
  65. package/dist/profiles/modal-frame-axioms/tableau.d.ts +12 -0
  66. package/dist/profiles/modal-frame-axioms/tableau.d.ts.map +1 -0
  67. package/dist/profiles/modal-frame-axioms/tableau.js +299 -0
  68. package/dist/profiles/modal-frame-axioms/tableau.js.map +1 -0
  69. package/dist/profiles/modal-frame-axioms/types.d.ts +61 -0
  70. package/dist/profiles/modal-frame-axioms/types.d.ts.map +1 -0
  71. package/dist/profiles/modal-frame-axioms/types.js +27 -0
  72. package/dist/profiles/modal-frame-axioms/types.js.map +1 -0
  73. package/dist/profiles/substructural/index.d.ts +4 -0
  74. package/dist/profiles/substructural/index.d.ts.map +1 -0
  75. package/dist/profiles/substructural/index.js +22 -0
  76. package/dist/profiles/substructural/index.js.map +1 -0
  77. package/dist/profiles/substructural/prover.d.ts +13 -0
  78. package/dist/profiles/substructural/prover.d.ts.map +1 -0
  79. package/dist/profiles/substructural/prover.js +481 -0
  80. package/dist/profiles/substructural/prover.js.map +1 -0
  81. package/dist/profiles/substructural/types.d.ts +72 -0
  82. package/dist/profiles/substructural/types.d.ts.map +1 -0
  83. package/dist/profiles/substructural/types.js +27 -0
  84. package/dist/profiles/substructural/types.js.map +1 -0
  85. package/dist/runtime/abduction/entails.d.ts +21 -0
  86. package/dist/runtime/abduction/entails.d.ts.map +1 -0
  87. package/dist/runtime/abduction/entails.js +308 -0
  88. package/dist/runtime/abduction/entails.js.map +1 -0
  89. package/dist/runtime/abduction/find.d.ts +18 -0
  90. package/dist/runtime/abduction/find.d.ts.map +1 -0
  91. package/dist/runtime/abduction/find.js +202 -0
  92. package/dist/runtime/abduction/find.js.map +1 -0
  93. package/dist/runtime/abduction/index.d.ts +4 -0
  94. package/dist/runtime/abduction/index.d.ts.map +1 -0
  95. package/dist/runtime/abduction/index.js +26 -0
  96. package/dist/runtime/abduction/index.js.map +1 -0
  97. package/dist/runtime/abduction/types.d.ts +78 -0
  98. package/dist/runtime/abduction/types.d.ts.map +1 -0
  99. package/dist/runtime/abduction/types.js +23 -0
  100. package/dist/runtime/abduction/types.js.map +1 -0
  101. package/dist/runtime/bayesian/factor.d.ts +22 -0
  102. package/dist/runtime/bayesian/factor.d.ts.map +1 -0
  103. package/dist/runtime/bayesian/factor.js +249 -0
  104. package/dist/runtime/bayesian/factor.js.map +1 -0
  105. package/dist/runtime/bayesian/index.d.ts +3 -0
  106. package/dist/runtime/bayesian/index.d.ts.map +1 -0
  107. package/dist/runtime/bayesian/index.js +25 -0
  108. package/dist/runtime/bayesian/index.js.map +1 -0
  109. package/dist/runtime/bayesian/inference.d.ts +6 -0
  110. package/dist/runtime/bayesian/inference.d.ts.map +1 -0
  111. package/dist/runtime/bayesian/inference.js +260 -0
  112. package/dist/runtime/bayesian/inference.js.map +1 -0
  113. package/dist/runtime/bayesian/types.d.ts +19 -0
  114. package/dist/runtime/bayesian/types.d.ts.map +1 -0
  115. package/dist/runtime/bayesian/types.js +9 -0
  116. package/dist/runtime/bayesian/types.js.map +1 -0
  117. package/dist/runtime/bisimulation/index.d.ts +4 -0
  118. package/dist/runtime/bisimulation/index.d.ts.map +1 -0
  119. package/dist/runtime/bisimulation/index.js +21 -0
  120. package/dist/runtime/bisimulation/index.js.map +1 -0
  121. package/dist/runtime/bisimulation/operations.d.ts +40 -0
  122. package/dist/runtime/bisimulation/operations.d.ts.map +1 -0
  123. package/dist/runtime/bisimulation/operations.js +219 -0
  124. package/dist/runtime/bisimulation/operations.js.map +1 -0
  125. package/dist/runtime/bisimulation/paige-tarjan.d.ts +8 -0
  126. package/dist/runtime/bisimulation/paige-tarjan.d.ts.map +1 -0
  127. package/dist/runtime/bisimulation/paige-tarjan.js +199 -0
  128. package/dist/runtime/bisimulation/paige-tarjan.js.map +1 -0
  129. package/dist/runtime/bisimulation/types.d.ts +26 -0
  130. package/dist/runtime/bisimulation/types.d.ts.map +1 -0
  131. package/dist/runtime/bisimulation/types.js +22 -0
  132. package/dist/runtime/bisimulation/types.js.map +1 -0
  133. package/dist/runtime/fca/context.d.ts +46 -0
  134. package/dist/runtime/fca/context.d.ts.map +1 -0
  135. package/dist/runtime/fca/context.js +155 -0
  136. package/dist/runtime/fca/context.js.map +1 -0
  137. package/dist/runtime/fca/implications.d.ts +10 -0
  138. package/dist/runtime/fca/implications.d.ts.map +1 -0
  139. package/dist/runtime/fca/implications.js +33 -0
  140. package/dist/runtime/fca/implications.js.map +1 -0
  141. package/dist/runtime/fca/index.d.ts +6 -0
  142. package/dist/runtime/fca/index.d.ts.map +1 -0
  143. package/dist/runtime/fca/index.js +39 -0
  144. package/dist/runtime/fca/index.js.map +1 -0
  145. package/dist/runtime/fca/lattice.d.ts +10 -0
  146. package/dist/runtime/fca/lattice.d.ts.map +1 -0
  147. package/dist/runtime/fca/lattice.js +86 -0
  148. package/dist/runtime/fca/lattice.js.map +1 -0
  149. package/dist/runtime/fca/next-closure.d.ts +12 -0
  150. package/dist/runtime/fca/next-closure.d.ts.map +1 -0
  151. package/dist/runtime/fca/next-closure.js +99 -0
  152. package/dist/runtime/fca/next-closure.js.map +1 -0
  153. package/dist/runtime/fca/types.d.ts +31 -0
  154. package/dist/runtime/fca/types.d.ts.map +1 -0
  155. package/dist/runtime/fca/types.js +30 -0
  156. package/dist/runtime/fca/types.js.map +1 -0
  157. package/dist/runtime/proof-minify/index.d.ts +3 -0
  158. package/dist/runtime/proof-minify/index.d.ts.map +1 -0
  159. package/dist/runtime/proof-minify/index.js +13 -0
  160. package/dist/runtime/proof-minify/index.js.map +1 -0
  161. package/dist/runtime/proof-minify/minify.d.ts +13 -0
  162. package/dist/runtime/proof-minify/minify.d.ts.map +1 -0
  163. package/dist/runtime/proof-minify/minify.js +540 -0
  164. package/dist/runtime/proof-minify/minify.js.map +1 -0
  165. package/dist/runtime/proof-minify/types.d.ts +89 -0
  166. package/dist/runtime/proof-minify/types.d.ts.map +1 -0
  167. package/dist/runtime/proof-minify/types.js +16 -0
  168. package/dist/runtime/proof-minify/types.js.map +1 -0
  169. package/dist/runtime/symbolic-diff/constructors.d.ts +16 -0
  170. package/dist/runtime/symbolic-diff/constructors.d.ts.map +1 -0
  171. package/dist/runtime/symbolic-diff/constructors.js +75 -0
  172. package/dist/runtime/symbolic-diff/constructors.js.map +1 -0
  173. package/dist/runtime/symbolic-diff/differentiate.d.ts +22 -0
  174. package/dist/runtime/symbolic-diff/differentiate.d.ts.map +1 -0
  175. package/dist/runtime/symbolic-diff/differentiate.js +107 -0
  176. package/dist/runtime/symbolic-diff/differentiate.js.map +1 -0
  177. package/dist/runtime/symbolic-diff/evaluate.d.ts +3 -0
  178. package/dist/runtime/symbolic-diff/evaluate.d.ts.map +1 -0
  179. package/dist/runtime/symbolic-diff/evaluate.js +47 -0
  180. package/dist/runtime/symbolic-diff/evaluate.js.map +1 -0
  181. package/dist/runtime/symbolic-diff/index.d.ts +9 -0
  182. package/dist/runtime/symbolic-diff/index.d.ts.map +1 -0
  183. package/dist/runtime/symbolic-diff/index.js +34 -0
  184. package/dist/runtime/symbolic-diff/index.js.map +1 -0
  185. package/dist/runtime/symbolic-diff/parse.d.ts +16 -0
  186. package/dist/runtime/symbolic-diff/parse.d.ts.map +1 -0
  187. package/dist/runtime/symbolic-diff/parse.js +206 -0
  188. package/dist/runtime/symbolic-diff/parse.js.map +1 -0
  189. package/dist/runtime/symbolic-diff/simplify.d.ts +11 -0
  190. package/dist/runtime/symbolic-diff/simplify.d.ts.map +1 -0
  191. package/dist/runtime/symbolic-diff/simplify.js +214 -0
  192. package/dist/runtime/symbolic-diff/simplify.js.map +1 -0
  193. package/dist/runtime/symbolic-diff/stringify.d.ts +3 -0
  194. package/dist/runtime/symbolic-diff/stringify.d.ts.map +1 -0
  195. package/dist/runtime/symbolic-diff/stringify.js +69 -0
  196. package/dist/runtime/symbolic-diff/stringify.js.map +1 -0
  197. package/dist/runtime/symbolic-diff/types.d.ts +35 -0
  198. package/dist/runtime/symbolic-diff/types.d.ts.map +1 -0
  199. package/dist/runtime/symbolic-diff/types.js +9 -0
  200. package/dist/runtime/symbolic-diff/types.js.map +1 -0
  201. package/dist/runtime/term-rewriting/critical-pairs.d.ts +38 -0
  202. package/dist/runtime/term-rewriting/critical-pairs.d.ts.map +1 -0
  203. package/dist/runtime/term-rewriting/critical-pairs.js +109 -0
  204. package/dist/runtime/term-rewriting/critical-pairs.js.map +1 -0
  205. package/dist/runtime/term-rewriting/index.d.ts +9 -0
  206. package/dist/runtime/term-rewriting/index.d.ts.map +1 -0
  207. package/dist/runtime/term-rewriting/index.js +38 -0
  208. package/dist/runtime/term-rewriting/index.js.map +1 -0
  209. package/dist/runtime/term-rewriting/knuth-bendix.d.ts +29 -0
  210. package/dist/runtime/term-rewriting/knuth-bendix.d.ts.map +1 -0
  211. package/dist/runtime/term-rewriting/knuth-bendix.js +196 -0
  212. package/dist/runtime/term-rewriting/knuth-bendix.js.map +1 -0
  213. package/dist/runtime/term-rewriting/lpo.d.ts +17 -0
  214. package/dist/runtime/term-rewriting/lpo.d.ts.map +1 -0
  215. package/dist/runtime/term-rewriting/lpo.js +158 -0
  216. package/dist/runtime/term-rewriting/lpo.js.map +1 -0
  217. package/dist/runtime/term-rewriting/rewrite.d.ts +44 -0
  218. package/dist/runtime/term-rewriting/rewrite.d.ts.map +1 -0
  219. package/dist/runtime/term-rewriting/rewrite.js +189 -0
  220. package/dist/runtime/term-rewriting/rewrite.js.map +1 -0
  221. package/dist/runtime/term-rewriting/term-utils.d.ts +64 -0
  222. package/dist/runtime/term-rewriting/term-utils.d.ts.map +1 -0
  223. package/dist/runtime/term-rewriting/term-utils.js +360 -0
  224. package/dist/runtime/term-rewriting/term-utils.js.map +1 -0
  225. package/dist/runtime/term-rewriting/types.d.ts +66 -0
  226. package/dist/runtime/term-rewriting/types.d.ts.map +1 -0
  227. package/dist/runtime/term-rewriting/types.js +21 -0
  228. package/dist/runtime/term-rewriting/types.js.map +1 -0
  229. package/dist/tests/abduction/abduction.test.d.ts +2 -0
  230. package/dist/tests/abduction/abduction.test.d.ts.map +1 -0
  231. package/dist/tests/abduction/abduction.test.js +380 -0
  232. package/dist/tests/abduction/abduction.test.js.map +1 -0
  233. package/dist/tests/bayesian/bayesian.test.d.ts +2 -0
  234. package/dist/tests/bayesian/bayesian.test.d.ts.map +1 -0
  235. package/dist/tests/bayesian/bayesian.test.js +328 -0
  236. package/dist/tests/bayesian/bayesian.test.js.map +1 -0
  237. package/dist/tests/bisimulation/paige-tarjan.test.d.ts +2 -0
  238. package/dist/tests/bisimulation/paige-tarjan.test.d.ts.map +1 -0
  239. package/dist/tests/bisimulation/paige-tarjan.test.js +254 -0
  240. package/dist/tests/bisimulation/paige-tarjan.test.js.map +1 -0
  241. package/dist/tests/fca/fca.test.d.ts +2 -0
  242. package/dist/tests/fca/fca.test.d.ts.map +1 -0
  243. package/dist/tests/fca/fca.test.js +317 -0
  244. package/dist/tests/fca/fca.test.js.map +1 -0
  245. package/dist/tests/intuitionistic-nj/nj.test.d.ts +2 -0
  246. package/dist/tests/intuitionistic-nj/nj.test.d.ts.map +1 -0
  247. package/dist/tests/intuitionistic-nj/nj.test.js +216 -0
  248. package/dist/tests/intuitionistic-nj/nj.test.js.map +1 -0
  249. package/dist/tests/lambda-calc/lambda-calc.test.d.ts +2 -0
  250. package/dist/tests/lambda-calc/lambda-calc.test.d.ts.map +1 -0
  251. package/dist/tests/lambda-calc/lambda-calc.test.js +164 -0
  252. package/dist/tests/lambda-calc/lambda-calc.test.js.map +1 -0
  253. package/dist/tests/many-valued/many-valued.test.d.ts +2 -0
  254. package/dist/tests/many-valued/many-valued.test.d.ts.map +1 -0
  255. package/dist/tests/many-valued/many-valued.test.js +150 -0
  256. package/dist/tests/many-valued/many-valued.test.js.map +1 -0
  257. package/dist/tests/modal-frame-axioms/frame-axioms.test.d.ts +2 -0
  258. package/dist/tests/modal-frame-axioms/frame-axioms.test.d.ts.map +1 -0
  259. package/dist/tests/modal-frame-axioms/frame-axioms.test.js +236 -0
  260. package/dist/tests/modal-frame-axioms/frame-axioms.test.js.map +1 -0
  261. package/dist/tests/proof-minify/minify.test.d.ts +2 -0
  262. package/dist/tests/proof-minify/minify.test.d.ts.map +1 -0
  263. package/dist/tests/proof-minify/minify.test.js +281 -0
  264. package/dist/tests/proof-minify/minify.test.js.map +1 -0
  265. package/dist/tests/substructural/prover.test.d.ts +2 -0
  266. package/dist/tests/substructural/prover.test.d.ts.map +1 -0
  267. package/dist/tests/substructural/prover.test.js +271 -0
  268. package/dist/tests/substructural/prover.test.js.map +1 -0
  269. package/dist/tests/symbolic-diff/symbolic-diff.test.d.ts +2 -0
  270. package/dist/tests/symbolic-diff/symbolic-diff.test.d.ts.map +1 -0
  271. package/dist/tests/symbolic-diff/symbolic-diff.test.js +278 -0
  272. package/dist/tests/symbolic-diff/symbolic-diff.test.js.map +1 -0
  273. package/dist/tests/term-rewriting/critical-pairs.test.d.ts +2 -0
  274. package/dist/tests/term-rewriting/critical-pairs.test.d.ts.map +1 -0
  275. package/dist/tests/term-rewriting/critical-pairs.test.js +34 -0
  276. package/dist/tests/term-rewriting/critical-pairs.test.js.map +1 -0
  277. package/dist/tests/term-rewriting/knuth-bendix.test.d.ts +2 -0
  278. package/dist/tests/term-rewriting/knuth-bendix.test.d.ts.map +1 -0
  279. package/dist/tests/term-rewriting/knuth-bendix.test.js +94 -0
  280. package/dist/tests/term-rewriting/knuth-bendix.test.js.map +1 -0
  281. package/dist/tests/term-rewriting/lpo.test.d.ts +2 -0
  282. package/dist/tests/term-rewriting/lpo.test.d.ts.map +1 -0
  283. package/dist/tests/term-rewriting/lpo.test.js +57 -0
  284. package/dist/tests/term-rewriting/lpo.test.js.map +1 -0
  285. package/dist/tests/term-rewriting/rewrite.test.d.ts +2 -0
  286. package/dist/tests/term-rewriting/rewrite.test.d.ts.map +1 -0
  287. package/dist/tests/term-rewriting/rewrite.test.js +56 -0
  288. package/dist/tests/term-rewriting/rewrite.test.js.map +1 -0
  289. package/dist/tests/term-rewriting/term-utils.test.d.ts +2 -0
  290. package/dist/tests/term-rewriting/term-utils.test.d.ts.map +1 -0
  291. package/dist/tests/term-rewriting/term-utils.test.js +58 -0
  292. package/dist/tests/term-rewriting/term-utils.test.js.map +1 -0
  293. package/package.json +1 -1
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.simplify = simplify;
4
+ exports.exprEquals = exprEquals;
5
+ const constructors_1 = require("./constructors");
6
+ function isConst(expr, value) {
7
+ return expr.kind === 'const' && expr.value === value;
8
+ }
9
+ function asConst(expr) {
10
+ return expr.kind === 'const' ? expr.value : null;
11
+ }
12
+ function flattenAdd(args) {
13
+ const out = [];
14
+ for (const a of args) {
15
+ if (a.kind === 'add')
16
+ out.push(...flattenAdd(a.args));
17
+ else
18
+ out.push(a);
19
+ }
20
+ return out;
21
+ }
22
+ function flattenMul(args) {
23
+ const out = [];
24
+ for (const a of args) {
25
+ if (a.kind === 'mul')
26
+ out.push(...flattenMul(a.args));
27
+ else
28
+ out.push(a);
29
+ }
30
+ return out;
31
+ }
32
+ /**
33
+ * Simplificación algebraica: constant folding + identidades básicas
34
+ * (x+0=x, x*1=x, x*0=0, x^0=1, x^1=x, neg(neg(x))=x).
35
+ *
36
+ * No intenta factorización ni canonicalización total (eso sería CAS).
37
+ * Aplica recursivamente hasta punto fijo (máx 10 pases).
38
+ */
39
+ function simplify(expr) {
40
+ let current = expr;
41
+ for (let i = 0; i < 10; i++) {
42
+ const next = simplifyOnce(current);
43
+ if (exprEquals(next, current))
44
+ return next;
45
+ current = next;
46
+ }
47
+ return current;
48
+ }
49
+ function simplifyOnce(expr) {
50
+ switch (expr.kind) {
51
+ case 'const':
52
+ case 'var':
53
+ return expr;
54
+ case 'neg': {
55
+ const a = simplifyOnce(expr.arg);
56
+ if (a.kind === 'const')
57
+ return (0, constructors_1.cst)(-a.value);
58
+ if (a.kind === 'neg')
59
+ return a.arg;
60
+ return { kind: 'neg', arg: a };
61
+ }
62
+ case 'add': {
63
+ const simplified = expr.args.map(simplifyOnce);
64
+ const flat = flattenAdd(simplified);
65
+ let constSum = 0;
66
+ const nonConst = [];
67
+ for (const term of flat) {
68
+ const c = asConst(term);
69
+ if (c !== null)
70
+ constSum += c;
71
+ else
72
+ nonConst.push(term);
73
+ }
74
+ if (nonConst.length === 0)
75
+ return (0, constructors_1.cst)(constSum);
76
+ const finalArgs = constSum === 0 ? nonConst : [...nonConst, (0, constructors_1.cst)(constSum)];
77
+ if (finalArgs.length === 1) {
78
+ const only = finalArgs[0];
79
+ if (only !== undefined)
80
+ return only;
81
+ }
82
+ return { kind: 'add', args: finalArgs };
83
+ }
84
+ case 'mul': {
85
+ const simplified = expr.args.map(simplifyOnce);
86
+ const flat = flattenMul(simplified);
87
+ let constProd = 1;
88
+ const nonConst = [];
89
+ for (const factor of flat) {
90
+ const c = asConst(factor);
91
+ if (c !== null)
92
+ constProd *= c;
93
+ else
94
+ nonConst.push(factor);
95
+ }
96
+ if (constProd === 0)
97
+ return (0, constructors_1.cst)(0);
98
+ if (nonConst.length === 0)
99
+ return (0, constructors_1.cst)(constProd);
100
+ const finalArgs = constProd === 1 ? nonConst : [(0, constructors_1.cst)(constProd), ...nonConst];
101
+ if (finalArgs.length === 1) {
102
+ const only = finalArgs[0];
103
+ if (only !== undefined)
104
+ return only;
105
+ }
106
+ return { kind: 'mul', args: finalArgs };
107
+ }
108
+ case 'sub': {
109
+ const l = simplifyOnce(expr.left);
110
+ const r = simplifyOnce(expr.right);
111
+ if (l.kind === 'const' && r.kind === 'const')
112
+ return (0, constructors_1.cst)(l.value - r.value);
113
+ if (isConst(r, 0))
114
+ return l;
115
+ if (isConst(l, 0))
116
+ return simplifyOnce({ kind: 'neg', arg: r });
117
+ return { kind: 'sub', left: l, right: r };
118
+ }
119
+ case 'div': {
120
+ const l = simplifyOnce(expr.left);
121
+ const r = simplifyOnce(expr.right);
122
+ if (isConst(r, 1))
123
+ return l;
124
+ if (isConst(l, 0) && !isConst(r, 0))
125
+ return (0, constructors_1.cst)(0);
126
+ if (l.kind === 'const' && r.kind === 'const' && r.value !== 0)
127
+ return (0, constructors_1.cst)(l.value / r.value);
128
+ return { kind: 'div', left: l, right: r };
129
+ }
130
+ case 'pow': {
131
+ const base = simplifyOnce(expr.base);
132
+ const exponent = simplifyOnce(expr.exp);
133
+ if (isConst(exponent, 0))
134
+ return (0, constructors_1.cst)(1);
135
+ if (isConst(exponent, 1))
136
+ return base;
137
+ if (isConst(base, 0))
138
+ return (0, constructors_1.cst)(0);
139
+ if (isConst(base, 1))
140
+ return (0, constructors_1.cst)(1);
141
+ if (base.kind === 'const' && exponent.kind === 'const') {
142
+ return (0, constructors_1.cst)(Math.pow(base.value, exponent.value));
143
+ }
144
+ return { kind: 'pow', base, exp: exponent };
145
+ }
146
+ case 'sin':
147
+ case 'cos':
148
+ case 'tan':
149
+ case 'log':
150
+ case 'exp': {
151
+ const arg = simplifyOnce(expr.arg);
152
+ if (arg.kind === 'const') {
153
+ switch (expr.kind) {
154
+ case 'sin':
155
+ return (0, constructors_1.cst)(Math.sin(arg.value));
156
+ case 'cos':
157
+ return (0, constructors_1.cst)(Math.cos(arg.value));
158
+ case 'tan':
159
+ return (0, constructors_1.cst)(Math.tan(arg.value));
160
+ case 'log':
161
+ if (arg.value > 0)
162
+ return (0, constructors_1.cst)(Math.log(arg.value));
163
+ break;
164
+ case 'exp':
165
+ return (0, constructors_1.cst)(Math.exp(arg.value));
166
+ }
167
+ }
168
+ return { kind: expr.kind, arg };
169
+ }
170
+ }
171
+ }
172
+ function exprEquals(a, b) {
173
+ if (a.kind !== b.kind)
174
+ return false;
175
+ switch (a.kind) {
176
+ case 'const':
177
+ return a.value === b.value;
178
+ case 'var':
179
+ return a.name === b.name;
180
+ case 'add':
181
+ case 'mul': {
182
+ const bMulti = b;
183
+ if (a.args.length !== bMulti.args.length)
184
+ return false;
185
+ for (let i = 0; i < a.args.length; i++) {
186
+ const aArg = a.args[i];
187
+ const bArg = bMulti.args[i];
188
+ if (aArg === undefined || bArg === undefined)
189
+ return false;
190
+ if (!exprEquals(aArg, bArg))
191
+ return false;
192
+ }
193
+ return true;
194
+ }
195
+ case 'sub':
196
+ case 'div': {
197
+ const bBin = b;
198
+ return exprEquals(a.left, bBin.left) && exprEquals(a.right, bBin.right);
199
+ }
200
+ case 'pow': {
201
+ const bPow = b;
202
+ return exprEquals(a.base, bPow.base) && exprEquals(a.exp, bPow.exp);
203
+ }
204
+ case 'neg':
205
+ return exprEquals(a.arg, b.arg);
206
+ case 'sin':
207
+ case 'cos':
208
+ case 'tan':
209
+ case 'log':
210
+ case 'exp':
211
+ return exprEquals(a.arg, b.arg);
212
+ }
213
+ }
214
+ //# sourceMappingURL=simplify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplify.js","sourceRoot":"","sources":["../../../src/runtime/symbolic-diff/simplify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Expr } from './types';
2
+ export declare function toString(expr: Expr): string;
3
+ //# sourceMappingURL=stringify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../../src/runtime/symbolic-diff/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AA0CpC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CA2B3C"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toString = toString;
4
+ // Precedencias para decidir paréntesis.
5
+ const PREC = {
6
+ add: 1,
7
+ sub: 1,
8
+ mul: 2,
9
+ div: 2,
10
+ neg: 3,
11
+ pow: 4,
12
+ atom: 5,
13
+ };
14
+ function precedence(expr) {
15
+ switch (expr.kind) {
16
+ case 'const':
17
+ case 'var':
18
+ case 'sin':
19
+ case 'cos':
20
+ case 'tan':
21
+ case 'log':
22
+ case 'exp':
23
+ return PREC.atom;
24
+ case 'add':
25
+ return PREC.add;
26
+ case 'sub':
27
+ return PREC.sub;
28
+ case 'mul':
29
+ return PREC.mul;
30
+ case 'div':
31
+ return PREC.div;
32
+ case 'neg':
33
+ return PREC.neg;
34
+ case 'pow':
35
+ return PREC.pow;
36
+ }
37
+ }
38
+ function wrap(s, inner, outer) {
39
+ return inner < outer ? `(${s})` : s;
40
+ }
41
+ function toString(expr) {
42
+ const myPrec = precedence(expr);
43
+ switch (expr.kind) {
44
+ case 'const':
45
+ return String(expr.value);
46
+ case 'var':
47
+ return expr.name;
48
+ case 'add':
49
+ return expr.args.map((a) => wrap(toString(a), precedence(a), myPrec)).join(' + ');
50
+ case 'mul':
51
+ return expr.args.map((a) => wrap(toString(a), precedence(a), myPrec)).join('*');
52
+ case 'sub':
53
+ return `${wrap(toString(expr.left), precedence(expr.left), myPrec)} - ${wrap(toString(expr.right), precedence(expr.right), myPrec + 1)}`;
54
+ case 'div':
55
+ return `${wrap(toString(expr.left), precedence(expr.left), myPrec)}/${wrap(toString(expr.right), precedence(expr.right), myPrec + 1)}`;
56
+ case 'pow':
57
+ // pow es right-assoc; el lado izquierdo necesita más prioridad para no envolver de más.
58
+ return `${wrap(toString(expr.base), precedence(expr.base), myPrec + 1)}^${wrap(toString(expr.exp), precedence(expr.exp), myPrec)}`;
59
+ case 'neg':
60
+ return `-${wrap(toString(expr.arg), precedence(expr.arg), myPrec)}`;
61
+ case 'sin':
62
+ case 'cos':
63
+ case 'tan':
64
+ case 'log':
65
+ case 'exp':
66
+ return `${expr.kind}(${toString(expr.arg)})`;
67
+ }
68
+ }
69
+ //# sourceMappingURL=stringify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../../src/runtime/symbolic-diff/stringify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type UnaryFn = 'sin' | 'cos' | 'tan' | 'log' | 'exp';
2
+ export type Expr = {
3
+ kind: 'const';
4
+ value: number;
5
+ } | {
6
+ kind: 'var';
7
+ name: string;
8
+ } | {
9
+ kind: 'add';
10
+ args: Expr[];
11
+ } | {
12
+ kind: 'mul';
13
+ args: Expr[];
14
+ } | {
15
+ kind: 'sub';
16
+ left: Expr;
17
+ right: Expr;
18
+ } | {
19
+ kind: 'div';
20
+ left: Expr;
21
+ right: Expr;
22
+ } | {
23
+ kind: 'pow';
24
+ base: Expr;
25
+ exp: Expr;
26
+ } | {
27
+ kind: 'neg';
28
+ arg: Expr;
29
+ } | {
30
+ kind: UnaryFn;
31
+ arg: Expr;
32
+ };
33
+ export declare const UNARY_FUNCTIONS: readonly UnaryFn[];
34
+ export declare function isUnaryFn(kind: string): kind is UnaryFn;
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/symbolic-diff/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5D,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAAC;AAEjC,eAAO,MAAM,eAAe,EAAE,SAAS,OAAO,EAAwC,CAAC;AAEvF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,OAAO,CAEvD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UNARY_FUNCTIONS = void 0;
4
+ exports.isUnaryFn = isUnaryFn;
5
+ exports.UNARY_FUNCTIONS = ['sin', 'cos', 'tan', 'log', 'exp'];
6
+ function isUnaryFn(kind) {
7
+ return exports.UNARY_FUNCTIONS.includes(kind);
8
+ }
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/symbolic-diff/types.ts"],"names":[],"mappings":";;;AAeA,8BAEC;AAJY,QAAA,eAAe,GAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEvF,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAQ,uBAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { RewriteRule, Term } from './types';
2
+ export interface CriticalPair {
3
+ lhs: Term;
4
+ rhs: Term;
5
+ /** Reglas que originaron el par (informativo). */
6
+ ruleOuterIndex: number;
7
+ ruleInnerIndex: number;
8
+ }
9
+ /**
10
+ * Calcula todos los critical pairs entre dos reglas.
11
+ *
12
+ * Las variables se renombran para evitar colisiones espurias
13
+ * (la regla "outer" recibe sufijo `_o`, la inner sufijo `_i`).
14
+ */
15
+ export declare function criticalPairsBetween(outer: RewriteRule, inner: RewriteRule, outerIdx: number, innerIdx: number): CriticalPair[];
16
+ /**
17
+ * Critical pairs de un TRS completo: para cada par de reglas
18
+ * (incluyendo (i, i) con i = i), calcula sus CPs.
19
+ */
20
+ export declare function allCriticalPairs(rules: RewriteRule[]): CriticalPair[];
21
+ /**
22
+ * Confluencia local: todos los CPs son joinables.
23
+ *
24
+ * Un CP (a, b) es joinable si normalize(a) = normalize(b).
25
+ *
26
+ * Por Newman's Lemma: terminating + locally confluent ⇒ confluent.
27
+ * No verificamos terminación acá (eso requiere LPO/KBO/etc.).
28
+ */
29
+ export declare function isConfluent(trs: {
30
+ rules: RewriteRule[];
31
+ }): boolean;
32
+ /**
33
+ * Helper: ¿la variable v aparece libre en t?
34
+ *
35
+ * Re-export para facilidad de imports.
36
+ */
37
+ export declare function freeVarsOf(t: Term): Set<string>;
38
+ //# sourceMappingURL=critical-pairs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"critical-pairs.d.ts","sourceRoot":"","sources":["../../../src/runtime/term-rewriting/critical-pairs.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAgB,IAAI,EAAE,MAAM,SAAS,CAAC;AAI/D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;IACV,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,YAAY,EAAE,CAiChB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAWrE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,OAAO,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAE/C"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Term Rewriting — Critical pairs
4
+ // ============================================================
5
+ //
6
+ // Un critical pair (CP) entre dos reglas l₁ → r₁ y l₂ → r₂ surge
7
+ // cuando un subtérmino no-variable de l₁ unifica con l₂. Esto
8
+ // representa dos formas distintas de reducir el mismo término, y
9
+ // si ambas convergen a la misma forma normal, las reglas son
10
+ // "join-able" en ese punto.
11
+ //
12
+ // Algoritmo (Knuth-Bendix Critical Pair Lemma):
13
+ // Para cada posición p no-variable de l₁:
14
+ // subterm = l₁ |_p
15
+ // si unify(subterm, l₂) = σ existe:
16
+ // cp₁ = σ(r₁)
17
+ // cp₂ = σ(l₁[p ← r₂])
18
+ // => (cp₁, cp₂) es un critical pair.
19
+ //
20
+ // El sistema es **localmente confluente** sii todos sus CPs son
21
+ // joinables (Newman's Lemma + decidible para sistemas terminantes).
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.criticalPairsBetween = criticalPairsBetween;
24
+ exports.allCriticalPairs = allCriticalPairs;
25
+ exports.isConfluent = isConfluent;
26
+ exports.freeVarsOf = freeVarsOf;
27
+ const term_utils_1 = require("./term-utils");
28
+ const rewrite_1 = require("./rewrite");
29
+ /**
30
+ * Calcula todos los critical pairs entre dos reglas.
31
+ *
32
+ * Las variables se renombran para evitar colisiones espurias
33
+ * (la regla "outer" recibe sufijo `_o`, la inner sufijo `_i`).
34
+ */
35
+ function criticalPairsBetween(outer, inner, outerIdx, innerIdx) {
36
+ const oLhs = (0, term_utils_1.renameVars)(outer.lhs, 'o');
37
+ const oRhs = (0, term_utils_1.renameVars)(outer.rhs, 'o');
38
+ const iLhs = (0, term_utils_1.renameVars)(inner.lhs, 'i');
39
+ const iRhs = (0, term_utils_1.renameVars)(inner.rhs, 'i');
40
+ const pairs = [];
41
+ const positions = (0, rewrite_1.allPositions)(oLhs);
42
+ for (const pos of positions) {
43
+ const sub = (0, rewrite_1.subtermAt)(oLhs, pos);
44
+ if (sub === null)
45
+ continue;
46
+ if (sub.kind === 'var')
47
+ continue; // CPs solo en posiciones no-variable
48
+ const mgu = (0, term_utils_1.unify)(sub, iLhs);
49
+ if (mgu === null)
50
+ continue;
51
+ // Trivial overlap: misma regla en raíz (outerIdx === innerIdx, pos = [])
52
+ // ⇒ produce el CP (σ(rhs), σ(rhs)) que es siempre joinable. Lo omitimos.
53
+ if (outerIdx === innerIdx && pos.length === 0)
54
+ continue;
55
+ const cpInner = (0, term_utils_1.applySubst)(oRhs, mgu);
56
+ const cpOuter = (0, term_utils_1.applySubst)((0, rewrite_1.replaceAt)(oLhs, pos, iRhs), mgu);
57
+ pairs.push({
58
+ lhs: cpOuter,
59
+ rhs: cpInner,
60
+ ruleOuterIndex: outerIdx,
61
+ ruleInnerIndex: innerIdx,
62
+ });
63
+ }
64
+ return pairs;
65
+ }
66
+ /**
67
+ * Critical pairs de un TRS completo: para cada par de reglas
68
+ * (incluyendo (i, i) con i = i), calcula sus CPs.
69
+ */
70
+ function allCriticalPairs(rules) {
71
+ const out = [];
72
+ for (let i = 0; i < rules.length; i++) {
73
+ for (let j = 0; j < rules.length; j++) {
74
+ const ri = rules[i];
75
+ const rj = rules[j];
76
+ if (ri === undefined || rj === undefined)
77
+ continue;
78
+ out.push(...criticalPairsBetween(ri, rj, i, j));
79
+ }
80
+ }
81
+ return out;
82
+ }
83
+ /**
84
+ * Confluencia local: todos los CPs son joinables.
85
+ *
86
+ * Un CP (a, b) es joinable si normalize(a) = normalize(b).
87
+ *
88
+ * Por Newman's Lemma: terminating + locally confluent ⇒ confluent.
89
+ * No verificamos terminación acá (eso requiere LPO/KBO/etc.).
90
+ */
91
+ function isConfluent(trs) {
92
+ const cps = allCriticalPairs(trs.rules);
93
+ for (const cp of cps) {
94
+ const a = (0, rewrite_1.normalize)(cp.lhs, trs.rules);
95
+ const b = (0, rewrite_1.normalize)(cp.rhs, trs.rules);
96
+ if (!(0, term_utils_1.termEquals)(a, b))
97
+ return false;
98
+ }
99
+ return true;
100
+ }
101
+ /**
102
+ * Helper: ¿la variable v aparece libre en t?
103
+ *
104
+ * Re-export para facilidad de imports.
105
+ */
106
+ function freeVarsOf(t) {
107
+ return (0, term_utils_1.varsOf)(t);
108
+ }
109
+ //# sourceMappingURL=critical-pairs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"critical-pairs.js","sourceRoot":"","sources":["../../../src/runtime/term-rewriting/critical-pairs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type { Term, RewriteRule, TRS, Substitution, KBOptions, KBResult } from './types';
2
+ export { termEquals, cloneTerm, varsOf, applySubst, occursIn, match, unify, renameVars, termSize, v, f, c, } from './term-utils';
3
+ export { rewriteStep, normalize, allPositions, subtermAt, replaceAt } from './rewrite';
4
+ export { lpo, lpoCompare } from './lpo';
5
+ export type { LPOComparison } from './lpo';
6
+ export { criticalPairsBetween, allCriticalPairs, isConfluent, freeVarsOf } from './critical-pairs';
7
+ export type { CriticalPair } from './critical-pairs';
8
+ export { knuthBendixCompletion, orient, makeTRS } from './knuth-bendix';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/term-rewriting/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzF,OAAO,EACL,UAAU,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,KAAK,EACL,UAAU,EACV,QAAQ,EACR,CAAC,EACD,CAAC,EACD,CAAC,GACF,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEvF,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnG,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Term Rewriting — Barrel de exportaciones
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.makeTRS = exports.orient = exports.knuthBendixCompletion = exports.freeVarsOf = exports.isConfluent = exports.allCriticalPairs = exports.criticalPairsBetween = exports.lpoCompare = exports.lpo = exports.replaceAt = exports.subtermAt = exports.allPositions = exports.normalize = exports.rewriteStep = exports.c = exports.f = exports.v = exports.termSize = exports.renameVars = exports.unify = exports.match = exports.occursIn = exports.applySubst = exports.varsOf = exports.cloneTerm = exports.termEquals = void 0;
7
+ var term_utils_1 = require("./term-utils");
8
+ Object.defineProperty(exports, "termEquals", { enumerable: true, get: function () { return term_utils_1.termEquals; } });
9
+ Object.defineProperty(exports, "cloneTerm", { enumerable: true, get: function () { return term_utils_1.cloneTerm; } });
10
+ Object.defineProperty(exports, "varsOf", { enumerable: true, get: function () { return term_utils_1.varsOf; } });
11
+ Object.defineProperty(exports, "applySubst", { enumerable: true, get: function () { return term_utils_1.applySubst; } });
12
+ Object.defineProperty(exports, "occursIn", { enumerable: true, get: function () { return term_utils_1.occursIn; } });
13
+ Object.defineProperty(exports, "match", { enumerable: true, get: function () { return term_utils_1.match; } });
14
+ Object.defineProperty(exports, "unify", { enumerable: true, get: function () { return term_utils_1.unify; } });
15
+ Object.defineProperty(exports, "renameVars", { enumerable: true, get: function () { return term_utils_1.renameVars; } });
16
+ Object.defineProperty(exports, "termSize", { enumerable: true, get: function () { return term_utils_1.termSize; } });
17
+ Object.defineProperty(exports, "v", { enumerable: true, get: function () { return term_utils_1.v; } });
18
+ Object.defineProperty(exports, "f", { enumerable: true, get: function () { return term_utils_1.f; } });
19
+ Object.defineProperty(exports, "c", { enumerable: true, get: function () { return term_utils_1.c; } });
20
+ var rewrite_1 = require("./rewrite");
21
+ Object.defineProperty(exports, "rewriteStep", { enumerable: true, get: function () { return rewrite_1.rewriteStep; } });
22
+ Object.defineProperty(exports, "normalize", { enumerable: true, get: function () { return rewrite_1.normalize; } });
23
+ Object.defineProperty(exports, "allPositions", { enumerable: true, get: function () { return rewrite_1.allPositions; } });
24
+ Object.defineProperty(exports, "subtermAt", { enumerable: true, get: function () { return rewrite_1.subtermAt; } });
25
+ Object.defineProperty(exports, "replaceAt", { enumerable: true, get: function () { return rewrite_1.replaceAt; } });
26
+ var lpo_1 = require("./lpo");
27
+ Object.defineProperty(exports, "lpo", { enumerable: true, get: function () { return lpo_1.lpo; } });
28
+ Object.defineProperty(exports, "lpoCompare", { enumerable: true, get: function () { return lpo_1.lpoCompare; } });
29
+ var critical_pairs_1 = require("./critical-pairs");
30
+ Object.defineProperty(exports, "criticalPairsBetween", { enumerable: true, get: function () { return critical_pairs_1.criticalPairsBetween; } });
31
+ Object.defineProperty(exports, "allCriticalPairs", { enumerable: true, get: function () { return critical_pairs_1.allCriticalPairs; } });
32
+ Object.defineProperty(exports, "isConfluent", { enumerable: true, get: function () { return critical_pairs_1.isConfluent; } });
33
+ Object.defineProperty(exports, "freeVarsOf", { enumerable: true, get: function () { return critical_pairs_1.freeVarsOf; } });
34
+ var knuth_bendix_1 = require("./knuth-bendix");
35
+ Object.defineProperty(exports, "knuthBendixCompletion", { enumerable: true, get: function () { return knuth_bendix_1.knuthBendixCompletion; } });
36
+ Object.defineProperty(exports, "orient", { enumerable: true, get: function () { return knuth_bendix_1.orient; } });
37
+ Object.defineProperty(exports, "makeTRS", { enumerable: true, get: function () { return knuth_bendix_1.makeTRS; } });
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/term-rewriting/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,8CAA8C;AAC9C,+DAA+D;;;AAI/D,2CAasB;AAZpB,wGAAA,UAAU,OAAA;AACV,uGAAA,SAAS,OAAA;AACT,oGAAA,MAAM,OAAA;AACN,wGAAA,UAAU,OAAA;AACV,sGAAA,QAAQ,OAAA;AACR,mGAAA,KAAK,OAAA;AACL,mGAAA,KAAK,OAAA;AACL,wGAAA,UAAU,OAAA;AACV,sGAAA,QAAQ,OAAA;AACR,+FAAA,CAAC,OAAA;AACD,+FAAA,CAAC,OAAA;AACD,+FAAA,CAAC,OAAA;AAGH,qCAAuF;AAA9E,sGAAA,WAAW,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,oGAAA,SAAS,OAAA;AAEnE,6BAAwC;AAA/B,0FAAA,GAAG,OAAA;AAAE,iGAAA,UAAU,OAAA;AAGxB,mDAAmG;AAA1F,sHAAA,oBAAoB,OAAA;AAAE,kHAAA,gBAAgB,OAAA;AAAE,6GAAA,WAAW,OAAA;AAAE,4GAAA,UAAU,OAAA;AAGxE,+CAAwE;AAA/D,qHAAA,qBAAqB,OAAA;AAAE,sGAAA,MAAM,OAAA;AAAE,uGAAA,OAAO,OAAA"}
@@ -0,0 +1,29 @@
1
+ import type { KBOptions, KBResult, RewriteRule, Term, TRS } from './types';
2
+ /**
3
+ * Orienta una ecuación s = t a regla l → r usando LPO.
4
+ *
5
+ * - Si s >LPO t: devuelve s → t.
6
+ * - Si t >LPO s: devuelve t → s.
7
+ * - Si son incomparables: null (KB falla aquí, el caller debe abortar
8
+ * o pedir al user una precedencia distinta).
9
+ * - Si son iguales: ecuación trivial, devuelve null sin error.
10
+ */
11
+ export declare function orient(s: Term, t: Term, precedence: Map<string, number>): RewriteRule | null;
12
+ /**
13
+ * Knuth-Bendix completion.
14
+ *
15
+ * `initialRules` se interpretan como ecuaciones orientadas. La
16
+ * orientación inicial se respeta si ya está bien dirigida según
17
+ * la precedencia; si no, se re-orienta.
18
+ *
19
+ * Devuelve un `KBResult` con:
20
+ * - `completed: true` si convergió.
21
+ * - `completed: false` si se excedió `maxSteps` o un CP no-joinable
22
+ * no pudo orientarse (LPO incomparable).
23
+ */
24
+ export declare function knuthBendixCompletion(initialRules: RewriteRule[], opts?: KBOptions): KBResult;
25
+ /**
26
+ * Sugar: construye un TRS plano.
27
+ */
28
+ export declare function makeTRS(rules: RewriteRule[]): TRS;
29
+ //# sourceMappingURL=knuth-bendix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knuth-bendix.d.ts","sourceRoot":"","sources":["../../../src/runtime/term-rewriting/knuth-bendix.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAM3E;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,GAAG,IAAI,CAO5F;AAyDD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,SAAc,GAAG,QAAQ,CAwEjG;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAEjD"}