@stevenvo780/st-lang 4.0.1 → 4.2.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 (393) hide show
  1. package/dist/belief-revision/agm.d.ts +76 -0
  2. package/dist/belief-revision/agm.d.ts.map +1 -0
  3. package/dist/belief-revision/agm.js +249 -0
  4. package/dist/belief-revision/agm.js.map +1 -0
  5. package/dist/belief-revision/index.d.ts +6 -0
  6. package/dist/belief-revision/index.d.ts.map +1 -0
  7. package/dist/belief-revision/index.js +33 -0
  8. package/dist/belief-revision/index.js.map +1 -0
  9. package/dist/belief-revision/parser.d.ts +16 -0
  10. package/dist/belief-revision/parser.d.ts.map +1 -0
  11. package/dist/belief-revision/parser.js +199 -0
  12. package/dist/belief-revision/parser.js.map +1 -0
  13. package/dist/belief-revision/sat.d.ts +19 -0
  14. package/dist/belief-revision/sat.d.ts.map +1 -0
  15. package/dist/belief-revision/sat.js +90 -0
  16. package/dist/belief-revision/sat.js.map +1 -0
  17. package/dist/belief-revision/types.d.ts +51 -0
  18. package/dist/belief-revision/types.d.ts.map +1 -0
  19. package/dist/belief-revision/types.js +10 -0
  20. package/dist/belief-revision/types.js.map +1 -0
  21. package/dist/curry-howard/index.d.ts +7 -0
  22. package/dist/curry-howard/index.d.ts.map +1 -0
  23. package/dist/curry-howard/index.js +46 -0
  24. package/dist/curry-howard/index.js.map +1 -0
  25. package/dist/curry-howard/infer.d.ts +9 -0
  26. package/dist/curry-howard/infer.d.ts.map +1 -0
  27. package/dist/curry-howard/infer.js +129 -0
  28. package/dist/curry-howard/infer.js.map +1 -0
  29. package/dist/curry-howard/proof.d.ts +7 -0
  30. package/dist/curry-howard/proof.d.ts.map +1 -0
  31. package/dist/curry-howard/proof.js +282 -0
  32. package/dist/curry-howard/proof.js.map +1 -0
  33. package/dist/curry-howard/reduce.d.ts +7 -0
  34. package/dist/curry-howard/reduce.d.ts.map +1 -0
  35. package/dist/curry-howard/reduce.js +266 -0
  36. package/dist/curry-howard/reduce.js.map +1 -0
  37. package/dist/curry-howard/types.d.ts +91 -0
  38. package/dist/curry-howard/types.d.ts.map +1 -0
  39. package/dist/curry-howard/types.js +149 -0
  40. package/dist/curry-howard/types.js.map +1 -0
  41. package/dist/fol-prover-equality/demodulate.d.ts +29 -0
  42. package/dist/fol-prover-equality/demodulate.d.ts.map +1 -0
  43. package/dist/fol-prover-equality/demodulate.js +197 -0
  44. package/dist/fol-prover-equality/demodulate.js.map +1 -0
  45. package/dist/fol-prover-equality/index.d.ts +8 -0
  46. package/dist/fol-prover-equality/index.d.ts.map +1 -0
  47. package/dist/fol-prover-equality/index.js +24 -0
  48. package/dist/fol-prover-equality/index.js.map +1 -0
  49. package/dist/fol-prover-equality/paramodulate.d.ts +46 -0
  50. package/dist/fol-prover-equality/paramodulate.d.ts.map +1 -0
  51. package/dist/fol-prover-equality/paramodulate.js +159 -0
  52. package/dist/fol-prover-equality/paramodulate.js.map +1 -0
  53. package/dist/fol-prover-equality/prove.d.ts +7 -0
  54. package/dist/fol-prover-equality/prove.d.ts.map +1 -0
  55. package/dist/fol-prover-equality/prove.js +307 -0
  56. package/dist/fol-prover-equality/prove.js.map +1 -0
  57. package/dist/fol-prover-equality/term-utils.d.ts +43 -0
  58. package/dist/fol-prover-equality/term-utils.d.ts.map +1 -0
  59. package/dist/fol-prover-equality/term-utils.js +230 -0
  60. package/dist/fol-prover-equality/term-utils.js.map +1 -0
  61. package/dist/fol-prover-equality/types.d.ts +20 -0
  62. package/dist/fol-prover-equality/types.d.ts.map +1 -0
  63. package/dist/fol-prover-equality/types.js +5 -0
  64. package/dist/fol-prover-equality/types.js.map +1 -0
  65. package/dist/index.d.ts +4 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +18 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/profiles/ctl/check.d.ts +13 -0
  70. package/dist/profiles/ctl/check.d.ts.map +1 -0
  71. package/dist/profiles/ctl/check.js +359 -0
  72. package/dist/profiles/ctl/check.js.map +1 -0
  73. package/dist/profiles/ctl/index.d.ts +5 -0
  74. package/dist/profiles/ctl/index.d.ts.map +1 -0
  75. package/dist/profiles/ctl/index.js +23 -0
  76. package/dist/profiles/ctl/index.js.map +1 -0
  77. package/dist/profiles/ctl/types.d.ts +74 -0
  78. package/dist/profiles/ctl/types.d.ts.map +1 -0
  79. package/dist/profiles/ctl/types.js +53 -0
  80. package/dist/profiles/ctl/types.js.map +1 -0
  81. package/dist/profiles/ctl/witness.d.ts +20 -0
  82. package/dist/profiles/ctl/witness.d.ts.map +1 -0
  83. package/dist/profiles/ctl/witness.js +149 -0
  84. package/dist/profiles/ctl/witness.js.map +1 -0
  85. package/dist/profiles/default-logic/entailment.d.ts +14 -0
  86. package/dist/profiles/default-logic/entailment.d.ts.map +1 -0
  87. package/dist/profiles/default-logic/entailment.js +36 -0
  88. package/dist/profiles/default-logic/entailment.js.map +1 -0
  89. package/dist/profiles/default-logic/extensions.d.ts +35 -0
  90. package/dist/profiles/default-logic/extensions.d.ts.map +1 -0
  91. package/dist/profiles/default-logic/extensions.js +276 -0
  92. package/dist/profiles/default-logic/extensions.js.map +1 -0
  93. package/dist/profiles/default-logic/index.d.ts +5 -0
  94. package/dist/profiles/default-logic/index.d.ts.map +1 -0
  95. package/dist/profiles/default-logic/index.js +33 -0
  96. package/dist/profiles/default-logic/index.js.map +1 -0
  97. package/dist/profiles/default-logic/types.d.ts +29 -0
  98. package/dist/profiles/default-logic/types.d.ts.map +1 -0
  99. package/dist/profiles/default-logic/types.js +25 -0
  100. package/dist/profiles/default-logic/types.js.map +1 -0
  101. package/dist/profiles/description-logic/index.d.ts +5 -0
  102. package/dist/profiles/description-logic/index.d.ts.map +1 -0
  103. package/dist/profiles/description-logic/index.js +39 -0
  104. package/dist/profiles/description-logic/index.js.map +1 -0
  105. package/dist/profiles/description-logic/nnf.d.ts +13 -0
  106. package/dist/profiles/description-logic/nnf.d.ts.map +1 -0
  107. package/dist/profiles/description-logic/nnf.js +123 -0
  108. package/dist/profiles/description-logic/nnf.js.map +1 -0
  109. package/dist/profiles/description-logic/tableau.d.ts +27 -0
  110. package/dist/profiles/description-logic/tableau.d.ts.map +1 -0
  111. package/dist/profiles/description-logic/tableau.js +491 -0
  112. package/dist/profiles/description-logic/tableau.js.map +1 -0
  113. package/dist/profiles/description-logic/types.d.ts +45 -0
  114. package/dist/profiles/description-logic/types.d.ts.map +1 -0
  115. package/dist/profiles/description-logic/types.js +71 -0
  116. package/dist/profiles/description-logic/types.js.map +1 -0
  117. package/dist/profiles/hybrid-logic/index.d.ts +5 -0
  118. package/dist/profiles/hybrid-logic/index.d.ts.map +1 -0
  119. package/dist/profiles/hybrid-logic/index.js +34 -0
  120. package/dist/profiles/hybrid-logic/index.js.map +1 -0
  121. package/dist/profiles/hybrid-logic/sat.d.ts +15 -0
  122. package/dist/profiles/hybrid-logic/sat.d.ts.map +1 -0
  123. package/dist/profiles/hybrid-logic/sat.js +142 -0
  124. package/dist/profiles/hybrid-logic/sat.js.map +1 -0
  125. package/dist/profiles/hybrid-logic/semantics.d.ts +20 -0
  126. package/dist/profiles/hybrid-logic/semantics.d.ts.map +1 -0
  127. package/dist/profiles/hybrid-logic/semantics.js +107 -0
  128. package/dist/profiles/hybrid-logic/semantics.js.map +1 -0
  129. package/dist/profiles/hybrid-logic/types.d.ts +78 -0
  130. package/dist/profiles/hybrid-logic/types.d.ts.map +1 -0
  131. package/dist/profiles/hybrid-logic/types.js +107 -0
  132. package/dist/profiles/hybrid-logic/types.js.map +1 -0
  133. package/dist/profiles/ltl-sat/index.d.ts +4 -0
  134. package/dist/profiles/ltl-sat/index.d.ts.map +1 -0
  135. package/dist/profiles/ltl-sat/index.js +40 -0
  136. package/dist/profiles/ltl-sat/index.js.map +1 -0
  137. package/dist/profiles/ltl-sat/sat.d.ts +8 -0
  138. package/dist/profiles/ltl-sat/sat.d.ts.map +1 -0
  139. package/dist/profiles/ltl-sat/sat.js +140 -0
  140. package/dist/profiles/ltl-sat/sat.js.map +1 -0
  141. package/dist/profiles/ltl-sat/tableau.d.ts +19 -0
  142. package/dist/profiles/ltl-sat/tableau.d.ts.map +1 -0
  143. package/dist/profiles/ltl-sat/tableau.js +358 -0
  144. package/dist/profiles/ltl-sat/tableau.js.map +1 -0
  145. package/dist/profiles/ltl-sat/types.d.ts +52 -0
  146. package/dist/profiles/ltl-sat/types.d.ts.map +1 -0
  147. package/dist/profiles/ltl-sat/types.js +101 -0
  148. package/dist/profiles/ltl-sat/types.js.map +1 -0
  149. package/dist/profiles/sequent-g3/index.d.ts +5 -0
  150. package/dist/profiles/sequent-g3/index.d.ts.map +1 -0
  151. package/dist/profiles/sequent-g3/index.js +23 -0
  152. package/dist/profiles/sequent-g3/index.js.map +1 -0
  153. package/dist/profiles/sequent-g3/latex.d.ts +7 -0
  154. package/dist/profiles/sequent-g3/latex.d.ts.map +1 -0
  155. package/dist/profiles/sequent-g3/latex.js +107 -0
  156. package/dist/profiles/sequent-g3/latex.js.map +1 -0
  157. package/dist/profiles/sequent-g3/normalize.d.ts +15 -0
  158. package/dist/profiles/sequent-g3/normalize.d.ts.map +1 -0
  159. package/dist/profiles/sequent-g3/normalize.js +121 -0
  160. package/dist/profiles/sequent-g3/normalize.js.map +1 -0
  161. package/dist/profiles/sequent-g3/prover.d.ts +16 -0
  162. package/dist/profiles/sequent-g3/prover.d.ts.map +1 -0
  163. package/dist/profiles/sequent-g3/prover.js +348 -0
  164. package/dist/profiles/sequent-g3/prover.js.map +1 -0
  165. package/dist/profiles/sequent-g3/types.d.ts +30 -0
  166. package/dist/profiles/sequent-g3/types.d.ts.map +1 -0
  167. package/dist/profiles/sequent-g3/types.js +16 -0
  168. package/dist/profiles/sequent-g3/types.js.map +1 -0
  169. package/dist/runtime/countermodel-min/index.d.ts +3 -0
  170. package/dist/runtime/countermodel-min/index.d.ts.map +1 -0
  171. package/dist/runtime/countermodel-min/index.js +9 -0
  172. package/dist/runtime/countermodel-min/index.js.map +1 -0
  173. package/dist/runtime/countermodel-min/minimize.d.ts +17 -0
  174. package/dist/runtime/countermodel-min/minimize.d.ts.map +1 -0
  175. package/dist/runtime/countermodel-min/minimize.js +0 -0
  176. package/dist/runtime/countermodel-min/minimize.js.map +1 -0
  177. package/dist/runtime/countermodel-min/types.d.ts +40 -0
  178. package/dist/runtime/countermodel-min/types.d.ts.map +1 -0
  179. package/dist/runtime/countermodel-min/types.js +6 -0
  180. package/dist/runtime/countermodel-min/types.js.map +1 -0
  181. package/dist/runtime/mus/extract.d.ts +34 -0
  182. package/dist/runtime/mus/extract.d.ts.map +1 -0
  183. package/dist/runtime/mus/extract.js +243 -0
  184. package/dist/runtime/mus/extract.js.map +1 -0
  185. package/dist/runtime/mus/index.d.ts +4 -0
  186. package/dist/runtime/mus/index.d.ts.map +1 -0
  187. package/dist/runtime/mus/index.js +12 -0
  188. package/dist/runtime/mus/index.js.map +1 -0
  189. package/dist/runtime/mus/quickxplain.d.ts +10 -0
  190. package/dist/runtime/mus/quickxplain.d.ts.map +1 -0
  191. package/dist/runtime/mus/quickxplain.js +100 -0
  192. package/dist/runtime/mus/quickxplain.js.map +1 -0
  193. package/dist/runtime/mus/types.d.ts +59 -0
  194. package/dist/runtime/mus/types.d.ts.map +1 -0
  195. package/dist/runtime/mus/types.js +20 -0
  196. package/dist/runtime/mus/types.js.map +1 -0
  197. package/dist/solver/cdcl-v2-incremental/index.d.ts +3 -0
  198. package/dist/solver/cdcl-v2-incremental/index.d.ts.map +1 -0
  199. package/dist/solver/cdcl-v2-incremental/index.js +16 -0
  200. package/dist/solver/cdcl-v2-incremental/index.js.map +1 -0
  201. package/dist/solver/cdcl-v2-incremental/solver.d.ts +83 -0
  202. package/dist/solver/cdcl-v2-incremental/solver.d.ts.map +1 -0
  203. package/dist/solver/cdcl-v2-incremental/solver.js +727 -0
  204. package/dist/solver/cdcl-v2-incremental/solver.js.map +1 -0
  205. package/dist/solver/cdcl-v2-incremental/types.d.ts +47 -0
  206. package/dist/solver/cdcl-v2-incremental/types.d.ts.map +1 -0
  207. package/dist/solver/cdcl-v2-incremental/types.js +13 -0
  208. package/dist/solver/cdcl-v2-incremental/types.js.map +1 -0
  209. package/dist/tests/belief-revision/agm.test.d.ts +2 -0
  210. package/dist/tests/belief-revision/agm.test.d.ts.map +1 -0
  211. package/dist/tests/belief-revision/agm.test.js +173 -0
  212. package/dist/tests/belief-revision/agm.test.js.map +1 -0
  213. package/dist/tests/countermodel-min/minimize.test.d.ts +2 -0
  214. package/dist/tests/countermodel-min/minimize.test.d.ts.map +1 -0
  215. package/dist/tests/countermodel-min/minimize.test.js +241 -0
  216. package/dist/tests/countermodel-min/minimize.test.js.map +1 -0
  217. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts +2 -0
  218. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts.map +1 -0
  219. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js +255 -0
  220. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js.map +1 -0
  221. package/dist/tests/coverage-95/argumentation.test.d.ts +2 -0
  222. package/dist/tests/coverage-95/argumentation.test.d.ts.map +1 -0
  223. package/dist/tests/coverage-95/argumentation.test.js +105 -0
  224. package/dist/tests/coverage-95/argumentation.test.js.map +1 -0
  225. package/dist/tests/coverage-95/arithmetic.test.d.ts +2 -0
  226. package/dist/tests/coverage-95/arithmetic.test.d.ts.map +1 -0
  227. package/dist/tests/coverage-95/arithmetic.test.js +139 -0
  228. package/dist/tests/coverage-95/arithmetic.test.js.map +1 -0
  229. package/dist/tests/coverage-95/belnap.test.d.ts +2 -0
  230. package/dist/tests/coverage-95/belnap.test.d.ts.map +1 -0
  231. package/dist/tests/coverage-95/belnap.test.js +145 -0
  232. package/dist/tests/coverage-95/belnap.test.js.map +1 -0
  233. package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts +2 -0
  234. package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts.map +1 -0
  235. package/dist/tests/coverage-95/cdcl-v2-solver.test.js +61 -0
  236. package/dist/tests/coverage-95/cdcl-v2-solver.test.js.map +1 -0
  237. package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts +2 -0
  238. package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts.map +1 -0
  239. package/dist/tests/coverage-95/classical-propositional-direct.test.js +175 -0
  240. package/dist/tests/coverage-95/classical-propositional-direct.test.js.map +1 -0
  241. package/dist/tests/coverage-95/compat.test.d.ts +2 -0
  242. package/dist/tests/coverage-95/compat.test.d.ts.map +1 -0
  243. package/dist/tests/coverage-95/compat.test.js +82 -0
  244. package/dist/tests/coverage-95/compat.test.js.map +1 -0
  245. package/dist/tests/coverage-95/examples-runner.test.d.ts +2 -0
  246. package/dist/tests/coverage-95/examples-runner.test.d.ts.map +1 -0
  247. package/dist/tests/coverage-95/examples-runner.test.js +34 -0
  248. package/dist/tests/coverage-95/examples-runner.test.js.map +1 -0
  249. package/dist/tests/coverage-95/first-order.test.d.ts +2 -0
  250. package/dist/tests/coverage-95/first-order.test.d.ts.map +1 -0
  251. package/dist/tests/coverage-95/first-order.test.js +138 -0
  252. package/dist/tests/coverage-95/first-order.test.js.map +1 -0
  253. package/dist/tests/coverage-95/fol-prover.test.d.ts +2 -0
  254. package/dist/tests/coverage-95/fol-prover.test.d.ts.map +1 -0
  255. package/dist/tests/coverage-95/fol-prover.test.js +228 -0
  256. package/dist/tests/coverage-95/fol-prover.test.js.map +1 -0
  257. package/dist/tests/coverage-95/interpreter-commands.test.d.ts +2 -0
  258. package/dist/tests/coverage-95/interpreter-commands.test.d.ts.map +1 -0
  259. package/dist/tests/coverage-95/interpreter-commands.test.js +332 -0
  260. package/dist/tests/coverage-95/interpreter-commands.test.js.map +1 -0
  261. package/dist/tests/coverage-95/lsp-server.test.d.ts +2 -0
  262. package/dist/tests/coverage-95/lsp-server.test.d.ts.map +1 -0
  263. package/dist/tests/coverage-95/lsp-server.test.js +181 -0
  264. package/dist/tests/coverage-95/lsp-server.test.js.map +1 -0
  265. package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts +2 -0
  266. package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts.map +1 -0
  267. package/dist/tests/coverage-95/modal-tableau-profiles.test.js +157 -0
  268. package/dist/tests/coverage-95/modal-tableau-profiles.test.js.map +1 -0
  269. package/dist/tests/coverage-95/parallel-sat.test.d.ts +2 -0
  270. package/dist/tests/coverage-95/parallel-sat.test.d.ts.map +1 -0
  271. package/dist/tests/coverage-95/parallel-sat.test.js +42 -0
  272. package/dist/tests/coverage-95/parallel-sat.test.js.map +1 -0
  273. package/dist/tests/coverage-95/parser-extra.test.d.ts +2 -0
  274. package/dist/tests/coverage-95/parser-extra.test.d.ts.map +1 -0
  275. package/dist/tests/coverage-95/parser-extra.test.js +210 -0
  276. package/dist/tests/coverage-95/parser-extra.test.js.map +1 -0
  277. package/dist/tests/coverage-95/propositional-utilities.test.d.ts +2 -0
  278. package/dist/tests/coverage-95/propositional-utilities.test.d.ts.map +1 -0
  279. package/dist/tests/coverage-95/propositional-utilities.test.js +281 -0
  280. package/dist/tests/coverage-95/propositional-utilities.test.js.map +1 -0
  281. package/dist/tests/coverage-95/protocol-handler.test.d.ts +2 -0
  282. package/dist/tests/coverage-95/protocol-handler.test.d.ts.map +1 -0
  283. package/dist/tests/coverage-95/protocol-handler.test.js +275 -0
  284. package/dist/tests/coverage-95/protocol-handler.test.js.map +1 -0
  285. package/dist/tests/coverage-95/smt-mock-backend.test.d.ts +2 -0
  286. package/dist/tests/coverage-95/smt-mock-backend.test.d.ts.map +1 -0
  287. package/dist/tests/coverage-95/smt-mock-backend.test.js +201 -0
  288. package/dist/tests/coverage-95/smt-mock-backend.test.js.map +1 -0
  289. package/dist/tests/coverage-95/smt-serializer.test.d.ts +2 -0
  290. package/dist/tests/coverage-95/smt-serializer.test.d.ts.map +1 -0
  291. package/dist/tests/coverage-95/smt-serializer.test.js +143 -0
  292. package/dist/tests/coverage-95/smt-serializer.test.js.map +1 -0
  293. package/dist/tests/coverage-95/smt-subprocess.test.d.ts +2 -0
  294. package/dist/tests/coverage-95/smt-subprocess.test.d.ts.map +1 -0
  295. package/dist/tests/coverage-95/smt-subprocess.test.js +96 -0
  296. package/dist/tests/coverage-95/smt-subprocess.test.js.map +1 -0
  297. package/dist/tests/coverage-95/tableau-engine.test.d.ts +2 -0
  298. package/dist/tests/coverage-95/tableau-engine.test.d.ts.map +1 -0
  299. package/dist/tests/coverage-95/tableau-engine.test.js +125 -0
  300. package/dist/tests/coverage-95/tableau-engine.test.js.map +1 -0
  301. package/dist/tests/coverage-95/temporal-ltl.test.d.ts +2 -0
  302. package/dist/tests/coverage-95/temporal-ltl.test.d.ts.map +1 -0
  303. package/dist/tests/coverage-95/temporal-ltl.test.js +94 -0
  304. package/dist/tests/coverage-95/temporal-ltl.test.js.map +1 -0
  305. package/dist/tests/coverage-95/typecheck-checker.test.d.ts +2 -0
  306. package/dist/tests/coverage-95/typecheck-checker.test.d.ts.map +1 -0
  307. package/dist/tests/coverage-95/typecheck-checker.test.js +191 -0
  308. package/dist/tests/coverage-95/typecheck-checker.test.js.map +1 -0
  309. package/dist/tests/coverage-95/undecidability-detector.test.d.ts +2 -0
  310. package/dist/tests/coverage-95/undecidability-detector.test.d.ts.map +1 -0
  311. package/dist/tests/coverage-95/undecidability-detector.test.js +149 -0
  312. package/dist/tests/coverage-95/undecidability-detector.test.js.map +1 -0
  313. package/dist/tests/coverage-95/visitor.test.d.ts +2 -0
  314. package/dist/tests/coverage-95/visitor.test.d.ts.map +1 -0
  315. package/dist/tests/coverage-95/visitor.test.js +140 -0
  316. package/dist/tests/coverage-95/visitor.test.js.map +1 -0
  317. package/dist/tests/ctl/check.test.d.ts +2 -0
  318. package/dist/tests/ctl/check.test.d.ts.map +1 -0
  319. package/dist/tests/ctl/check.test.js +337 -0
  320. package/dist/tests/ctl/check.test.js.map +1 -0
  321. package/dist/tests/curry-howard/infer.test.d.ts +2 -0
  322. package/dist/tests/curry-howard/infer.test.d.ts.map +1 -0
  323. package/dist/tests/curry-howard/infer.test.js +93 -0
  324. package/dist/tests/curry-howard/infer.test.js.map +1 -0
  325. package/dist/tests/curry-howard/proof.test.d.ts +2 -0
  326. package/dist/tests/curry-howard/proof.test.d.ts.map +1 -0
  327. package/dist/tests/curry-howard/proof.test.js +105 -0
  328. package/dist/tests/curry-howard/proof.test.js.map +1 -0
  329. package/dist/tests/curry-howard/reduce.test.d.ts +2 -0
  330. package/dist/tests/curry-howard/reduce.test.d.ts.map +1 -0
  331. package/dist/tests/curry-howard/reduce.test.js +109 -0
  332. package/dist/tests/curry-howard/reduce.test.js.map +1 -0
  333. package/dist/tests/default-logic/extensions.test.d.ts +2 -0
  334. package/dist/tests/default-logic/extensions.test.d.ts.map +1 -0
  335. package/dist/tests/default-logic/extensions.test.js +323 -0
  336. package/dist/tests/default-logic/extensions.test.js.map +1 -0
  337. package/dist/tests/description-logic/alc.test.d.ts +2 -0
  338. package/dist/tests/description-logic/alc.test.d.ts.map +1 -0
  339. package/dist/tests/description-logic/alc.test.js +253 -0
  340. package/dist/tests/description-logic/alc.test.js.map +1 -0
  341. package/dist/tests/fol-prover-equality/prove.test.d.ts +2 -0
  342. package/dist/tests/fol-prover-equality/prove.test.d.ts.map +1 -0
  343. package/dist/tests/fol-prover-equality/prove.test.js +179 -0
  344. package/dist/tests/fol-prover-equality/prove.test.js.map +1 -0
  345. package/dist/tests/hybrid-logic/semantics.test.d.ts +2 -0
  346. package/dist/tests/hybrid-logic/semantics.test.d.ts.map +1 -0
  347. package/dist/tests/hybrid-logic/semantics.test.js +169 -0
  348. package/dist/tests/hybrid-logic/semantics.test.js.map +1 -0
  349. package/dist/tests/ltl-sat/sat.test.d.ts +2 -0
  350. package/dist/tests/ltl-sat/sat.test.d.ts.map +1 -0
  351. package/dist/tests/ltl-sat/sat.test.js +160 -0
  352. package/dist/tests/ltl-sat/sat.test.js.map +1 -0
  353. package/dist/tests/mus/extract.test.d.ts +2 -0
  354. package/dist/tests/mus/extract.test.d.ts.map +1 -0
  355. package/dist/tests/mus/extract.test.js +352 -0
  356. package/dist/tests/mus/extract.test.js.map +1 -0
  357. package/dist/tests/sat-v2-incremental/basic.test.d.ts +2 -0
  358. package/dist/tests/sat-v2-incremental/basic.test.d.ts.map +1 -0
  359. package/dist/tests/sat-v2-incremental/basic.test.js +352 -0
  360. package/dist/tests/sat-v2-incremental/basic.test.js.map +1 -0
  361. package/dist/tests/sequent-g3/prover.test.d.ts +2 -0
  362. package/dist/tests/sequent-g3/prover.test.d.ts.map +1 -0
  363. package/dist/tests/sequent-g3/prover.test.js +205 -0
  364. package/dist/tests/sequent-g3/prover.test.js.map +1 -0
  365. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts +2 -0
  366. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts.map +1 -0
  367. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js +200 -0
  368. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js.map +1 -0
  369. package/dist/text-layer/v2/index.d.ts +2 -0
  370. package/dist/text-layer/v2/index.d.ts.map +1 -1
  371. package/dist/text-layer/v2/index.js +7 -1
  372. package/dist/text-layer/v2/index.js.map +1 -1
  373. package/dist/text-layer/v2/mdx-bridge/diff.d.ts +13 -0
  374. package/dist/text-layer/v2/mdx-bridge/diff.d.ts.map +1 -0
  375. package/dist/text-layer/v2/mdx-bridge/diff.js +69 -0
  376. package/dist/text-layer/v2/mdx-bridge/diff.js.map +1 -0
  377. package/dist/text-layer/v2/mdx-bridge/index.d.ts +14 -0
  378. package/dist/text-layer/v2/mdx-bridge/index.d.ts.map +1 -0
  379. package/dist/text-layer/v2/mdx-bridge/index.js +21 -0
  380. package/dist/text-layer/v2/mdx-bridge/index.js.map +1 -0
  381. package/dist/text-layer/v2/mdx-bridge/parser.d.ts +33 -0
  382. package/dist/text-layer/v2/mdx-bridge/parser.d.ts.map +1 -0
  383. package/dist/text-layer/v2/mdx-bridge/parser.js +192 -0
  384. package/dist/text-layer/v2/mdx-bridge/parser.js.map +1 -0
  385. package/dist/text-layer/v2/mdx-bridge/serializer.d.ts +17 -0
  386. package/dist/text-layer/v2/mdx-bridge/serializer.d.ts.map +1 -0
  387. package/dist/text-layer/v2/mdx-bridge/serializer.js +69 -0
  388. package/dist/text-layer/v2/mdx-bridge/serializer.js.map +1 -0
  389. package/dist/text-layer/v2/mdx-bridge/types.d.ts +53 -0
  390. package/dist/text-layer/v2/mdx-bridge/types.d.ts.map +1 -0
  391. package/dist/text-layer/v2/mdx-bridge/types.js +19 -0
  392. package/dist/text-layer/v2/mdx-bridge/types.js.map +1 -0
  393. package/package.json +1 -1
