@stevenvo780/st-lang 4.3.0 → 4.5.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 (459) hide show
  1. package/dist/coinduction/index.d.ts +136 -0
  2. package/dist/coinduction/index.d.ts.map +1 -0
  3. package/dist/coinduction/index.js +318 -0
  4. package/dist/coinduction/index.js.map +1 -0
  5. package/dist/combinators-ski/abstract.d.ts +5 -0
  6. package/dist/combinators-ski/abstract.d.ts.map +1 -0
  7. package/dist/combinators-ski/abstract.js +88 -0
  8. package/dist/combinators-ski/abstract.js.map +1 -0
  9. package/dist/combinators-ski/index.d.ts +6 -0
  10. package/dist/combinators-ski/index.d.ts.map +1 -0
  11. package/dist/combinators-ski/index.js +30 -0
  12. package/dist/combinators-ski/index.js.map +1 -0
  13. package/dist/combinators-ski/reduce.d.ts +10 -0
  14. package/dist/combinators-ski/reduce.d.ts.map +1 -0
  15. package/dist/combinators-ski/reduce.js +118 -0
  16. package/dist/combinators-ski/reduce.js.map +1 -0
  17. package/dist/combinators-ski/types.d.ts +23 -0
  18. package/dist/combinators-ski/types.d.ts.map +1 -0
  19. package/dist/combinators-ski/types.js +102 -0
  20. package/dist/combinators-ski/types.js.map +1 -0
  21. package/dist/constructive-reals/index.d.ts +132 -0
  22. package/dist/constructive-reals/index.d.ts.map +1 -0
  23. package/dist/constructive-reals/index.js +723 -0
  24. package/dist/constructive-reals/index.js.map +1 -0
  25. package/dist/game-semantics/convert.d.ts +4 -0
  26. package/dist/game-semantics/convert.d.ts.map +1 -0
  27. package/dist/game-semantics/convert.js +28 -0
  28. package/dist/game-semantics/convert.js.map +1 -0
  29. package/dist/game-semantics/index.d.ts +6 -0
  30. package/dist/game-semantics/index.d.ts.map +1 -0
  31. package/dist/game-semantics/index.js +28 -0
  32. package/dist/game-semantics/index.js.map +1 -0
  33. package/dist/game-semantics/strategy.d.ts +34 -0
  34. package/dist/game-semantics/strategy.d.ts.map +1 -0
  35. package/dist/game-semantics/strategy.js +336 -0
  36. package/dist/game-semantics/strategy.js.map +1 -0
  37. package/dist/game-semantics/types.d.ts +64 -0
  38. package/dist/game-semantics/types.d.ts.map +1 -0
  39. package/dist/game-semantics/types.js +78 -0
  40. package/dist/game-semantics/types.js.map +1 -0
  41. package/dist/higher-order-unify/index.d.ts +5 -0
  42. package/dist/higher-order-unify/index.d.ts.map +1 -0
  43. package/dist/higher-order-unify/index.js +27 -0
  44. package/dist/higher-order-unify/index.js.map +1 -0
  45. package/dist/higher-order-unify/normalize.d.ts +14 -0
  46. package/dist/higher-order-unify/normalize.d.ts.map +1 -0
  47. package/dist/higher-order-unify/normalize.js +191 -0
  48. package/dist/higher-order-unify/normalize.js.map +1 -0
  49. package/dist/higher-order-unify/pattern.d.ts +4 -0
  50. package/dist/higher-order-unify/pattern.d.ts.map +1 -0
  51. package/dist/higher-order-unify/pattern.js +70 -0
  52. package/dist/higher-order-unify/pattern.js.map +1 -0
  53. package/dist/higher-order-unify/types.d.ts +19 -0
  54. package/dist/higher-order-unify/types.d.ts.map +1 -0
  55. package/dist/higher-order-unify/types.js +14 -0
  56. package/dist/higher-order-unify/types.js.map +1 -0
  57. package/dist/higher-order-unify/unify.d.ts +5 -0
  58. package/dist/higher-order-unify/unify.d.ts.map +1 -0
  59. package/dist/higher-order-unify/unify.js +306 -0
  60. package/dist/higher-order-unify/unify.js.map +1 -0
  61. package/dist/index.d.ts +4 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +36 -2
  64. package/dist/index.js.map +1 -1
  65. package/dist/lambda-calc/church.d.ts.map +1 -1
  66. package/dist/lambda-calc/church.js.map +1 -1
  67. package/dist/lambda-calc/combinators.d.ts.map +1 -1
  68. package/dist/lambda-calc/combinators.js.map +1 -1
  69. package/dist/lambda-calc/index.d.ts +1 -1
  70. package/dist/lambda-calc/index.d.ts.map +1 -1
  71. package/dist/lambda-calc/index.js.map +1 -1
  72. package/dist/mltt/equality.d.ts +9 -0
  73. package/dist/mltt/equality.d.ts.map +1 -0
  74. package/dist/mltt/equality.js +79 -0
  75. package/dist/mltt/equality.js.map +1 -0
  76. package/dist/mltt/index.d.ts +8 -0
  77. package/dist/mltt/index.d.ts.map +1 -0
  78. package/dist/mltt/index.js +49 -0
  79. package/dist/mltt/index.js.map +1 -0
  80. package/dist/mltt/infer.d.ts +17 -0
  81. package/dist/mltt/infer.d.ts.map +1 -0
  82. package/dist/mltt/infer.js +269 -0
  83. package/dist/mltt/infer.js.map +1 -0
  84. package/dist/mltt/normalize.d.ts +7 -0
  85. package/dist/mltt/normalize.d.ts.map +1 -0
  86. package/dist/mltt/normalize.js +131 -0
  87. package/dist/mltt/normalize.js.map +1 -0
  88. package/dist/mltt/substitute.d.ts +4 -0
  89. package/dist/mltt/substitute.d.ts.map +1 -0
  90. package/dist/mltt/substitute.js +94 -0
  91. package/dist/mltt/substitute.js.map +1 -0
  92. package/dist/mltt/types.d.ts +72 -0
  93. package/dist/mltt/types.d.ts.map +1 -0
  94. package/dist/mltt/types.js +211 -0
  95. package/dist/mltt/types.js.map +1 -0
  96. package/dist/nbe/index.d.ts +3 -0
  97. package/dist/nbe/index.d.ts.map +1 -0
  98. package/dist/nbe/index.js +25 -0
  99. package/dist/nbe/index.js.map +1 -0
  100. package/dist/nbe/nbe.d.ts +7 -0
  101. package/dist/nbe/nbe.d.ts.map +1 -0
  102. package/dist/nbe/nbe.js +118 -0
  103. package/dist/nbe/nbe.js.map +1 -0
  104. package/dist/nbe/types.d.ts +54 -0
  105. package/dist/nbe/types.d.ts.map +1 -0
  106. package/dist/nbe/types.js +117 -0
  107. package/dist/nbe/types.js.map +1 -0
  108. package/dist/profile-bridge/index.d.ts +64 -0
  109. package/dist/profile-bridge/index.d.ts.map +1 -0
  110. package/dist/profile-bridge/index.js +328 -0
  111. package/dist/profile-bridge/index.js.map +1 -0
  112. package/dist/profiles/many-valued/index.d.ts.map +1 -1
  113. package/dist/profiles/many-valued/index.js.map +1 -1
  114. package/dist/profiles/mu-calculus/check.d.ts +15 -0
  115. package/dist/profiles/mu-calculus/check.d.ts.map +1 -0
  116. package/dist/profiles/mu-calculus/check.js +172 -0
  117. package/dist/profiles/mu-calculus/check.js.map +1 -0
  118. package/dist/profiles/mu-calculus/ctl-translate.d.ts +61 -0
  119. package/dist/profiles/mu-calculus/ctl-translate.d.ts.map +1 -0
  120. package/dist/profiles/mu-calculus/ctl-translate.js +181 -0
  121. package/dist/profiles/mu-calculus/ctl-translate.js.map +1 -0
  122. package/dist/profiles/mu-calculus/index.d.ts +7 -0
  123. package/dist/profiles/mu-calculus/index.d.ts.map +1 -0
  124. package/dist/profiles/mu-calculus/index.js +33 -0
  125. package/dist/profiles/mu-calculus/index.js.map +1 -0
  126. package/dist/profiles/mu-calculus/types.d.ts +51 -0
  127. package/dist/profiles/mu-calculus/types.d.ts.map +1 -0
  128. package/dist/profiles/mu-calculus/types.js +42 -0
  129. package/dist/profiles/mu-calculus/types.js.map +1 -0
  130. package/dist/profiles/mu-calculus/wellformed.d.ts +40 -0
  131. package/dist/profiles/mu-calculus/wellformed.d.ts.map +1 -0
  132. package/dist/profiles/mu-calculus/wellformed.js +160 -0
  133. package/dist/profiles/mu-calculus/wellformed.js.map +1 -0
  134. package/dist/profiles/sequent-lk/cut-elimination.d.ts +11 -0
  135. package/dist/profiles/sequent-lk/cut-elimination.d.ts.map +1 -0
  136. package/dist/profiles/sequent-lk/cut-elimination.js +216 -0
  137. package/dist/profiles/sequent-lk/cut-elimination.js.map +1 -0
  138. package/dist/profiles/sequent-lk/index.d.ts +5 -0
  139. package/dist/profiles/sequent-lk/index.d.ts.map +1 -0
  140. package/dist/profiles/sequent-lk/index.js +24 -0
  141. package/dist/profiles/sequent-lk/index.js.map +1 -0
  142. package/dist/profiles/sequent-lk/prover.d.ts +25 -0
  143. package/dist/profiles/sequent-lk/prover.d.ts.map +1 -0
  144. package/dist/profiles/sequent-lk/prover.js +532 -0
  145. package/dist/profiles/sequent-lk/prover.js.map +1 -0
  146. package/dist/profiles/sequent-lk/types.d.ts +55 -0
  147. package/dist/profiles/sequent-lk/types.d.ts.map +1 -0
  148. package/dist/profiles/sequent-lk/types.js +18 -0
  149. package/dist/profiles/sequent-lk/types.js.map +1 -0
  150. package/dist/profiles/sequent-lk/util.d.ts +18 -0
  151. package/dist/profiles/sequent-lk/util.d.ts.map +1 -0
  152. package/dist/profiles/sequent-lk/util.js +71 -0
  153. package/dist/profiles/sequent-lk/util.js.map +1 -0
  154. package/dist/proof-nets/construct.d.ts +3 -0
  155. package/dist/proof-nets/construct.d.ts.map +1 -0
  156. package/dist/proof-nets/construct.js +85 -0
  157. package/dist/proof-nets/construct.js.map +1 -0
  158. package/dist/proof-nets/correctness.d.ts +3 -0
  159. package/dist/proof-nets/correctness.d.ts.map +1 -0
  160. package/dist/proof-nets/correctness.js +213 -0
  161. package/dist/proof-nets/correctness.js.map +1 -0
  162. package/dist/proof-nets/cut-elim.d.ts +9 -0
  163. package/dist/proof-nets/cut-elim.d.ts.map +1 -0
  164. package/dist/proof-nets/cut-elim.js +149 -0
  165. package/dist/proof-nets/cut-elim.js.map +1 -0
  166. package/dist/proof-nets/index.d.ts +6 -0
  167. package/dist/proof-nets/index.d.ts.map +1 -0
  168. package/dist/proof-nets/index.js +33 -0
  169. package/dist/proof-nets/index.js.map +1 -0
  170. package/dist/proof-nets/types.d.ts +36 -0
  171. package/dist/proof-nets/types.d.ts.map +1 -0
  172. package/dist/proof-nets/types.js +89 -0
  173. package/dist/proof-nets/types.js.map +1 -0
  174. package/dist/refinement-types/checker.d.ts +19 -0
  175. package/dist/refinement-types/checker.d.ts.map +1 -0
  176. package/dist/refinement-types/checker.js +248 -0
  177. package/dist/refinement-types/checker.js.map +1 -0
  178. package/dist/refinement-types/index.d.ts +11 -0
  179. package/dist/refinement-types/index.d.ts.map +1 -0
  180. package/dist/refinement-types/index.js +51 -0
  181. package/dist/refinement-types/index.js.map +1 -0
  182. package/dist/refinement-types/predicate.d.ts +31 -0
  183. package/dist/refinement-types/predicate.d.ts.map +1 -0
  184. package/dist/refinement-types/predicate.js +369 -0
  185. package/dist/refinement-types/predicate.js.map +1 -0
  186. package/dist/refinement-types/solver.d.ts +24 -0
  187. package/dist/refinement-types/solver.d.ts.map +1 -0
  188. package/dist/refinement-types/solver.js +207 -0
  189. package/dist/refinement-types/solver.js.map +1 -0
  190. package/dist/refinement-types/subtype.d.ts +14 -0
  191. package/dist/refinement-types/subtype.d.ts.map +1 -0
  192. package/dist/refinement-types/subtype.js +39 -0
  193. package/dist/refinement-types/subtype.js.map +1 -0
  194. package/dist/refinement-types/types.d.ts +64 -0
  195. package/dist/refinement-types/types.d.ts.map +1 -0
  196. package/dist/refinement-types/types.js +130 -0
  197. package/dist/refinement-types/types.js.map +1 -0
  198. package/dist/runtime/anti-unification/anti-unify.d.ts +22 -0
  199. package/dist/runtime/anti-unification/anti-unify.d.ts.map +1 -0
  200. package/dist/runtime/anti-unification/anti-unify.js +154 -0
  201. package/dist/runtime/anti-unification/anti-unify.js.map +1 -0
  202. package/dist/runtime/anti-unification/index.d.ts +6 -0
  203. package/dist/runtime/anti-unification/index.d.ts.map +1 -0
  204. package/dist/runtime/anti-unification/index.js +23 -0
  205. package/dist/runtime/anti-unification/index.js.map +1 -0
  206. package/dist/runtime/anti-unification/many.d.ts +49 -0
  207. package/dist/runtime/anti-unification/many.d.ts.map +1 -0
  208. package/dist/runtime/anti-unification/many.js +185 -0
  209. package/dist/runtime/anti-unification/many.js.map +1 -0
  210. package/dist/runtime/anti-unification/term-utils.d.ts +40 -0
  211. package/dist/runtime/anti-unification/term-utils.d.ts.map +1 -0
  212. package/dist/runtime/anti-unification/term-utils.js +173 -0
  213. package/dist/runtime/anti-unification/term-utils.js.map +1 -0
  214. package/dist/runtime/anti-unification/types.d.ts +41 -0
  215. package/dist/runtime/anti-unification/types.d.ts.map +1 -0
  216. package/dist/runtime/anti-unification/types.js +26 -0
  217. package/dist/runtime/anti-unification/types.js.map +1 -0
  218. package/dist/runtime/csp/ac3.d.ts +20 -0
  219. package/dist/runtime/csp/ac3.d.ts.map +1 -0
  220. package/dist/runtime/csp/ac3.js +165 -0
  221. package/dist/runtime/csp/ac3.js.map +1 -0
  222. package/dist/runtime/csp/backtrack.d.ts +15 -0
  223. package/dist/runtime/csp/backtrack.d.ts.map +1 -0
  224. package/dist/runtime/csp/backtrack.js +233 -0
  225. package/dist/runtime/csp/backtrack.js.map +1 -0
  226. package/dist/runtime/csp/builtins.d.ts +27 -0
  227. package/dist/runtime/csp/builtins.d.ts.map +1 -0
  228. package/dist/runtime/csp/builtins.js +109 -0
  229. package/dist/runtime/csp/builtins.js.map +1 -0
  230. package/dist/runtime/csp/index.d.ts +5 -0
  231. package/dist/runtime/csp/index.d.ts.map +1 -0
  232. package/dist/runtime/csp/index.js +23 -0
  233. package/dist/runtime/csp/index.js.map +1 -0
  234. package/dist/runtime/csp/types.d.ts +54 -0
  235. package/dist/runtime/csp/types.d.ts.map +1 -0
  236. package/dist/runtime/csp/types.js +14 -0
  237. package/dist/runtime/csp/types.js.map +1 -0
  238. package/dist/runtime/markov-logic/grounding.d.ts +19 -0
  239. package/dist/runtime/markov-logic/grounding.d.ts.map +1 -0
  240. package/dist/runtime/markov-logic/grounding.js +252 -0
  241. package/dist/runtime/markov-logic/grounding.js.map +1 -0
  242. package/dist/runtime/markov-logic/index.d.ts +6 -0
  243. package/dist/runtime/markov-logic/index.d.ts.map +1 -0
  244. package/dist/runtime/markov-logic/index.js +47 -0
  245. package/dist/runtime/markov-logic/index.js.map +1 -0
  246. package/dist/runtime/markov-logic/inference.d.ts +77 -0
  247. package/dist/runtime/markov-logic/inference.d.ts.map +1 -0
  248. package/dist/runtime/markov-logic/inference.js +382 -0
  249. package/dist/runtime/markov-logic/inference.js.map +1 -0
  250. package/dist/runtime/markov-logic/parser.d.ts +25 -0
  251. package/dist/runtime/markov-logic/parser.d.ts.map +1 -0
  252. package/dist/runtime/markov-logic/parser.js +264 -0
  253. package/dist/runtime/markov-logic/parser.js.map +1 -0
  254. package/dist/runtime/markov-logic/types.d.ts +64 -0
  255. package/dist/runtime/markov-logic/types.d.ts.map +1 -0
  256. package/dist/runtime/markov-logic/types.js +17 -0
  257. package/dist/runtime/markov-logic/types.js.map +1 -0
  258. package/dist/runtime/pi-calculus/congruence.d.ts +15 -0
  259. package/dist/runtime/pi-calculus/congruence.d.ts.map +1 -0
  260. package/dist/runtime/pi-calculus/congruence.js +271 -0
  261. package/dist/runtime/pi-calculus/congruence.js.map +1 -0
  262. package/dist/runtime/pi-calculus/index.d.ts +6 -0
  263. package/dist/runtime/pi-calculus/index.d.ts.map +1 -0
  264. package/dist/runtime/pi-calculus/index.js +30 -0
  265. package/dist/runtime/pi-calculus/index.js.map +1 -0
  266. package/dist/runtime/pi-calculus/names.d.ts +28 -0
  267. package/dist/runtime/pi-calculus/names.d.ts.map +1 -0
  268. package/dist/runtime/pi-calculus/names.js +182 -0
  269. package/dist/runtime/pi-calculus/names.js.map +1 -0
  270. package/dist/runtime/pi-calculus/reduction.d.ts +25 -0
  271. package/dist/runtime/pi-calculus/reduction.d.ts.map +1 -0
  272. package/dist/runtime/pi-calculus/reduction.js +338 -0
  273. package/dist/runtime/pi-calculus/reduction.js.map +1 -0
  274. package/dist/runtime/pi-calculus/substitution.d.ts +11 -0
  275. package/dist/runtime/pi-calculus/substitution.d.ts.map +1 -0
  276. package/dist/runtime/pi-calculus/substitution.js +109 -0
  277. package/dist/runtime/pi-calculus/substitution.js.map +1 -0
  278. package/dist/runtime/pi-calculus/types.d.ts +38 -0
  279. package/dist/runtime/pi-calculus/types.d.ts.map +1 -0
  280. package/dist/runtime/pi-calculus/types.js +22 -0
  281. package/dist/runtime/pi-calculus/types.js.map +1 -0
  282. package/dist/runtime/planning/astar.d.ts +10 -0
  283. package/dist/runtime/planning/astar.d.ts.map +1 -0
  284. package/dist/runtime/planning/astar.js +155 -0
  285. package/dist/runtime/planning/astar.js.map +1 -0
  286. package/dist/runtime/planning/bfs.d.ts +17 -0
  287. package/dist/runtime/planning/bfs.d.ts.map +1 -0
  288. package/dist/runtime/planning/bfs.js +87 -0
  289. package/dist/runtime/planning/bfs.js.map +1 -0
  290. package/dist/runtime/planning/ground.d.ts +55 -0
  291. package/dist/runtime/planning/ground.d.ts.map +1 -0
  292. package/dist/runtime/planning/ground.js +154 -0
  293. package/dist/runtime/planning/ground.js.map +1 -0
  294. package/dist/runtime/planning/heuristic.d.ts +29 -0
  295. package/dist/runtime/planning/heuristic.d.ts.map +1 -0
  296. package/dist/runtime/planning/heuristic.js +172 -0
  297. package/dist/runtime/planning/heuristic.js.map +1 -0
  298. package/dist/runtime/planning/index.d.ts +6 -0
  299. package/dist/runtime/planning/index.d.ts.map +1 -0
  300. package/dist/runtime/planning/index.js +38 -0
  301. package/dist/runtime/planning/index.js.map +1 -0
  302. package/dist/runtime/planning/types.d.ts +100 -0
  303. package/dist/runtime/planning/types.d.ts.map +1 -0
  304. package/dist/runtime/planning/types.js +22 -0
  305. package/dist/runtime/planning/types.js.map +1 -0
  306. package/dist/runtime/symbolic-diff/differentiate.d.ts.map +1 -1
  307. package/dist/runtime/symbolic-diff/differentiate.js.map +1 -1
  308. package/dist/runtime/symbolic-diff/index.d.ts +1 -1
  309. package/dist/runtime/symbolic-diff/index.d.ts.map +1 -1
  310. package/dist/runtime/symbolic-diff/index.js.map +1 -1
  311. package/dist/runtime/symbolic-diff/parse.d.ts.map +1 -1
  312. package/dist/runtime/symbolic-diff/parse.js +7 -1
  313. package/dist/runtime/symbolic-diff/parse.js.map +1 -1
  314. package/dist/runtime/theorem-cache/cache.d.ts +100 -0
  315. package/dist/runtime/theorem-cache/cache.d.ts.map +1 -0
  316. package/dist/runtime/theorem-cache/cache.js +213 -0
  317. package/dist/runtime/theorem-cache/cache.js.map +1 -0
  318. package/dist/runtime/theorem-cache/canonical.d.ts +59 -0
  319. package/dist/runtime/theorem-cache/canonical.d.ts.map +1 -0
  320. package/dist/runtime/theorem-cache/canonical.js +105 -0
  321. package/dist/runtime/theorem-cache/canonical.js.map +1 -0
  322. package/dist/runtime/theorem-cache/index.d.ts +6 -0
  323. package/dist/runtime/theorem-cache/index.d.ts.map +1 -0
  324. package/dist/runtime/theorem-cache/index.js +16 -0
  325. package/dist/runtime/theorem-cache/index.js.map +1 -0
  326. package/dist/runtime/theorem-cache/pattern.d.ts +24 -0
  327. package/dist/runtime/theorem-cache/pattern.d.ts.map +1 -0
  328. package/dist/runtime/theorem-cache/pattern.js +80 -0
  329. package/dist/runtime/theorem-cache/pattern.js.map +1 -0
  330. package/dist/system-f/index.d.ts +7 -0
  331. package/dist/system-f/index.d.ts.map +1 -0
  332. package/dist/system-f/index.js +48 -0
  333. package/dist/system-f/index.js.map +1 -0
  334. package/dist/system-f/infer.d.ts +9 -0
  335. package/dist/system-f/infer.d.ts.map +1 -0
  336. package/dist/system-f/infer.js +94 -0
  337. package/dist/system-f/infer.js.map +1 -0
  338. package/dist/system-f/reduce.d.ts +15 -0
  339. package/dist/system-f/reduce.d.ts.map +1 -0
  340. package/dist/system-f/reduce.js +259 -0
  341. package/dist/system-f/reduce.js.map +1 -0
  342. package/dist/system-f/types.d.ts +53 -0
  343. package/dist/system-f/types.d.ts.map +1 -0
  344. package/dist/system-f/types.js +157 -0
  345. package/dist/system-f/types.js.map +1 -0
  346. package/dist/tableau-framework/TableauProver.d.ts +10 -0
  347. package/dist/tableau-framework/TableauProver.d.ts.map +1 -0
  348. package/dist/tableau-framework/TableauProver.js +118 -0
  349. package/dist/tableau-framework/TableauProver.js.map +1 -0
  350. package/dist/tableau-framework/index.d.ts +5 -0
  351. package/dist/tableau-framework/index.d.ts.map +1 -0
  352. package/dist/tableau-framework/index.js +11 -0
  353. package/dist/tableau-framework/index.js.map +1 -0
  354. package/dist/tableau-framework/propositional.d.ts +11 -0
  355. package/dist/tableau-framework/propositional.d.ts.map +1 -0
  356. package/dist/tableau-framework/propositional.js +143 -0
  357. package/dist/tableau-framework/propositional.js.map +1 -0
  358. package/dist/tableau-framework/types.d.ts +32 -0
  359. package/dist/tableau-framework/types.d.ts.map +1 -0
  360. package/dist/tableau-framework/types.js +6 -0
  361. package/dist/tableau-framework/types.js.map +1 -0
  362. package/dist/tests/anti-unification/anti-unify.test.d.ts +2 -0
  363. package/dist/tests/anti-unification/anti-unify.test.d.ts.map +1 -0
  364. package/dist/tests/anti-unification/anti-unify.test.js +219 -0
  365. package/dist/tests/anti-unification/anti-unify.test.js.map +1 -0
  366. package/dist/tests/coinduction/coinduction.test.d.ts +2 -0
  367. package/dist/tests/coinduction/coinduction.test.d.ts.map +1 -0
  368. package/dist/tests/coinduction/coinduction.test.js +217 -0
  369. package/dist/tests/coinduction/coinduction.test.js.map +1 -0
  370. package/dist/tests/combinators-ski/combinators-ski.test.d.ts +2 -0
  371. package/dist/tests/combinators-ski/combinators-ski.test.d.ts.map +1 -0
  372. package/dist/tests/combinators-ski/combinators-ski.test.js +211 -0
  373. package/dist/tests/combinators-ski/combinators-ski.test.js.map +1 -0
  374. package/dist/tests/constructive-reals/constructive-reals.test.d.ts +2 -0
  375. package/dist/tests/constructive-reals/constructive-reals.test.d.ts.map +1 -0
  376. package/dist/tests/constructive-reals/constructive-reals.test.js +357 -0
  377. package/dist/tests/constructive-reals/constructive-reals.test.js.map +1 -0
  378. package/dist/tests/coverage-fill-aristotelian.test.js +1 -1
  379. package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -1
  380. package/dist/tests/coverage-fill-fallacies.test.js +1 -1
  381. package/dist/tests/coverage-fill-fallacies.test.js.map +1 -1
  382. package/dist/tests/coverage-fill-format.test.js +1 -1
  383. package/dist/tests/coverage-fill-format.test.js.map +1 -1
  384. package/dist/tests/coverage-fill-intuitionistic.test.js +1 -1
  385. package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -1
  386. package/dist/tests/coverage-fill-probabilistic.test.js +1 -1
  387. package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -1
  388. package/dist/tests/csp/csp.test.d.ts +2 -0
  389. package/dist/tests/csp/csp.test.d.ts.map +1 -0
  390. package/dist/tests/csp/csp.test.js +292 -0
  391. package/dist/tests/csp/csp.test.js.map +1 -0
  392. package/dist/tests/game-semantics/game-semantics.test.d.ts +2 -0
  393. package/dist/tests/game-semantics/game-semantics.test.d.ts.map +1 -0
  394. package/dist/tests/game-semantics/game-semantics.test.js +143 -0
  395. package/dist/tests/game-semantics/game-semantics.test.js.map +1 -0
  396. package/dist/tests/higher-order-unify/ho-unify.test.d.ts +2 -0
  397. package/dist/tests/higher-order-unify/ho-unify.test.d.ts.map +1 -0
  398. package/dist/tests/higher-order-unify/ho-unify.test.js +264 -0
  399. package/dist/tests/higher-order-unify/ho-unify.test.js.map +1 -0
  400. package/dist/tests/integration/cross-modules.test.d.ts +8 -0
  401. package/dist/tests/integration/cross-modules.test.d.ts.map +1 -0
  402. package/dist/tests/integration/cross-modules.test.js +668 -0
  403. package/dist/tests/integration/cross-modules.test.js.map +1 -0
  404. package/dist/tests/lambda-calc/lambda-calc.test.js.map +1 -1
  405. package/dist/tests/many-valued/many-valued.test.js.map +1 -1
  406. package/dist/tests/markov-logic/markov-logic.test.d.ts +2 -0
  407. package/dist/tests/markov-logic/markov-logic.test.d.ts.map +1 -0
  408. package/dist/tests/markov-logic/markov-logic.test.js +349 -0
  409. package/dist/tests/markov-logic/markov-logic.test.js.map +1 -0
  410. package/dist/tests/mltt/mltt.test.d.ts +2 -0
  411. package/dist/tests/mltt/mltt.test.d.ts.map +1 -0
  412. package/dist/tests/mltt/mltt.test.js +181 -0
  413. package/dist/tests/mltt/mltt.test.js.map +1 -0
  414. package/dist/tests/mu-calculus/check.test.d.ts +2 -0
  415. package/dist/tests/mu-calculus/check.test.d.ts.map +1 -0
  416. package/dist/tests/mu-calculus/check.test.js +234 -0
  417. package/dist/tests/mu-calculus/check.test.js.map +1 -0
  418. package/dist/tests/nbe/nbe.test.d.ts +2 -0
  419. package/dist/tests/nbe/nbe.test.d.ts.map +1 -0
  420. package/dist/tests/nbe/nbe.test.js +121 -0
  421. package/dist/tests/nbe/nbe.test.js.map +1 -0
  422. package/dist/tests/pi-calculus/pi-calculus.test.d.ts +2 -0
  423. package/dist/tests/pi-calculus/pi-calculus.test.d.ts.map +1 -0
  424. package/dist/tests/pi-calculus/pi-calculus.test.js +273 -0
  425. package/dist/tests/pi-calculus/pi-calculus.test.js.map +1 -0
  426. package/dist/tests/planning/planning.test.d.ts +2 -0
  427. package/dist/tests/planning/planning.test.d.ts.map +1 -0
  428. package/dist/tests/planning/planning.test.js +397 -0
  429. package/dist/tests/planning/planning.test.js.map +1 -0
  430. package/dist/tests/profile-bridge/translations.test.d.ts +2 -0
  431. package/dist/tests/profile-bridge/translations.test.d.ts.map +1 -0
  432. package/dist/tests/profile-bridge/translations.test.js +266 -0
  433. package/dist/tests/profile-bridge/translations.test.js.map +1 -0
  434. package/dist/tests/proof-nets/proof-nets.test.d.ts +2 -0
  435. package/dist/tests/proof-nets/proof-nets.test.d.ts.map +1 -0
  436. package/dist/tests/proof-nets/proof-nets.test.js +263 -0
  437. package/dist/tests/proof-nets/proof-nets.test.js.map +1 -0
  438. package/dist/tests/refinement-types/refinement-types.test.d.ts +2 -0
  439. package/dist/tests/refinement-types/refinement-types.test.d.ts.map +1 -0
  440. package/dist/tests/refinement-types/refinement-types.test.js +174 -0
  441. package/dist/tests/refinement-types/refinement-types.test.js.map +1 -0
  442. package/dist/tests/sequent-lk/prover.test.d.ts +2 -0
  443. package/dist/tests/sequent-lk/prover.test.d.ts.map +1 -0
  444. package/dist/tests/sequent-lk/prover.test.js +317 -0
  445. package/dist/tests/sequent-lk/prover.test.js.map +1 -0
  446. package/dist/tests/symbolic-diff/symbolic-diff.test.js.map +1 -1
  447. package/dist/tests/system-f/system-f.test.d.ts +2 -0
  448. package/dist/tests/system-f/system-f.test.d.ts.map +1 -0
  449. package/dist/tests/system-f/system-f.test.js +217 -0
  450. package/dist/tests/system-f/system-f.test.js.map +1 -0
  451. package/dist/tests/tableau-framework/tableau.test.d.ts +2 -0
  452. package/dist/tests/tableau-framework/tableau.test.d.ts.map +1 -0
  453. package/dist/tests/tableau-framework/tableau.test.js +196 -0
  454. package/dist/tests/tableau-framework/tableau.test.js.map +1 -0
  455. package/dist/tests/theorem-cache/cache.test.d.ts +2 -0
  456. package/dist/tests/theorem-cache/cache.test.d.ts.map +1 -0
  457. package/dist/tests/theorem-cache/cache.test.js +510 -0
  458. package/dist/tests/theorem-cache/cache.test.js.map +1 -0
  459. package/package.json +1 -1
