@stevenvo780/st-lang 4.5.1 → 4.6.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 (465) hide show
  1. package/dist/bdd/index.d.ts +4 -0
  2. package/dist/bdd/index.d.ts.map +1 -0
  3. package/dist/bdd/index.js +29 -0
  4. package/dist/bdd/index.js.map +1 -0
  5. package/dist/bdd/manager.d.ts +122 -0
  6. package/dist/bdd/manager.d.ts.map +1 -0
  7. package/dist/bdd/manager.js +524 -0
  8. package/dist/bdd/manager.js.map +1 -0
  9. package/dist/bdd/types.d.ts +20 -0
  10. package/dist/bdd/types.d.ts.map +1 -0
  11. package/dist/bdd/types.js +28 -0
  12. package/dist/bdd/types.js.map +1 -0
  13. package/dist/categorical/fin-set.d.ts +39 -0
  14. package/dist/categorical/fin-set.d.ts.map +1 -0
  15. package/dist/categorical/fin-set.js +217 -0
  16. package/dist/categorical/fin-set.js.map +1 -0
  17. package/dist/categorical/free.d.ts +23 -0
  18. package/dist/categorical/free.d.ts.map +1 -0
  19. package/dist/categorical/free.js +168 -0
  20. package/dist/categorical/free.js.map +1 -0
  21. package/dist/categorical/functor.d.ts +40 -0
  22. package/dist/categorical/functor.d.ts.map +1 -0
  23. package/dist/categorical/functor.js +139 -0
  24. package/dist/categorical/functor.js.map +1 -0
  25. package/dist/categorical/index.d.ts +11 -0
  26. package/dist/categorical/index.d.ts.map +1 -0
  27. package/dist/categorical/index.js +33 -0
  28. package/dist/categorical/index.js.map +1 -0
  29. package/dist/categorical/limits.d.ts +64 -0
  30. package/dist/categorical/limits.d.ts.map +1 -0
  31. package/dist/categorical/limits.js +248 -0
  32. package/dist/categorical/limits.js.map +1 -0
  33. package/dist/categorical/monoidal.d.ts +14 -0
  34. package/dist/categorical/monoidal.d.ts.map +1 -0
  35. package/dist/categorical/monoidal.js +148 -0
  36. package/dist/categorical/monoidal.js.map +1 -0
  37. package/dist/categorical/poset.d.ts +14 -0
  38. package/dist/categorical/poset.d.ts.map +1 -0
  39. package/dist/categorical/poset.js +115 -0
  40. package/dist/categorical/poset.js.map +1 -0
  41. package/dist/categorical/types.d.ts +111 -0
  42. package/dist/categorical/types.d.ts.map +1 -0
  43. package/dist/categorical/types.js +15 -0
  44. package/dist/categorical/types.js.map +1 -0
  45. package/dist/csp-hoare/analysis.d.ts +51 -0
  46. package/dist/csp-hoare/analysis.d.ts.map +1 -0
  47. package/dist/csp-hoare/analysis.js +317 -0
  48. package/dist/csp-hoare/analysis.js.map +1 -0
  49. package/dist/csp-hoare/examples.d.ts +33 -0
  50. package/dist/csp-hoare/examples.d.ts.map +1 -0
  51. package/dist/csp-hoare/examples.js +108 -0
  52. package/dist/csp-hoare/examples.js.map +1 -0
  53. package/dist/csp-hoare/index.d.ts +6 -0
  54. package/dist/csp-hoare/index.d.ts.map +1 -0
  55. package/dist/csp-hoare/index.js +50 -0
  56. package/dist/csp-hoare/index.js.map +1 -0
  57. package/dist/csp-hoare/semantics.d.ts +49 -0
  58. package/dist/csp-hoare/semantics.d.ts.map +1 -0
  59. package/dist/csp-hoare/semantics.js +494 -0
  60. package/dist/csp-hoare/semantics.js.map +1 -0
  61. package/dist/csp-hoare/types.d.ts +60 -0
  62. package/dist/csp-hoare/types.d.ts.map +1 -0
  63. package/dist/csp-hoare/types.js +31 -0
  64. package/dist/csp-hoare/types.js.map +1 -0
  65. package/dist/game-theory/common-games.d.ts +50 -0
  66. package/dist/game-theory/common-games.d.ts.map +1 -0
  67. package/dist/game-theory/common-games.js +112 -0
  68. package/dist/game-theory/common-games.js.map +1 -0
  69. package/dist/game-theory/dominance.d.ts +26 -0
  70. package/dist/game-theory/dominance.d.ts.map +1 -0
  71. package/dist/game-theory/dominance.js +203 -0
  72. package/dist/game-theory/dominance.js.map +1 -0
  73. package/dist/game-theory/index.d.ts +8 -0
  74. package/dist/game-theory/index.d.ts.map +1 -0
  75. package/dist/game-theory/index.js +47 -0
  76. package/dist/game-theory/index.js.map +1 -0
  77. package/dist/game-theory/lemke-howson.d.ts +3 -0
  78. package/dist/game-theory/lemke-howson.d.ts.map +1 -0
  79. package/dist/game-theory/lemke-howson.js +269 -0
  80. package/dist/game-theory/lemke-howson.js.map +1 -0
  81. package/dist/game-theory/linalg.d.ts +7 -0
  82. package/dist/game-theory/linalg.d.ts.map +1 -0
  83. package/dist/game-theory/linalg.js +69 -0
  84. package/dist/game-theory/linalg.js.map +1 -0
  85. package/dist/game-theory/pure-nash.d.ts +3 -0
  86. package/dist/game-theory/pure-nash.d.ts.map +1 -0
  87. package/dist/game-theory/pure-nash.js +86 -0
  88. package/dist/game-theory/pure-nash.js.map +1 -0
  89. package/dist/game-theory/support-enumeration.d.ts +3 -0
  90. package/dist/game-theory/support-enumeration.d.ts.map +1 -0
  91. package/dist/game-theory/support-enumeration.js +214 -0
  92. package/dist/game-theory/support-enumeration.js.map +1 -0
  93. package/dist/game-theory/types.d.ts +57 -0
  94. package/dist/game-theory/types.d.ts.map +1 -0
  95. package/dist/game-theory/types.js +191 -0
  96. package/dist/game-theory/types.js.map +1 -0
  97. package/dist/hindley-milner/index.d.ts +7 -0
  98. package/dist/hindley-milner/index.d.ts.map +1 -0
  99. package/dist/hindley-milner/index.js +60 -0
  100. package/dist/hindley-milner/index.js.map +1 -0
  101. package/dist/hindley-milner/infer.d.ts +26 -0
  102. package/dist/hindley-milner/infer.d.ts.map +1 -0
  103. package/dist/hindley-milner/infer.js +278 -0
  104. package/dist/hindley-milner/infer.js.map +1 -0
  105. package/dist/hindley-milner/substitution.d.ts +21 -0
  106. package/dist/hindley-milner/substitution.d.ts.map +1 -0
  107. package/dist/hindley-milner/substitution.js +215 -0
  108. package/dist/hindley-milner/substitution.js.map +1 -0
  109. package/dist/hindley-milner/types.d.ts +84 -0
  110. package/dist/hindley-milner/types.d.ts.map +1 -0
  111. package/dist/hindley-milner/types.js +166 -0
  112. package/dist/hindley-milner/types.js.map +1 -0
  113. package/dist/hott/equality.d.ts +4 -0
  114. package/dist/hott/equality.d.ts.map +1 -0
  115. package/dist/hott/equality.js +108 -0
  116. package/dist/hott/equality.js.map +1 -0
  117. package/dist/hott/index.d.ts +13 -0
  118. package/dist/hott/index.d.ts.map +1 -0
  119. package/dist/hott/index.js +77 -0
  120. package/dist/hott/index.js.map +1 -0
  121. package/dist/hott/infer.d.ts +11 -0
  122. package/dist/hott/infer.d.ts.map +1 -0
  123. package/dist/hott/infer.js +465 -0
  124. package/dist/hott/infer.js.map +1 -0
  125. package/dist/hott/normalize.d.ts +5 -0
  126. package/dist/hott/normalize.d.ts.map +1 -0
  127. package/dist/hott/normalize.js +240 -0
  128. package/dist/hott/normalize.js.map +1 -0
  129. package/dist/hott/path-algebra.d.ts +25 -0
  130. package/dist/hott/path-algebra.d.ts.map +1 -0
  131. package/dist/hott/path-algebra.js +67 -0
  132. package/dist/hott/path-algebra.js.map +1 -0
  133. package/dist/hott/substitute.d.ts +3 -0
  134. package/dist/hott/substitute.d.ts.map +1 -0
  135. package/dist/hott/substitute.js +131 -0
  136. package/dist/hott/substitute.js.map +1 -0
  137. package/dist/hott/types.d.ts +126 -0
  138. package/dist/hott/types.d.ts.map +1 -0
  139. package/dist/hott/types.js +346 -0
  140. package/dist/hott/types.js.map +1 -0
  141. package/dist/index.d.ts +16 -1
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +83 -3
  144. package/dist/index.js.map +1 -1
  145. package/dist/information-theory/index.d.ts +29 -0
  146. package/dist/information-theory/index.d.ts.map +1 -0
  147. package/dist/information-theory/index.js +323 -0
  148. package/dist/information-theory/index.js.map +1 -0
  149. package/dist/lemma-synthesis/index.d.ts +124 -0
  150. package/dist/lemma-synthesis/index.d.ts.map +1 -0
  151. package/dist/lemma-synthesis/index.js +640 -0
  152. package/dist/lemma-synthesis/index.js.map +1 -0
  153. package/dist/namespaces/logic.d.ts +42 -0
  154. package/dist/namespaces/logic.d.ts.map +1 -0
  155. package/dist/namespaces/logic.js +112 -0
  156. package/dist/namespaces/logic.js.map +1 -0
  157. package/dist/namespaces/proof-systems.d.ts +18 -0
  158. package/dist/namespaces/proof-systems.d.ts.map +1 -0
  159. package/dist/namespaces/proof-systems.js +59 -0
  160. package/dist/namespaces/proof-systems.js.map +1 -0
  161. package/dist/namespaces/reasoning.d.ts +26 -0
  162. package/dist/namespaces/reasoning.d.ts.map +1 -0
  163. package/dist/namespaces/reasoning.js +72 -0
  164. package/dist/namespaces/reasoning.js.map +1 -0
  165. package/dist/namespaces/semantics.d.ts +21 -0
  166. package/dist/namespaces/semantics.d.ts.map +1 -0
  167. package/dist/namespaces/semantics.js +64 -0
  168. package/dist/namespaces/semantics.js.map +1 -0
  169. package/dist/namespaces/solvers.d.ts +22 -0
  170. package/dist/namespaces/solvers.d.ts.map +1 -0
  171. package/dist/namespaces/solvers.js +66 -0
  172. package/dist/namespaces/solvers.js.map +1 -0
  173. package/dist/namespaces/type-theory.d.ts +22 -0
  174. package/dist/namespaces/type-theory.d.ts.map +1 -0
  175. package/dist/namespaces/type-theory.js +65 -0
  176. package/dist/namespaces/type-theory.js.map +1 -0
  177. package/dist/optimization/branch-and-bound.d.ts +11 -0
  178. package/dist/optimization/branch-and-bound.d.ts.map +1 -0
  179. package/dist/optimization/branch-and-bound.js +311 -0
  180. package/dist/optimization/branch-and-bound.js.map +1 -0
  181. package/dist/optimization/index.d.ts +5 -0
  182. package/dist/optimization/index.d.ts.map +1 -0
  183. package/dist/optimization/index.js +20 -0
  184. package/dist/optimization/index.js.map +1 -0
  185. package/dist/optimization/simplex.d.ts +8 -0
  186. package/dist/optimization/simplex.d.ts.map +1 -0
  187. package/dist/optimization/simplex.js +408 -0
  188. package/dist/optimization/simplex.js.map +1 -0
  189. package/dist/optimization/standard-form.d.ts +11 -0
  190. package/dist/optimization/standard-form.d.ts.map +1 -0
  191. package/dist/optimization/standard-form.js +112 -0
  192. package/dist/optimization/standard-form.js.map +1 -0
  193. package/dist/optimization/types.d.ts +44 -0
  194. package/dist/optimization/types.d.ts.map +1 -0
  195. package/dist/optimization/types.js +15 -0
  196. package/dist/optimization/types.js.map +1 -0
  197. package/dist/profiles/hol/connectives.d.ts +46 -0
  198. package/dist/profiles/hol/connectives.d.ts.map +1 -0
  199. package/dist/profiles/hol/connectives.js +104 -0
  200. package/dist/profiles/hol/connectives.js.map +1 -0
  201. package/dist/profiles/hol/index.d.ts +7 -0
  202. package/dist/profiles/hol/index.d.ts.map +1 -0
  203. package/dist/profiles/hol/index.js +77 -0
  204. package/dist/profiles/hol/index.js.map +1 -0
  205. package/dist/profiles/hol/rules.d.ts +31 -0
  206. package/dist/profiles/hol/rules.d.ts.map +1 -0
  207. package/dist/profiles/hol/rules.js +258 -0
  208. package/dist/profiles/hol/rules.js.map +1 -0
  209. package/dist/profiles/hol/term.d.ts +52 -0
  210. package/dist/profiles/hol/term.d.ts.map +1 -0
  211. package/dist/profiles/hol/term.js +345 -0
  212. package/dist/profiles/hol/term.js.map +1 -0
  213. package/dist/profiles/hol/type-system.d.ts +38 -0
  214. package/dist/profiles/hol/type-system.d.ts.map +1 -0
  215. package/dist/profiles/hol/type-system.js +133 -0
  216. package/dist/profiles/hol/type-system.js.map +1 -0
  217. package/dist/profiles/hol/types.d.ts +59 -0
  218. package/dist/profiles/hol/types.d.ts.map +1 -0
  219. package/dist/profiles/hol/types.js +26 -0
  220. package/dist/profiles/hol/types.js.map +1 -0
  221. package/dist/smt-lib/ast.d.ts +138 -0
  222. package/dist/smt-lib/ast.d.ts.map +1 -0
  223. package/dist/smt-lib/ast.js +73 -0
  224. package/dist/smt-lib/ast.js.map +1 -0
  225. package/dist/smt-lib/emitter.d.ts +12 -0
  226. package/dist/smt-lib/emitter.d.ts.map +1 -0
  227. package/dist/smt-lib/emitter.js +174 -0
  228. package/dist/smt-lib/emitter.js.map +1 -0
  229. package/dist/smt-lib/index.d.ts +6 -0
  230. package/dist/smt-lib/index.d.ts.map +1 -0
  231. package/dist/smt-lib/index.js +31 -0
  232. package/dist/smt-lib/index.js.map +1 -0
  233. package/dist/smt-lib/parser.d.ts +13 -0
  234. package/dist/smt-lib/parser.d.ts.map +1 -0
  235. package/dist/smt-lib/parser.js +614 -0
  236. package/dist/smt-lib/parser.js.map +1 -0
  237. package/dist/smt-lib/tokenizer.d.ts +16 -0
  238. package/dist/smt-lib/tokenizer.d.ts.map +1 -0
  239. package/dist/smt-lib/tokenizer.js +234 -0
  240. package/dist/smt-lib/tokenizer.js.map +1 -0
  241. package/dist/tactic-dsl/combinators.d.ts +6 -0
  242. package/dist/tactic-dsl/combinators.d.ts.map +1 -0
  243. package/dist/tactic-dsl/combinators.js +98 -0
  244. package/dist/tactic-dsl/combinators.js.map +1 -0
  245. package/dist/tactic-dsl/index.d.ts +39 -0
  246. package/dist/tactic-dsl/index.d.ts.map +1 -0
  247. package/dist/tactic-dsl/index.js +162 -0
  248. package/dist/tactic-dsl/index.js.map +1 -0
  249. package/dist/tactic-dsl/tactics.d.ts +21 -0
  250. package/dist/tactic-dsl/tactics.d.ts.map +1 -0
  251. package/dist/tactic-dsl/tactics.js +536 -0
  252. package/dist/tactic-dsl/tactics.js.map +1 -0
  253. package/dist/tactic-dsl/types.d.ts +54 -0
  254. package/dist/tactic-dsl/types.d.ts.map +1 -0
  255. package/dist/tactic-dsl/types.js +226 -0
  256. package/dist/tactic-dsl/types.js.map +1 -0
  257. package/dist/tests/api/namespaces.test.d.ts +9 -0
  258. package/dist/tests/api/namespaces.test.d.ts.map +1 -0
  259. package/dist/tests/api/namespaces.test.js +218 -0
  260. package/dist/tests/api/namespaces.test.js.map +1 -0
  261. package/dist/tests/bdd/manager.test.d.ts +2 -0
  262. package/dist/tests/bdd/manager.test.d.ts.map +1 -0
  263. package/dist/tests/bdd/manager.test.js +472 -0
  264. package/dist/tests/bdd/manager.test.js.map +1 -0
  265. package/dist/tests/categorical/categorical.test.d.ts +2 -0
  266. package/dist/tests/categorical/categorical.test.d.ts.map +1 -0
  267. package/dist/tests/categorical/categorical.test.js +300 -0
  268. package/dist/tests/categorical/categorical.test.js.map +1 -0
  269. package/dist/tests/csp-hoare/csp-hoare.test.d.ts +2 -0
  270. package/dist/tests/csp-hoare/csp-hoare.test.d.ts.map +1 -0
  271. package/dist/tests/csp-hoare/csp-hoare.test.js +313 -0
  272. package/dist/tests/csp-hoare/csp-hoare.test.js.map +1 -0
  273. package/dist/tests/game-theory/game-theory.test.d.ts +2 -0
  274. package/dist/tests/game-theory/game-theory.test.d.ts.map +1 -0
  275. package/dist/tests/game-theory/game-theory.test.js +252 -0
  276. package/dist/tests/game-theory/game-theory.test.js.map +1 -0
  277. package/dist/tests/hindley-milner/hindley-milner.test.d.ts +2 -0
  278. package/dist/tests/hindley-milner/hindley-milner.test.d.ts.map +1 -0
  279. package/dist/tests/hindley-milner/hindley-milner.test.js +327 -0
  280. package/dist/tests/hindley-milner/hindley-milner.test.js.map +1 -0
  281. package/dist/tests/hol/hol.test.d.ts +2 -0
  282. package/dist/tests/hol/hol.test.d.ts.map +1 -0
  283. package/dist/tests/hol/hol.test.js +340 -0
  284. package/dist/tests/hol/hol.test.js.map +1 -0
  285. package/dist/tests/hott/hott.test.d.ts +2 -0
  286. package/dist/tests/hott/hott.test.d.ts.map +1 -0
  287. package/dist/tests/hott/hott.test.js +271 -0
  288. package/dist/tests/hott/hott.test.js.map +1 -0
  289. package/dist/tests/information-theory/information-theory.test.d.ts +2 -0
  290. package/dist/tests/information-theory/information-theory.test.d.ts.map +1 -0
  291. package/dist/tests/information-theory/information-theory.test.js +291 -0
  292. package/dist/tests/information-theory/information-theory.test.js.map +1 -0
  293. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts +2 -0
  294. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts.map +1 -0
  295. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js +460 -0
  296. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js.map +1 -0
  297. package/dist/tests/optimization/ilp.test.d.ts +2 -0
  298. package/dist/tests/optimization/ilp.test.d.ts.map +1 -0
  299. package/dist/tests/optimization/ilp.test.js +204 -0
  300. package/dist/tests/optimization/ilp.test.js.map +1 -0
  301. package/dist/tests/optimization/lp.test.d.ts +2 -0
  302. package/dist/tests/optimization/lp.test.d.ts.map +1 -0
  303. package/dist/tests/optimization/lp.test.js +224 -0
  304. package/dist/tests/optimization/lp.test.js.map +1 -0
  305. package/dist/tests/properties/agm.property.test.d.ts +2 -0
  306. package/dist/tests/properties/agm.property.test.d.ts.map +1 -0
  307. package/dist/tests/properties/agm.property.test.js +75 -0
  308. package/dist/tests/properties/agm.property.test.js.map +1 -0
  309. package/dist/tests/properties/anti-unification.property.test.d.ts +2 -0
  310. package/dist/tests/properties/anti-unification.property.test.d.ts.map +1 -0
  311. package/dist/tests/properties/anti-unification.property.test.js +43 -0
  312. package/dist/tests/properties/anti-unification.property.test.js.map +1 -0
  313. package/dist/tests/properties/argumentation.property.test.d.ts +2 -0
  314. package/dist/tests/properties/argumentation.property.test.d.ts.map +1 -0
  315. package/dist/tests/properties/argumentation.property.test.js +51 -0
  316. package/dist/tests/properties/argumentation.property.test.js.map +1 -0
  317. package/dist/tests/properties/bayesian.property.test.d.ts +2 -0
  318. package/dist/tests/properties/bayesian.property.test.d.ts.map +1 -0
  319. package/dist/tests/properties/bayesian.property.test.js +32 -0
  320. package/dist/tests/properties/bayesian.property.test.js.map +1 -0
  321. package/dist/tests/properties/bisimulation.property.test.d.ts +2 -0
  322. package/dist/tests/properties/bisimulation.property.test.d.ts.map +1 -0
  323. package/dist/tests/properties/bisimulation.property.test.js +50 -0
  324. package/dist/tests/properties/bisimulation.property.test.js.map +1 -0
  325. package/dist/tests/properties/cdcl.property.test.d.ts +2 -0
  326. package/dist/tests/properties/cdcl.property.test.d.ts.map +1 -0
  327. package/dist/tests/properties/cdcl.property.test.js +70 -0
  328. package/dist/tests/properties/cdcl.property.test.js.map +1 -0
  329. package/dist/tests/properties/coinduction.property.test.d.ts +2 -0
  330. package/dist/tests/properties/coinduction.property.test.d.ts.map +1 -0
  331. package/dist/tests/properties/coinduction.property.test.js +34 -0
  332. package/dist/tests/properties/coinduction.property.test.js.map +1 -0
  333. package/dist/tests/properties/constructive-reals.property.test.d.ts +2 -0
  334. package/dist/tests/properties/constructive-reals.property.test.d.ts.map +1 -0
  335. package/dist/tests/properties/constructive-reals.property.test.js +59 -0
  336. package/dist/tests/properties/constructive-reals.property.test.js.map +1 -0
  337. package/dist/tests/properties/csp.property.test.d.ts +2 -0
  338. package/dist/tests/properties/csp.property.test.d.ts.map +1 -0
  339. package/dist/tests/properties/csp.property.test.js +58 -0
  340. package/dist/tests/properties/csp.property.test.js.map +1 -0
  341. package/dist/tests/properties/generators.d.ts +78 -0
  342. package/dist/tests/properties/generators.d.ts.map +1 -0
  343. package/dist/tests/properties/generators.js +348 -0
  344. package/dist/tests/properties/generators.js.map +1 -0
  345. package/dist/tests/properties/ho-unify.property.test.d.ts +2 -0
  346. package/dist/tests/properties/ho-unify.property.test.d.ts.map +1 -0
  347. package/dist/tests/properties/ho-unify.property.test.js +46 -0
  348. package/dist/tests/properties/ho-unify.property.test.js.map +1 -0
  349. package/dist/tests/properties/hyperreal.property.test.d.ts +2 -0
  350. package/dist/tests/properties/hyperreal.property.test.d.ts.map +1 -0
  351. package/dist/tests/properties/hyperreal.property.test.js +33 -0
  352. package/dist/tests/properties/hyperreal.property.test.js.map +1 -0
  353. package/dist/tests/properties/intuit-nj.property.test.d.ts +2 -0
  354. package/dist/tests/properties/intuit-nj.property.test.d.ts.map +1 -0
  355. package/dist/tests/properties/intuit-nj.property.test.js +57 -0
  356. package/dist/tests/properties/intuit-nj.property.test.js.map +1 -0
  357. package/dist/tests/properties/lambda-calc.property.test.d.ts +2 -0
  358. package/dist/tests/properties/lambda-calc.property.test.d.ts.map +1 -0
  359. package/dist/tests/properties/lambda-calc.property.test.js +35 -0
  360. package/dist/tests/properties/lambda-calc.property.test.js.map +1 -0
  361. package/dist/tests/properties/mln.property.test.d.ts +2 -0
  362. package/dist/tests/properties/mln.property.test.d.ts.map +1 -0
  363. package/dist/tests/properties/mln.property.test.js +41 -0
  364. package/dist/tests/properties/mln.property.test.js.map +1 -0
  365. package/dist/tests/properties/mltt.property.test.d.ts +2 -0
  366. package/dist/tests/properties/mltt.property.test.d.ts.map +1 -0
  367. package/dist/tests/properties/mltt.property.test.js +33 -0
  368. package/dist/tests/properties/mltt.property.test.js.map +1 -0
  369. package/dist/tests/properties/nbe.property.test.d.ts +2 -0
  370. package/dist/tests/properties/nbe.property.test.d.ts.map +1 -0
  371. package/dist/tests/properties/nbe.property.test.js +44 -0
  372. package/dist/tests/properties/nbe.property.test.js.map +1 -0
  373. package/dist/tests/properties/planning.property.test.d.ts +2 -0
  374. package/dist/tests/properties/planning.property.test.d.ts.map +1 -0
  375. package/dist/tests/properties/planning.property.test.js +51 -0
  376. package/dist/tests/properties/planning.property.test.js.map +1 -0
  377. package/dist/tests/properties/profile-bridge.property.test.d.ts +2 -0
  378. package/dist/tests/properties/profile-bridge.property.test.d.ts.map +1 -0
  379. package/dist/tests/properties/profile-bridge.property.test.js +71 -0
  380. package/dist/tests/properties/profile-bridge.property.test.js.map +1 -0
  381. package/dist/tests/properties/refinement-types.property.test.d.ts +2 -0
  382. package/dist/tests/properties/refinement-types.property.test.d.ts.map +1 -0
  383. package/dist/tests/properties/refinement-types.property.test.js +37 -0
  384. package/dist/tests/properties/refinement-types.property.test.js.map +1 -0
  385. package/dist/tests/properties/sequent-g3.property.test.d.ts +2 -0
  386. package/dist/tests/properties/sequent-g3.property.test.d.ts.map +1 -0
  387. package/dist/tests/properties/sequent-g3.property.test.js +34 -0
  388. package/dist/tests/properties/sequent-g3.property.test.js.map +1 -0
  389. package/dist/tests/properties/symbolic-diff.property.test.d.ts +2 -0
  390. package/dist/tests/properties/symbolic-diff.property.test.d.ts.map +1 -0
  391. package/dist/tests/properties/symbolic-diff.property.test.js +49 -0
  392. package/dist/tests/properties/symbolic-diff.property.test.js.map +1 -0
  393. package/dist/tests/properties/system-f.property.test.d.ts +2 -0
  394. package/dist/tests/properties/system-f.property.test.d.ts.map +1 -0
  395. package/dist/tests/properties/system-f.property.test.js +37 -0
  396. package/dist/tests/properties/system-f.property.test.js.map +1 -0
  397. package/dist/tests/properties/theorem-cache.property.test.d.ts +2 -0
  398. package/dist/tests/properties/theorem-cache.property.test.d.ts.map +1 -0
  399. package/dist/tests/properties/theorem-cache.property.test.js +38 -0
  400. package/dist/tests/properties/theorem-cache.property.test.js.map +1 -0
  401. package/dist/tests/properties/trs.property.test.d.ts +2 -0
  402. package/dist/tests/properties/trs.property.test.d.ts.map +1 -0
  403. package/dist/tests/properties/trs.property.test.js +34 -0
  404. package/dist/tests/properties/trs.property.test.js.map +1 -0
  405. package/dist/tests/properties/unification.property.test.d.ts +2 -0
  406. package/dist/tests/properties/unification.property.test.d.ts.map +1 -0
  407. package/dist/tests/properties/unification.property.test.js +42 -0
  408. package/dist/tests/properties/unification.property.test.js.map +1 -0
  409. package/dist/tests/smt-lib/emitter.test.d.ts +2 -0
  410. package/dist/tests/smt-lib/emitter.test.d.ts.map +1 -0
  411. package/dist/tests/smt-lib/emitter.test.js +155 -0
  412. package/dist/tests/smt-lib/emitter.test.js.map +1 -0
  413. package/dist/tests/smt-lib/parser.test.d.ts +2 -0
  414. package/dist/tests/smt-lib/parser.test.d.ts.map +1 -0
  415. package/dist/tests/smt-lib/parser.test.js +164 -0
  416. package/dist/tests/smt-lib/parser.test.js.map +1 -0
  417. package/dist/tests/smt-lib/tokenizer.test.d.ts +2 -0
  418. package/dist/tests/smt-lib/tokenizer.test.d.ts.map +1 -0
  419. package/dist/tests/smt-lib/tokenizer.test.js +59 -0
  420. package/dist/tests/smt-lib/tokenizer.test.js.map +1 -0
  421. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts +2 -0
  422. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts.map +1 -0
  423. package/dist/tests/tactic-dsl/tactic-dsl.test.js +259 -0
  424. package/dist/tests/tactic-dsl/tactic-dsl.test.js.map +1 -0
  425. package/dist/tests/tptp/bridge.test.d.ts +2 -0
  426. package/dist/tests/tptp/bridge.test.d.ts.map +1 -0
  427. package/dist/tests/tptp/bridge.test.js +154 -0
  428. package/dist/tests/tptp/bridge.test.js.map +1 -0
  429. package/dist/tests/tptp/emitter.test.d.ts +2 -0
  430. package/dist/tests/tptp/emitter.test.d.ts.map +1 -0
  431. package/dist/tests/tptp/emitter.test.js +128 -0
  432. package/dist/tests/tptp/emitter.test.js.map +1 -0
  433. package/dist/tests/tptp/parser.test.d.ts +2 -0
  434. package/dist/tests/tptp/parser.test.d.ts.map +1 -0
  435. package/dist/tests/tptp/parser.test.js +192 -0
  436. package/dist/tests/tptp/parser.test.js.map +1 -0
  437. package/dist/tests/tptp/tokenizer.test.d.ts +2 -0
  438. package/dist/tests/tptp/tokenizer.test.d.ts.map +1 -0
  439. package/dist/tests/tptp/tokenizer.test.js +60 -0
  440. package/dist/tests/tptp/tokenizer.test.js.map +1 -0
  441. package/dist/tptp/ast.d.ts +73 -0
  442. package/dist/tptp/ast.d.ts.map +1 -0
  443. package/dist/tptp/ast.js +35 -0
  444. package/dist/tptp/ast.js.map +1 -0
  445. package/dist/tptp/bridge.d.ts +14 -0
  446. package/dist/tptp/bridge.d.ts.map +1 -0
  447. package/dist/tptp/bridge.js +146 -0
  448. package/dist/tptp/bridge.js.map +1 -0
  449. package/dist/tptp/emitter.d.ts +5 -0
  450. package/dist/tptp/emitter.d.ts.map +1 -0
  451. package/dist/tptp/emitter.js +103 -0
  452. package/dist/tptp/emitter.js.map +1 -0
  453. package/dist/tptp/index.d.ts +7 -0
  454. package/dist/tptp/index.d.ts.map +1 -0
  455. package/dist/tptp/index.js +31 -0
  456. package/dist/tptp/index.js.map +1 -0
  457. package/dist/tptp/parser.d.ts +23 -0
  458. package/dist/tptp/parser.d.ts.map +1 -0
  459. package/dist/tptp/parser.js +440 -0
  460. package/dist/tptp/parser.js.map +1 -0
  461. package/dist/tptp/tokenizer.d.ts +14 -0
  462. package/dist/tptp/tokenizer.d.ts.map +1 -0
  463. package/dist/tptp/tokenizer.js +264 -0
  464. package/dist/tptp/tokenizer.js.map +1 -0
  465. package/package.json +5 -1
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CSP Hoare — Trazas, failures, deadlock, livelock, refinement
4
+ // ============================================================
5
+ // Sobre la LTS definida en `semantics.ts` calculamos las semánticas
6
+ // observacionales clásicas de CSP:
7
+ //
8
+ // • traces(P) — conjunto de prefijos de eventos visibles posibles.
9
+ // • failures(P) — pares (traza, refusal). El conjunto de refusal es el
10
+ // conjunto de eventos que el proceso PUEDE rehusar tras
11
+ // esa traza, bajo ALGUNA resolución del no-determinismo.
12
+ //
13
+ // Refinement (notación CSP estándar):
14
+ //
15
+ // P ⊑_T Q ⇔ traces(Q) ⊆ traces(P)
16
+ // P ⊑_F Q ⇔ traces(Q) ⊆ traces(P) ∧ failures(Q) ⊆ failures(P)
17
+ //
18
+ // Intuición: Q refina a P sii Q es "más predecible" / "más determinista".
19
+ // STOP es el refinement máximo: refina todo lo que tenga traza vacía.
20
+ // ============================================================
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.traces = traces;
23
+ exports.failures = failures;
24
+ exports.isDeadlocked = isDeadlocked;
25
+ exports.isLiveLocked = isLiveLocked;
26
+ exports.refinesTraces = refinesTraces;
27
+ exports.refinesFailures = refinesFailures;
28
+ const semantics_1 = require("./semantics");
29
+ // ── Trazas ──────────────────────────────────────────────────
30
+ /**
31
+ * Enumera todas las trazas de `p` hasta longitud `maxLength` (inclusive).
32
+ * Incluye la traza vacía (siempre presente) y los prefijos intermedios.
33
+ *
34
+ * Las trazas se devuelven sin duplicados, ordenadas por longitud
35
+ * ascendente, y como copias de arrays inmutables (las modificaciones no
36
+ * afectan el motor).
37
+ */
38
+ function traces(p, maxLength = 6) {
39
+ const seen = new Set();
40
+ const out = [];
41
+ const visit = (q, prefix) => {
42
+ const key = prefix.join('');
43
+ if (seen.has(key))
44
+ return;
45
+ seen.add(key);
46
+ out.push([...prefix]);
47
+ if (prefix.length >= maxLength)
48
+ return;
49
+ // Para enumerar trazas hay que considerar TODAS las resoluciones
50
+ // internas: cada rama puede ofrecer eventos distintos.
51
+ const resolutions = (0, semantics_1.internalResolutions)(q);
52
+ for (const r of resolutions) {
53
+ const initials = (0, semantics_1.nextEvents)(r);
54
+ for (const e of initials) {
55
+ const next = (0, semantics_1.step)(r, e);
56
+ if (next !== null) {
57
+ visit(next, [...prefix, e]);
58
+ }
59
+ }
60
+ }
61
+ };
62
+ visit(p, []);
63
+ // Orden estable: por longitud, luego lex.
64
+ out.sort((a, b) => {
65
+ if (a.length !== b.length)
66
+ return a.length - b.length;
67
+ for (let i = 0; i < a.length; i++) {
68
+ const av = a[i] ?? '';
69
+ const bv = b[i] ?? '';
70
+ if (av !== bv)
71
+ return av < bv ? -1 : 1;
72
+ }
73
+ return 0;
74
+ });
75
+ return out;
76
+ }
77
+ // ── Failures ────────────────────────────────────────────────
78
+ /**
79
+ * Para una RESOLUCIÓN interna estable `q`, el conjunto de refusal máximo
80
+ * sobre un alfabeto candidato `Σ` es: todo evento de `Σ` que `q` no
81
+ * ofrezca como inicial. (Definición estándar: R es refusal sii q no
82
+ * tiene transición para ningún a ∈ R.)
83
+ *
84
+ * `candidates` debe ser el conjunto de eventos relevantes (alfabeto de
85
+ * comparación) — típicamente la unión sintáctica de los alfabetos de los
86
+ * procesos involucrados en un test de refinement.
87
+ */
88
+ function refusalsOf(q, candidates) {
89
+ const offered = (0, semantics_1.nextEvents)(q);
90
+ const r = new Set();
91
+ for (const e of candidates) {
92
+ if (!offered.has(e))
93
+ r.add(e);
94
+ }
95
+ return r;
96
+ }
97
+ /**
98
+ * Calcula failures hasta `maxLength`. Para cada traza alcanzable, registra
99
+ * los refusal sets posibles iterando todas las resoluciones internas del
100
+ * estado tras la traza.
101
+ *
102
+ * Devuelve una lista (no un set) porque los refusal sets son objetos —
103
+ * agrupamos por igualdad estructural y deduplicamos manualmente.
104
+ */
105
+ function failures(p, maxLength = 4) {
106
+ const alphaPrime = collectVisibleEvents(p);
107
+ const reachable = [];
108
+ const seenStates = new Set();
109
+ const enqueue = (state, trace) => {
110
+ const key = trace.join('');
111
+ if (seenStates.has(key))
112
+ return;
113
+ seenStates.add(key);
114
+ reachable.push({ state, trace });
115
+ if (trace.length >= maxLength)
116
+ return;
117
+ const resolutions = (0, semantics_1.internalResolutions)(state);
118
+ for (const r of resolutions) {
119
+ const initials = (0, semantics_1.nextEvents)(r);
120
+ for (const e of initials) {
121
+ const next = (0, semantics_1.step)(r, e);
122
+ if (next !== null)
123
+ enqueue(next, [...trace, e]);
124
+ }
125
+ }
126
+ };
127
+ enqueue(p, []);
128
+ const out = [];
129
+ const seenPairs = new Set();
130
+ for (const { state, trace } of reachable) {
131
+ const resolutions = (0, semantics_1.internalResolutions)(state);
132
+ for (const r of resolutions) {
133
+ const ref = refusalsOf(r, alphaPrime);
134
+ const k = trace.join('') + '|' + [...ref].sort().join(',');
135
+ if (seenPairs.has(k))
136
+ continue;
137
+ seenPairs.add(k);
138
+ out.push({ trace: [...trace], refusal: ref });
139
+ }
140
+ }
141
+ return out;
142
+ }
143
+ /** Alfabeto visible relevante (incluye tick si aparece). */
144
+ function collectVisibleEvents(p) {
145
+ // Reaprovechamos `traces` superficialmente: alcanzamos hasta profundidad
146
+ // moderada para acumular eventos efectivamente observables.
147
+ const out = new Set();
148
+ const visit = (q, depth) => {
149
+ if (depth > 8)
150
+ return;
151
+ for (const r of (0, semantics_1.internalResolutions)(q)) {
152
+ const initials = (0, semantics_1.nextEvents)(r);
153
+ for (const e of initials) {
154
+ out.add(e);
155
+ const next = (0, semantics_1.step)(r, e);
156
+ if (next !== null)
157
+ visit(next, depth + 1);
158
+ }
159
+ }
160
+ };
161
+ visit(p, 0);
162
+ return out;
163
+ }
164
+ // ── Deadlock / livelock ─────────────────────────────────────
165
+ /**
166
+ * Hay deadlock si el proceso no ofrece NINGÚN evento (ni siquiera ✓) en
167
+ * ALGUNA resolución interna alcanzable desde el estado inicial.
168
+ *
169
+ * En `STOP` el chequeo es trivial: `nextEvents(STOP) = ∅`.
170
+ */
171
+ function isDeadlocked(p) {
172
+ for (const r of (0, semantics_1.internalResolutions)(p)) {
173
+ if ((0, semantics_1.nextEvents)(r).size === 0)
174
+ return true;
175
+ }
176
+ return false;
177
+ }
178
+ /**
179
+ * Detección heurística de livelock: el proceso recorre eventos ocultos
180
+ * (τ) indefinidamente sin avanzar visiblemente. Implementación: chequea
181
+ * si la profundidad de despliegues internos excede `depth` sin ofrecer
182
+ * eventos visibles.
183
+ *
184
+ * No es decisión: usamos límite acotado. Útil para advertir sobre `μX.X`
185
+ * o `(a → STOP) \ {a}` con loop.
186
+ */
187
+ function isLiveLocked(p, depth = 32) {
188
+ // Estrategia: si tras `depth` resoluciones internas seguidas no hay
189
+ // eventos visibles (cardinality 0) pero la recursión sigue siendo
190
+ // "productiva" internamente, lo consideramos livelock probable.
191
+ const initials = (0, semantics_1.nextEvents)(p);
192
+ if (initials.size > 0)
193
+ return false;
194
+ // Sin eventos: distinguir deadlock estructural (STOP) vs livelock real
195
+ // requiere examinar el cuerpo de la recursión.
196
+ return isLiveLockedRec(p, depth);
197
+ }
198
+ function isLiveLockedRec(p, depth) {
199
+ if (depth <= 0)
200
+ return true;
201
+ // Si hay recursión que se autoincorpora sin guarda visible, divergir.
202
+ if (p.kind === 'recursion') {
203
+ // Cuerpo sin prefix ni skip → diverge.
204
+ if (!hasVisibleGuard(p.body, p.name))
205
+ return true;
206
+ return false;
207
+ }
208
+ if (p.kind === 'hide') {
209
+ // Si todos los eventos iniciales son ocultos, podemos estar en un loop τ.
210
+ const hidden = new Set(p.events);
211
+ const inner = (0, semantics_1.nextEvents)(p.process);
212
+ if (inner.size === 0)
213
+ return false;
214
+ let allHidden = true;
215
+ for (const e of inner) {
216
+ if (!hidden.has(e)) {
217
+ allHidden = false;
218
+ break;
219
+ }
220
+ }
221
+ return allHidden;
222
+ }
223
+ return false;
224
+ }
225
+ function hasVisibleGuard(body, recName) {
226
+ switch (body.kind) {
227
+ case 'prefix':
228
+ return true; // hay un evento visible antes de recurrir.
229
+ case 'skip':
230
+ return true; // SKIP da ✓ (visible).
231
+ case 'choice':
232
+ case 'internal':
233
+ case 'parallel':
234
+ case 'interleave':
235
+ case 'sequence':
236
+ return hasVisibleGuard(body.left, recName) || hasVisibleGuard(body.right, recName);
237
+ case 'hide':
238
+ case 'rename':
239
+ return hasVisibleGuard(body.process, recName);
240
+ case 'recursion':
241
+ return hasVisibleGuard(body.body, recName);
242
+ case 'var':
243
+ return body.name !== recName; // si referencia otra var, asumimos guardada.
244
+ case 'stop':
245
+ return true; // STOP no es guarda pero tampoco divergente.
246
+ }
247
+ }
248
+ // ── Refinement ──────────────────────────────────────────────
249
+ /**
250
+ * P ⊑_T Q : Q refina a P en trazas sii cada traza de Q es traza de P.
251
+ * Equivalentemente: Q no puede hacer nada que P no pudiera observar.
252
+ */
253
+ function refinesTraces(spec, impl, maxLength = 6) {
254
+ const specTraces = encodeSet(traces(spec, maxLength));
255
+ const implTraces = traces(impl, maxLength);
256
+ for (const t of implTraces) {
257
+ if (!specTraces.has(encodeTrace(t)))
258
+ return false;
259
+ }
260
+ return true;
261
+ }
262
+ /**
263
+ * P ⊑_F Q : refinamiento en failures. Q refina a P sii:
264
+ * (a) traces(Q) ⊆ traces(P)
265
+ * (b) failures(Q) ⊆ failures(P)
266
+ *
267
+ * Una falla `(t, R)` de Q debe poder ser exhibida también por P. Esto
268
+ * capta el principio de que Q es "menos no-determinista" que P.
269
+ */
270
+ function refinesFailures(spec, impl, maxLength = 4) {
271
+ if (!refinesTraces(spec, impl, maxLength))
272
+ return false;
273
+ const specF = failures(spec, maxLength);
274
+ const implF = failures(impl, maxLength);
275
+ // Para cada failure de impl, debe existir un failure de spec con la
276
+ // misma traza y un refusal ⊇ del de impl. (Refusal sets son cerrados
277
+ // por subconjunto en CSP: si P rehúsa R, también rehúsa todo R' ⊆ R.)
278
+ const specByTrace = new Map();
279
+ for (const f of specF) {
280
+ const k = encodeTrace(f.trace);
281
+ const arr = specByTrace.get(k) ?? [];
282
+ arr.push(f.refusal);
283
+ specByTrace.set(k, arr);
284
+ }
285
+ for (const f of implF) {
286
+ const k = encodeTrace(f.trace);
287
+ const candidates = specByTrace.get(k);
288
+ if (!candidates)
289
+ return false;
290
+ let matched = false;
291
+ for (const r of candidates) {
292
+ if (subsetEq(f.refusal, r)) {
293
+ matched = true;
294
+ break;
295
+ }
296
+ }
297
+ if (!matched)
298
+ return false;
299
+ }
300
+ return true;
301
+ }
302
+ function encodeTrace(t) {
303
+ return t.join('');
304
+ }
305
+ function encodeSet(ts) {
306
+ const out = new Set();
307
+ for (const t of ts)
308
+ out.add(encodeTrace(t));
309
+ return out;
310
+ }
311
+ function subsetEq(a, b) {
312
+ for (const e of a)
313
+ if (!b.has(e))
314
+ return false;
315
+ return true;
316
+ }
317
+ //# sourceMappingURL=analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/csp-hoare/analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Process } from './types';
2
+ /**
3
+ * Máquina expendedora simple: acepta una moneda y luego ofrece al
4
+ * entorno elegir entre té y café.
5
+ *
6
+ * VM = coin → ((tea → STOP) □ (coffee → STOP))
7
+ *
8
+ * Para uso en bucle infinito, ver `vendingMachineLoop`.
9
+ */
10
+ export declare function vendingMachine(): Process;
11
+ /** Versión recursiva: tras servir, vuelve al estado inicial. */
12
+ export declare function vendingMachineLoop(): Process;
13
+ /**
14
+ * Filósofo `i` (dining philosophers a la Hoare): toma su tenedor
15
+ * izquierdo (`L`), luego el derecho (`R`), come, los suelta y repite.
16
+ *
17
+ * PHIL_i = picks_up.L → picks_up.R → eats → puts_down.R → puts_down.L → STOP
18
+ *
19
+ * El bloqueo clásico aparece cuando todos los filósofos toman primero
20
+ * el izquierdo y luego intentan tomar el derecho: ya nadie lo tendrá
21
+ * libre. Lo detectamos con `isDeadlocked` sobre la composición paralela.
22
+ */
23
+ export declare function philosopher(name: string): Process;
24
+ /**
25
+ * Composición paralela de `n` filósofos circulares con sus tenedores
26
+ * compartidos. El alfabeto de sincronización es exactamente el conjunto
27
+ * de eventos `pick.*` y `put.*` que comparten filósofo y fork.
28
+ *
29
+ * Con `n ≥ 2` y la estrategia ingenua (todos toman primero el izquierdo)
30
+ * llegamos a deadlock estructural una vez todos hicieron `pick.L`.
31
+ */
32
+ export declare function diningPhilosophers(n: number): Process;
33
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/examples.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,SAAS,CAAC;AAG9C;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AA0BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CA+BrD"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CSP Hoare — Ejemplos estándar del libro de Hoare (1985)
4
+ // ============================================================
5
+ // Construcciones canónicas que también sirven como tests integradores
6
+ // de la semántica.
7
+ // ============================================================
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.vendingMachine = vendingMachine;
10
+ exports.vendingMachineLoop = vendingMachineLoop;
11
+ exports.philosopher = philosopher;
12
+ exports.diningPhilosophers = diningPhilosophers;
13
+ const semantics_1 = require("./semantics");
14
+ /**
15
+ * Máquina expendedora simple: acepta una moneda y luego ofrece al
16
+ * entorno elegir entre té y café.
17
+ *
18
+ * VM = coin → ((tea → STOP) □ (coffee → STOP))
19
+ *
20
+ * Para uso en bucle infinito, ver `vendingMachineLoop`.
21
+ */
22
+ function vendingMachine() {
23
+ return (0, semantics_1.prefix)('coin', (0, semantics_1.choice)((0, semantics_1.prefix)('tea', semantics_1.STOP), (0, semantics_1.prefix)('coffee', semantics_1.STOP)));
24
+ }
25
+ /** Versión recursiva: tras servir, vuelve al estado inicial. */
26
+ function vendingMachineLoop() {
27
+ return (0, semantics_1.recursion)('VM', (0, semantics_1.prefix)('coin', (0, semantics_1.choice)((0, semantics_1.prefix)('tea', (0, semantics_1.processVar)('VM')), (0, semantics_1.prefix)('coffee', (0, semantics_1.processVar)('VM')))));
28
+ }
29
+ /**
30
+ * Filósofo `i` (dining philosophers a la Hoare): toma su tenedor
31
+ * izquierdo (`L`), luego el derecho (`R`), come, los suelta y repite.
32
+ *
33
+ * PHIL_i = picks_up.L → picks_up.R → eats → puts_down.R → puts_down.L → STOP
34
+ *
35
+ * El bloqueo clásico aparece cuando todos los filósofos toman primero
36
+ * el izquierdo y luego intentan tomar el derecho: ya nadie lo tendrá
37
+ * libre. Lo detectamos con `isDeadlocked` sobre la composición paralela.
38
+ */
39
+ function philosopher(name) {
40
+ const pickL = `pick.${name}.L`;
41
+ const pickR = `pick.${name}.R`;
42
+ const eats = `eat.${name}`;
43
+ const putR = `put.${name}.R`;
44
+ const putL = `put.${name}.L`;
45
+ return (0, semantics_1.prefix)(pickL, (0, semantics_1.prefix)(pickR, (0, semantics_1.prefix)(eats, (0, semantics_1.prefix)(putR, (0, semantics_1.prefix)(putL, semantics_1.STOP)))));
46
+ }
47
+ /**
48
+ * Tenedor `i`: oscila entre "libre" y "tomado". Solo puede ser tomado o
49
+ * soltado, alternativamente.
50
+ *
51
+ * FORK_i = pick → put → FORK_i
52
+ *
53
+ * En el modelo de Hoare, los nombres de evento son compartidos entre
54
+ * filósofo y tenedor: `pick.phi.X` debe coincidir con el evento
55
+ * correspondiente del fork.
56
+ *
57
+ * Aquí codificamos el deadlock estructuralmente: la composición paralela
58
+ * de N filósofos sin recursión queda en STOP global cuando todos se
59
+ * bloquean.
60
+ */
61
+ function fork(_forkId, philLeft, philRight) {
62
+ // El tenedor es L para `philLeft` y R para `philRight`.
63
+ const pickL = `pick.${philLeft}.L`;
64
+ const putL = `put.${philLeft}.L`;
65
+ const pickR = `pick.${philRight}.R`;
66
+ const putR = `put.${philRight}.R`;
67
+ // Solo aceptamos cada movimiento UNA vez (modelado finito → deadlock visible).
68
+ return (0, semantics_1.choice)((0, semantics_1.prefix)(pickL, (0, semantics_1.prefix)(putL, semantics_1.STOP)), (0, semantics_1.prefix)(pickR, (0, semantics_1.prefix)(putR, semantics_1.STOP)));
69
+ }
70
+ /**
71
+ * Composición paralela de `n` filósofos circulares con sus tenedores
72
+ * compartidos. El alfabeto de sincronización es exactamente el conjunto
73
+ * de eventos `pick.*` y `put.*` que comparten filósofo y fork.
74
+ *
75
+ * Con `n ≥ 2` y la estrategia ingenua (todos toman primero el izquierdo)
76
+ * llegamos a deadlock estructural una vez todos hicieron `pick.L`.
77
+ */
78
+ function diningPhilosophers(n) {
79
+ if (n < 2)
80
+ throw new Error('diningPhilosophers requiere n ≥ 2');
81
+ // Construimos `n` filósofos y `n` tenedores en una mesa circular.
82
+ // Fork `i` está entre Phil `i` y Phil `(i+1) mod n`.
83
+ const phils = [];
84
+ const forks = [];
85
+ for (let i = 0; i < n; i++) {
86
+ phils.push(philosopher(`P${i}`));
87
+ }
88
+ for (let i = 0; i < n; i++) {
89
+ const left = `P${i}`;
90
+ const right = `P${(i + 1) % n}`;
91
+ forks.push(fork(i, left, right));
92
+ }
93
+ // Alfabeto: todos los `pick.*` y `put.*`.
94
+ const sync = [];
95
+ for (let i = 0; i < n; i++) {
96
+ sync.push(`pick.P${i}.L`, `pick.P${i}.R`, `put.P${i}.L`, `put.P${i}.R`);
97
+ }
98
+ // Componemos en cascada: ((Phil0 |[A]| Fork0) |[A]| Phil1) |[A]| ...
99
+ let acc = phils[0];
100
+ for (let i = 0; i < n; i++) {
101
+ acc = (0, semantics_1.parallel)(acc, forks[i], sync);
102
+ if (i + 1 < n) {
103
+ acc = (0, semantics_1.parallel)(acc, phils[i + 1], sync);
104
+ }
105
+ }
106
+ return acc;
107
+ }
108
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/csp-hoare/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { Event, Process, Trace, FailurePair } from './types';
2
+ export { TICK } from './types';
3
+ export { STOP, SKIP, prefix, choice, internal, parallel, interleave, sequence, hide, rename, recursion, processVar, alphabet, nextEvents, step, internalResolutions, } from './semantics';
4
+ export { traces, failures, isDeadlocked, isLiveLocked, refinesTraces, refinesFailures, } from './analysis';
5
+ export { vendingMachine, vendingMachineLoop, philosopher, diningPhilosophers } from './examples';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/index.ts"],"names":[],"mappings":"AAgBA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CSP Hoare — Comunicating Sequential Processes (Hoare 1978/1985)
4
+ // ============================================================
5
+ // Cálculo de procesos basado en eventos atómicos sincronizados.
6
+ // A diferencia del π-cálculo (centrado en pasar nombres), CSP modela
7
+ // concurrencia mediante la ocurrencia coordinada de nombres de evento
8
+ // compartidos en el alfabeto del paralelo.
9
+ //
10
+ // Semánticas implementadas:
11
+ // • Traces — qué secuencias de eventos visibles pueden ocurrir.
12
+ // • Failures — pares (traza, refusal) que capturan no-determinismo.
13
+ // • Refinement — P ⊑_T Q y P ⊑_F Q según las semánticas anteriores.
14
+ //
15
+ // Ejemplos canónicos: máquina expendedora, filósofos cenando.
16
+ // ============================================================
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.diningPhilosophers = exports.philosopher = exports.vendingMachineLoop = exports.vendingMachine = exports.refinesFailures = exports.refinesTraces = exports.isLiveLocked = exports.isDeadlocked = exports.failures = exports.traces = exports.internalResolutions = exports.step = exports.nextEvents = exports.alphabet = exports.processVar = exports.recursion = exports.rename = exports.hide = exports.sequence = exports.interleave = exports.parallel = exports.internal = exports.choice = exports.prefix = exports.SKIP = exports.STOP = exports.TICK = void 0;
19
+ var types_1 = require("./types");
20
+ Object.defineProperty(exports, "TICK", { enumerable: true, get: function () { return types_1.TICK; } });
21
+ var semantics_1 = require("./semantics");
22
+ Object.defineProperty(exports, "STOP", { enumerable: true, get: function () { return semantics_1.STOP; } });
23
+ Object.defineProperty(exports, "SKIP", { enumerable: true, get: function () { return semantics_1.SKIP; } });
24
+ Object.defineProperty(exports, "prefix", { enumerable: true, get: function () { return semantics_1.prefix; } });
25
+ Object.defineProperty(exports, "choice", { enumerable: true, get: function () { return semantics_1.choice; } });
26
+ Object.defineProperty(exports, "internal", { enumerable: true, get: function () { return semantics_1.internal; } });
27
+ Object.defineProperty(exports, "parallel", { enumerable: true, get: function () { return semantics_1.parallel; } });
28
+ Object.defineProperty(exports, "interleave", { enumerable: true, get: function () { return semantics_1.interleave; } });
29
+ Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return semantics_1.sequence; } });
30
+ Object.defineProperty(exports, "hide", { enumerable: true, get: function () { return semantics_1.hide; } });
31
+ Object.defineProperty(exports, "rename", { enumerable: true, get: function () { return semantics_1.rename; } });
32
+ Object.defineProperty(exports, "recursion", { enumerable: true, get: function () { return semantics_1.recursion; } });
33
+ Object.defineProperty(exports, "processVar", { enumerable: true, get: function () { return semantics_1.processVar; } });
34
+ Object.defineProperty(exports, "alphabet", { enumerable: true, get: function () { return semantics_1.alphabet; } });
35
+ Object.defineProperty(exports, "nextEvents", { enumerable: true, get: function () { return semantics_1.nextEvents; } });
36
+ Object.defineProperty(exports, "step", { enumerable: true, get: function () { return semantics_1.step; } });
37
+ Object.defineProperty(exports, "internalResolutions", { enumerable: true, get: function () { return semantics_1.internalResolutions; } });
38
+ var analysis_1 = require("./analysis");
39
+ Object.defineProperty(exports, "traces", { enumerable: true, get: function () { return analysis_1.traces; } });
40
+ Object.defineProperty(exports, "failures", { enumerable: true, get: function () { return analysis_1.failures; } });
41
+ Object.defineProperty(exports, "isDeadlocked", { enumerable: true, get: function () { return analysis_1.isDeadlocked; } });
42
+ Object.defineProperty(exports, "isLiveLocked", { enumerable: true, get: function () { return analysis_1.isLiveLocked; } });
43
+ Object.defineProperty(exports, "refinesTraces", { enumerable: true, get: function () { return analysis_1.refinesTraces; } });
44
+ Object.defineProperty(exports, "refinesFailures", { enumerable: true, get: function () { return analysis_1.refinesFailures; } });
45
+ var examples_1 = require("./examples");
46
+ Object.defineProperty(exports, "vendingMachine", { enumerable: true, get: function () { return examples_1.vendingMachine; } });
47
+ Object.defineProperty(exports, "vendingMachineLoop", { enumerable: true, get: function () { return examples_1.vendingMachineLoop; } });
48
+ Object.defineProperty(exports, "philosopher", { enumerable: true, get: function () { return examples_1.philosopher; } });
49
+ Object.defineProperty(exports, "diningPhilosophers", { enumerable: true, get: function () { return examples_1.diningPhilosophers; } });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/csp-hoare/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kEAAkE;AAClE,+DAA+D;AAC/D,gEAAgE;AAChE,qEAAqE;AACrE,sEAAsE;AACtE,2CAA2C;AAC3C,EAAE;AACF,4BAA4B;AAC5B,kEAAkE;AAClE,sEAAsE;AACtE,sEAAsE;AACtE,EAAE;AACF,8DAA8D;AAC9D,+DAA+D;;;AAG/D,iCAA+B;AAAtB,6FAAA,IAAI,OAAA;AAEb,yCAiBqB;AAhBnB,iGAAA,IAAI,OAAA;AACJ,iGAAA,IAAI,OAAA;AACJ,mGAAA,MAAM,OAAA;AACN,mGAAA,MAAM,OAAA;AACN,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,iGAAA,IAAI,OAAA;AACJ,mGAAA,MAAM,OAAA;AACN,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,uGAAA,UAAU,OAAA;AACV,iGAAA,IAAI,OAAA;AACJ,gHAAA,mBAAmB,OAAA;AAGrB,uCAOoB;AANlB,kGAAA,MAAM,OAAA;AACN,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AAGjB,uCAAiG;AAAxF,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,8GAAA,kBAAkB,OAAA"}
@@ -0,0 +1,49 @@
1
+ import type { Event, Process } from './types';
2
+ export declare const STOP: Process;
3
+ export declare const SKIP: Process;
4
+ export declare function prefix(event: Event, cont: Process): Process;
5
+ export declare function choice(left: Process, right: Process): Process;
6
+ export declare function internal(left: Process, right: Process): Process;
7
+ export declare function parallel(left: Process, right: Process, alphabet: Event[]): Process;
8
+ export declare function interleave(left: Process, right: Process): Process;
9
+ export declare function sequence(left: Process, right: Process): Process;
10
+ export declare function hide(process: Process, events: Event[]): Process;
11
+ export declare function rename(process: Process, mapping: Map<Event, Event>): Process;
12
+ export declare function recursion(name: string, body: Process): Process;
13
+ export declare function processVar(name: string): Process;
14
+ /**
15
+ * Conjunto de eventos visibles mencionados sintácticamente en `p`.
16
+ * Los eventos renombrados aportan tanto la fuente como el destino
17
+ * (la fuente puede aparecer en una rama no recorrida, y el destino
18
+ * es lo que el entorno observa).
19
+ */
20
+ export declare function alphabet(p: Process): Set<Event>;
21
+ /**
22
+ * Eventos visibles que `p` puede ofrecer inmediatamente como su primer
23
+ * evento (tomando todas las resoluciones internas). No incluye τ (los
24
+ * eventos ocultos son silenciosos por construcción).
25
+ *
26
+ * Para `SKIP` reportamos el tick `✓` — termina exitosamente.
27
+ */
28
+ export declare function nextEvents(p: Process): Set<Event>;
29
+ /**
30
+ * `step(P, a)` aplica una transición visible etiquetada con `a` y devuelve
31
+ * el continuante, o `null` si `a` no está habilitado. Para procesos no-
32
+ * deterministas elegimos arbitrariamente cualquier rama que habilite `a`
33
+ * (eso es válido para análisis de trazas; para failures inspeccionamos
34
+ * todas las resoluciones aparte).
35
+ */
36
+ export declare function step(p: Process, event: Event): Process | null;
37
+ /**
38
+ * Enumera todos los estados "estables" alcanzables desde `p` resolviendo
39
+ * elecciones internas (`⊓`) y desplegando recursiones inmediatas, sin
40
+ * consumir eventos visibles. Útil para la semántica de failures, donde
41
+ * el conjunto de refusal depende de QUÉ rama interna se eligió.
42
+ *
43
+ * Devuelve procesos sin un `internal` en la raíz (después de empujarlo
44
+ * hacia adentro de operadores asociativos cuando aplica). El número de
45
+ * resoluciones es 2^(# de internals encadenados), así que limitamos a un
46
+ * número razonable para no explotar.
47
+ */
48
+ export declare function internalResolutions(p: Process, limit?: number): Process[];
49
+ //# sourceMappingURL=semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/semantics.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAK9C,eAAO,MAAM,IAAI,EAAE,OAA0B,CAAC;AAC9C,eAAO,MAAM,IAAI,EAAE,OAA0B,CAAC;AAE9C,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAE3D;AACD,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7D;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAElF;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjE;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AACD,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAE/D;AACD,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAE5E;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAE9D;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAID;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAI/C;AAiHD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAIjD;AA8GD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAE7D;AA0HD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE,CAIrE"}