@stevenvo780/st-lang 3.2.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -7
- package/dist/api.d.ts +2 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +5 -1
- package/dist/api.js.map +1 -1
- package/dist/argumentation/dot.d.ts +3 -0
- package/dist/argumentation/dot.d.ts.map +1 -0
- package/dist/argumentation/dot.js +25 -0
- package/dist/argumentation/dot.js.map +1 -0
- package/dist/argumentation/extensions.d.ts +11 -0
- package/dist/argumentation/extensions.d.ts.map +1 -0
- package/dist/argumentation/extensions.js +173 -0
- package/dist/argumentation/extensions.js.map +1 -0
- package/dist/argumentation/framework.d.ts +13 -0
- package/dist/argumentation/framework.d.ts.map +1 -0
- package/dist/argumentation/framework.js +117 -0
- package/dist/argumentation/framework.js.map +1 -0
- package/dist/argumentation/index.d.ts +6 -0
- package/dist/argumentation/index.d.ts.map +1 -0
- package/dist/argumentation/index.js +33 -0
- package/dist/argumentation/index.js.map +1 -0
- package/dist/argumentation/types.d.ts +11 -0
- package/dist/argumentation/types.d.ts.map +1 -0
- package/dist/argumentation/types.js +8 -0
- package/dist/argumentation/types.js.map +1 -0
- package/dist/ast/visitor.d.ts +95 -0
- package/dist/ast/visitor.d.ts.map +1 -0
- package/dist/ast/visitor.js +223 -0
- package/dist/ast/visitor.js.map +1 -0
- package/dist/citation-reasoning/derive.d.ts +31 -0
- package/dist/citation-reasoning/derive.d.ts.map +1 -0
- package/dist/citation-reasoning/derive.js +157 -0
- package/dist/citation-reasoning/derive.js.map +1 -0
- package/dist/citation-reasoning/index.d.ts +4 -0
- package/dist/citation-reasoning/index.d.ts.map +1 -0
- package/dist/citation-reasoning/index.js +10 -0
- package/dist/citation-reasoning/index.js.map +1 -0
- package/dist/citation-reasoning/types.d.ts +36 -0
- package/dist/citation-reasoning/types.d.ts.map +1 -0
- package/dist/citation-reasoning/types.js +6 -0
- package/dist/citation-reasoning/types.js.map +1 -0
- package/dist/educational/checker.d.ts +3 -0
- package/dist/educational/checker.d.ts.map +1 -0
- package/dist/educational/checker.js +244 -0
- package/dist/educational/checker.js.map +1 -0
- package/dist/educational/generator.d.ts +4 -0
- package/dist/educational/generator.d.ts.map +1 -0
- package/dist/educational/generator.js +158 -0
- package/dist/educational/generator.js.map +1 -0
- package/dist/educational/index.d.ts +6 -0
- package/dist/educational/index.d.ts.map +1 -0
- package/dist/educational/index.js +21 -0
- package/dist/educational/index.js.map +1 -0
- package/dist/educational/normalize.d.ts +6 -0
- package/dist/educational/normalize.d.ts.map +1 -0
- package/dist/educational/normalize.js +124 -0
- package/dist/educational/normalize.js.map +1 -0
- package/dist/educational/rng.d.ts +10 -0
- package/dist/educational/rng.d.ts.map +1 -0
- package/dist/educational/rng.js +47 -0
- package/dist/educational/rng.js.map +1 -0
- package/dist/educational/templates.d.ts +30 -0
- package/dist/educational/templates.d.ts.map +1 -0
- package/dist/educational/templates.js +567 -0
- package/dist/educational/templates.js.map +1 -0
- package/dist/educational/types.d.ts +44 -0
- package/dist/educational/types.d.ts.map +1 -0
- package/dist/educational/types.js +20 -0
- package/dist/educational/types.js.map +1 -0
- package/dist/exporters/coq/index.d.ts +35 -0
- package/dist/exporters/coq/index.d.ts.map +1 -0
- package/dist/exporters/coq/index.js +299 -0
- package/dist/exporters/coq/index.js.map +1 -0
- package/dist/fol-prover/cnf.d.ts +10 -0
- package/dist/fol-prover/cnf.d.ts.map +1 -0
- package/dist/fol-prover/cnf.js +357 -0
- package/dist/fol-prover/cnf.js.map +1 -0
- package/dist/fol-prover/index.d.ts +7 -0
- package/dist/fol-prover/index.d.ts.map +1 -0
- package/dist/fol-prover/index.js +27 -0
- package/dist/fol-prover/index.js.map +1 -0
- package/dist/fol-prover/prove.d.ts +4 -0
- package/dist/fol-prover/prove.d.ts.map +1 -0
- package/dist/fol-prover/prove.js +34 -0
- package/dist/fol-prover/prove.js.map +1 -0
- package/dist/fol-prover/resolve.d.ts +27 -0
- package/dist/fol-prover/resolve.d.ts.map +1 -0
- package/dist/fol-prover/resolve.js +234 -0
- package/dist/fol-prover/resolve.js.map +1 -0
- package/dist/fol-prover/types.d.ts +34 -0
- package/dist/fol-prover/types.d.ts.map +1 -0
- package/dist/fol-prover/types.js +38 -0
- package/dist/fol-prover/types.js.map +1 -0
- package/dist/fol-prover/unify.d.ts +9 -0
- package/dist/fol-prover/unify.d.ts.map +1 -0
- package/dist/fol-prover/unify.js +110 -0
- package/dist/fol-prover/unify.js.map +1 -0
- package/dist/hyperreal/index.d.ts +45 -0
- package/dist/hyperreal/index.d.ts.map +1 -0
- package/dist/hyperreal/index.js +183 -0
- package/dist/hyperreal/index.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -1
- package/dist/index.js.map +1 -1
- package/dist/lsp/index.d.ts +6 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +29 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/protocol.d.ts +20 -0
- package/dist/lsp/protocol.d.ts.map +1 -0
- package/dist/lsp/protocol.js +64 -0
- package/dist/lsp/protocol.js.map +1 -0
- package/dist/lsp/server.d.ts +47 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +529 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/types.d.ts +152 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +70 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/parser/formulas.d.ts +7 -0
- package/dist/parser/formulas.d.ts.map +1 -0
- package/dist/parser/formulas.js +511 -0
- package/dist/parser/formulas.js.map +1 -0
- package/dist/parser/parser.d.ts +11 -41
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +410 -1037
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/state.d.ts +34 -0
- package/dist/parser/state.d.ts.map +1 -0
- package/dist/parser/state.js +163 -0
- package/dist/parser/state.js.map +1 -0
- package/dist/plugin-system/demo-min-logic.d.ts +3 -0
- package/dist/plugin-system/demo-min-logic.d.ts.map +1 -0
- package/dist/plugin-system/demo-min-logic.js +116 -0
- package/dist/plugin-system/demo-min-logic.js.map +1 -0
- package/dist/plugin-system/errors.d.ts +9 -0
- package/dist/plugin-system/errors.d.ts.map +1 -0
- package/dist/plugin-system/errors.js +24 -0
- package/dist/plugin-system/errors.js.map +1 -0
- package/dist/plugin-system/index.d.ts +6 -0
- package/dist/plugin-system/index.d.ts.map +1 -0
- package/dist/plugin-system/index.js +14 -0
- package/dist/plugin-system/index.js.map +1 -0
- package/dist/plugin-system/registry.d.ts +12 -0
- package/dist/plugin-system/registry.d.ts.map +1 -0
- package/dist/plugin-system/registry.js +46 -0
- package/dist/plugin-system/registry.js.map +1 -0
- package/dist/plugin-system/types.d.ts +23 -0
- package/dist/plugin-system/types.d.ts.map +1 -0
- package/dist/plugin-system/types.js +3 -0
- package/dist/plugin-system/types.js.map +1 -0
- package/dist/plugin-system/validate.d.ts +4 -0
- package/dist/plugin-system/validate.d.ts.map +1 -0
- package/dist/plugin-system/validate.js +60 -0
- package/dist/plugin-system/validate.js.map +1 -0
- package/dist/profiles/classical/parallel-sat.js +3 -3
- package/dist/profiles/classical/parallel-sat.js.map +1 -1
- package/dist/proof-exchange/index.d.ts +26 -0
- package/dist/proof-exchange/index.d.ts.map +1 -0
- package/dist/proof-exchange/index.js +94 -0
- package/dist/proof-exchange/index.js.map +1 -0
- package/dist/runtime/memo/cache.d.ts +32 -0
- package/dist/runtime/memo/cache.d.ts.map +1 -0
- package/dist/runtime/memo/cache.js +129 -0
- package/dist/runtime/memo/cache.js.map +1 -0
- package/dist/runtime/memo/hash.d.ts +9 -0
- package/dist/runtime/memo/hash.d.ts.map +1 -0
- package/dist/runtime/memo/hash.js +87 -0
- package/dist/runtime/memo/hash.js.map +1 -0
- package/dist/runtime/memo/index.d.ts +4 -0
- package/dist/runtime/memo/index.d.ts.map +1 -0
- package/dist/runtime/memo/index.js +8 -0
- package/dist/runtime/memo/index.js.map +1 -0
- package/dist/runtime/parallel/index.d.ts +34 -0
- package/dist/runtime/parallel/index.d.ts.map +1 -0
- package/dist/runtime/parallel/index.js +220 -0
- package/dist/runtime/parallel/index.js.map +1 -0
- package/dist/runtime/parallel/worker.d.ts +22 -0
- package/dist/runtime/parallel/worker.d.ts.map +1 -0
- package/dist/runtime/parallel/worker.js +43 -0
- package/dist/runtime/parallel/worker.js.map +1 -0
- package/dist/runtime/smt/index.d.ts +6 -0
- package/dist/runtime/smt/index.d.ts.map +1 -0
- package/dist/runtime/smt/index.js +18 -0
- package/dist/runtime/smt/index.js.map +1 -0
- package/dist/runtime/smt/mock-backend.d.ts +30 -0
- package/dist/runtime/smt/mock-backend.d.ts.map +1 -0
- package/dist/runtime/smt/mock-backend.js +460 -0
- package/dist/runtime/smt/mock-backend.js.map +1 -0
- package/dist/runtime/smt/serializer.d.ts +21 -0
- package/dist/runtime/smt/serializer.d.ts.map +1 -0
- package/dist/runtime/smt/serializer.js +314 -0
- package/dist/runtime/smt/serializer.js.map +1 -0
- package/dist/runtime/smt/subprocess-backend.d.ts +62 -0
- package/dist/runtime/smt/subprocess-backend.d.ts.map +1 -0
- package/dist/runtime/smt/subprocess-backend.js +261 -0
- package/dist/runtime/smt/subprocess-backend.js.map +1 -0
- package/dist/runtime/smt/types.d.ts +57 -0
- package/dist/runtime/smt/types.d.ts.map +1 -0
- package/dist/runtime/smt/types.js +6 -0
- package/dist/runtime/smt/types.js.map +1 -0
- package/dist/runtime/streaming/index.d.ts +4 -0
- package/dist/runtime/streaming/index.d.ts.map +1 -0
- package/dist/runtime/streaming/index.js +9 -0
- package/dist/runtime/streaming/index.js.map +1 -0
- package/dist/runtime/streaming/stream-eval.d.ts +31 -0
- package/dist/runtime/streaming/stream-eval.d.ts.map +1 -0
- package/dist/runtime/streaming/stream-eval.js +155 -0
- package/dist/runtime/streaming/stream-eval.js.map +1 -0
- package/dist/runtime/streaming/types.d.ts +33 -0
- package/dist/runtime/streaming/types.d.ts.map +1 -0
- package/dist/runtime/streaming/types.js +6 -0
- package/dist/runtime/streaming/types.js.map +1 -0
- package/dist/runtime/typecheck/checker.d.ts +72 -0
- package/dist/runtime/typecheck/checker.d.ts.map +1 -0
- package/dist/runtime/typecheck/checker.js +462 -0
- package/dist/runtime/typecheck/checker.js.map +1 -0
- package/dist/runtime/typecheck/index.d.ts +4 -0
- package/dist/runtime/typecheck/index.d.ts.map +1 -0
- package/dist/runtime/typecheck/index.js +13 -0
- package/dist/runtime/typecheck/index.js.map +1 -0
- package/dist/runtime/typecheck/levenshtein.d.ts +11 -0
- package/dist/runtime/typecheck/levenshtein.d.ts.map +1 -0
- package/dist/runtime/typecheck/levenshtein.js +49 -0
- package/dist/runtime/typecheck/levenshtein.js.map +1 -0
- package/dist/runtime/typecheck/types.d.ts +14 -0
- package/dist/runtime/typecheck/types.d.ts.map +1 -0
- package/dist/runtime/typecheck/types.js +26 -0
- package/dist/runtime/typecheck/types.js.map +1 -0
- package/dist/solver/cdcl-v2/clause-learning.d.ts +33 -0
- package/dist/solver/cdcl-v2/clause-learning.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/clause-learning.js +110 -0
- package/dist/solver/cdcl-v2/clause-learning.js.map +1 -0
- package/dist/solver/cdcl-v2/index.d.ts +9 -0
- package/dist/solver/cdcl-v2/index.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/index.js +39 -0
- package/dist/solver/cdcl-v2/index.js.map +1 -0
- package/dist/solver/cdcl-v2/lbd.d.ts +34 -0
- package/dist/solver/cdcl-v2/lbd.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/lbd.js +72 -0
- package/dist/solver/cdcl-v2/lbd.js.map +1 -0
- package/dist/solver/cdcl-v2/luby.d.ts +28 -0
- package/dist/solver/cdcl-v2/luby.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/luby.js +70 -0
- package/dist/solver/cdcl-v2/luby.js.map +1 -0
- package/dist/solver/cdcl-v2/phase-saving.d.ts +14 -0
- package/dist/solver/cdcl-v2/phase-saving.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/phase-saving.js +44 -0
- package/dist/solver/cdcl-v2/phase-saving.js.map +1 -0
- package/dist/solver/cdcl-v2/solver.d.ts +10 -0
- package/dist/solver/cdcl-v2/solver.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/solver.js +442 -0
- package/dist/solver/cdcl-v2/solver.js.map +1 -0
- package/dist/solver/cdcl-v2/state.d.ts +54 -0
- package/dist/solver/cdcl-v2/state.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/state.js +22 -0
- package/dist/solver/cdcl-v2/state.js.map +1 -0
- package/dist/solver/cdcl-v2/vsids.d.ts +19 -0
- package/dist/solver/cdcl-v2/vsids.d.ts.map +1 -0
- package/dist/solver/cdcl-v2/vsids.js +77 -0
- package/dist/solver/cdcl-v2/vsids.js.map +1 -0
- package/dist/tests/agora-integration-fixtures.test.js.map +1 -1
- package/dist/tests/argumentation/dung.test.d.ts +2 -0
- package/dist/tests/argumentation/dung.test.d.ts.map +1 -0
- package/dist/tests/argumentation/dung.test.js +219 -0
- package/dist/tests/argumentation/dung.test.js.map +1 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.d.ts +2 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.d.ts.map +1 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.js +240 -0
- package/dist/tests/citation-reasoning/citation-reasoning.test.js.map +1 -0
- package/dist/tests/coverage-fill-api.test.d.ts +7 -0
- package/dist/tests/coverage-fill-api.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-api.test.js +310 -0
- package/dist/tests/coverage-fill-api.test.js.map +1 -0
- package/dist/tests/coverage-fill-aristotelian.test.d.ts +7 -0
- package/dist/tests/coverage-fill-aristotelian.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-aristotelian.test.js +377 -0
- package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -0
- package/dist/tests/coverage-fill-belnap.test.d.ts +6 -0
- package/dist/tests/coverage-fill-belnap.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-belnap.test.js +277 -0
- package/dist/tests/coverage-fill-belnap.test.js.map +1 -0
- package/dist/tests/coverage-fill-cross-system.test.d.ts +6 -0
- package/dist/tests/coverage-fill-cross-system.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-cross-system.test.js +75 -0
- package/dist/tests/coverage-fill-cross-system.test.js.map +1 -0
- package/dist/tests/coverage-fill-fallacies.test.d.ts +6 -0
- package/dist/tests/coverage-fill-fallacies.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-fallacies.test.js +287 -0
- package/dist/tests/coverage-fill-fallacies.test.js.map +1 -0
- package/dist/tests/coverage-fill-format.test.d.ts +7 -0
- package/dist/tests/coverage-fill-format.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-format.test.js +455 -0
- package/dist/tests/coverage-fill-format.test.js.map +1 -0
- package/dist/tests/coverage-fill-intuitionistic.test.d.ts +6 -0
- package/dist/tests/coverage-fill-intuitionistic.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-intuitionistic.test.js +293 -0
- package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -0
- package/dist/tests/coverage-fill-probabilistic.test.d.ts +7 -0
- package/dist/tests/coverage-fill-probabilistic.test.d.ts.map +1 -0
- package/dist/tests/coverage-fill-probabilistic.test.js +314 -0
- package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -0
- package/dist/tests/educational/checker.test.d.ts +2 -0
- package/dist/tests/educational/checker.test.d.ts.map +1 -0
- package/dist/tests/educational/checker.test.js +212 -0
- package/dist/tests/educational/checker.test.js.map +1 -0
- package/dist/tests/educational/generator.test.d.ts +2 -0
- package/dist/tests/educational/generator.test.d.ts.map +1 -0
- package/dist/tests/educational/generator.test.js +137 -0
- package/dist/tests/educational/generator.test.js.map +1 -0
- package/dist/tests/exporters/coq/coq-exporter.test.d.ts +2 -0
- package/dist/tests/exporters/coq/coq-exporter.test.d.ts.map +1 -0
- package/dist/tests/exporters/coq/coq-exporter.test.js +353 -0
- package/dist/tests/exporters/coq/coq-exporter.test.js.map +1 -0
- package/dist/tests/fol-prover/cnf.test.d.ts +2 -0
- package/dist/tests/fol-prover/cnf.test.d.ts.map +1 -0
- package/dist/tests/fol-prover/cnf.test.js +74 -0
- package/dist/tests/fol-prover/cnf.test.js.map +1 -0
- package/dist/tests/fol-prover/prove.test.d.ts +2 -0
- package/dist/tests/fol-prover/prove.test.d.ts.map +1 -0
- package/dist/tests/fol-prover/prove.test.js +106 -0
- package/dist/tests/fol-prover/prove.test.js.map +1 -0
- package/dist/tests/fol-prover/unify.test.d.ts +2 -0
- package/dist/tests/fol-prover/unify.test.d.ts.map +1 -0
- package/dist/tests/fol-prover/unify.test.js +66 -0
- package/dist/tests/fol-prover/unify.test.js.map +1 -0
- package/dist/tests/hyperreal/hyperreal.test.d.ts +2 -0
- package/dist/tests/hyperreal/hyperreal.test.d.ts.map +1 -0
- package/dist/tests/hyperreal/hyperreal.test.js +219 -0
- package/dist/tests/hyperreal/hyperreal.test.js.map +1 -0
- package/dist/tests/lsp/server.test.d.ts +2 -0
- package/dist/tests/lsp/server.test.d.ts.map +1 -0
- package/dist/tests/lsp/server.test.js +406 -0
- package/dist/tests/lsp/server.test.js.map +1 -0
- package/dist/tests/memo/cache.test.d.ts +2 -0
- package/dist/tests/memo/cache.test.d.ts.map +1 -0
- package/dist/tests/memo/cache.test.js +252 -0
- package/dist/tests/memo/cache.test.js.map +1 -0
- package/dist/tests/parallel/parallel-pool.test.d.ts +11 -0
- package/dist/tests/parallel/parallel-pool.test.d.ts.map +1 -0
- package/dist/tests/parallel/parallel-pool.test.js +192 -0
- package/dist/tests/parallel/parallel-pool.test.js.map +1 -0
- package/dist/tests/plugin-system/demo-min-logic.test.d.ts +2 -0
- package/dist/tests/plugin-system/demo-min-logic.test.d.ts.map +1 -0
- package/dist/tests/plugin-system/demo-min-logic.test.js +85 -0
- package/dist/tests/plugin-system/demo-min-logic.test.js.map +1 -0
- package/dist/tests/plugin-system/registry.test.d.ts +2 -0
- package/dist/tests/plugin-system/registry.test.d.ts.map +1 -0
- package/dist/tests/plugin-system/registry.test.js +88 -0
- package/dist/tests/plugin-system/registry.test.js.map +1 -0
- package/dist/tests/plugin-system/validate.test.d.ts +2 -0
- package/dist/tests/plugin-system/validate.test.d.ts.map +1 -0
- package/dist/tests/plugin-system/validate.test.js +101 -0
- package/dist/tests/plugin-system/validate.test.js.map +1 -0
- package/dist/tests/proof-exchange/proof-exchange.test.d.ts +2 -0
- package/dist/tests/proof-exchange/proof-exchange.test.d.ts.map +1 -0
- package/dist/tests/proof-exchange/proof-exchange.test.js +161 -0
- package/dist/tests/proof-exchange/proof-exchange.test.js.map +1 -0
- package/dist/tests/sat-v2/clause-learning.test.d.ts +2 -0
- package/dist/tests/sat-v2/clause-learning.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/clause-learning.test.js +73 -0
- package/dist/tests/sat-v2/clause-learning.test.js.map +1 -0
- package/dist/tests/sat-v2/lbd.test.d.ts +2 -0
- package/dist/tests/sat-v2/lbd.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/lbd.test.js +82 -0
- package/dist/tests/sat-v2/lbd.test.js.map +1 -0
- package/dist/tests/sat-v2/luby.test.d.ts +2 -0
- package/dist/tests/sat-v2/luby.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/luby.test.js +58 -0
- package/dist/tests/sat-v2/luby.test.js.map +1 -0
- package/dist/tests/sat-v2/phase-saving.test.d.ts +2 -0
- package/dist/tests/sat-v2/phase-saving.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/phase-saving.test.js +38 -0
- package/dist/tests/sat-v2/phase-saving.test.js.map +1 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.d.ts +2 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.js +199 -0
- package/dist/tests/sat-v2/solver-end-to-end.test.js.map +1 -0
- package/dist/tests/sat-v2/vsids.test.d.ts +2 -0
- package/dist/tests/sat-v2/vsids.test.d.ts.map +1 -0
- package/dist/tests/sat-v2/vsids.test.js +69 -0
- package/dist/tests/sat-v2/vsids.test.js.map +1 -0
- package/dist/tests/smt/mock-backend.test.d.ts +2 -0
- package/dist/tests/smt/mock-backend.test.d.ts.map +1 -0
- package/dist/tests/smt/mock-backend.test.js +129 -0
- package/dist/tests/smt/mock-backend.test.js.map +1 -0
- package/dist/tests/smt/serializer.test.d.ts +2 -0
- package/dist/tests/smt/serializer.test.d.ts.map +1 -0
- package/dist/tests/smt/serializer.test.js +94 -0
- package/dist/tests/smt/serializer.test.js.map +1 -0
- package/dist/tests/smt/subprocess-backend.test.d.ts +2 -0
- package/dist/tests/smt/subprocess-backend.test.d.ts.map +1 -0
- package/dist/tests/smt/subprocess-backend.test.js +89 -0
- package/dist/tests/smt/subprocess-backend.test.js.map +1 -0
- package/dist/tests/streaming/stream-eval.test.d.ts +2 -0
- package/dist/tests/streaming/stream-eval.test.d.ts.map +1 -0
- package/dist/tests/streaming/stream-eval.test.js +170 -0
- package/dist/tests/streaming/stream-eval.test.js.map +1 -0
- package/dist/tests/text-layer-v2/claim-graph.test.d.ts +2 -0
- package/dist/tests/text-layer-v2/claim-graph.test.d.ts.map +1 -0
- package/dist/tests/text-layer-v2/claim-graph.test.js +255 -0
- package/dist/tests/text-layer-v2/claim-graph.test.js.map +1 -0
- package/dist/tests/time-travel/snapshot.test.d.ts +2 -0
- package/dist/tests/time-travel/snapshot.test.d.ts.map +1 -0
- package/dist/tests/time-travel/snapshot.test.js +75 -0
- package/dist/tests/time-travel/snapshot.test.js.map +1 -0
- package/dist/tests/time-travel/store.test.d.ts +2 -0
- package/dist/tests/time-travel/store.test.d.ts.map +1 -0
- package/dist/tests/time-travel/store.test.js +242 -0
- package/dist/tests/time-travel/store.test.js.map +1 -0
- package/dist/tests/typecheck-core.test.d.ts +2 -0
- package/dist/tests/typecheck-core.test.d.ts.map +1 -0
- package/dist/tests/typecheck-core.test.js +339 -0
- package/dist/tests/typecheck-core.test.js.map +1 -0
- package/dist/text-layer/v2/claim-graph.d.ts +45 -0
- package/dist/text-layer/v2/claim-graph.d.ts.map +1 -0
- package/dist/text-layer/v2/claim-graph.js +270 -0
- package/dist/text-layer/v2/claim-graph.js.map +1 -0
- package/dist/text-layer/v2/index.d.ts +6 -0
- package/dist/text-layer/v2/index.d.ts.map +1 -0
- package/dist/text-layer/v2/index.js +10 -0
- package/dist/text-layer/v2/index.js.map +1 -0
- package/dist/text-layer/v2/types.d.ts +32 -0
- package/dist/text-layer/v2/types.d.ts.map +1 -0
- package/dist/text-layer/v2/types.js +11 -0
- package/dist/text-layer/v2/types.js.map +1 -0
- package/dist/time-travel/index.d.ts +4 -0
- package/dist/time-travel/index.d.ts.map +1 -0
- package/dist/time-travel/index.js +8 -0
- package/dist/time-travel/index.js.map +1 -0
- package/dist/time-travel/snapshot.d.ts +9 -0
- package/dist/time-travel/snapshot.d.ts.map +1 -0
- package/dist/time-travel/snapshot.js +24 -0
- package/dist/time-travel/snapshot.js.map +1 -0
- package/dist/time-travel/store.d.ts +14 -0
- package/dist/time-travel/store.d.ts.map +1 -0
- package/dist/time-travel/store.js +119 -0
- package/dist/time-travel/store.js.map +1 -0
- package/dist/time-travel/types.d.ts +50 -0
- package/dist/time-travel/types.d.ts.map +1 -0
- package/dist/time-travel/types.js +3 -0
- package/dist/time-travel/types.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// RNG determinista (mulberry32) — para seedable exercises
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SeededRng = void 0;
|
|
7
|
+
exports.autoSeed = autoSeed;
|
|
8
|
+
class SeededRng {
|
|
9
|
+
state;
|
|
10
|
+
constructor(seed) {
|
|
11
|
+
this.state = seed | 0 || 1;
|
|
12
|
+
}
|
|
13
|
+
next() {
|
|
14
|
+
let t = (this.state += 0x6d2b79f5);
|
|
15
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
16
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
17
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
18
|
+
}
|
|
19
|
+
int(min, max) {
|
|
20
|
+
return min + Math.floor(this.next() * (max - min + 1));
|
|
21
|
+
}
|
|
22
|
+
pick(arr) {
|
|
23
|
+
if (arr.length === 0) {
|
|
24
|
+
throw new Error('SeededRng.pick: array vacío');
|
|
25
|
+
}
|
|
26
|
+
const idx = Math.floor(this.next() * arr.length);
|
|
27
|
+
return arr[idx];
|
|
28
|
+
}
|
|
29
|
+
shuffle(arr) {
|
|
30
|
+
const a = arr.slice();
|
|
31
|
+
for (let i = a.length - 1; i > 0; i--) {
|
|
32
|
+
const j = Math.floor(this.next() * (i + 1));
|
|
33
|
+
const tmp = a[i];
|
|
34
|
+
a[i] = a[j];
|
|
35
|
+
a[j] = tmp;
|
|
36
|
+
}
|
|
37
|
+
return a;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.SeededRng = SeededRng;
|
|
41
|
+
let globalCounter = 0;
|
|
42
|
+
function autoSeed() {
|
|
43
|
+
globalCounter = (globalCounter + 1) | 0;
|
|
44
|
+
const t = Date.now() & 0xffffffff;
|
|
45
|
+
return (t ^ (globalCounter * 0x9e3779b1)) | 0;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=rng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rng.js","sourceRoot":"","sources":["../../src/educational/rng.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,0DAA0D;AAC1D,+DAA+D;;;AA0C/D,4BAIC;AA5CD,MAAa,SAAS;IACZ,KAAK,CAAS;IAEtB,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC;QACnC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,GAAW;QAC1B,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAI,GAAiB;QACvB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAI,GAAiB;QAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AApCD,8BAoCC;AAED,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,SAAgB,QAAQ;IACtB,aAAa,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAClC,OAAO,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ExerciseKind, ExerciseLevel, ProfileName } from './types';
|
|
2
|
+
import { SeededRng } from './rng';
|
|
3
|
+
export interface TemplateContext {
|
|
4
|
+
vars: string[];
|
|
5
|
+
rng: SeededRng;
|
|
6
|
+
}
|
|
7
|
+
export interface BuildResult {
|
|
8
|
+
formula?: string;
|
|
9
|
+
premises?: string[];
|
|
10
|
+
goal?: string;
|
|
11
|
+
expectedStatus: 'valid' | 'invalid' | 'satisfiable' | 'unsatisfiable' | 'provable' | 'refutable';
|
|
12
|
+
prompt: string;
|
|
13
|
+
hints: string[];
|
|
14
|
+
explanation: string;
|
|
15
|
+
canonicalFormula?: string;
|
|
16
|
+
countermodelHint?: Record<string, boolean>;
|
|
17
|
+
}
|
|
18
|
+
export interface ExerciseTemplate {
|
|
19
|
+
id: string;
|
|
20
|
+
level: ExerciseLevel;
|
|
21
|
+
kind: ExerciseKind;
|
|
22
|
+
profiles: ProfileName[];
|
|
23
|
+
minVars: number;
|
|
24
|
+
build(ctx: TemplateContext): BuildResult;
|
|
25
|
+
}
|
|
26
|
+
export declare function pickVars(rng: SeededRng, count: number): string[];
|
|
27
|
+
export declare function listTemplates(): ExerciseTemplate[];
|
|
28
|
+
export declare function findTemplatesFor(level: ExerciseLevel, profile: ProfileName, kind: ExerciseKind): ExerciseTemplate[];
|
|
29
|
+
export declare function findTemplateById(id: string): ExerciseTemplate | undefined;
|
|
30
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/educational/templates.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,SAAS,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,eAAe,GAAG,UAAU,GAAG,WAAW,CAAC;IACjG,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,WAAW,CAAC;CAC1C;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAGhE;AAikBD,wBAAgB,aAAa,IAAI,gBAAgB,EAAE,CAElD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,YAAY,GACjB,gBAAgB,EAAE,CAIpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEzE"}
|
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Plantillas de ejercicios por nivel
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.pickVars = pickVars;
|
|
7
|
+
exports.listTemplates = listTemplates;
|
|
8
|
+
exports.findTemplatesFor = findTemplatesFor;
|
|
9
|
+
exports.findTemplateById = findTemplateById;
|
|
10
|
+
const DEFAULT_VARS = ['P', 'Q', 'R', 'S', 'T', 'U'];
|
|
11
|
+
function pickVars(rng, count) {
|
|
12
|
+
const shuffled = rng.shuffle(DEFAULT_VARS);
|
|
13
|
+
return shuffled.slice(0, count);
|
|
14
|
+
}
|
|
15
|
+
// ─── Nivel 1: introductorios (tautologías clásicas básicas) ───
|
|
16
|
+
const T_L1_VALIDITY = [
|
|
17
|
+
{
|
|
18
|
+
id: 'l1-identity',
|
|
19
|
+
level: 1,
|
|
20
|
+
kind: 'validity',
|
|
21
|
+
profiles: ['classical.propositional'],
|
|
22
|
+
minVars: 1,
|
|
23
|
+
build: ({ vars }) => {
|
|
24
|
+
const p = vars[0] ?? 'P';
|
|
25
|
+
return {
|
|
26
|
+
formula: `(${p} -> ${p})`,
|
|
27
|
+
canonicalFormula: `(${p} -> ${p})`,
|
|
28
|
+
expectedStatus: 'valid',
|
|
29
|
+
prompt: `¿La fórmula \`${p} -> ${p}\` es válida (tautología) en lógica clásica?`,
|
|
30
|
+
hints: [
|
|
31
|
+
'Una fórmula es válida si es verdadera en toda interpretación.',
|
|
32
|
+
`Considerá los dos casos: ${p}=V y ${p}=F. ¿Qué pasa con ${p} -> ${p} en cada uno?`,
|
|
33
|
+
'Cualquier proposición se implica a sí misma. Esta es la "ley de identidad".',
|
|
34
|
+
],
|
|
35
|
+
explanation: `${p} -> ${p} es la ley de identidad: una de las tautologías más básicas. Por definición material de la implicación, si el antecedente es falso la implicación es verdadera, y si es verdadero el consecuente también lo es.`,
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: 'l1-double-neg-elim',
|
|
41
|
+
level: 1,
|
|
42
|
+
kind: 'validity',
|
|
43
|
+
profiles: ['classical.propositional'],
|
|
44
|
+
minVars: 1,
|
|
45
|
+
build: ({ vars }) => {
|
|
46
|
+
const p = vars[0] ?? 'P';
|
|
47
|
+
return {
|
|
48
|
+
formula: `(~~${p} -> ${p})`,
|
|
49
|
+
canonicalFormula: `(~~${p} -> ${p})`,
|
|
50
|
+
expectedStatus: 'valid',
|
|
51
|
+
prompt: `¿La fórmula \`¬¬${p} -> ${p}\` es válida en lógica clásica?`,
|
|
52
|
+
hints: [
|
|
53
|
+
'Pensá en la doble negación.',
|
|
54
|
+
'En lógica clásica, no-no-P equivale a P.',
|
|
55
|
+
'Esta es la eliminación de la doble negación.',
|
|
56
|
+
],
|
|
57
|
+
explanation: 'Doble negación clásica: ¬¬P es equivalente a P. Tabla de verdad: si P=V entonces ¬¬P=V; si P=F entonces ¬¬P=F. Por tanto la implicación siempre se cumple.',
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'l1-and-elim-left',
|
|
63
|
+
level: 1,
|
|
64
|
+
kind: 'validity',
|
|
65
|
+
profiles: ['classical.propositional'],
|
|
66
|
+
minVars: 2,
|
|
67
|
+
build: ({ vars }) => {
|
|
68
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
69
|
+
return {
|
|
70
|
+
formula: `((${p} & ${q}) -> ${p})`,
|
|
71
|
+
canonicalFormula: `((${p} & ${q}) -> ${p})`,
|
|
72
|
+
expectedStatus: 'valid',
|
|
73
|
+
prompt: `¿La fórmula \`(${p} ∧ ${q}) -> ${p}\` es válida?`,
|
|
74
|
+
hints: [
|
|
75
|
+
'Si una conjunción es verdadera, ¿qué pasa con cada uno de sus términos?',
|
|
76
|
+
`Si ${p} y ${q} ambos son verdaderos, entonces ${p} solo también lo es.`,
|
|
77
|
+
'Esta es la regla de eliminación de la conjunción (∧-E).',
|
|
78
|
+
],
|
|
79
|
+
explanation: 'Eliminación de la conjunción: de A∧B se sigue A. Es uno de los axiomas básicos de la lógica proposicional.',
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: 'l1-or-intro',
|
|
85
|
+
level: 1,
|
|
86
|
+
kind: 'validity',
|
|
87
|
+
profiles: ['classical.propositional'],
|
|
88
|
+
minVars: 2,
|
|
89
|
+
build: ({ vars }) => {
|
|
90
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
91
|
+
return {
|
|
92
|
+
formula: `(${p} -> (${p} | ${q}))`,
|
|
93
|
+
canonicalFormula: `(${p} -> (${p} | ${q}))`,
|
|
94
|
+
expectedStatus: 'valid',
|
|
95
|
+
prompt: `¿La fórmula \`${p} -> (${p} ∨ ${q})\` es válida?`,
|
|
96
|
+
hints: [
|
|
97
|
+
'Si tenés A, ¿podés afirmar A∨B aunque no sepás nada de B?',
|
|
98
|
+
'Una disyunción es verdadera si al menos uno de sus términos lo es.',
|
|
99
|
+
'Esta es la introducción de la disyunción (∨-I).',
|
|
100
|
+
],
|
|
101
|
+
explanation: 'Introducción de la disyunción: de A se sigue A∨B. Si A es verdadero, agregar disyuntivamente cualquier cosa preserva la verdad.',
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: 'l1-lem-classical',
|
|
107
|
+
level: 1,
|
|
108
|
+
kind: 'validity',
|
|
109
|
+
profiles: ['classical.propositional'],
|
|
110
|
+
minVars: 1,
|
|
111
|
+
build: ({ vars }) => {
|
|
112
|
+
const p = vars[0] ?? 'P';
|
|
113
|
+
return {
|
|
114
|
+
formula: `(${p} | ~${p})`,
|
|
115
|
+
canonicalFormula: `(${p} | ~${p})`,
|
|
116
|
+
expectedStatus: 'valid',
|
|
117
|
+
prompt: `¿La fórmula \`${p} ∨ ¬${p}\` es válida en lógica clásica?`,
|
|
118
|
+
hints: [
|
|
119
|
+
'En lógica clásica, ¿qué pasa con toda proposición y su negación?',
|
|
120
|
+
'Esto se conoce como "tercio excluso" o "tertium non datur".',
|
|
121
|
+
'Toda proposición o su negación tiene que ser verdadera. No hay punto medio.',
|
|
122
|
+
],
|
|
123
|
+
explanation: 'Principio del tercio excluso (LEM): A ∨ ¬A. Es válido en lógica clásica pero NO en lógica intuicionista. Es uno de los principios que distingue ambas lógicas.',
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
// ─── Nivel 1: satisfacibilidad básica ───
|
|
129
|
+
const T_L1_SAT = [
|
|
130
|
+
{
|
|
131
|
+
id: 'l1-sat-atom',
|
|
132
|
+
level: 1,
|
|
133
|
+
kind: 'satisfiability',
|
|
134
|
+
profiles: ['classical.propositional'],
|
|
135
|
+
minVars: 1,
|
|
136
|
+
build: ({ vars }) => {
|
|
137
|
+
const p = vars[0] ?? 'P';
|
|
138
|
+
return {
|
|
139
|
+
formula: `${p}`,
|
|
140
|
+
canonicalFormula: `${p}`,
|
|
141
|
+
expectedStatus: 'satisfiable',
|
|
142
|
+
prompt: `¿La fórmula \`${p}\` es satisfacible?`,
|
|
143
|
+
hints: [
|
|
144
|
+
'Una fórmula es satisfacible si existe alguna asignación que la haga verdadera.',
|
|
145
|
+
`¿Qué pasa si ${p}=V?`,
|
|
146
|
+
`Sí: cuando ${p}=V la fórmula vale V. Es satisfacible.`,
|
|
147
|
+
],
|
|
148
|
+
explanation: `Un átomo solo es satisfacible: basta con asignar ${p}=V.`,
|
|
149
|
+
};
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: 'l1-unsat-contradiction',
|
|
154
|
+
level: 1,
|
|
155
|
+
kind: 'satisfiability',
|
|
156
|
+
profiles: ['classical.propositional'],
|
|
157
|
+
minVars: 1,
|
|
158
|
+
build: ({ vars }) => {
|
|
159
|
+
const p = vars[0] ?? 'P';
|
|
160
|
+
return {
|
|
161
|
+
formula: `(${p} & ~${p})`,
|
|
162
|
+
canonicalFormula: `(${p} & ~${p})`,
|
|
163
|
+
expectedStatus: 'unsatisfiable',
|
|
164
|
+
prompt: `¿La fórmula \`${p} ∧ ¬${p}\` es satisfacible?`,
|
|
165
|
+
hints: [
|
|
166
|
+
'¿Puede ser verdadero algo y a la vez su negación?',
|
|
167
|
+
'Principio de no contradicción.',
|
|
168
|
+
'No: esta fórmula es una contradicción, no admite asignación que la haga verdadera.',
|
|
169
|
+
],
|
|
170
|
+
explanation: 'Una conjunción de algo con su negación es la contradicción clásica. Es insatisfacible (no hay valuación que la haga verdadera).',
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
// ─── Nivel 2: básico (combina dos pasos) ───
|
|
176
|
+
const T_L2 = [
|
|
177
|
+
{
|
|
178
|
+
id: 'l2-modus-ponens',
|
|
179
|
+
level: 2,
|
|
180
|
+
kind: 'derive',
|
|
181
|
+
profiles: ['classical.propositional'],
|
|
182
|
+
minVars: 2,
|
|
183
|
+
build: ({ vars }) => {
|
|
184
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
185
|
+
return {
|
|
186
|
+
premises: [`(${p} -> ${q})`, `${p}`],
|
|
187
|
+
goal: `${q}`,
|
|
188
|
+
canonicalFormula: `${q}`,
|
|
189
|
+
expectedStatus: 'provable',
|
|
190
|
+
prompt: `Derivá \`${q}\` a partir de las premisas: \`${p} -> ${q}\` y \`${p}\`.`,
|
|
191
|
+
hints: [
|
|
192
|
+
'Conocés una implicación y su antecedente.',
|
|
193
|
+
`Si tenés "si ${p} entonces ${q}" y sabés ${p}, ¿qué podés concluir?`,
|
|
194
|
+
'Modus ponens: de A→B y A se sigue B.',
|
|
195
|
+
],
|
|
196
|
+
explanation: 'Modus ponens es la regla de inferencia fundamental: si A→B y A son verdaderos, entonces B también.',
|
|
197
|
+
};
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: 'l2-modus-tollens',
|
|
202
|
+
level: 2,
|
|
203
|
+
kind: 'derive',
|
|
204
|
+
profiles: ['classical.propositional'],
|
|
205
|
+
minVars: 2,
|
|
206
|
+
build: ({ vars }) => {
|
|
207
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
208
|
+
return {
|
|
209
|
+
premises: [`(${p} -> ${q})`, `~${q}`],
|
|
210
|
+
goal: `~${p}`,
|
|
211
|
+
canonicalFormula: `~${p}`,
|
|
212
|
+
expectedStatus: 'provable',
|
|
213
|
+
prompt: `Derivá \`¬${p}\` a partir de: \`${p} -> ${q}\` y \`¬${q}\`.`,
|
|
214
|
+
hints: [
|
|
215
|
+
'Si la implicación es verdadera pero el consecuente es falso, ¿qué pasa con el antecedente?',
|
|
216
|
+
`Si ${p} fuera verdadero, ${q} debería serlo. Pero ${q} es falso.`,
|
|
217
|
+
'Modus tollens: de A→B y ¬B se sigue ¬A.',
|
|
218
|
+
],
|
|
219
|
+
explanation: 'Modus tollens: cuando la implicación se cumple y el consecuente es falso, el antecedente tiene que ser falso también.',
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
id: 'l2-hypothetical-syllogism',
|
|
225
|
+
level: 2,
|
|
226
|
+
kind: 'derive',
|
|
227
|
+
profiles: ['classical.propositional'],
|
|
228
|
+
minVars: 3,
|
|
229
|
+
build: ({ vars }) => {
|
|
230
|
+
const [p, q, r] = [vars[0] ?? 'P', vars[1] ?? 'Q', vars[2] ?? 'R'];
|
|
231
|
+
return {
|
|
232
|
+
premises: [`(${p} -> ${q})`, `(${q} -> ${r})`],
|
|
233
|
+
goal: `(${p} -> ${r})`,
|
|
234
|
+
canonicalFormula: `(${p} -> ${r})`,
|
|
235
|
+
expectedStatus: 'provable',
|
|
236
|
+
prompt: `Derivá \`${p} -> ${r}\` a partir de \`${p} -> ${q}\` y \`${q} -> ${r}\`.`,
|
|
237
|
+
hints: [
|
|
238
|
+
'La implicación es transitiva.',
|
|
239
|
+
`Si ${p} lleva a ${q} y ${q} lleva a ${r}, ¿qué relación hay entre ${p} y ${r}?`,
|
|
240
|
+
'Silogismo hipotético: de A→B y B→C se sigue A→C.',
|
|
241
|
+
],
|
|
242
|
+
explanation: 'Silogismo hipotético encadena dos implicaciones por transitividad de la implicación.',
|
|
243
|
+
};
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
id: 'l2-disjunctive-syllogism',
|
|
248
|
+
level: 2,
|
|
249
|
+
kind: 'derive',
|
|
250
|
+
profiles: ['classical.propositional'],
|
|
251
|
+
minVars: 2,
|
|
252
|
+
build: ({ vars }) => {
|
|
253
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
254
|
+
return {
|
|
255
|
+
premises: [`(${p} | ${q})`, `~${p}`],
|
|
256
|
+
goal: `${q}`,
|
|
257
|
+
canonicalFormula: `${q}`,
|
|
258
|
+
expectedStatus: 'provable',
|
|
259
|
+
prompt: `Derivá \`${q}\` a partir de \`${p} ∨ ${q}\` y \`¬${p}\`.`,
|
|
260
|
+
hints: [
|
|
261
|
+
'Sabés que una de dos opciones es verdadera y que la primera es falsa.',
|
|
262
|
+
`Si ${p} ∨ ${q} es verdadero y ${p} es falso, ¿qué tiene que ser ${q}?`,
|
|
263
|
+
'Silogismo disyuntivo: de A∨B y ¬A se sigue B.',
|
|
264
|
+
],
|
|
265
|
+
explanation: 'El silogismo disyuntivo elimina una alternativa de la disyunción.',
|
|
266
|
+
};
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
id: 'l2-invalid-affirm-consequent',
|
|
271
|
+
level: 2,
|
|
272
|
+
kind: 'validity',
|
|
273
|
+
profiles: ['classical.propositional'],
|
|
274
|
+
minVars: 2,
|
|
275
|
+
build: ({ vars }) => {
|
|
276
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
277
|
+
return {
|
|
278
|
+
formula: `(((${p} -> ${q}) & ${q}) -> ${p})`,
|
|
279
|
+
canonicalFormula: `(((${p} -> ${q}) & ${q}) -> ${p})`,
|
|
280
|
+
expectedStatus: 'invalid',
|
|
281
|
+
prompt: `¿La fórmula \`((${p} -> ${q}) ∧ ${q}) -> ${p}\` es válida?`,
|
|
282
|
+
hints: [
|
|
283
|
+
'Cuidado: ¿qué pasa si la implicación se cumple por vacuidad?',
|
|
284
|
+
`Considerá ${p}=F, ${q}=V. ¿La implicación se cumple? ¿Y el consecuente?`,
|
|
285
|
+
'Esta es la falacia de afirmación del consecuente: A→B y B no implica A.',
|
|
286
|
+
],
|
|
287
|
+
explanation: 'Falacia de afirmación del consecuente. Contramodelo: P=F, Q=V — entonces la premisa es V pero la conclusión es F.',
|
|
288
|
+
countermodelHint: { [p]: false, [q]: true },
|
|
289
|
+
};
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
];
|
|
293
|
+
// ─── Nivel 2: contramodelos básicos ───
|
|
294
|
+
const T_L2_COUNTERMODEL = [
|
|
295
|
+
{
|
|
296
|
+
id: 'l2-cm-pq',
|
|
297
|
+
level: 2,
|
|
298
|
+
kind: 'countermodel',
|
|
299
|
+
profiles: ['classical.propositional'],
|
|
300
|
+
minVars: 2,
|
|
301
|
+
build: ({ vars }) => {
|
|
302
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
303
|
+
return {
|
|
304
|
+
formula: `(${p} -> ${q})`,
|
|
305
|
+
canonicalFormula: `(${p} -> ${q})`,
|
|
306
|
+
expectedStatus: 'invalid',
|
|
307
|
+
prompt: `Encontrá un contramodelo para la fórmula \`${p} -> ${q}\`. Es decir, una asignación de valores a ${p} y ${q} que la haga falsa. Responde con formato \`${p}=V, ${q}=F\` o equivalente.`,
|
|
308
|
+
hints: [
|
|
309
|
+
'Una implicación es falsa solo en un caso. ¿Cuál?',
|
|
310
|
+
'La implicación A→B es falsa si y solo si A es verdadero y B es falso.',
|
|
311
|
+
`${p}=V, ${q}=F hace que la implicación sea falsa.`,
|
|
312
|
+
],
|
|
313
|
+
explanation: `La implicación ${p}→${q} solo es falsa cuando ${p}=V y ${q}=F. Esa es la única valuación contramodelo.`,
|
|
314
|
+
countermodelHint: { [p]: true, [q]: false },
|
|
315
|
+
};
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
];
|
|
319
|
+
// ─── Nivel 3: intermedio (LEM en intuicionista, De Morgan, etc.) ───
|
|
320
|
+
const T_L3 = [
|
|
321
|
+
{
|
|
322
|
+
id: 'l3-intuit-lem',
|
|
323
|
+
level: 3,
|
|
324
|
+
kind: 'validity',
|
|
325
|
+
profiles: ['intuitionistic.propositional'],
|
|
326
|
+
minVars: 1,
|
|
327
|
+
build: ({ vars }) => {
|
|
328
|
+
const p = vars[0] ?? 'P';
|
|
329
|
+
return {
|
|
330
|
+
formula: `(${p} | ~${p})`,
|
|
331
|
+
canonicalFormula: `(${p} | ~${p})`,
|
|
332
|
+
expectedStatus: 'invalid',
|
|
333
|
+
prompt: `¿La fórmula \`${p} ∨ ¬${p}\` es válida en lógica intuicionista?`,
|
|
334
|
+
hints: [
|
|
335
|
+
'En lógica intuicionista, una disyunción A∨B exige una prueba de A o una prueba de B.',
|
|
336
|
+
'No tenemos prueba constructiva de "P o no-P" para una P arbitraria.',
|
|
337
|
+
'El tercio excluso NO es válido intuicionistamente, aunque sí en lógica clásica.',
|
|
338
|
+
],
|
|
339
|
+
explanation: 'El principio del tercio excluso (LEM) no es válido en lógica intuicionista porque exige una decisión efectiva sobre toda proposición, lo cual no siempre puede construirse.',
|
|
340
|
+
};
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
id: 'l3-intuit-dne',
|
|
345
|
+
level: 3,
|
|
346
|
+
kind: 'validity',
|
|
347
|
+
profiles: ['intuitionistic.propositional'],
|
|
348
|
+
minVars: 1,
|
|
349
|
+
build: ({ vars }) => {
|
|
350
|
+
const p = vars[0] ?? 'P';
|
|
351
|
+
return {
|
|
352
|
+
formula: `(~~${p} -> ${p})`,
|
|
353
|
+
canonicalFormula: `(~~${p} -> ${p})`,
|
|
354
|
+
expectedStatus: 'invalid',
|
|
355
|
+
prompt: `¿La fórmula \`¬¬${p} -> ${p}\` (eliminación de doble negación) es válida en lógica intuicionista?`,
|
|
356
|
+
hints: [
|
|
357
|
+
'Comparalo con lógica clásica: ¿allí es válida?',
|
|
358
|
+
'En intuicionista, ¬¬P significa "P no es refutable", no "P es verdadero".',
|
|
359
|
+
'La eliminación de doble negación NO es válida intuicionistamente.',
|
|
360
|
+
],
|
|
361
|
+
explanation: 'Intuicionistamente, ¬¬P → P no es válido en general. ¬¬P solo dice que P no es refutable, no que tengamos una prueba de P.',
|
|
362
|
+
};
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
id: 'l3-de-morgan-1',
|
|
367
|
+
level: 3,
|
|
368
|
+
kind: 'validity',
|
|
369
|
+
profiles: ['classical.propositional'],
|
|
370
|
+
minVars: 2,
|
|
371
|
+
build: ({ vars }) => {
|
|
372
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
373
|
+
return {
|
|
374
|
+
formula: `(~(${p} & ${q}) <-> (~${p} | ~${q}))`,
|
|
375
|
+
canonicalFormula: `(~(${p} & ${q}) <-> (~${p} | ~${q}))`,
|
|
376
|
+
expectedStatus: 'valid',
|
|
377
|
+
prompt: `¿La fórmula \`¬(${p} ∧ ${q}) <-> (¬${p} ∨ ¬${q})\` es válida en lógica clásica?`,
|
|
378
|
+
hints: [
|
|
379
|
+
'Esta es una de las leyes de De Morgan.',
|
|
380
|
+
'Negar una conjunción equivale a la disyunción de las negaciones.',
|
|
381
|
+
'Las leyes de De Morgan son tautologías clásicas.',
|
|
382
|
+
],
|
|
383
|
+
explanation: 'Ley de De Morgan: ¬(A∧B) ↔ (¬A∨¬B). Vale clásicamente; la dirección izq→der requiere LEM en intuicionista.',
|
|
384
|
+
};
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
id: 'l3-contraposition',
|
|
389
|
+
level: 3,
|
|
390
|
+
kind: 'derive',
|
|
391
|
+
profiles: ['classical.propositional'],
|
|
392
|
+
minVars: 2,
|
|
393
|
+
build: ({ vars }) => {
|
|
394
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
395
|
+
return {
|
|
396
|
+
premises: [`(${p} -> ${q})`],
|
|
397
|
+
goal: `(~${q} -> ~${p})`,
|
|
398
|
+
canonicalFormula: `(~${q} -> ~${p})`,
|
|
399
|
+
expectedStatus: 'provable',
|
|
400
|
+
prompt: `Derivá \`¬${q} -> ¬${p}\` a partir de \`${p} -> ${q}\`.`,
|
|
401
|
+
hints: [
|
|
402
|
+
'Esta es la contraposición de una implicación.',
|
|
403
|
+
'Si A→B, entonces ¬B→¬A.',
|
|
404
|
+
'Es derivable por reductio ad absurdum o por equivalencia material.',
|
|
405
|
+
],
|
|
406
|
+
explanation: 'La contraposición es lógicamente equivalente a la implicación original en lógica clásica.',
|
|
407
|
+
};
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
];
|
|
411
|
+
// ─── Nivel 4: avanzado (cadenas, derivaciones largas) ───
|
|
412
|
+
const T_L4 = [
|
|
413
|
+
{
|
|
414
|
+
id: 'l4-three-chain',
|
|
415
|
+
level: 4,
|
|
416
|
+
kind: 'derive',
|
|
417
|
+
profiles: ['classical.propositional'],
|
|
418
|
+
minVars: 4,
|
|
419
|
+
build: ({ vars }) => {
|
|
420
|
+
const [p, q, r, s] = [vars[0] ?? 'P', vars[1] ?? 'Q', vars[2] ?? 'R', vars[3] ?? 'S'];
|
|
421
|
+
return {
|
|
422
|
+
premises: [`(${p} -> ${q})`, `(${q} -> ${r})`, `(${r} -> ${s})`, `${p}`],
|
|
423
|
+
goal: `${s}`,
|
|
424
|
+
canonicalFormula: `${s}`,
|
|
425
|
+
expectedStatus: 'provable',
|
|
426
|
+
prompt: `Derivá \`${s}\` a partir de \`${p} -> ${q}\`, \`${q} -> ${r}\`, \`${r} -> ${s}\` y \`${p}\`.`,
|
|
427
|
+
hints: [
|
|
428
|
+
'Aplicá modus ponens repetidas veces.',
|
|
429
|
+
`Desde ${p} y ${p}→${q} obtenés ${q}. Continuá.`,
|
|
430
|
+
`Cadena: ${p} → ${q} → ${r} → ${s}.`,
|
|
431
|
+
],
|
|
432
|
+
explanation: 'Cadena de modus ponens: tres implicaciones encadenadas más el antecedente inicial dan el consecuente final.',
|
|
433
|
+
};
|
|
434
|
+
},
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
id: 'l4-pierce',
|
|
438
|
+
level: 4,
|
|
439
|
+
kind: 'validity',
|
|
440
|
+
profiles: ['classical.propositional'],
|
|
441
|
+
minVars: 2,
|
|
442
|
+
build: ({ vars }) => {
|
|
443
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
444
|
+
return {
|
|
445
|
+
formula: `(((${p} -> ${q}) -> ${p}) -> ${p})`,
|
|
446
|
+
canonicalFormula: `(((${p} -> ${q}) -> ${p}) -> ${p})`,
|
|
447
|
+
expectedStatus: 'valid',
|
|
448
|
+
prompt: `¿La fórmula de Peirce \`((${p} -> ${q}) -> ${p}) -> ${p}\` es válida en lógica clásica?`,
|
|
449
|
+
hints: [
|
|
450
|
+
'La fórmula de Peirce es una tautología clásica, pero no contiene negación explícita.',
|
|
451
|
+
'Curiosamente, equivale al tercio excluso en presencia de las otras reglas.',
|
|
452
|
+
'En lógica intuicionista NO es válida, en clásica SÍ.',
|
|
453
|
+
],
|
|
454
|
+
explanation: 'La fórmula (ley) de Peirce es la única tautología clásica sin negación explícita que separa la lógica clásica de la intuicionista.',
|
|
455
|
+
};
|
|
456
|
+
},
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
id: 'l4-pierce-intuit',
|
|
460
|
+
level: 4,
|
|
461
|
+
kind: 'validity',
|
|
462
|
+
profiles: ['intuitionistic.propositional'],
|
|
463
|
+
minVars: 2,
|
|
464
|
+
build: ({ vars }) => {
|
|
465
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
466
|
+
return {
|
|
467
|
+
formula: `(((${p} -> ${q}) -> ${p}) -> ${p})`,
|
|
468
|
+
canonicalFormula: `(((${p} -> ${q}) -> ${p}) -> ${p})`,
|
|
469
|
+
expectedStatus: 'invalid',
|
|
470
|
+
prompt: `¿La fórmula de Peirce \`((${p} -> ${q}) -> ${p}) -> ${p}\` es válida en lógica intuicionista?`,
|
|
471
|
+
hints: [
|
|
472
|
+
'Pensá si requiere un razonamiento clásico.',
|
|
473
|
+
'La fórmula de Peirce es equivalente al LEM en presencia del resto.',
|
|
474
|
+
'En intuicionista no es válida: requiere doble negación clásica.',
|
|
475
|
+
],
|
|
476
|
+
explanation: 'La fórmula de Peirce no vale intuicionistamente; es uno de los principios que caracterizan la lógica clásica.',
|
|
477
|
+
};
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
id: 'l4-disjunctive-derive',
|
|
482
|
+
level: 4,
|
|
483
|
+
kind: 'derive',
|
|
484
|
+
profiles: ['classical.propositional'],
|
|
485
|
+
minVars: 3,
|
|
486
|
+
build: ({ vars }) => {
|
|
487
|
+
const [p, q, r] = [vars[0] ?? 'P', vars[1] ?? 'Q', vars[2] ?? 'R'];
|
|
488
|
+
return {
|
|
489
|
+
premises: [`(${p} | ${q})`, `(${p} -> ${r})`, `(${q} -> ${r})`],
|
|
490
|
+
goal: `${r}`,
|
|
491
|
+
canonicalFormula: `${r}`,
|
|
492
|
+
expectedStatus: 'provable',
|
|
493
|
+
prompt: `Derivá \`${r}\` a partir de \`${p} ∨ ${q}\`, \`${p} -> ${r}\` y \`${q} -> ${r}\`.`,
|
|
494
|
+
hints: [
|
|
495
|
+
'Tenés una disyunción y dos implicaciones que llegan al mismo lado.',
|
|
496
|
+
'Aplicá eliminación de la disyunción (proof by cases).',
|
|
497
|
+
'En ambos casos llegás a ${r}, por tanto ${r} se sigue.',
|
|
498
|
+
],
|
|
499
|
+
explanation: 'Eliminación de la disyunción (proof by cases): de A∨B, A→C, B→C se sigue C. Esta regla es válida tanto clásica como intuicionistamente.',
|
|
500
|
+
};
|
|
501
|
+
},
|
|
502
|
+
},
|
|
503
|
+
];
|
|
504
|
+
// ─── Nivel 1: traducción de lenguaje natural ───
|
|
505
|
+
const T_L1_TRANSLATE = [
|
|
506
|
+
{
|
|
507
|
+
id: 'l1-translate-and',
|
|
508
|
+
level: 1,
|
|
509
|
+
kind: 'translate',
|
|
510
|
+
profiles: ['classical.propositional'],
|
|
511
|
+
minVars: 2,
|
|
512
|
+
build: ({ vars }) => {
|
|
513
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
514
|
+
return {
|
|
515
|
+
canonicalFormula: `(${p} & ${q})`,
|
|
516
|
+
expectedStatus: 'valid',
|
|
517
|
+
prompt: `Traducí al lenguaje formal: "${p} y ${q}". Usá los símbolos & (o ∧) para conjunción.`,
|
|
518
|
+
hints: [
|
|
519
|
+
'La conjunción se traduce con &.',
|
|
520
|
+
`La estructura es: ${p} & ${q}.`,
|
|
521
|
+
`Respuesta: ${p} & ${q}.`,
|
|
522
|
+
],
|
|
523
|
+
explanation: 'La conjunción "y" se formaliza con el símbolo & (también ∧).',
|
|
524
|
+
};
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
id: 'l1-translate-implies',
|
|
529
|
+
level: 1,
|
|
530
|
+
kind: 'translate',
|
|
531
|
+
profiles: ['classical.propositional'],
|
|
532
|
+
minVars: 2,
|
|
533
|
+
build: ({ vars }) => {
|
|
534
|
+
const [p, q] = [vars[0] ?? 'P', vars[1] ?? 'Q'];
|
|
535
|
+
return {
|
|
536
|
+
canonicalFormula: `(${p} -> ${q})`,
|
|
537
|
+
expectedStatus: 'valid',
|
|
538
|
+
prompt: `Traducí al lenguaje formal: "si ${p} entonces ${q}". Usá -> para la implicación.`,
|
|
539
|
+
hints: [
|
|
540
|
+
'La implicación se traduce con -> (o →).',
|
|
541
|
+
`"si A entonces B" = A -> B.`,
|
|
542
|
+
`Respuesta: ${p} -> ${q}.`,
|
|
543
|
+
],
|
|
544
|
+
explanation: 'La implicación material "si... entonces..." se escribe A -> B.',
|
|
545
|
+
};
|
|
546
|
+
},
|
|
547
|
+
},
|
|
548
|
+
];
|
|
549
|
+
const TEMPLATES = [
|
|
550
|
+
...T_L1_VALIDITY,
|
|
551
|
+
...T_L1_SAT,
|
|
552
|
+
...T_L1_TRANSLATE,
|
|
553
|
+
...T_L2,
|
|
554
|
+
...T_L2_COUNTERMODEL,
|
|
555
|
+
...T_L3,
|
|
556
|
+
...T_L4,
|
|
557
|
+
];
|
|
558
|
+
function listTemplates() {
|
|
559
|
+
return TEMPLATES.slice();
|
|
560
|
+
}
|
|
561
|
+
function findTemplatesFor(level, profile, kind) {
|
|
562
|
+
return TEMPLATES.filter((t) => t.level === level && t.kind === kind && t.profiles.includes(profile));
|
|
563
|
+
}
|
|
564
|
+
function findTemplateById(id) {
|
|
565
|
+
return TEMPLATES.find((t) => t.id === id);
|
|
566
|
+
}
|
|
567
|
+
//# sourceMappingURL=templates.js.map
|