@@ -0,0 +1,136 @@
1
+ export interface Stream<T> {
2
+ head: T;
3
+ tail: () => Stream<T>;
4
+ }
5
+ /**
6
+ * Cons explícito: crea un stream con cabeza `h` y cola perezosa
7
+ * `t` (una función que produce el resto cuando se evalúa).
8
+ */
9
+ export declare function cons<T>(h: T, t: () => Stream<T>): Stream<T>;
10
+ /**
11
+ * `repeat(x)` = x, x, x, ... (stream constante)
12
+ *
13
+ * Definición corecursiva clásica: repeat(x) = cons(x, () => repeat(x)).
14
+ * El thunk evita la recursión infinita en tiempo de construcción.
15
+ */
16
+ export declare function repeat<T>(x: T): Stream<T>;
17
+ /**
18
+ * `iterate(f, x)` = x, f(x), f(f(x)), ...
19
+ *
20
+ * Definición corecursiva: iterate(f, x) = cons(x, () => iterate(f, f(x))).
21
+ */
22
+ export declare function iterate<T>(f: (x: T) => T, x: T): Stream<T>;
23
+ /**
24
+ * `unfold(seed, step)`: anamorfismo genérico. `step(s)` devuelve
25
+ * el siguiente par `[valor, próximaSemilla]` o `null` para terminar.
26
+ * Para streams infinitos, `step` nunca debe devolver `null`. Si
27
+ * devuelve `null` durante una iteración, devolvemos un stream que
28
+ * cicla la última cabeza producida (decisión: streams totales).
29
+ */
30
+ export declare function unfold<S, T>(seed: S, step: (s: S) => readonly [T, S] | null): Stream<T>;
31
+ /**
32
+ * `take(s, n)`: extrae los primeros n elementos de un stream.
33
+ * Observación finita; es la única forma de "ver" un stream.
34
+ */
35
+ export declare function take<T>(s: Stream<T>, n: number): T[];
36
+ /**
37
+ * `drop(s, n)`: descarta los primeros n elementos.
38
+ */
39
+ export declare function drop<T>(s: Stream<T>, n: number): Stream<T>;
40
+ /**
41
+ * `nth(s, i)`: i-ésimo elemento (0-indexed).
42
+ */
43
+ export declare function nth<T>(s: Stream<T>, i: number): T;
44
+ /**
45
+ * `map(f, s)`: aplica `f` a cada elemento.
46
+ *
47
+ * Definición corecursiva: map(f, s) = cons(f(head s), () => map(f, tail s)).
48
+ */
49
+ export declare function map<T, U>(f: (x: T) => U, s: Stream<T>): Stream<U>;
50
+ /**
51
+ * `zipWith(f, a, b)`: combina dos streams elemento a elemento.
52
+ *
53
+ * zipWith(f, a, b) = cons(f(head a, head b), () => zipWith(f, tail a, tail b))
54
+ */
55
+ export declare function zipWith<A, B, C>(f: (a: A, b: B) => C, a: Stream<A>, b: Stream<B>): Stream<C>;
56
+ /**
57
+ * `zip(a, b)`: par-zip estándar.
58
+ */
59
+ export declare function zip<A, B>(a: Stream<A>, b: Stream<B>): Stream<[A, B]>;
60
+ /**
61
+ * `filter(pred, s)`: PRECONDICIÓN — el predicado debe ser satisfecho
62
+ * infinitas veces, de lo contrario el stream resultante se "atasca".
63
+ * No protegemos contra eso porque coinductivamente no es decidible.
64
+ */
65
+ export declare function filter<T>(pred: (x: T) => boolean, s: Stream<T>): Stream<T>;
66
+ /**
67
+ * naturals = 0, 1, 2, 3, ...
68
+ */
69
+ export declare const naturals: Stream<number>;
70
+ export declare const fibonacci: Stream<number>;
71
+ export interface BisimulationProof<T> {
72
+ /** Par inicial cuyo membership en la bisimulación queremos probar. */
73
+ initial: [Stream<T>, Stream<T>];
74
+ /**
75
+ * Relación candidata R. Por bisimulación, basta que R sea una
76
+ * "bisimulación up-to": cerrada bajo los destructores en el sentido
77
+ * de que R(s,t) ⇒ R(tail s, tail t).
78
+ */
79
+ relation: (a: Stream<T>, b: Stream<T>) => boolean;
80
+ }
81
+ /**
82
+ * `isBisimilar(a, b, depth)`: chequeo de bisimilaridad acotado.
83
+ * Compara cabezas hasta profundidad `depth`. Retorna `false` apenas
84
+ * encuentra una divergencia (refutación constructiva); retorna `true`
85
+ * si los primeros `depth` elementos coinciden (evidencia positiva
86
+ * acotada — para una prueba real de bisimilaridad, usar `prove`).
87
+ *
88
+ * Usa `Object.is` para comparar primitivos. Para tipos compuestos
89
+ * el caller debería envolver con un equality explícito (no hacemos
90
+ * deep-equals porque tendría costo no obvio y semántica ambigua).
91
+ */
92
+ export declare function isBisimilar<T>(a: Stream<T>, b: Stream<T>, depth?: number): boolean;
93
+ /**
94
+ * Igualdad observacional para elementos de un stream. Soportamos:
95
+ * • primitivos (===, con Object.is para NaN/+0/-0)
96
+ * • arrays y tuplas (recursión elemento a elemento)
97
+ * • objetos planos por keys propias
98
+ * No hace circular-detection: si pasás un grafo cíclico, va a colgar.
99
+ */
100
+ declare function equal(x: unknown, y: unknown): boolean;
101
+ /**
102
+ * `prove(claim, depth)`: aplica la técnica de bisimulación up-to.
103
+ *
104
+ * Algoritmo: empieza con el par inicial, y para cada paso i ∈ [0, depth):
105
+ * 1. Verifica que la relación R sostenga el par actual (a_i, b_i).
106
+ * 2. Verifica que las cabezas sean iguales: head(a_i) = head(b_i).
107
+ * 3. Avanza: a_{i+1} = tail(a_i), b_{i+1} = tail(b_i).
108
+ *
109
+ * Si la relación R es genuinamente una bisimulación (clausurada bajo
110
+ * tail), todos los pasos pasarán para cualquier `depth`. El método
111
+ * es completo "en el límite": probar para `depth = ∞` ≡ probar bisim.
112
+ * En la práctica devolvemos true si depth pasos pasaron sin error.
113
+ *
114
+ * Si la relación falla en algún paso, retornamos false (evidencia de
115
+ * que R no es una bisimulación, o de que (a, b) no es bisimilar).
116
+ */
117
+ export declare function prove<T>(claim: BisimulationProof<T>, depth?: number): boolean;
118
+ /**
119
+ * `interleave(a, b)`: intercala a, b, a, b, ... toma 1 de a luego 1 de b.
120
+ *
121
+ * interleave(a, b) = cons(head a, () => interleave(b, tail a))
122
+ *
123
+ * Nota: el "switch" entre a y b se hace por el truco clásico:
124
+ * llamar recursivamente con los argumentos invertidos.
125
+ */
126
+ export declare function interleave<T>(a: Stream<T>, b: Stream<T>): Stream<T>;
127
+ /**
128
+ * `scan(f, init, s)`: prefijos acumulados; análogo a Array.prototype.reduce
129
+ * pero coinductivo. scan(+, 0, naturals) = 0, 0, 1, 3, 6, 10, ...
130
+ */
131
+ export declare function scan<T, U>(f: (acc: U, x: T) => U, init: U, s: Stream<T>): Stream<U>;
132
+ export declare const __internals: {
133
+ equal: typeof equal;
134
+ };
135
+ export {};
136
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coinduction/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Coinduction — Streams + corecursion + bisimulación up-to
4
+ // ============================================================
5
+ // Streams coinductivos definidos por destructores (head, tail).
6
+ // Construcción corecursiva via thunks perezosos (la cola es una
7
+ // función `() => Stream<T>` para evitar evaluación infinita).
8
+ //
9
+ // Bisimulación: la noción natural de igualdad para streams. Dos
10
+ // streams `s, t` son bisimilares si existe una relación R tal que
11
+ // • R(s, t) ⇒ head(s) = head(t)
12
+ // • R(s, t) ⇒ R(tail(s), tail(t))
13
+ // La igualdad sintáctica falla (dos streams pueden generar la
14
+ // misma secuencia con thunks distintos); la bisimulación es la
15
+ // clausura coinductiva apropiada.
16
+ //
17
+ // Como las secuencias son infinitas no podemos verificar
18
+ // bisimilaridad en general (semi-decidible). Por eso ofrecemos:
19
+ // • isBisimilar(a, b, depth): chequeo "hasta profundidad", suficiente
20
+ // para refutación (encontrar el primer prefijo divergente) y para
21
+ // evidencia computacional positiva acotada.
22
+ // • prove(claim, depth): técnica "bisimulación up-to". El usuario
23
+ // provee una relación R; chequeamos por `depth` pasos que
24
+ // R(a,b) ⇒ head(a)=head(b) ∧ R(tail a, tail b).
25
+ // Si la relación es realmente una bisimulación, ningún paso falla;
26
+ // si depth pasos pasaron sin fallar, tenemos alta confianza
27
+ // (en el caso límite, todos los pasos válidos = bisimulación).
28
+ // ============================================================
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.__internals = exports.fibonacci = exports.naturals = void 0;
31
+ exports.cons = cons;
32
+ exports.repeat = repeat;
33
+ exports.iterate = iterate;
34
+ exports.unfold = unfold;
35
+ exports.take = take;
36
+ exports.drop = drop;
37
+ exports.nth = nth;
38
+ exports.map = map;
39
+ exports.zipWith = zipWith;
40
+ exports.zip = zip;
41
+ exports.filter = filter;
42
+ exports.isBisimilar = isBisimilar;
43
+ exports.prove = prove;
44
+ exports.interleave = interleave;
45
+ exports.scan = scan;
46
+ // ── Constructores ───────────────────────────────────────────
47
+ /**
48
+ * Cons explícito: crea un stream con cabeza `h` y cola perezosa
49
+ * `t` (una función que produce el resto cuando se evalúa).
50
+ */
51
+ function cons(h, t) {
52
+ return { head: h, tail: t };
53
+ }
54
+ /**
55
+ * `repeat(x)` = x, x, x, ... (stream constante)
56
+ *
57
+ * Definición corecursiva clásica: repeat(x) = cons(x, () => repeat(x)).
58
+ * El thunk evita la recursión infinita en tiempo de construcción.
59
+ */
60
+ function repeat(x) {
61
+ // Truco para evitar reconstruir el objeto en cada `tail`: usamos
62
+ // un nodo que se referencia a sí mismo. Esto preserva la semántica
63
+ // (tail(repeat x) = repeat x) y además garantiza punto-fijo.
64
+ const node = { head: x, tail: () => node };
65
+ return node;
66
+ }
67
+ /**
68
+ * `iterate(f, x)` = x, f(x), f(f(x)), ...
69
+ *
70
+ * Definición corecursiva: iterate(f, x) = cons(x, () => iterate(f, f(x))).
71
+ */
72
+ function iterate(f, x) {
73
+ return { head: x, tail: () => iterate(f, f(x)) };
74
+ }
75
+ /**
76
+ * `unfold(seed, step)`: anamorfismo genérico. `step(s)` devuelve
77
+ * el siguiente par `[valor, próximaSemilla]` o `null` para terminar.
78
+ * Para streams infinitos, `step` nunca debe devolver `null`. Si
79
+ * devuelve `null` durante una iteración, devolvemos un stream que
80
+ * cicla la última cabeza producida (decisión: streams totales).
81
+ */
82
+ function unfold(seed, step) {
83
+ const next = step(seed);
84
+ if (next === null) {
85
+ // Streams en este módulo son totales; si el cliente decide terminar,
86
+ // estabilizamos en un punto fijo trivial usando undefined.
87
+ // En la práctica, los callers no deberían llamar unfold con un step
88
+ // que puede devolver null si esperan un stream infinito.
89
+ throw new Error('unfold: step returned null on infinite stream');
90
+ }
91
+ const [value, nextSeed] = next;
92
+ return { head: value, tail: () => unfold(nextSeed, step) };
93
+ }
94
+ // ── Destructores y observaciones ────────────────────────────
95
+ /**
96
+ * `take(s, n)`: extrae los primeros n elementos de un stream.
97
+ * Observación finita; es la única forma de "ver" un stream.
98
+ */
99
+ function take(s, n) {
100
+ if (!Number.isInteger(n) || n < 0) {
101
+ throw new Error(`take: n debe ser entero no-negativo, recibido ${n}`);
102
+ }
103
+ const out = [];
104
+ let cur = s;
105
+ for (let i = 0; i < n; i++) {
106
+ out.push(cur.head);
107
+ cur = cur.tail();
108
+ }
109
+ return out;
110
+ }
111
+ /**
112
+ * `drop(s, n)`: descarta los primeros n elementos.
113
+ */
114
+ function drop(s, n) {
115
+ if (!Number.isInteger(n) || n < 0) {
116
+ throw new Error(`drop: n debe ser entero no-negativo, recibido ${n}`);
117
+ }
118
+ let cur = s;
119
+ for (let i = 0; i < n; i++)
120
+ cur = cur.tail();
121
+ return cur;
122
+ }
123
+ /**
124
+ * `nth(s, i)`: i-ésimo elemento (0-indexed).
125
+ */
126
+ function nth(s, i) {
127
+ return drop(s, i).head;
128
+ }
129
+ // ── Functor / aplicativos ───────────────────────────────────
130
+ /**
131
+ * `map(f, s)`: aplica `f` a cada elemento.
132
+ *
133
+ * Definición corecursiva: map(f, s) = cons(f(head s), () => map(f, tail s)).
134
+ */
135
+ function map(f, s) {
136
+ return { head: f(s.head), tail: () => map(f, s.tail()) };
137
+ }
138
+ /**
139
+ * `zipWith(f, a, b)`: combina dos streams elemento a elemento.
140
+ *
141
+ * zipWith(f, a, b) = cons(f(head a, head b), () => zipWith(f, tail a, tail b))
142
+ */
143
+ function zipWith(f, a, b) {
144
+ return {
145
+ head: f(a.head, b.head),
146
+ tail: () => zipWith(f, a.tail(), b.tail()),
147
+ };
148
+ }
149
+ /**
150
+ * `zip(a, b)`: par-zip estándar.
151
+ */
152
+ function zip(a, b) {
153
+ return zipWith((x, y) => [x, y], a, b);
154
+ }
155
+ /**
156
+ * `filter(pred, s)`: PRECONDICIÓN — el predicado debe ser satisfecho
157
+ * infinitas veces, de lo contrario el stream resultante se "atasca".
158
+ * No protegemos contra eso porque coinductivamente no es decidible.
159
+ */
160
+ function filter(pred, s) {
161
+ let cur = s;
162
+ while (!pred(cur.head)) {
163
+ cur = cur.tail();
164
+ }
165
+ const advanced = cur;
166
+ return {
167
+ head: advanced.head,
168
+ tail: () => filter(pred, advanced.tail()),
169
+ };
170
+ }
171
+ // ── Streams notables ────────────────────────────────────────
172
+ /**
173
+ * naturals = 0, 1, 2, 3, ...
174
+ */
175
+ exports.naturals = iterate((n) => n + 1, 0);
176
+ /**
177
+ * fibonacci = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
178
+ *
179
+ * Definición clásica corecursiva (Hinze):
180
+ * fib = 0 :: 1 :: zipWith(+, fib, tail fib)
181
+ *
182
+ * En TypeScript necesitamos un thunk que se autorreferencie. Lo
183
+ * implementamos con una closure que devuelve siempre el mismo nodo.
184
+ */
185
+ function makeFibonacci() {
186
+ // fib(n) clásico vía iterate sobre el par (a, b) = (fib n, fib (n+1)).
187
+ // Equivalente computacionalmente a la definición zipWith pero sin
188
+ // requerir auto-referencia en TS (que generaría thunks anidados
189
+ // exponencialmente sin memoización).
190
+ return map(([a, _b]) => a, iterate(([a, b]) => [b, a + b], [0, 1]));
191
+ }
192
+ exports.fibonacci = makeFibonacci();
193
+ const DEFAULT_DEPTH = 64;
194
+ /**
195
+ * `isBisimilar(a, b, depth)`: chequeo de bisimilaridad acotado.
196
+ * Compara cabezas hasta profundidad `depth`. Retorna `false` apenas
197
+ * encuentra una divergencia (refutación constructiva); retorna `true`
198
+ * si los primeros `depth` elementos coinciden (evidencia positiva
199
+ * acotada — para una prueba real de bisimilaridad, usar `prove`).
200
+ *
201
+ * Usa `Object.is` para comparar primitivos. Para tipos compuestos
202
+ * el caller debería envolver con un equality explícito (no hacemos
203
+ * deep-equals porque tendría costo no obvio y semántica ambigua).
204
+ */
205
+ function isBisimilar(a, b, depth = DEFAULT_DEPTH) {
206
+ if (!Number.isInteger(depth) || depth < 0) {
207
+ throw new Error(`isBisimilar: depth debe ser entero no-negativo, recibido ${depth}`);
208
+ }
209
+ let curA = a;
210
+ let curB = b;
211
+ for (let i = 0; i < depth; i++) {
212
+ if (!equal(curA.head, curB.head))
213
+ return false;
214
+ curA = curA.tail();
215
+ curB = curB.tail();
216
+ }
217
+ return true;
218
+ }
219
+ /**
220
+ * Igualdad observacional para elementos de un stream. Soportamos:
221
+ * • primitivos (===, con Object.is para NaN/+0/-0)
222
+ * • arrays y tuplas (recursión elemento a elemento)
223
+ * • objetos planos por keys propias
224
+ * No hace circular-detection: si pasás un grafo cíclico, va a colgar.
225
+ */
226
+ function equal(x, y) {
227
+ if (Object.is(x, y))
228
+ return true;
229
+ if (typeof x !== typeof y)
230
+ return false;
231
+ if (x === null || y === null)
232
+ return false;
233
+ if (typeof x !== 'object')
234
+ return false;
235
+ if (Array.isArray(x) !== Array.isArray(y))
236
+ return false;
237
+ if (Array.isArray(x) && Array.isArray(y)) {
238
+ if (x.length !== y.length)
239
+ return false;
240
+ for (let i = 0; i < x.length; i++) {
241
+ if (!equal(x[i], y[i]))
242
+ return false;
243
+ }
244
+ return true;
245
+ }
246
+ const ox = x;
247
+ const oy = y;
248
+ const kx = Object.keys(ox);
249
+ const ky = Object.keys(oy);
250
+ if (kx.length !== ky.length)
251
+ return false;
252
+ for (const k of kx) {
253
+ if (!Object.prototype.hasOwnProperty.call(oy, k))
254
+ return false;
255
+ if (!equal(ox[k], oy[k]))
256
+ return false;
257
+ }
258
+ return true;
259
+ }
260
+ /**
261
+ * `prove(claim, depth)`: aplica la técnica de bisimulación up-to.
262
+ *
263
+ * Algoritmo: empieza con el par inicial, y para cada paso i ∈ [0, depth):
264
+ * 1. Verifica que la relación R sostenga el par actual (a_i, b_i).
265
+ * 2. Verifica que las cabezas sean iguales: head(a_i) = head(b_i).
266
+ * 3. Avanza: a_{i+1} = tail(a_i), b_{i+1} = tail(b_i).
267
+ *
268
+ * Si la relación R es genuinamente una bisimulación (clausurada bajo
269
+ * tail), todos los pasos pasarán para cualquier `depth`. El método
270
+ * es completo "en el límite": probar para `depth = ∞` ≡ probar bisim.
271
+ * En la práctica devolvemos true si depth pasos pasaron sin error.
272
+ *
273
+ * Si la relación falla en algún paso, retornamos false (evidencia de
274
+ * que R no es una bisimulación, o de que (a, b) no es bisimilar).
275
+ */
276
+ function prove(claim, depth = DEFAULT_DEPTH) {
277
+ if (!Number.isInteger(depth) || depth < 0) {
278
+ throw new Error(`prove: depth debe ser entero no-negativo, recibido ${depth}`);
279
+ }
280
+ let [curA, curB] = claim.initial;
281
+ for (let i = 0; i < depth; i++) {
282
+ if (!claim.relation(curA, curB))
283
+ return false;
284
+ if (!equal(curA.head, curB.head))
285
+ return false;
286
+ curA = curA.tail();
287
+ curB = curB.tail();
288
+ }
289
+ return true;
290
+ }
291
+ // ── Utilidades para combinar streams (Hinze classics) ──────
292
+ /**
293
+ * `interleave(a, b)`: intercala a, b, a, b, ... toma 1 de a luego 1 de b.
294
+ *
295
+ * interleave(a, b) = cons(head a, () => interleave(b, tail a))
296
+ *
297
+ * Nota: el "switch" entre a y b se hace por el truco clásico:
298
+ * llamar recursivamente con los argumentos invertidos.
299
+ */
300
+ function interleave(a, b) {
301
+ return {
302
+ head: a.head,
303
+ tail: () => interleave(b, a.tail()),
304
+ };
305
+ }
306
+ /**
307
+ * `scan(f, init, s)`: prefijos acumulados; análogo a Array.prototype.reduce
308
+ * pero coinductivo. scan(+, 0, naturals) = 0, 0, 1, 3, 6, 10, ...
309
+ */
310
+ function scan(f, init, s) {
311
+ return {
312
+ head: init,
313
+ tail: () => scan(f, f(init, s.head), s.tail()),
314
+ };
315
+ }
316
+ // ── Exports auxiliares para tests ───────────────────────────
317
+ exports.__internals = { equal };
318
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coinduction/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Term as LambdaTerm } from '../lambda-calc/types';
2
+ import type { CTerm } from './types';
3
+ export declare function abstractFromLambda(t: LambdaTerm): CTerm;
4
+ export declare function toLambda(c: CTerm): LambdaTerm;
5
+ //# sourceMappingURL=abstract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.d.ts","sourceRoot":"","sources":["../../src/combinators-ski/abstract.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIrC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,GAAG,KAAK,CAYvD;AA+BD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAmB7C"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Bracket abstraction: λ-cálculo → SKI
4
+ // ============================================================
5
+ //
6
+ // Algoritmo clásico de Curry para eliminar λ-abstracciones, traducido
7
+ // como `lambda x . T ≡ [x] T` con las reglas:
8
+ //
9
+ // [x] x = I
10
+ // [x] M = K M si x ∉ FV(M)
11
+ // [x] (M N) = S ([x] M) ([x] N)
12
+ //
13
+ // Es el llamado "algoritmo (abc)" — simple, no optimizado: produce
14
+ // términos grandes pero correctos. Hay variantes que aprovechan
15
+ // patrones como `[x] (M x) = M` (η) o introducen B, C, W, T, K' para
16
+ // reducir tamaño; aquí elegimos la canónica por claridad pedagógica.
17
+ //
18
+ // `toLambda` hace el camino inverso: codifica S, K, I como las
19
+ // λ-abstracciones que los definen. No pretende invertir
20
+ // `abstractFromLambda` exactamente — el round-trip es semántico
21
+ // (alpha/beta-eta equivalente), no sintáctico.
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.abstractFromLambda = abstractFromLambda;
24
+ exports.toLambda = toLambda;
25
+ const types_1 = require("../lambda-calc/types");
26
+ const types_2 = require("./types");
27
+ // Convierte un λ-término a SKI puro (sólo S, K, I y variables libres).
28
+ function abstractFromLambda(t) {
29
+ switch (t.kind) {
30
+ case 'var':
31
+ return (0, types_2.cvar)(t.name);
32
+ case 'app':
33
+ return { kind: 'app', fn: abstractFromLambda(t.fn), arg: abstractFromLambda(t.arg) };
34
+ case 'abs': {
35
+ // [param] body
36
+ const inner = abstractFromLambda(t.body);
37
+ return bracket(t.param, inner);
38
+ }
39
+ }
40
+ }
41
+ // [x] T con T ya en SKI.
42
+ function bracket(x, t) {
43
+ // [x] x = I
44
+ if (t.kind === 'var' && t.name === x)
45
+ return (0, types_2.I)();
46
+ // [x] M = K M si x ∉ FV(M)
47
+ if (!(0, types_2.freeVars)(t).has(x))
48
+ return (0, types_2.app)((0, types_2.K)(), t);
49
+ // En este punto t es necesariamente una aplicación: si fuese una
50
+ // constante S/K/I no tendría FV, y si fuese `var` su nombre ≠ x ya
51
+ // habría caído en la rama K. Mantengo el switch para que TS
52
+ // narrowee y queden cubiertas las ramas restantes.
53
+ switch (t.kind) {
54
+ case 'app':
55
+ // [x] (M N) = S ([x] M) ([x] N)
56
+ return (0, types_2.app)((0, types_2.S)(), bracket(x, t.fn), bracket(x, t.arg));
57
+ case 'var':
58
+ case 'S':
59
+ case 'K':
60
+ case 'I':
61
+ // Inalcanzable por las guardas previas; reproducimos K-rule
62
+ // por defensa para no caer en undefined.
63
+ return (0, types_2.app)((0, types_2.K)(), t);
64
+ }
65
+ }
66
+ // SKI → λ-cálculo. Codifica S, K, I como sus definiciones lambda
67
+ // canónicas y deja las variables libres como variables. Útil para
68
+ // round-trip: el resultado, normalizado en λ, debe ser
69
+ // alpha-equivalente al término original aplicado a los mismos
70
+ // argumentos (la equivalencia es semántica, no sintáctica).
71
+ function toLambda(c) {
72
+ switch (c.kind) {
73
+ case 'I':
74
+ // I = λx.x
75
+ return (0, types_1.lam)('x', (0, types_1.v)('x'));
76
+ case 'K':
77
+ // K = λx.λy.x
78
+ return (0, types_1.lam)('x', (0, types_1.lam)('y', (0, types_1.v)('x')));
79
+ case 'S':
80
+ // S = λx.λy.λz. x z (y z)
81
+ return (0, types_1.lam)('x', (0, types_1.lam)('y', (0, types_1.lam)('z', (0, types_1.apN)((0, types_1.v)('x'), (0, types_1.v)('z'), (0, types_1.ap)((0, types_1.v)('y'), (0, types_1.v)('z'))))));
82
+ case 'var':
83
+ return (0, types_1.v)(c.name);
84
+ case 'app':
85
+ return (0, types_1.ap)(toLambda(c.fn), toLambda(c.arg));
86
+ }
87
+ }
88
+ //# sourceMappingURL=abstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../src/combinators-ski/abstract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { CTerm } from './types';
2
+ export { S, K, I, cvar, app, ctermEq, freeVars, termToString } from './types';
3
+ export { reduceStep, normalize, isNormalForm } from './reduce';
4
+ export type { NormalizeResult } from './reduce';
5
+ export { abstractFromLambda, toLambda } from './abstract';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/combinators-ski/index.ts"],"names":[],"mappings":"AAWA,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // SKI combinatory logic — Punto de entrada público
4
+ // ============================================================
5
+ //
6
+ // API:
7
+ // - Tipos: CTerm
8
+ // - Constructores: S(), K(), I(), cvar, app
9
+ // - Estructura: ctermEq, freeVars, termToString
10
+ // - Reducción: reduceStep, normalize, isNormalForm, NormalizeResult
11
+ // - Bracket abstraction: abstractFromLambda, toLambda
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.toLambda = exports.abstractFromLambda = exports.isNormalForm = exports.normalize = exports.reduceStep = exports.termToString = exports.freeVars = exports.ctermEq = exports.app = exports.cvar = exports.I = exports.K = exports.S = void 0;
14
+ var types_1 = require("./types");
15
+ Object.defineProperty(exports, "S", { enumerable: true, get: function () { return types_1.S; } });
16
+ Object.defineProperty(exports, "K", { enumerable: true, get: function () { return types_1.K; } });
17
+ Object.defineProperty(exports, "I", { enumerable: true, get: function () { return types_1.I; } });
18
+ Object.defineProperty(exports, "cvar", { enumerable: true, get: function () { return types_1.cvar; } });
19
+ Object.defineProperty(exports, "app", { enumerable: true, get: function () { return types_1.app; } });
20
+ Object.defineProperty(exports, "ctermEq", { enumerable: true, get: function () { return types_1.ctermEq; } });
21
+ Object.defineProperty(exports, "freeVars", { enumerable: true, get: function () { return types_1.freeVars; } });
22
+ Object.defineProperty(exports, "termToString", { enumerable: true, get: function () { return types_1.termToString; } });
23
+ var reduce_1 = require("./reduce");
24
+ Object.defineProperty(exports, "reduceStep", { enumerable: true, get: function () { return reduce_1.reduceStep; } });
25
+ Object.defineProperty(exports, "normalize", { enumerable: true, get: function () { return reduce_1.normalize; } });
26
+ Object.defineProperty(exports, "isNormalForm", { enumerable: true, get: function () { return reduce_1.isNormalForm; } });
27
+ var abstract_1 = require("./abstract");
28
+ Object.defineProperty(exports, "abstractFromLambda", { enumerable: true, get: function () { return abstract_1.abstractFromLambda; } });
29
+ Object.defineProperty(exports, "toLambda", { enumerable: true, get: function () { return abstract_1.toLambda; } });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/combinators-ski/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,mDAAmD;AACnD,+DAA+D;AAC/D,EAAE;AACF,OAAO;AACP,mBAAmB;AACnB,8CAA8C;AAC9C,kDAAkD;AAClD,sEAAsE;AACtE,wDAAwD;;;AAGxD,iCAA8E;AAArE,0FAAA,CAAC,OAAA;AAAE,0FAAA,CAAC,OAAA;AAAE,0FAAA,CAAC,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,4FAAA,GAAG,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,qGAAA,YAAY,OAAA;AAE5D,mCAA+D;AAAtD,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,sGAAA,YAAY,OAAA;AAG5C,uCAA0D;AAAjD,8GAAA,kBAAkB,OAAA;AAAE,oGAAA,QAAQ,OAAA"}
@@ -0,0 +1,10 @@
1
+ import type { CTerm } from './types';
2
+ export declare function reduceStep(t: CTerm): CTerm | null;
3
+ export interface NormalizeResult {
4
+ result: CTerm;
5
+ steps: number;
6
+ terminated: boolean;
7
+ }
8
+ export declare function normalize(t: CTerm, maxSteps?: number): NormalizeResult;
9
+ export declare function isNormalForm(t: CTerm): boolean;
10
+ //# sourceMappingURL=reduce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reduce.d.ts","sourceRoot":"","sources":["../../src/combinators-ski/reduce.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,CAgBjD;AA2DD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,SAAO,GAAG,eAAe,CASpE;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAE9C"}