@stevenvo780/st-lang 4.3.0 → 4.5.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/coinduction/index.d.ts +136 -0
- package/dist/coinduction/index.d.ts.map +1 -0
- package/dist/coinduction/index.js +318 -0
- package/dist/coinduction/index.js.map +1 -0
- package/dist/combinators-ski/abstract.d.ts +5 -0
- package/dist/combinators-ski/abstract.d.ts.map +1 -0
- package/dist/combinators-ski/abstract.js +88 -0
- package/dist/combinators-ski/abstract.js.map +1 -0
- package/dist/combinators-ski/index.d.ts +6 -0
- package/dist/combinators-ski/index.d.ts.map +1 -0
- package/dist/combinators-ski/index.js +30 -0
- package/dist/combinators-ski/index.js.map +1 -0
- package/dist/combinators-ski/reduce.d.ts +10 -0
- package/dist/combinators-ski/reduce.d.ts.map +1 -0
- package/dist/combinators-ski/reduce.js +118 -0
- package/dist/combinators-ski/reduce.js.map +1 -0
- package/dist/combinators-ski/types.d.ts +23 -0
- package/dist/combinators-ski/types.d.ts.map +1 -0
- package/dist/combinators-ski/types.js +102 -0
- package/dist/combinators-ski/types.js.map +1 -0
- package/dist/constructive-reals/index.d.ts +132 -0
- package/dist/constructive-reals/index.d.ts.map +1 -0
- package/dist/constructive-reals/index.js +723 -0
- package/dist/constructive-reals/index.js.map +1 -0
- package/dist/game-semantics/convert.d.ts +4 -0
- package/dist/game-semantics/convert.d.ts.map +1 -0
- package/dist/game-semantics/convert.js +28 -0
- package/dist/game-semantics/convert.js.map +1 -0
- package/dist/game-semantics/index.d.ts +6 -0
- package/dist/game-semantics/index.d.ts.map +1 -0
- package/dist/game-semantics/index.js +28 -0
- package/dist/game-semantics/index.js.map +1 -0
- package/dist/game-semantics/strategy.d.ts +34 -0
- package/dist/game-semantics/strategy.d.ts.map +1 -0
- package/dist/game-semantics/strategy.js +336 -0
- package/dist/game-semantics/strategy.js.map +1 -0
- package/dist/game-semantics/types.d.ts +64 -0
- package/dist/game-semantics/types.d.ts.map +1 -0
- package/dist/game-semantics/types.js +78 -0
- package/dist/game-semantics/types.js.map +1 -0
- package/dist/higher-order-unify/index.d.ts +5 -0
- package/dist/higher-order-unify/index.d.ts.map +1 -0
- package/dist/higher-order-unify/index.js +27 -0
- package/dist/higher-order-unify/index.js.map +1 -0
- package/dist/higher-order-unify/normalize.d.ts +14 -0
- package/dist/higher-order-unify/normalize.d.ts.map +1 -0
- package/dist/higher-order-unify/normalize.js +191 -0
- package/dist/higher-order-unify/normalize.js.map +1 -0
- package/dist/higher-order-unify/pattern.d.ts +4 -0
- package/dist/higher-order-unify/pattern.d.ts.map +1 -0
- package/dist/higher-order-unify/pattern.js +70 -0
- package/dist/higher-order-unify/pattern.js.map +1 -0
- package/dist/higher-order-unify/types.d.ts +19 -0
- package/dist/higher-order-unify/types.d.ts.map +1 -0
- package/dist/higher-order-unify/types.js +14 -0
- package/dist/higher-order-unify/types.js.map +1 -0
- package/dist/higher-order-unify/unify.d.ts +5 -0
- package/dist/higher-order-unify/unify.d.ts.map +1 -0
- package/dist/higher-order-unify/unify.js +306 -0
- package/dist/higher-order-unify/unify.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/lambda-calc/church.d.ts.map +1 -1
- package/dist/lambda-calc/church.js.map +1 -1
- package/dist/lambda-calc/combinators.d.ts.map +1 -1
- package/dist/lambda-calc/combinators.js.map +1 -1
- package/dist/lambda-calc/index.d.ts +1 -1
- package/dist/lambda-calc/index.d.ts.map +1 -1
- package/dist/lambda-calc/index.js.map +1 -1
- package/dist/mltt/equality.d.ts +9 -0
- package/dist/mltt/equality.d.ts.map +1 -0
- package/dist/mltt/equality.js +79 -0
- package/dist/mltt/equality.js.map +1 -0
- package/dist/mltt/index.d.ts +8 -0
- package/dist/mltt/index.d.ts.map +1 -0
- package/dist/mltt/index.js +49 -0
- package/dist/mltt/index.js.map +1 -0
- package/dist/mltt/infer.d.ts +17 -0
- package/dist/mltt/infer.d.ts.map +1 -0
- package/dist/mltt/infer.js +269 -0
- package/dist/mltt/infer.js.map +1 -0
- package/dist/mltt/normalize.d.ts +7 -0
- package/dist/mltt/normalize.d.ts.map +1 -0
- package/dist/mltt/normalize.js +131 -0
- package/dist/mltt/normalize.js.map +1 -0
- package/dist/mltt/substitute.d.ts +4 -0
- package/dist/mltt/substitute.d.ts.map +1 -0
- package/dist/mltt/substitute.js +94 -0
- package/dist/mltt/substitute.js.map +1 -0
- package/dist/mltt/types.d.ts +72 -0
- package/dist/mltt/types.d.ts.map +1 -0
- package/dist/mltt/types.js +211 -0
- package/dist/mltt/types.js.map +1 -0
- package/dist/nbe/index.d.ts +3 -0
- package/dist/nbe/index.d.ts.map +1 -0
- package/dist/nbe/index.js +25 -0
- package/dist/nbe/index.js.map +1 -0
- package/dist/nbe/nbe.d.ts +7 -0
- package/dist/nbe/nbe.d.ts.map +1 -0
- package/dist/nbe/nbe.js +118 -0
- package/dist/nbe/nbe.js.map +1 -0
- package/dist/nbe/types.d.ts +54 -0
- package/dist/nbe/types.d.ts.map +1 -0
- package/dist/nbe/types.js +117 -0
- package/dist/nbe/types.js.map +1 -0
- package/dist/profile-bridge/index.d.ts +64 -0
- package/dist/profile-bridge/index.d.ts.map +1 -0
- package/dist/profile-bridge/index.js +328 -0
- package/dist/profile-bridge/index.js.map +1 -0
- package/dist/profiles/many-valued/index.d.ts.map +1 -1
- package/dist/profiles/many-valued/index.js.map +1 -1
- package/dist/profiles/mu-calculus/check.d.ts +15 -0
- package/dist/profiles/mu-calculus/check.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/check.js +172 -0
- package/dist/profiles/mu-calculus/check.js.map +1 -0
- package/dist/profiles/mu-calculus/ctl-translate.d.ts +61 -0
- package/dist/profiles/mu-calculus/ctl-translate.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/ctl-translate.js +181 -0
- package/dist/profiles/mu-calculus/ctl-translate.js.map +1 -0
- package/dist/profiles/mu-calculus/index.d.ts +7 -0
- package/dist/profiles/mu-calculus/index.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/index.js +33 -0
- package/dist/profiles/mu-calculus/index.js.map +1 -0
- package/dist/profiles/mu-calculus/types.d.ts +51 -0
- package/dist/profiles/mu-calculus/types.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/types.js +42 -0
- package/dist/profiles/mu-calculus/types.js.map +1 -0
- package/dist/profiles/mu-calculus/wellformed.d.ts +40 -0
- package/dist/profiles/mu-calculus/wellformed.d.ts.map +1 -0
- package/dist/profiles/mu-calculus/wellformed.js +160 -0
- package/dist/profiles/mu-calculus/wellformed.js.map +1 -0
- package/dist/profiles/sequent-lk/cut-elimination.d.ts +11 -0
- package/dist/profiles/sequent-lk/cut-elimination.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/cut-elimination.js +216 -0
- package/dist/profiles/sequent-lk/cut-elimination.js.map +1 -0
- package/dist/profiles/sequent-lk/index.d.ts +5 -0
- package/dist/profiles/sequent-lk/index.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/index.js +24 -0
- package/dist/profiles/sequent-lk/index.js.map +1 -0
- package/dist/profiles/sequent-lk/prover.d.ts +25 -0
- package/dist/profiles/sequent-lk/prover.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/prover.js +532 -0
- package/dist/profiles/sequent-lk/prover.js.map +1 -0
- package/dist/profiles/sequent-lk/types.d.ts +55 -0
- package/dist/profiles/sequent-lk/types.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/types.js +18 -0
- package/dist/profiles/sequent-lk/types.js.map +1 -0
- package/dist/profiles/sequent-lk/util.d.ts +18 -0
- package/dist/profiles/sequent-lk/util.d.ts.map +1 -0
- package/dist/profiles/sequent-lk/util.js +71 -0
- package/dist/profiles/sequent-lk/util.js.map +1 -0
- package/dist/proof-nets/construct.d.ts +3 -0
- package/dist/proof-nets/construct.d.ts.map +1 -0
- package/dist/proof-nets/construct.js +85 -0
- package/dist/proof-nets/construct.js.map +1 -0
- package/dist/proof-nets/correctness.d.ts +3 -0
- package/dist/proof-nets/correctness.d.ts.map +1 -0
- package/dist/proof-nets/correctness.js +213 -0
- package/dist/proof-nets/correctness.js.map +1 -0
- package/dist/proof-nets/cut-elim.d.ts +9 -0
- package/dist/proof-nets/cut-elim.d.ts.map +1 -0
- package/dist/proof-nets/cut-elim.js +149 -0
- package/dist/proof-nets/cut-elim.js.map +1 -0
- package/dist/proof-nets/index.d.ts +6 -0
- package/dist/proof-nets/index.d.ts.map +1 -0
- package/dist/proof-nets/index.js +33 -0
- package/dist/proof-nets/index.js.map +1 -0
- package/dist/proof-nets/types.d.ts +36 -0
- package/dist/proof-nets/types.d.ts.map +1 -0
- package/dist/proof-nets/types.js +89 -0
- package/dist/proof-nets/types.js.map +1 -0
- package/dist/refinement-types/checker.d.ts +19 -0
- package/dist/refinement-types/checker.d.ts.map +1 -0
- package/dist/refinement-types/checker.js +248 -0
- package/dist/refinement-types/checker.js.map +1 -0
- package/dist/refinement-types/index.d.ts +11 -0
- package/dist/refinement-types/index.d.ts.map +1 -0
- package/dist/refinement-types/index.js +51 -0
- package/dist/refinement-types/index.js.map +1 -0
- package/dist/refinement-types/predicate.d.ts +31 -0
- package/dist/refinement-types/predicate.d.ts.map +1 -0
- package/dist/refinement-types/predicate.js +369 -0
- package/dist/refinement-types/predicate.js.map +1 -0
- package/dist/refinement-types/solver.d.ts +24 -0
- package/dist/refinement-types/solver.d.ts.map +1 -0
- package/dist/refinement-types/solver.js +207 -0
- package/dist/refinement-types/solver.js.map +1 -0
- package/dist/refinement-types/subtype.d.ts +14 -0
- package/dist/refinement-types/subtype.d.ts.map +1 -0
- package/dist/refinement-types/subtype.js +39 -0
- package/dist/refinement-types/subtype.js.map +1 -0
- package/dist/refinement-types/types.d.ts +64 -0
- package/dist/refinement-types/types.d.ts.map +1 -0
- package/dist/refinement-types/types.js +130 -0
- package/dist/refinement-types/types.js.map +1 -0
- package/dist/runtime/anti-unification/anti-unify.d.ts +22 -0
- package/dist/runtime/anti-unification/anti-unify.d.ts.map +1 -0
- package/dist/runtime/anti-unification/anti-unify.js +154 -0
- package/dist/runtime/anti-unification/anti-unify.js.map +1 -0
- package/dist/runtime/anti-unification/index.d.ts +6 -0
- package/dist/runtime/anti-unification/index.d.ts.map +1 -0
- package/dist/runtime/anti-unification/index.js +23 -0
- package/dist/runtime/anti-unification/index.js.map +1 -0
- package/dist/runtime/anti-unification/many.d.ts +49 -0
- package/dist/runtime/anti-unification/many.d.ts.map +1 -0
- package/dist/runtime/anti-unification/many.js +185 -0
- package/dist/runtime/anti-unification/many.js.map +1 -0
- package/dist/runtime/anti-unification/term-utils.d.ts +40 -0
- package/dist/runtime/anti-unification/term-utils.d.ts.map +1 -0
- package/dist/runtime/anti-unification/term-utils.js +173 -0
- package/dist/runtime/anti-unification/term-utils.js.map +1 -0
- package/dist/runtime/anti-unification/types.d.ts +41 -0
- package/dist/runtime/anti-unification/types.d.ts.map +1 -0
- package/dist/runtime/anti-unification/types.js +26 -0
- package/dist/runtime/anti-unification/types.js.map +1 -0
- package/dist/runtime/csp/ac3.d.ts +20 -0
- package/dist/runtime/csp/ac3.d.ts.map +1 -0
- package/dist/runtime/csp/ac3.js +165 -0
- package/dist/runtime/csp/ac3.js.map +1 -0
- package/dist/runtime/csp/backtrack.d.ts +15 -0
- package/dist/runtime/csp/backtrack.d.ts.map +1 -0
- package/dist/runtime/csp/backtrack.js +233 -0
- package/dist/runtime/csp/backtrack.js.map +1 -0
- package/dist/runtime/csp/builtins.d.ts +27 -0
- package/dist/runtime/csp/builtins.d.ts.map +1 -0
- package/dist/runtime/csp/builtins.js +109 -0
- package/dist/runtime/csp/builtins.js.map +1 -0
- package/dist/runtime/csp/index.d.ts +5 -0
- package/dist/runtime/csp/index.d.ts.map +1 -0
- package/dist/runtime/csp/index.js +23 -0
- package/dist/runtime/csp/index.js.map +1 -0
- package/dist/runtime/csp/types.d.ts +54 -0
- package/dist/runtime/csp/types.d.ts.map +1 -0
- package/dist/runtime/csp/types.js +14 -0
- package/dist/runtime/csp/types.js.map +1 -0
- package/dist/runtime/markov-logic/grounding.d.ts +19 -0
- package/dist/runtime/markov-logic/grounding.d.ts.map +1 -0
- package/dist/runtime/markov-logic/grounding.js +252 -0
- package/dist/runtime/markov-logic/grounding.js.map +1 -0
- package/dist/runtime/markov-logic/index.d.ts +6 -0
- package/dist/runtime/markov-logic/index.d.ts.map +1 -0
- package/dist/runtime/markov-logic/index.js +47 -0
- package/dist/runtime/markov-logic/index.js.map +1 -0
- package/dist/runtime/markov-logic/inference.d.ts +77 -0
- package/dist/runtime/markov-logic/inference.d.ts.map +1 -0
- package/dist/runtime/markov-logic/inference.js +382 -0
- package/dist/runtime/markov-logic/inference.js.map +1 -0
- package/dist/runtime/markov-logic/parser.d.ts +25 -0
- package/dist/runtime/markov-logic/parser.d.ts.map +1 -0
- package/dist/runtime/markov-logic/parser.js +264 -0
- package/dist/runtime/markov-logic/parser.js.map +1 -0
- package/dist/runtime/markov-logic/types.d.ts +64 -0
- package/dist/runtime/markov-logic/types.d.ts.map +1 -0
- package/dist/runtime/markov-logic/types.js +17 -0
- package/dist/runtime/markov-logic/types.js.map +1 -0
- package/dist/runtime/pi-calculus/congruence.d.ts +15 -0
- package/dist/runtime/pi-calculus/congruence.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/congruence.js +271 -0
- package/dist/runtime/pi-calculus/congruence.js.map +1 -0
- package/dist/runtime/pi-calculus/index.d.ts +6 -0
- package/dist/runtime/pi-calculus/index.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/index.js +30 -0
- package/dist/runtime/pi-calculus/index.js.map +1 -0
- package/dist/runtime/pi-calculus/names.d.ts +28 -0
- package/dist/runtime/pi-calculus/names.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/names.js +182 -0
- package/dist/runtime/pi-calculus/names.js.map +1 -0
- package/dist/runtime/pi-calculus/reduction.d.ts +25 -0
- package/dist/runtime/pi-calculus/reduction.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/reduction.js +338 -0
- package/dist/runtime/pi-calculus/reduction.js.map +1 -0
- package/dist/runtime/pi-calculus/substitution.d.ts +11 -0
- package/dist/runtime/pi-calculus/substitution.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/substitution.js +109 -0
- package/dist/runtime/pi-calculus/substitution.js.map +1 -0
- package/dist/runtime/pi-calculus/types.d.ts +38 -0
- package/dist/runtime/pi-calculus/types.d.ts.map +1 -0
- package/dist/runtime/pi-calculus/types.js +22 -0
- package/dist/runtime/pi-calculus/types.js.map +1 -0
- package/dist/runtime/planning/astar.d.ts +10 -0
- package/dist/runtime/planning/astar.d.ts.map +1 -0
- package/dist/runtime/planning/astar.js +155 -0
- package/dist/runtime/planning/astar.js.map +1 -0
- package/dist/runtime/planning/bfs.d.ts +17 -0
- package/dist/runtime/planning/bfs.d.ts.map +1 -0
- package/dist/runtime/planning/bfs.js +87 -0
- package/dist/runtime/planning/bfs.js.map +1 -0
- package/dist/runtime/planning/ground.d.ts +55 -0
- package/dist/runtime/planning/ground.d.ts.map +1 -0
- package/dist/runtime/planning/ground.js +154 -0
- package/dist/runtime/planning/ground.js.map +1 -0
- package/dist/runtime/planning/heuristic.d.ts +29 -0
- package/dist/runtime/planning/heuristic.d.ts.map +1 -0
- package/dist/runtime/planning/heuristic.js +172 -0
- package/dist/runtime/planning/heuristic.js.map +1 -0
- package/dist/runtime/planning/index.d.ts +6 -0
- package/dist/runtime/planning/index.d.ts.map +1 -0
- package/dist/runtime/planning/index.js +38 -0
- package/dist/runtime/planning/index.js.map +1 -0
- package/dist/runtime/planning/types.d.ts +100 -0
- package/dist/runtime/planning/types.d.ts.map +1 -0
- package/dist/runtime/planning/types.js +22 -0
- package/dist/runtime/planning/types.js.map +1 -0
- package/dist/runtime/symbolic-diff/differentiate.d.ts.map +1 -1
- package/dist/runtime/symbolic-diff/differentiate.js.map +1 -1
- package/dist/runtime/symbolic-diff/index.d.ts +1 -1
- package/dist/runtime/symbolic-diff/index.d.ts.map +1 -1
- package/dist/runtime/symbolic-diff/index.js.map +1 -1
- package/dist/runtime/symbolic-diff/parse.d.ts.map +1 -1
- package/dist/runtime/symbolic-diff/parse.js +7 -1
- package/dist/runtime/symbolic-diff/parse.js.map +1 -1
- package/dist/runtime/theorem-cache/cache.d.ts +100 -0
- package/dist/runtime/theorem-cache/cache.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/cache.js +213 -0
- package/dist/runtime/theorem-cache/cache.js.map +1 -0
- package/dist/runtime/theorem-cache/canonical.d.ts +59 -0
- package/dist/runtime/theorem-cache/canonical.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/canonical.js +105 -0
- package/dist/runtime/theorem-cache/canonical.js.map +1 -0
- package/dist/runtime/theorem-cache/index.d.ts +6 -0
- package/dist/runtime/theorem-cache/index.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/index.js +16 -0
- package/dist/runtime/theorem-cache/index.js.map +1 -0
- package/dist/runtime/theorem-cache/pattern.d.ts +24 -0
- package/dist/runtime/theorem-cache/pattern.d.ts.map +1 -0
- package/dist/runtime/theorem-cache/pattern.js +80 -0
- package/dist/runtime/theorem-cache/pattern.js.map +1 -0
- package/dist/system-f/index.d.ts +7 -0
- package/dist/system-f/index.d.ts.map +1 -0
- package/dist/system-f/index.js +48 -0
- package/dist/system-f/index.js.map +1 -0
- package/dist/system-f/infer.d.ts +9 -0
- package/dist/system-f/infer.d.ts.map +1 -0
- package/dist/system-f/infer.js +94 -0
- package/dist/system-f/infer.js.map +1 -0
- package/dist/system-f/reduce.d.ts +15 -0
- package/dist/system-f/reduce.d.ts.map +1 -0
- package/dist/system-f/reduce.js +259 -0
- package/dist/system-f/reduce.js.map +1 -0
- package/dist/system-f/types.d.ts +53 -0
- package/dist/system-f/types.d.ts.map +1 -0
- package/dist/system-f/types.js +157 -0
- package/dist/system-f/types.js.map +1 -0
- package/dist/tableau-framework/TableauProver.d.ts +10 -0
- package/dist/tableau-framework/TableauProver.d.ts.map +1 -0
- package/dist/tableau-framework/TableauProver.js +118 -0
- package/dist/tableau-framework/TableauProver.js.map +1 -0
- package/dist/tableau-framework/index.d.ts +5 -0
- package/dist/tableau-framework/index.d.ts.map +1 -0
- package/dist/tableau-framework/index.js +11 -0
- package/dist/tableau-framework/index.js.map +1 -0
- package/dist/tableau-framework/propositional.d.ts +11 -0
- package/dist/tableau-framework/propositional.d.ts.map +1 -0
- package/dist/tableau-framework/propositional.js +143 -0
- package/dist/tableau-framework/propositional.js.map +1 -0
- package/dist/tableau-framework/types.d.ts +32 -0
- package/dist/tableau-framework/types.d.ts.map +1 -0
- package/dist/tableau-framework/types.js +6 -0
- package/dist/tableau-framework/types.js.map +1 -0
- package/dist/tests/anti-unification/anti-unify.test.d.ts +2 -0
- package/dist/tests/anti-unification/anti-unify.test.d.ts.map +1 -0
- package/dist/tests/anti-unification/anti-unify.test.js +219 -0
- package/dist/tests/anti-unification/anti-unify.test.js.map +1 -0
- package/dist/tests/coinduction/coinduction.test.d.ts +2 -0
- package/dist/tests/coinduction/coinduction.test.d.ts.map +1 -0
- package/dist/tests/coinduction/coinduction.test.js +217 -0
- package/dist/tests/coinduction/coinduction.test.js.map +1 -0
- package/dist/tests/combinators-ski/combinators-ski.test.d.ts +2 -0
- package/dist/tests/combinators-ski/combinators-ski.test.d.ts.map +1 -0
- package/dist/tests/combinators-ski/combinators-ski.test.js +211 -0
- package/dist/tests/combinators-ski/combinators-ski.test.js.map +1 -0
- package/dist/tests/constructive-reals/constructive-reals.test.d.ts +2 -0
- package/dist/tests/constructive-reals/constructive-reals.test.d.ts.map +1 -0
- package/dist/tests/constructive-reals/constructive-reals.test.js +357 -0
- package/dist/tests/constructive-reals/constructive-reals.test.js.map +1 -0
- package/dist/tests/coverage-fill-aristotelian.test.js +1 -1
- package/dist/tests/coverage-fill-aristotelian.test.js.map +1 -1
- package/dist/tests/coverage-fill-fallacies.test.js +1 -1
- package/dist/tests/coverage-fill-fallacies.test.js.map +1 -1
- package/dist/tests/coverage-fill-format.test.js +1 -1
- package/dist/tests/coverage-fill-format.test.js.map +1 -1
- package/dist/tests/coverage-fill-intuitionistic.test.js +1 -1
- package/dist/tests/coverage-fill-intuitionistic.test.js.map +1 -1
- package/dist/tests/coverage-fill-probabilistic.test.js +1 -1
- package/dist/tests/coverage-fill-probabilistic.test.js.map +1 -1
- package/dist/tests/csp/csp.test.d.ts +2 -0
- package/dist/tests/csp/csp.test.d.ts.map +1 -0
- package/dist/tests/csp/csp.test.js +292 -0
- package/dist/tests/csp/csp.test.js.map +1 -0
- package/dist/tests/game-semantics/game-semantics.test.d.ts +2 -0
- package/dist/tests/game-semantics/game-semantics.test.d.ts.map +1 -0
- package/dist/tests/game-semantics/game-semantics.test.js +143 -0
- package/dist/tests/game-semantics/game-semantics.test.js.map +1 -0
- package/dist/tests/higher-order-unify/ho-unify.test.d.ts +2 -0
- package/dist/tests/higher-order-unify/ho-unify.test.d.ts.map +1 -0
- package/dist/tests/higher-order-unify/ho-unify.test.js +264 -0
- package/dist/tests/higher-order-unify/ho-unify.test.js.map +1 -0
- package/dist/tests/integration/cross-modules.test.d.ts +8 -0
- package/dist/tests/integration/cross-modules.test.d.ts.map +1 -0
- package/dist/tests/integration/cross-modules.test.js +668 -0
- package/dist/tests/integration/cross-modules.test.js.map +1 -0
- package/dist/tests/lambda-calc/lambda-calc.test.js.map +1 -1
- package/dist/tests/many-valued/many-valued.test.js.map +1 -1
- package/dist/tests/markov-logic/markov-logic.test.d.ts +2 -0
- package/dist/tests/markov-logic/markov-logic.test.d.ts.map +1 -0
- package/dist/tests/markov-logic/markov-logic.test.js +349 -0
- package/dist/tests/markov-logic/markov-logic.test.js.map +1 -0
- package/dist/tests/mltt/mltt.test.d.ts +2 -0
- package/dist/tests/mltt/mltt.test.d.ts.map +1 -0
- package/dist/tests/mltt/mltt.test.js +181 -0
- package/dist/tests/mltt/mltt.test.js.map +1 -0
- package/dist/tests/mu-calculus/check.test.d.ts +2 -0
- package/dist/tests/mu-calculus/check.test.d.ts.map +1 -0
- package/dist/tests/mu-calculus/check.test.js +234 -0
- package/dist/tests/mu-calculus/check.test.js.map +1 -0
- package/dist/tests/nbe/nbe.test.d.ts +2 -0
- package/dist/tests/nbe/nbe.test.d.ts.map +1 -0
- package/dist/tests/nbe/nbe.test.js +121 -0
- package/dist/tests/nbe/nbe.test.js.map +1 -0
- package/dist/tests/pi-calculus/pi-calculus.test.d.ts +2 -0
- package/dist/tests/pi-calculus/pi-calculus.test.d.ts.map +1 -0
- package/dist/tests/pi-calculus/pi-calculus.test.js +273 -0
- package/dist/tests/pi-calculus/pi-calculus.test.js.map +1 -0
- package/dist/tests/planning/planning.test.d.ts +2 -0
- package/dist/tests/planning/planning.test.d.ts.map +1 -0
- package/dist/tests/planning/planning.test.js +397 -0
- package/dist/tests/planning/planning.test.js.map +1 -0
- package/dist/tests/profile-bridge/translations.test.d.ts +2 -0
- package/dist/tests/profile-bridge/translations.test.d.ts.map +1 -0
- package/dist/tests/profile-bridge/translations.test.js +266 -0
- package/dist/tests/profile-bridge/translations.test.js.map +1 -0
- package/dist/tests/proof-nets/proof-nets.test.d.ts +2 -0
- package/dist/tests/proof-nets/proof-nets.test.d.ts.map +1 -0
- package/dist/tests/proof-nets/proof-nets.test.js +263 -0
- package/dist/tests/proof-nets/proof-nets.test.js.map +1 -0
- package/dist/tests/refinement-types/refinement-types.test.d.ts +2 -0
- package/dist/tests/refinement-types/refinement-types.test.d.ts.map +1 -0
- package/dist/tests/refinement-types/refinement-types.test.js +174 -0
- package/dist/tests/refinement-types/refinement-types.test.js.map +1 -0
- package/dist/tests/sequent-lk/prover.test.d.ts +2 -0
- package/dist/tests/sequent-lk/prover.test.d.ts.map +1 -0
- package/dist/tests/sequent-lk/prover.test.js +317 -0
- package/dist/tests/sequent-lk/prover.test.js.map +1 -0
- package/dist/tests/symbolic-diff/symbolic-diff.test.js.map +1 -1
- package/dist/tests/system-f/system-f.test.d.ts +2 -0
- package/dist/tests/system-f/system-f.test.d.ts.map +1 -0
- package/dist/tests/system-f/system-f.test.js +217 -0
- package/dist/tests/system-f/system-f.test.js.map +1 -0
- package/dist/tests/tableau-framework/tableau.test.d.ts +2 -0
- package/dist/tests/tableau-framework/tableau.test.d.ts.map +1 -0
- package/dist/tests/tableau-framework/tableau.test.js +196 -0
- package/dist/tests/tableau-framework/tableau.test.js.map +1 -0
- package/dist/tests/theorem-cache/cache.test.d.ts +2 -0
- package/dist/tests/theorem-cache/cache.test.d.ts.map +1 -0
- package/dist/tests/theorem-cache/cache.test.js +510 -0
- package/dist/tests/theorem-cache/cache.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Refinement types — Subtipado por implicación
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Definición:
|
|
7
|
+
// { x : B | P(x) } <: { y : B | Q(y) }
|
|
8
|
+
// ⟺ B = B' ∧ ∀x. P(x) ⇒ Q[x/y]
|
|
9
|
+
//
|
|
10
|
+
// Para tipos arrow se aplica contravarianza en el parámetro y
|
|
11
|
+
// covarianza en el resultado, como en sistemas refinados estándar.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.isSubtype = isSubtype;
|
|
14
|
+
const solver_1 = require("./solver");
|
|
15
|
+
const predicate_1 = require("./predicate");
|
|
16
|
+
/**
|
|
17
|
+
* isSubtype — devuelve true si T1 <: T2 bajo las suposiciones del contexto.
|
|
18
|
+
*
|
|
19
|
+
* - Para tipos base iguales: chequea P(x) ⇒ Q(x) renombrando el binding.
|
|
20
|
+
* - Para arrows: contravarianza en `from`, covarianza en `to`.
|
|
21
|
+
*/
|
|
22
|
+
function isSubtype(t1, t2, opts = {}) {
|
|
23
|
+
return isSubBase(t1.base, t2.base, opts) && isSubRefinement(t1, t2, opts);
|
|
24
|
+
}
|
|
25
|
+
function isSubBase(b1, b2, opts) {
|
|
26
|
+
if (typeof b1 === 'string' || typeof b2 === 'string')
|
|
27
|
+
return b1 === b2;
|
|
28
|
+
// arrow: contravariant en from, covariant en to
|
|
29
|
+
return isSubtype(b2.from, b1.from, opts) && isSubtype(b1.to, b2.to, opts);
|
|
30
|
+
}
|
|
31
|
+
function isSubRefinement(t1, t2, opts) {
|
|
32
|
+
// Renombramos el binding de t2 al de t1 para chequear P(x) ⇒ Q(x).
|
|
33
|
+
const sharedName = t1.binding;
|
|
34
|
+
const p = t1.predicate.trim() === '' ? 'true' : t1.predicate;
|
|
35
|
+
const q = (0, predicate_1.renameVar)(t2.predicate.trim() === '' ? 'true' : t2.predicate, t2.binding, sharedName);
|
|
36
|
+
const premises = [p, ...(opts.extraAssumptions ?? [])];
|
|
37
|
+
return (0, solver_1.implies)(premises, q, opts);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=subtype.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtype.js","sourceRoot":"","sources":["../../src/refinement-types/subtype.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,+CAA+C;AAC/C,+DAA+D;AAC/D,EAAE;AACF,cAAc;AACd,yCAAyC;AACzC,sCAAsC;AACtC,EAAE;AACF,8DAA8D;AAC9D,mEAAmE;;AAiBnE,8BAEC;AAhBD,qCAAoD;AACpD,2CAAwC;AAOxC;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,EAAW,EAAE,EAAW,EAAE,OAAoB,EAAE;IACxE,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,SAAS,CAAC,EAAY,EAAE,EAAY,EAAE,IAAiB;IAC9D,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvE,gDAAgD;IAChD,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,eAAe,CAAC,EAAW,EAAE,EAAW,EAAE,IAAiB;IAClE,mEAAmE;IACnE,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;IAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;IAC7D,MAAM,CAAC,GAAG,IAAA,qBAAS,EAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,IAAA,gBAAO,EAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type BaseType = 'Int' | 'Bool' | 'String' | {
|
|
2
|
+
kind: 'arrow';
|
|
3
|
+
from: RefType;
|
|
4
|
+
to: RefType;
|
|
5
|
+
};
|
|
6
|
+
export interface RefType {
|
|
7
|
+
base: BaseType;
|
|
8
|
+
/** Nombre de la variable de binding usada por el predicado (e.g. "x"). */
|
|
9
|
+
binding: string;
|
|
10
|
+
/** Predicado P(binding); cadena vacía o "true" significa "sin refinamiento". */
|
|
11
|
+
predicate: string;
|
|
12
|
+
}
|
|
13
|
+
export type RTerm = {
|
|
14
|
+
kind: 'lit';
|
|
15
|
+
value: number | boolean | string;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'var';
|
|
18
|
+
name: string;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'binop';
|
|
21
|
+
op: '+' | '-' | '*' | '<' | '<=' | '>' | '>=' | '==' | '!=' | '&&' | '||';
|
|
22
|
+
left: RTerm;
|
|
23
|
+
right: RTerm;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'if';
|
|
26
|
+
cond: RTerm;
|
|
27
|
+
then: RTerm;
|
|
28
|
+
else: RTerm;
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'lam';
|
|
31
|
+
param: string;
|
|
32
|
+
paramType: RefType;
|
|
33
|
+
body: RTerm;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'app';
|
|
36
|
+
fn: RTerm;
|
|
37
|
+
arg: RTerm;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'let';
|
|
40
|
+
bind: string;
|
|
41
|
+
bindType?: RefType;
|
|
42
|
+
value: RTerm;
|
|
43
|
+
body: RTerm;
|
|
44
|
+
};
|
|
45
|
+
export declare const tInt: (binding?: string, predicate?: string) => RefType;
|
|
46
|
+
export declare const tBool: (binding?: string, predicate?: string) => RefType;
|
|
47
|
+
export declare const tString: (binding?: string, predicate?: string) => RefType;
|
|
48
|
+
export declare const tArrow: (from: RefType, to: RefType, binding?: string, predicate?: string) => RefType;
|
|
49
|
+
export declare const refine: (base: BaseType, binding: string, predicate: string) => RefType;
|
|
50
|
+
export declare const rLit: (value: number | boolean | string) => RTerm;
|
|
51
|
+
export declare const rVar: (name: string) => RTerm;
|
|
52
|
+
export declare const rBinop: (op: Extract<RTerm, {
|
|
53
|
+
kind: "binop";
|
|
54
|
+
}>["op"], left: RTerm, right: RTerm) => RTerm;
|
|
55
|
+
export declare const rIf: (cond: RTerm, t: RTerm, e: RTerm) => RTerm;
|
|
56
|
+
export declare const rLam: (param: string, paramType: RefType, body: RTerm) => RTerm;
|
|
57
|
+
export declare const rApp: (fn: RTerm, arg: RTerm) => RTerm;
|
|
58
|
+
export declare const rLet: (bind: string, value: RTerm, body: RTerm, bindType?: RefType) => RTerm;
|
|
59
|
+
export declare function eqBase(a: BaseType, b: BaseType): boolean;
|
|
60
|
+
export declare function eqRefType(a: RefType, b: RefType): boolean;
|
|
61
|
+
export declare function baseToString(b: BaseType): string;
|
|
62
|
+
export declare function refTypeToString(t: RefType): string;
|
|
63
|
+
export declare function termToString(t: RTerm): string;
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/refinement-types/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Refinement types — AST, tipos refinados y términos
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Un tipo refinado expresa { x : B | P(x) } donde:
|
|
7
|
+
// - B es un tipo base (Int / Bool / String / arrow)
|
|
8
|
+
// - x es la variable de binding
|
|
9
|
+
// - P(x) es un predicado escrito como expresión sintáctica
|
|
10
|
+
// (cadenas de la forma "x > 0 && x < 100").
|
|
11
|
+
//
|
|
12
|
+
// El módulo es minimalista (al estilo Liquid Haskell didáctico):
|
|
13
|
+
// el solver de VCs no es Z3 — es un evaluador/SAT-search sobre
|
|
14
|
+
// enteros y booleanos suficiente para los predicados que se
|
|
15
|
+
// construyen en los tests y para casos pequeños de subtipado.
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.rLet = exports.rApp = exports.rLam = exports.rIf = exports.rBinop = exports.rVar = exports.rLit = exports.refine = exports.tArrow = exports.tString = exports.tBool = exports.tInt = void 0;
|
|
18
|
+
exports.eqBase = eqBase;
|
|
19
|
+
exports.eqRefType = eqRefType;
|
|
20
|
+
exports.baseToString = baseToString;
|
|
21
|
+
exports.refTypeToString = refTypeToString;
|
|
22
|
+
exports.termToString = termToString;
|
|
23
|
+
// ---------- Constructores convenientes ----------
|
|
24
|
+
const tInt = (binding = '_v', predicate = 'true') => ({
|
|
25
|
+
base: 'Int',
|
|
26
|
+
binding,
|
|
27
|
+
predicate,
|
|
28
|
+
});
|
|
29
|
+
exports.tInt = tInt;
|
|
30
|
+
const tBool = (binding = '_v', predicate = 'true') => ({
|
|
31
|
+
base: 'Bool',
|
|
32
|
+
binding,
|
|
33
|
+
predicate,
|
|
34
|
+
});
|
|
35
|
+
exports.tBool = tBool;
|
|
36
|
+
const tString = (binding = '_v', predicate = 'true') => ({
|
|
37
|
+
base: 'String',
|
|
38
|
+
binding,
|
|
39
|
+
predicate,
|
|
40
|
+
});
|
|
41
|
+
exports.tString = tString;
|
|
42
|
+
const tArrow = (from, to, binding = '_v', predicate = 'true') => ({
|
|
43
|
+
base: { kind: 'arrow', from, to },
|
|
44
|
+
binding,
|
|
45
|
+
predicate,
|
|
46
|
+
});
|
|
47
|
+
exports.tArrow = tArrow;
|
|
48
|
+
const refine = (base, binding, predicate) => ({
|
|
49
|
+
base,
|
|
50
|
+
binding,
|
|
51
|
+
predicate,
|
|
52
|
+
});
|
|
53
|
+
exports.refine = refine;
|
|
54
|
+
// ---------- Constructores de términos ----------
|
|
55
|
+
const rLit = (value) => ({ kind: 'lit', value });
|
|
56
|
+
exports.rLit = rLit;
|
|
57
|
+
const rVar = (name) => ({ kind: 'var', name });
|
|
58
|
+
exports.rVar = rVar;
|
|
59
|
+
const rBinop = (op, left, right) => ({ kind: 'binop', op, left, right });
|
|
60
|
+
exports.rBinop = rBinop;
|
|
61
|
+
const rIf = (cond, t, e) => ({
|
|
62
|
+
kind: 'if',
|
|
63
|
+
cond,
|
|
64
|
+
then: t,
|
|
65
|
+
else: e,
|
|
66
|
+
});
|
|
67
|
+
exports.rIf = rIf;
|
|
68
|
+
const rLam = (param, paramType, body) => ({
|
|
69
|
+
kind: 'lam',
|
|
70
|
+
param,
|
|
71
|
+
paramType,
|
|
72
|
+
body,
|
|
73
|
+
});
|
|
74
|
+
exports.rLam = rLam;
|
|
75
|
+
const rApp = (fn, arg) => ({ kind: 'app', fn, arg });
|
|
76
|
+
exports.rApp = rApp;
|
|
77
|
+
const rLet = (bind, value, body, bindType) => ({
|
|
78
|
+
kind: 'let',
|
|
79
|
+
bind,
|
|
80
|
+
bindType,
|
|
81
|
+
value,
|
|
82
|
+
body,
|
|
83
|
+
});
|
|
84
|
+
exports.rLet = rLet;
|
|
85
|
+
// ---------- Igualdad estructural de tipos base ----------
|
|
86
|
+
function eqBase(a, b) {
|
|
87
|
+
if (typeof a === 'string' || typeof b === 'string')
|
|
88
|
+
return a === b;
|
|
89
|
+
// both arrows
|
|
90
|
+
return eqRefType(a.from, b.from) && eqRefType(a.to, b.to);
|
|
91
|
+
}
|
|
92
|
+
function eqRefType(a, b) {
|
|
93
|
+
if (!eqBase(a.base, b.base))
|
|
94
|
+
return false;
|
|
95
|
+
// No exigimos la igualdad textual del predicado a este nivel; el chequeo de
|
|
96
|
+
// subtipado se ocupa de la equivalencia semántica (P ↔ Q).
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
// ---------- Serialización legible ----------
|
|
100
|
+
function baseToString(b) {
|
|
101
|
+
if (typeof b === 'string')
|
|
102
|
+
return b;
|
|
103
|
+
return `(${refTypeToString(b.from)}) -> (${refTypeToString(b.to)})`;
|
|
104
|
+
}
|
|
105
|
+
function refTypeToString(t) {
|
|
106
|
+
const pred = t.predicate.trim();
|
|
107
|
+
if (pred === '' || pred === 'true') {
|
|
108
|
+
return `{ ${t.binding} : ${baseToString(t.base)} }`;
|
|
109
|
+
}
|
|
110
|
+
return `{ ${t.binding} : ${baseToString(t.base)} | ${pred} }`;
|
|
111
|
+
}
|
|
112
|
+
function termToString(t) {
|
|
113
|
+
switch (t.kind) {
|
|
114
|
+
case 'lit':
|
|
115
|
+
return typeof t.value === 'string' ? JSON.stringify(t.value) : String(t.value);
|
|
116
|
+
case 'var':
|
|
117
|
+
return t.name;
|
|
118
|
+
case 'binop':
|
|
119
|
+
return `(${termToString(t.left)} ${t.op} ${termToString(t.right)})`;
|
|
120
|
+
case 'if':
|
|
121
|
+
return `if ${termToString(t.cond)} then ${termToString(t.then)} else ${termToString(t.else)}`;
|
|
122
|
+
case 'lam':
|
|
123
|
+
return `(λ ${t.param} : ${refTypeToString(t.paramType)} . ${termToString(t.body)})`;
|
|
124
|
+
case 'app':
|
|
125
|
+
return `(${termToString(t.fn)} ${termToString(t.arg)})`;
|
|
126
|
+
case 'let':
|
|
127
|
+
return `let ${t.bind}${t.bindType ? ` : ${refTypeToString(t.bindType)}` : ''} = ${termToString(t.value)} in ${termToString(t.body)}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/refinement-types/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AntiUnificationResult, FreshSupply, Term } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Fuente default de variables frescas: _g0, _g1, _g2, …
|
|
4
|
+
*
|
|
5
|
+
* Se devuelve una NUEVA instancia por llamada para evitar estado
|
|
6
|
+
* compartido entre invocaciones de antiUnify.
|
|
7
|
+
*/
|
|
8
|
+
export declare function defaultFreshSupply(prefix?: string): FreshSupply;
|
|
9
|
+
/**
|
|
10
|
+
* Anti-unification de dos términos.
|
|
11
|
+
*
|
|
12
|
+
* Devuelve el lgg (least general generalization) junto con las
|
|
13
|
+
* sustituciones de izquierda y derecha que reconstruyen los
|
|
14
|
+
* términos originales.
|
|
15
|
+
*
|
|
16
|
+
* Complejidad: O(|t1| + |t2|) tiempo si la tabla se implementa con
|
|
17
|
+
* hashing O(1). Usamos `termKey` que serializa, así que es
|
|
18
|
+
* O((|t1| + |t2|)·k) donde k es el tamaño del subtérmino más grande
|
|
19
|
+
* que aparezca en un desacuerdo.
|
|
20
|
+
*/
|
|
21
|
+
export declare function antiUnify(t1: Term, t2: Term, freshSupply?: FreshSupply): AntiUnificationResult;
|
|
22
|
+
//# sourceMappingURL=anti-unify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anti-unify.d.ts","sourceRoot":"","sources":["../../../src/runtime/anti-unification/anti-unify.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAGxE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,MAAa,GAAG,WAAW,CAGrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAc9F"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Anti-Unification — Algoritmo de Plotkin (lgg)
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Algoritmo (Plotkin 1970):
|
|
7
|
+
//
|
|
8
|
+
// au(t1, t2, table):
|
|
9
|
+
// si t1 ≡ t2 estructuralmente:
|
|
10
|
+
// return t1
|
|
11
|
+
// si ambos son func/const con mismo nombre y misma aridad:
|
|
12
|
+
// return func(name, [au(t1.args[i], t2.args[i]) for i])
|
|
13
|
+
// // desacuerdo: introducimos fresh var, reusando si ya existe
|
|
14
|
+
// // una asignada al MISMO par (t1, t2) — esto es clave para que
|
|
15
|
+
// // la generalización sea LEAST (most specific).
|
|
16
|
+
// si table tiene (t1, t2) → v entonces return v
|
|
17
|
+
// v := freshSupply()
|
|
18
|
+
// table[(t1, t2)] := v
|
|
19
|
+
// return v
|
|
20
|
+
//
|
|
21
|
+
// La tabla de correspondencias se mantiene globalmente durante la
|
|
22
|
+
// recursión para que múltiples ocurrencias del mismo desacuerdo
|
|
23
|
+
// reciban la misma fresh var. Sin esta tabla obtendríamos una
|
|
24
|
+
// generalización menos específica (e.g., au(p(a,a), p(b,b)) daría
|
|
25
|
+
// p(X, Y) en vez de p(X, X)).
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.defaultFreshSupply = defaultFreshSupply;
|
|
28
|
+
exports.antiUnify = antiUnify;
|
|
29
|
+
const term_utils_1 = require("./term-utils");
|
|
30
|
+
/**
|
|
31
|
+
* Fuente default de variables frescas: _g0, _g1, _g2, …
|
|
32
|
+
*
|
|
33
|
+
* Se devuelve una NUEVA instancia por llamada para evitar estado
|
|
34
|
+
* compartido entre invocaciones de antiUnify.
|
|
35
|
+
*/
|
|
36
|
+
function defaultFreshSupply(prefix = '_g') {
|
|
37
|
+
let counter = 0;
|
|
38
|
+
return () => `${prefix}${counter++}`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Anti-unification de dos términos.
|
|
42
|
+
*
|
|
43
|
+
* Devuelve el lgg (least general generalization) junto con las
|
|
44
|
+
* sustituciones de izquierda y derecha que reconstruyen los
|
|
45
|
+
* términos originales.
|
|
46
|
+
*
|
|
47
|
+
* Complejidad: O(|t1| + |t2|) tiempo si la tabla se implementa con
|
|
48
|
+
* hashing O(1). Usamos `termKey` que serializa, así que es
|
|
49
|
+
* O((|t1| + |t2|)·k) donde k es el tamaño del subtérmino más grande
|
|
50
|
+
* que aparezca en un desacuerdo.
|
|
51
|
+
*/
|
|
52
|
+
function antiUnify(t1, t2, freshSupply) {
|
|
53
|
+
const supply = freshSupply ?? defaultFreshSupply();
|
|
54
|
+
// Tabla de desacuerdos: clave canónica "t1║t2" → nombre de var fresca.
|
|
55
|
+
const table = new Map();
|
|
56
|
+
// Sustituciones de salida: para cada fresh var, qué término iba en
|
|
57
|
+
// cada lado.
|
|
58
|
+
const substLeft = new Map();
|
|
59
|
+
const substRight = new Map();
|
|
60
|
+
// Orden de introducción de las fresh vars (para `variables`).
|
|
61
|
+
const variables = [];
|
|
62
|
+
const generalization = antiUnifyAux(t1, t2, table, substLeft, substRight, variables, supply);
|
|
63
|
+
return { generalization, substLeft, substRight, variables };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Núcleo recursivo del algoritmo. Se mantiene recursivo (no iterativo)
|
|
67
|
+
* porque la mayoría de términos en la práctica son superficiales y la
|
|
68
|
+
* recursión sigue la estructura del término más pequeño.
|
|
69
|
+
*
|
|
70
|
+
* Si en algún momento aparecen términos patológicamente profundos,
|
|
71
|
+
* habría que reescribirlo con un stack explícito siguiendo el patrón
|
|
72
|
+
* de `mapTerm` en term-rewriting/term-utils.ts.
|
|
73
|
+
*/
|
|
74
|
+
function antiUnifyAux(t1, t2, table, substLeft, substRight, variables, supply) {
|
|
75
|
+
// Caso base: estructuralmente iguales → la generalización es el
|
|
76
|
+
// término mismo, sin nuevas variables.
|
|
77
|
+
if ((0, term_utils_1.termEquals)(t1, t2))
|
|
78
|
+
return t1;
|
|
79
|
+
// Misma "cabeza" (mismo símbolo, misma aridad, mismo kind func/const)
|
|
80
|
+
// → recursamos argumento a argumento.
|
|
81
|
+
if (sameHead(t1, t2)) {
|
|
82
|
+
const args1 = t1.args ?? [];
|
|
83
|
+
const args2 = t2.args ?? [];
|
|
84
|
+
// sameHead garantiza aridad igual.
|
|
85
|
+
const newArgs = new Array(args1.length);
|
|
86
|
+
for (let i = 0; i < args1.length; i++) {
|
|
87
|
+
const a1 = args1[i];
|
|
88
|
+
const a2 = args2[i];
|
|
89
|
+
if (a1 === undefined || a2 === undefined) {
|
|
90
|
+
// Imposible si sameHead pasó, pero el chequeo apacigua a TS
|
|
91
|
+
// bajo noUncheckedIndexedAccess.
|
|
92
|
+
throw new Error('antiUnify: aridad inconsistente tras sameHead check');
|
|
93
|
+
}
|
|
94
|
+
newArgs[i] = antiUnifyAux(a1, a2, table, substLeft, substRight, variables, supply);
|
|
95
|
+
}
|
|
96
|
+
if (t1.kind === 'const') {
|
|
97
|
+
// const con args=[] ya cayó en termEquals; si llegamos aquí con
|
|
98
|
+
// kind=const es porque ambos tienen mismo nombre y 0 args, lo
|
|
99
|
+
// que ya implicaría termEquals=true. Defensa por si llega un
|
|
100
|
+
// const con args>0 mal construido.
|
|
101
|
+
return { kind: 'const', name: t1.name };
|
|
102
|
+
}
|
|
103
|
+
return { kind: 'func', name: t1.name, args: newArgs };
|
|
104
|
+
}
|
|
105
|
+
// Desacuerdo: pares distintos. Reutilizamos la fresh var si ya
|
|
106
|
+
// habíamos visto este par; de lo contrario generamos una nueva.
|
|
107
|
+
const key = pairKey(t1, t2);
|
|
108
|
+
const existing = table.get(key);
|
|
109
|
+
if (existing !== undefined) {
|
|
110
|
+
return { kind: 'var', name: existing };
|
|
111
|
+
}
|
|
112
|
+
const fresh = supply();
|
|
113
|
+
table.set(key, fresh);
|
|
114
|
+
substLeft.set(fresh, t1);
|
|
115
|
+
substRight.set(fresh, t2);
|
|
116
|
+
variables.push(fresh);
|
|
117
|
+
return { kind: 'var', name: fresh };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* ¿t1 y t2 comparten la misma "cabeza" (símbolo + aridad + kind no-var)?
|
|
121
|
+
*
|
|
122
|
+
* Variables NUNCA tienen cabeza común con otra cosa: el caso `var, var`
|
|
123
|
+
* con mismos nombres ya lo absorbe `termEquals` arriba; con nombres
|
|
124
|
+
* distintos es un desacuerdo legítimo. Un `var` contra `func/const`
|
|
125
|
+
* también es desacuerdo (la variable es más general).
|
|
126
|
+
*/
|
|
127
|
+
function sameHead(t1, t2) {
|
|
128
|
+
if (t1.kind === 'var' || t2.kind === 'var')
|
|
129
|
+
return false;
|
|
130
|
+
// Tratamos const como func(name, []) para comparar aridad.
|
|
131
|
+
if (t1.name !== t2.name)
|
|
132
|
+
return false;
|
|
133
|
+
const a1 = t1.args ?? [];
|
|
134
|
+
const a2 = t2.args ?? [];
|
|
135
|
+
if (a1.length !== a2.length)
|
|
136
|
+
return false;
|
|
137
|
+
// Si los kinds difieren (func vs const) pero la aridad es 0 y los
|
|
138
|
+
// nombres coinciden, todavía lo aceptamos como "misma cabeza" para
|
|
139
|
+
// ser tolerantes con clientes que mezclen ambas convenciones.
|
|
140
|
+
// Pero antes de aceptar, exigimos que si difieren los kinds, la
|
|
141
|
+
// aridad sea 0 — un `const` con args no debería existir.
|
|
142
|
+
if (t1.kind !== t2.kind && a1.length > 0)
|
|
143
|
+
return false;
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Clave canónica para un par (t1, t2) usada en la tabla de
|
|
148
|
+
* desacuerdos. Usamos un separador que no puede aparecer en
|
|
149
|
+
* `termKey` para evitar colisiones.
|
|
150
|
+
*/
|
|
151
|
+
function pairKey(t1, t2) {
|
|
152
|
+
return `${(0, term_utils_1.termKey)(t1)}║${(0, term_utils_1.termKey)(t2)}`;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=anti-unify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anti-unify.js","sourceRoot":"","sources":["../../../src/runtime/anti-unification/anti-unify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { Term, AntiUnificationResult, FreshSupply } from './types';
|
|
2
|
+
export { antiUnify, defaultFreshSupply } from './anti-unify';
|
|
3
|
+
export { termEquals, termKey, varsOf, applySubst, termSize, v, f, c } from './term-utils';
|
|
4
|
+
export { antiUnifyMany, antiUnifyManyDetailed, generalizationOrder } from './many';
|
|
5
|
+
export type { AntiUnificationManyResult } from './many';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/anti-unification/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAE1F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAEnF,YAAY,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Anti-Unification — Barrel de exportaciones
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generalizationOrder = exports.antiUnifyManyDetailed = exports.antiUnifyMany = exports.c = exports.f = exports.v = exports.termSize = exports.applySubst = exports.varsOf = exports.termKey = exports.termEquals = exports.defaultFreshSupply = exports.antiUnify = void 0;
|
|
7
|
+
var anti_unify_1 = require("./anti-unify");
|
|
8
|
+
Object.defineProperty(exports, "antiUnify", { enumerable: true, get: function () { return anti_unify_1.antiUnify; } });
|
|
9
|
+
Object.defineProperty(exports, "defaultFreshSupply", { enumerable: true, get: function () { return anti_unify_1.defaultFreshSupply; } });
|
|
10
|
+
var term_utils_1 = require("./term-utils");
|
|
11
|
+
Object.defineProperty(exports, "termEquals", { enumerable: true, get: function () { return term_utils_1.termEquals; } });
|
|
12
|
+
Object.defineProperty(exports, "termKey", { enumerable: true, get: function () { return term_utils_1.termKey; } });
|
|
13
|
+
Object.defineProperty(exports, "varsOf", { enumerable: true, get: function () { return term_utils_1.varsOf; } });
|
|
14
|
+
Object.defineProperty(exports, "applySubst", { enumerable: true, get: function () { return term_utils_1.applySubst; } });
|
|
15
|
+
Object.defineProperty(exports, "termSize", { enumerable: true, get: function () { return term_utils_1.termSize; } });
|
|
16
|
+
Object.defineProperty(exports, "v", { enumerable: true, get: function () { return term_utils_1.v; } });
|
|
17
|
+
Object.defineProperty(exports, "f", { enumerable: true, get: function () { return term_utils_1.f; } });
|
|
18
|
+
Object.defineProperty(exports, "c", { enumerable: true, get: function () { return term_utils_1.c; } });
|
|
19
|
+
var many_1 = require("./many");
|
|
20
|
+
Object.defineProperty(exports, "antiUnifyMany", { enumerable: true, get: function () { return many_1.antiUnifyMany; } });
|
|
21
|
+
Object.defineProperty(exports, "antiUnifyManyDetailed", { enumerable: true, get: function () { return many_1.antiUnifyManyDetailed; } });
|
|
22
|
+
Object.defineProperty(exports, "generalizationOrder", { enumerable: true, get: function () { return many_1.generalizationOrder; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/anti-unification/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;;;AAI/D,2CAA6D;AAApD,uGAAA,SAAS,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAEtC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,wGAAA,UAAU,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,+FAAA,CAAC,OAAA;AAAE,+FAAA,CAAC,OAAA;AAAE,+FAAA,CAAC,OAAA;AAEnE,+BAAmF;AAA1E,qGAAA,aAAa,OAAA;AAAE,6GAAA,qBAAqB,OAAA;AAAE,2GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { AntiUnificationResult, FreshSupply, Term } from './types';
|
|
2
|
+
import { applySubst } from './term-utils';
|
|
3
|
+
/**
|
|
4
|
+
* Variante "detailed" del n-way lgg.
|
|
5
|
+
*
|
|
6
|
+
* Devuelve la generalización y un array `substs` de longitud n tal
|
|
7
|
+
* que substs[i] aplicada al generalization reproduce el término i.
|
|
8
|
+
*/
|
|
9
|
+
export interface AntiUnificationManyResult {
|
|
10
|
+
generalization: Term;
|
|
11
|
+
substs: Map<string, Term>[];
|
|
12
|
+
variables: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Anti-unification n-aria. Reduce con la versión binaria.
|
|
16
|
+
*
|
|
17
|
+
* Para n=0 lanza error (no hay generalización sensata).
|
|
18
|
+
* Para n=1 devuelve el término sin variables nuevas.
|
|
19
|
+
*/
|
|
20
|
+
export declare function antiUnifyMany(terms: Term[], freshSupply?: FreshSupply): AntiUnificationResult;
|
|
21
|
+
/**
|
|
22
|
+
* Versión "detailed" — devuelve las n sustituciones independientes.
|
|
23
|
+
*
|
|
24
|
+
* Esta es la forma más útil para clientes que quieren ver cómo se
|
|
25
|
+
* instancia cada uno de los n términos desde la generalización.
|
|
26
|
+
*/
|
|
27
|
+
export declare function antiUnifyManyDetailed(terms: Term[], freshSupply?: FreshSupply): AntiUnificationManyResult;
|
|
28
|
+
/**
|
|
29
|
+
* Orden de generalidad entre dos términos.
|
|
30
|
+
*
|
|
31
|
+
* Definición: g1 ≤ g2 ⇔ existe sustitución σ con σ(g1) = g2.
|
|
32
|
+
* Es decir, g1 es MÁS GENERAL que g2 (g2 es una instancia de g1).
|
|
33
|
+
*
|
|
34
|
+
* Resultados:
|
|
35
|
+
* - -1 si g1 es ESTRICTAMENTE más general que g2 (g1 < g2 en
|
|
36
|
+
* generalidad inversa — equivalente: σ(g1)=g2 pero no
|
|
37
|
+
* σ'(g2)=g1).
|
|
38
|
+
* - 0 si son equivalentes módulo renombre (cada uno instancia
|
|
39
|
+
* del otro vía sustitución de variables).
|
|
40
|
+
* - +1 si g2 es estrictamente más general que g1.
|
|
41
|
+
* - null si son INCOMPARABLES (no hay σ en ningún sentido).
|
|
42
|
+
*
|
|
43
|
+
* Nota: la convención del usuario en la spec es
|
|
44
|
+
* generalizationOrder(X, f(X)) → -1 (X más general).
|
|
45
|
+
* Esto es coherente: X es más general que f(X), y devolvemos -1.
|
|
46
|
+
*/
|
|
47
|
+
export declare function generalizationOrder(g1: Term, g2: Term): -1 | 0 | 1 | null;
|
|
48
|
+
export { applySubst };
|
|
49
|
+
//# sourceMappingURL=many.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"many.d.ts","sourceRoot":"","sources":["../../../src/runtime/anti-unification/many.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAExE,OAAO,EAAE,UAAU,EAAsB,MAAM,cAAc,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,IAAI,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAyC7F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,CAAC,EAAE,WAAW,GACxB,yBAAyB,CAoB3B;AAyCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAazE;AAID,OAAO,EAAE,UAAU,EAAE,CAAC"}
|