@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,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const tableau_engine_1 = require("../../profiles/shared/tableau-engine");
|
|
5
|
+
const atom = (name) => ({ kind: 'atom', name });
|
|
6
|
+
const not = (a) => ({ kind: 'not', args: [a] });
|
|
7
|
+
const and = (a, b) => ({ kind: 'and', args: [a, b] });
|
|
8
|
+
const or = (a, b) => ({ kind: 'or', args: [a, b] });
|
|
9
|
+
const implies = (a, b) => ({ kind: 'implies', args: [a, b] });
|
|
10
|
+
const bic = (a, b) => ({ kind: 'biconditional', args: [a, b] });
|
|
11
|
+
const box = (a) => ({ kind: 'modal_necessity', args: [a] });
|
|
12
|
+
const dia = (a) => ({ kind: 'modal_possibility', args: [a] });
|
|
13
|
+
const forall = (v, body) => ({
|
|
14
|
+
kind: 'forall',
|
|
15
|
+
variable: v,
|
|
16
|
+
args: [body],
|
|
17
|
+
});
|
|
18
|
+
const exists = (v, body) => ({
|
|
19
|
+
kind: 'exists',
|
|
20
|
+
variable: v,
|
|
21
|
+
args: [body],
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.describe)('tableau-engine — formulaEqual', () => {
|
|
24
|
+
(0, vitest_1.it)('atoms with same name are equal', () => {
|
|
25
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(atom('P'), atom('P'))).toBe(true);
|
|
26
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(atom('P'), atom('Q'))).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('compound: same structure equal', () => {
|
|
29
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(and(atom('P'), atom('Q')), and(atom('P'), atom('Q')))).toBe(true);
|
|
30
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(and(atom('P'), atom('Q')), or(atom('P'), atom('Q')))).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('alpha-equivalence ∀x.P(x) ≡ ∀y.P(y) (with rename)', () => {
|
|
33
|
+
const f1 = forall('x', { kind: 'predicate', name: 'P', params: ['x'] });
|
|
34
|
+
const f2 = forall('y', { kind: 'predicate', name: 'P', params: ['y'] });
|
|
35
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(f1, f2)).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)('alpha-inequivalence ∀x.P(x) ≠ ∀x.Q(x)', () => {
|
|
38
|
+
const f1 = forall('x', { kind: 'predicate', name: 'P', params: ['x'] });
|
|
39
|
+
const f2 = forall('x', { kind: 'predicate', name: 'Q', params: ['x'] });
|
|
40
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(f1, f2)).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.describe)('tableau-engine — formulaHash', () => {
|
|
44
|
+
(0, vitest_1.it)('atom hash is name', () => {
|
|
45
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(atom('P'))).toBe('P');
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('hash respects structure', () => {
|
|
48
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(and(atom('P'), atom('Q')))).toMatch(/&/);
|
|
49
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(or(atom('P'), atom('Q')))).toMatch(/\|/);
|
|
50
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(implies(atom('P'), atom('Q')))).toMatch(/->/);
|
|
51
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(bic(atom('P'), atom('Q')))).toMatch(/<->/);
|
|
52
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(not(atom('P')))).toMatch(/!/);
|
|
53
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(box(atom('P')))).toMatch(/\[\]/);
|
|
54
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(dia(atom('P')))).toMatch(/<>/);
|
|
55
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(forall('x', atom('P')))).toMatch(/^Ax/);
|
|
56
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(exists('x', atom('P')))).toMatch(/^Ex/);
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('hash for predicate includes params', () => {
|
|
59
|
+
const pred = { kind: 'predicate', name: 'R', args: [atom('a'), atom('b')] };
|
|
60
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(pred)).toContain('R(');
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.it)('hash for temporal operators', () => {
|
|
63
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)({ kind: 'temporal_next', args: [atom('P')] })).toMatch(/X/);
|
|
64
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)({ kind: 'temporal_until', args: [atom('P'), atom('Q')] })).toMatch(/U/);
|
|
65
|
+
});
|
|
66
|
+
(0, vitest_1.it)('hash for equals', () => {
|
|
67
|
+
(0, vitest_1.expect)((0, tableau_engine_1.formulaHash)({ kind: 'equals', args: [atom('a'), atom('b')] })).toMatch(/=/);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.describe)('tableau-engine — eliminateConnectives and fullNNF', () => {
|
|
71
|
+
(0, vitest_1.it)('eliminateConnectives unwraps implies/bicond into and/or/not', () => {
|
|
72
|
+
const f = implies(atom('P'), atom('Q'));
|
|
73
|
+
const r = (0, tableau_engine_1.eliminateConnectives)(f);
|
|
74
|
+
(0, vitest_1.expect)(r.kind).not.toBe('implies');
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.it)('fullNNF pushes negation inward', () => {
|
|
77
|
+
const f = not(and(atom('P'), atom('Q')));
|
|
78
|
+
const r = (0, tableau_engine_1.fullNNF)(f);
|
|
79
|
+
(0, vitest_1.expect)(r.kind).toBe('or');
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.it)('fullNNF preserves atoms', () => {
|
|
82
|
+
(0, vitest_1.expect)((0, tableau_engine_1.fullNNF)(atom('P'))).toEqual(atom('P'));
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.describe)('tableau-engine — isValid / isSatisfiable', () => {
|
|
86
|
+
(0, vitest_1.it)('K: tautology P -> P is valid', () => {
|
|
87
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(atom('P'), atom('P')), tableau_engine_1.FRAME_K)).toBe(true);
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)('K: P alone is satisfiable but not valid', () => {
|
|
90
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isSatisfiable)(atom('P'), tableau_engine_1.FRAME_K)).toBe(true);
|
|
91
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isValid)(atom('P'), tableau_engine_1.FRAME_K)).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.it)('K: contradiction P & !P is unsatisfiable', () => {
|
|
94
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isSatisfiable)(and(atom('P'), not(atom('P'))), tableau_engine_1.FRAME_K)).toBe(false);
|
|
95
|
+
});
|
|
96
|
+
(0, vitest_1.it)('KD seriality: []P -> <>P', () => {
|
|
97
|
+
const f = implies(box(atom('P')), dia(atom('P')));
|
|
98
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isValid)(f, tableau_engine_1.FRAME_KD)).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
(0, vitest_1.it)('T reflexivity: []P -> P', () => {
|
|
101
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(box(atom('P')), atom('P')), tableau_engine_1.FRAME_T)).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
(0, vitest_1.it)('S4 transitivity: []P -> [][]P', () => {
|
|
104
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(box(atom('P')), box(box(atom('P')))), tableau_engine_1.FRAME_S4)).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
(0, vitest_1.it)('S5: <>P -> []<>P', () => {
|
|
107
|
+
(0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(dia(atom('P')), box(dia(atom('P')))), tableau_engine_1.FRAME_S5)).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
(0, vitest_1.describe)('tableau-engine — checkTableau', () => {
|
|
111
|
+
(0, vitest_1.it)('returns ExpandResult with closed flag', () => {
|
|
112
|
+
const r = (0, tableau_engine_1.checkTableau)(implies(atom('P'), atom('P')), tableau_engine_1.FRAME_K, true);
|
|
113
|
+
(0, vitest_1.expect)(r.closed).toBe(true);
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.it)('returns openBranch when satisfiable', () => {
|
|
116
|
+
const r = (0, tableau_engine_1.checkTableau)(atom('P'), tableau_engine_1.FRAME_K, false);
|
|
117
|
+
(0, vitest_1.expect)(r.closed).toBe(false);
|
|
118
|
+
(0, vitest_1.expect)(r.openBranch).toBeDefined();
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('makeBranch produces a Branch with w0', () => {
|
|
121
|
+
const b = (0, tableau_engine_1.makeBranch)([{ formula: atom('P'), world: 'w0' }]);
|
|
122
|
+
(0, vitest_1.expect)(b.worlds.has('w0')).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=tableau-engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableau-engine.test.js","sourceRoot":"","sources":["../../../src/tests/coverage-95/tableau-engine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal-ltl.test.d.ts","sourceRoot":"","sources":["../../../src/tests/coverage-95/temporal-ltl.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const ltl_1 = require("../../profiles/temporal/ltl");
|
|
5
|
+
const atom = (name) => ({ kind: 'atom', name });
|
|
6
|
+
const not = (a) => ({ kind: 'not', args: [a] });
|
|
7
|
+
const and = (a, b) => ({ kind: 'and', args: [a, b] });
|
|
8
|
+
const or = (a, b) => ({ kind: 'or', args: [a, b] });
|
|
9
|
+
const implies = (a, b) => ({ kind: 'implies', args: [a, b] });
|
|
10
|
+
const biconditional = (a, b) => ({
|
|
11
|
+
kind: 'biconditional',
|
|
12
|
+
args: [a, b],
|
|
13
|
+
});
|
|
14
|
+
const G = (a) => ({ kind: 'modal_necessity', args: [a] });
|
|
15
|
+
const F = (a) => ({ kind: 'modal_possibility', args: [a] });
|
|
16
|
+
const X = (a) => ({ kind: 'temporal_next', args: [a] });
|
|
17
|
+
const U = (a, b) => ({ kind: 'temporal_until', args: [a, b] });
|
|
18
|
+
(0, vitest_1.describe)('TemporalLTL — profile', () => {
|
|
19
|
+
const p = new ltl_1.TemporalLTL();
|
|
20
|
+
(0, vitest_1.it)('has name temporal.ltl', () => {
|
|
21
|
+
(0, vitest_1.expect)(p.name).toBe('temporal.ltl');
|
|
22
|
+
(0, vitest_1.expect)(p.description).toContain('LTL');
|
|
23
|
+
});
|
|
24
|
+
(0, vitest_1.it)('explainSystem returns a non-empty multi-line block', () => {
|
|
25
|
+
const exp = p.explainSystem();
|
|
26
|
+
(0, vitest_1.expect)(exp).toContain('G(');
|
|
27
|
+
(0, vitest_1.expect)(exp).toContain('F(');
|
|
28
|
+
(0, vitest_1.expect)(exp.split('\n').length).toBeGreaterThan(5);
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)('formatFormula renders G(P) as G(P)', () => {
|
|
31
|
+
(0, vitest_1.expect)(p.formatFormula(G(atom('P')))).toBe('G(P)');
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)('formatFormula renders F(P)', () => {
|
|
34
|
+
(0, vitest_1.expect)(p.formatFormula(F(atom('P')))).toBe('F(P)');
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('formatFormula renders X(P)', () => {
|
|
37
|
+
(0, vitest_1.expect)(p.formatFormula(X(atom('P')))).toBe('X(P)');
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.it)('formatFormula renders P U Q', () => {
|
|
40
|
+
(0, vitest_1.expect)(p.formatFormula(U(atom('P'), atom('Q')))).toMatch(/U/);
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('formatFormula renders negation over atom inline', () => {
|
|
43
|
+
(0, vitest_1.expect)(p.formatFormula(not(atom('P')))).toBe('¬P');
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('formatFormula renders negation over compound with parens', () => {
|
|
46
|
+
(0, vitest_1.expect)(p.formatFormula(not(and(atom('P'), atom('Q'))))).toMatch(/¬\(/);
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)('formatFormula renders and/or/implies/biconditional', () => {
|
|
49
|
+
(0, vitest_1.expect)(p.formatFormula(and(atom('P'), atom('Q')))).toContain('∧');
|
|
50
|
+
(0, vitest_1.expect)(p.formatFormula(or(atom('P'), atom('Q')))).toContain('∨');
|
|
51
|
+
(0, vitest_1.expect)(p.formatFormula(implies(atom('P'), atom('Q')))).toContain('→');
|
|
52
|
+
(0, vitest_1.expect)(p.formatFormula(biconditional(atom('P'), atom('Q')))).toContain('↔');
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.it)('formatFormula handles incomplete G as G(?)', () => {
|
|
55
|
+
(0, vitest_1.expect)(p.formatFormula({ kind: 'modal_necessity' })).toBe('G(?)');
|
|
56
|
+
(0, vitest_1.expect)(p.formatFormula({ kind: 'modal_possibility' })).toBe('F(?)');
|
|
57
|
+
(0, vitest_1.expect)(p.formatFormula({ kind: 'temporal_next' })).toBe('X(?)');
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('formatFormula falls back to formulaToString for unknown kinds', () => {
|
|
60
|
+
(0, vitest_1.expect)(typeof p.formatFormula({ kind: 'true' })).toBe('string');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.describe)('TemporalLTL — explain() classifies patterns', () => {
|
|
64
|
+
const p = new ltl_1.TemporalLTL();
|
|
65
|
+
(0, vitest_1.it)('classifies G(¬P) as Safety', () => {
|
|
66
|
+
const r = p.explain(G(not(atom('crash'))));
|
|
67
|
+
(0, vitest_1.expect)(r.output).toContain('Safety');
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.it)('classifies F(P) as Liveness', () => {
|
|
70
|
+
const r = p.explain(F(atom('serve')));
|
|
71
|
+
(0, vitest_1.expect)(r.output).toContain('Liveness');
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.it)('classifies G(P → F(Q)) as Response', () => {
|
|
74
|
+
const r = p.explain(G(implies(atom('req'), F(atom('ack')))));
|
|
75
|
+
(0, vitest_1.expect)(r.output).toContain('Response');
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)('classifies F(G(P)) as Persistence', () => {
|
|
78
|
+
const r = p.explain(F(G(atom('stable'))));
|
|
79
|
+
(0, vitest_1.expect)(r.output).toContain('Persistence');
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.it)('classifies G(F(P)) as Recurrence', () => {
|
|
82
|
+
const r = p.explain(G(F(atom('serve'))));
|
|
83
|
+
(0, vitest_1.expect)(r.output).toContain('Recurrence');
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.it)('classifies ¬P U Q as Precedence', () => {
|
|
86
|
+
const r = p.explain(U(not(atom('p')), atom('q')));
|
|
87
|
+
(0, vitest_1.expect)(r.output).toContain('Precedence');
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)('returns base result without pattern for simple atom', () => {
|
|
90
|
+
const r = p.explain(atom('P'));
|
|
91
|
+
(0, vitest_1.expect)(typeof r.output).toBe('string');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=temporal-ltl.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal-ltl.test.js","sourceRoot":"","sources":["../../../src/tests/coverage-95/temporal-ltl.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typecheck-checker.test.d.ts","sourceRoot":"","sources":["../../../src/tests/coverage-95/typecheck-checker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const checker_1 = require("../../runtime/typecheck/checker");
|
|
5
|
+
const parser_1 = require("../../parser/parser");
|
|
6
|
+
function parseProgram(src) {
|
|
7
|
+
const p = new parser_1.Parser('<test>');
|
|
8
|
+
return p.parse(src);
|
|
9
|
+
}
|
|
10
|
+
(0, vitest_1.describe)('TypeChecker — duplicates and undeclared', () => {
|
|
11
|
+
(0, vitest_1.it)('TC006: duplicate axiom declaration', () => {
|
|
12
|
+
const prog = parseProgram(`logic classical.propositional
|
|
13
|
+
axiom a : P
|
|
14
|
+
axiom a : Q
|
|
15
|
+
`);
|
|
16
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
17
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC006')).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)('TC006: duplicate theorem declaration', () => {
|
|
20
|
+
const prog = parseProgram(`logic classical.propositional
|
|
21
|
+
theorem t : P
|
|
22
|
+
theorem t : Q
|
|
23
|
+
`);
|
|
24
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
25
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC006')).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('TC001: undeclared premise in derive', () => {
|
|
28
|
+
const prog = parseProgram(`logic classical.propositional
|
|
29
|
+
axiom a1 : P
|
|
30
|
+
derive Q from notDeclared
|
|
31
|
+
`);
|
|
32
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
33
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC001')).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
(0, vitest_1.it)('TC001: undeclared premise in prove', () => {
|
|
36
|
+
const prog = parseProgram(`logic classical.propositional
|
|
37
|
+
axiom a1 : P
|
|
38
|
+
prove Q from missingPremise
|
|
39
|
+
`);
|
|
40
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
41
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC001')).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
(0, vitest_1.describe)('TypeChecker — operator/profile mismatch', () => {
|
|
45
|
+
(0, vitest_1.it)('TC004: modal operator in non-modal profile', () => {
|
|
46
|
+
const prog = parseProgram(`logic classical.propositional
|
|
47
|
+
axiom a : []P
|
|
48
|
+
`);
|
|
49
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
50
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC004')).toBe(true);
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)('TC004: temporal operator detected when manually injected (parse keeps as token)', () => {
|
|
53
|
+
const prog = parseProgram(`logic classical.propositional
|
|
54
|
+
axiom a : P
|
|
55
|
+
`);
|
|
56
|
+
// Manually inject a temporal_next into the AST to simulate type confusion
|
|
57
|
+
const ax = prog.statements[1];
|
|
58
|
+
if (ax && ax.kind === 'axiom_decl') {
|
|
59
|
+
ax.formula = {
|
|
60
|
+
kind: 'temporal_next',
|
|
61
|
+
args: [{ kind: 'atom', name: 'P' }],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
65
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC004')).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.describe)('TypeChecker — imports', () => {
|
|
69
|
+
(0, vitest_1.it)('TC007: circular import to same file', () => {
|
|
70
|
+
const prog = parseProgram(`logic classical.propositional
|
|
71
|
+
import "<test>"
|
|
72
|
+
`);
|
|
73
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional', '<test>');
|
|
74
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC007')).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.it)('TC007: duplicate import', () => {
|
|
77
|
+
const prog = parseProgram(`logic classical.propositional
|
|
78
|
+
import "foo.st"
|
|
79
|
+
import "foo.st"
|
|
80
|
+
`);
|
|
81
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
82
|
+
(0, vitest_1.expect)(errs.some((e) => e.code === 'TC007')).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.describe)('TypeChecker — accepts valid programs', () => {
|
|
86
|
+
(0, vitest_1.it)('valid propositional program produces no errors', () => {
|
|
87
|
+
const prog = parseProgram(`logic classical.propositional
|
|
88
|
+
axiom a1 : P -> Q
|
|
89
|
+
axiom a2 : P
|
|
90
|
+
derive Q from a1, a2
|
|
91
|
+
check valid (P -> P)
|
|
92
|
+
`);
|
|
93
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
94
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
95
|
+
});
|
|
96
|
+
(0, vitest_1.it)('let bindings are registered', () => {
|
|
97
|
+
const prog = parseProgram(`logic classical.propositional
|
|
98
|
+
let phi = P -> Q
|
|
99
|
+
axiom a1 : P
|
|
100
|
+
`);
|
|
101
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
102
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('check satisfiable, equivalent, countermodel all OK', () => {
|
|
105
|
+
const prog = parseProgram(`logic classical.propositional
|
|
106
|
+
check satisfiable (P | !P)
|
|
107
|
+
check equivalent (P & Q), (Q & P)
|
|
108
|
+
countermodel (P -> Q)
|
|
109
|
+
`);
|
|
110
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
111
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
112
|
+
});
|
|
113
|
+
(0, vitest_1.it)('truth_table and explain OK', () => {
|
|
114
|
+
const prog = parseProgram(`logic classical.propositional
|
|
115
|
+
truth_table (P & Q)
|
|
116
|
+
explain (P -> P)
|
|
117
|
+
`);
|
|
118
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
119
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
120
|
+
});
|
|
121
|
+
(0, vitest_1.it)('analyze with premises and conclusion OK', () => {
|
|
122
|
+
const prog = parseProgram(`logic classical.propositional
|
|
123
|
+
analyze {
|
|
124
|
+
premises: [P -> Q, P]
|
|
125
|
+
conclusion: Q
|
|
126
|
+
}
|
|
127
|
+
`);
|
|
128
|
+
(0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
129
|
+
});
|
|
130
|
+
(0, vitest_1.it)('theory declaration is type-checked recursively', () => {
|
|
131
|
+
const prog = parseProgram(`logic classical.propositional
|
|
132
|
+
theory Persona(n) {
|
|
133
|
+
axiom existencia : P
|
|
134
|
+
theorem identidad : P -> P
|
|
135
|
+
}
|
|
136
|
+
`);
|
|
137
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
138
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
139
|
+
});
|
|
140
|
+
(0, vitest_1.it)('modal profile accepts modal operators', () => {
|
|
141
|
+
const prog = parseProgram(`logic modal.k
|
|
142
|
+
axiom a : []P
|
|
143
|
+
`);
|
|
144
|
+
const errs = (0, checker_1.typeCheck)(prog, 'modal.k');
|
|
145
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error' && e.code === 'TC004').length).toBe(0);
|
|
146
|
+
});
|
|
147
|
+
(0, vitest_1.it)('temporal profile accepts temporal operators', () => {
|
|
148
|
+
const prog = parseProgram(`logic temporal.ltl
|
|
149
|
+
axiom a : X(P)
|
|
150
|
+
`);
|
|
151
|
+
const errs = (0, checker_1.typeCheck)(prog, 'temporal.ltl');
|
|
152
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error' && e.code === 'TC004').length).toBe(0);
|
|
153
|
+
});
|
|
154
|
+
(0, vitest_1.it)('empty profile suppresses operator-specific errors', () => {
|
|
155
|
+
const prog = parseProgram(`axiom a : []P
|
|
156
|
+
`);
|
|
157
|
+
const errs = (0, checker_1.typeCheck)(prog, '');
|
|
158
|
+
(0, vitest_1.expect)(errs.filter((e) => e.code === 'TC004').length).toBe(0);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
(0, vitest_1.describe)('TypeChecker — define and unfold/fold', () => {
|
|
162
|
+
(0, vitest_1.it)('define declaration registers in scope', () => {
|
|
163
|
+
const prog = parseProgram(`logic classical.propositional
|
|
164
|
+
define Mortal(x) := P -> Q
|
|
165
|
+
`);
|
|
166
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
167
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
(0, vitest_1.describe)('TypeChecker — file-level fn declarations', () => {
|
|
171
|
+
(0, vitest_1.it)('declares function and uses it without error', () => {
|
|
172
|
+
const prog = parseProgram(`logic classical.propositional
|
|
173
|
+
fn helper(p) {
|
|
174
|
+
return p
|
|
175
|
+
}
|
|
176
|
+
`);
|
|
177
|
+
const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
|
|
178
|
+
(0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
(0, vitest_1.describe)('TypeChecker — top-level typeCheck()', () => {
|
|
182
|
+
(0, vitest_1.it)('typeCheck on empty program returns []', () => {
|
|
183
|
+
const prog = parseProgram('');
|
|
184
|
+
(0, vitest_1.expect)((0, checker_1.typeCheck)(prog)).toEqual([]);
|
|
185
|
+
});
|
|
186
|
+
(0, vitest_1.it)('typeCheck handles file arg', () => {
|
|
187
|
+
const prog = parseProgram('logic classical.propositional\n');
|
|
188
|
+
(0, vitest_1.expect)((0, checker_1.typeCheck)(prog, 'classical.propositional', 'foo.st')).toEqual([]);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=typecheck-checker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typecheck-checker.test.js","sourceRoot":"","sources":["../../../src/tests/coverage-95/typecheck-checker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undecidability-detector.test.d.ts","sourceRoot":"","sources":["../../../src/tests/coverage-95/undecidability-detector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const undecidability_detector_1 = require("../../profiles/classical/undecidability-detector");
|
|
5
|
+
const atom = (name) => ({ kind: 'atom', name });
|
|
6
|
+
const not = (a) => ({ kind: 'not', args: [a] });
|
|
7
|
+
const and = (a, b) => ({ kind: 'and', args: [a, b] });
|
|
8
|
+
const pred = (name, ...terms) => ({
|
|
9
|
+
kind: 'predicate',
|
|
10
|
+
name,
|
|
11
|
+
args: terms.map((t) => ({ kind: 'atom', name: t })),
|
|
12
|
+
});
|
|
13
|
+
const forall = (variable, body) => ({
|
|
14
|
+
kind: 'forall',
|
|
15
|
+
variable,
|
|
16
|
+
args: [body],
|
|
17
|
+
});
|
|
18
|
+
const exists = (variable, body) => ({
|
|
19
|
+
kind: 'exists',
|
|
20
|
+
variable,
|
|
21
|
+
args: [body],
|
|
22
|
+
});
|
|
23
|
+
const fn = (name, ...args) => ({
|
|
24
|
+
kind: 'fn_call',
|
|
25
|
+
name,
|
|
26
|
+
args,
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.describe)('detectUndecidable() — undecidability detector', () => {
|
|
29
|
+
(0, vitest_1.it)('returns empty array for a simple atom', () => {
|
|
30
|
+
(0, vitest_1.expect)((0, undecidability_detector_1.detectUndecidable)(atom('P'))).toEqual([]);
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('returns empty for a single quantifier', () => {
|
|
33
|
+
const f = forall('x', pred('P', 'x'));
|
|
34
|
+
(0, vitest_1.expect)((0, undecidability_detector_1.detectUndecidable)(f)).toEqual([]);
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('detects quantifier alternation depth >= 3 as warning', () => {
|
|
37
|
+
// ∀x ∃y ∀z ∃w P(x,y,z,w)
|
|
38
|
+
const f = forall('x', exists('y', forall('z', exists('w', pred('P', 'x', 'y', 'z', 'w')))));
|
|
39
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
40
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'quantifier_alternation')).toBe(true);
|
|
41
|
+
const qa = w.find((x) => x.pattern === 'quantifier_alternation');
|
|
42
|
+
(0, vitest_1.expect)(qa).toBeDefined();
|
|
43
|
+
(0, vitest_1.expect)(['warning', 'critical']).toContain(qa.severity);
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('marks quantifier alternation depth >= 4 as critical', () => {
|
|
46
|
+
// ∀ ∃ ∀ ∃ ∀ → alternation depth 4
|
|
47
|
+
const f = forall('a', exists('b', forall('c', exists('d', forall('e', pred('Q', 'a', 'b', 'c', 'd', 'e'))))));
|
|
48
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
49
|
+
const qa = w.find((x) => x.pattern === 'quantifier_alternation');
|
|
50
|
+
(0, vitest_1.expect)(qa).toBeDefined();
|
|
51
|
+
(0, vitest_1.expect)(qa.severity).toBe('critical');
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.it)('detects deep quantifier nesting (>=5)', () => {
|
|
54
|
+
// ∀∀∀∀∀ P(a,b,c,d,e) — nesting 5, alternation 0
|
|
55
|
+
const f = forall('a', forall('b', forall('c', forall('d', forall('e', pred('R', 'a', 'b', 'c', 'd', 'e'))))));
|
|
56
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
57
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'deep_quantifier_nesting')).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('marks nesting >= 8 as critical', () => {
|
|
60
|
+
let body = pred('S', 'a');
|
|
61
|
+
for (let i = 0; i < 8; i++) {
|
|
62
|
+
body = forall(`v${i}`, body);
|
|
63
|
+
}
|
|
64
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(body);
|
|
65
|
+
const dn = w.find((x) => x.pattern === 'deep_quantifier_nesting');
|
|
66
|
+
(0, vitest_1.expect)(dn).toBeDefined();
|
|
67
|
+
(0, vitest_1.expect)(dn.severity).toBe('critical');
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.it)('detects Gödel-like self-reference (provable)', () => {
|
|
70
|
+
const f = forall('x', pred('provable_of', 'x'));
|
|
71
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
72
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
(0, vitest_1.it)('detects truth_of self-reference', () => {
|
|
75
|
+
const f = pred('truth_of', 'x');
|
|
76
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
77
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.it)('detects godel atom', () => {
|
|
80
|
+
const f = atom('godel_sentence');
|
|
81
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
82
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)('detects halt-like names', () => {
|
|
85
|
+
const f = pred('halts', 'p');
|
|
86
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
87
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)('detects reflexive predicate', () => {
|
|
90
|
+
const f = pred('reflexive_check', 'x');
|
|
91
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
92
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.it)('detects deep function nesting with quantifiers', () => {
|
|
95
|
+
// P(f(f(f(f(x)))))
|
|
96
|
+
const fx = fn('f', atom('x'));
|
|
97
|
+
const ffx = fn('f', fx);
|
|
98
|
+
const fffx = fn('f', ffx);
|
|
99
|
+
const ffffx = fn('f', fffx);
|
|
100
|
+
const f = forall('x', { kind: 'predicate', name: 'P', args: [ffffx] });
|
|
101
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
102
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'deep_function_nesting')).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('marks function nesting >= 6 as critical', () => {
|
|
105
|
+
let term = atom('x');
|
|
106
|
+
for (let i = 0; i < 6; i++) {
|
|
107
|
+
term = fn('g', term);
|
|
108
|
+
}
|
|
109
|
+
const f = forall('x', { kind: 'predicate', name: 'P', args: [term] });
|
|
110
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
111
|
+
const fn_w = w.find((x) => x.pattern === 'deep_function_nesting');
|
|
112
|
+
(0, vitest_1.expect)(fn_w).toBeDefined();
|
|
113
|
+
(0, vitest_1.expect)(fn_w.severity).toBe('critical');
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.it)('detects polyadic predicates combined with alternation', () => {
|
|
116
|
+
// ∀x ∃y ∀z P(x,y,z) — alternation depth 2 + polyadic predicate
|
|
117
|
+
const f = forall('x', exists('y', forall('z', pred('Three', 'x', 'y', 'z'))));
|
|
118
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
119
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'polyadic_with_alternation')).toBe(true);
|
|
120
|
+
});
|
|
121
|
+
(0, vitest_1.it)('detects infinite-domain-requiring formula', () => {
|
|
122
|
+
// ∀x ∃y ¬P(x,y)
|
|
123
|
+
const f = forall('x', exists('y', not(pred('P', 'x', 'y'))));
|
|
124
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
125
|
+
(0, vitest_1.expect)(w.some((x) => x.pattern === 'infinite_domain')).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
(0, vitest_1.it)('does not report on monadic decidable patterns', () => {
|
|
128
|
+
const f = forall('x', pred('M', 'x'));
|
|
129
|
+
const w = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
130
|
+
(0, vitest_1.expect)(w.find((x) => x.pattern === 'polyadic_with_alternation')).toBeUndefined();
|
|
131
|
+
(0, vitest_1.expect)(w.find((x) => x.pattern === 'quantifier_alternation')).toBeUndefined();
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.it)('returns empty for and/or compound without quantifiers', () => {
|
|
134
|
+
const f = and(atom('P'), atom('Q'));
|
|
135
|
+
(0, vitest_1.expect)((0, undecidability_detector_1.detectUndecidable)(f)).toEqual([]);
|
|
136
|
+
});
|
|
137
|
+
(0, vitest_1.it)('all warnings have required fields', () => {
|
|
138
|
+
const f = forall('a', exists('b', forall('c', exists('d', pred('provable', 'a', 'b', 'c', 'd')))));
|
|
139
|
+
const ws = (0, undecidability_detector_1.detectUndecidable)(f);
|
|
140
|
+
(0, vitest_1.expect)(ws.length).toBeGreaterThan(0);
|
|
141
|
+
for (const w of ws) {
|
|
142
|
+
(0, vitest_1.expect)(typeof w.pattern).toBe('string');
|
|
143
|
+
(0, vitest_1.expect)(typeof w.description).toBe('string');
|
|
144
|
+
(0, vitest_1.expect)(['info', 'warning', 'critical']).toContain(w.severity);
|
|
145
|
+
(0, vitest_1.expect)(typeof w.suggestion).toBe('string');
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=undecidability-detector.test.js.map
|