@stevenvo780/st-lang 3.2.3 → 4.0.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 (445) hide show
  1. package/README.md +47 -7
  2. package/dist/api.d.ts +2 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +5 -1
  5. package/dist/api.js.map +1 -1
  6. package/dist/argumentation/dot.d.ts +3 -0
  7. package/dist/argumentation/dot.d.ts.map +1 -0
  8. package/dist/argumentation/dot.js +25 -0
  9. package/dist/argumentation/dot.js.map +1 -0
  10. package/dist/argumentation/extensions.d.ts +11 -0
  11. package/dist/argumentation/extensions.d.ts.map +1 -0
  12. package/dist/argumentation/extensions.js +173 -0
  13. package/dist/argumentation/extensions.js.map +1 -0
  14. package/dist/argumentation/framework.d.ts +13 -0
  15. package/dist/argumentation/framework.d.ts.map +1 -0
  16. package/dist/argumentation/framework.js +117 -0
  17. package/dist/argumentation/framework.js.map +1 -0
  18. package/dist/argumentation/index.d.ts +6 -0
  19. package/dist/argumentation/index.d.ts.map +1 -0
  20. package/dist/argumentation/index.js +33 -0
  21. package/dist/argumentation/index.js.map +1 -0
  22. package/dist/argumentation/types.d.ts +11 -0
  23. package/dist/argumentation/types.d.ts.map +1 -0
  24. package/dist/argumentation/types.js +8 -0
  25. package/dist/argumentation/types.js.map +1 -0
  26. package/dist/ast/visitor.d.ts +95 -0
  27. package/dist/ast/visitor.d.ts.map +1 -0
  28. package/dist/ast/visitor.js +223 -0
  29. package/dist/ast/visitor.js.map +1 -0
  30. package/dist/citation-reasoning/derive.d.ts +31 -0
  31. package/dist/citation-reasoning/derive.d.ts.map +1 -0
  32. package/dist/citation-reasoning/derive.js +157 -0
  33. package/dist/citation-reasoning/derive.js.map +1 -0
  34. package/dist/citation-reasoning/index.d.ts +4 -0
  35. package/dist/citation-reasoning/index.d.ts.map +1 -0
  36. package/dist/citation-reasoning/index.js +10 -0
  37. package/dist/citation-reasoning/index.js.map +1 -0
  38. package/dist/citation-reasoning/types.d.ts +36 -0
  39. package/dist/citation-reasoning/types.d.ts.map +1 -0
  40. package/dist/citation-reasoning/types.js +6 -0
  41. package/dist/citation-reasoning/types.js.map +1 -0
  42. package/dist/educational/checker.d.ts +3 -0
  43. package/dist/educational/checker.d.ts.map +1 -0
  44. package/dist/educational/checker.js +244 -0
  45. package/dist/educational/checker.js.map +1 -0
  46. package/dist/educational/generator.d.ts +4 -0
  47. package/dist/educational/generator.d.ts.map +1 -0
  48. package/dist/educational/generator.js +158 -0
  49. package/dist/educational/generator.js.map +1 -0
  50. package/dist/educational/index.d.ts +6 -0
  51. package/dist/educational/index.d.ts.map +1 -0
  52. package/dist/educational/index.js +21 -0
  53. package/dist/educational/index.js.map +1 -0
  54. package/dist/educational/normalize.d.ts +6 -0
  55. package/dist/educational/normalize.d.ts.map +1 -0
  56. package/dist/educational/normalize.js +124 -0
  57. package/dist/educational/normalize.js.map +1 -0
  58. package/dist/educational/rng.d.ts +10 -0
  59. package/dist/educational/rng.d.ts.map +1 -0
  60. package/dist/educational/rng.js +47 -0
  61. package/dist/educational/rng.js.map +1 -0
  62. package/dist/educational/templates.d.ts +30 -0
  63. package/dist/educational/templates.d.ts.map +1 -0
  64. package/dist/educational/templates.js +567 -0
  65. package/dist/educational/templates.js.map +1 -0
  66. package/dist/educational/types.d.ts +44 -0
  67. package/dist/educational/types.d.ts.map +1 -0
  68. package/dist/educational/types.js +20 -0
  69. package/dist/educational/types.js.map +1 -0
  70. package/dist/exporters/coq/index.d.ts +35 -0
  71. package/dist/exporters/coq/index.d.ts.map +1 -0
  72. package/dist/exporters/coq/index.js +299 -0
  73. package/dist/exporters/coq/index.js.map +1 -0
  74. package/dist/fol-prover/cnf.d.ts +10 -0
  75. package/dist/fol-prover/cnf.d.ts.map +1 -0
  76. package/dist/fol-prover/cnf.js +357 -0
  77. package/dist/fol-prover/cnf.js.map +1 -0
  78. package/dist/fol-prover/index.d.ts +7 -0
  79. package/dist/fol-prover/index.d.ts.map +1 -0
  80. package/dist/fol-prover/index.js +27 -0
  81. package/dist/fol-prover/index.js.map +1 -0
  82. package/dist/fol-prover/prove.d.ts +4 -0
  83. package/dist/fol-prover/prove.d.ts.map +1 -0
  84. package/dist/fol-prover/prove.js +34 -0
  85. package/dist/fol-prover/prove.js.map +1 -0
  86. package/dist/fol-prover/resolve.d.ts +27 -0
  87. package/dist/fol-prover/resolve.d.ts.map +1 -0
  88. package/dist/fol-prover/resolve.js +234 -0
  89. package/dist/fol-prover/resolve.js.map +1 -0
  90. package/dist/fol-prover/types.d.ts +34 -0
  91. package/dist/fol-prover/types.d.ts.map +1 -0
  92. package/dist/fol-prover/types.js +38 -0
  93. package/dist/fol-prover/types.js.map +1 -0
  94. package/dist/fol-prover/unify.d.ts +9 -0
  95. package/dist/fol-prover/unify.d.ts.map +1 -0
  96. package/dist/fol-prover/unify.js +110 -0
  97. package/dist/fol-prover/unify.js.map +1 -0
  98. package/dist/hyperreal/index.d.ts +45 -0
  99. package/dist/hyperreal/index.d.ts.map +1 -0
  100. package/dist/hyperreal/index.js +183 -0
  101. package/dist/hyperreal/index.js.map +1 -0
  102. package/dist/index.d.ts +26 -0
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +72 -1
  105. package/dist/index.js.map +1 -1
  106. package/dist/lsp/index.d.ts +6 -0
  107. package/dist/lsp/index.d.ts.map +1 -0
  108. package/dist/lsp/index.js +29 -0
  109. package/dist/lsp/index.js.map +1 -0
  110. package/dist/lsp/protocol.d.ts +20 -0
  111. package/dist/lsp/protocol.d.ts.map +1 -0
  112. package/dist/lsp/protocol.js +64 -0
  113. package/dist/lsp/protocol.js.map +1 -0
  114. package/dist/lsp/server.d.ts +47 -0
  115. package/dist/lsp/server.d.ts.map +1 -0
  116. package/dist/lsp/server.js +529 -0
  117. package/dist/lsp/server.js.map +1 -0
  118. package/dist/lsp/types.d.ts +152 -0
  119. package/dist/lsp/types.d.ts.map +1 -0
  120. package/dist/lsp/types.js +70 -0
  121. package/dist/lsp/types.js.map +1 -0
  122. package/dist/parser/formulas.d.ts +7 -0
  123. package/dist/parser/formulas.d.ts.map +1 -0
  124. package/dist/parser/formulas.js +511 -0
  125. package/dist/parser/formulas.js.map +1 -0
  126. package/dist/parser/parser.d.ts +11 -41
  127. package/dist/parser/parser.d.ts.map +1 -1
  128. package/dist/parser/parser.js +410 -1037
  129. package/dist/parser/parser.js.map +1 -1
  130. package/dist/parser/state.d.ts +34 -0
  131. package/dist/parser/state.d.ts.map +1 -0
  132. package/dist/parser/state.js +163 -0
  133. package/dist/parser/state.js.map +1 -0
  134. package/dist/plugin-system/demo-min-logic.d.ts +3 -0
  135. package/dist/plugin-system/demo-min-logic.d.ts.map +1 -0
  136. package/dist/plugin-system/demo-min-logic.js +116 -0
  137. package/dist/plugin-system/demo-min-logic.js.map +1 -0
  138. package/dist/plugin-system/errors.d.ts +9 -0
  139. package/dist/plugin-system/errors.d.ts.map +1 -0
  140. package/dist/plugin-system/errors.js +24 -0
  141. package/dist/plugin-system/errors.js.map +1 -0
  142. package/dist/plugin-system/index.d.ts +6 -0
  143. package/dist/plugin-system/index.d.ts.map +1 -0
  144. package/dist/plugin-system/index.js +14 -0
  145. package/dist/plugin-system/index.js.map +1 -0
  146. package/dist/plugin-system/registry.d.ts +12 -0
  147. package/dist/plugin-system/registry.d.ts.map +1 -0
  148. package/dist/plugin-system/registry.js +46 -0
  149. package/dist/plugin-system/registry.js.map +1 -0
  150. package/dist/plugin-system/types.d.ts +23 -0
  151. package/dist/plugin-system/types.d.ts.map +1 -0
  152. package/dist/plugin-system/types.js +3 -0
  153. package/dist/plugin-system/types.js.map +1 -0
  154. package/dist/plugin-system/validate.d.ts +4 -0
  155. package/dist/plugin-system/validate.d.ts.map +1 -0
  156. package/dist/plugin-system/validate.js +60 -0
  157. package/dist/plugin-system/validate.js.map +1 -0
  158. package/dist/profiles/classical/parallel-sat.js +3 -3
  159. package/dist/profiles/classical/parallel-sat.js.map +1 -1
  160. package/dist/proof-exchange/index.d.ts +26 -0
  161. package/dist/proof-exchange/index.d.ts.map +1 -0
  162. package/dist/proof-exchange/index.js +94 -0
  163. package/dist/proof-exchange/index.js.map +1 -0
  164. package/dist/runtime/memo/cache.d.ts +32 -0
  165. package/dist/runtime/memo/cache.d.ts.map +1 -0
  166. package/dist/runtime/memo/cache.js +129 -0
  167. package/dist/runtime/memo/cache.js.map +1 -0
  168. package/dist/runtime/memo/hash.d.ts +9 -0
  169. package/dist/runtime/memo/hash.d.ts.map +1 -0
  170. package/dist/runtime/memo/hash.js +87 -0
  171. package/dist/runtime/memo/hash.js.map +1 -0
  172. package/dist/runtime/memo/index.d.ts +4 -0
  173. package/dist/runtime/memo/index.d.ts.map +1 -0
  174. package/dist/runtime/memo/index.js +8 -0
  175. package/dist/runtime/memo/index.js.map +1 -0
  176. package/dist/runtime/parallel/index.d.ts +34 -0
  177. package/dist/runtime/parallel/index.d.ts.map +1 -0
  178. package/dist/runtime/parallel/index.js +220 -0
  179. package/dist/runtime/parallel/index.js.map +1 -0
  180. package/dist/runtime/parallel/worker.d.ts +22 -0
  181. package/dist/runtime/parallel/worker.d.ts.map +1 -0
  182. package/dist/runtime/parallel/worker.js +43 -0
  183. package/dist/runtime/parallel/worker.js.map +1 -0
  184. package/dist/runtime/smt/index.d.ts +6 -0
  185. package/dist/runtime/smt/index.d.ts.map +1 -0
  186. package/dist/runtime/smt/index.js +18 -0
  187. package/dist/runtime/smt/index.js.map +1 -0
  188. package/dist/runtime/smt/mock-backend.d.ts +30 -0
  189. package/dist/runtime/smt/mock-backend.d.ts.map +1 -0
  190. package/dist/runtime/smt/mock-backend.js +460 -0
  191. package/dist/runtime/smt/mock-backend.js.map +1 -0
  192. package/dist/runtime/smt/serializer.d.ts +21 -0
  193. package/dist/runtime/smt/serializer.d.ts.map +1 -0
  194. package/dist/runtime/smt/serializer.js +314 -0
  195. package/dist/runtime/smt/serializer.js.map +1 -0
  196. package/dist/runtime/smt/subprocess-backend.d.ts +62 -0
  197. package/dist/runtime/smt/subprocess-backend.d.ts.map +1 -0
  198. package/dist/runtime/smt/subprocess-backend.js +261 -0
  199. package/dist/runtime/smt/subprocess-backend.js.map +1 -0
  200. package/dist/runtime/smt/types.d.ts +57 -0
  201. package/dist/runtime/smt/types.d.ts.map +1 -0
  202. package/dist/runtime/smt/types.js +6 -0
  203. package/dist/runtime/smt/types.js.map +1 -0
  204. package/dist/runtime/streaming/index.d.ts +4 -0
  205. package/dist/runtime/streaming/index.d.ts.map +1 -0
  206. package/dist/runtime/streaming/index.js +9 -0
  207. package/dist/runtime/streaming/index.js.map +1 -0
  208. package/dist/runtime/streaming/stream-eval.d.ts +31 -0
  209. package/dist/runtime/streaming/stream-eval.d.ts.map +1 -0
  210. package/dist/runtime/streaming/stream-eval.js +155 -0
  211. package/dist/runtime/streaming/stream-eval.js.map +1 -0
  212. package/dist/runtime/streaming/types.d.ts +33 -0
  213. package/dist/runtime/streaming/types.d.ts.map +1 -0
  214. package/dist/runtime/streaming/types.js +6 -0
  215. package/dist/runtime/streaming/types.js.map +1 -0
  216. package/dist/runtime/typecheck/checker.d.ts +72 -0
  217. package/dist/runtime/typecheck/checker.d.ts.map +1 -0
  218. package/dist/runtime/typecheck/checker.js +462 -0
  219. package/dist/runtime/typecheck/checker.js.map +1 -0
  220. package/dist/runtime/typecheck/index.d.ts +4 -0
  221. package/dist/runtime/typecheck/index.d.ts.map +1 -0
  222. package/dist/runtime/typecheck/index.js +13 -0
  223. package/dist/runtime/typecheck/index.js.map +1 -0
  224. package/dist/runtime/typecheck/levenshtein.d.ts +11 -0
  225. package/dist/runtime/typecheck/levenshtein.d.ts.map +1 -0
  226. package/dist/runtime/typecheck/levenshtein.js +49 -0
  227. package/dist/runtime/typecheck/levenshtein.js.map +1 -0
  228. package/dist/runtime/typecheck/types.d.ts +14 -0
  229. package/dist/runtime/typecheck/types.d.ts.map +1 -0
  230. package/dist/runtime/typecheck/types.js +26 -0
  231. package/dist/runtime/typecheck/types.js.map +1 -0
  232. package/dist/solver/cdcl-v2/clause-learning.d.ts +33 -0
  233. package/dist/solver/cdcl-v2/clause-learning.d.ts.map +1 -0
  234. package/dist/solver/cdcl-v2/clause-learning.js +110 -0
  235. package/dist/solver/cdcl-v2/clause-learning.js.map +1 -0
  236. package/dist/solver/cdcl-v2/index.d.ts +9 -0
  237. package/dist/solver/cdcl-v2/index.d.ts.map +1 -0
  238. package/dist/solver/cdcl-v2/index.js +39 -0
  239. package/dist/solver/cdcl-v2/index.js.map +1 -0
  240. package/dist/solver/cdcl-v2/lbd.d.ts +34 -0
  241. package/dist/solver/cdcl-v2/lbd.d.ts.map +1 -0
  242. package/dist/solver/cdcl-v2/lbd.js +72 -0
  243. package/dist/solver/cdcl-v2/lbd.js.map +1 -0
  244. package/dist/solver/cdcl-v2/luby.d.ts +28 -0
  245. package/dist/solver/cdcl-v2/luby.d.ts.map +1 -0
  246. package/dist/solver/cdcl-v2/luby.js +70 -0
  247. package/dist/solver/cdcl-v2/luby.js.map +1 -0
  248. package/dist/solver/cdcl-v2/phase-saving.d.ts +14 -0
  249. package/dist/solver/cdcl-v2/phase-saving.d.ts.map +1 -0
  250. package/dist/solver/cdcl-v2/phase-saving.js +44 -0
  251. package/dist/solver/cdcl-v2/phase-saving.js.map +1 -0
  252. package/dist/solver/cdcl-v2/solver.d.ts +10 -0
  253. package/dist/solver/cdcl-v2/solver.d.ts.map +1 -0
  254. package/dist/solver/cdcl-v2/solver.js +442 -0
  255. package/dist/solver/cdcl-v2/solver.js.map +1 -0
  256. package/dist/solver/cdcl-v2/state.d.ts +54 -0
  257. package/dist/solver/cdcl-v2/state.d.ts.map +1 -0
  258. package/dist/solver/cdcl-v2/state.js +22 -0
  259. package/dist/solver/cdcl-v2/state.js.map +1 -0
  260. package/dist/solver/cdcl-v2/vsids.d.ts +19 -0
  261. package/dist/solver/cdcl-v2/vsids.d.ts.map +1 -0
  262. package/dist/solver/cdcl-v2/vsids.js +77 -0
  263. package/dist/solver/cdcl-v2/vsids.js.map +1 -0
  264. package/dist/tests/agora-integration-fixtures.test.js.map +1 -1
  265. package/dist/tests/argumentation/dung.test.d.ts +2 -0
  266. package/dist/tests/argumentation/dung.test.d.ts.map +1 -0
  267. package/dist/tests/argumentation/dung.test.js +219 -0
  268. package/dist/tests/argumentation/dung.test.js.map +1 -0
  269. package/dist/tests/citation-reasoning/citation-reasoning.test.d.ts +2 -0
  270. package/dist/tests/citation-reasoning/citation-reasoning.test.d.ts.map +1 -0
  271. package/dist/tests/citation-reasoning/citation-reasoning.test.js +240 -0
  272. package/dist/tests/citation-reasoning/citation-reasoning.test.js.map +1 -0
  273. package/dist/tests/coverage-fill-api.test.d.ts +7 -0
  274. package/dist/tests/coverage-fill-api.test.d.ts.map +1 -0
  275. package/dist/tests/coverage-fill-api.test.js +310 -0
  276. package/dist/tests/coverage-fill-api.test.js.map +1 -0
  277. package/dist/tests/coverage-fill-aristotelian.test.d.ts +7 -0
  278. package/dist/tests/coverage-fill-aristotelian.test.d.ts.map +1 -0
  279. package/dist/tests/coverage-fill-aristotelian.test.js +377 -0
  280. package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -0
  281. package/dist/tests/coverage-fill-belnap.test.d.ts +6 -0
  282. package/dist/tests/coverage-fill-belnap.test.d.ts.map +1 -0
  283. package/dist/tests/coverage-fill-belnap.test.js +277 -0
  284. package/dist/tests/coverage-fill-belnap.test.js.map +1 -0
  285. package/dist/tests/coverage-fill-cross-system.test.d.ts +6 -0
  286. package/dist/tests/coverage-fill-cross-system.test.d.ts.map +1 -0
  287. package/dist/tests/coverage-fill-cross-system.test.js +75 -0
  288. package/dist/tests/coverage-fill-cross-system.test.js.map +1 -0
  289. package/dist/tests/coverage-fill-fallacies.test.d.ts +6 -0
  290. package/dist/tests/coverage-fill-fallacies.test.d.ts.map +1 -0
  291. package/dist/tests/coverage-fill-fallacies.test.js +287 -0
  292. package/dist/tests/coverage-fill-fallacies.test.js.map +1 -0
  293. package/dist/tests/coverage-fill-format.test.d.ts +7 -0
  294. package/dist/tests/coverage-fill-format.test.d.ts.map +1 -0
  295. package/dist/tests/coverage-fill-format.test.js +455 -0
  296. package/dist/tests/coverage-fill-format.test.js.map +1 -0
  297. package/dist/tests/coverage-fill-intuitionistic.test.d.ts +6 -0
  298. package/dist/tests/coverage-fill-intuitionistic.test.d.ts.map +1 -0
  299. package/dist/tests/coverage-fill-intuitionistic.test.js +293 -0
  300. package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -0
  301. package/dist/tests/coverage-fill-probabilistic.test.d.ts +7 -0
  302. package/dist/tests/coverage-fill-probabilistic.test.d.ts.map +1 -0
  303. package/dist/tests/coverage-fill-probabilistic.test.js +314 -0
  304. package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -0
  305. package/dist/tests/educational/checker.test.d.ts +2 -0
  306. package/dist/tests/educational/checker.test.d.ts.map +1 -0
  307. package/dist/tests/educational/checker.test.js +212 -0
  308. package/dist/tests/educational/checker.test.js.map +1 -0
  309. package/dist/tests/educational/generator.test.d.ts +2 -0
  310. package/dist/tests/educational/generator.test.d.ts.map +1 -0
  311. package/dist/tests/educational/generator.test.js +137 -0
  312. package/dist/tests/educational/generator.test.js.map +1 -0
  313. package/dist/tests/exporters/coq/coq-exporter.test.d.ts +2 -0
  314. package/dist/tests/exporters/coq/coq-exporter.test.d.ts.map +1 -0
  315. package/dist/tests/exporters/coq/coq-exporter.test.js +353 -0
  316. package/dist/tests/exporters/coq/coq-exporter.test.js.map +1 -0
  317. package/dist/tests/fol-prover/cnf.test.d.ts +2 -0
  318. package/dist/tests/fol-prover/cnf.test.d.ts.map +1 -0
  319. package/dist/tests/fol-prover/cnf.test.js +74 -0
  320. package/dist/tests/fol-prover/cnf.test.js.map +1 -0
  321. package/dist/tests/fol-prover/prove.test.d.ts +2 -0
  322. package/dist/tests/fol-prover/prove.test.d.ts.map +1 -0
  323. package/dist/tests/fol-prover/prove.test.js +106 -0
  324. package/dist/tests/fol-prover/prove.test.js.map +1 -0
  325. package/dist/tests/fol-prover/unify.test.d.ts +2 -0
  326. package/dist/tests/fol-prover/unify.test.d.ts.map +1 -0
  327. package/dist/tests/fol-prover/unify.test.js +66 -0
  328. package/dist/tests/fol-prover/unify.test.js.map +1 -0
  329. package/dist/tests/hyperreal/hyperreal.test.d.ts +2 -0
  330. package/dist/tests/hyperreal/hyperreal.test.d.ts.map +1 -0
  331. package/dist/tests/hyperreal/hyperreal.test.js +219 -0
  332. package/dist/tests/hyperreal/hyperreal.test.js.map +1 -0
  333. package/dist/tests/lsp/server.test.d.ts +2 -0
  334. package/dist/tests/lsp/server.test.d.ts.map +1 -0
  335. package/dist/tests/lsp/server.test.js +406 -0
  336. package/dist/tests/lsp/server.test.js.map +1 -0
  337. package/dist/tests/memo/cache.test.d.ts +2 -0
  338. package/dist/tests/memo/cache.test.d.ts.map +1 -0
  339. package/dist/tests/memo/cache.test.js +252 -0
  340. package/dist/tests/memo/cache.test.js.map +1 -0
  341. package/dist/tests/parallel/parallel-pool.test.d.ts +11 -0
  342. package/dist/tests/parallel/parallel-pool.test.d.ts.map +1 -0
  343. package/dist/tests/parallel/parallel-pool.test.js +192 -0
  344. package/dist/tests/parallel/parallel-pool.test.js.map +1 -0
  345. package/dist/tests/plugin-system/demo-min-logic.test.d.ts +2 -0
  346. package/dist/tests/plugin-system/demo-min-logic.test.d.ts.map +1 -0
  347. package/dist/tests/plugin-system/demo-min-logic.test.js +85 -0
  348. package/dist/tests/plugin-system/demo-min-logic.test.js.map +1 -0
  349. package/dist/tests/plugin-system/registry.test.d.ts +2 -0
  350. package/dist/tests/plugin-system/registry.test.d.ts.map +1 -0
  351. package/dist/tests/plugin-system/registry.test.js +88 -0
  352. package/dist/tests/plugin-system/registry.test.js.map +1 -0
  353. package/dist/tests/plugin-system/validate.test.d.ts +2 -0
  354. package/dist/tests/plugin-system/validate.test.d.ts.map +1 -0
  355. package/dist/tests/plugin-system/validate.test.js +101 -0
  356. package/dist/tests/plugin-system/validate.test.js.map +1 -0
  357. package/dist/tests/proof-exchange/proof-exchange.test.d.ts +2 -0
  358. package/dist/tests/proof-exchange/proof-exchange.test.d.ts.map +1 -0
  359. package/dist/tests/proof-exchange/proof-exchange.test.js +161 -0
  360. package/dist/tests/proof-exchange/proof-exchange.test.js.map +1 -0
  361. package/dist/tests/sat-v2/clause-learning.test.d.ts +2 -0
  362. package/dist/tests/sat-v2/clause-learning.test.d.ts.map +1 -0
  363. package/dist/tests/sat-v2/clause-learning.test.js +73 -0
  364. package/dist/tests/sat-v2/clause-learning.test.js.map +1 -0
  365. package/dist/tests/sat-v2/lbd.test.d.ts +2 -0
  366. package/dist/tests/sat-v2/lbd.test.d.ts.map +1 -0
  367. package/dist/tests/sat-v2/lbd.test.js +82 -0
  368. package/dist/tests/sat-v2/lbd.test.js.map +1 -0
  369. package/dist/tests/sat-v2/luby.test.d.ts +2 -0
  370. package/dist/tests/sat-v2/luby.test.d.ts.map +1 -0
  371. package/dist/tests/sat-v2/luby.test.js +58 -0
  372. package/dist/tests/sat-v2/luby.test.js.map +1 -0
  373. package/dist/tests/sat-v2/phase-saving.test.d.ts +2 -0
  374. package/dist/tests/sat-v2/phase-saving.test.d.ts.map +1 -0
  375. package/dist/tests/sat-v2/phase-saving.test.js +38 -0
  376. package/dist/tests/sat-v2/phase-saving.test.js.map +1 -0
  377. package/dist/tests/sat-v2/solver-end-to-end.test.d.ts +2 -0
  378. package/dist/tests/sat-v2/solver-end-to-end.test.d.ts.map +1 -0
  379. package/dist/tests/sat-v2/solver-end-to-end.test.js +199 -0
  380. package/dist/tests/sat-v2/solver-end-to-end.test.js.map +1 -0
  381. package/dist/tests/sat-v2/vsids.test.d.ts +2 -0
  382. package/dist/tests/sat-v2/vsids.test.d.ts.map +1 -0
  383. package/dist/tests/sat-v2/vsids.test.js +69 -0
  384. package/dist/tests/sat-v2/vsids.test.js.map +1 -0
  385. package/dist/tests/smt/mock-backend.test.d.ts +2 -0
  386. package/dist/tests/smt/mock-backend.test.d.ts.map +1 -0
  387. package/dist/tests/smt/mock-backend.test.js +129 -0
  388. package/dist/tests/smt/mock-backend.test.js.map +1 -0
  389. package/dist/tests/smt/serializer.test.d.ts +2 -0
  390. package/dist/tests/smt/serializer.test.d.ts.map +1 -0
  391. package/dist/tests/smt/serializer.test.js +94 -0
  392. package/dist/tests/smt/serializer.test.js.map +1 -0
  393. package/dist/tests/smt/subprocess-backend.test.d.ts +2 -0
  394. package/dist/tests/smt/subprocess-backend.test.d.ts.map +1 -0
  395. package/dist/tests/smt/subprocess-backend.test.js +89 -0
  396. package/dist/tests/smt/subprocess-backend.test.js.map +1 -0
  397. package/dist/tests/streaming/stream-eval.test.d.ts +2 -0
  398. package/dist/tests/streaming/stream-eval.test.d.ts.map +1 -0
  399. package/dist/tests/streaming/stream-eval.test.js +170 -0
  400. package/dist/tests/streaming/stream-eval.test.js.map +1 -0
  401. package/dist/tests/text-layer-v2/claim-graph.test.d.ts +2 -0
  402. package/dist/tests/text-layer-v2/claim-graph.test.d.ts.map +1 -0
  403. package/dist/tests/text-layer-v2/claim-graph.test.js +255 -0
  404. package/dist/tests/text-layer-v2/claim-graph.test.js.map +1 -0
  405. package/dist/tests/time-travel/snapshot.test.d.ts +2 -0
  406. package/dist/tests/time-travel/snapshot.test.d.ts.map +1 -0
  407. package/dist/tests/time-travel/snapshot.test.js +75 -0
  408. package/dist/tests/time-travel/snapshot.test.js.map +1 -0
  409. package/dist/tests/time-travel/store.test.d.ts +2 -0
  410. package/dist/tests/time-travel/store.test.d.ts.map +1 -0
  411. package/dist/tests/time-travel/store.test.js +242 -0
  412. package/dist/tests/time-travel/store.test.js.map +1 -0
  413. package/dist/tests/typecheck-core.test.d.ts +2 -0
  414. package/dist/tests/typecheck-core.test.d.ts.map +1 -0
  415. package/dist/tests/typecheck-core.test.js +339 -0
  416. package/dist/tests/typecheck-core.test.js.map +1 -0
  417. package/dist/text-layer/v2/claim-graph.d.ts +45 -0
  418. package/dist/text-layer/v2/claim-graph.d.ts.map +1 -0
  419. package/dist/text-layer/v2/claim-graph.js +270 -0
  420. package/dist/text-layer/v2/claim-graph.js.map +1 -0
  421. package/dist/text-layer/v2/index.d.ts +6 -0
  422. package/dist/text-layer/v2/index.d.ts.map +1 -0
  423. package/dist/text-layer/v2/index.js +10 -0
  424. package/dist/text-layer/v2/index.js.map +1 -0
  425. package/dist/text-layer/v2/types.d.ts +32 -0
  426. package/dist/text-layer/v2/types.d.ts.map +1 -0
  427. package/dist/text-layer/v2/types.js +11 -0
  428. package/dist/text-layer/v2/types.js.map +1 -0
  429. package/dist/time-travel/index.d.ts +4 -0
  430. package/dist/time-travel/index.d.ts.map +1 -0
  431. package/dist/time-travel/index.js +8 -0
  432. package/dist/time-travel/index.js.map +1 -0
  433. package/dist/time-travel/snapshot.d.ts +9 -0
  434. package/dist/time-travel/snapshot.d.ts.map +1 -0
  435. package/dist/time-travel/snapshot.js +24 -0
  436. package/dist/time-travel/snapshot.js.map +1 -0
  437. package/dist/time-travel/store.d.ts +14 -0
  438. package/dist/time-travel/store.d.ts.map +1 -0
  439. package/dist/time-travel/store.js +119 -0
  440. package/dist/time-travel/store.js.map +1 -0
  441. package/dist/time-travel/types.d.ts +50 -0
  442. package/dist/time-travel/types.d.ts.map +1 -0
  443. package/dist/time-travel/types.js +3 -0
  444. package/dist/time-travel/types.js.map +1 -0
  445. package/package.json +5 -1
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST SMT — Serializador AST de fórmulas → SMT-LIB v2
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ARITHMETIC_KINDS = exports.BOOLEAN_KINDS = void 0;
7
+ exports.defaultSortFor = defaultSortFor;
8
+ exports.toSMTLIB = toSMTLIB;
9
+ exports.inferDeclarations = inferDeclarations;
10
+ exports.emitDeclareConst = emitDeclareConst;
11
+ const ARITHMETIC_KINDS = new Set([
12
+ 'number',
13
+ 'add',
14
+ 'subtract',
15
+ 'multiply',
16
+ 'divide',
17
+ 'modulo',
18
+ 'less',
19
+ 'greater',
20
+ 'less_eq',
21
+ 'greater_eq',
22
+ ]);
23
+ exports.ARITHMETIC_KINDS = ARITHMETIC_KINDS;
24
+ const BOOLEAN_KINDS = new Set([
25
+ 'not',
26
+ 'and',
27
+ 'or',
28
+ 'implies',
29
+ 'biconditional',
30
+ 'nand',
31
+ 'nor',
32
+ 'xor',
33
+ 'true',
34
+ 'false',
35
+ ]);
36
+ exports.BOOLEAN_KINDS = BOOLEAN_KINDS;
37
+ /** Mapeo kind → operador SMT-LIB v2. */
38
+ const SMT_OP = {
39
+ not: 'not',
40
+ and: 'and',
41
+ or: 'or',
42
+ implies: '=>',
43
+ biconditional: '=',
44
+ xor: 'xor',
45
+ add: '+',
46
+ subtract: '-',
47
+ multiply: '*',
48
+ divide: '/',
49
+ modulo: 'mod',
50
+ less: '<',
51
+ greater: '>',
52
+ less_eq: '<=',
53
+ greater_eq: '>=',
54
+ equals: '=',
55
+ };
56
+ /** Identificadores SMT-LIB seguros (letra/_ inicial; resto alfanumérico o `_`). */
57
+ const SAFE_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
58
+ function quoteIdent(name) {
59
+ if (SAFE_IDENT.test(name))
60
+ return name;
61
+ // Identificadores con caracteres no estándar usan la sintaxis pipe-quoted
62
+ // (válida en SMT-LIB v2.6).
63
+ return `|${name.replace(/\|/g, '')}|`;
64
+ }
65
+ /** Selecciona el sort por defecto para una constante a partir de la lógica. */
66
+ function defaultSortFor(logic) {
67
+ switch (logic) {
68
+ case 'QF_LIA':
69
+ case 'AUFLIA':
70
+ return 'Int';
71
+ case 'QF_LRA':
72
+ return 'Real';
73
+ case 'QF_BV':
74
+ return 'BitVec';
75
+ }
76
+ }
77
+ /** Detecta si la fórmula contiene aritmética. */
78
+ function hasArithmetic(f) {
79
+ if (ARITHMETIC_KINDS.has(f.kind))
80
+ return true;
81
+ if (!f.args)
82
+ return false;
83
+ for (const a of f.args) {
84
+ if (hasArithmetic(a))
85
+ return true;
86
+ }
87
+ return false;
88
+ }
89
+ /**
90
+ * Camina el AST y marca el sort esperado de cada átomo.
91
+ * Si un átomo aparece como argumento aritmético, queda marcado como Int/Real;
92
+ * si aparece como argumento booleano, queda como Bool.
93
+ */
94
+ function collectAtomSorts(f, logic, used, expected) {
95
+ const numericSort = defaultSortFor(logic);
96
+ switch (f.kind) {
97
+ case 'atom': {
98
+ const name = f.name ?? '_unnamed';
99
+ if (expected === 'num') {
100
+ // Sólo override si no estaba marcado como Bool ya o si actualizamos a numérico
101
+ used.set(name, used.get(name) === 'Bool' ? 'Bool' : numericSort);
102
+ if (!used.has(name))
103
+ used.set(name, numericSort);
104
+ }
105
+ else {
106
+ if (!used.has(name))
107
+ used.set(name, 'Bool');
108
+ }
109
+ return;
110
+ }
111
+ case 'predicate': {
112
+ const name = f.name ?? '_pred';
113
+ if (!used.has(name))
114
+ used.set(name, 'Bool');
115
+ return;
116
+ }
117
+ case 'number':
118
+ case 'true':
119
+ case 'false':
120
+ return;
121
+ case 'not':
122
+ case 'and':
123
+ case 'or':
124
+ case 'implies':
125
+ case 'biconditional':
126
+ case 'nand':
127
+ case 'nor':
128
+ case 'xor': {
129
+ for (const a of f.args ?? []) {
130
+ collectAtomSorts(a, logic, used, 'bool');
131
+ }
132
+ return;
133
+ }
134
+ case 'less':
135
+ case 'greater':
136
+ case 'less_eq':
137
+ case 'greater_eq':
138
+ case 'add':
139
+ case 'subtract':
140
+ case 'multiply':
141
+ case 'divide':
142
+ case 'modulo': {
143
+ for (const a of f.args ?? []) {
144
+ collectAtomSorts(a, logic, used, 'num');
145
+ }
146
+ return;
147
+ }
148
+ case 'equals': {
149
+ // (= a b) — los hijos deben ser del mismo sort.
150
+ // Si alguno parece numérico (number/aritmético), tratar ambos como num.
151
+ const args = f.args ?? [];
152
+ const anyNum = args.some((a) => ARITHMETIC_KINDS.has(a.kind) || a.kind === 'number');
153
+ const sortHint = anyNum ? 'num' : 'bool';
154
+ for (const a of args) {
155
+ collectAtomSorts(a, logic, used, sortHint);
156
+ }
157
+ return;
158
+ }
159
+ case 'forall':
160
+ case 'exists': {
161
+ for (const a of f.args ?? []) {
162
+ collectAtomSorts(a, logic, used, 'bool');
163
+ }
164
+ return;
165
+ }
166
+ default: {
167
+ for (const a of f.args ?? []) {
168
+ collectAtomSorts(a, logic, used, expected);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ function serializeFormula(f, logic, sorts) {
174
+ switch (f.kind) {
175
+ case 'true':
176
+ return 'true';
177
+ case 'false':
178
+ return 'false';
179
+ case 'atom':
180
+ return quoteIdent(f.name ?? '_unnamed');
181
+ case 'number': {
182
+ const v = f.value ?? 0;
183
+ if (defaultSortFor(logic) === 'Real') {
184
+ return Number.isInteger(v) ? `${v}.0` : `${v}`;
185
+ }
186
+ if (v < 0)
187
+ return `(- ${Math.abs(v)})`;
188
+ return `${v}`;
189
+ }
190
+ case 'predicate': {
191
+ const name = quoteIdent(f.name ?? '_pred');
192
+ const args = (f.args ?? []).map((a) => serializeFormula(a, logic, sorts));
193
+ if (args.length === 0)
194
+ return name;
195
+ return `(${name} ${args.join(' ')})`;
196
+ }
197
+ case 'not': {
198
+ const inner = (f.args ?? [])[0];
199
+ if (!inner)
200
+ return 'true';
201
+ return `(not ${serializeFormula(inner, logic, sorts)})`;
202
+ }
203
+ case 'and':
204
+ case 'or':
205
+ case 'implies':
206
+ case 'biconditional':
207
+ case 'xor':
208
+ case 'add':
209
+ case 'subtract':
210
+ case 'multiply':
211
+ case 'divide':
212
+ case 'modulo':
213
+ case 'less':
214
+ case 'greater':
215
+ case 'less_eq':
216
+ case 'greater_eq':
217
+ case 'equals': {
218
+ const op = SMT_OP[f.kind];
219
+ if (!op)
220
+ throw new Error(`SMT: operador no soportado para kind ${f.kind}`);
221
+ const args = (f.args ?? []).map((a) => serializeFormula(a, logic, sorts));
222
+ if (args.length === 0) {
223
+ if (f.kind === 'and')
224
+ return 'true';
225
+ if (f.kind === 'or')
226
+ return 'false';
227
+ throw new Error(`SMT: operador ${f.kind} sin argumentos`);
228
+ }
229
+ if (args.length === 1 && (f.kind === 'and' || f.kind === 'or')) {
230
+ const first = args[0];
231
+ if (first !== undefined)
232
+ return first;
233
+ }
234
+ return `(${op} ${args.join(' ')})`;
235
+ }
236
+ case 'nand': {
237
+ const args = (f.args ?? []).map((a) => serializeFormula(a, logic, sorts));
238
+ return `(not (and ${args.join(' ')}))`;
239
+ }
240
+ case 'nor': {
241
+ const args = (f.args ?? []).map((a) => serializeFormula(a, logic, sorts));
242
+ return `(not (or ${args.join(' ')}))`;
243
+ }
244
+ case 'forall':
245
+ case 'exists': {
246
+ const op = f.kind === 'forall' ? 'forall' : 'exists';
247
+ const variable = quoteIdent(f.variable ?? 'x');
248
+ const inner = (f.args ?? [])[0];
249
+ const body = inner ? serializeFormula(inner, logic, sorts) : 'true';
250
+ return `(${op} ((${variable} ${defaultSortFor(logic)})) ${body})`;
251
+ }
252
+ case 'modal_necessity':
253
+ case 'modal_possibility':
254
+ case 'temporal_next':
255
+ case 'temporal_until':
256
+ case 'list':
257
+ case 'fn_call':
258
+ throw new Error(`SMT: kind ${f.kind} no es traducible a SMT-LIB v2 puro`);
259
+ }
260
+ }
261
+ /**
262
+ * Traduce una fórmula ST a su representación SMT-LIB v2.
263
+ *
264
+ * Por defecto devuelve sólo el cuerpo (sin set-logic ni check-sat) para que el
265
+ * caller decida cómo ensamblarlo. Con `full: true` produce un script SMT-LIB
266
+ * autocontenido (declaraciones de constantes + assert + check-sat).
267
+ */
268
+ function toSMTLIB(formula, opts = {}) {
269
+ const logic = opts.logic ?? (hasArithmetic(formula) ? 'QF_LRA' : 'AUFLIA');
270
+ const sorts = new Map();
271
+ // Si la fórmula es íntegramente booleana, no hace falta inferir nada.
272
+ collectAtomSorts(formula, logic, sorts, 'bool');
273
+ const body = serializeFormula(formula, logic, sorts);
274
+ if (!opts.full)
275
+ return body;
276
+ const lines = [];
277
+ lines.push(`(set-logic ${logic})`);
278
+ for (const [name, sort] of sorts) {
279
+ if (BOOLEAN_KINDS.has(formula.kind) && sort === 'Bool') {
280
+ lines.push(`(declare-const ${quoteIdent(name)} Bool)`);
281
+ }
282
+ else if (sort === 'BitVec') {
283
+ const width = opts.bvWidth ?? 32;
284
+ lines.push(`(declare-const ${quoteIdent(name)} (_ BitVec ${width}))`);
285
+ }
286
+ else {
287
+ lines.push(`(declare-const ${quoteIdent(name)} ${sort})`);
288
+ }
289
+ }
290
+ lines.push(`(assert ${body})`);
291
+ lines.push('(check-sat)');
292
+ return lines.join('\n');
293
+ }
294
+ /** Extrae las declaraciones inferidas para una fórmula. Útil para el backend. */
295
+ function inferDeclarations(formula, logic) {
296
+ const chosen = logic ?? (hasArithmetic(formula) ? 'QF_LRA' : 'AUFLIA');
297
+ const sorts = new Map();
298
+ collectAtomSorts(formula, chosen, sorts, 'bool');
299
+ const decls = [];
300
+ for (const [name, sort] of sorts) {
301
+ decls.push({ name, sort });
302
+ }
303
+ return decls;
304
+ }
305
+ /** Helper público para emitir una declaración SMT-LIB. */
306
+ function emitDeclareConst(name, sort, bvWidth) {
307
+ const safe = quoteIdent(name);
308
+ if (sort === 'BitVec') {
309
+ const width = bvWidth ?? 32;
310
+ return `(declare-const ${safe} (_ BitVec ${width}))`;
311
+ }
312
+ return `(declare-const ${safe} ${sort})`;
313
+ }
314
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/runtime/smt/serializer.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,qDAAqD;AACrD,+DAA+D;;;AA8D/D,wCAUC;AA4LD,4BA0BC;AAGD,8CASC;AAGD,4CAOC;AA/SD,MAAM,gBAAgB,GAA6B,IAAI,GAAG,CAAc;IACtE,QAAQ;IACR,KAAK;IACL,UAAU;IACV,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,SAAS;IACT,YAAY;CACb,CAAC,CAAC;AAuSqB,4CAAgB;AArSxC,MAAM,aAAa,GAA6B,IAAI,GAAG,CAAc;IACnE,KAAK;IACL,KAAK;IACL,IAAI;IACJ,SAAS;IACT,eAAe;IACf,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,OAAO;CACR,CAAC,CAAC;AA0RM,sCAAa;AAxRtB,wCAAwC;AACxC,MAAM,MAAM,GAAyC;IACnD,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,GAAG;IAClB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,GAAG;IACR,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,mFAAmF;AACnF,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,0EAA0E;IAC1E,4BAA4B;IAC5B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,SAAgB,cAAc,CAAC,KAAe;IAC5C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,aAAa,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,CAAU,EACV,KAAe,EACf,IAA0B,EAC1B,QAAwB;IAExB,MAAM,WAAW,GAAY,cAAc,CAAC,KAAK,CAAC,CAAC;IAEnD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC;YAClC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,+EAA+E;gBAC/E,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO;QACT,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,IAAI,CAAC;QACV,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,KAAK,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,gDAAgD;YAChD,wEAAwE;YACxE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAmB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU,EAAE,KAAe,EAAE,KAA2B;IAChF,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;QAC1C,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACvB,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBACrC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,CAAC;YACD,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACvC,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK;gBAAE,OAAO,MAAM,CAAC;YAC1B,OAAO,QAAQ,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;QAC1D,CAAC;QACD,KAAK,KAAK,CAAC;QACX,KAAK,IAAI,CAAC;QACV,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;oBAAE,OAAO,MAAM,CAAC;gBACpC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;oBAAE,OAAO,OAAO,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;YACxC,CAAC;YACD,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACrC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,OAAO,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACzC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACxC,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,OAAO,IAAI,EAAE,MAAM,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;QACpE,CAAC;QACD,KAAK,iBAAiB,CAAC;QACvB,KAAK,mBAAmB,CAAC;QACzB,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC;QACtB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,qCAAqC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,OAAgB,EAAE,OAAwB,EAAE;IACnE,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEzC,sEAAsE;IACtE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,GAAG,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,iFAAiF;AACjF,SAAgB,iBAAiB,CAAC,OAAgB,EAAE,KAAgB;IAClE,MAAM,MAAM,GAAa,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0DAA0D;AAC1D,SAAgB,gBAAgB,CAAC,IAAY,EAAE,IAAa,EAAE,OAAgB;IAC5E,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE,CAAC;QAC5B,OAAO,kBAAkB,IAAI,cAAc,KAAK,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,kBAAkB,IAAI,IAAI,IAAI,GAAG,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { ConstDeclaration, DetectedSolver, DetectionResult, SMTBackend, SMTModel, SMTResult, SMTSort } from './types';
2
+ type WhichRunner = (bin: string) => string | undefined;
3
+ /**
4
+ * Detecta si hay un solver SMT (z3 o cvc5) disponible en el PATH.
5
+ * No lanza excepción: si no hay solver, devuelve 'none'.
6
+ */
7
+ export declare function detectAvailableSMT(): Promise<DetectedSolver>;
8
+ /** Variante síncrona que también devuelve el path resuelto. */
9
+ export declare function detectAvailableSMTDetailed(which?: WhichRunner): DetectionResult;
10
+ export interface SubprocessBackendOptions {
11
+ /** Timeout en ms para cada check-sat. Default 5000. */
12
+ timeoutMs?: number;
13
+ /** Solver forzado (en lugar de detectar). */
14
+ prefer?: DetectedSolver;
15
+ /** Inyector de `which` para tests. */
16
+ which?: WhichRunner;
17
+ /** Si true, levanta warning a console.warn cuando cae a no-op. */
18
+ warnOnUnavailable?: boolean;
19
+ }
20
+ /**
21
+ * SubprocessSMTBackend invoca `z3 -in` (o cvc5 equivalente) por stdio.
22
+ *
23
+ * Si no encuentra solver, queda en modo no-op:
24
+ * - checkSat() devuelve 'unknown'
25
+ * - getModel() devuelve undefined
26
+ * - getUnsatCore() devuelve []
27
+ *
28
+ * El backend acumula declaraciones y asserts en memoria y los envía al solver
29
+ * en cada checkSat. No mantiene proceso persistente para no introducir leaks
30
+ * en tests; el costo de re-arrancar z3 es <50ms por call y es aceptable.
31
+ */
32
+ export declare class SubprocessSMTBackend implements SMTBackend {
33
+ readonly name: string;
34
+ private scopes;
35
+ private lastModel;
36
+ private lastUnsatCore;
37
+ private readonly available;
38
+ private readonly binaryPath;
39
+ private readonly solver;
40
+ private readonly timeoutMs;
41
+ private warnedUnavailable;
42
+ private readonly warnOnUnavailable;
43
+ constructor(opts?: SubprocessBackendOptions);
44
+ reset(): void;
45
+ push(): void;
46
+ pop(levels?: number): void;
47
+ declareConst(name: string, sort: SMTSort): void;
48
+ /** Versión interna para inyectar declaraciones detectadas por el serializer. */
49
+ declareFromInference(decls: ConstDeclaration[]): void;
50
+ assertFormula(smtlib: string): void;
51
+ isAvailable(): boolean;
52
+ checkSat(): SMTResult;
53
+ getModel(): SMTModel | undefined;
54
+ getUnsatCore(): string[];
55
+ private currentScope;
56
+ private buildScript;
57
+ private formatDecl;
58
+ private runSolver;
59
+ private parseOutput;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=subprocess-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess-backend.d.ts","sourceRoot":"","sources":["../../../src/runtime/smt/subprocess-backend.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACV,QAAQ,EACR,SAAS,EAET,OAAO,EACR,MAAM,SAAS,CAAC;AAEjB,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AA6BvD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAG5D;AAED,+DAA+D;AAC/D,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,WAA0B,GAAG,eAAe,CAc7F;AAED,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,sCAAsC;IACtC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAEhC,IAAI,GAAE,wBAA6B;IAwB/C,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAIZ,GAAG,CAAC,MAAM,SAAI,GAAG,IAAI;IAOrB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAK/C,gFAAgF;IAChF,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IASrD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKnC,WAAW,IAAI,OAAO;IAItB,QAAQ,IAAI,SAAS;IAqBrB,QAAQ,IAAI,QAAQ,GAAG,SAAS;IAIhC,YAAY,IAAI,MAAM,EAAE;IAIxB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,WAAW;CAmBpB"}
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST SMT — Backend basado en subprocess (z3 / cvc5 via stdio)
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SubprocessSMTBackend = void 0;
7
+ exports.detectAvailableSMT = detectAvailableSMT;
8
+ exports.detectAvailableSMTDetailed = detectAvailableSMTDetailed;
9
+ const child_process_1 = require("child_process");
10
+ /** Resuelve el path absoluto de un binario en `PATH` usando `which` puro. */
11
+ function defaultWhich(bin) {
12
+ if (typeof process === 'undefined')
13
+ return undefined;
14
+ const pathEnv = process.env.PATH ?? '';
15
+ if (!pathEnv)
16
+ return undefined;
17
+ const sep = process.platform === 'win32' ? ';' : ':';
18
+ const dirs = pathEnv.split(sep);
19
+ for (const dir of dirs) {
20
+ if (!dir)
21
+ continue;
22
+ try {
23
+ // Sólo intentamos `spawnSync` con `--version` para no requerir `fs.existsSync`
24
+ // (mantiene el módulo browser-friendly excepto por child_process).
25
+ }
26
+ catch {
27
+ continue;
28
+ }
29
+ }
30
+ // Estrategia simple: pedir al shell que resuelva el binario.
31
+ const opts = { encoding: 'utf8', timeout: 1000 };
32
+ const cmd = process.platform === 'win32' ? 'where' : 'which';
33
+ const result = (0, child_process_1.spawnSync)(cmd, [bin], opts);
34
+ if (result.status === 0 && typeof result.stdout === 'string') {
35
+ const first = result.stdout.split('\n')[0]?.trim();
36
+ if (first && first.length > 0)
37
+ return first;
38
+ }
39
+ return undefined;
40
+ }
41
+ /**
42
+ * Detecta si hay un solver SMT (z3 o cvc5) disponible en el PATH.
43
+ * No lanza excepción: si no hay solver, devuelve 'none'.
44
+ */
45
+ function detectAvailableSMT() {
46
+ const result = detectAvailableSMTDetailed();
47
+ return Promise.resolve(result.solver);
48
+ }
49
+ /** Variante síncrona que también devuelve el path resuelto. */
50
+ function detectAvailableSMTDetailed(which = defaultWhich) {
51
+ try {
52
+ const z3 = which('z3');
53
+ if (z3)
54
+ return { solver: 'z3', binaryPath: z3 };
55
+ }
56
+ catch {
57
+ // ignore
58
+ }
59
+ try {
60
+ const cvc5 = which('cvc5');
61
+ if (cvc5)
62
+ return { solver: 'cvc5', binaryPath: cvc5 };
63
+ }
64
+ catch {
65
+ // ignore
66
+ }
67
+ return { solver: 'none' };
68
+ }
69
+ /**
70
+ * SubprocessSMTBackend invoca `z3 -in` (o cvc5 equivalente) por stdio.
71
+ *
72
+ * Si no encuentra solver, queda en modo no-op:
73
+ * - checkSat() devuelve 'unknown'
74
+ * - getModel() devuelve undefined
75
+ * - getUnsatCore() devuelve []
76
+ *
77
+ * El backend acumula declaraciones y asserts en memoria y los envía al solver
78
+ * en cada checkSat. No mantiene proceso persistente para no introducir leaks
79
+ * en tests; el costo de re-arrancar z3 es <50ms por call y es aceptable.
80
+ */
81
+ class SubprocessSMTBackend {
82
+ name;
83
+ scopes = [{ decls: [], assertions: [] }];
84
+ lastModel;
85
+ lastUnsatCore = [];
86
+ available;
87
+ binaryPath;
88
+ solver;
89
+ timeoutMs;
90
+ warnedUnavailable = false;
91
+ warnOnUnavailable;
92
+ constructor(opts = {}) {
93
+ const which = opts.which ?? defaultWhich;
94
+ this.timeoutMs = opts.timeoutMs ?? 5000;
95
+ this.warnOnUnavailable = opts.warnOnUnavailable ?? true;
96
+ const preferred = opts.prefer;
97
+ if (preferred && preferred !== 'none') {
98
+ const path = which(preferred);
99
+ if (path) {
100
+ this.solver = preferred;
101
+ this.binaryPath = path;
102
+ this.available = true;
103
+ this.name = `subprocess:${preferred}`;
104
+ return;
105
+ }
106
+ }
107
+ const detected = detectAvailableSMTDetailed(which);
108
+ this.solver = detected.solver;
109
+ this.binaryPath = detected.binaryPath;
110
+ this.available = detected.solver !== 'none';
111
+ this.name = this.available ? `subprocess:${detected.solver}` : 'subprocess:noop';
112
+ }
113
+ reset() {
114
+ this.scopes = [{ decls: [], assertions: [] }];
115
+ this.lastModel = undefined;
116
+ this.lastUnsatCore = [];
117
+ }
118
+ push() {
119
+ this.scopes.push({ decls: [], assertions: [] });
120
+ }
121
+ pop(levels = 1) {
122
+ for (let i = 0; i < levels; i += 1) {
123
+ if (this.scopes.length <= 1)
124
+ break;
125
+ this.scopes.pop();
126
+ }
127
+ }
128
+ declareConst(name, sort) {
129
+ const top = this.currentScope();
130
+ top.decls.push({ name, sort });
131
+ }
132
+ /** Versión interna para inyectar declaraciones detectadas por el serializer. */
133
+ declareFromInference(decls) {
134
+ const top = this.currentScope();
135
+ for (const d of decls) {
136
+ if (!top.decls.some((existing) => existing.name === d.name)) {
137
+ top.decls.push(d);
138
+ }
139
+ }
140
+ }
141
+ assertFormula(smtlib) {
142
+ const top = this.currentScope();
143
+ top.assertions.push({ body: smtlib });
144
+ }
145
+ isAvailable() {
146
+ return this.available;
147
+ }
148
+ checkSat() {
149
+ if (!this.available) {
150
+ if (this.warnOnUnavailable && !this.warnedUnavailable) {
151
+ this.warnedUnavailable = true;
152
+ console.warn('[smt] No se encontró z3 ni cvc5 en PATH. SubprocessSMTBackend opera en modo no-op (checkSat → unknown).');
153
+ }
154
+ this.lastModel = undefined;
155
+ return 'unknown';
156
+ }
157
+ const script = this.buildScript();
158
+ const result = this.runSolver(script);
159
+ if (!result) {
160
+ this.lastModel = undefined;
161
+ return 'unknown';
162
+ }
163
+ return result;
164
+ }
165
+ getModel() {
166
+ return this.lastModel ? { ...this.lastModel } : undefined;
167
+ }
168
+ getUnsatCore() {
169
+ return [...this.lastUnsatCore];
170
+ }
171
+ currentScope() {
172
+ const top = this.scopes[this.scopes.length - 1];
173
+ if (!top) {
174
+ const fresh = { decls: [], assertions: [] };
175
+ this.scopes.push(fresh);
176
+ return fresh;
177
+ }
178
+ return top;
179
+ }
180
+ buildScript() {
181
+ const lines = [];
182
+ lines.push('(set-option :produce-models true)');
183
+ for (const scope of this.scopes) {
184
+ for (const d of scope.decls) {
185
+ lines.push(this.formatDecl(d));
186
+ }
187
+ for (const a of scope.assertions) {
188
+ lines.push(`(assert ${a.body})`);
189
+ }
190
+ }
191
+ lines.push('(check-sat)');
192
+ lines.push('(get-model)');
193
+ return lines.join('\n');
194
+ }
195
+ formatDecl(d) {
196
+ if (d.sort === 'BitVec') {
197
+ const width = d.bvWidth ?? 32;
198
+ return `(declare-const ${d.name} (_ BitVec ${width}))`;
199
+ }
200
+ return `(declare-const ${d.name} ${d.sort})`;
201
+ }
202
+ runSolver(script) {
203
+ if (!this.binaryPath)
204
+ return undefined;
205
+ const args = this.solver === 'z3' ? ['-in'] : ['--lang=smt2'];
206
+ const result = (0, child_process_1.spawnSync)(this.binaryPath, args, {
207
+ input: script,
208
+ encoding: 'utf8',
209
+ timeout: this.timeoutMs,
210
+ });
211
+ if (result.error || typeof result.stdout !== 'string') {
212
+ return undefined;
213
+ }
214
+ return this.parseOutput(result.stdout);
215
+ }
216
+ parseOutput(stdout) {
217
+ const lines = stdout.split('\n');
218
+ let status;
219
+ for (const line of lines) {
220
+ const t = line.trim();
221
+ if (t === 'sat' || t === 'unsat' || t === 'unknown') {
222
+ status = t;
223
+ break;
224
+ }
225
+ }
226
+ if (!status)
227
+ return undefined;
228
+ if (status === 'sat') {
229
+ this.lastModel = parseModel(stdout);
230
+ }
231
+ else {
232
+ this.lastModel = undefined;
233
+ }
234
+ return status;
235
+ }
236
+ }
237
+ exports.SubprocessSMTBackend = SubprocessSMTBackend;
238
+ /** Parser muy simple de `(model ...)` para variables atómicas. */
239
+ function parseModel(stdout) {
240
+ const model = {};
241
+ const defineFn = /\(define-fun\s+([^\s()]+)\s+\(\)\s+(?:Bool|Int|Real|\(_\sBitVec[^)]+\))\s+([^)]+)\)/g;
242
+ let match = defineFn.exec(stdout);
243
+ while (match) {
244
+ const name = match[1];
245
+ const rawValue = match[2];
246
+ if (name && rawValue !== undefined) {
247
+ const trimmed = rawValue.trim();
248
+ if (trimmed === 'true')
249
+ model[name] = true;
250
+ else if (trimmed === 'false')
251
+ model[name] = false;
252
+ else {
253
+ const num = Number(trimmed);
254
+ model[name] = Number.isNaN(num) ? trimmed : num;
255
+ }
256
+ }
257
+ match = defineFn.exec(stdout);
258
+ }
259
+ return Object.keys(model).length > 0 ? model : undefined;
260
+ }
261
+ //# sourceMappingURL=subprocess-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess-backend.js","sourceRoot":"","sources":["../../../src/runtime/smt/subprocess-backend.ts"],"names":[],"mappings":"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"}