@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.
- package/dist/belief-revision/agm.d.ts +76 -0
- package/dist/belief-revision/agm.d.ts.map +1 -0
- package/dist/belief-revision/agm.js +249 -0
- package/dist/belief-revision/agm.js.map +1 -0
- package/dist/belief-revision/index.d.ts +6 -0
- package/dist/belief-revision/index.d.ts.map +1 -0
- package/dist/belief-revision/index.js +33 -0
- package/dist/belief-revision/index.js.map +1 -0
- package/dist/belief-revision/parser.d.ts +16 -0
- package/dist/belief-revision/parser.d.ts.map +1 -0
- package/dist/belief-revision/parser.js +199 -0
- package/dist/belief-revision/parser.js.map +1 -0
- package/dist/belief-revision/sat.d.ts +19 -0
- package/dist/belief-revision/sat.d.ts.map +1 -0
- package/dist/belief-revision/sat.js +90 -0
- package/dist/belief-revision/sat.js.map +1 -0
- package/dist/belief-revision/types.d.ts +51 -0
- package/dist/belief-revision/types.d.ts.map +1 -0
- package/dist/belief-revision/types.js +10 -0
- package/dist/belief-revision/types.js.map +1 -0
- package/dist/curry-howard/index.d.ts +7 -0
- package/dist/curry-howard/index.d.ts.map +1 -0
- package/dist/curry-howard/index.js +46 -0
- package/dist/curry-howard/index.js.map +1 -0
- package/dist/curry-howard/infer.d.ts +9 -0
- package/dist/curry-howard/infer.d.ts.map +1 -0
- package/dist/curry-howard/infer.js +129 -0
- package/dist/curry-howard/infer.js.map +1 -0
- package/dist/curry-howard/proof.d.ts +7 -0
- package/dist/curry-howard/proof.d.ts.map +1 -0
- package/dist/curry-howard/proof.js +282 -0
- package/dist/curry-howard/proof.js.map +1 -0
- package/dist/curry-howard/reduce.d.ts +7 -0
- package/dist/curry-howard/reduce.d.ts.map +1 -0
- package/dist/curry-howard/reduce.js +266 -0
- package/dist/curry-howard/reduce.js.map +1 -0
- package/dist/curry-howard/types.d.ts +91 -0
- package/dist/curry-howard/types.d.ts.map +1 -0
- package/dist/curry-howard/types.js +149 -0
- package/dist/curry-howard/types.js.map +1 -0
- package/dist/fol-prover-equality/demodulate.d.ts +29 -0
- package/dist/fol-prover-equality/demodulate.d.ts.map +1 -0
- package/dist/fol-prover-equality/demodulate.js +197 -0
- package/dist/fol-prover-equality/demodulate.js.map +1 -0
- package/dist/fol-prover-equality/index.d.ts +8 -0
- package/dist/fol-prover-equality/index.d.ts.map +1 -0
- package/dist/fol-prover-equality/index.js +24 -0
- package/dist/fol-prover-equality/index.js.map +1 -0
- package/dist/fol-prover-equality/paramodulate.d.ts +46 -0
- package/dist/fol-prover-equality/paramodulate.d.ts.map +1 -0
- package/dist/fol-prover-equality/paramodulate.js +159 -0
- package/dist/fol-prover-equality/paramodulate.js.map +1 -0
- package/dist/fol-prover-equality/prove.d.ts +7 -0
- package/dist/fol-prover-equality/prove.d.ts.map +1 -0
- package/dist/fol-prover-equality/prove.js +307 -0
- package/dist/fol-prover-equality/prove.js.map +1 -0
- package/dist/fol-prover-equality/term-utils.d.ts +43 -0
- package/dist/fol-prover-equality/term-utils.d.ts.map +1 -0
- package/dist/fol-prover-equality/term-utils.js +230 -0
- package/dist/fol-prover-equality/term-utils.js.map +1 -0
- package/dist/fol-prover-equality/types.d.ts +20 -0
- package/dist/fol-prover-equality/types.d.ts.map +1 -0
- package/dist/fol-prover-equality/types.js +5 -0
- package/dist/fol-prover-equality/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/profiles/ctl/check.d.ts +13 -0
- package/dist/profiles/ctl/check.d.ts.map +1 -0
- package/dist/profiles/ctl/check.js +359 -0
- package/dist/profiles/ctl/check.js.map +1 -0
- package/dist/profiles/ctl/index.d.ts +5 -0
- package/dist/profiles/ctl/index.d.ts.map +1 -0
- package/dist/profiles/ctl/index.js +23 -0
- package/dist/profiles/ctl/index.js.map +1 -0
- package/dist/profiles/ctl/types.d.ts +74 -0
- package/dist/profiles/ctl/types.d.ts.map +1 -0
- package/dist/profiles/ctl/types.js +53 -0
- package/dist/profiles/ctl/types.js.map +1 -0
- package/dist/profiles/ctl/witness.d.ts +20 -0
- package/dist/profiles/ctl/witness.d.ts.map +1 -0
- package/dist/profiles/ctl/witness.js +149 -0
- package/dist/profiles/ctl/witness.js.map +1 -0
- package/dist/profiles/default-logic/entailment.d.ts +14 -0
- package/dist/profiles/default-logic/entailment.d.ts.map +1 -0
- package/dist/profiles/default-logic/entailment.js +36 -0
- package/dist/profiles/default-logic/entailment.js.map +1 -0
- package/dist/profiles/default-logic/extensions.d.ts +35 -0
- package/dist/profiles/default-logic/extensions.d.ts.map +1 -0
- package/dist/profiles/default-logic/extensions.js +276 -0
- package/dist/profiles/default-logic/extensions.js.map +1 -0
- package/dist/profiles/default-logic/index.d.ts +5 -0
- package/dist/profiles/default-logic/index.d.ts.map +1 -0
- package/dist/profiles/default-logic/index.js +33 -0
- package/dist/profiles/default-logic/index.js.map +1 -0
- package/dist/profiles/default-logic/types.d.ts +29 -0
- package/dist/profiles/default-logic/types.d.ts.map +1 -0
- package/dist/profiles/default-logic/types.js +25 -0
- package/dist/profiles/default-logic/types.js.map +1 -0
- package/dist/profiles/description-logic/index.d.ts +5 -0
- package/dist/profiles/description-logic/index.d.ts.map +1 -0
- package/dist/profiles/description-logic/index.js +39 -0
- package/dist/profiles/description-logic/index.js.map +1 -0
- package/dist/profiles/description-logic/nnf.d.ts +13 -0
- package/dist/profiles/description-logic/nnf.d.ts.map +1 -0
- package/dist/profiles/description-logic/nnf.js +123 -0
- package/dist/profiles/description-logic/nnf.js.map +1 -0
- package/dist/profiles/description-logic/tableau.d.ts +27 -0
- package/dist/profiles/description-logic/tableau.d.ts.map +1 -0
- package/dist/profiles/description-logic/tableau.js +491 -0
- package/dist/profiles/description-logic/tableau.js.map +1 -0
- package/dist/profiles/description-logic/types.d.ts +45 -0
- package/dist/profiles/description-logic/types.d.ts.map +1 -0
- package/dist/profiles/description-logic/types.js +71 -0
- package/dist/profiles/description-logic/types.js.map +1 -0
- package/dist/profiles/hybrid-logic/index.d.ts +5 -0
- package/dist/profiles/hybrid-logic/index.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/index.js +34 -0
- package/dist/profiles/hybrid-logic/index.js.map +1 -0
- package/dist/profiles/hybrid-logic/sat.d.ts +15 -0
- package/dist/profiles/hybrid-logic/sat.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/sat.js +142 -0
- package/dist/profiles/hybrid-logic/sat.js.map +1 -0
- package/dist/profiles/hybrid-logic/semantics.d.ts +20 -0
- package/dist/profiles/hybrid-logic/semantics.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/semantics.js +107 -0
- package/dist/profiles/hybrid-logic/semantics.js.map +1 -0
- package/dist/profiles/hybrid-logic/types.d.ts +78 -0
- package/dist/profiles/hybrid-logic/types.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/types.js +107 -0
- package/dist/profiles/hybrid-logic/types.js.map +1 -0
- package/dist/profiles/ltl-sat/index.d.ts +4 -0
- package/dist/profiles/ltl-sat/index.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/index.js +40 -0
- package/dist/profiles/ltl-sat/index.js.map +1 -0
- package/dist/profiles/ltl-sat/sat.d.ts +8 -0
- package/dist/profiles/ltl-sat/sat.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/sat.js +140 -0
- package/dist/profiles/ltl-sat/sat.js.map +1 -0
- package/dist/profiles/ltl-sat/tableau.d.ts +19 -0
- package/dist/profiles/ltl-sat/tableau.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/tableau.js +358 -0
- package/dist/profiles/ltl-sat/tableau.js.map +1 -0
- package/dist/profiles/ltl-sat/types.d.ts +52 -0
- package/dist/profiles/ltl-sat/types.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/types.js +101 -0
- package/dist/profiles/ltl-sat/types.js.map +1 -0
- package/dist/profiles/sequent-g3/index.d.ts +5 -0
- package/dist/profiles/sequent-g3/index.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/index.js +23 -0
- package/dist/profiles/sequent-g3/index.js.map +1 -0
- package/dist/profiles/sequent-g3/latex.d.ts +7 -0
- package/dist/profiles/sequent-g3/latex.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/latex.js +107 -0
- package/dist/profiles/sequent-g3/latex.js.map +1 -0
- package/dist/profiles/sequent-g3/normalize.d.ts +15 -0
- package/dist/profiles/sequent-g3/normalize.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/normalize.js +121 -0
- package/dist/profiles/sequent-g3/normalize.js.map +1 -0
- package/dist/profiles/sequent-g3/prover.d.ts +16 -0
- package/dist/profiles/sequent-g3/prover.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/prover.js +348 -0
- package/dist/profiles/sequent-g3/prover.js.map +1 -0
- package/dist/profiles/sequent-g3/types.d.ts +30 -0
- package/dist/profiles/sequent-g3/types.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/types.js +16 -0
- package/dist/profiles/sequent-g3/types.js.map +1 -0
- package/dist/runtime/countermodel-min/index.d.ts +3 -0
- package/dist/runtime/countermodel-min/index.d.ts.map +1 -0
- package/dist/runtime/countermodel-min/index.js +9 -0
- package/dist/runtime/countermodel-min/index.js.map +1 -0
- package/dist/runtime/countermodel-min/minimize.d.ts +17 -0
- package/dist/runtime/countermodel-min/minimize.d.ts.map +1 -0
- package/dist/runtime/countermodel-min/minimize.js +0 -0
- package/dist/runtime/countermodel-min/minimize.js.map +1 -0
- package/dist/runtime/countermodel-min/types.d.ts +40 -0
- package/dist/runtime/countermodel-min/types.d.ts.map +1 -0
- package/dist/runtime/countermodel-min/types.js +6 -0
- package/dist/runtime/countermodel-min/types.js.map +1 -0
- package/dist/runtime/mus/extract.d.ts +34 -0
- package/dist/runtime/mus/extract.d.ts.map +1 -0
- package/dist/runtime/mus/extract.js +243 -0
- package/dist/runtime/mus/extract.js.map +1 -0
- package/dist/runtime/mus/index.d.ts +4 -0
- package/dist/runtime/mus/index.d.ts.map +1 -0
- package/dist/runtime/mus/index.js +12 -0
- package/dist/runtime/mus/index.js.map +1 -0
- package/dist/runtime/mus/quickxplain.d.ts +10 -0
- package/dist/runtime/mus/quickxplain.d.ts.map +1 -0
- package/dist/runtime/mus/quickxplain.js +100 -0
- package/dist/runtime/mus/quickxplain.js.map +1 -0
- package/dist/runtime/mus/types.d.ts +59 -0
- package/dist/runtime/mus/types.d.ts.map +1 -0
- package/dist/runtime/mus/types.js +20 -0
- package/dist/runtime/mus/types.js.map +1 -0
- package/dist/solver/cdcl-v2-incremental/index.d.ts +3 -0
- package/dist/solver/cdcl-v2-incremental/index.d.ts.map +1 -0
- package/dist/solver/cdcl-v2-incremental/index.js +16 -0
- package/dist/solver/cdcl-v2-incremental/index.js.map +1 -0
- package/dist/solver/cdcl-v2-incremental/solver.d.ts +83 -0
- package/dist/solver/cdcl-v2-incremental/solver.d.ts.map +1 -0
- package/dist/solver/cdcl-v2-incremental/solver.js +727 -0
- package/dist/solver/cdcl-v2-incremental/solver.js.map +1 -0
- package/dist/solver/cdcl-v2-incremental/types.d.ts +47 -0
- package/dist/solver/cdcl-v2-incremental/types.d.ts.map +1 -0
- package/dist/solver/cdcl-v2-incremental/types.js +13 -0
- package/dist/solver/cdcl-v2-incremental/types.js.map +1 -0
- package/dist/tests/belief-revision/agm.test.d.ts +2 -0
- package/dist/tests/belief-revision/agm.test.d.ts.map +1 -0
- package/dist/tests/belief-revision/agm.test.js +173 -0
- package/dist/tests/belief-revision/agm.test.js.map +1 -0
- package/dist/tests/countermodel-min/minimize.test.d.ts +2 -0
- package/dist/tests/countermodel-min/minimize.test.d.ts.map +1 -0
- package/dist/tests/countermodel-min/minimize.test.js +241 -0
- package/dist/tests/countermodel-min/minimize.test.js.map +1 -0
- package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts +2 -0
- package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js +255 -0
- package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js.map +1 -0
- package/dist/tests/coverage-95/argumentation.test.d.ts +2 -0
- package/dist/tests/coverage-95/argumentation.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/argumentation.test.js +105 -0
- package/dist/tests/coverage-95/argumentation.test.js.map +1 -0
- package/dist/tests/coverage-95/arithmetic.test.d.ts +2 -0
- package/dist/tests/coverage-95/arithmetic.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/arithmetic.test.js +139 -0
- package/dist/tests/coverage-95/arithmetic.test.js.map +1 -0
- package/dist/tests/coverage-95/belnap.test.d.ts +2 -0
- package/dist/tests/coverage-95/belnap.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/belnap.test.js +145 -0
- package/dist/tests/coverage-95/belnap.test.js.map +1 -0
- package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts +2 -0
- package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/cdcl-v2-solver.test.js +61 -0
- package/dist/tests/coverage-95/cdcl-v2-solver.test.js.map +1 -0
- package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts +2 -0
- package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/classical-propositional-direct.test.js +175 -0
- package/dist/tests/coverage-95/classical-propositional-direct.test.js.map +1 -0
- package/dist/tests/coverage-95/compat.test.d.ts +2 -0
- package/dist/tests/coverage-95/compat.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/compat.test.js +82 -0
- package/dist/tests/coverage-95/compat.test.js.map +1 -0
- package/dist/tests/coverage-95/examples-runner.test.d.ts +2 -0
- package/dist/tests/coverage-95/examples-runner.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/examples-runner.test.js +34 -0
- package/dist/tests/coverage-95/examples-runner.test.js.map +1 -0
- package/dist/tests/coverage-95/first-order.test.d.ts +2 -0
- package/dist/tests/coverage-95/first-order.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/first-order.test.js +138 -0
- package/dist/tests/coverage-95/first-order.test.js.map +1 -0
- package/dist/tests/coverage-95/fol-prover.test.d.ts +2 -0
- package/dist/tests/coverage-95/fol-prover.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/fol-prover.test.js +228 -0
- package/dist/tests/coverage-95/fol-prover.test.js.map +1 -0
- package/dist/tests/coverage-95/interpreter-commands.test.d.ts +2 -0
- package/dist/tests/coverage-95/interpreter-commands.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/interpreter-commands.test.js +332 -0
- package/dist/tests/coverage-95/interpreter-commands.test.js.map +1 -0
- package/dist/tests/coverage-95/lsp-server.test.d.ts +2 -0
- package/dist/tests/coverage-95/lsp-server.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/lsp-server.test.js +181 -0
- package/dist/tests/coverage-95/lsp-server.test.js.map +1 -0
- package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts +2 -0
- package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/modal-tableau-profiles.test.js +157 -0
- package/dist/tests/coverage-95/modal-tableau-profiles.test.js.map +1 -0
- package/dist/tests/coverage-95/parallel-sat.test.d.ts +2 -0
- package/dist/tests/coverage-95/parallel-sat.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/parallel-sat.test.js +42 -0
- package/dist/tests/coverage-95/parallel-sat.test.js.map +1 -0
- package/dist/tests/coverage-95/parser-extra.test.d.ts +2 -0
- package/dist/tests/coverage-95/parser-extra.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/parser-extra.test.js +210 -0
- package/dist/tests/coverage-95/parser-extra.test.js.map +1 -0
- package/dist/tests/coverage-95/propositional-utilities.test.d.ts +2 -0
- package/dist/tests/coverage-95/propositional-utilities.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/propositional-utilities.test.js +281 -0
- package/dist/tests/coverage-95/propositional-utilities.test.js.map +1 -0
- package/dist/tests/coverage-95/protocol-handler.test.d.ts +2 -0
- package/dist/tests/coverage-95/protocol-handler.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/protocol-handler.test.js +275 -0
- package/dist/tests/coverage-95/protocol-handler.test.js.map +1 -0
- package/dist/tests/coverage-95/smt-mock-backend.test.d.ts +2 -0
- package/dist/tests/coverage-95/smt-mock-backend.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/smt-mock-backend.test.js +201 -0
- package/dist/tests/coverage-95/smt-mock-backend.test.js.map +1 -0
- package/dist/tests/coverage-95/smt-serializer.test.d.ts +2 -0
- package/dist/tests/coverage-95/smt-serializer.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/smt-serializer.test.js +143 -0
- package/dist/tests/coverage-95/smt-serializer.test.js.map +1 -0
- package/dist/tests/coverage-95/smt-subprocess.test.d.ts +2 -0
- package/dist/tests/coverage-95/smt-subprocess.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/smt-subprocess.test.js +96 -0
- package/dist/tests/coverage-95/smt-subprocess.test.js.map +1 -0
- package/dist/tests/coverage-95/tableau-engine.test.d.ts +2 -0
- package/dist/tests/coverage-95/tableau-engine.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/tableau-engine.test.js +125 -0
- package/dist/tests/coverage-95/tableau-engine.test.js.map +1 -0
- package/dist/tests/coverage-95/temporal-ltl.test.d.ts +2 -0
- package/dist/tests/coverage-95/temporal-ltl.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/temporal-ltl.test.js +94 -0
- package/dist/tests/coverage-95/temporal-ltl.test.js.map +1 -0
- package/dist/tests/coverage-95/typecheck-checker.test.d.ts +2 -0
- package/dist/tests/coverage-95/typecheck-checker.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/typecheck-checker.test.js +191 -0
- package/dist/tests/coverage-95/typecheck-checker.test.js.map +1 -0
- package/dist/tests/coverage-95/undecidability-detector.test.d.ts +2 -0
- package/dist/tests/coverage-95/undecidability-detector.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/undecidability-detector.test.js +149 -0
- package/dist/tests/coverage-95/undecidability-detector.test.js.map +1 -0
- package/dist/tests/coverage-95/visitor.test.d.ts +2 -0
- package/dist/tests/coverage-95/visitor.test.d.ts.map +1 -0
- package/dist/tests/coverage-95/visitor.test.js +140 -0
- package/dist/tests/coverage-95/visitor.test.js.map +1 -0
- package/dist/tests/ctl/check.test.d.ts +2 -0
- package/dist/tests/ctl/check.test.d.ts.map +1 -0
- package/dist/tests/ctl/check.test.js +337 -0
- package/dist/tests/ctl/check.test.js.map +1 -0
- package/dist/tests/curry-howard/infer.test.d.ts +2 -0
- package/dist/tests/curry-howard/infer.test.d.ts.map +1 -0
- package/dist/tests/curry-howard/infer.test.js +93 -0
- package/dist/tests/curry-howard/infer.test.js.map +1 -0
- package/dist/tests/curry-howard/proof.test.d.ts +2 -0
- package/dist/tests/curry-howard/proof.test.d.ts.map +1 -0
- package/dist/tests/curry-howard/proof.test.js +105 -0
- package/dist/tests/curry-howard/proof.test.js.map +1 -0
- package/dist/tests/curry-howard/reduce.test.d.ts +2 -0
- package/dist/tests/curry-howard/reduce.test.d.ts.map +1 -0
- package/dist/tests/curry-howard/reduce.test.js +109 -0
- package/dist/tests/curry-howard/reduce.test.js.map +1 -0
- package/dist/tests/default-logic/extensions.test.d.ts +2 -0
- package/dist/tests/default-logic/extensions.test.d.ts.map +1 -0
- package/dist/tests/default-logic/extensions.test.js +323 -0
- package/dist/tests/default-logic/extensions.test.js.map +1 -0
- package/dist/tests/description-logic/alc.test.d.ts +2 -0
- package/dist/tests/description-logic/alc.test.d.ts.map +1 -0
- package/dist/tests/description-logic/alc.test.js +253 -0
- package/dist/tests/description-logic/alc.test.js.map +1 -0
- package/dist/tests/fol-prover-equality/prove.test.d.ts +2 -0
- package/dist/tests/fol-prover-equality/prove.test.d.ts.map +1 -0
- package/dist/tests/fol-prover-equality/prove.test.js +179 -0
- package/dist/tests/fol-prover-equality/prove.test.js.map +1 -0
- package/dist/tests/hybrid-logic/semantics.test.d.ts +2 -0
- package/dist/tests/hybrid-logic/semantics.test.d.ts.map +1 -0
- package/dist/tests/hybrid-logic/semantics.test.js +169 -0
- package/dist/tests/hybrid-logic/semantics.test.js.map +1 -0
- package/dist/tests/ltl-sat/sat.test.d.ts +2 -0
- package/dist/tests/ltl-sat/sat.test.d.ts.map +1 -0
- package/dist/tests/ltl-sat/sat.test.js +160 -0
- package/dist/tests/ltl-sat/sat.test.js.map +1 -0
- package/dist/tests/mus/extract.test.d.ts +2 -0
- package/dist/tests/mus/extract.test.d.ts.map +1 -0
- package/dist/tests/mus/extract.test.js +352 -0
- package/dist/tests/mus/extract.test.js.map +1 -0
- package/dist/tests/sat-v2-incremental/basic.test.d.ts +2 -0
- package/dist/tests/sat-v2-incremental/basic.test.d.ts.map +1 -0
- package/dist/tests/sat-v2-incremental/basic.test.js +352 -0
- package/dist/tests/sat-v2-incremental/basic.test.js.map +1 -0
- package/dist/tests/sequent-g3/prover.test.d.ts +2 -0
- package/dist/tests/sequent-g3/prover.test.d.ts.map +1 -0
- package/dist/tests/sequent-g3/prover.test.js +205 -0
- package/dist/tests/sequent-g3/prover.test.js.map +1 -0
- package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts +2 -0
- package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts.map +1 -0
- package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js +200 -0
- package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js.map +1 -0
- package/dist/text-layer/v2/index.d.ts +2 -0
- package/dist/text-layer/v2/index.d.ts.map +1 -1
- package/dist/text-layer/v2/index.js +7 -1
- package/dist/text-layer/v2/index.js.map +1 -1
- package/dist/text-layer/v2/mdx-bridge/diff.d.ts +13 -0
- package/dist/text-layer/v2/mdx-bridge/diff.d.ts.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/diff.js +69 -0
- package/dist/text-layer/v2/mdx-bridge/diff.js.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/index.d.ts +14 -0
- package/dist/text-layer/v2/mdx-bridge/index.d.ts.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/index.js +21 -0
- package/dist/text-layer/v2/mdx-bridge/index.js.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/parser.d.ts +33 -0
- package/dist/text-layer/v2/mdx-bridge/parser.d.ts.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/parser.js +192 -0
- package/dist/text-layer/v2/mdx-bridge/parser.js.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/serializer.d.ts +17 -0
- package/dist/text-layer/v2/mdx-bridge/serializer.d.ts.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/serializer.js +69 -0
- package/dist/text-layer/v2/mdx-bridge/serializer.js.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/types.d.ts +53 -0
- package/dist/text-layer/v2/mdx-bridge/types.d.ts.map +1 -0
- package/dist/text-layer/v2/mdx-bridge/types.js +19 -0
- package/dist/text-layer/v2/mdx-bridge/types.js.map +1 -0
- 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
|