@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,181 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CTL → modal μ-calculus translator
4
+ // ============================================================
5
+ // Encoding clásico (Emerson 1990 — "Temporal and Modal Logic"):
6
+ //
7
+ // EX φ ≡ ◇φ
8
+ // AX φ ≡ □φ
9
+ // EF φ ≡ μX. φ ∨ ◇X
10
+ // AF φ ≡ μX. φ ∨ □X
11
+ // EG φ ≡ νX. φ ∧ ◇X
12
+ // AG φ ≡ νX. φ ∧ □X
13
+ // E[φ U ψ] ≡ μX. ψ ∨ (φ ∧ ◇X)
14
+ // A[φ U ψ] ≡ μX. ψ ∨ (φ ∧ □X ∧ ◇true)
15
+ // (la cláusula `◇true` excluye deadlocks que no han
16
+ // alcanzado ψ — coincide con la semántica AU clásica
17
+ // donde un camino debe existir hasta ψ).
18
+ //
19
+ // Para evitar capturas accidentales en fórmulas anidadas (`EF (EF p)`),
20
+ // generamos nombres de variable frescos en cada `gensym()`.
21
+ // ============================================================
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.ctlToMu = ctlToMu;
24
+ function makeGensym() {
25
+ let n = 0;
26
+ return () => `__X${n++}`;
27
+ }
28
+ /** Constantes ⊤/⊥ codificadas como `μX.X ∨ ¬X` evitables: usamos
29
+ * atoms internos siempre verdaderos/falsos vía `or`/`and` vacíos? El
30
+ * AST de μ no admite n-arios vacíos, así que codificamos con un
31
+ * binder trivial: ⊤ ≡ νX. X ; ⊥ ≡ μX. X. */
32
+ function muTrue(gensym) {
33
+ const x = gensym();
34
+ return { kind: 'nu', bind: x, body: { kind: 'var', name: x } };
35
+ }
36
+ function muFalse(gensym) {
37
+ const x = gensym();
38
+ return { kind: 'mu', bind: x, body: { kind: 'var', name: x } };
39
+ }
40
+ function bigAnd(parts, gensym) {
41
+ if (parts.length === 0)
42
+ return muTrue(gensym);
43
+ let acc = parts[0];
44
+ for (let i = 1; i < parts.length; i++) {
45
+ acc = { kind: 'and', left: acc, right: parts[i] };
46
+ }
47
+ return acc;
48
+ }
49
+ function bigOr(parts, gensym) {
50
+ if (parts.length === 0)
51
+ return muFalse(gensym);
52
+ let acc = parts[0];
53
+ for (let i = 1; i < parts.length; i++) {
54
+ acc = { kind: 'or', left: acc, right: parts[i] };
55
+ }
56
+ return acc;
57
+ }
58
+ function translate(phi, gensym) {
59
+ switch (phi.kind) {
60
+ case 'atom':
61
+ return { kind: 'atom', name: phi.name };
62
+ case 'true':
63
+ return muTrue(gensym);
64
+ case 'false':
65
+ return muFalse(gensym);
66
+ case 'not':
67
+ return { kind: 'not', arg: translate(phi.arg, gensym) };
68
+ case 'and':
69
+ return bigAnd(phi.args.map((a) => translate(a, gensym)), gensym);
70
+ case 'or':
71
+ return bigOr(phi.args.map((a) => translate(a, gensym)), gensym);
72
+ case 'implies': {
73
+ // p → q ≡ ¬p ∨ q
74
+ return {
75
+ kind: 'or',
76
+ left: { kind: 'not', arg: translate(phi.left, gensym) },
77
+ right: translate(phi.right, gensym),
78
+ };
79
+ }
80
+ case 'EX':
81
+ return { kind: 'diamond', arg: translate(phi.arg, gensym) };
82
+ case 'AX':
83
+ return { kind: 'box', arg: translate(phi.arg, gensym) };
84
+ case 'EF': {
85
+ const x = gensym();
86
+ return {
87
+ kind: 'mu',
88
+ bind: x,
89
+ body: {
90
+ kind: 'or',
91
+ left: translate(phi.arg, gensym),
92
+ right: { kind: 'diamond', arg: { kind: 'var', name: x } },
93
+ },
94
+ };
95
+ }
96
+ case 'AF': {
97
+ const x = gensym();
98
+ return {
99
+ kind: 'mu',
100
+ bind: x,
101
+ body: {
102
+ kind: 'or',
103
+ left: translate(phi.arg, gensym),
104
+ right: { kind: 'box', arg: { kind: 'var', name: x } },
105
+ },
106
+ };
107
+ }
108
+ case 'EG': {
109
+ const x = gensym();
110
+ return {
111
+ kind: 'nu',
112
+ bind: x,
113
+ body: {
114
+ kind: 'and',
115
+ left: translate(phi.arg, gensym),
116
+ right: { kind: 'diamond', arg: { kind: 'var', name: x } },
117
+ },
118
+ };
119
+ }
120
+ case 'AG': {
121
+ const x = gensym();
122
+ return {
123
+ kind: 'nu',
124
+ bind: x,
125
+ body: {
126
+ kind: 'and',
127
+ left: translate(phi.arg, gensym),
128
+ right: { kind: 'box', arg: { kind: 'var', name: x } },
129
+ },
130
+ };
131
+ }
132
+ case 'EU': {
133
+ // E[A U B] ≡ μX. B ∨ (A ∧ ◇X)
134
+ const x = gensym();
135
+ return {
136
+ kind: 'mu',
137
+ bind: x,
138
+ body: {
139
+ kind: 'or',
140
+ left: translate(phi.right, gensym),
141
+ right: {
142
+ kind: 'and',
143
+ left: translate(phi.left, gensym),
144
+ right: { kind: 'diamond', arg: { kind: 'var', name: x } },
145
+ },
146
+ },
147
+ };
148
+ }
149
+ case 'AU': {
150
+ // A[A U B] ≡ μX. B ∨ (A ∧ □X ∧ ◇⊤)
151
+ const x = gensym();
152
+ return {
153
+ kind: 'mu',
154
+ bind: x,
155
+ body: {
156
+ kind: 'or',
157
+ left: translate(phi.right, gensym),
158
+ right: {
159
+ kind: 'and',
160
+ left: translate(phi.left, gensym),
161
+ right: {
162
+ kind: 'and',
163
+ left: { kind: 'box', arg: { kind: 'var', name: x } },
164
+ right: { kind: 'diamond', arg: muTrue(gensym) },
165
+ },
166
+ },
167
+ },
168
+ };
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * Traduce una fórmula CTL a su equivalente en μ-cálculo.
174
+ *
175
+ * Acepta el shape estructural del AST de CTL (sin importar la fuente
176
+ * exacta) — útil para evitar acoplamiento directo con `src/profiles/ctl`.
177
+ */
178
+ function ctlToMu(ctlFormula) {
179
+ return translate(ctlFormula, makeGensym());
180
+ }
181
+ //# sourceMappingURL=ctl-translate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctl-translate.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/ctl-translate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type { MuFormula, MuVarName, KripkeStructure } from './types';
2
+ export { muToString } from './types';
3
+ export { modelCheck, satisfiesAt } from './check';
4
+ export { isWellFormed, isClosed, isPositive, freeVars, alternationDepth } from './wellformed';
5
+ export { ctlToMu } from './ctl-translate';
6
+ export type { CTLLike } from './ctl-translate';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/index.ts"],"names":[],"mappings":"AAiBA,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST modal μ-calculus — punto de entrada público
4
+ // ============================================================
5
+ // API:
6
+ // modelCheck(K, φ) → Set<stateId> que satisfacen φ
7
+ // satisfiesAt(K, φ, s) → boolean
8
+ // isWellFormed(φ) → boolean (cerrada + positiva)
9
+ // isClosed(φ) / freeVars(φ) → análisis sintáctico
10
+ // alternationDepth(φ) → number
11
+ // ctlToMu(ctlFormula) → MuFormula
12
+ // muToString(φ) → notación textual
13
+ //
14
+ // El μ-cálculo subsume CTL, LTL y PDL: cualquier fórmula CTL puede
15
+ // traducirse vía `ctlToMu`. Es el "ensemble logic" de la familia
16
+ // modal/temporal.
17
+ // ============================================================
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.ctlToMu = exports.alternationDepth = exports.freeVars = exports.isPositive = exports.isClosed = exports.isWellFormed = exports.satisfiesAt = exports.modelCheck = exports.muToString = void 0;
20
+ var types_1 = require("./types");
21
+ Object.defineProperty(exports, "muToString", { enumerable: true, get: function () { return types_1.muToString; } });
22
+ var check_1 = require("./check");
23
+ Object.defineProperty(exports, "modelCheck", { enumerable: true, get: function () { return check_1.modelCheck; } });
24
+ Object.defineProperty(exports, "satisfiesAt", { enumerable: true, get: function () { return check_1.satisfiesAt; } });
25
+ var wellformed_1 = require("./wellformed");
26
+ Object.defineProperty(exports, "isWellFormed", { enumerable: true, get: function () { return wellformed_1.isWellFormed; } });
27
+ Object.defineProperty(exports, "isClosed", { enumerable: true, get: function () { return wellformed_1.isClosed; } });
28
+ Object.defineProperty(exports, "isPositive", { enumerable: true, get: function () { return wellformed_1.isPositive; } });
29
+ Object.defineProperty(exports, "freeVars", { enumerable: true, get: function () { return wellformed_1.freeVars; } });
30
+ Object.defineProperty(exports, "alternationDepth", { enumerable: true, get: function () { return wellformed_1.alternationDepth; } });
31
+ var ctl_translate_1 = require("./ctl-translate");
32
+ Object.defineProperty(exports, "ctlToMu", { enumerable: true, get: function () { return ctl_translate_1.ctlToMu; } });
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,iDAAiD;AACjD,+DAA+D;AAC/D,OAAO;AACP,4DAA4D;AAC5D,sCAAsC;AACtC,2DAA2D;AAC3D,oDAAoD;AACpD,qCAAqC;AACrC,wCAAwC;AACxC,+CAA+C;AAC/C,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,kBAAkB;AAClB,+DAA+D;;;AAG/D,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AACnB,iCAAkD;AAAzC,mGAAA,UAAU,OAAA;AAAE,oGAAA,WAAW,OAAA;AAChC,2CAA8F;AAArF,0GAAA,YAAY,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,wGAAA,UAAU,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACvE,iDAA0C;AAAjC,wGAAA,OAAO,OAAA"}
@@ -0,0 +1,51 @@
1
+ /** Variable proposicional ligada por μ/ν. */
2
+ export type MuVarName = string;
3
+ /** AST del modal μ-calculus. */
4
+ export type MuFormula = {
5
+ kind: 'atom';
6
+ name: string;
7
+ } | {
8
+ kind: 'var';
9
+ name: MuVarName;
10
+ } | {
11
+ kind: 'not';
12
+ arg: MuFormula;
13
+ } | {
14
+ kind: 'and';
15
+ left: MuFormula;
16
+ right: MuFormula;
17
+ } | {
18
+ kind: 'or';
19
+ left: MuFormula;
20
+ right: MuFormula;
21
+ } | {
22
+ kind: 'box';
23
+ arg: MuFormula;
24
+ } | {
25
+ kind: 'diamond';
26
+ arg: MuFormula;
27
+ } | {
28
+ kind: 'mu';
29
+ bind: MuVarName;
30
+ body: MuFormula;
31
+ } | {
32
+ kind: 'nu';
33
+ bind: MuVarName;
34
+ body: MuFormula;
35
+ };
36
+ /**
37
+ * Estructura de Kripke en el formato pedido por la API pública del
38
+ * perfil. `labelling[stateId]` es el conjunto de proposiciones que
39
+ * se cumplen en ese estado.
40
+ *
41
+ * El algoritmo asume estructuras finitas. Estados sin sucesores son
42
+ * "deadlocks": `□φ` se cumple trivialmente, `◇φ` es falso.
43
+ */
44
+ export interface KripkeStructure {
45
+ states: string[];
46
+ transitions: Array<[string, string]>;
47
+ labelling: Record<string, Set<string>>;
48
+ }
49
+ /** Renderiza una fórmula μ-cálculo a notación textual estándar. */
50
+ export declare function muToString(phi: MuFormula): string;
51
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/types.ts"],"names":[],"mappings":"AAgBA,6CAA6C;AAC7C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,gCAAgC;AAChC,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACxC;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAqBjD"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST μ-calculus — tipos
4
+ // ============================================================
5
+ // Modal μ-calculus: lógica modal extendida con operadores de
6
+ // punto fijo `μ` (least fixed-point) y `ν` (greatest fixed-point).
7
+ // Subsume CTL, LTL y PDL: cualquier fórmula CTL puede traducirse
8
+ // a μ-cálculo (ver `ctl-translate.ts`).
9
+ //
10
+ // Sintaxis:
11
+ // φ ::= p | X | ¬φ | φ ∧ φ | φ ∨ φ | □φ | ◇φ | μX. φ | νX. φ
12
+ //
13
+ // Restricción semántica: las variables ligadas deben aparecer
14
+ // bajo un número par de negaciones (positividad / monotonicidad)
15
+ // para que los puntos fijos existan por el teorema de Knaster-Tarski.
16
+ // ============================================================
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.muToString = muToString;
19
+ /** Renderiza una fórmula μ-cálculo a notación textual estándar. */
20
+ function muToString(phi) {
21
+ switch (phi.kind) {
22
+ case 'atom':
23
+ return phi.name;
24
+ case 'var':
25
+ return phi.name;
26
+ case 'not':
27
+ return `¬${muToString(phi.arg)}`;
28
+ case 'and':
29
+ return `(${muToString(phi.left)} ∧ ${muToString(phi.right)})`;
30
+ case 'or':
31
+ return `(${muToString(phi.left)} ∨ ${muToString(phi.right)})`;
32
+ case 'box':
33
+ return `□${muToString(phi.arg)}`;
34
+ case 'diamond':
35
+ return `◇${muToString(phi.arg)}`;
36
+ case 'mu':
37
+ return `μ${phi.bind}. ${muToString(phi.body)}`;
38
+ case 'nu':
39
+ return `ν${phi.bind}. ${muToString(phi.body)}`;
40
+ }
41
+ }
42
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAC/D,6DAA6D;AAC7D,mEAAmE;AACnE,iEAAiE;AACjE,wCAAwC;AACxC,EAAE;AACF,YAAY;AACZ,+DAA+D;AAC/D,EAAE;AACF,8DAA8D;AAC9D,iEAAiE;AACjE,sEAAsE;AACtE,+DAA+D;;AAgC/D,gCAqBC;AAtBD,mEAAmE;AACnE,SAAgB,UAAU,CAAC,GAAc;IACvC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAChE,KAAK,IAAI;YACP,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAChE,KAAK,KAAK;YACR,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI;YACP,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,KAAK,IAAI;YACP,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { MuFormula } from './types';
2
+ /**
3
+ * Verifica que una fórmula sea sintácticamente bien formada:
4
+ * - Cerrada (sin variables libres).
5
+ * - Positiva en cada variable ligada (paridad par de negaciones).
6
+ * - Sin shadowing nocivo: rebindings ocultan al outer, lo cual es
7
+ * legal pero detectable. Aquí lo permitimos.
8
+ */
9
+ export declare function isWellFormed(phi: MuFormula): boolean;
10
+ /** Variables libres del término. */
11
+ export declare function freeVars(phi: MuFormula): Set<string>;
12
+ /** Una fórmula es cerrada cuando no tiene variables libres. */
13
+ export declare function isClosed(phi: MuFormula): boolean;
14
+ /**
15
+ * Una fórmula es positiva cuando toda `var X` ligada por un μ/ν
16
+ * aparece bajo un número par de negaciones desde su binder.
17
+ *
18
+ * Implementación: caminamos el AST con un map `binder → paridad`
19
+ * (0 = par, 1 = impar) que se actualiza al cruzar un `not`. Cuando
20
+ * vemos `var X`, miramos su binder más cercano y verificamos que
21
+ * su paridad relativa sea par.
22
+ */
23
+ export declare function isPositive(phi: MuFormula): boolean;
24
+ /**
25
+ * Profundidad de alternancia μ/ν. Métrica clásica:
26
+ * ad(p) = ad(X) = 0
27
+ * ad(¬φ) = ad(◇φ) = ad(□φ) = ad(φ)
28
+ * ad(φ ∧ ψ) = ad(φ ∨ ψ) = max(ad(φ), ad(ψ))
29
+ * ad(μX. φ) = max(1, ad(φ), 1 + maxNuAlt(φ))
30
+ * ad(νX. φ) = max(1, ad(φ), 1 + maxMuAlt(φ))
31
+ * donde `maxNuAlt(φ)` es la profundidad considerando solo subfórmulas
32
+ * con binder ν cuyo cuerpo menciona la variable ligada externamente,
33
+ * y simétrico para μ.
34
+ *
35
+ * Aquí usamos la versión simplificada y muy usada en práctica
36
+ * (Cleaveland/Steffen): contar el cambio de tipo de binder en el
37
+ * camino sintáctico raíz→hoja.
38
+ */
39
+ export declare function alternationDepth(phi: MuFormula): number;
40
+ //# sourceMappingURL=wellformed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wellformed.d.ts","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/wellformed.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEpD;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAIpD;AA+BD,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAElD;AAmCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // μ-calculus — well-formedness y alternation depth
4
+ // ============================================================
5
+ // Una fórmula μ-cálculo es bien formada cuando:
6
+ // 1. Es "cerrada": cada `var` ligada referencia un `μ`/`ν` que la
7
+ // envuelve sintácticamente.
8
+ // 2. Es "positiva": cada variable ligada aparece bajo un número PAR
9
+ // de negaciones desde su binder. Esto garantiza monotonía del
10
+ // funcional asociado y la existencia de los puntos fijos por
11
+ // Knaster-Tarski.
12
+ //
13
+ // Alternation depth: máxima profundidad de anidamiento alternante
14
+ // μ/ν con variables libres del binder externo. Aproximación estándar
15
+ // (Niwiński/Emerson-Lei): si el body de un μX contiene νY donde Y
16
+ // depende sintácticamente de X (o viceversa), la profundidad sube.
17
+ // Aquí usamos la versión sintáctica simple: cuento bindings μ/ν
18
+ // distintos en el camino raíz→hoja, contando saltos μ↔ν.
19
+ // ============================================================
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.isWellFormed = isWellFormed;
22
+ exports.freeVars = freeVars;
23
+ exports.isClosed = isClosed;
24
+ exports.isPositive = isPositive;
25
+ exports.alternationDepth = alternationDepth;
26
+ /**
27
+ * Verifica que una fórmula sea sintácticamente bien formada:
28
+ * - Cerrada (sin variables libres).
29
+ * - Positiva en cada variable ligada (paridad par de negaciones).
30
+ * - Sin shadowing nocivo: rebindings ocultan al outer, lo cual es
31
+ * legal pero detectable. Aquí lo permitimos.
32
+ */
33
+ function isWellFormed(phi) {
34
+ return isClosed(phi) && isPositive(phi);
35
+ }
36
+ /** Variables libres del término. */
37
+ function freeVars(phi) {
38
+ const out = new Set();
39
+ collectFree(phi, new Set(), out);
40
+ return out;
41
+ }
42
+ function collectFree(phi, bound, out) {
43
+ switch (phi.kind) {
44
+ case 'atom':
45
+ return;
46
+ case 'var':
47
+ if (!bound.has(phi.name))
48
+ out.add(phi.name);
49
+ return;
50
+ case 'not':
51
+ collectFree(phi.arg, bound, out);
52
+ return;
53
+ case 'and':
54
+ case 'or':
55
+ collectFree(phi.left, bound, out);
56
+ collectFree(phi.right, bound, out);
57
+ return;
58
+ case 'box':
59
+ case 'diamond':
60
+ collectFree(phi.arg, bound, out);
61
+ return;
62
+ case 'mu':
63
+ case 'nu': {
64
+ const nextBound = new Set(bound);
65
+ nextBound.add(phi.bind);
66
+ collectFree(phi.body, nextBound, out);
67
+ return;
68
+ }
69
+ }
70
+ }
71
+ /** Una fórmula es cerrada cuando no tiene variables libres. */
72
+ function isClosed(phi) {
73
+ return freeVars(phi).size === 0;
74
+ }
75
+ /**
76
+ * Una fórmula es positiva cuando toda `var X` ligada por un μ/ν
77
+ * aparece bajo un número par de negaciones desde su binder.
78
+ *
79
+ * Implementación: caminamos el AST con un map `binder → paridad`
80
+ * (0 = par, 1 = impar) que se actualiza al cruzar un `not`. Cuando
81
+ * vemos `var X`, miramos su binder más cercano y verificamos que
82
+ * su paridad relativa sea par.
83
+ */
84
+ function isPositive(phi) {
85
+ return checkPositive(phi, new Map(), 0);
86
+ }
87
+ function checkPositive(phi, parityAt, parityHere) {
88
+ switch (phi.kind) {
89
+ case 'atom':
90
+ return true;
91
+ case 'var': {
92
+ const parityAtBinder = parityAt.get(phi.name);
93
+ if (parityAtBinder === undefined) {
94
+ // Variable libre: no es responsabilidad de positividad detectarlo.
95
+ return true;
96
+ }
97
+ // Paridad relativa = (parityHere - parityAtBinder) mod 2.
98
+ return (parityHere - parityAtBinder) % 2 === 0;
99
+ }
100
+ case 'not':
101
+ return checkPositive(phi.arg, parityAt, (parityHere + 1) % 2);
102
+ case 'and':
103
+ case 'or':
104
+ return (checkPositive(phi.left, parityAt, parityHere) &&
105
+ checkPositive(phi.right, parityAt, parityHere));
106
+ case 'box':
107
+ case 'diamond':
108
+ return checkPositive(phi.arg, parityAt, parityHere);
109
+ case 'mu':
110
+ case 'nu': {
111
+ const next = new Map(parityAt);
112
+ next.set(phi.bind, parityHere);
113
+ return checkPositive(phi.body, next, parityHere);
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Profundidad de alternancia μ/ν. Métrica clásica:
119
+ * ad(p) = ad(X) = 0
120
+ * ad(¬φ) = ad(◇φ) = ad(□φ) = ad(φ)
121
+ * ad(φ ∧ ψ) = ad(φ ∨ ψ) = max(ad(φ), ad(ψ))
122
+ * ad(μX. φ) = max(1, ad(φ), 1 + maxNuAlt(φ))
123
+ * ad(νX. φ) = max(1, ad(φ), 1 + maxMuAlt(φ))
124
+ * donde `maxNuAlt(φ)` es la profundidad considerando solo subfórmulas
125
+ * con binder ν cuyo cuerpo menciona la variable ligada externamente,
126
+ * y simétrico para μ.
127
+ *
128
+ * Aquí usamos la versión simplificada y muy usada en práctica
129
+ * (Cleaveland/Steffen): contar el cambio de tipo de binder en el
130
+ * camino sintáctico raíz→hoja.
131
+ */
132
+ function alternationDepth(phi) {
133
+ return computeDepth(phi, null);
134
+ }
135
+ function computeDepth(phi, lastBinder) {
136
+ switch (phi.kind) {
137
+ case 'atom':
138
+ case 'var':
139
+ return 0;
140
+ case 'not':
141
+ case 'box':
142
+ case 'diamond':
143
+ return computeDepth(phi.arg, lastBinder);
144
+ case 'and':
145
+ case 'or':
146
+ return Math.max(computeDepth(phi.left, lastBinder), computeDepth(phi.right, lastBinder));
147
+ case 'mu': {
148
+ const inner = computeDepth(phi.body, 'mu');
149
+ // Mismo tipo de binder consecutivo: pertenece al mismo "segmento"
150
+ // y no aporta alternancia adicional. Cambio (o segmento inicial)
151
+ // suma 1 nivel al conteo del cuerpo.
152
+ return lastBinder === 'mu' ? inner : 1 + inner;
153
+ }
154
+ case 'nu': {
155
+ const inner = computeDepth(phi.body, 'nu');
156
+ return lastBinder === 'nu' ? inner : 1 + inner;
157
+ }
158
+ }
159
+ }
160
+ //# sourceMappingURL=wellformed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wellformed.js","sourceRoot":"","sources":["../../../src/profiles/mu-calculus/wellformed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { LKProof } from './types';
2
+ /**
3
+ * Elimina todos los cortes de la derivacion. Devuelve una derivacion
4
+ * estructuralmente equivalente al mismo secuente sin nodos `cut`.
5
+ *
6
+ * Implementacion: eliminamos primero los cortes interiores (de las
7
+ * hojas hacia la raiz) y luego reducimos el cut de la raiz aplicando
8
+ * la regla principal correspondiente.
9
+ */
10
+ export declare function eliminateCut(proof: LKProof): LKProof;
11
+ //# sourceMappingURL=cut-elimination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cut-elimination.d.ts","sourceRoot":"","sources":["../../../src/profiles/sequent-lk/cut-elimination.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA+JlC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAsBpD"}