@stevenvo780/st-lang 4.3.0 → 4.4.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 (307) 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 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/lambda-calc/church.d.ts.map +1 -1
  6. package/dist/lambda-calc/church.js.map +1 -1
  7. package/dist/lambda-calc/combinators.d.ts.map +1 -1
  8. package/dist/lambda-calc/combinators.js.map +1 -1
  9. package/dist/lambda-calc/index.d.ts +1 -1
  10. package/dist/lambda-calc/index.d.ts.map +1 -1
  11. package/dist/lambda-calc/index.js.map +1 -1
  12. package/dist/mltt/equality.d.ts +9 -0
  13. package/dist/mltt/equality.d.ts.map +1 -0
  14. package/dist/mltt/equality.js +79 -0
  15. package/dist/mltt/equality.js.map +1 -0
  16. package/dist/mltt/index.d.ts +8 -0
  17. package/dist/mltt/index.d.ts.map +1 -0
  18. package/dist/mltt/index.js +49 -0
  19. package/dist/mltt/index.js.map +1 -0
  20. package/dist/mltt/infer.d.ts +17 -0
  21. package/dist/mltt/infer.d.ts.map +1 -0
  22. package/dist/mltt/infer.js +269 -0
  23. package/dist/mltt/infer.js.map +1 -0
  24. package/dist/mltt/normalize.d.ts +7 -0
  25. package/dist/mltt/normalize.d.ts.map +1 -0
  26. package/dist/mltt/normalize.js +131 -0
  27. package/dist/mltt/normalize.js.map +1 -0
  28. package/dist/mltt/substitute.d.ts +4 -0
  29. package/dist/mltt/substitute.d.ts.map +1 -0
  30. package/dist/mltt/substitute.js +94 -0
  31. package/dist/mltt/substitute.js.map +1 -0
  32. package/dist/mltt/types.d.ts +72 -0
  33. package/dist/mltt/types.d.ts.map +1 -0
  34. package/dist/mltt/types.js +211 -0
  35. package/dist/mltt/types.js.map +1 -0
  36. package/dist/profiles/many-valued/index.d.ts.map +1 -1
  37. package/dist/profiles/many-valued/index.js.map +1 -1
  38. package/dist/profiles/mu-calculus/check.d.ts +15 -0
  39. package/dist/profiles/mu-calculus/check.d.ts.map +1 -0
  40. package/dist/profiles/mu-calculus/check.js +172 -0
  41. package/dist/profiles/mu-calculus/check.js.map +1 -0
  42. package/dist/profiles/mu-calculus/ctl-translate.d.ts +61 -0
  43. package/dist/profiles/mu-calculus/ctl-translate.d.ts.map +1 -0
  44. package/dist/profiles/mu-calculus/ctl-translate.js +181 -0
  45. package/dist/profiles/mu-calculus/ctl-translate.js.map +1 -0
  46. package/dist/profiles/mu-calculus/index.d.ts +7 -0
  47. package/dist/profiles/mu-calculus/index.d.ts.map +1 -0
  48. package/dist/profiles/mu-calculus/index.js +33 -0
  49. package/dist/profiles/mu-calculus/index.js.map +1 -0
  50. package/dist/profiles/mu-calculus/types.d.ts +51 -0
  51. package/dist/profiles/mu-calculus/types.d.ts.map +1 -0
  52. package/dist/profiles/mu-calculus/types.js +42 -0
  53. package/dist/profiles/mu-calculus/types.js.map +1 -0
  54. package/dist/profiles/mu-calculus/wellformed.d.ts +40 -0
  55. package/dist/profiles/mu-calculus/wellformed.d.ts.map +1 -0
  56. package/dist/profiles/mu-calculus/wellformed.js +160 -0
  57. package/dist/profiles/mu-calculus/wellformed.js.map +1 -0
  58. package/dist/profiles/sequent-lk/cut-elimination.d.ts +11 -0
  59. package/dist/profiles/sequent-lk/cut-elimination.d.ts.map +1 -0
  60. package/dist/profiles/sequent-lk/cut-elimination.js +216 -0
  61. package/dist/profiles/sequent-lk/cut-elimination.js.map +1 -0
  62. package/dist/profiles/sequent-lk/index.d.ts +5 -0
  63. package/dist/profiles/sequent-lk/index.d.ts.map +1 -0
  64. package/dist/profiles/sequent-lk/index.js +24 -0
  65. package/dist/profiles/sequent-lk/index.js.map +1 -0
  66. package/dist/profiles/sequent-lk/prover.d.ts +25 -0
  67. package/dist/profiles/sequent-lk/prover.d.ts.map +1 -0
  68. package/dist/profiles/sequent-lk/prover.js +532 -0
  69. package/dist/profiles/sequent-lk/prover.js.map +1 -0
  70. package/dist/profiles/sequent-lk/types.d.ts +55 -0
  71. package/dist/profiles/sequent-lk/types.d.ts.map +1 -0
  72. package/dist/profiles/sequent-lk/types.js +18 -0
  73. package/dist/profiles/sequent-lk/types.js.map +1 -0
  74. package/dist/profiles/sequent-lk/util.d.ts +18 -0
  75. package/dist/profiles/sequent-lk/util.d.ts.map +1 -0
  76. package/dist/profiles/sequent-lk/util.js +71 -0
  77. package/dist/profiles/sequent-lk/util.js.map +1 -0
  78. package/dist/refinement-types/checker.d.ts +19 -0
  79. package/dist/refinement-types/checker.d.ts.map +1 -0
  80. package/dist/refinement-types/checker.js +248 -0
  81. package/dist/refinement-types/checker.js.map +1 -0
  82. package/dist/refinement-types/index.d.ts +11 -0
  83. package/dist/refinement-types/index.d.ts.map +1 -0
  84. package/dist/refinement-types/index.js +51 -0
  85. package/dist/refinement-types/index.js.map +1 -0
  86. package/dist/refinement-types/predicate.d.ts +31 -0
  87. package/dist/refinement-types/predicate.d.ts.map +1 -0
  88. package/dist/refinement-types/predicate.js +369 -0
  89. package/dist/refinement-types/predicate.js.map +1 -0
  90. package/dist/refinement-types/solver.d.ts +24 -0
  91. package/dist/refinement-types/solver.d.ts.map +1 -0
  92. package/dist/refinement-types/solver.js +207 -0
  93. package/dist/refinement-types/solver.js.map +1 -0
  94. package/dist/refinement-types/subtype.d.ts +14 -0
  95. package/dist/refinement-types/subtype.d.ts.map +1 -0
  96. package/dist/refinement-types/subtype.js +39 -0
  97. package/dist/refinement-types/subtype.js.map +1 -0
  98. package/dist/refinement-types/types.d.ts +64 -0
  99. package/dist/refinement-types/types.d.ts.map +1 -0
  100. package/dist/refinement-types/types.js +130 -0
  101. package/dist/refinement-types/types.js.map +1 -0
  102. package/dist/runtime/anti-unification/anti-unify.d.ts +22 -0
  103. package/dist/runtime/anti-unification/anti-unify.d.ts.map +1 -0
  104. package/dist/runtime/anti-unification/anti-unify.js +154 -0
  105. package/dist/runtime/anti-unification/anti-unify.js.map +1 -0
  106. package/dist/runtime/anti-unification/index.d.ts +6 -0
  107. package/dist/runtime/anti-unification/index.d.ts.map +1 -0
  108. package/dist/runtime/anti-unification/index.js +23 -0
  109. package/dist/runtime/anti-unification/index.js.map +1 -0
  110. package/dist/runtime/anti-unification/many.d.ts +49 -0
  111. package/dist/runtime/anti-unification/many.d.ts.map +1 -0
  112. package/dist/runtime/anti-unification/many.js +185 -0
  113. package/dist/runtime/anti-unification/many.js.map +1 -0
  114. package/dist/runtime/anti-unification/term-utils.d.ts +40 -0
  115. package/dist/runtime/anti-unification/term-utils.d.ts.map +1 -0
  116. package/dist/runtime/anti-unification/term-utils.js +173 -0
  117. package/dist/runtime/anti-unification/term-utils.js.map +1 -0
  118. package/dist/runtime/anti-unification/types.d.ts +41 -0
  119. package/dist/runtime/anti-unification/types.d.ts.map +1 -0
  120. package/dist/runtime/anti-unification/types.js +26 -0
  121. package/dist/runtime/anti-unification/types.js.map +1 -0
  122. package/dist/runtime/csp/ac3.d.ts +20 -0
  123. package/dist/runtime/csp/ac3.d.ts.map +1 -0
  124. package/dist/runtime/csp/ac3.js +165 -0
  125. package/dist/runtime/csp/ac3.js.map +1 -0
  126. package/dist/runtime/csp/backtrack.d.ts +15 -0
  127. package/dist/runtime/csp/backtrack.d.ts.map +1 -0
  128. package/dist/runtime/csp/backtrack.js +233 -0
  129. package/dist/runtime/csp/backtrack.js.map +1 -0
  130. package/dist/runtime/csp/builtins.d.ts +27 -0
  131. package/dist/runtime/csp/builtins.d.ts.map +1 -0
  132. package/dist/runtime/csp/builtins.js +109 -0
  133. package/dist/runtime/csp/builtins.js.map +1 -0
  134. package/dist/runtime/csp/index.d.ts +5 -0
  135. package/dist/runtime/csp/index.d.ts.map +1 -0
  136. package/dist/runtime/csp/index.js +23 -0
  137. package/dist/runtime/csp/index.js.map +1 -0
  138. package/dist/runtime/csp/types.d.ts +54 -0
  139. package/dist/runtime/csp/types.d.ts.map +1 -0
  140. package/dist/runtime/csp/types.js +14 -0
  141. package/dist/runtime/csp/types.js.map +1 -0
  142. package/dist/runtime/markov-logic/grounding.d.ts +19 -0
  143. package/dist/runtime/markov-logic/grounding.d.ts.map +1 -0
  144. package/dist/runtime/markov-logic/grounding.js +252 -0
  145. package/dist/runtime/markov-logic/grounding.js.map +1 -0
  146. package/dist/runtime/markov-logic/index.d.ts +6 -0
  147. package/dist/runtime/markov-logic/index.d.ts.map +1 -0
  148. package/dist/runtime/markov-logic/index.js +47 -0
  149. package/dist/runtime/markov-logic/index.js.map +1 -0
  150. package/dist/runtime/markov-logic/inference.d.ts +77 -0
  151. package/dist/runtime/markov-logic/inference.d.ts.map +1 -0
  152. package/dist/runtime/markov-logic/inference.js +382 -0
  153. package/dist/runtime/markov-logic/inference.js.map +1 -0
  154. package/dist/runtime/markov-logic/parser.d.ts +25 -0
  155. package/dist/runtime/markov-logic/parser.d.ts.map +1 -0
  156. package/dist/runtime/markov-logic/parser.js +264 -0
  157. package/dist/runtime/markov-logic/parser.js.map +1 -0
  158. package/dist/runtime/markov-logic/types.d.ts +64 -0
  159. package/dist/runtime/markov-logic/types.d.ts.map +1 -0
  160. package/dist/runtime/markov-logic/types.js +17 -0
  161. package/dist/runtime/markov-logic/types.js.map +1 -0
  162. package/dist/runtime/pi-calculus/congruence.d.ts +15 -0
  163. package/dist/runtime/pi-calculus/congruence.d.ts.map +1 -0
  164. package/dist/runtime/pi-calculus/congruence.js +271 -0
  165. package/dist/runtime/pi-calculus/congruence.js.map +1 -0
  166. package/dist/runtime/pi-calculus/index.d.ts +6 -0
  167. package/dist/runtime/pi-calculus/index.d.ts.map +1 -0
  168. package/dist/runtime/pi-calculus/index.js +30 -0
  169. package/dist/runtime/pi-calculus/index.js.map +1 -0
  170. package/dist/runtime/pi-calculus/names.d.ts +28 -0
  171. package/dist/runtime/pi-calculus/names.d.ts.map +1 -0
  172. package/dist/runtime/pi-calculus/names.js +182 -0
  173. package/dist/runtime/pi-calculus/names.js.map +1 -0
  174. package/dist/runtime/pi-calculus/reduction.d.ts +25 -0
  175. package/dist/runtime/pi-calculus/reduction.d.ts.map +1 -0
  176. package/dist/runtime/pi-calculus/reduction.js +338 -0
  177. package/dist/runtime/pi-calculus/reduction.js.map +1 -0
  178. package/dist/runtime/pi-calculus/substitution.d.ts +11 -0
  179. package/dist/runtime/pi-calculus/substitution.d.ts.map +1 -0
  180. package/dist/runtime/pi-calculus/substitution.js +109 -0
  181. package/dist/runtime/pi-calculus/substitution.js.map +1 -0
  182. package/dist/runtime/pi-calculus/types.d.ts +38 -0
  183. package/dist/runtime/pi-calculus/types.d.ts.map +1 -0
  184. package/dist/runtime/pi-calculus/types.js +22 -0
  185. package/dist/runtime/pi-calculus/types.js.map +1 -0
  186. package/dist/runtime/planning/astar.d.ts +10 -0
  187. package/dist/runtime/planning/astar.d.ts.map +1 -0
  188. package/dist/runtime/planning/astar.js +155 -0
  189. package/dist/runtime/planning/astar.js.map +1 -0
  190. package/dist/runtime/planning/bfs.d.ts +17 -0
  191. package/dist/runtime/planning/bfs.d.ts.map +1 -0
  192. package/dist/runtime/planning/bfs.js +87 -0
  193. package/dist/runtime/planning/bfs.js.map +1 -0
  194. package/dist/runtime/planning/ground.d.ts +55 -0
  195. package/dist/runtime/planning/ground.d.ts.map +1 -0
  196. package/dist/runtime/planning/ground.js +154 -0
  197. package/dist/runtime/planning/ground.js.map +1 -0
  198. package/dist/runtime/planning/heuristic.d.ts +29 -0
  199. package/dist/runtime/planning/heuristic.d.ts.map +1 -0
  200. package/dist/runtime/planning/heuristic.js +172 -0
  201. package/dist/runtime/planning/heuristic.js.map +1 -0
  202. package/dist/runtime/planning/index.d.ts +6 -0
  203. package/dist/runtime/planning/index.d.ts.map +1 -0
  204. package/dist/runtime/planning/index.js +38 -0
  205. package/dist/runtime/planning/index.js.map +1 -0
  206. package/dist/runtime/planning/types.d.ts +100 -0
  207. package/dist/runtime/planning/types.d.ts.map +1 -0
  208. package/dist/runtime/planning/types.js +22 -0
  209. package/dist/runtime/planning/types.js.map +1 -0
  210. package/dist/runtime/symbolic-diff/differentiate.d.ts.map +1 -1
  211. package/dist/runtime/symbolic-diff/differentiate.js.map +1 -1
  212. package/dist/runtime/symbolic-diff/index.d.ts +1 -1
  213. package/dist/runtime/symbolic-diff/index.d.ts.map +1 -1
  214. package/dist/runtime/symbolic-diff/index.js.map +1 -1
  215. package/dist/runtime/symbolic-diff/parse.d.ts.map +1 -1
  216. package/dist/runtime/symbolic-diff/parse.js +7 -1
  217. package/dist/runtime/symbolic-diff/parse.js.map +1 -1
  218. package/dist/runtime/theorem-cache/cache.d.ts +100 -0
  219. package/dist/runtime/theorem-cache/cache.d.ts.map +1 -0
  220. package/dist/runtime/theorem-cache/cache.js +213 -0
  221. package/dist/runtime/theorem-cache/cache.js.map +1 -0
  222. package/dist/runtime/theorem-cache/canonical.d.ts +59 -0
  223. package/dist/runtime/theorem-cache/canonical.d.ts.map +1 -0
  224. package/dist/runtime/theorem-cache/canonical.js +105 -0
  225. package/dist/runtime/theorem-cache/canonical.js.map +1 -0
  226. package/dist/runtime/theorem-cache/index.d.ts +6 -0
  227. package/dist/runtime/theorem-cache/index.d.ts.map +1 -0
  228. package/dist/runtime/theorem-cache/index.js +16 -0
  229. package/dist/runtime/theorem-cache/index.js.map +1 -0
  230. package/dist/runtime/theorem-cache/pattern.d.ts +24 -0
  231. package/dist/runtime/theorem-cache/pattern.d.ts.map +1 -0
  232. package/dist/runtime/theorem-cache/pattern.js +80 -0
  233. package/dist/runtime/theorem-cache/pattern.js.map +1 -0
  234. package/dist/system-f/index.d.ts +7 -0
  235. package/dist/system-f/index.d.ts.map +1 -0
  236. package/dist/system-f/index.js +48 -0
  237. package/dist/system-f/index.js.map +1 -0
  238. package/dist/system-f/infer.d.ts +9 -0
  239. package/dist/system-f/infer.d.ts.map +1 -0
  240. package/dist/system-f/infer.js +94 -0
  241. package/dist/system-f/infer.js.map +1 -0
  242. package/dist/system-f/reduce.d.ts +15 -0
  243. package/dist/system-f/reduce.d.ts.map +1 -0
  244. package/dist/system-f/reduce.js +259 -0
  245. package/dist/system-f/reduce.js.map +1 -0
  246. package/dist/system-f/types.d.ts +53 -0
  247. package/dist/system-f/types.d.ts.map +1 -0
  248. package/dist/system-f/types.js +157 -0
  249. package/dist/system-f/types.js.map +1 -0
  250. package/dist/tests/anti-unification/anti-unify.test.d.ts +2 -0
  251. package/dist/tests/anti-unification/anti-unify.test.d.ts.map +1 -0
  252. package/dist/tests/anti-unification/anti-unify.test.js +219 -0
  253. package/dist/tests/anti-unification/anti-unify.test.js.map +1 -0
  254. package/dist/tests/coverage-fill-aristotelian.test.js +1 -1
  255. package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -1
  256. package/dist/tests/coverage-fill-fallacies.test.js +1 -1
  257. package/dist/tests/coverage-fill-fallacies.test.js.map +1 -1
  258. package/dist/tests/coverage-fill-format.test.js +1 -1
  259. package/dist/tests/coverage-fill-format.test.js.map +1 -1
  260. package/dist/tests/coverage-fill-intuitionistic.test.js +1 -1
  261. package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -1
  262. package/dist/tests/coverage-fill-probabilistic.test.js +1 -1
  263. package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -1
  264. package/dist/tests/csp/csp.test.d.ts +2 -0
  265. package/dist/tests/csp/csp.test.d.ts.map +1 -0
  266. package/dist/tests/csp/csp.test.js +292 -0
  267. package/dist/tests/csp/csp.test.js.map +1 -0
  268. package/dist/tests/lambda-calc/lambda-calc.test.js.map +1 -1
  269. package/dist/tests/many-valued/many-valued.test.js.map +1 -1
  270. package/dist/tests/markov-logic/markov-logic.test.d.ts +2 -0
  271. package/dist/tests/markov-logic/markov-logic.test.d.ts.map +1 -0
  272. package/dist/tests/markov-logic/markov-logic.test.js +349 -0
  273. package/dist/tests/markov-logic/markov-logic.test.js.map +1 -0
  274. package/dist/tests/mltt/mltt.test.d.ts +2 -0
  275. package/dist/tests/mltt/mltt.test.d.ts.map +1 -0
  276. package/dist/tests/mltt/mltt.test.js +181 -0
  277. package/dist/tests/mltt/mltt.test.js.map +1 -0
  278. package/dist/tests/mu-calculus/check.test.d.ts +2 -0
  279. package/dist/tests/mu-calculus/check.test.d.ts.map +1 -0
  280. package/dist/tests/mu-calculus/check.test.js +234 -0
  281. package/dist/tests/mu-calculus/check.test.js.map +1 -0
  282. package/dist/tests/pi-calculus/pi-calculus.test.d.ts +2 -0
  283. package/dist/tests/pi-calculus/pi-calculus.test.d.ts.map +1 -0
  284. package/dist/tests/pi-calculus/pi-calculus.test.js +273 -0
  285. package/dist/tests/pi-calculus/pi-calculus.test.js.map +1 -0
  286. package/dist/tests/planning/planning.test.d.ts +2 -0
  287. package/dist/tests/planning/planning.test.d.ts.map +1 -0
  288. package/dist/tests/planning/planning.test.js +397 -0
  289. package/dist/tests/planning/planning.test.js.map +1 -0
  290. package/dist/tests/refinement-types/refinement-types.test.d.ts +2 -0
  291. package/dist/tests/refinement-types/refinement-types.test.d.ts.map +1 -0
  292. package/dist/tests/refinement-types/refinement-types.test.js +174 -0
  293. package/dist/tests/refinement-types/refinement-types.test.js.map +1 -0
  294. package/dist/tests/sequent-lk/prover.test.d.ts +2 -0
  295. package/dist/tests/sequent-lk/prover.test.d.ts.map +1 -0
  296. package/dist/tests/sequent-lk/prover.test.js +317 -0
  297. package/dist/tests/sequent-lk/prover.test.js.map +1 -0
  298. package/dist/tests/symbolic-diff/symbolic-diff.test.js.map +1 -1
  299. package/dist/tests/system-f/system-f.test.d.ts +2 -0
  300. package/dist/tests/system-f/system-f.test.d.ts.map +1 -0
  301. package/dist/tests/system-f/system-f.test.js +217 -0
  302. package/dist/tests/system-f/system-f.test.js.map +1 -0
  303. package/dist/tests/theorem-cache/cache.test.d.ts +2 -0
  304. package/dist/tests/theorem-cache/cache.test.d.ts.map +1 -0
  305. package/dist/tests/theorem-cache/cache.test.js +510 -0
  306. package/dist/tests/theorem-cache/cache.test.js.map +1 -0
  307. package/package.json +1 -1
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Markov Logic — Mini parser FOL (sin cuantificadores explícitos)
4
+ // ============================================================
5
+ //
6
+ // Gramática soportada (las variables libres se cuantifican
7
+ // universalmente al groundear):
8
+ //
9
+ // formula := implication
10
+ // implication := disjunction ('→' | '->' disjunction)* (right-assoc)
11
+ // disjunction := conjunction ('∨' | '|' | '||' conjunction)*
12
+ // conjunction := unary ('∧' | '&' | '&&' unary)*
13
+ // unary := ('¬' | '!') unary | atom
14
+ // atom := '(' formula ')' | predicate
15
+ // predicate := Ident '(' arg (',' arg)* ')'
16
+ // arg := Ident
17
+ //
18
+ // Convención de variables/constantes:
19
+ // - identificadores en minúscula → variables (lower-cased first char)
20
+ // - identificadores en mayúscula → constantes
21
+ //
22
+ // Esta gramática alcanza para Smoking, Friends, transitividad, etc.
23
+ // No soporta cuantificadores explícitos `∀ ∃`; la cuantificación es
24
+ // implícitamente universal sobre todas las variables libres.
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.parseFOL = parseFOL;
27
+ exports.freeVariables = freeVariables;
28
+ exports.isVariable = isVariable;
29
+ function parseFOL(input) {
30
+ const tokens = tokenize(input);
31
+ const parser = new Parser(tokens, input);
32
+ const node = parser.parseImplication();
33
+ parser.expectEOF();
34
+ return node;
35
+ }
36
+ /** Devuelve las variables libres (lowercase) que aparecen en `node`. */
37
+ function freeVariables(node) {
38
+ const out = new Set();
39
+ walk(node, out);
40
+ return Array.from(out).sort();
41
+ }
42
+ function walk(node, acc) {
43
+ switch (node.kind) {
44
+ case 'atom':
45
+ for (const a of node.args)
46
+ if (isVariable(a))
47
+ acc.add(a);
48
+ return;
49
+ case 'not':
50
+ walk(node.arg, acc);
51
+ return;
52
+ case 'and':
53
+ case 'or':
54
+ case 'implies':
55
+ walk(node.left, acc);
56
+ walk(node.right, acc);
57
+ return;
58
+ }
59
+ }
60
+ function isVariable(name) {
61
+ if (name.length === 0)
62
+ return false;
63
+ const c = name.charCodeAt(0);
64
+ // 'a'..'z' → variable
65
+ return c >= 97 && c <= 122;
66
+ }
67
+ function tokenize(input) {
68
+ const out = [];
69
+ let i = 0;
70
+ const n = input.length;
71
+ while (i < n) {
72
+ const c = input[i];
73
+ if (c === undefined)
74
+ break;
75
+ // whitespace
76
+ if (c === ' ' || c === '\t' || c === '\n' || c === '\r') {
77
+ i++;
78
+ continue;
79
+ }
80
+ // single chars
81
+ if (c === '(') {
82
+ out.push({ kind: 'LPAREN', text: c, pos: i });
83
+ i++;
84
+ continue;
85
+ }
86
+ if (c === ')') {
87
+ out.push({ kind: 'RPAREN', text: c, pos: i });
88
+ i++;
89
+ continue;
90
+ }
91
+ if (c === ',') {
92
+ out.push({ kind: 'COMMA', text: c, pos: i });
93
+ i++;
94
+ continue;
95
+ }
96
+ if (c === '¬' || c === '!' || c === '~') {
97
+ out.push({ kind: 'NOT', text: c, pos: i });
98
+ i++;
99
+ continue;
100
+ }
101
+ if (c === '∧') {
102
+ out.push({ kind: 'AND', text: c, pos: i });
103
+ i++;
104
+ continue;
105
+ }
106
+ if (c === '&') {
107
+ // accept "&" or "&&"
108
+ let text = '&';
109
+ i++;
110
+ if (input[i] === '&') {
111
+ text = '&&';
112
+ i++;
113
+ }
114
+ out.push({ kind: 'AND', text, pos: i });
115
+ continue;
116
+ }
117
+ if (c === '∨') {
118
+ out.push({ kind: 'OR', text: c, pos: i });
119
+ i++;
120
+ continue;
121
+ }
122
+ if (c === '|') {
123
+ let text = '|';
124
+ i++;
125
+ if (input[i] === '|') {
126
+ text = '||';
127
+ i++;
128
+ }
129
+ out.push({ kind: 'OR', text, pos: i });
130
+ continue;
131
+ }
132
+ if (c === '→') {
133
+ out.push({ kind: 'IMPLIES', text: c, pos: i });
134
+ i++;
135
+ continue;
136
+ }
137
+ if (c === '-') {
138
+ if (input[i + 1] === '>') {
139
+ out.push({ kind: 'IMPLIES', text: '->', pos: i });
140
+ i += 2;
141
+ continue;
142
+ }
143
+ throw new Error(`Carácter inesperado '-' en posición ${i}`);
144
+ }
145
+ // identifier: [A-Za-z_][A-Za-z0-9_]*
146
+ if (isIdentStart(c)) {
147
+ const start = i;
148
+ i++;
149
+ while (i < n) {
150
+ const ch = input[i];
151
+ if (ch !== undefined && isIdentCont(ch))
152
+ i++;
153
+ else
154
+ break;
155
+ }
156
+ out.push({ kind: 'IDENT', text: input.slice(start, i), pos: start });
157
+ continue;
158
+ }
159
+ throw new Error(`Carácter inesperado '${c}' en posición ${i}`);
160
+ }
161
+ out.push({ kind: 'EOF', text: '', pos: n });
162
+ return out;
163
+ }
164
+ function isIdentStart(c) {
165
+ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c === '_';
166
+ }
167
+ function isIdentCont(c) {
168
+ return isIdentStart(c) || (c >= '0' && c <= '9');
169
+ }
170
+ // ── Recursive-descent parser ──────────────────────────────────
171
+ class Parser {
172
+ tokens;
173
+ src;
174
+ idx = 0;
175
+ constructor(tokens, src) {
176
+ this.tokens = tokens;
177
+ this.src = src;
178
+ }
179
+ peek() {
180
+ const t = this.tokens[this.idx];
181
+ if (!t)
182
+ throw new Error('Fin de tokens inesperado');
183
+ return t;
184
+ }
185
+ consume() {
186
+ const t = this.peek();
187
+ this.idx++;
188
+ return t;
189
+ }
190
+ expect(kind) {
191
+ const t = this.peek();
192
+ if (t.kind !== kind) {
193
+ throw new Error(`Esperaba ${kind} en posición ${t.pos}, encontré ${t.kind} ('${t.text}'). Fórmula: "${this.src}"`);
194
+ }
195
+ return this.consume();
196
+ }
197
+ expectEOF() {
198
+ const t = this.peek();
199
+ if (t.kind !== 'EOF') {
200
+ throw new Error(`Tokens sobrantes desde posición ${t.pos} en fórmula: "${this.src}"`);
201
+ }
202
+ }
203
+ // implication is right-associative: A → B → C ≡ A → (B → C)
204
+ parseImplication() {
205
+ const left = this.parseDisjunction();
206
+ if (this.peek().kind === 'IMPLIES') {
207
+ this.consume();
208
+ const right = this.parseImplication();
209
+ return { kind: 'implies', left, right };
210
+ }
211
+ return left;
212
+ }
213
+ parseDisjunction() {
214
+ let left = this.parseConjunction();
215
+ while (this.peek().kind === 'OR') {
216
+ this.consume();
217
+ const right = this.parseConjunction();
218
+ left = { kind: 'or', left, right };
219
+ }
220
+ return left;
221
+ }
222
+ parseConjunction() {
223
+ let left = this.parseUnary();
224
+ while (this.peek().kind === 'AND') {
225
+ this.consume();
226
+ const right = this.parseUnary();
227
+ left = { kind: 'and', left, right };
228
+ }
229
+ return left;
230
+ }
231
+ parseUnary() {
232
+ if (this.peek().kind === 'NOT') {
233
+ this.consume();
234
+ return { kind: 'not', arg: this.parseUnary() };
235
+ }
236
+ return this.parseAtom();
237
+ }
238
+ parseAtom() {
239
+ const t = this.peek();
240
+ if (t.kind === 'LPAREN') {
241
+ this.consume();
242
+ const inner = this.parseImplication();
243
+ this.expect('RPAREN');
244
+ return inner;
245
+ }
246
+ if (t.kind === 'IDENT') {
247
+ const pred = this.consume().text;
248
+ this.expect('LPAREN');
249
+ const args = [];
250
+ // accept zero-arity gracefully: P()
251
+ if (this.peek().kind !== 'RPAREN') {
252
+ args.push(this.expect('IDENT').text);
253
+ while (this.peek().kind === 'COMMA') {
254
+ this.consume();
255
+ args.push(this.expect('IDENT').text);
256
+ }
257
+ }
258
+ this.expect('RPAREN');
259
+ return { kind: 'atom', predicate: pred, args };
260
+ }
261
+ throw new Error(`Esperaba un átomo en posición ${t.pos}, encontré ${t.kind} ('${t.text}')`);
262
+ }
263
+ }
264
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/runtime/markov-logic/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Fórmula de la teoría MLN.
3
+ *
4
+ * `formula` es una cadena FOL con literales `Pred(args)` y
5
+ * conectores `∧`, `∨`, `→`, `¬` (o sus variantes ASCII `&`, `|`, `->`,
6
+ * `!`). Las variables se infieren por convención: identificadores que
7
+ * empiezan en minúscula son variables; los que empiezan en mayúscula
8
+ * son constantes (cerradas).
9
+ *
10
+ * `weight` es un peso real. `Infinity` significa hard constraint: la
11
+ * fórmula DEBE satisfacerse en todo mundo con probabilidad no nula.
12
+ */
13
+ export interface MLNFormula {
14
+ formula: string;
15
+ weight: number;
16
+ }
17
+ /**
18
+ * Teoría MLN completa: fórmulas + dominios tipados de constantes +
19
+ * declaración de predicados.
20
+ *
21
+ * `constants[t]` es el conjunto de constantes del tipo `t`.
22
+ * `predicates[i].types` declara el tipo de cada argumento del
23
+ * predicado `predicates[i].name`.
24
+ *
25
+ * Para teorías untyped, basta usar un único tipo (por ejemplo
26
+ * `"Person"`) y declarar todos los predicados sobre él.
27
+ */
28
+ export interface MLNTheory {
29
+ formulas: MLNFormula[];
30
+ constants: Record<string, string[]>;
31
+ predicates: Array<{
32
+ name: string;
33
+ types: string[];
34
+ }>;
35
+ }
36
+ /**
37
+ * Mundo posible: asignación booleana sobre ground atoms.
38
+ *
39
+ * Las claves son strings canónicos `"Pred(arg1,arg2,...)"` (sin
40
+ * espacios). Atoms ausentes se interpretan como `false` (closed-world
41
+ * assumption opcional, usualmente activada en MLN).
42
+ */
43
+ export interface MLNWorld {
44
+ groundAtoms: Record<string, boolean>;
45
+ }
46
+ /**
47
+ * Resultado de groundear una fórmula sobre el universo de constantes.
48
+ *
49
+ * Cada `GroundedFormula` representa una instancia concreta (sin
50
+ * variables libres) de la fórmula original. `violations(world)`
51
+ * devuelve `0` si el mundo SATISFACE la instancia, `1` si la viola.
52
+ * Esto facilita componer el peso del mundo: cada `violations > 0`
53
+ * resta `w · violations` del log-score.
54
+ */
55
+ export interface GroundedFormula {
56
+ groundFormula: string;
57
+ weight: number;
58
+ violations: (world: MLNWorld) => number;
59
+ /** Atoms que aparecen en esta ground formula (útil para Gibbs). */
60
+ atoms: string[];
61
+ /** Predicado: ¿la fórmula se satisface en `world`? */
62
+ satisfied: (world: MLNWorld) => boolean;
63
+ }
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/markov-logic/types.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC;IACxC,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sDAAsD;IACtD,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;CACzC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Markov Logic Networks — Types
4
+ // ============================================================
5
+ //
6
+ // Una Markov Logic Network (MLN) combina lógica de primer orden
7
+ // con redes de Markov. Cada fórmula `F` lleva un peso real `w`.
8
+ // La distribución sobre mundos posibles `W` es:
9
+ //
10
+ // P(W) = (1/Z) · exp( Σ_i w_i · n_i(W) )
11
+ //
12
+ // donde `n_i(W)` cuenta las grounding instances de `F_i` SATISFECHAS
13
+ // en `W`. Pesos +∞ equivalen a restricciones duras (hard constraints).
14
+ //
15
+ // Referencia: Richardson & Domingos, "Markov Logic Networks" (2006).
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/markov-logic/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gCAAgC;AAChC,+DAA+D;AAC/D,EAAE;AACF,gEAAgE;AAChE,gEAAgE;AAChE,gDAAgD;AAChD,EAAE;AACF,4CAA4C;AAC5C,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,EAAE;AACF,qEAAqE"}
@@ -0,0 +1,15 @@
1
+ import type { PiProcess } from './types';
2
+ /**
3
+ * Decide si dos procesos son estructuralmente congruentes (módulo los
4
+ * axiomas listados arriba + α-equivalencia).
5
+ *
6
+ * Cobertura intencional:
7
+ * - Conmutatividad/asociatividad/nil de | y +.
8
+ * - Renaming de binders.
9
+ * - `(νc) 0 ≡ 0`.
10
+ * Cobertura intencionalmente limitada (excede el scope mínimo del runtime):
11
+ * - Scope extrusion `(νc)(P|Q) ≡ P | (νc) Q`.
12
+ * - Unfold de replicación.
13
+ */
14
+ export declare function structuralCongruence(a: PiProcess, b: PiProcess): boolean;
15
+ //# sourceMappingURL=congruence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"congruence.d.ts","sourceRoot":"","sources":["../../../src/runtime/pi-calculus/congruence.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAuJzC;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAMxE"}
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // π-calculus — congruencia estructural ≡.
4
+ // ============================================================
5
+ // Axiomas estándar:
6
+ // P | 0 ≡ P (nil unitario de |)
7
+ // P | Q ≡ Q | P (conmutatividad de |)
8
+ // (P | Q) | R ≡ P | (Q | R) (asociatividad de |)
9
+ // P + 0 ≡ P
10
+ // P + Q ≡ Q + P
11
+ // (P + Q) + R ≡ P + (Q + R)
12
+ // (νc)(νd) P ≡ (νd)(νc) P (intercambio de scopes)
13
+ // (νc) 0 ≡ 0 (canal vacío sin uso)
14
+ // (νc) (P | Q) ≡ P | (νc) Q si c ∉ fn(P) (scope extrusion)
15
+ // !P ≡ P | !P (unfold de replicación, lo dejamos como opcional)
16
+ // α-conversion sobre binders
17
+ //
18
+ // Implementación: normalizamos ambos procesos a una "forma canónica"
19
+ // (flatten de paralelas y sumas + ordenamiento estructural + drop de
20
+ // `0` unitarios) y luego comparamos por igualdad sintáctica módulo
21
+ // α-renaming sobre binders.
22
+ //
23
+ // No es decisión completa de ≡ (la equivalencia es indecidible en
24
+ // general en presencia de replicación), pero cubre los axiomas
25
+ // básicos suficientes para los tests y propiedades esperadas.
26
+ // ============================================================
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.structuralCongruence = structuralCongruence;
29
+ const names_1 = require("./names");
30
+ /**
31
+ * Normaliza un proceso a forma canónica para comparar ≡.
32
+ *
33
+ * - Aplana `parallel` y `choice` asociativos en listas, descarta `0`s.
34
+ * - Ordena las listas con un orden estructural total y reconstruye en
35
+ * forma asociativa derecha canónica.
36
+ * - Refresca nombres ligados a una secuencia determinista
37
+ * (`#bn0`, `#bn1`, ...) en post-orden para que α-equivalentes
38
+ * colapsen.
39
+ */
40
+ function canonical(p, counter) {
41
+ // 1. α-normalizar binders en post-orden.
42
+ const renamed = renameBindersCanonical(p, counter);
43
+ // 2. flatten + sort + drop nil.
44
+ return normalize(renamed);
45
+ }
46
+ function renameBindersCanonical(p, counter) {
47
+ switch (p.kind) {
48
+ case 'nil':
49
+ return p;
50
+ case 'input': {
51
+ const cont = renameBindersCanonical(p.cont, counter);
52
+ const fresh = `#bn${counter.n++}`;
53
+ const renamed = (0, names_1.alphaRename)(cont, p.bind, fresh);
54
+ return { kind: 'input', channel: p.channel, bind: fresh, cont: renamed };
55
+ }
56
+ case 'output':
57
+ return {
58
+ kind: 'output',
59
+ channel: p.channel,
60
+ value: p.value,
61
+ cont: renameBindersCanonical(p.cont, counter),
62
+ };
63
+ case 'parallel':
64
+ return {
65
+ kind: 'parallel',
66
+ left: renameBindersCanonical(p.left, counter),
67
+ right: renameBindersCanonical(p.right, counter),
68
+ };
69
+ case 'choice':
70
+ return {
71
+ kind: 'choice',
72
+ left: renameBindersCanonical(p.left, counter),
73
+ right: renameBindersCanonical(p.right, counter),
74
+ };
75
+ case 'new': {
76
+ const body = renameBindersCanonical(p.body, counter);
77
+ const fresh = `#bn${counter.n++}`;
78
+ const renamed = (0, names_1.alphaRename)(body, p.channel, fresh);
79
+ return { kind: 'new', channel: fresh, body: renamed };
80
+ }
81
+ case 'replication':
82
+ return { kind: 'replication', body: renameBindersCanonical(p.body, counter) };
83
+ case 'match':
84
+ return {
85
+ kind: 'match',
86
+ left: p.left,
87
+ right: p.right,
88
+ cont: renameBindersCanonical(p.cont, counter),
89
+ };
90
+ }
91
+ }
92
+ function normalize(p) {
93
+ switch (p.kind) {
94
+ case 'nil':
95
+ return p;
96
+ case 'input':
97
+ return { kind: 'input', channel: p.channel, bind: p.bind, cont: normalize(p.cont) };
98
+ case 'output':
99
+ return {
100
+ kind: 'output',
101
+ channel: p.channel,
102
+ value: p.value,
103
+ cont: normalize(p.cont),
104
+ };
105
+ case 'parallel': {
106
+ const parts = flattenParallel(p)
107
+ .map(normalize)
108
+ .filter((q) => q.kind !== 'nil');
109
+ if (parts.length === 0)
110
+ return { kind: 'nil' };
111
+ if (parts.length === 1)
112
+ return parts[0];
113
+ parts.sort((a, b) => structKey(a).localeCompare(structKey(b)));
114
+ return parts.reduceRight((acc, q) => ({ kind: 'parallel', left: q, right: acc }));
115
+ }
116
+ case 'choice': {
117
+ const parts = flattenChoice(p)
118
+ .map(normalize)
119
+ .filter((q) => q.kind !== 'nil');
120
+ if (parts.length === 0)
121
+ return { kind: 'nil' };
122
+ if (parts.length === 1)
123
+ return parts[0];
124
+ parts.sort((a, b) => structKey(a).localeCompare(structKey(b)));
125
+ return parts.reduceRight((acc, q) => ({ kind: 'choice', left: q, right: acc }));
126
+ }
127
+ case 'new': {
128
+ const body = normalize(p.body);
129
+ // (νc) 0 ≡ 0
130
+ if (body.kind === 'nil')
131
+ return { kind: 'nil' };
132
+ return { kind: 'new', channel: p.channel, body };
133
+ }
134
+ case 'replication':
135
+ return { kind: 'replication', body: normalize(p.body) };
136
+ case 'match':
137
+ return {
138
+ kind: 'match',
139
+ left: p.left,
140
+ right: p.right,
141
+ cont: normalize(p.cont),
142
+ };
143
+ }
144
+ }
145
+ function flattenParallel(p) {
146
+ if (p.kind !== 'parallel')
147
+ return [p];
148
+ return [...flattenParallel(p.left), ...flattenParallel(p.right)];
149
+ }
150
+ function flattenChoice(p) {
151
+ if (p.kind !== 'choice')
152
+ return [p];
153
+ return [...flattenChoice(p.left), ...flattenChoice(p.right)];
154
+ }
155
+ /**
156
+ * Serialización estructural estable para usar como clave de
157
+ * ordenamiento. Determinista bajo igualdad sintáctica.
158
+ */
159
+ function structKey(p) {
160
+ switch (p.kind) {
161
+ case 'nil':
162
+ return '0';
163
+ case 'input':
164
+ return `in(${p.channel},${p.bind},${structKey(p.cont)})`;
165
+ case 'output':
166
+ return `out(${p.channel},${p.value},${structKey(p.cont)})`;
167
+ case 'parallel':
168
+ return `par(${structKey(p.left)},${structKey(p.right)})`;
169
+ case 'choice':
170
+ return `sum(${structKey(p.left)},${structKey(p.right)})`;
171
+ case 'new':
172
+ return `new(${p.channel},${structKey(p.body)})`;
173
+ case 'replication':
174
+ return `rep(${structKey(p.body)})`;
175
+ case 'match':
176
+ return `mat(${p.left},${p.right},${structKey(p.cont)})`;
177
+ }
178
+ }
179
+ /**
180
+ * Decide si dos procesos son estructuralmente congruentes (módulo los
181
+ * axiomas listados arriba + α-equivalencia).
182
+ *
183
+ * Cobertura intencional:
184
+ * - Conmutatividad/asociatividad/nil de | y +.
185
+ * - Renaming de binders.
186
+ * - `(νc) 0 ≡ 0`.
187
+ * Cobertura intencionalmente limitada (excede el scope mínimo del runtime):
188
+ * - Scope extrusion `(νc)(P|Q) ≡ P | (νc) Q`.
189
+ * - Unfold de replicación.
190
+ */
191
+ function structuralCongruence(a, b) {
192
+ // Aplicamos scope extrusion repetidamente como pre-paso, después
193
+ // normalizamos y comparamos por structKey.
194
+ const A = canonical(extrudeScopes(a), { n: 0 });
195
+ const B = canonical(extrudeScopes(b), { n: 0 });
196
+ return structKey(A) === structKey(B);
197
+ }
198
+ /**
199
+ * Aplica scope extrusion donde sea posible: `(νc)(P|Q) ≡ P | (νc) Q`
200
+ * cuando `c ∉ fn(P)`. No es óptimo pero alcanza para los axiomas.
201
+ */
202
+ function extrudeScopes(p) {
203
+ switch (p.kind) {
204
+ case 'nil':
205
+ return p;
206
+ case 'input':
207
+ return { kind: 'input', channel: p.channel, bind: p.bind, cont: extrudeScopes(p.cont) };
208
+ case 'output':
209
+ return {
210
+ kind: 'output',
211
+ channel: p.channel,
212
+ value: p.value,
213
+ cont: extrudeScopes(p.cont),
214
+ };
215
+ case 'parallel':
216
+ return {
217
+ kind: 'parallel',
218
+ left: extrudeScopes(p.left),
219
+ right: extrudeScopes(p.right),
220
+ };
221
+ case 'choice':
222
+ return {
223
+ kind: 'choice',
224
+ left: extrudeScopes(p.left),
225
+ right: extrudeScopes(p.right),
226
+ };
227
+ case 'new': {
228
+ const body = extrudeScopes(p.body);
229
+ if (body.kind === 'parallel') {
230
+ const fnL = (0, names_1.freeNames)(body.left);
231
+ const fnR = (0, names_1.freeNames)(body.right);
232
+ const leftFree = !fnL.has(p.channel);
233
+ const rightFree = !fnR.has(p.channel);
234
+ if (leftFree && rightFree) {
235
+ // Canal restringido pero no usado en ninguna rama: descártalo.
236
+ return { kind: 'parallel', left: body.left, right: body.right };
237
+ }
238
+ if (leftFree) {
239
+ // Empujar (νc) hacia la rama derecha.
240
+ return {
241
+ kind: 'parallel',
242
+ left: body.left,
243
+ right: extrudeScopes({ kind: 'new', channel: p.channel, body: body.right }),
244
+ };
245
+ }
246
+ if (rightFree) {
247
+ return {
248
+ kind: 'parallel',
249
+ left: extrudeScopes({ kind: 'new', channel: p.channel, body: body.left }),
250
+ right: body.right,
251
+ };
252
+ }
253
+ }
254
+ // Caso especial: (νc) que liga un canal nunca usado en el cuerpo.
255
+ if (!(0, names_1.freeNames)(body).has(p.channel)) {
256
+ return body;
257
+ }
258
+ return { kind: 'new', channel: p.channel, body };
259
+ }
260
+ case 'replication':
261
+ return { kind: 'replication', body: extrudeScopes(p.body) };
262
+ case 'match':
263
+ return {
264
+ kind: 'match',
265
+ left: p.left,
266
+ right: p.right,
267
+ cont: extrudeScopes(p.cont),
268
+ };
269
+ }
270
+ }
271
+ //# sourceMappingURL=congruence.js.map