@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,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST MUS — Extracción de Minimal Unsatisfiable Subsets
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Algoritmos implementados:
|
|
7
|
+
// - deletion-based (O(n) llamadas SAT)
|
|
8
|
+
// - insertion-based (variante MARCO-like sencilla)
|
|
9
|
+
// - QuickXplain (delegado a `quickxplain.ts`)
|
|
10
|
+
//
|
|
11
|
+
// El oráculo SAT es una caja negra: cualquier función que dado un
|
|
12
|
+
// array de cláusulas (literales enteros estilo DIMACS) devuelva
|
|
13
|
+
// `true` si tiene modelo. Sound y completo según el oráculo provisto.
|
|
14
|
+
//
|
|
15
|
+
// También exponemos `extractMUSWithSelectors` para SAT solvers
|
|
16
|
+
// incrementales que devuelven `failedAssumptions`: en ese caso
|
|
17
|
+
// usamos la API del solver para conseguir un núcleo y luego lo
|
|
18
|
+
// minimizamos.
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.extractMUS = extractMUS;
|
|
21
|
+
exports.extractMUSWithSelectors = extractMUSWithSelectors;
|
|
22
|
+
const quickxplain_1 = require("./quickxplain");
|
|
23
|
+
const DEFAULT_MAX_ITERATIONS = 100_000;
|
|
24
|
+
function callOracle(state, ids) {
|
|
25
|
+
if (state.satCalls >= state.maxIterations)
|
|
26
|
+
return true; // forzar salida segura
|
|
27
|
+
const subset = [];
|
|
28
|
+
for (const id of ids) {
|
|
29
|
+
const c = state.byId.get(id);
|
|
30
|
+
if (c !== undefined)
|
|
31
|
+
subset.push(c);
|
|
32
|
+
}
|
|
33
|
+
state.satCalls++;
|
|
34
|
+
return state.oracle(subset);
|
|
35
|
+
}
|
|
36
|
+
// ── Deletion-based ─────────────────────────────────────────────
|
|
37
|
+
/**
|
|
38
|
+
* Recorre cada cláusula del conjunto inicial; si removerla deja al
|
|
39
|
+
* resto unsat, la descarta. Garantiza minimalidad por inclusión al
|
|
40
|
+
* terminar el pase porque cada cláusula sobreviviente es "necesaria"
|
|
41
|
+
* en el contexto del conjunto sobreviviente.
|
|
42
|
+
*
|
|
43
|
+
* Detalle sutil: el orden de visita importa para *cuál* MUS se
|
|
44
|
+
* encuentra (puede haber varios). Usamos el orden numérico (id
|
|
45
|
+
* ascendente) para determinismo.
|
|
46
|
+
*/
|
|
47
|
+
function extractDeletion(state, allIds) {
|
|
48
|
+
let kept = allIds.slice().sort((a, b) => a - b);
|
|
49
|
+
for (const id of allIds.slice().sort((a, b) => a - b)) {
|
|
50
|
+
if (state.satCalls >= state.maxIterations)
|
|
51
|
+
break;
|
|
52
|
+
state.iterations++;
|
|
53
|
+
const candidate = kept.filter((x) => x !== id);
|
|
54
|
+
if (candidate.length === 0)
|
|
55
|
+
continue;
|
|
56
|
+
if (!callOracle(state, candidate)) {
|
|
57
|
+
// Sin esa cláusula sigue unsat → no es necesaria.
|
|
58
|
+
kept = candidate;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return kept;
|
|
62
|
+
}
|
|
63
|
+
// ── Insertion-based ────────────────────────────────────────────
|
|
64
|
+
/**
|
|
65
|
+
* Variante "linear search" de MUS extraction (a veces llamada
|
|
66
|
+
* dichotomic / insertion). Itera:
|
|
67
|
+
*
|
|
68
|
+
* 1. Mantiene `mus = []` (núcleo crecido) y `pool = allIds`.
|
|
69
|
+
* 2. Va añadiendo cláusulas de `pool` a un `working` set hasta que
|
|
70
|
+
* `mus ∪ working` se vuelve unsat. La última añadida es
|
|
71
|
+
* "transition" — la promueve a `mus`.
|
|
72
|
+
* 3. Reset `working = []` y repite, recortando `pool` a las que
|
|
73
|
+
* quedaron antes de la transition.
|
|
74
|
+
* 4. Termina cuando `mus` solo es unsat.
|
|
75
|
+
*
|
|
76
|
+
* Esto es esencialmente "augmenting MUS" / Junker's linear baseline.
|
|
77
|
+
* O(|MUS| · |C|) llamadas SAT en el peor caso, pero suele ser mucho
|
|
78
|
+
* más rápido en la práctica cuando |MUS| ≪ |C|.
|
|
79
|
+
*/
|
|
80
|
+
function extractInsertion(state, allIds) {
|
|
81
|
+
const mus = [];
|
|
82
|
+
let pool = allIds.slice().sort((a, b) => a - b);
|
|
83
|
+
// Caso base: si `[]` ya es unsat, el MUS es vacío.
|
|
84
|
+
state.iterations++;
|
|
85
|
+
if (!callOracle(state, []))
|
|
86
|
+
return [];
|
|
87
|
+
while (state.satCalls < state.maxIterations) {
|
|
88
|
+
state.iterations++;
|
|
89
|
+
// Si solo `mus` ya es unsat, terminamos.
|
|
90
|
+
if (!callOracle(state, mus))
|
|
91
|
+
break;
|
|
92
|
+
let working = [];
|
|
93
|
+
let transition = -1;
|
|
94
|
+
const consumed = [];
|
|
95
|
+
for (const id of pool) {
|
|
96
|
+
if (state.satCalls >= state.maxIterations)
|
|
97
|
+
break;
|
|
98
|
+
working = working.concat(id);
|
|
99
|
+
consumed.push(id);
|
|
100
|
+
if (!callOracle(state, mus.concat(working))) {
|
|
101
|
+
transition = id;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (transition === -1) {
|
|
106
|
+
// Defensa: si nunca se hizo unsat, el conjunto no era unsat para
|
|
107
|
+
// empezar (o se acabó el presupuesto). Salimos.
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
mus.push(transition);
|
|
111
|
+
// Para el próximo loop solo nos quedamos con las cláusulas que se
|
|
112
|
+
// consumieron antes de la transition (excluyendo la transition).
|
|
113
|
+
// Esas son las "potencialmente irrelevantes" que aún hay que
|
|
114
|
+
// testear; las que estaban después en `pool` quedan ya cubiertas
|
|
115
|
+
// implícitamente por `mus`.
|
|
116
|
+
pool = consumed.filter((x) => x !== transition);
|
|
117
|
+
}
|
|
118
|
+
mus.sort((a, b) => a - b);
|
|
119
|
+
return mus;
|
|
120
|
+
}
|
|
121
|
+
// ── API pública ────────────────────────────────────────────────
|
|
122
|
+
/**
|
|
123
|
+
* Extrae un MUS (Minimal Unsatisfiable Subset) del conjunto unsat
|
|
124
|
+
* `clauses` usando el oráculo SAT provisto.
|
|
125
|
+
*
|
|
126
|
+
* Convenciones:
|
|
127
|
+
* - Las cláusulas son arrays de literales enteros estilo DIMACS
|
|
128
|
+
* (positivo / negativo). El motor no inspecciona la semántica;
|
|
129
|
+
* todo lo delega al `satOracle`.
|
|
130
|
+
* - El conjunto retornado en `mus` son índices sobre `clauses`.
|
|
131
|
+
* - Si `clauses` ES satisfacible, devolvemos `mus = []` (no hay
|
|
132
|
+
* MUS posible).
|
|
133
|
+
* - Determinismo: orden numérico ascendente en todos los recorridos.
|
|
134
|
+
*/
|
|
135
|
+
function extractMUS(clauses, satOracle, opts = {}) {
|
|
136
|
+
const algorithm = opts.algorithm ?? 'deletion';
|
|
137
|
+
const maxIterations = opts.maxIterations ?? DEFAULT_MAX_ITERATIONS;
|
|
138
|
+
// Pre-check: el conjunto completo debe ser unsat. Si es sat, no hay
|
|
139
|
+
// MUS — devolvemos vacío.
|
|
140
|
+
if (satOracle(clauses)) {
|
|
141
|
+
return { mus: [], iterations: 1, satCalls: 1 };
|
|
142
|
+
}
|
|
143
|
+
if (clauses.length === 0) {
|
|
144
|
+
// `[]` es trivialmente sat, así que el pre-check ya habría
|
|
145
|
+
// devuelto. Defensa: nunca llegamos aquí porque sat([]) = true.
|
|
146
|
+
return { mus: [], iterations: 1, satCalls: 1 };
|
|
147
|
+
}
|
|
148
|
+
const byId = new Map();
|
|
149
|
+
clauses.forEach((c, i) => byId.set(i, c));
|
|
150
|
+
const allIds = clauses.map((_, i) => i);
|
|
151
|
+
if (algorithm === 'qx') {
|
|
152
|
+
const qx = (0, quickxplain_1.quickxplain)(clauses, satOracle, maxIterations);
|
|
153
|
+
// QuickXplain ya devuelve un MUS minimal por inclusión.
|
|
154
|
+
return { mus: qx.mus, iterations: 1, satCalls: qx.satCalls + 1 };
|
|
155
|
+
}
|
|
156
|
+
const state = {
|
|
157
|
+
oracle: satOracle,
|
|
158
|
+
byId,
|
|
159
|
+
satCalls: 1, // contamos el pre-check inicial
|
|
160
|
+
iterations: 0,
|
|
161
|
+
maxIterations,
|
|
162
|
+
};
|
|
163
|
+
let mus;
|
|
164
|
+
if (algorithm === 'insertion') {
|
|
165
|
+
mus = extractInsertion(state, allIds);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
mus = extractDeletion(state, allIds);
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
mus: mus.slice().sort((a, b) => a - b),
|
|
172
|
+
iterations: state.iterations,
|
|
173
|
+
satCalls: state.satCalls,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// ── Variante con assumptions / selectors ───────────────────────
|
|
177
|
+
/**
|
|
178
|
+
* Variante para SAT solvers incrementales con assumptions.
|
|
179
|
+
*
|
|
180
|
+
* El patrón típico es:
|
|
181
|
+
* - Por cada cláusula original `C_i`, añadir un selector literal
|
|
182
|
+
* `s_i` y convertirla en `C_i ∨ ¬s_i` (la cláusula está "off"
|
|
183
|
+
* cuando `s_i = false`).
|
|
184
|
+
* - Para "activar" un subset, pasar las correspondientes `s_i` como
|
|
185
|
+
* assumptions positivas.
|
|
186
|
+
* - Cuando el problema es unsat, el solver devuelve
|
|
187
|
+
* `failedAssumptions ⊆ assumptions` — el unsat core proyectado
|
|
188
|
+
* sobre los selectors.
|
|
189
|
+
*
|
|
190
|
+
* Esta función toma el `failedAssumptions` como punto de partida y
|
|
191
|
+
* lo minimiza con un pase deletion-based usando el mismo solver para
|
|
192
|
+
* garantizar minimalidad por inclusión.
|
|
193
|
+
*/
|
|
194
|
+
function extractMUSWithSelectors(clauses, selectors, solver, opts = {}) {
|
|
195
|
+
const maxIterations = opts.maxIterations ?? DEFAULT_MAX_ITERATIONS;
|
|
196
|
+
if (clauses.length !== selectors.length) {
|
|
197
|
+
throw new Error(`extractMUSWithSelectors: clauses.length (${clauses.length}) !== selectors.length (${selectors.length})`);
|
|
198
|
+
}
|
|
199
|
+
let satCalls = 0;
|
|
200
|
+
let iterations = 0;
|
|
201
|
+
// Primera llamada con TODAS las assumptions activas.
|
|
202
|
+
satCalls++;
|
|
203
|
+
iterations++;
|
|
204
|
+
const initial = solver.solveWithAssumptions(selectors.slice());
|
|
205
|
+
if (initial.sat) {
|
|
206
|
+
return { mus: [], iterations, satCalls };
|
|
207
|
+
}
|
|
208
|
+
// Núcleo inicial: failedAssumptions si el solver lo da; sino, todos.
|
|
209
|
+
const selectorToIndex = new Map();
|
|
210
|
+
selectors.forEach((s, i) => selectorToIndex.set(s, i));
|
|
211
|
+
let core;
|
|
212
|
+
if (initial.failedAssumptions && initial.failedAssumptions.length > 0) {
|
|
213
|
+
core = initial.failedAssumptions
|
|
214
|
+
.map((s) => selectorToIndex.get(s))
|
|
215
|
+
.filter((idx) => idx !== undefined);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
core = clauses.map((_, i) => i);
|
|
219
|
+
}
|
|
220
|
+
core = Array.from(new Set(core)).sort((a, b) => a - b);
|
|
221
|
+
// Minimización deletion-based sobre el core con el mismo solver.
|
|
222
|
+
for (const idx of core.slice()) {
|
|
223
|
+
if (satCalls >= maxIterations)
|
|
224
|
+
break;
|
|
225
|
+
iterations++;
|
|
226
|
+
const candidate = core.filter((x) => x !== idx);
|
|
227
|
+
if (candidate.length === 0)
|
|
228
|
+
continue;
|
|
229
|
+
const assumptions = candidate.map((i) => selectors[i]);
|
|
230
|
+
satCalls++;
|
|
231
|
+
const res = solver.solveWithAssumptions(assumptions);
|
|
232
|
+
if (!res.sat) {
|
|
233
|
+
// Sin esa cláusula sigue unsat → no es necesaria.
|
|
234
|
+
core = candidate;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
mus: core.slice().sort((a, b) => a - b),
|
|
239
|
+
iterations,
|
|
240
|
+
satCalls,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/runtime/mus/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/mus/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST MUS — Barrel
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.quickxplain = exports.extractMUSWithSelectors = exports.extractMUS = void 0;
|
|
7
|
+
var extract_1 = require("./extract");
|
|
8
|
+
Object.defineProperty(exports, "extractMUS", { enumerable: true, get: function () { return extract_1.extractMUS; } });
|
|
9
|
+
Object.defineProperty(exports, "extractMUSWithSelectors", { enumerable: true, get: function () { return extract_1.extractMUSWithSelectors; } });
|
|
10
|
+
var quickxplain_1 = require("./quickxplain");
|
|
11
|
+
Object.defineProperty(exports, "quickxplain", { enumerable: true, get: function () { return quickxplain_1.quickxplain; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/mus/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kBAAkB;AAClB,+DAA+D;;;AAE/D,qCAAgE;AAAvD,qGAAA,UAAU,OAAA;AAAE,kHAAA,uBAAuB,OAAA;AAC5C,6CAA4C;AAAnC,0GAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SATOracle } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Ejecuta QuickXplain sobre el conjunto de cláusulas indexadas y
|
|
4
|
+
* devuelve los índices del MUS hallado más el conteo de llamadas SAT.
|
|
5
|
+
*/
|
|
6
|
+
export declare function quickxplain(clauses: number[][], oracle: SATOracle, maxIterations: number): {
|
|
7
|
+
mus: number[];
|
|
8
|
+
satCalls: number;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=quickxplain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickxplain.d.ts","sourceRoot":"","sources":["../../../src/runtime/mus/quickxplain.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAoEzC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EAAE,EACnB,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACpB;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAerC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST MUS — QuickXplain (Junker 2004)
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Divide-y-vencerás para encontrar un MUS dentro de un conjunto
|
|
7
|
+
// `C = B ∪ U` donde `B` (background) ya se sabe consistente y
|
|
8
|
+
// queremos hallar el subconjunto mínimo de `U` que es responsable
|
|
9
|
+
// de la inconsistencia (junto con `B`).
|
|
10
|
+
//
|
|
11
|
+
// Pseudocódigo (versión simétrica clásica):
|
|
12
|
+
//
|
|
13
|
+
// QX(B, ∆, C):
|
|
14
|
+
// if ∆ ≠ ∅ ∧ ¬sat(B): return ∅ // ∆ no necesario
|
|
15
|
+
// if |C| = 1: return C // C es minimal
|
|
16
|
+
// C1, C2 = split(C)
|
|
17
|
+
// ∆1 = QX(B ∪ C1, C1, C2)
|
|
18
|
+
// ∆2 = QX(B ∪ ∆1, ∆1, C1)
|
|
19
|
+
// return ∆1 ∪ ∆2
|
|
20
|
+
//
|
|
21
|
+
// Cuidado: en la primera llamada `∆` debe ser ≠ ∅ para no caer en el
|
|
22
|
+
// short-circuit. Convención típica: pasar `∆ = C` en el wrap externo.
|
|
23
|
+
//
|
|
24
|
+
// Complejidad: O(2k + 2k · log(n/k)) llamadas SAT, donde n = |C| y
|
|
25
|
+
// k = |MUS|. Muy buena cuando k ≪ n.
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.quickxplain = quickxplain;
|
|
28
|
+
/**
|
|
29
|
+
* Llama al oráculo con la unión de varios sets de ids. Si el contador
|
|
30
|
+
* de llamadas excede `maxIterations`, devuelve `true` (sat) para
|
|
31
|
+
* forzar la salida del algoritmo de forma segura.
|
|
32
|
+
*/
|
|
33
|
+
function check(state, ...sets) {
|
|
34
|
+
if (state.satCalls >= state.maxIterations)
|
|
35
|
+
return true;
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
for (const s of sets)
|
|
38
|
+
for (const id of s)
|
|
39
|
+
seen.add(id);
|
|
40
|
+
const subset = [];
|
|
41
|
+
for (const id of seen) {
|
|
42
|
+
const clause = state.byId.get(id);
|
|
43
|
+
if (clause !== undefined)
|
|
44
|
+
subset.push(clause);
|
|
45
|
+
}
|
|
46
|
+
state.satCalls++;
|
|
47
|
+
return state.oracle(subset);
|
|
48
|
+
}
|
|
49
|
+
function qxRec(state, background, delta, candidates) {
|
|
50
|
+
// Si añadir delta hizo que el background sea unsat, delta no es necesario.
|
|
51
|
+
if (delta.length > 0 && !check(state, background)) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
if (candidates.length === 1) {
|
|
55
|
+
return candidates.slice();
|
|
56
|
+
}
|
|
57
|
+
if (state.satCalls >= state.maxIterations) {
|
|
58
|
+
return candidates.slice();
|
|
59
|
+
}
|
|
60
|
+
const mid = Math.floor(candidates.length / 2);
|
|
61
|
+
const left = candidates.slice(0, mid);
|
|
62
|
+
const right = candidates.slice(mid);
|
|
63
|
+
const delta1 = qxRec(state, mergeUnique(background, left), left, right);
|
|
64
|
+
const delta2 = qxRec(state, mergeUnique(background, delta1), delta1, left);
|
|
65
|
+
return mergeUnique(delta1, delta2);
|
|
66
|
+
}
|
|
67
|
+
function mergeUnique(a, b) {
|
|
68
|
+
if (a.length === 0)
|
|
69
|
+
return b.slice();
|
|
70
|
+
if (b.length === 0)
|
|
71
|
+
return a.slice();
|
|
72
|
+
const seen = new Set(a);
|
|
73
|
+
const out = a.slice();
|
|
74
|
+
for (const id of b) {
|
|
75
|
+
if (!seen.has(id)) {
|
|
76
|
+
seen.add(id);
|
|
77
|
+
out.push(id);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Ejecuta QuickXplain sobre el conjunto de cláusulas indexadas y
|
|
84
|
+
* devuelve los índices del MUS hallado más el conteo de llamadas SAT.
|
|
85
|
+
*/
|
|
86
|
+
function quickxplain(clauses, oracle, maxIterations) {
|
|
87
|
+
const byId = new Map();
|
|
88
|
+
clauses.forEach((c, i) => byId.set(i, c));
|
|
89
|
+
const ids = clauses.map((_, i) => i);
|
|
90
|
+
// Pre-check: si el conjunto completo ya es SAT, no hay MUS.
|
|
91
|
+
const state = { oracle, byId, satCalls: 0, maxIterations };
|
|
92
|
+
if (check(state, ids)) {
|
|
93
|
+
return { mus: [], satCalls: state.satCalls };
|
|
94
|
+
}
|
|
95
|
+
// En la primera llamada, ∆ = candidates para evitar short-circuit.
|
|
96
|
+
const mus = qxRec(state, [], ids, ids);
|
|
97
|
+
mus.sort((a, b) => a - b);
|
|
98
|
+
return { mus, satCalls: state.satCalls };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=quickxplain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickxplain.js","sourceRoot":"","sources":["../../../src/runtime/mus/quickxplain.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,qCAAqC;AACrC,+DAA+D;AAC/D,EAAE;AACF,gEAAgE;AAChE,8DAA8D;AAC9D,kEAAkE;AAClE,wCAAwC;AACxC,EAAE;AACF,4CAA4C;AAC5C,EAAE;AACF,iBAAiB;AACjB,uEAAuE;AACvE,sEAAsE;AACtE,wBAAwB;AACxB,8BAA8B;AAC9B,8BAA8B;AAC9B,qBAAqB;AACrB,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,EAAE;AACF,mEAAmE;AACnE,qCAAqC;;AA0ErC,kCAmBC;AAjFD;;;;GAIG;AACH,SAAS,KAAK,CAAC,KAAc,EAAE,GAAG,IAAgB;IAChD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,KAAK,MAAM,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjB,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,KAAK,CACZ,KAAc,EACd,UAAoB,EACpB,KAAe,EACf,UAAoB;IAEpB,2EAA2E;IAC3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC1C,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,WAAW,CAAC,CAAW,EAAE,CAAW;IAC3C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACrC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACtB,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CACzB,OAAmB,EACnB,MAAiB,EACjB,aAAqB;IAErB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAErC,4DAA4D;IAC5D,MAAM,KAAK,GAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC;IACpE,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,mEAAmE;IACnE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Algoritmos disponibles para extracción de MUS.
|
|
3
|
+
*
|
|
4
|
+
* - `deletion`: por cada cláusula c, prueba si C \ {c} sigue unsat;
|
|
5
|
+
* si sí, descarta c definitivamente. O(n) llamadas al oráculo SAT.
|
|
6
|
+
* Sencillo, robusto, fácil de auditar.
|
|
7
|
+
*
|
|
8
|
+
* - `insertion`: empieza con conjunto vacío W, agrega cláusulas una
|
|
9
|
+
* por una. Cuando W se vuelve unsat, la última cláusula añadida es
|
|
10
|
+
* "necesaria" (la fija en el MUS y vacía W). Repite hasta cubrir
|
|
11
|
+
* todo. Útil cuando el MUS es pequeño respecto al total.
|
|
12
|
+
*
|
|
13
|
+
* - `qx`: QuickXplain (Junker 2004). Algoritmo divide-y-vencerás que
|
|
14
|
+
* resuelve "minimum conflict explanation" con O(2k · log(n/k))
|
|
15
|
+
* llamadas SAT, donde k es el tamaño del MUS. En la práctica mucho
|
|
16
|
+
* más rápido que deletion para MUS grandes embebidos en problemas
|
|
17
|
+
* inmensos.
|
|
18
|
+
*/
|
|
19
|
+
export type MUSAlgorithm = 'deletion' | 'insertion' | 'qx';
|
|
20
|
+
export interface MUSOptions {
|
|
21
|
+
/** Algoritmo a usar. Default: `deletion`. */
|
|
22
|
+
algorithm?: MUSAlgorithm;
|
|
23
|
+
/** Tope superior de llamadas al oráculo SAT. Default: 100_000. */
|
|
24
|
+
maxIterations?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface MUSResult {
|
|
27
|
+
/** Índices (sobre el array original `clauses`) que conforman el MUS. */
|
|
28
|
+
mus: number[];
|
|
29
|
+
/** Iteraciones de bucle externo (rondas del algoritmo). */
|
|
30
|
+
iterations: number;
|
|
31
|
+
/** Llamadas totales al oráculo SAT. */
|
|
32
|
+
satCalls: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Oráculo SAT: dado un conjunto de cláusulas (cada cláusula es una
|
|
36
|
+
* lista de literales enteros — convención DIMACS: positivo es literal
|
|
37
|
+
* positivo, negativo es negado), devuelve `true` sii el conjunto
|
|
38
|
+
* tiene un modelo, `false` si es unsat.
|
|
39
|
+
*/
|
|
40
|
+
export type SATOracle = (subset: number[][]) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Solver incremental con assumptions (estilo MiniSat / SAT4J):
|
|
43
|
+
* dadas N cláusulas hard y una lista de literales-asumidos, devuelve
|
|
44
|
+
* `{ sat: false, failedAssumptions: [...] }` cuando el problema es
|
|
45
|
+
* unsat — el array `failedAssumptions` contiene un subconjunto de las
|
|
46
|
+
* assumptions suficientes para que el problema sea unsat (el unsat
|
|
47
|
+
* core proyectado sobre assumptions).
|
|
48
|
+
*
|
|
49
|
+
* En la práctica `failedAssumptions` ya es un MUS (sobre la
|
|
50
|
+
* codificación por selectors) o un superset cercano; corremos un pase
|
|
51
|
+
* adicional de minimización para garantizar minimalidad.
|
|
52
|
+
*/
|
|
53
|
+
export interface AssumptionSolver {
|
|
54
|
+
solveWithAssumptions: (assumptions: number[]) => {
|
|
55
|
+
sat: boolean;
|
|
56
|
+
failedAssumptions?: number[];
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/mus/types.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,OAAO,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK;QAC/C,GAAG,EAAE,OAAO,CAAC;QACb,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;CACH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST MUS (Minimal Unsatisfiable Subset) — Tipos públicos
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Un MUS de un conjunto unsat C de cláusulas es un subconjunto
|
|
7
|
+
// M ⊆ C tal que:
|
|
8
|
+
// 1. M es insatisfacible (unsat).
|
|
9
|
+
// 2. Para toda cláusula c ∈ M, M \ {c} es satisfacible (sat).
|
|
10
|
+
//
|
|
11
|
+
// Es decir: minimal por inclusión. NO necesariamente cardinality-
|
|
12
|
+
// minimum — eso sería el smallest MUS y es Σ₂ᵖ-hard.
|
|
13
|
+
//
|
|
14
|
+
// Usos típicos en debugging de constraints / type errors:
|
|
15
|
+
// - Aislar el "núcleo" del conflicto cuando un sistema reporta
|
|
16
|
+
// unsat sobre cientos de cláusulas.
|
|
17
|
+
// - Explicar a un usuario por qué su conjunto de premisas es
|
|
18
|
+
// contradictorio.
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/mus/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,yDAAyD;AACzD,+DAA+D;AAC/D,EAAE;AACF,+DAA+D;AAC/D,iBAAiB;AACjB,oCAAoC;AACpC,gEAAgE;AAChE,EAAE;AACF,kEAAkE;AAClE,qDAAqD;AACrD,EAAE;AACF,0DAA0D;AAC1D,iEAAiE;AACjE,wCAAwC;AACxC,+DAA+D;AAC/D,sBAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solver/cdcl-v2-incremental/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EACV,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// CDCL incremental — entry point público.
|
|
3
|
+
//
|
|
4
|
+
// API:
|
|
5
|
+
// const s = new IncrementalCDCL(numVars?);
|
|
6
|
+
// s.addClause([1, -2, 3]); // cláusulas DIMACS
|
|
7
|
+
// s.push(); // checkpoint opcional
|
|
8
|
+
// const r = s.solve([assump1, ...]); // sat/unsat con assumptions opcionales
|
|
9
|
+
// s.pop(); // rollback al checkpoint
|
|
10
|
+
//
|
|
11
|
+
// Ver `types.ts` para los tipos de resultado.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.IncrementalCDCL = void 0;
|
|
14
|
+
var solver_1 = require("./solver");
|
|
15
|
+
Object.defineProperty(exports, "IncrementalCDCL", { enumerable: true, get: function () { return solver_1.IncrementalCDCL; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/solver/cdcl-v2-incremental/index.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,EAAE;AACF,OAAO;AACP,6CAA6C;AAC7C,4DAA4D;AAC5D,gEAAgE;AAChE,iFAAiF;AACjF,mEAAmE;AACnE,EAAE;AACF,8CAA8C;;;AAE9C,mCAA2C;AAAlC,yGAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { IncrementalSolveResult, IncrementalSolverOptions, SolverSummary } from './types';
|
|
2
|
+
export declare class IncrementalCDCL {
|
|
3
|
+
private numVars;
|
|
4
|
+
private readonly opts;
|
|
5
|
+
private clauses;
|
|
6
|
+
private learnedFlag;
|
|
7
|
+
private learnedMeta;
|
|
8
|
+
private clauseInc;
|
|
9
|
+
private varVal;
|
|
10
|
+
private varLevel;
|
|
11
|
+
private varAnte;
|
|
12
|
+
private trail;
|
|
13
|
+
private trailLim;
|
|
14
|
+
private qHead;
|
|
15
|
+
private watches;
|
|
16
|
+
private vsids;
|
|
17
|
+
private phases;
|
|
18
|
+
private checkpoints;
|
|
19
|
+
private varToAssumption;
|
|
20
|
+
private totalDecisions;
|
|
21
|
+
private totalConflicts;
|
|
22
|
+
private totalLearned;
|
|
23
|
+
constructor(numVars?: number, options?: IncrementalSolverOptions);
|
|
24
|
+
/** Declara y devuelve una variable nueva (1-indexada). */
|
|
25
|
+
newVar(): number;
|
|
26
|
+
/** Agrega una cláusula permanente. Validación: literales !== 0 y |lit| <= numVars. */
|
|
27
|
+
addClause(literals: ReadonlyArray<number>): void;
|
|
28
|
+
/** Crea un checkpoint para rollback con `pop()`. */
|
|
29
|
+
push(): void;
|
|
30
|
+
/** Revierte hasta `levels` checkpoints atrás. Default: 1. */
|
|
31
|
+
pop(levels?: number): void;
|
|
32
|
+
/**
|
|
33
|
+
* Resuelve bajo el conjunto opcional de assumptions.
|
|
34
|
+
*
|
|
35
|
+
* Cada assumption es un literal con signo: positivo = var asumida true,
|
|
36
|
+
* negativo = var asumida false. Si el problema es UNSAT bajo esas
|
|
37
|
+
* assumptions, `failedAssumptions` contiene el subconjunto que produjo
|
|
38
|
+
* el conflicto.
|
|
39
|
+
*/
|
|
40
|
+
solve(assumptions?: ReadonlyArray<number>): IncrementalSolveResult;
|
|
41
|
+
/** Devuelve la polaridad de una variable en el último modelo SAT (o undefined). */
|
|
42
|
+
modelValue(varId: number): boolean | undefined;
|
|
43
|
+
/** Limpia todo el estado, dejando 0 vars / 0 cláusulas. */
|
|
44
|
+
reset(): void;
|
|
45
|
+
/** Resumen del estado actual del solver. */
|
|
46
|
+
stats(): SolverSummary;
|
|
47
|
+
private growVarArrays;
|
|
48
|
+
private regrowHeuristics;
|
|
49
|
+
private rebuildWatches;
|
|
50
|
+
private countLearned;
|
|
51
|
+
private rollbackTo;
|
|
52
|
+
private currentLevel;
|
|
53
|
+
private litIsTrue;
|
|
54
|
+
private litIsFalse;
|
|
55
|
+
private enqueue;
|
|
56
|
+
/** Propagación booleana con watched literals. Devuelve índice de cláusula en conflicto o NO_CONFLICT. */
|
|
57
|
+
private propagate;
|
|
58
|
+
private backtrackToLevel;
|
|
59
|
+
/** Reset completo del trail incluyendo asignaciones de nivel 0. Usado entre
|
|
60
|
+
* llamadas a solve() para garantizar idempotencia. */
|
|
61
|
+
private resetAllAssignments;
|
|
62
|
+
private addLearnedClauseAt;
|
|
63
|
+
private runSolve;
|
|
64
|
+
/**
|
|
65
|
+
* Cuando un assumption `lit` está bloqueado por unit propagation desde
|
|
66
|
+
* unidades originales (sin assumptions activas), devuelve [lit] solo:
|
|
67
|
+
* ese assumption es incompatible con la base. Para v1, este es el caso
|
|
68
|
+
* trivial — sin lookup hacia atrás del antecedente.
|
|
69
|
+
*/
|
|
70
|
+
private deriveCoreFromBlockedAssumption;
|
|
71
|
+
/**
|
|
72
|
+
* Dado un índice de cláusula en conflicto y la lista actual de assumptions
|
|
73
|
+
* enqueued, regresa el subconjunto de assumptions cuya negación está
|
|
74
|
+
* presente (recursivamente, vía antecedentes) en el cone de conflicto.
|
|
75
|
+
*
|
|
76
|
+
* Implementación O(|trail|): marca seen cada variable involucrada en el
|
|
77
|
+
* conflicto, recorre antecedentes hasta agotar; cualquier var marcada cuyo
|
|
78
|
+
* assumption literal sea distinto de 0 entra al core.
|
|
79
|
+
*/
|
|
80
|
+
private deriveFailedAssumptions;
|
|
81
|
+
private maybeReduceLearned;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../../src/solver/cdcl-v2-incremental/solver.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EACV,sBAAsB,EACtB,wBAAwB,EAExB,aAAa,EACd,MAAM,SAAS,CAAC;AAoBjB,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAGnB;IAKF,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,SAAS,CAAO;IAGxB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAa;IAG5B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,KAAK,CAAK;IAGlB,OAAO,CAAC,OAAO,CAAkB;IAGjC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAa;IAG3B,OAAO,CAAC,WAAW,CAAyB;IAK5C,OAAO,CAAC,eAAe,CAAa;IAGpC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAK;gBAEb,OAAO,SAAI,EAAE,OAAO,CAAC,EAAE,wBAAwB;IA6B3D,0DAA0D;IAC1D,MAAM,IAAI,MAAM;IAShB,sFAAsF;IACtF,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAuBhD,oDAAoD;IACpD,IAAI,IAAI,IAAI;IAQZ,6DAA6D;IAC7D,GAAG,CAAC,MAAM,SAAI,GAAG,IAAI;IASrB;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,GAAE,aAAa,CAAC,MAAM,CAAM,GAAG,sBAAsB;IAetE,mFAAmF;IACnF,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAQ9C,2DAA2D;IAC3D,KAAK,IAAI,IAAI;IAsBb,4CAA4C;IAC5C,KAAK,IAAI,aAAa;IActB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,UAAU;IA2ClB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,OAAO;IAYf,yGAAyG;IACzG,OAAO,CAAC,SAAS;IA2DjB,OAAO,CAAC,gBAAgB;IAexB;0DACsD;IACtD,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,QAAQ;IA4MhB;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAIvC;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IAwC/B,OAAO,CAAC,kBAAkB;CA6B3B"}
|