@@ -0,0 +1,727 @@
1
+ "use strict";
2
+ // CDCL incremental — solver vivo que mantiene aprendizaje entre llamadas.
3
+ //
4
+ // A diferencia de solveCDCLv2 (one-shot, todas las estructuras se crean en cada
5
+ // invocación), aquí el solver es un objeto persistente que soporta:
6
+ //
7
+ // - addClause(literals) — añade cláusula permanente, integra en watches.
8
+ // - newVar() — declara una variable nueva creciendo todas las estructuras.
9
+ // - push() / pop() — checkpoint y rollback (descarta cláusulas + aprendidas
10
+ // añadidas tras el push; conserva phase saving y VSIDS como caching útil).
11
+ // - solve(assumptions?) — resuelve bajo el conjunto de assumptions
12
+ // (literales asumidos true sólo para esta query). Devuelve modelo o
13
+ // failedAssumptions/unsatCore.
14
+ //
15
+ // Bases internas reutilizadas conceptualmente del solver one-shot:
16
+ // - 2-watched literals para BCP.
17
+ // - 1UIP conflict analysis (analyzeConflict1UIP de cdcl-v2).
18
+ // - VSIDS, phase saving, Luby restarts.
19
+ // - LBD scoring + reducción periódica de aprendidas.
20
+ //
21
+ // La maquinaria incremental clave es el manejo de assumptions: tras backtrack
22
+ // al nivel 0, cada assumption se introduce como decisión en su propio nivel.
23
+ // Si BCP detecta conflicto al asumir, derivamos el unsatCore vía análisis del
24
+ // conflicto + intersección con el conjunto de assumptions enqueued.
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.IncrementalCDCL = void 0;
27
+ const cdcl_v2_1 = require("../cdcl-v2");
28
+ const DEFAULTS = {
29
+ timeoutMs: 30_000,
30
+ vsidsDecay: 0.95,
31
+ lubyBase: 100,
32
+ clauseDecay: 0.999,
33
+ lbdReduceThreshold: 2,
34
+ initialPhase: 0,
35
+ };
36
+ class IncrementalCDCL {
37
+ numVars;
38
+ opts;
39
+ // Pool de cláusulas. Las originales y las aprendidas conviven en `clauses`;
40
+ // `learnedFlag[ci] = 1` marca a las aprendidas para distinguir orígenes en
41
+ // pop/reset. learnedMeta indexa por ci.
42
+ clauses = [];
43
+ learnedFlag = [];
44
+ learnedMeta = new Map();
45
+ clauseInc = 1.0;
46
+ // Estado de variables (1-indexado, dimensionado a numVars+1).
47
+ varVal;
48
+ varLevel;
49
+ varAnte;
50
+ // Trail.
51
+ trail = [];
52
+ trailLim = [];
53
+ qHead = 0;
54
+ // Watch lists indexadas por litToIdx. Se reconstruyen tras grow / pop.
55
+ watches = [];
56
+ // Heurísticas. Se recrean tras newVar() (grow) y reset(); persisten entre solves.
57
+ vsids;
58
+ phases;
59
+ // Stack de checkpoints push/pop.
60
+ checkpoints = [];
61
+ // Para asociar variable → último assumption que la fijó. Usado para derivar
62
+ // failedAssumptions en O(|trail| + |conflictClause|).
63
+ // varToAssumption[v] = lit (signed) si v fue assumption; 0 si no.
64
+ varToAssumption;
65
+ // Acumuladores de stats globales.
66
+ totalDecisions = 0;
67
+ totalConflicts = 0;
68
+ totalLearned = 0;
69
+ constructor(numVars = 0, options) {
70
+ if (numVars < 0 || !Number.isInteger(numVars)) {
71
+ throw new RangeError(`IncrementalCDCL: numVars inválido ${numVars}`);
72
+ }
73
+ this.numVars = numVars;
74
+ this.opts = {
75
+ timeoutMs: options?.timeoutMs ?? DEFAULTS.timeoutMs,
76
+ vsidsDecay: options?.vsidsDecay ?? DEFAULTS.vsidsDecay,
77
+ lubyBase: options?.lubyBase ?? DEFAULTS.lubyBase,
78
+ initialPhase: options?.initialPhase ?? DEFAULTS.initialPhase,
79
+ clauseDecay: DEFAULTS.clauseDecay,
80
+ lbdReduceThreshold: DEFAULTS.lbdReduceThreshold,
81
+ };
82
+ this.varVal = new Int8Array(numVars + 1);
83
+ this.varLevel = new Int32Array(numVars + 1).fill(-1);
84
+ this.varAnte = new Int32Array(numVars + 1).fill(cdcl_v2_1.NO_ANTECEDENT);
85
+ this.varToAssumption = new Int32Array(numVars + 1);
86
+ this.vsids = new cdcl_v2_1.VSIDS(numVars, this.opts.vsidsDecay);
87
+ this.phases = new cdcl_v2_1.PhaseSaver(numVars, this.opts.initialPhase);
88
+ this.rebuildWatches();
89
+ }
90
+ // -------------------------------------------------------------------------
91
+ // API pública.
92
+ // -------------------------------------------------------------------------
93
+ /** Declara y devuelve una variable nueva (1-indexada). */
94
+ newVar() {
95
+ this.numVars++;
96
+ this.growVarArrays();
97
+ // VSIDS y PhaseSaver no soportan grow in-place; los reconstruimos
98
+ // preservando su activity/phase actual.
99
+ this.regrowHeuristics();
100
+ return this.numVars;
101
+ }
102
+ /** Agrega una cláusula permanente. Validación: literales !== 0 y |lit| <= numVars. */
103
+ addClause(literals) {
104
+ for (const l of literals) {
105
+ if (l === 0)
106
+ throw new RangeError('IncrementalCDCL.addClause: literal 0 inválido');
107
+ const v = Math.abs(l);
108
+ if (v > this.numVars) {
109
+ throw new RangeError(`IncrementalCDCL.addClause: variable ${v} fuera de rango (numVars=${this.numVars})`);
110
+ }
111
+ }
112
+ const clause = new Int32Array(literals);
113
+ const ci = this.clauses.length;
114
+ this.clauses.push(clause);
115
+ this.learnedFlag.push(0);
116
+ if (clause.length >= 2) {
117
+ const w0 = this.watches[(0, cdcl_v2_1.litToIdx)(clause[0], this.numVars)];
118
+ const w1 = this.watches[(0, cdcl_v2_1.litToIdx)(clause[1], this.numVars)];
119
+ if (w0)
120
+ w0.push(ci);
121
+ if (w1)
122
+ w1.push(ci);
123
+ }
124
+ this.vsids.initFromClauses([clause]);
125
+ }
126
+ /** Crea un checkpoint para rollback con `pop()`. */
127
+ push() {
128
+ this.checkpoints.push({
129
+ numClauses: this.clauses.length,
130
+ numLearned: this.countLearned(),
131
+ numVars: this.numVars,
132
+ });
133
+ }
134
+ /** Revierte hasta `levels` checkpoints atrás. Default: 1. */
135
+ pop(levels = 1) {
136
+ if (levels <= 0)
137
+ return;
138
+ for (let k = 0; k < levels && this.checkpoints.length > 0; k++) {
139
+ const frame = this.checkpoints.pop();
140
+ if (!frame)
141
+ break;
142
+ this.rollbackTo(frame);
143
+ }
144
+ }
145
+ /**
146
+ * Resuelve bajo el conjunto opcional de assumptions.
147
+ *
148
+ * Cada assumption es un literal con signo: positivo = var asumida true,
149
+ * negativo = var asumida false. Si el problema es UNSAT bajo esas
150
+ * assumptions, `failedAssumptions` contiene el subconjunto que produjo
151
+ * el conflicto.
152
+ */
153
+ solve(assumptions = []) {
154
+ // Validar assumptions.
155
+ for (const a of assumptions) {
156
+ if (a === 0)
157
+ throw new RangeError('IncrementalCDCL.solve: assumption 0 inválida');
158
+ if (Math.abs(a) > this.numVars) {
159
+ throw new RangeError(`IncrementalCDCL.solve: assumption refiere variable ${Math.abs(a)} > numVars=${this.numVars}`);
160
+ }
161
+ }
162
+ return this.runSolve(assumptions);
163
+ }
164
+ /** Devuelve la polaridad de una variable en el último modelo SAT (o undefined). */
165
+ modelValue(varId) {
166
+ if (varId <= 0 || varId > this.numVars)
167
+ return undefined;
168
+ const v = this.varVal[varId];
169
+ if (v === 1)
170
+ return true;
171
+ if (v === -1)
172
+ return false;
173
+ return undefined;
174
+ }
175
+ /** Limpia todo el estado, dejando 0 vars / 0 cláusulas. */
176
+ reset() {
177
+ this.clauses = [];
178
+ this.learnedFlag = [];
179
+ this.learnedMeta.clear();
180
+ this.clauseInc = 1.0;
181
+ this.numVars = 0;
182
+ this.varVal = new Int8Array(1);
183
+ this.varLevel = new Int32Array(1).fill(-1);
184
+ this.varAnte = new Int32Array(1).fill(cdcl_v2_1.NO_ANTECEDENT);
185
+ this.varToAssumption = new Int32Array(1);
186
+ this.trail = [];
187
+ this.trailLim = [];
188
+ this.qHead = 0;
189
+ this.checkpoints = [];
190
+ this.totalDecisions = 0;
191
+ this.totalConflicts = 0;
192
+ this.totalLearned = 0;
193
+ this.vsids = new cdcl_v2_1.VSIDS(0, this.opts.vsidsDecay);
194
+ this.phases = new cdcl_v2_1.PhaseSaver(0, this.opts.initialPhase);
195
+ this.rebuildWatches();
196
+ }
197
+ /** Resumen del estado actual del solver. */
198
+ stats() {
199
+ return {
200
+ decisions: this.totalDecisions,
201
+ conflicts: this.totalConflicts,
202
+ learned: this.countLearned(),
203
+ vars: this.numVars,
204
+ clauses: this.clauses.length,
205
+ };
206
+ }
207
+ // -------------------------------------------------------------------------
208
+ // Internals — control de estructura.
209
+ // -------------------------------------------------------------------------
210
+ growVarArrays() {
211
+ const n = this.numVars;
212
+ // Crecimiento simple: copiamos a un Typed Array más grande.
213
+ const newVal = new Int8Array(n + 1);
214
+ newVal.set(this.varVal);
215
+ this.varVal = newVal;
216
+ const newLevel = new Int32Array(n + 1).fill(-1);
217
+ newLevel.set(this.varLevel);
218
+ this.varLevel = newLevel;
219
+ const newAnte = new Int32Array(n + 1).fill(cdcl_v2_1.NO_ANTECEDENT);
220
+ newAnte.set(this.varAnte);
221
+ this.varAnte = newAnte;
222
+ const newAssump = new Int32Array(n + 1);
223
+ newAssump.set(this.varToAssumption);
224
+ this.varToAssumption = newAssump;
225
+ // Crecer la watch list (literal positivo y negativo de la nueva var).
226
+ this.rebuildWatches();
227
+ }
228
+ regrowHeuristics() {
229
+ const newVsids = new cdcl_v2_1.VSIDS(this.numVars, this.opts.vsidsDecay);
230
+ // Preservar activities anteriores.
231
+ const oldAct = this.vsids.activity;
232
+ for (let v = 1; v < oldAct.length && v <= this.numVars; v++) {
233
+ newVsids.activity[v] = oldAct[v];
234
+ }
235
+ this.vsids = newVsids;
236
+ const newPhases = new cdcl_v2_1.PhaseSaver(this.numVars, this.opts.initialPhase);
237
+ for (let v = 1; v <= this.numVars; v++) {
238
+ // Si había phase previa, preservarla.
239
+ if (v < oldAct.length) {
240
+ const prevPhase = this.phases.getPhase(v);
241
+ newPhases.save(prevPhase === 1 ? v : -v);
242
+ }
243
+ }
244
+ this.phases = newPhases;
245
+ }
246
+ rebuildWatches() {
247
+ const size = 2 * this.numVars;
248
+ this.watches = new Array(size);
249
+ for (let i = 0; i < size; i++)
250
+ this.watches[i] = [];
251
+ for (let ci = 0; ci < this.clauses.length; ci++) {
252
+ const c = this.clauses[ci];
253
+ if (c.length >= 2) {
254
+ const w0 = this.watches[(0, cdcl_v2_1.litToIdx)(c[0], this.numVars)];
255
+ const w1 = this.watches[(0, cdcl_v2_1.litToIdx)(c[1], this.numVars)];
256
+ if (w0)
257
+ w0.push(ci);
258
+ if (w1)
259
+ w1.push(ci);
260
+ }
261
+ }
262
+ }
263
+ countLearned() {
264
+ let n = 0;
265
+ for (const f of this.learnedFlag)
266
+ if (f === 1)
267
+ n++;
268
+ return n;
269
+ }
270
+ rollbackTo(frame) {
271
+ // Limpiar todo el trail antes de tocar cláusulas (los antecedentes
272
+ // pueden apuntar a cláusulas que vamos a borrar; las asignaciones de
273
+ // nivel 0 también deben desfilarse para no contaminar el próximo solve).
274
+ this.resetAllAssignments();
275
+ // Truncar cláusulas: descarta TODO lo añadido tras el push (originales +
276
+ // learned). Estrategia v1: descartar learned posteriores. v2 podría
277
+ // intentar conservar las que no dependen de los assumptions removidos.
278
+ const target = Math.min(frame.numClauses, this.clauses.length);
279
+ this.clauses.length = target;
280
+ this.learnedFlag.length = target;
281
+ // Limpiar learnedMeta y antecedentes que apuntan a cláusulas eliminadas.
282
+ for (const ci of Array.from(this.learnedMeta.keys())) {
283
+ if (ci >= target)
284
+ this.learnedMeta.delete(ci);
285
+ }
286
+ for (let v = 1; v <= this.numVars; v++) {
287
+ if (this.varAnte[v] !== cdcl_v2_1.NO_ANTECEDENT && this.varAnte[v] >= target) {
288
+ this.varAnte[v] = cdcl_v2_1.NO_ANTECEDENT;
289
+ }
290
+ }
291
+ // Si nuevas vars fueron declaradas tras el push, las "retiramos".
292
+ if (this.numVars > frame.numVars) {
293
+ this.numVars = frame.numVars;
294
+ const np1 = this.numVars + 1;
295
+ // Truncar typed arrays (recortar copiando).
296
+ this.varVal = this.varVal.slice(0, np1);
297
+ this.varLevel = this.varLevel.slice(0, np1);
298
+ this.varAnte = this.varAnte.slice(0, np1);
299
+ this.varToAssumption = this.varToAssumption.slice(0, np1);
300
+ this.regrowHeuristics();
301
+ }
302
+ // Reconstruir watches sobre el conjunto resultante.
303
+ this.rebuildWatches();
304
+ }
305
+ // -------------------------------------------------------------------------
306
+ // Internals — núcleo CDCL.
307
+ // -------------------------------------------------------------------------
308
+ currentLevel() {
309
+ return this.trailLim.length;
310
+ }
311
+ litIsTrue(lit) {
312
+ return lit > 0 ? this.varVal[lit] === 1 : this.varVal[-lit] === -1;
313
+ }
314
+ litIsFalse(lit) {
315
+ return lit > 0 ? this.varVal[lit] === -1 : this.varVal[-lit] === 1;
316
+ }
317
+ enqueue(lit, lev, reason, stats) {
318
+ const v = Math.abs(lit);
319
+ if (this.varVal[v] !== 0)
320
+ return this.litIsTrue(lit);
321
+ this.varVal[v] = lit > 0 ? 1 : -1;
322
+ this.varLevel[v] = lev;
323
+ this.varAnte[v] = reason;
324
+ this.trail.push(lit);
325
+ this.phases.save(lit);
326
+ if (stats)
327
+ stats.propagations++;
328
+ return true;
329
+ }
330
+ /** Propagación booleana con watched literals. Devuelve índice de cláusula en conflicto o NO_CONFLICT. */
331
+ propagate(stats) {
332
+ while (this.qHead < this.trail.length) {
333
+ const p = this.trail[this.qHead++];
334
+ const falseLit = -p;
335
+ const wIdx = (0, cdcl_v2_1.litToIdx)(falseLit, this.numVars);
336
+ const wl = this.watches[wIdx];
337
+ if (!wl)
338
+ continue;
339
+ let j = 0;
340
+ for (let i = 0; i < wl.length; i++) {
341
+ const ci = wl[i];
342
+ const c = this.clauses[ci];
343
+ if (!c || c.length < 2) {
344
+ wl[j++] = ci;
345
+ continue;
346
+ }
347
+ // Mover falseLit a c[1] para que c[0] sea el "otro watch".
348
+ if (c[0] === falseLit) {
349
+ const tmp = c[0];
350
+ c[0] = c[1];
351
+ c[1] = tmp;
352
+ }
353
+ if (this.litIsTrue(c[0])) {
354
+ wl[j++] = ci;
355
+ continue;
356
+ }
357
+ // Buscar reemplazo para watch en c[1].
358
+ let found = false;
359
+ for (let k = 2; k < c.length; k++) {
360
+ if (!this.litIsFalse(c[k])) {
361
+ const tmp = c[1];
362
+ c[1] = c[k];
363
+ c[k] = tmp;
364
+ const newWatch = this.watches[(0, cdcl_v2_1.litToIdx)(c[1], this.numVars)];
365
+ if (newWatch)
366
+ newWatch.push(ci);
367
+ found = true;
368
+ break;
369
+ }
370
+ }
371
+ if (found)
372
+ continue;
373
+ wl[j++] = ci;
374
+ if (this.litIsFalse(c[0])) {
375
+ // Conflicto.
376
+ for (let r = i + 1; r < wl.length; r++)
377
+ wl[j++] = wl[r];
378
+ wl.length = j;
379
+ this.qHead = this.trail.length;
380
+ return ci;
381
+ }
382
+ if (!this.enqueue(c[0], this.currentLevel(), ci, stats)) {
383
+ for (let r = i + 1; r < wl.length; r++)
384
+ wl[j++] = wl[r];
385
+ wl.length = j;
386
+ this.qHead = this.trail.length;
387
+ return ci;
388
+ }
389
+ }
390
+ wl.length = j;
391
+ }
392
+ return cdcl_v2_1.NO_CONFLICT;
393
+ }
394
+ backtrackToLevel(target) {
395
+ if (this.currentLevel() <= target)
396
+ return;
397
+ const btPoint = target < this.trailLim.length ? this.trailLim[target] : this.trail.length;
398
+ for (let i = this.trail.length - 1; i >= btPoint; i--) {
399
+ const v = Math.abs(this.trail[i]);
400
+ this.varVal[v] = 0;
401
+ this.varLevel[v] = -1;
402
+ this.varAnte[v] = cdcl_v2_1.NO_ANTECEDENT;
403
+ this.varToAssumption[v] = 0;
404
+ }
405
+ this.trail.length = btPoint;
406
+ this.trailLim.length = target;
407
+ this.qHead = btPoint;
408
+ }
409
+ /** Reset completo del trail incluyendo asignaciones de nivel 0. Usado entre
410
+ * llamadas a solve() para garantizar idempotencia. */
411
+ resetAllAssignments() {
412
+ for (let i = 0; i < this.trail.length; i++) {
413
+ const v = Math.abs(this.trail[i]);
414
+ this.varVal[v] = 0;
415
+ this.varLevel[v] = -1;
416
+ this.varAnte[v] = cdcl_v2_1.NO_ANTECEDENT;
417
+ this.varToAssumption[v] = 0;
418
+ }
419
+ this.trail.length = 0;
420
+ this.trailLim.length = 0;
421
+ this.qHead = 0;
422
+ }
423
+ addLearnedClauseAt(learned, lbd, stats) {
424
+ const ci = this.clauses.length;
425
+ this.clauses.push(learned);
426
+ this.learnedFlag.push(1);
427
+ stats.learned++;
428
+ this.totalLearned++;
429
+ if (learned.length >= 2) {
430
+ const w0 = this.watches[(0, cdcl_v2_1.litToIdx)(learned[0], this.numVars)];
431
+ const w1 = this.watches[(0, cdcl_v2_1.litToIdx)(learned[1], this.numVars)];
432
+ if (w0)
433
+ w0.push(ci);
434
+ if (w1)
435
+ w1.push(ci);
436
+ }
437
+ this.learnedMeta.set(ci, {
438
+ index: ci,
439
+ lbd,
440
+ activity: this.clauseInc,
441
+ locked: false,
442
+ length: learned.length,
443
+ });
444
+ return ci;
445
+ }
446
+ // -------------------------------------------------------------------------
447
+ // Solve loop con assumptions.
448
+ // -------------------------------------------------------------------------
449
+ runSolve(assumptions) {
450
+ const stats = {
451
+ decisions: 0,
452
+ conflicts: 0,
453
+ learned: 0,
454
+ propagations: 0,
455
+ restarts: 0,
456
+ };
457
+ const startTime = Date.now();
458
+ // UNSAT trivial: cláusula vacía.
459
+ for (const c of this.clauses) {
460
+ if (c.length === 0) {
461
+ return { sat: false, unsatCore: [], failedAssumptions: [], stats };
462
+ }
463
+ }
464
+ // Cada call empieza limpio: vaciamos TODO el trail (incluso asignaciones
465
+ // de nivel 0 forzadas por solves anteriores) y re-propagamos las unitarias
466
+ // originales desde cero. Esto garantiza idempotencia: dos solve() con la
467
+ // misma entrada producen el mismo modelo. Las cláusulas aprendidas
468
+ // siguen vivas y siguen activas como restricciones.
469
+ this.resetAllAssignments();
470
+ // Reset varToAssumption antes de re-enqueue assumptions.
471
+ for (let v = 0; v <= this.numVars; v++)
472
+ this.varToAssumption[v] = 0;
473
+ const restarter = new cdcl_v2_1.LubyRestartPolicy(this.opts.lubyBase);
474
+ // Propagar primero las unitarias originales a nivel 0 (idempotente).
475
+ for (let ci = 0; ci < this.clauses.length; ci++) {
476
+ const c = this.clauses[ci];
477
+ if (c.length === 1) {
478
+ const lit = c[0];
479
+ const v = Math.abs(lit);
480
+ if (this.varVal[v] !== 0) {
481
+ if (!this.litIsTrue(lit)) {
482
+ return { sat: false, unsatCore: [], failedAssumptions: [], stats };
483
+ }
484
+ continue;
485
+ }
486
+ if (!this.enqueue(lit, 0, ci, stats)) {
487
+ return { sat: false, unsatCore: [], failedAssumptions: [], stats };
488
+ }
489
+ }
490
+ }
491
+ let conflict = this.propagate(stats);
492
+ if (conflict !== cdcl_v2_1.NO_CONFLICT) {
493
+ return { sat: false, unsatCore: [], failedAssumptions: [], stats };
494
+ }
495
+ // Aplicar assumptions una a una como decisiones en niveles sucesivos.
496
+ // Si alguna ya está implicada falsa por unidades de nivel 0, derivar
497
+ // unsatCore como las assumptions previas + ésta.
498
+ const enqueuedAssumptions = [];
499
+ for (const lit of assumptions) {
500
+ // Si ya está fijada a nivel 0 con polaridad opuesta ⇒ UNSAT bajo este lit.
501
+ if (this.litIsFalse(lit)) {
502
+ return {
503
+ sat: false,
504
+ unsatCore: this.deriveCoreFromBlockedAssumption(lit),
505
+ failedAssumptions: this.deriveCoreFromBlockedAssumption(lit),
506
+ stats,
507
+ };
508
+ }
509
+ if (this.litIsTrue(lit))
510
+ continue; // ya implicada, no decidir.
511
+ this.trailLim.push(this.trail.length);
512
+ const lev = this.currentLevel();
513
+ const v = Math.abs(lit);
514
+ this.varToAssumption[v] = lit;
515
+ enqueuedAssumptions.push(lit);
516
+ stats.decisions++;
517
+ this.totalDecisions++;
518
+ this.enqueue(lit, lev, cdcl_v2_1.NO_ANTECEDENT, stats);
519
+ const c2 = this.propagate(stats);
520
+ if (c2 !== cdcl_v2_1.NO_CONFLICT) {
521
+ // Conflicto al asumir. Derivamos failed assumptions cruzando el
522
+ // cone-of-conflict con las assumptions enqueued.
523
+ const failed = this.deriveFailedAssumptions(c2, enqueuedAssumptions);
524
+ return {
525
+ sat: false,
526
+ unsatCore: failed,
527
+ failedAssumptions: failed,
528
+ stats,
529
+ };
530
+ }
531
+ }
532
+ // CDCL principal — branching VSIDS sobre variables libres.
533
+ let conflictsUntilRestart = restarter.next();
534
+ let conflictsSinceRestart = 0;
535
+ const baseLevel = this.currentLevel(); // = #assumptions enqueued
536
+ const seenBuf = new Uint8Array(this.numVars + 2);
537
+ while (true) {
538
+ if (Date.now() - startTime > this.opts.timeoutMs) {
539
+ return { sat: false, unsatCore: [], failedAssumptions: [], stats };
540
+ }
541
+ const v = this.vsids.pick(this.varVal);
542
+ if (v === 0) {
543
+ // SAT. Construimos el modelo.
544
+ const model = new Map();
545
+ for (let i = 1; i <= this.numVars; i++) {
546
+ model.set(i, this.varVal[i] === 1 || this.varVal[i] === 0);
547
+ }
548
+ return { sat: true, model, stats };
549
+ }
550
+ this.trailLim.push(this.trail.length);
551
+ stats.decisions++;
552
+ this.totalDecisions++;
553
+ this.enqueue(this.phases.pickLit(v), this.currentLevel(), cdcl_v2_1.NO_ANTECEDENT, stats);
554
+ conflict = this.propagate(stats);
555
+ while (conflict !== cdcl_v2_1.NO_CONFLICT) {
556
+ stats.conflicts++;
557
+ this.totalConflicts++;
558
+ conflictsSinceRestart++;
559
+ if (this.currentLevel() <= baseLevel) {
560
+ // Conflicto en nivel ≤ baseLevel ⇒ UNSAT bajo assumptions.
561
+ const failed = this.deriveFailedAssumptions(conflict, enqueuedAssumptions);
562
+ return {
563
+ sat: false,
564
+ unsatCore: failed,
565
+ failedAssumptions: failed,
566
+ stats,
567
+ };
568
+ }
569
+ const result = (0, cdcl_v2_1.analyzeConflict1UIP)(conflict, {
570
+ clauses: this.clauses,
571
+ trail: this.trail,
572
+ currentLevel: this.currentLevel(),
573
+ varLevel: this.varLevel,
574
+ varAnte: this.varAnte,
575
+ });
576
+ for (const bv of result.bumped)
577
+ this.vsids.bump(bv);
578
+ this.vsids.decayStep();
579
+ this.clauseInc /= this.opts.clauseDecay;
580
+ if (result.learned.length === 0 || result.btLevel < 0) {
581
+ // UNSAT raíz; bajo assumptions ⇒ derivar core con las assumptions vivas.
582
+ const failed = this.deriveFailedAssumptions(conflict, enqueuedAssumptions);
583
+ return {
584
+ sat: false,
585
+ unsatCore: failed,
586
+ failedAssumptions: failed,
587
+ stats,
588
+ };
589
+ }
590
+ // No retroceder por debajo de baseLevel (las assumptions deben quedar
591
+ // intactas; si fueran las culpables, el conflicto las habría atrapado
592
+ // al asumir o estaríamos en currentLevel <= baseLevel arriba).
593
+ const bt = Math.max(result.btLevel, baseLevel);
594
+ this.backtrackToLevel(bt);
595
+ if (result.learned.length === 1) {
596
+ // Si la unit clause aprendida apunta a nivel 0 pero hay assumptions
597
+ // por encima, la propagamos al nivel actual (= baseLevel) como
598
+ // forced (no se "fija" al 0 mientras haya assumptions vivas, pero
599
+ // su semántica vale: bajo estas assumptions, ese literal es true).
600
+ if (!this.enqueue(result.learned[0], bt, cdcl_v2_1.NO_ANTECEDENT, stats)) {
601
+ const failed = this.deriveFailedAssumptions(conflict, enqueuedAssumptions);
602
+ return {
603
+ sat: false,
604
+ unsatCore: failed,
605
+ failedAssumptions: failed,
606
+ stats,
607
+ };
608
+ }
609
+ }
610
+ else {
611
+ const lbd = (0, cdcl_v2_1.computeLBD)(result.learned, this.varLevel, seenBuf);
612
+ const newCi = this.addLearnedClauseAt(result.learned, lbd, stats);
613
+ if (!this.enqueue(result.learned[0], bt, newCi, stats)) {
614
+ const failed = this.deriveFailedAssumptions(conflict, enqueuedAssumptions);
615
+ return {
616
+ sat: false,
617
+ unsatCore: failed,
618
+ failedAssumptions: failed,
619
+ stats,
620
+ };
621
+ }
622
+ }
623
+ conflict = this.propagate(stats);
624
+ }
625
+ if (conflictsSinceRestart >= conflictsUntilRestart) {
626
+ stats.restarts++;
627
+ // Restart respeta assumptions: vuelve al baseLevel, no a 0.
628
+ this.backtrackToLevel(baseLevel);
629
+ conflictsSinceRestart = 0;
630
+ conflictsUntilRestart = restarter.next();
631
+ }
632
+ this.maybeReduceLearned();
633
+ }
634
+ }
635
+ /**
636
+ * Cuando un assumption `lit` está bloqueado por unit propagation desde
637
+ * unidades originales (sin assumptions activas), devuelve [lit] solo:
638
+ * ese assumption es incompatible con la base. Para v1, este es el caso
639
+ * trivial — sin lookup hacia atrás del antecedente.
640
+ */
641
+ deriveCoreFromBlockedAssumption(lit) {
642
+ return [lit];
643
+ }
644
+ /**
645
+ * Dado un índice de cláusula en conflicto y la lista actual de assumptions
646
+ * enqueued, regresa el subconjunto de assumptions cuya negación está
647
+ * presente (recursivamente, vía antecedentes) en el cone de conflicto.
648
+ *
649
+ * Implementación O(|trail|): marca seen cada variable involucrada en el
650
+ * conflicto, recorre antecedentes hasta agotar; cualquier var marcada cuyo
651
+ * assumption literal sea distinto de 0 entra al core.
652
+ */
653
+ deriveFailedAssumptions(conflictCi, assumptionList) {
654
+ if (assumptionList.length === 0)
655
+ return [];
656
+ const seen = new Uint8Array(this.numVars + 1);
657
+ const stack = [];
658
+ const pushFromClause = (ci) => {
659
+ const c = this.clauses[ci];
660
+ if (!c)
661
+ return;
662
+ for (let i = 0; i < c.length; i++) {
663
+ const v = Math.abs(c[i]);
664
+ if (v === 0 || seen[v])
665
+ continue;
666
+ seen[v] = 1;
667
+ stack.push(v);
668
+ }
669
+ };
670
+ pushFromClause(conflictCi);
671
+ while (stack.length > 0) {
672
+ const v = stack.pop();
673
+ if (v === undefined)
674
+ break;
675
+ const ante = this.varAnte[v];
676
+ if (ante !== undefined && ante !== cdcl_v2_1.NO_ANTECEDENT) {
677
+ pushFromClause(ante);
678
+ }
679
+ }
680
+ // Recolectar assumptions cuyas vars quedaron marcadas, en el orden
681
+ // en que fueron enqueued (estable, útil para clientes).
682
+ const failed = [];
683
+ for (const a of assumptionList) {
684
+ const v = Math.abs(a);
685
+ if (seen[v])
686
+ failed.push(a);
687
+ }
688
+ // Si por alguna razón el cone no atrapó ninguna assumption (caso
689
+ // degenerado: conflicto puro entre unitarias originales bajo ese contexto),
690
+ // devolvemos todas las assumptions como fallback seguro.
691
+ if (failed.length === 0)
692
+ return assumptionList.slice();
693
+ return failed;
694
+ }
695
+ maybeReduceLearned() {
696
+ const learnedCount = this.learnedMeta.size;
697
+ if (learnedCount < 200)
698
+ return;
699
+ // Marcar locked (las que actualmente sirven de antecedente).
700
+ for (const m of this.learnedMeta.values())
701
+ m.locked = false;
702
+ for (let v = 1; v <= this.numVars; v++) {
703
+ const ante = this.varAnte[v];
704
+ if (ante !== cdcl_v2_1.NO_ANTECEDENT && this.learnedMeta.has(ante)) {
705
+ const m = this.learnedMeta.get(ante);
706
+ if (m)
707
+ m.locked = true;
708
+ }
709
+ }
710
+ const toRemove = new Set((0, cdcl_v2_1.selectClausesToRemove)(Array.from(this.learnedMeta.values()), this.opts.lbdReduceThreshold));
711
+ if (toRemove.size === 0)
712
+ return;
713
+ // Backtrack a baseLevel sería costoso aquí; v1 hacemos un GC simple
714
+ // marcando huecos. Estrategia: en lugar de reindexar (caro), saltamos
715
+ // las cláusulas marcadas vaciando su contenido lógico. Esto preserva
716
+ // los índices (antecedentes y watches siguen siendo válidos pero las
717
+ // cláusulas reducidas son inertes). Para mantener watches consistentes,
718
+ // simplemente las dejamos como están: ningún literal "false" forzará
719
+ // unit propagation desde una cláusula sin watches actualizados... pero
720
+ // como están vivas en watches, las skipeamos al detectar la marca.
721
+ // Para v1, simplemente no reducimos en caliente; se hace solo al pop.
722
+ // (Mantener este path como no-op evita un bug sutil con watches.)
723
+ void toRemove;
724
+ }
725
+ }
726
+ exports.IncrementalCDCL = IncrementalCDCL;
727
+ //# sourceMappingURL=solver.js.map