@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.
- package/README.md +47 -7
- package/dist/api.d.ts +2 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +5 -1
- package/dist/api.js.map +1 -1
- package/dist/argumentation/dot.d.ts +3 -0
- package/dist/argumentation/dot.d.ts.map +1 -0
- package/dist/argumentation/dot.js +25 -0
- package/dist/argumentation/dot.js.map +1 -0
- package/dist/argumentation/extensions.d.ts +11 -0
- package/dist/argumentation/extensions.d.ts.map +1 -0
- package/dist/argumentation/extensions.js +173 -0
- package/dist/argumentation/extensions.js.map +1 -0
- package/dist/argumentation/framework.d.ts +13 -0
- package/dist/argumentation/framework.d.ts.map +1 -0
- package/dist/argumentation/framework.js +117 -0
- package/dist/argumentation/framework.js.map +1 -0
- package/dist/argumentation/index.d.ts +6 -0
- package/dist/argumentation/index.d.ts.map +1 -0
- package/dist/argumentation/index.js +33 -0
- package/dist/argumentation/index.js.map +1 -0
- package/dist/argumentation/types.d.ts +11 -0
- package/dist/argumentation/types.d.ts.map +1 -0
- package/dist/argumentation/types.js +8 -0
- package/dist/argumentation/types.js.map +1 -0
- package/dist/ast/visitor.d.ts +95 -0
- package/dist/ast/visitor.d.ts.map +1 -0
- package/dist/ast/visitor.js +223 -0
- package/dist/ast/visitor.js.map +1 -0
- package/dist/citation-reasoning/derive.d.ts +31 -0
- package/dist/citation-reasoning/derive.d.ts.map +1 -0
- package/dist/citation-reasoning/derive.js +157 -0
- package/dist/citation-reasoning/derive.js.map +1 -0
- package/dist/citation-reasoning/index.d.ts +4 -0
- package/dist/citation-reasoning/index.d.ts.map +1 -0
- package/dist/citation-reasoning/index.js +10 -0
- package/dist/citation-reasoning/index.js.map +1 -0
- package/dist/citation-reasoning/types.d.ts +36 -0
- package/dist/citation-reasoning/types.d.ts.map +1 -0
- package/dist/citation-reasoning/types.js +6 -0
- package/dist/citation-reasoning/types.js.map +1 -0
- package/dist/educational/checker.d.ts +3 -0
- package/dist/educational/checker.d.ts.map +1 -0
- package/dist/educational/checker.js +244 -0
- package/dist/educational/checker.js.map +1 -0
- package/dist/educational/generator.d.ts +4 -0
- package/dist/educational/generator.d.ts.map +1 -0
- package/dist/educational/generator.js +158 -0
- package/dist/educational/generator.js.map +1 -0
- package/dist/educational/index.d.ts +6 -0
- package/dist/educational/index.d.ts.map +1 -0
- package/dist/educational/index.js +21 -0
- package/dist/educational/index.js.map +1 -0
- package/dist/educational/normalize.d.ts +6 -0
- package/dist/educational/normalize.d.ts.map +1 -0
- package/dist/educational/normalize.js +124 -0
- package/dist/educational/normalize.js.map +1 -0
- package/dist/educational/rng.d.ts +10 -0
- package/dist/educational/rng.d.ts.map +1 -0
- package/dist/educational/rng.js +47 -0
- package/dist/educational/rng.js.map +1 -0
- package/dist/educational/templates.d.ts +30 -0
- package/dist/educational/templates.d.ts.map +1 -0
- package/dist/educational/templates.js +567 -0
- package/dist/educational/templates.js.map +1 -0
- package/dist/educational/types.d.ts +44 -0
- package/dist/educational/types.d.ts.map +1 -0
- package/dist/educational/types.js +20 -0
- package/dist/educational/types.js.map +1 -0
- package/dist/exporters/coq/index.d.ts +35 -0
- package/dist/exporters/coq/index.d.ts.map +1 -0
- package/dist/exporters/coq/index.js +299 -0
- package/dist/exporters/coq/index.js.map +1 -0
- package/dist/fol-prover/cnf.d.ts +10 -0
- package/dist/fol-prover/cnf.d.ts.map +1 -0
- package/dist/fol-prover/cnf.js +357 -0
- package/dist/fol-prover/cnf.js.map +1 -0
- package/dist/fol-prover/index.d.ts +7 -0
- package/dist/fol-prover/index.d.ts.map +1 -0
- package/dist/fol-prover/index.js +27 -0
- package/dist/fol-prover/index.js.map +1 -0
- package/dist/fol-prover/prove.d.ts +4 -0
- package/dist/fol-prover/prove.d.ts.map +1 -0
- package/dist/fol-prover/prove.js +34 -0
- package/dist/fol-prover/prove.js.map +1 -0
- package/dist/fol-prover/resolve.d.ts +27 -0
- package/dist/fol-prover/resolve.d.ts.map +1 -0
- package/dist/fol-prover/resolve.js +234 -0
- package/dist/fol-prover/resolve.js.map +1 -0
- package/dist/fol-prover/types.d.ts +34 -0
- package/dist/fol-prover/types.d.ts.map +1 -0
- package/dist/fol-prover/types.js +38 -0
- package/dist/fol-prover/types.js.map +1 -0
- package/dist/fol-prover/unify.d.ts +9 -0
- package/dist/fol-prover/unify.d.ts.map +1 -0
- package/dist/fol-prover/unify.js +110 -0
- package/dist/fol-prover/unify.js.map +1 -0
- package/dist/hyperreal/index.d.ts +45 -0
- package/dist/hyperreal/index.d.ts.map +1 -0
- package/dist/hyperreal/index.js +183 -0
- package/dist/hyperreal/index.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -1
- package/dist/index.js.map +1 -1
- package/dist/lsp/index.d.ts +6 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +29 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/protocol.d.ts +20 -0
- package/dist/lsp/protocol.d.ts.map +1 -0
- package/dist/lsp/protocol.js +64 -0
- package/dist/lsp/protocol.js.map +1 -0
- package/dist/lsp/server.d.ts +47 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +529 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/types.d.ts +152 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +70 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/parser/formulas.d.ts +7 -0
- package/dist/parser/formulas.d.ts.map +1 -0
- package/dist/parser/formulas.js +511 -0
- package/dist/parser/formulas.js.map +1 -0
- package/dist/parser/parser.d.ts +11 -41
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +410 -1037
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/state.d.ts +34 -0
- package/dist/parser/state.d.ts.map +1 -0
- package/dist/parser/state.js +163 -0
- package/dist/parser/state.js.map +1 -0
- package/dist/plugin-system/demo-min-logic.d.ts +3 -0
- package/dist/plugin-system/demo-min-logic.d.ts.map +1 -0
- package/dist/plugin-system/demo-min-logic.js +116 -0
- package/dist/plugin-system/demo-min-logic.js.map +1 -0
- package/dist/plugin-system/errors.d.ts +9 -0
- package/dist/plugin-system/errors.d.ts.map +1 -0
- package/dist/plugin-system/errors.js +24 -0
- package/dist/plugin-system/errors.js.map +1 -0
- package/dist/plugin-system/index.d.ts +6 -0
- package/dist/plugin-system/index.d.ts.map +1 -0
- package/dist/plugin-system/index.js +14 -0
- package/dist/plugin-system/index.js.map +1 -0
- package/dist/plugin-system/registry.d.ts +12 -0
- package/dist/plugin-system/registry.d.ts.map +1 -0
- package/dist/plugin-system/registry.js +46 -0
- package/dist/plugin-system/registry.js.map +1 -0
- package/dist/plugin-system/types.d.ts +23 -0
- package/dist/plugin-system/types.d.ts.map +1 -0
- package/dist/plugin-system/types.js +3 -0
- package/dist/plugin-system/types.js.map +1 -0
- package/dist/plugin-system/validate.d.ts +4 -0
- package/dist/plugin-system/validate.d.ts.map +1 -0
- package/dist/plugin-system/validate.js +60 -0
- package/dist/plugin-system/validate.js.map +1 -0
- package/dist/profiles/classical/parallel-sat.js +3 -3
- package/dist/profiles/classical/parallel-sat.js.map +1 -1
- package/dist/proof-exchange/index.d.ts +26 -0
- package/dist/proof-exchange/index.d.ts.map +1 -0
- package/dist/proof-exchange/index.js +94 -0
- package/dist/proof-exchange/index.js.map +1 -0
- package/dist/runtime/memo/cache.d.ts +32 -0
- package/dist/runtime/memo/cache.d.ts.map +1 -0
- package/dist/runtime/memo/cache.js +129 -0
- package/dist/runtime/memo/cache.js.map +1 -0
- package/dist/runtime/memo/hash.d.ts +9 -0
- package/dist/runtime/memo/hash.d.ts.map +1 -0
- package/dist/runtime/memo/hash.js +87 -0
- package/dist/runtime/memo/hash.js.map +1 -0
- package/dist/runtime/memo/index.d.ts +4 -0
- package/dist/runtime/memo/index.d.ts.map +1 -0
- package/dist/runtime/memo/index.js +8 -0
- package/dist/runtime/memo/index.js.map +1 -0
- package/dist/runtime/parallel/index.d.ts +34 -0
- package/dist/runtime/parallel/index.d.ts.map +1 -0
- package/dist/runtime/parallel/index.js +220 -0
- package/dist/runtime/parallel/index.js.map +1 -0
- package/dist/runtime/parallel/worker.d.ts +22 -0
- package/dist/runtime/parallel/worker.d.ts.map +1 -0
- package/dist/runtime/parallel/worker.js +43 -0
- package/dist/runtime/parallel/worker.js.map +1 -0
- package/dist/runtime/smt/index.d.ts +6 -0
- package/dist/runtime/smt/index.d.ts.map +1 -0
- package/dist/runtime/smt/index.js +18 -0
- package/dist/runtime/smt/index.js.map +1 -0
- package/dist/runtime/smt/mock-backend.d.ts +30 -0
- package/dist/runtime/smt/mock-backend.d.ts.map +1 -0
- package/dist/runtime/smt/mock-backend.js +460 -0
- package/dist/runtime/smt/mock-backend.js.map +1 -0
- package/dist/runtime/smt/serializer.d.ts +21 -0
- package/dist/runtime/smt/serializer.d.ts.map +1 -0
- package/dist/runtime/smt/serializer.js +314 -0
- package/dist/runtime/smt/serializer.js.map +1 -0
- package/dist/runtime/smt/subprocess-backend.d.ts +62 -0
- package/dist/runtime/smt/subprocess-backend.d.ts.map +1 -0
- package/dist/runtime/smt/subprocess-backend.js +261 -0
- package/dist/runtime/smt/subprocess-backend.js.map +1 -0
- package/dist/runtime/smt/types.d.ts +57 -0
- package/dist/runtime/smt/types.d.ts.map +1 -0
- package/dist/runtime/smt/types.js +6 -0
- package/dist/runtime/smt/types.js.map +1 -0
- package/dist/runtime/streaming/index.d.ts +4 -0
- package/dist/runtime/streaming/index.d.ts.map +1 -0
- package/dist/runtime/streaming/index.js +9 -0
- package/dist/runtime/streaming/index.js.map +1 -0
- package/dist/runtime/streaming/stream-eval.d.ts +31 -0
- package/dist/runtime/streaming/stream-eval.d.ts.map +1 -0
- package/dist/runtime/streaming/stream-eval.js +155 -0
- package/dist/runtime/streaming/stream-eval.js.map +1 -0
- package/dist/runtime/streaming/types.d.ts +33 -0
- package/dist/runtime/streaming/types.d.ts.map +1 -0
- package/dist/runtime/streaming/types.js +6 -0
- package/dist/runtime/streaming/types.js.map +1 -0
- package/dist/runtime/typecheck/checker.d.ts +72 -0
- package/dist/runtime/typecheck/checker.d.ts.map +1 -0
- package/dist/runtime/typecheck/checker.js +462 -0
- package/dist/runtime/typecheck/checker.js.map +1 -0
- package/dist/runtime/typecheck/index.d.ts +4 -0
- package/dist/runtime/typecheck/index.d.ts.map +1 -0
- package/dist/runtime/typecheck/index.js +13 -0
- package/dist/runtime/typecheck/index.js.map +1 -0
- package/dist/runtime/typecheck/levenshtein.d.ts +11 -0
- package/dist/runtime/typecheck/levenshtein.d.ts.map +1 -0
- package/dist/runtime/typecheck/levenshtein.js +49 -0
- package/dist/runtime/typecheck/levenshtein.js.map +1 -0
- package/dist/runtime/typecheck/types.d.ts +14 -0
- package/dist/runtime/typecheck/types.d.ts.map +1 -0
- package/dist/runtime/typecheck/types.js +26 -0
- package/dist/runtime/typecheck/types.js.map +1 -0
- package/dist/solver/cdcl-v2/clause-learning.d.ts +33 -0
- package/dist/solver/cdcl-v2/clause-learning.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/clause-learning.js +110 -0
- package/dist/solver/cdcl-v2/clause-learning.js.map +1 -0
- package/dist/solver/cdcl-v2/index.d.ts +9 -0
- package/dist/solver/cdcl-v2/index.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/index.js +39 -0
- package/dist/solver/cdcl-v2/index.js.map +1 -0
- package/dist/solver/cdcl-v2/lbd.d.ts +34 -0
- package/dist/solver/cdcl-v2/lbd.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/lbd.js +72 -0
- package/dist/solver/cdcl-v2/lbd.js.map +1 -0
- package/dist/solver/cdcl-v2/luby.d.ts +28 -0
- package/dist/solver/cdcl-v2/luby.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/luby.js +70 -0
- package/dist/solver/cdcl-v2/luby.js.map +1 -0
- package/dist/solver/cdcl-v2/phase-saving.d.ts +14 -0
- package/dist/solver/cdcl-v2/phase-saving.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/phase-saving.js +44 -0
- package/dist/solver/cdcl-v2/phase-saving.js.map +1 -0
- package/dist/solver/cdcl-v2/solver.d.ts +10 -0
- package/dist/solver/cdcl-v2/solver.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/solver.js +442 -0
- package/dist/solver/cdcl-v2/solver.js.map +1 -0
- package/dist/solver/cdcl-v2/state.d.ts +54 -0
- package/dist/solver/cdcl-v2/state.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/state.js +22 -0
- package/dist/solver/cdcl-v2/state.js.map +1 -0
- package/dist/solver/cdcl-v2/vsids.d.ts +19 -0
- package/dist/solver/cdcl-v2/vsids.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/vsids.js +77 -0
- package/dist/solver/cdcl-v2/vsids.js.map +1 -0
- package/dist/tests/agora-integration-fixtures.test.js.map +1 -1
- package/dist/tests/argumentation/dung.test.d.ts +2 -0
- package/dist/tests/argumentation/dung.test.d.ts.map +1 -0
- package/dist/tests/argumentation/dung.test.js +219 -0
- package/dist/tests/argumentation/dung.test.js.map +1 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.d.ts +2 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.d.ts.map +1 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.js +240 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.js.map +1 -0
- package/dist/tests/coverage-fill-api.test.d.ts +7 -0
- package/dist/tests/coverage-fill-api.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-api.test.js +310 -0
- package/dist/tests/coverage-fill-api.test.js.map +1 -0
- package/dist/tests/coverage-fill-aristotelian.test.d.ts +7 -0
- package/dist/tests/coverage-fill-aristotelian.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-aristotelian.test.js +377 -0
- package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -0
- package/dist/tests/coverage-fill-belnap.test.d.ts +6 -0
- package/dist/tests/coverage-fill-belnap.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-belnap.test.js +277 -0
- package/dist/tests/coverage-fill-belnap.test.js.map +1 -0
- package/dist/tests/coverage-fill-cross-system.test.d.ts +6 -0
- package/dist/tests/coverage-fill-cross-system.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-cross-system.test.js +75 -0
- package/dist/tests/coverage-fill-cross-system.test.js.map +1 -0
- package/dist/tests/coverage-fill-fallacies.test.d.ts +6 -0
- package/dist/tests/coverage-fill-fallacies.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-fallacies.test.js +287 -0
- package/dist/tests/coverage-fill-fallacies.test.js.map +1 -0
- package/dist/tests/coverage-fill-format.test.d.ts +7 -0
- package/dist/tests/coverage-fill-format.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-format.test.js +455 -0
- package/dist/tests/coverage-fill-format.test.js.map +1 -0
- package/dist/tests/coverage-fill-intuitionistic.test.d.ts +6 -0
- package/dist/tests/coverage-fill-intuitionistic.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-intuitionistic.test.js +293 -0
- package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -0
- package/dist/tests/coverage-fill-probabilistic.test.d.ts +7 -0
- package/dist/tests/coverage-fill-probabilistic.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-probabilistic.test.js +314 -0
- package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -0
- package/dist/tests/educational/checker.test.d.ts +2 -0
- package/dist/tests/educational/checker.test.d.ts.map +1 -0
- package/dist/tests/educational/checker.test.js +212 -0
- package/dist/tests/educational/checker.test.js.map +1 -0
- package/dist/tests/educational/generator.test.d.ts +2 -0
- package/dist/tests/educational/generator.test.d.ts.map +1 -0
- package/dist/tests/educational/generator.test.js +137 -0
- package/dist/tests/educational/generator.test.js.map +1 -0
- package/dist/tests/exporters/coq/coq-exporter.test.d.ts +2 -0
- package/dist/tests/exporters/coq/coq-exporter.test.d.ts.map +1 -0
- package/dist/tests/exporters/coq/coq-exporter.test.js +353 -0
- package/dist/tests/exporters/coq/coq-exporter.test.js.map +1 -0
- package/dist/tests/fol-prover/cnf.test.d.ts +2 -0
- package/dist/tests/fol-prover/cnf.test.d.ts.map +1 -0
- package/dist/tests/fol-prover/cnf.test.js +74 -0
- package/dist/tests/fol-prover/cnf.test.js.map +1 -0
- package/dist/tests/fol-prover/prove.test.d.ts +2 -0
- package/dist/tests/fol-prover/prove.test.d.ts.map +1 -0
- package/dist/tests/fol-prover/prove.test.js +106 -0
- package/dist/tests/fol-prover/prove.test.js.map +1 -0
- package/dist/tests/fol-prover/unify.test.d.ts +2 -0
- package/dist/tests/fol-prover/unify.test.d.ts.map +1 -0
- package/dist/tests/fol-prover/unify.test.js +66 -0
- package/dist/tests/fol-prover/unify.test.js.map +1 -0
- package/dist/tests/hyperreal/hyperreal.test.d.ts +2 -0
- package/dist/tests/hyperreal/hyperreal.test.d.ts.map +1 -0
- package/dist/tests/hyperreal/hyperreal.test.js +219 -0
- package/dist/tests/hyperreal/hyperreal.test.js.map +1 -0
- package/dist/tests/lsp/server.test.d.ts +2 -0
- package/dist/tests/lsp/server.test.d.ts.map +1 -0
- package/dist/tests/lsp/server.test.js +406 -0
- package/dist/tests/lsp/server.test.js.map +1 -0
- package/dist/tests/memo/cache.test.d.ts +2 -0
- package/dist/tests/memo/cache.test.d.ts.map +1 -0
- package/dist/tests/memo/cache.test.js +252 -0
- package/dist/tests/memo/cache.test.js.map +1 -0
- package/dist/tests/parallel/parallel-pool.test.d.ts +11 -0
- package/dist/tests/parallel/parallel-pool.test.d.ts.map +1 -0
- package/dist/tests/parallel/parallel-pool.test.js +192 -0
- package/dist/tests/parallel/parallel-pool.test.js.map +1 -0
- package/dist/tests/plugin-system/demo-min-logic.test.d.ts +2 -0
- package/dist/tests/plugin-system/demo-min-logic.test.d.ts.map +1 -0
- package/dist/tests/plugin-system/demo-min-logic.test.js +85 -0
- package/dist/tests/plugin-system/demo-min-logic.test.js.map +1 -0
- package/dist/tests/plugin-system/registry.test.d.ts +2 -0
- package/dist/tests/plugin-system/registry.test.d.ts.map +1 -0
- package/dist/tests/plugin-system/registry.test.js +88 -0
- package/dist/tests/plugin-system/registry.test.js.map +1 -0
- package/dist/tests/plugin-system/validate.test.d.ts +2 -0
- package/dist/tests/plugin-system/validate.test.d.ts.map +1 -0
- package/dist/tests/plugin-system/validate.test.js +101 -0
- package/dist/tests/plugin-system/validate.test.js.map +1 -0
- package/dist/tests/proof-exchange/proof-exchange.test.d.ts +2 -0
- package/dist/tests/proof-exchange/proof-exchange.test.d.ts.map +1 -0
- package/dist/tests/proof-exchange/proof-exchange.test.js +161 -0
- package/dist/tests/proof-exchange/proof-exchange.test.js.map +1 -0
- package/dist/tests/sat-v2/clause-learning.test.d.ts +2 -0
- package/dist/tests/sat-v2/clause-learning.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/clause-learning.test.js +73 -0
- package/dist/tests/sat-v2/clause-learning.test.js.map +1 -0
- package/dist/tests/sat-v2/lbd.test.d.ts +2 -0
- package/dist/tests/sat-v2/lbd.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/lbd.test.js +82 -0
- package/dist/tests/sat-v2/lbd.test.js.map +1 -0
- package/dist/tests/sat-v2/luby.test.d.ts +2 -0
- package/dist/tests/sat-v2/luby.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/luby.test.js +58 -0
- package/dist/tests/sat-v2/luby.test.js.map +1 -0
- package/dist/tests/sat-v2/phase-saving.test.d.ts +2 -0
- package/dist/tests/sat-v2/phase-saving.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/phase-saving.test.js +38 -0
- package/dist/tests/sat-v2/phase-saving.test.js.map +1 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.d.ts +2 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.js +199 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.js.map +1 -0
- package/dist/tests/sat-v2/vsids.test.d.ts +2 -0
- package/dist/tests/sat-v2/vsids.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/vsids.test.js +69 -0
- package/dist/tests/sat-v2/vsids.test.js.map +1 -0
- package/dist/tests/smt/mock-backend.test.d.ts +2 -0
- package/dist/tests/smt/mock-backend.test.d.ts.map +1 -0
- package/dist/tests/smt/mock-backend.test.js +129 -0
- package/dist/tests/smt/mock-backend.test.js.map +1 -0
- package/dist/tests/smt/serializer.test.d.ts +2 -0
- package/dist/tests/smt/serializer.test.d.ts.map +1 -0
- package/dist/tests/smt/serializer.test.js +94 -0
- package/dist/tests/smt/serializer.test.js.map +1 -0
- package/dist/tests/smt/subprocess-backend.test.d.ts +2 -0
- package/dist/tests/smt/subprocess-backend.test.d.ts.map +1 -0
- package/dist/tests/smt/subprocess-backend.test.js +89 -0
- package/dist/tests/smt/subprocess-backend.test.js.map +1 -0
- package/dist/tests/streaming/stream-eval.test.d.ts +2 -0
- package/dist/tests/streaming/stream-eval.test.d.ts.map +1 -0
- package/dist/tests/streaming/stream-eval.test.js +170 -0
- package/dist/tests/streaming/stream-eval.test.js.map +1 -0
- package/dist/tests/text-layer-v2/claim-graph.test.d.ts +2 -0
- package/dist/tests/text-layer-v2/claim-graph.test.d.ts.map +1 -0
- package/dist/tests/text-layer-v2/claim-graph.test.js +255 -0
- package/dist/tests/text-layer-v2/claim-graph.test.js.map +1 -0
- package/dist/tests/time-travel/snapshot.test.d.ts +2 -0
- package/dist/tests/time-travel/snapshot.test.d.ts.map +1 -0
- package/dist/tests/time-travel/snapshot.test.js +75 -0
- package/dist/tests/time-travel/snapshot.test.js.map +1 -0
- package/dist/tests/time-travel/store.test.d.ts +2 -0
- package/dist/tests/time-travel/store.test.d.ts.map +1 -0
- package/dist/tests/time-travel/store.test.js +242 -0
- package/dist/tests/time-travel/store.test.js.map +1 -0
- package/dist/tests/typecheck-core.test.d.ts +2 -0
- package/dist/tests/typecheck-core.test.d.ts.map +1 -0
- package/dist/tests/typecheck-core.test.js +339 -0
- package/dist/tests/typecheck-core.test.js.map +1 -0
- package/dist/text-layer/v2/claim-graph.d.ts +45 -0
- package/dist/text-layer/v2/claim-graph.d.ts.map +1 -0
- package/dist/text-layer/v2/claim-graph.js +270 -0
- package/dist/text-layer/v2/claim-graph.js.map +1 -0
- package/dist/text-layer/v2/index.d.ts +6 -0
- package/dist/text-layer/v2/index.d.ts.map +1 -0
- package/dist/text-layer/v2/index.js +10 -0
- package/dist/text-layer/v2/index.js.map +1 -0
- package/dist/text-layer/v2/types.d.ts +32 -0
- package/dist/text-layer/v2/types.d.ts.map +1 -0
- package/dist/text-layer/v2/types.js +11 -0
- package/dist/text-layer/v2/types.js.map +1 -0
- package/dist/time-travel/index.d.ts +4 -0
- package/dist/time-travel/index.d.ts.map +1 -0
- package/dist/time-travel/index.js +8 -0
- package/dist/time-travel/index.js.map +1 -0
- package/dist/time-travel/snapshot.d.ts +9 -0
- package/dist/time-travel/snapshot.d.ts.map +1 -0
- package/dist/time-travel/snapshot.js +24 -0
- package/dist/time-travel/snapshot.js.map +1 -0
- package/dist/time-travel/store.d.ts +14 -0
- package/dist/time-travel/store.d.ts.map +1 -0
- package/dist/time-travel/store.js +119 -0
- package/dist/time-travel/store.js.map +1 -0
- package/dist/time-travel/types.d.ts +50 -0
- package/dist/time-travel/types.d.ts.map +1 -0
- package/dist/time-travel/types.js +3 -0
- package/dist/time-travel/types.js.map +1 -0
- 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":"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"}
|
|
@@ -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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"}
|