@stevenvo780/st-lang 4.5.1 → 4.6.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/bdd/index.d.ts +4 -0
- package/dist/bdd/index.d.ts.map +1 -0
- package/dist/bdd/index.js +29 -0
- package/dist/bdd/index.js.map +1 -0
- package/dist/bdd/manager.d.ts +122 -0
- package/dist/bdd/manager.d.ts.map +1 -0
- package/dist/bdd/manager.js +524 -0
- package/dist/bdd/manager.js.map +1 -0
- package/dist/bdd/types.d.ts +20 -0
- package/dist/bdd/types.d.ts.map +1 -0
- package/dist/bdd/types.js +28 -0
- package/dist/bdd/types.js.map +1 -0
- package/dist/categorical/fin-set.d.ts +39 -0
- package/dist/categorical/fin-set.d.ts.map +1 -0
- package/dist/categorical/fin-set.js +217 -0
- package/dist/categorical/fin-set.js.map +1 -0
- package/dist/categorical/free.d.ts +23 -0
- package/dist/categorical/free.d.ts.map +1 -0
- package/dist/categorical/free.js +168 -0
- package/dist/categorical/free.js.map +1 -0
- package/dist/categorical/functor.d.ts +40 -0
- package/dist/categorical/functor.d.ts.map +1 -0
- package/dist/categorical/functor.js +139 -0
- package/dist/categorical/functor.js.map +1 -0
- package/dist/categorical/index.d.ts +11 -0
- package/dist/categorical/index.d.ts.map +1 -0
- package/dist/categorical/index.js +33 -0
- package/dist/categorical/index.js.map +1 -0
- package/dist/categorical/limits.d.ts +64 -0
- package/dist/categorical/limits.d.ts.map +1 -0
- package/dist/categorical/limits.js +248 -0
- package/dist/categorical/limits.js.map +1 -0
- package/dist/categorical/monoidal.d.ts +14 -0
- package/dist/categorical/monoidal.d.ts.map +1 -0
- package/dist/categorical/monoidal.js +148 -0
- package/dist/categorical/monoidal.js.map +1 -0
- package/dist/categorical/poset.d.ts +14 -0
- package/dist/categorical/poset.d.ts.map +1 -0
- package/dist/categorical/poset.js +115 -0
- package/dist/categorical/poset.js.map +1 -0
- package/dist/categorical/types.d.ts +111 -0
- package/dist/categorical/types.d.ts.map +1 -0
- package/dist/categorical/types.js +15 -0
- package/dist/categorical/types.js.map +1 -0
- package/dist/csp-hoare/analysis.d.ts +51 -0
- package/dist/csp-hoare/analysis.d.ts.map +1 -0
- package/dist/csp-hoare/analysis.js +317 -0
- package/dist/csp-hoare/analysis.js.map +1 -0
- package/dist/csp-hoare/examples.d.ts +33 -0
- package/dist/csp-hoare/examples.d.ts.map +1 -0
- package/dist/csp-hoare/examples.js +108 -0
- package/dist/csp-hoare/examples.js.map +1 -0
- package/dist/csp-hoare/index.d.ts +6 -0
- package/dist/csp-hoare/index.d.ts.map +1 -0
- package/dist/csp-hoare/index.js +50 -0
- package/dist/csp-hoare/index.js.map +1 -0
- package/dist/csp-hoare/semantics.d.ts +49 -0
- package/dist/csp-hoare/semantics.d.ts.map +1 -0
- package/dist/csp-hoare/semantics.js +494 -0
- package/dist/csp-hoare/semantics.js.map +1 -0
- package/dist/csp-hoare/types.d.ts +60 -0
- package/dist/csp-hoare/types.d.ts.map +1 -0
- package/dist/csp-hoare/types.js +31 -0
- package/dist/csp-hoare/types.js.map +1 -0
- package/dist/game-theory/common-games.d.ts +50 -0
- package/dist/game-theory/common-games.d.ts.map +1 -0
- package/dist/game-theory/common-games.js +112 -0
- package/dist/game-theory/common-games.js.map +1 -0
- package/dist/game-theory/dominance.d.ts +26 -0
- package/dist/game-theory/dominance.d.ts.map +1 -0
- package/dist/game-theory/dominance.js +203 -0
- package/dist/game-theory/dominance.js.map +1 -0
- package/dist/game-theory/index.d.ts +8 -0
- package/dist/game-theory/index.d.ts.map +1 -0
- package/dist/game-theory/index.js +47 -0
- package/dist/game-theory/index.js.map +1 -0
- package/dist/game-theory/lemke-howson.d.ts +3 -0
- package/dist/game-theory/lemke-howson.d.ts.map +1 -0
- package/dist/game-theory/lemke-howson.js +269 -0
- package/dist/game-theory/lemke-howson.js.map +1 -0
- package/dist/game-theory/linalg.d.ts +7 -0
- package/dist/game-theory/linalg.d.ts.map +1 -0
- package/dist/game-theory/linalg.js +69 -0
- package/dist/game-theory/linalg.js.map +1 -0
- package/dist/game-theory/pure-nash.d.ts +3 -0
- package/dist/game-theory/pure-nash.d.ts.map +1 -0
- package/dist/game-theory/pure-nash.js +86 -0
- package/dist/game-theory/pure-nash.js.map +1 -0
- package/dist/game-theory/support-enumeration.d.ts +3 -0
- package/dist/game-theory/support-enumeration.d.ts.map +1 -0
- package/dist/game-theory/support-enumeration.js +214 -0
- package/dist/game-theory/support-enumeration.js.map +1 -0
- package/dist/game-theory/types.d.ts +57 -0
- package/dist/game-theory/types.d.ts.map +1 -0
- package/dist/game-theory/types.js +191 -0
- package/dist/game-theory/types.js.map +1 -0
- package/dist/hindley-milner/index.d.ts +7 -0
- package/dist/hindley-milner/index.d.ts.map +1 -0
- package/dist/hindley-milner/index.js +60 -0
- package/dist/hindley-milner/index.js.map +1 -0
- package/dist/hindley-milner/infer.d.ts +26 -0
- package/dist/hindley-milner/infer.d.ts.map +1 -0
- package/dist/hindley-milner/infer.js +278 -0
- package/dist/hindley-milner/infer.js.map +1 -0
- package/dist/hindley-milner/substitution.d.ts +21 -0
- package/dist/hindley-milner/substitution.d.ts.map +1 -0
- package/dist/hindley-milner/substitution.js +215 -0
- package/dist/hindley-milner/substitution.js.map +1 -0
- package/dist/hindley-milner/types.d.ts +84 -0
- package/dist/hindley-milner/types.d.ts.map +1 -0
- package/dist/hindley-milner/types.js +166 -0
- package/dist/hindley-milner/types.js.map +1 -0
- package/dist/hott/equality.d.ts +4 -0
- package/dist/hott/equality.d.ts.map +1 -0
- package/dist/hott/equality.js +108 -0
- package/dist/hott/equality.js.map +1 -0
- package/dist/hott/index.d.ts +13 -0
- package/dist/hott/index.d.ts.map +1 -0
- package/dist/hott/index.js +77 -0
- package/dist/hott/index.js.map +1 -0
- package/dist/hott/infer.d.ts +11 -0
- package/dist/hott/infer.d.ts.map +1 -0
- package/dist/hott/infer.js +465 -0
- package/dist/hott/infer.js.map +1 -0
- package/dist/hott/normalize.d.ts +5 -0
- package/dist/hott/normalize.d.ts.map +1 -0
- package/dist/hott/normalize.js +240 -0
- package/dist/hott/normalize.js.map +1 -0
- package/dist/hott/path-algebra.d.ts +25 -0
- package/dist/hott/path-algebra.d.ts.map +1 -0
- package/dist/hott/path-algebra.js +67 -0
- package/dist/hott/path-algebra.js.map +1 -0
- package/dist/hott/substitute.d.ts +3 -0
- package/dist/hott/substitute.d.ts.map +1 -0
- package/dist/hott/substitute.js +131 -0
- package/dist/hott/substitute.js.map +1 -0
- package/dist/hott/types.d.ts +126 -0
- package/dist/hott/types.d.ts.map +1 -0
- package/dist/hott/types.js +346 -0
- package/dist/hott/types.js.map +1 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -3
- package/dist/index.js.map +1 -1
- package/dist/information-theory/index.d.ts +29 -0
- package/dist/information-theory/index.d.ts.map +1 -0
- package/dist/information-theory/index.js +323 -0
- package/dist/information-theory/index.js.map +1 -0
- package/dist/lemma-synthesis/index.d.ts +124 -0
- package/dist/lemma-synthesis/index.d.ts.map +1 -0
- package/dist/lemma-synthesis/index.js +640 -0
- package/dist/lemma-synthesis/index.js.map +1 -0
- package/dist/namespaces/logic.d.ts +42 -0
- package/dist/namespaces/logic.d.ts.map +1 -0
- package/dist/namespaces/logic.js +112 -0
- package/dist/namespaces/logic.js.map +1 -0
- package/dist/namespaces/proof-systems.d.ts +18 -0
- package/dist/namespaces/proof-systems.d.ts.map +1 -0
- package/dist/namespaces/proof-systems.js +59 -0
- package/dist/namespaces/proof-systems.js.map +1 -0
- package/dist/namespaces/reasoning.d.ts +26 -0
- package/dist/namespaces/reasoning.d.ts.map +1 -0
- package/dist/namespaces/reasoning.js +72 -0
- package/dist/namespaces/reasoning.js.map +1 -0
- package/dist/namespaces/semantics.d.ts +21 -0
- package/dist/namespaces/semantics.d.ts.map +1 -0
- package/dist/namespaces/semantics.js +64 -0
- package/dist/namespaces/semantics.js.map +1 -0
- package/dist/namespaces/solvers.d.ts +22 -0
- package/dist/namespaces/solvers.d.ts.map +1 -0
- package/dist/namespaces/solvers.js +66 -0
- package/dist/namespaces/solvers.js.map +1 -0
- package/dist/namespaces/type-theory.d.ts +22 -0
- package/dist/namespaces/type-theory.d.ts.map +1 -0
- package/dist/namespaces/type-theory.js +65 -0
- package/dist/namespaces/type-theory.js.map +1 -0
- package/dist/optimization/branch-and-bound.d.ts +11 -0
- package/dist/optimization/branch-and-bound.d.ts.map +1 -0
- package/dist/optimization/branch-and-bound.js +311 -0
- package/dist/optimization/branch-and-bound.js.map +1 -0
- package/dist/optimization/index.d.ts +5 -0
- package/dist/optimization/index.d.ts.map +1 -0
- package/dist/optimization/index.js +20 -0
- package/dist/optimization/index.js.map +1 -0
- package/dist/optimization/simplex.d.ts +8 -0
- package/dist/optimization/simplex.d.ts.map +1 -0
- package/dist/optimization/simplex.js +408 -0
- package/dist/optimization/simplex.js.map +1 -0
- package/dist/optimization/standard-form.d.ts +11 -0
- package/dist/optimization/standard-form.d.ts.map +1 -0
- package/dist/optimization/standard-form.js +112 -0
- package/dist/optimization/standard-form.js.map +1 -0
- package/dist/optimization/types.d.ts +44 -0
- package/dist/optimization/types.d.ts.map +1 -0
- package/dist/optimization/types.js +15 -0
- package/dist/optimization/types.js.map +1 -0
- package/dist/profiles/hol/connectives.d.ts +46 -0
- package/dist/profiles/hol/connectives.d.ts.map +1 -0
- package/dist/profiles/hol/connectives.js +104 -0
- package/dist/profiles/hol/connectives.js.map +1 -0
- package/dist/profiles/hol/index.d.ts +7 -0
- package/dist/profiles/hol/index.d.ts.map +1 -0
- package/dist/profiles/hol/index.js +77 -0
- package/dist/profiles/hol/index.js.map +1 -0
- package/dist/profiles/hol/rules.d.ts +31 -0
- package/dist/profiles/hol/rules.d.ts.map +1 -0
- package/dist/profiles/hol/rules.js +258 -0
- package/dist/profiles/hol/rules.js.map +1 -0
- package/dist/profiles/hol/term.d.ts +52 -0
- package/dist/profiles/hol/term.d.ts.map +1 -0
- package/dist/profiles/hol/term.js +345 -0
- package/dist/profiles/hol/term.js.map +1 -0
- package/dist/profiles/hol/type-system.d.ts +38 -0
- package/dist/profiles/hol/type-system.d.ts.map +1 -0
- package/dist/profiles/hol/type-system.js +133 -0
- package/dist/profiles/hol/type-system.js.map +1 -0
- package/dist/profiles/hol/types.d.ts +59 -0
- package/dist/profiles/hol/types.d.ts.map +1 -0
- package/dist/profiles/hol/types.js +26 -0
- package/dist/profiles/hol/types.js.map +1 -0
- package/dist/smt-lib/ast.d.ts +138 -0
- package/dist/smt-lib/ast.d.ts.map +1 -0
- package/dist/smt-lib/ast.js +73 -0
- package/dist/smt-lib/ast.js.map +1 -0
- package/dist/smt-lib/emitter.d.ts +12 -0
- package/dist/smt-lib/emitter.d.ts.map +1 -0
- package/dist/smt-lib/emitter.js +174 -0
- package/dist/smt-lib/emitter.js.map +1 -0
- package/dist/smt-lib/index.d.ts +6 -0
- package/dist/smt-lib/index.d.ts.map +1 -0
- package/dist/smt-lib/index.js +31 -0
- package/dist/smt-lib/index.js.map +1 -0
- package/dist/smt-lib/parser.d.ts +13 -0
- package/dist/smt-lib/parser.d.ts.map +1 -0
- package/dist/smt-lib/parser.js +614 -0
- package/dist/smt-lib/parser.js.map +1 -0
- package/dist/smt-lib/tokenizer.d.ts +16 -0
- package/dist/smt-lib/tokenizer.d.ts.map +1 -0
- package/dist/smt-lib/tokenizer.js +234 -0
- package/dist/smt-lib/tokenizer.js.map +1 -0
- package/dist/tactic-dsl/combinators.d.ts +6 -0
- package/dist/tactic-dsl/combinators.d.ts.map +1 -0
- package/dist/tactic-dsl/combinators.js +98 -0
- package/dist/tactic-dsl/combinators.js.map +1 -0
- package/dist/tactic-dsl/index.d.ts +39 -0
- package/dist/tactic-dsl/index.d.ts.map +1 -0
- package/dist/tactic-dsl/index.js +162 -0
- package/dist/tactic-dsl/index.js.map +1 -0
- package/dist/tactic-dsl/tactics.d.ts +21 -0
- package/dist/tactic-dsl/tactics.d.ts.map +1 -0
- package/dist/tactic-dsl/tactics.js +536 -0
- package/dist/tactic-dsl/tactics.js.map +1 -0
- package/dist/tactic-dsl/types.d.ts +54 -0
- package/dist/tactic-dsl/types.d.ts.map +1 -0
- package/dist/tactic-dsl/types.js +226 -0
- package/dist/tactic-dsl/types.js.map +1 -0
- package/dist/tests/api/namespaces.test.d.ts +9 -0
- package/dist/tests/api/namespaces.test.d.ts.map +1 -0
- package/dist/tests/api/namespaces.test.js +218 -0
- package/dist/tests/api/namespaces.test.js.map +1 -0
- package/dist/tests/bdd/manager.test.d.ts +2 -0
- package/dist/tests/bdd/manager.test.d.ts.map +1 -0
- package/dist/tests/bdd/manager.test.js +472 -0
- package/dist/tests/bdd/manager.test.js.map +1 -0
- package/dist/tests/categorical/categorical.test.d.ts +2 -0
- package/dist/tests/categorical/categorical.test.d.ts.map +1 -0
- package/dist/tests/categorical/categorical.test.js +300 -0
- package/dist/tests/categorical/categorical.test.js.map +1 -0
- package/dist/tests/csp-hoare/csp-hoare.test.d.ts +2 -0
- package/dist/tests/csp-hoare/csp-hoare.test.d.ts.map +1 -0
- package/dist/tests/csp-hoare/csp-hoare.test.js +313 -0
- package/dist/tests/csp-hoare/csp-hoare.test.js.map +1 -0
- package/dist/tests/game-theory/game-theory.test.d.ts +2 -0
- package/dist/tests/game-theory/game-theory.test.d.ts.map +1 -0
- package/dist/tests/game-theory/game-theory.test.js +252 -0
- package/dist/tests/game-theory/game-theory.test.js.map +1 -0
- package/dist/tests/hindley-milner/hindley-milner.test.d.ts +2 -0
- package/dist/tests/hindley-milner/hindley-milner.test.d.ts.map +1 -0
- package/dist/tests/hindley-milner/hindley-milner.test.js +327 -0
- package/dist/tests/hindley-milner/hindley-milner.test.js.map +1 -0
- package/dist/tests/hol/hol.test.d.ts +2 -0
- package/dist/tests/hol/hol.test.d.ts.map +1 -0
- package/dist/tests/hol/hol.test.js +340 -0
- package/dist/tests/hol/hol.test.js.map +1 -0
- package/dist/tests/hott/hott.test.d.ts +2 -0
- package/dist/tests/hott/hott.test.d.ts.map +1 -0
- package/dist/tests/hott/hott.test.js +271 -0
- package/dist/tests/hott/hott.test.js.map +1 -0
- package/dist/tests/information-theory/information-theory.test.d.ts +2 -0
- package/dist/tests/information-theory/information-theory.test.d.ts.map +1 -0
- package/dist/tests/information-theory/information-theory.test.js +291 -0
- package/dist/tests/information-theory/information-theory.test.js.map +1 -0
- package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts +2 -0
- package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts.map +1 -0
- package/dist/tests/lemma-synthesis/lemma-synthesis.test.js +460 -0
- package/dist/tests/lemma-synthesis/lemma-synthesis.test.js.map +1 -0
- package/dist/tests/optimization/ilp.test.d.ts +2 -0
- package/dist/tests/optimization/ilp.test.d.ts.map +1 -0
- package/dist/tests/optimization/ilp.test.js +204 -0
- package/dist/tests/optimization/ilp.test.js.map +1 -0
- package/dist/tests/optimization/lp.test.d.ts +2 -0
- package/dist/tests/optimization/lp.test.d.ts.map +1 -0
- package/dist/tests/optimization/lp.test.js +224 -0
- package/dist/tests/optimization/lp.test.js.map +1 -0
- package/dist/tests/properties/agm.property.test.d.ts +2 -0
- package/dist/tests/properties/agm.property.test.d.ts.map +1 -0
- package/dist/tests/properties/agm.property.test.js +75 -0
- package/dist/tests/properties/agm.property.test.js.map +1 -0
- package/dist/tests/properties/anti-unification.property.test.d.ts +2 -0
- package/dist/tests/properties/anti-unification.property.test.d.ts.map +1 -0
- package/dist/tests/properties/anti-unification.property.test.js +43 -0
- package/dist/tests/properties/anti-unification.property.test.js.map +1 -0
- package/dist/tests/properties/argumentation.property.test.d.ts +2 -0
- package/dist/tests/properties/argumentation.property.test.d.ts.map +1 -0
- package/dist/tests/properties/argumentation.property.test.js +51 -0
- package/dist/tests/properties/argumentation.property.test.js.map +1 -0
- package/dist/tests/properties/bayesian.property.test.d.ts +2 -0
- package/dist/tests/properties/bayesian.property.test.d.ts.map +1 -0
- package/dist/tests/properties/bayesian.property.test.js +32 -0
- package/dist/tests/properties/bayesian.property.test.js.map +1 -0
- package/dist/tests/properties/bisimulation.property.test.d.ts +2 -0
- package/dist/tests/properties/bisimulation.property.test.d.ts.map +1 -0
- package/dist/tests/properties/bisimulation.property.test.js +50 -0
- package/dist/tests/properties/bisimulation.property.test.js.map +1 -0
- package/dist/tests/properties/cdcl.property.test.d.ts +2 -0
- package/dist/tests/properties/cdcl.property.test.d.ts.map +1 -0
- package/dist/tests/properties/cdcl.property.test.js +70 -0
- package/dist/tests/properties/cdcl.property.test.js.map +1 -0
- package/dist/tests/properties/coinduction.property.test.d.ts +2 -0
- package/dist/tests/properties/coinduction.property.test.d.ts.map +1 -0
- package/dist/tests/properties/coinduction.property.test.js +34 -0
- package/dist/tests/properties/coinduction.property.test.js.map +1 -0
- package/dist/tests/properties/constructive-reals.property.test.d.ts +2 -0
- package/dist/tests/properties/constructive-reals.property.test.d.ts.map +1 -0
- package/dist/tests/properties/constructive-reals.property.test.js +59 -0
- package/dist/tests/properties/constructive-reals.property.test.js.map +1 -0
- package/dist/tests/properties/csp.property.test.d.ts +2 -0
- package/dist/tests/properties/csp.property.test.d.ts.map +1 -0
- package/dist/tests/properties/csp.property.test.js +58 -0
- package/dist/tests/properties/csp.property.test.js.map +1 -0
- package/dist/tests/properties/generators.d.ts +78 -0
- package/dist/tests/properties/generators.d.ts.map +1 -0
- package/dist/tests/properties/generators.js +348 -0
- package/dist/tests/properties/generators.js.map +1 -0
- package/dist/tests/properties/ho-unify.property.test.d.ts +2 -0
- package/dist/tests/properties/ho-unify.property.test.d.ts.map +1 -0
- package/dist/tests/properties/ho-unify.property.test.js +46 -0
- package/dist/tests/properties/ho-unify.property.test.js.map +1 -0
- package/dist/tests/properties/hyperreal.property.test.d.ts +2 -0
- package/dist/tests/properties/hyperreal.property.test.d.ts.map +1 -0
- package/dist/tests/properties/hyperreal.property.test.js +33 -0
- package/dist/tests/properties/hyperreal.property.test.js.map +1 -0
- package/dist/tests/properties/intuit-nj.property.test.d.ts +2 -0
- package/dist/tests/properties/intuit-nj.property.test.d.ts.map +1 -0
- package/dist/tests/properties/intuit-nj.property.test.js +57 -0
- package/dist/tests/properties/intuit-nj.property.test.js.map +1 -0
- package/dist/tests/properties/lambda-calc.property.test.d.ts +2 -0
- package/dist/tests/properties/lambda-calc.property.test.d.ts.map +1 -0
- package/dist/tests/properties/lambda-calc.property.test.js +35 -0
- package/dist/tests/properties/lambda-calc.property.test.js.map +1 -0
- package/dist/tests/properties/mln.property.test.d.ts +2 -0
- package/dist/tests/properties/mln.property.test.d.ts.map +1 -0
- package/dist/tests/properties/mln.property.test.js +41 -0
- package/dist/tests/properties/mln.property.test.js.map +1 -0
- package/dist/tests/properties/mltt.property.test.d.ts +2 -0
- package/dist/tests/properties/mltt.property.test.d.ts.map +1 -0
- package/dist/tests/properties/mltt.property.test.js +33 -0
- package/dist/tests/properties/mltt.property.test.js.map +1 -0
- package/dist/tests/properties/nbe.property.test.d.ts +2 -0
- package/dist/tests/properties/nbe.property.test.d.ts.map +1 -0
- package/dist/tests/properties/nbe.property.test.js +44 -0
- package/dist/tests/properties/nbe.property.test.js.map +1 -0
- package/dist/tests/properties/planning.property.test.d.ts +2 -0
- package/dist/tests/properties/planning.property.test.d.ts.map +1 -0
- package/dist/tests/properties/planning.property.test.js +51 -0
- package/dist/tests/properties/planning.property.test.js.map +1 -0
- package/dist/tests/properties/profile-bridge.property.test.d.ts +2 -0
- package/dist/tests/properties/profile-bridge.property.test.d.ts.map +1 -0
- package/dist/tests/properties/profile-bridge.property.test.js +71 -0
- package/dist/tests/properties/profile-bridge.property.test.js.map +1 -0
- package/dist/tests/properties/refinement-types.property.test.d.ts +2 -0
- package/dist/tests/properties/refinement-types.property.test.d.ts.map +1 -0
- package/dist/tests/properties/refinement-types.property.test.js +37 -0
- package/dist/tests/properties/refinement-types.property.test.js.map +1 -0
- package/dist/tests/properties/sequent-g3.property.test.d.ts +2 -0
- package/dist/tests/properties/sequent-g3.property.test.d.ts.map +1 -0
- package/dist/tests/properties/sequent-g3.property.test.js +34 -0
- package/dist/tests/properties/sequent-g3.property.test.js.map +1 -0
- package/dist/tests/properties/symbolic-diff.property.test.d.ts +2 -0
- package/dist/tests/properties/symbolic-diff.property.test.d.ts.map +1 -0
- package/dist/tests/properties/symbolic-diff.property.test.js +49 -0
- package/dist/tests/properties/symbolic-diff.property.test.js.map +1 -0
- package/dist/tests/properties/system-f.property.test.d.ts +2 -0
- package/dist/tests/properties/system-f.property.test.d.ts.map +1 -0
- package/dist/tests/properties/system-f.property.test.js +37 -0
- package/dist/tests/properties/system-f.property.test.js.map +1 -0
- package/dist/tests/properties/theorem-cache.property.test.d.ts +2 -0
- package/dist/tests/properties/theorem-cache.property.test.d.ts.map +1 -0
- package/dist/tests/properties/theorem-cache.property.test.js +38 -0
- package/dist/tests/properties/theorem-cache.property.test.js.map +1 -0
- package/dist/tests/properties/trs.property.test.d.ts +2 -0
- package/dist/tests/properties/trs.property.test.d.ts.map +1 -0
- package/dist/tests/properties/trs.property.test.js +34 -0
- package/dist/tests/properties/trs.property.test.js.map +1 -0
- package/dist/tests/properties/unification.property.test.d.ts +2 -0
- package/dist/tests/properties/unification.property.test.d.ts.map +1 -0
- package/dist/tests/properties/unification.property.test.js +42 -0
- package/dist/tests/properties/unification.property.test.js.map +1 -0
- package/dist/tests/smt-lib/emitter.test.d.ts +2 -0
- package/dist/tests/smt-lib/emitter.test.d.ts.map +1 -0
- package/dist/tests/smt-lib/emitter.test.js +155 -0
- package/dist/tests/smt-lib/emitter.test.js.map +1 -0
- package/dist/tests/smt-lib/parser.test.d.ts +2 -0
- package/dist/tests/smt-lib/parser.test.d.ts.map +1 -0
- package/dist/tests/smt-lib/parser.test.js +164 -0
- package/dist/tests/smt-lib/parser.test.js.map +1 -0
- package/dist/tests/smt-lib/tokenizer.test.d.ts +2 -0
- package/dist/tests/smt-lib/tokenizer.test.d.ts.map +1 -0
- package/dist/tests/smt-lib/tokenizer.test.js +59 -0
- package/dist/tests/smt-lib/tokenizer.test.js.map +1 -0
- package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts +2 -0
- package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts.map +1 -0
- package/dist/tests/tactic-dsl/tactic-dsl.test.js +259 -0
- package/dist/tests/tactic-dsl/tactic-dsl.test.js.map +1 -0
- package/dist/tests/tptp/bridge.test.d.ts +2 -0
- package/dist/tests/tptp/bridge.test.d.ts.map +1 -0
- package/dist/tests/tptp/bridge.test.js +154 -0
- package/dist/tests/tptp/bridge.test.js.map +1 -0
- package/dist/tests/tptp/emitter.test.d.ts +2 -0
- package/dist/tests/tptp/emitter.test.d.ts.map +1 -0
- package/dist/tests/tptp/emitter.test.js +128 -0
- package/dist/tests/tptp/emitter.test.js.map +1 -0
- package/dist/tests/tptp/parser.test.d.ts +2 -0
- package/dist/tests/tptp/parser.test.d.ts.map +1 -0
- package/dist/tests/tptp/parser.test.js +192 -0
- package/dist/tests/tptp/parser.test.js.map +1 -0
- package/dist/tests/tptp/tokenizer.test.d.ts +2 -0
- package/dist/tests/tptp/tokenizer.test.d.ts.map +1 -0
- package/dist/tests/tptp/tokenizer.test.js +60 -0
- package/dist/tests/tptp/tokenizer.test.js.map +1 -0
- package/dist/tptp/ast.d.ts +73 -0
- package/dist/tptp/ast.d.ts.map +1 -0
- package/dist/tptp/ast.js +35 -0
- package/dist/tptp/ast.js.map +1 -0
- package/dist/tptp/bridge.d.ts +14 -0
- package/dist/tptp/bridge.d.ts.map +1 -0
- package/dist/tptp/bridge.js +146 -0
- package/dist/tptp/bridge.js.map +1 -0
- package/dist/tptp/emitter.d.ts +5 -0
- package/dist/tptp/emitter.d.ts.map +1 -0
- package/dist/tptp/emitter.js +103 -0
- package/dist/tptp/emitter.js.map +1 -0
- package/dist/tptp/index.d.ts +7 -0
- package/dist/tptp/index.d.ts.map +1 -0
- package/dist/tptp/index.js +31 -0
- package/dist/tptp/index.js.map +1 -0
- package/dist/tptp/parser.d.ts +23 -0
- package/dist/tptp/parser.d.ts.map +1 -0
- package/dist/tptp/parser.js +440 -0
- package/dist/tptp/parser.js.map +1 -0
- package/dist/tptp/tokenizer.d.ts +14 -0
- package/dist/tptp/tokenizer.d.ts.map +1 -0
- package/dist/tptp/tokenizer.js +264 -0
- package/dist/tptp/tokenizer.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Support enumeration — algoritmo para enumerar TODOS los Nash
|
|
4
|
+
// equilibria de un juego 2-player.
|
|
5
|
+
// ============================================================
|
|
6
|
+
//
|
|
7
|
+
// Idea (Dickhaut–Kaplan, generalizado): un equilibrio mixto está
|
|
8
|
+
// soportado por dos subconjuntos S_1 ⊆ [n], S_2 ⊆ [m] de igual
|
|
9
|
+
// cardinalidad (por el Lemma de complementariedad).
|
|
10
|
+
//
|
|
11
|
+
// Para cada par (S_1, S_2) del mismo tamaño k:
|
|
12
|
+
// - jugador 1 mezcla solo en S_1 con probs p_i (i ∈ S_1)
|
|
13
|
+
// - jugador 2 mezcla solo en S_2 con probs q_j (j ∈ S_2)
|
|
14
|
+
// - p, q deben volver indiferente al rival en su soporte:
|
|
15
|
+
// sum_i p_i * a[i][j] = u_2 para todo j ∈ S_2
|
|
16
|
+
// sum_j q_j * a'[i][j] = u_1 para todo i ∈ S_1
|
|
17
|
+
// (donde a' = pagos de player 1, a = pagos de player 2)
|
|
18
|
+
// - p, q ≥ 0, suman 1
|
|
19
|
+
// - mejores fuera del soporte no deben superar el pago de equilibrio
|
|
20
|
+
//
|
|
21
|
+
// Resolvemos el sistema lineal y filtramos. Para juegos chicos
|
|
22
|
+
// (n*m ≤ ~10) la enumeración es trivial: 2^n * 2^m subsets.
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.enumerateAllNash = enumerateAllNash;
|
|
25
|
+
const types_1 = require("./types");
|
|
26
|
+
const linalg_1 = require("./linalg");
|
|
27
|
+
const TOL = 1e-9;
|
|
28
|
+
function enumerateAllNash(game, maxSize) {
|
|
29
|
+
if (game.players !== 2) {
|
|
30
|
+
throw new Error('enumerateAllNash currently supports 2-player games only');
|
|
31
|
+
}
|
|
32
|
+
const n = game.strategies[0];
|
|
33
|
+
const m = game.strategies[1];
|
|
34
|
+
const a1 = game.payoffs[0]; // a1[i*m+j] = u_1(i, j)
|
|
35
|
+
const a2 = game.payoffs[1]; // a2[i*m+j] = u_2(i, j)
|
|
36
|
+
const cap = maxSize ?? Math.min(n, m);
|
|
37
|
+
const results = [];
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
// Enumerar subsets crecientes para que las equilibria puras
|
|
40
|
+
// aparezcan primero.
|
|
41
|
+
for (let k = 1; k <= cap; k++) {
|
|
42
|
+
const subsetsRow = subsetsOfSize(n, k);
|
|
43
|
+
const subsetsCol = subsetsOfSize(m, k);
|
|
44
|
+
for (const S1 of subsetsRow) {
|
|
45
|
+
for (const S2 of subsetsCol) {
|
|
46
|
+
const eq = solveSupport(n, m, a1, a2, S1, S2);
|
|
47
|
+
if (eq == null)
|
|
48
|
+
continue;
|
|
49
|
+
const key = canonicalKey(eq.strategies[0].distribution, eq.strategies[1].distribution);
|
|
50
|
+
if (seen.has(key))
|
|
51
|
+
continue;
|
|
52
|
+
seen.add(key);
|
|
53
|
+
results.push(eq);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return results;
|
|
58
|
+
}
|
|
59
|
+
function solveSupport(n, m, a1, a2, S1, S2) {
|
|
60
|
+
const k = S1.length;
|
|
61
|
+
if (S2.length !== k)
|
|
62
|
+
return null;
|
|
63
|
+
// Sistema para q (variable del jugador 2, |S2| = k):
|
|
64
|
+
// Para cada i ∈ S1: sum_{j ∈ S2} a1[i,j] * q_j = u_1
|
|
65
|
+
// sum_{j ∈ S2} q_j = 1
|
|
66
|
+
// Variables: q_j (k), u_1 (1). Ecuaciones: k + 1.
|
|
67
|
+
const A_q = [];
|
|
68
|
+
const b_q = [];
|
|
69
|
+
for (const i of S1) {
|
|
70
|
+
const row = new Array(k + 1).fill(0);
|
|
71
|
+
for (let idx = 0; idx < k; idx++) {
|
|
72
|
+
const j = S2[idx];
|
|
73
|
+
row[idx] = a1[i * m + j];
|
|
74
|
+
}
|
|
75
|
+
row[k] = -1; // -u_1
|
|
76
|
+
A_q.push(row);
|
|
77
|
+
b_q.push(0);
|
|
78
|
+
}
|
|
79
|
+
const last_q = new Array(k + 1).fill(0);
|
|
80
|
+
for (let idx = 0; idx < k; idx++)
|
|
81
|
+
last_q[idx] = 1;
|
|
82
|
+
A_q.push(last_q);
|
|
83
|
+
b_q.push(1);
|
|
84
|
+
const solQ = (0, linalg_1.solveLinear)(A_q, b_q);
|
|
85
|
+
if (solQ === null)
|
|
86
|
+
return null;
|
|
87
|
+
// Sistema para p (variable del jugador 1, |S1| = k):
|
|
88
|
+
// Para cada j ∈ S2: sum_{i ∈ S1} a2[i,j] * p_i = u_2
|
|
89
|
+
// sum_{i ∈ S1} p_i = 1
|
|
90
|
+
const A_p = [];
|
|
91
|
+
const b_p = [];
|
|
92
|
+
for (const j of S2) {
|
|
93
|
+
const row = new Array(k + 1).fill(0);
|
|
94
|
+
for (let idx = 0; idx < k; idx++) {
|
|
95
|
+
const i = S1[idx];
|
|
96
|
+
row[idx] = a2[i * m + j];
|
|
97
|
+
}
|
|
98
|
+
row[k] = -1; // -u_2
|
|
99
|
+
A_p.push(row);
|
|
100
|
+
b_p.push(0);
|
|
101
|
+
}
|
|
102
|
+
const last_p = new Array(k + 1).fill(0);
|
|
103
|
+
for (let idx = 0; idx < k; idx++)
|
|
104
|
+
last_p[idx] = 1;
|
|
105
|
+
A_p.push(last_p);
|
|
106
|
+
b_p.push(1);
|
|
107
|
+
const solP = (0, linalg_1.solveLinear)(A_p, b_p);
|
|
108
|
+
if (solP === null)
|
|
109
|
+
return null;
|
|
110
|
+
const q_support = solQ.slice(0, k);
|
|
111
|
+
const u1 = solQ[k];
|
|
112
|
+
const p_support = solP.slice(0, k);
|
|
113
|
+
const u2 = solP[k];
|
|
114
|
+
// Probabilidades dentro del soporte deben ser ≥ 0 (y >0 idealmente)
|
|
115
|
+
for (const v of q_support) {
|
|
116
|
+
if (v < -TOL)
|
|
117
|
+
return null;
|
|
118
|
+
if (v < TOL)
|
|
119
|
+
return null; // soporte = solo elementos con prob>0
|
|
120
|
+
}
|
|
121
|
+
for (const v of p_support) {
|
|
122
|
+
if (v < -TOL)
|
|
123
|
+
return null;
|
|
124
|
+
if (v < TOL)
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
// Reconstruir distribuciones completas
|
|
128
|
+
const p = new Array(n).fill(0);
|
|
129
|
+
for (let idx = 0; idx < k; idx++)
|
|
130
|
+
p[S1[idx]] = p_support[idx];
|
|
131
|
+
const q = new Array(m).fill(0);
|
|
132
|
+
for (let idx = 0; idx < k; idx++)
|
|
133
|
+
q[S2[idx]] = q_support[idx];
|
|
134
|
+
// Mejor respuesta fuera del soporte no debe superar u_1 / u_2
|
|
135
|
+
for (let i = 0; i < n; i++) {
|
|
136
|
+
if (S1.includes(i))
|
|
137
|
+
continue;
|
|
138
|
+
let u = 0;
|
|
139
|
+
for (let j = 0; j < m; j++)
|
|
140
|
+
u += q[j] * a1[i * m + j];
|
|
141
|
+
if (u > u1 + 1e-7)
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
for (let j = 0; j < m; j++) {
|
|
145
|
+
if (S2.includes(j))
|
|
146
|
+
continue;
|
|
147
|
+
let u = 0;
|
|
148
|
+
for (let i = 0; i < n; i++)
|
|
149
|
+
u += p[i] * a2[i * m + j];
|
|
150
|
+
if (u > u2 + 1e-7)
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const game = {
|
|
154
|
+
players: 2,
|
|
155
|
+
strategies: [n, m],
|
|
156
|
+
payoffs: [a1, a2],
|
|
157
|
+
};
|
|
158
|
+
const dists = [p, q];
|
|
159
|
+
const payoffs = [
|
|
160
|
+
(0, types_1.expectedPayoffFromDistributions)(game, 0, dists),
|
|
161
|
+
(0, types_1.expectedPayoffFromDistributions)(game, 1, dists),
|
|
162
|
+
];
|
|
163
|
+
const isPure = k === 1;
|
|
164
|
+
const isStrict = isPure && isStrictBR(n, m, a1, a2, S1[0], S2[0]);
|
|
165
|
+
return {
|
|
166
|
+
strategies: [
|
|
167
|
+
{ player: 0, distribution: p },
|
|
168
|
+
{ player: 1, distribution: q },
|
|
169
|
+
],
|
|
170
|
+
payoffs,
|
|
171
|
+
isPure,
|
|
172
|
+
isStrict,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function isStrictBR(n, m, a1, a2, i, j) {
|
|
176
|
+
const cur1 = a1[i * m + j];
|
|
177
|
+
for (let ii = 0; ii < n; ii++) {
|
|
178
|
+
if (ii === i)
|
|
179
|
+
continue;
|
|
180
|
+
if (a1[ii * m + j] >= cur1 - TOL)
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
const cur2 = a2[i * m + j];
|
|
184
|
+
for (let jj = 0; jj < m; jj++) {
|
|
185
|
+
if (jj === j)
|
|
186
|
+
continue;
|
|
187
|
+
if (a2[i * m + jj] >= cur2 - TOL)
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
function subsetsOfSize(n, k) {
|
|
193
|
+
const result = [];
|
|
194
|
+
const cur = [];
|
|
195
|
+
function rec(start) {
|
|
196
|
+
if (cur.length === k) {
|
|
197
|
+
result.push(cur.slice());
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const need = k - cur.length;
|
|
201
|
+
for (let i = start; i <= n - need; i++) {
|
|
202
|
+
cur.push(i);
|
|
203
|
+
rec(i + 1);
|
|
204
|
+
cur.pop();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
rec(0);
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
function canonicalKey(p, q) {
|
|
211
|
+
const round = (xs) => xs.map((x) => Math.round(x * 1e6) / 1e6).join(',');
|
|
212
|
+
return `${round(p)}|${round(q)}`;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=support-enumeration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-enumeration.js","sourceRoot":"","sources":["../../src/game-theory/support-enumeration.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAC/D,EAAE;AACF,iEAAiE;AACjE,+DAA+D;AAC/D,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,2DAA2D;AAC3D,2DAA2D;AAC3D,4DAA4D;AAC5D,sDAAsD;AACtD,sDAAsD;AACtD,4DAA4D;AAC5D,wBAAwB;AACxB,uEAAuE;AACvE,EAAE;AACF,+DAA+D;AAC/D,4DAA4D;;AAQ5D,4CA8BC;AAnCD,mCAA0D;AAC1D,qCAAuC;AAEvC,MAAM,GAAG,GAAG,IAAI,CAAC;AAEjB,SAAgB,gBAAgB,CAAC,IAAoB,EAAE,OAAgB;IACrE,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAEpD,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,4DAA4D;IAC5D,qBAAqB;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9C,IAAI,EAAE,IAAI,IAAI;oBAAE,SAAS;gBACzB,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBACvF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACnB,CAAS,EACT,CAAS,EACT,EAAY,EACZ,EAAY,EACZ,EAAY,EACZ,EAAY;IAEZ,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,qDAAqD;IACrD,wDAAwD;IACxD,yBAAyB;IACzB,kDAAkD;IAClD,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,qDAAqD;IACrD,wDAAwD;IACxD,yBAAyB;IACzB,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnB,oEAAoE;IACpE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG;YAAE,OAAO,IAAI,CAAC,CAAC,sCAAsC;IAClE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG;YAAE,OAAO,IAAI,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;QAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;QAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE9D,8DAA8D;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;IACjC,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAmB;QAC3B,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KAClB,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG;QACd,IAAA,uCAA+B,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;QAC/C,IAAA,uCAA+B,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;KAChD,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO;QACL,UAAU,EAAE;YACV,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;YAC9B,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;SAC/B;QACD,OAAO;QACP,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,CAAS,EACT,CAAS,EACT,EAAY,EACZ,EAAY,EACZ,CAAS,EACT,CAAS;IAET,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QAC9B,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QACvB,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;IACjD,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QAC9B,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QACvB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS;IACzC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,SAAS,GAAG,CAAC,KAAa;QACxB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACX,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,GAAG,CAAC,CAAC,CAAC,CAAC;IACP,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,CAAW,EAAE,CAAW;IAC5C,MAAM,KAAK,GAAG,CAAC,EAAY,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnF,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface NormalFormGame {
|
|
2
|
+
/** Cantidad de jugadores (≥ 2). */
|
|
3
|
+
players: number;
|
|
4
|
+
/** strategies[i] = número de estrategias puras del jugador i. */
|
|
5
|
+
strategies: number[];
|
|
6
|
+
/** payoffs[player][profileIndex] = utilidad del jugador en ese perfil. */
|
|
7
|
+
payoffs: number[][];
|
|
8
|
+
}
|
|
9
|
+
export interface MixedStrategy {
|
|
10
|
+
/** Índice del jugador (0-based). */
|
|
11
|
+
player: number;
|
|
12
|
+
/** Distribución sobre estrategias puras; debe sumar 1 y ser no-negativa. */
|
|
13
|
+
distribution: number[];
|
|
14
|
+
}
|
|
15
|
+
export interface NashEquilibrium {
|
|
16
|
+
/** Una distribución mixta por jugador (en orden de jugador). */
|
|
17
|
+
strategies: MixedStrategy[];
|
|
18
|
+
/** Pagos esperados por jugador en este equilibrio. */
|
|
19
|
+
payoffs: number[];
|
|
20
|
+
/** True si toda distribución pone masa 1 en alguna estrategia pura. */
|
|
21
|
+
isPure: boolean;
|
|
22
|
+
/** True si el equilibrio es estricto (best response única para cada jugador puro). */
|
|
23
|
+
isStrict: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convierte un perfil `(s_0, ..., s_{n-1})` a su índice row-major
|
|
27
|
+
* en `payoffs[player]`. Lanza si el perfil no encaja en `sizes`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function profileToIndex(profile: number[], sizes: number[]): number;
|
|
30
|
+
/** Inversa de `profileToIndex`. */
|
|
31
|
+
export declare function indexToProfile(index: number, sizes: number[]): number[];
|
|
32
|
+
/** Producto cartesiano de tamaños — número total de perfiles. */
|
|
33
|
+
export declare function totalProfiles(sizes: number[]): number;
|
|
34
|
+
/**
|
|
35
|
+
* Construye un juego en forma normal validando dimensiones.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createGame(players: number, strategies: number[], payoffs: number[][]): NormalFormGame;
|
|
38
|
+
/**
|
|
39
|
+
* Construye un juego 2-player a partir de dos matrices NxM.
|
|
40
|
+
* `payoff1[i][j]` = utilidad del jugador 1 cuando juega i y el 2 juega j.
|
|
41
|
+
* `payoff2[i][j]` = utilidad del jugador 2.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createTwoPlayerGame(payoff1: number[][], payoff2: number[][]): NormalFormGame;
|
|
44
|
+
/** Lectura ergonómica del pago: u_player(profile). */
|
|
45
|
+
export declare function payoffOf(game: NormalFormGame, player: number, profile: number[]): number;
|
|
46
|
+
/** Suma de un vector — útil para chequeos de simplex. */
|
|
47
|
+
export declare function sumOf(xs: number[]): number;
|
|
48
|
+
/** Pago esperado del jugador en un perfil mixto. */
|
|
49
|
+
export declare function expectedPayoff(game: NormalFormGame, player: number, mixed: MixedStrategy[]): number;
|
|
50
|
+
export declare function expectedPayoffFromDistributions(game: NormalFormGame, player: number, dists: number[][]): number;
|
|
51
|
+
/** Distribución pura: masa 1 en `s`, 0 en el resto. */
|
|
52
|
+
export declare function pureDistribution(s: number, size: number): number[];
|
|
53
|
+
/** Dos números reales aproximadamente iguales. */
|
|
54
|
+
export declare function approxEqual(a: number, b: number, tol?: number): boolean;
|
|
55
|
+
/** Igualdad punto a punto bajo tolerancia. */
|
|
56
|
+
export declare function vectorsApproxEqual(a: number[], b: number[], tol?: number): boolean;
|
|
57
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/game-theory/types.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC;IAChB,sFAAsF;IACtF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAczE;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAYvE;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAIrD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EAAE,EAAE,GAClB,cAAc,CAgBhB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,CAwB5F;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAOxF;AAED,yDAAyD;AACzD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAI1C;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EAAE,GACrB,MAAM,CAGR;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EAAE,GAChB,MAAM,CAmBR;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIlE;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,SAAO,GAAG,OAAO,CAErE;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,SAAO,GAAG,OAAO,CAMhF"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Game theory — Tipos y utilidades de juegos en forma normal
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Modelo de juego en forma normal (también llamado matriz de
|
|
7
|
+
// pagos) para n jugadores con conjuntos finitos de estrategias
|
|
8
|
+
// puras. Los pagos se almacenan en un layout flat:
|
|
9
|
+
//
|
|
10
|
+
// payoffs[player][index] = u_player(s_1, ..., s_n)
|
|
11
|
+
//
|
|
12
|
+
// donde `index` es la codificación row-major (lexicográfica) del
|
|
13
|
+
// perfil de estrategias `(s_1, ..., s_n)` usando los tamaños en
|
|
14
|
+
// `strategies`. Esta forma permite manejar uniformemente juegos
|
|
15
|
+
// 2-player NxM y juegos n-player simétricos chicos.
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.profileToIndex = profileToIndex;
|
|
18
|
+
exports.indexToProfile = indexToProfile;
|
|
19
|
+
exports.totalProfiles = totalProfiles;
|
|
20
|
+
exports.createGame = createGame;
|
|
21
|
+
exports.createTwoPlayerGame = createTwoPlayerGame;
|
|
22
|
+
exports.payoffOf = payoffOf;
|
|
23
|
+
exports.sumOf = sumOf;
|
|
24
|
+
exports.expectedPayoff = expectedPayoff;
|
|
25
|
+
exports.expectedPayoffFromDistributions = expectedPayoffFromDistributions;
|
|
26
|
+
exports.pureDistribution = pureDistribution;
|
|
27
|
+
exports.approxEqual = approxEqual;
|
|
28
|
+
exports.vectorsApproxEqual = vectorsApproxEqual;
|
|
29
|
+
// ---------- helpers internos ----------
|
|
30
|
+
/**
|
|
31
|
+
* Convierte un perfil `(s_0, ..., s_{n-1})` a su índice row-major
|
|
32
|
+
* en `payoffs[player]`. Lanza si el perfil no encaja en `sizes`.
|
|
33
|
+
*/
|
|
34
|
+
function profileToIndex(profile, sizes) {
|
|
35
|
+
if (profile.length !== sizes.length) {
|
|
36
|
+
throw new Error(`profile length ${profile.length} != strategies length ${sizes.length}`);
|
|
37
|
+
}
|
|
38
|
+
let idx = 0;
|
|
39
|
+
for (let i = 0; i < profile.length; i++) {
|
|
40
|
+
const s = profile[i];
|
|
41
|
+
const size = sizes[i];
|
|
42
|
+
if (s < 0 || s >= size) {
|
|
43
|
+
throw new Error(`strategy ${s} out of range [0, ${size}) for player ${i}`);
|
|
44
|
+
}
|
|
45
|
+
idx = idx * size + s;
|
|
46
|
+
}
|
|
47
|
+
return idx;
|
|
48
|
+
}
|
|
49
|
+
/** Inversa de `profileToIndex`. */
|
|
50
|
+
function indexToProfile(index, sizes) {
|
|
51
|
+
const profile = new Array(sizes.length);
|
|
52
|
+
let remaining = index;
|
|
53
|
+
for (let i = sizes.length - 1; i >= 0; i--) {
|
|
54
|
+
const size = sizes[i];
|
|
55
|
+
profile[i] = remaining % size;
|
|
56
|
+
remaining = Math.floor(remaining / size);
|
|
57
|
+
}
|
|
58
|
+
if (remaining !== 0) {
|
|
59
|
+
throw new Error(`index ${index} out of range for sizes ${sizes.join(',')}`);
|
|
60
|
+
}
|
|
61
|
+
return profile;
|
|
62
|
+
}
|
|
63
|
+
/** Producto cartesiano de tamaños — número total de perfiles. */
|
|
64
|
+
function totalProfiles(sizes) {
|
|
65
|
+
let n = 1;
|
|
66
|
+
for (const s of sizes)
|
|
67
|
+
n *= s;
|
|
68
|
+
return n;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Construye un juego en forma normal validando dimensiones.
|
|
72
|
+
*/
|
|
73
|
+
function createGame(players, strategies, payoffs) {
|
|
74
|
+
if (players < 2)
|
|
75
|
+
throw new Error('a game needs at least 2 players');
|
|
76
|
+
if (strategies.length !== players) {
|
|
77
|
+
throw new Error(`strategies length ${strategies.length} != players ${players}`);
|
|
78
|
+
}
|
|
79
|
+
const total = totalProfiles(strategies);
|
|
80
|
+
if (payoffs.length !== players) {
|
|
81
|
+
throw new Error(`payoffs has ${payoffs.length} rows, expected ${players}`);
|
|
82
|
+
}
|
|
83
|
+
for (let i = 0; i < players; i++) {
|
|
84
|
+
const row = payoffs[i];
|
|
85
|
+
if (row.length !== total) {
|
|
86
|
+
throw new Error(`payoffs[${i}] has length ${row.length}, expected ${total}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { players, strategies: strategies.slice(), payoffs: payoffs.map((r) => r.slice()) };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Construye un juego 2-player a partir de dos matrices NxM.
|
|
93
|
+
* `payoff1[i][j]` = utilidad del jugador 1 cuando juega i y el 2 juega j.
|
|
94
|
+
* `payoff2[i][j]` = utilidad del jugador 2.
|
|
95
|
+
*/
|
|
96
|
+
function createTwoPlayerGame(payoff1, payoff2) {
|
|
97
|
+
const n = payoff1.length;
|
|
98
|
+
if (n === 0)
|
|
99
|
+
throw new Error('payoff1 must have at least one row');
|
|
100
|
+
const first = payoff1[0];
|
|
101
|
+
const m = first.length;
|
|
102
|
+
if (m === 0)
|
|
103
|
+
throw new Error('payoff1 must have at least one column');
|
|
104
|
+
if (payoff2.length !== n) {
|
|
105
|
+
throw new Error(`payoff2 has ${payoff2.length} rows, expected ${n}`);
|
|
106
|
+
}
|
|
107
|
+
for (let i = 0; i < n; i++) {
|
|
108
|
+
const r1 = payoff1[i];
|
|
109
|
+
const r2 = payoff2[i];
|
|
110
|
+
if (r1.length !== m)
|
|
111
|
+
throw new Error(`payoff1[${i}] has length ${r1.length}, expected ${m}`);
|
|
112
|
+
if (r2.length !== m)
|
|
113
|
+
throw new Error(`payoff2[${i}] has length ${r2.length}, expected ${m}`);
|
|
114
|
+
}
|
|
115
|
+
const flat1 = new Array(n * m);
|
|
116
|
+
const flat2 = new Array(n * m);
|
|
117
|
+
for (let i = 0; i < n; i++) {
|
|
118
|
+
for (let j = 0; j < m; j++) {
|
|
119
|
+
flat1[i * m + j] = payoff1[i][j];
|
|
120
|
+
flat2[i * m + j] = payoff2[i][j];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { players: 2, strategies: [n, m], payoffs: [flat1, flat2] };
|
|
124
|
+
}
|
|
125
|
+
/** Lectura ergonómica del pago: u_player(profile). */
|
|
126
|
+
function payoffOf(game, player, profile) {
|
|
127
|
+
const idx = profileToIndex(profile, game.strategies);
|
|
128
|
+
const row = game.payoffs[player];
|
|
129
|
+
if (!row)
|
|
130
|
+
throw new Error(`player ${player} out of range`);
|
|
131
|
+
const v = row[idx];
|
|
132
|
+
if (v === undefined)
|
|
133
|
+
throw new Error('payoff missing at index');
|
|
134
|
+
return v;
|
|
135
|
+
}
|
|
136
|
+
/** Suma de un vector — útil para chequeos de simplex. */
|
|
137
|
+
function sumOf(xs) {
|
|
138
|
+
let s = 0;
|
|
139
|
+
for (const x of xs)
|
|
140
|
+
s += x;
|
|
141
|
+
return s;
|
|
142
|
+
}
|
|
143
|
+
/** Pago esperado del jugador en un perfil mixto. */
|
|
144
|
+
function expectedPayoff(game, player, mixed) {
|
|
145
|
+
const dists = mixed.map((m) => m.distribution);
|
|
146
|
+
return expectedPayoffFromDistributions(game, player, dists);
|
|
147
|
+
}
|
|
148
|
+
function expectedPayoffFromDistributions(game, player, dists) {
|
|
149
|
+
const sizes = game.strategies;
|
|
150
|
+
const total = totalProfiles(sizes);
|
|
151
|
+
const row = game.payoffs[player];
|
|
152
|
+
if (!row)
|
|
153
|
+
throw new Error(`player ${player} out of range`);
|
|
154
|
+
let total2 = 0;
|
|
155
|
+
for (let idx = 0; idx < total; idx++) {
|
|
156
|
+
const profile = indexToProfile(idx, sizes);
|
|
157
|
+
let prob = 1;
|
|
158
|
+
for (let p = 0; p < profile.length; p++) {
|
|
159
|
+
const d = dists[p];
|
|
160
|
+
if (!d)
|
|
161
|
+
throw new Error(`missing distribution for player ${p}`);
|
|
162
|
+
const sp = profile[p];
|
|
163
|
+
prob *= d[sp];
|
|
164
|
+
}
|
|
165
|
+
if (prob === 0)
|
|
166
|
+
continue;
|
|
167
|
+
total2 += prob * row[idx];
|
|
168
|
+
}
|
|
169
|
+
return total2;
|
|
170
|
+
}
|
|
171
|
+
/** Distribución pura: masa 1 en `s`, 0 en el resto. */
|
|
172
|
+
function pureDistribution(s, size) {
|
|
173
|
+
const d = new Array(size).fill(0);
|
|
174
|
+
d[s] = 1;
|
|
175
|
+
return d;
|
|
176
|
+
}
|
|
177
|
+
/** Dos números reales aproximadamente iguales. */
|
|
178
|
+
function approxEqual(a, b, tol = 1e-9) {
|
|
179
|
+
return Math.abs(a - b) < tol;
|
|
180
|
+
}
|
|
181
|
+
/** Igualdad punto a punto bajo tolerancia. */
|
|
182
|
+
function vectorsApproxEqual(a, b, tol = 1e-9) {
|
|
183
|
+
if (a.length !== b.length)
|
|
184
|
+
return false;
|
|
185
|
+
for (let i = 0; i < a.length; i++) {
|
|
186
|
+
if (!approxEqual(a[i], b[i], tol))
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/game-theory/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { Type, TypeScheme, Expr } from './types';
|
|
2
|
+
export type { Substitution, UnifyResult } from './substitution';
|
|
3
|
+
export type { InferResult, InferOutcome, InferSchemeResult } from './infer';
|
|
4
|
+
export { TypeEnv, tVar, tConst, tArrow, tApp, scheme, mono, eVar, eLit, eApp, eAppN, eLam, eLet, eLetRec, eIf, TInt, TBool, TStr, typeFreeVars, schemeFreeVars, typeToString, schemeToString, } from './types';
|
|
5
|
+
export { emptySubst, applySubst, applySubstScheme, composeSubsts, freshTypeVar, resetFreshSupply, occursIn, unify, isUnifyError, generalize, instantiate, } from './substitution';
|
|
6
|
+
export { algorithmW, infer, inferScheme, isInferError, initialEnv, normalizeScheme } from './infer';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hindley-milner/index.ts"],"names":[],"mappings":"AAeA,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5E,OAAO,EACL,OAAO,EACP,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,GAAG,EACH,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Hindley-Milner — Punto de entrada público
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Sistema de tipos let-polimórfico (Damas-Milner). Provee:
|
|
7
|
+
// - Sintaxis: Type, TypeScheme, Expr, TypeEnv.
|
|
8
|
+
// - Constructores breves: tVar, tConst, tArrow, tApp, eLam, eApp,
|
|
9
|
+
// eLet, eLetRec, eIf, eLit, eVar.
|
|
10
|
+
// - Algoritmo W: algorithmW / infer / inferScheme.
|
|
11
|
+
// - Unificación y sustituciones: unify, applySubst, composeSubsts,
|
|
12
|
+
// freshTypeVar, generalize, instantiate.
|
|
13
|
+
// - Entorno inicial con primitivos (+, ==, pair, cons, ...).
|
|
14
|
+
// - normalizeScheme: renombra tvars ligadas a a, b, c, ... para
|
|
15
|
+
// comparación estable en tests.
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.normalizeScheme = exports.initialEnv = exports.isInferError = exports.inferScheme = exports.infer = exports.algorithmW = exports.instantiate = exports.generalize = exports.isUnifyError = exports.unify = exports.occursIn = exports.resetFreshSupply = exports.freshTypeVar = exports.composeSubsts = exports.applySubstScheme = exports.applySubst = exports.emptySubst = exports.schemeToString = exports.typeToString = exports.schemeFreeVars = exports.typeFreeVars = exports.TStr = exports.TBool = exports.TInt = exports.eIf = exports.eLetRec = exports.eLet = exports.eLam = exports.eAppN = exports.eApp = exports.eLit = exports.eVar = exports.mono = exports.scheme = exports.tApp = exports.tArrow = exports.tConst = exports.tVar = exports.TypeEnv = void 0;
|
|
18
|
+
var types_1 = require("./types");
|
|
19
|
+
Object.defineProperty(exports, "TypeEnv", { enumerable: true, get: function () { return types_1.TypeEnv; } });
|
|
20
|
+
Object.defineProperty(exports, "tVar", { enumerable: true, get: function () { return types_1.tVar; } });
|
|
21
|
+
Object.defineProperty(exports, "tConst", { enumerable: true, get: function () { return types_1.tConst; } });
|
|
22
|
+
Object.defineProperty(exports, "tArrow", { enumerable: true, get: function () { return types_1.tArrow; } });
|
|
23
|
+
Object.defineProperty(exports, "tApp", { enumerable: true, get: function () { return types_1.tApp; } });
|
|
24
|
+
Object.defineProperty(exports, "scheme", { enumerable: true, get: function () { return types_1.scheme; } });
|
|
25
|
+
Object.defineProperty(exports, "mono", { enumerable: true, get: function () { return types_1.mono; } });
|
|
26
|
+
Object.defineProperty(exports, "eVar", { enumerable: true, get: function () { return types_1.eVar; } });
|
|
27
|
+
Object.defineProperty(exports, "eLit", { enumerable: true, get: function () { return types_1.eLit; } });
|
|
28
|
+
Object.defineProperty(exports, "eApp", { enumerable: true, get: function () { return types_1.eApp; } });
|
|
29
|
+
Object.defineProperty(exports, "eAppN", { enumerable: true, get: function () { return types_1.eAppN; } });
|
|
30
|
+
Object.defineProperty(exports, "eLam", { enumerable: true, get: function () { return types_1.eLam; } });
|
|
31
|
+
Object.defineProperty(exports, "eLet", { enumerable: true, get: function () { return types_1.eLet; } });
|
|
32
|
+
Object.defineProperty(exports, "eLetRec", { enumerable: true, get: function () { return types_1.eLetRec; } });
|
|
33
|
+
Object.defineProperty(exports, "eIf", { enumerable: true, get: function () { return types_1.eIf; } });
|
|
34
|
+
Object.defineProperty(exports, "TInt", { enumerable: true, get: function () { return types_1.TInt; } });
|
|
35
|
+
Object.defineProperty(exports, "TBool", { enumerable: true, get: function () { return types_1.TBool; } });
|
|
36
|
+
Object.defineProperty(exports, "TStr", { enumerable: true, get: function () { return types_1.TStr; } });
|
|
37
|
+
Object.defineProperty(exports, "typeFreeVars", { enumerable: true, get: function () { return types_1.typeFreeVars; } });
|
|
38
|
+
Object.defineProperty(exports, "schemeFreeVars", { enumerable: true, get: function () { return types_1.schemeFreeVars; } });
|
|
39
|
+
Object.defineProperty(exports, "typeToString", { enumerable: true, get: function () { return types_1.typeToString; } });
|
|
40
|
+
Object.defineProperty(exports, "schemeToString", { enumerable: true, get: function () { return types_1.schemeToString; } });
|
|
41
|
+
var substitution_1 = require("./substitution");
|
|
42
|
+
Object.defineProperty(exports, "emptySubst", { enumerable: true, get: function () { return substitution_1.emptySubst; } });
|
|
43
|
+
Object.defineProperty(exports, "applySubst", { enumerable: true, get: function () { return substitution_1.applySubst; } });
|
|
44
|
+
Object.defineProperty(exports, "applySubstScheme", { enumerable: true, get: function () { return substitution_1.applySubstScheme; } });
|
|
45
|
+
Object.defineProperty(exports, "composeSubsts", { enumerable: true, get: function () { return substitution_1.composeSubsts; } });
|
|
46
|
+
Object.defineProperty(exports, "freshTypeVar", { enumerable: true, get: function () { return substitution_1.freshTypeVar; } });
|
|
47
|
+
Object.defineProperty(exports, "resetFreshSupply", { enumerable: true, get: function () { return substitution_1.resetFreshSupply; } });
|
|
48
|
+
Object.defineProperty(exports, "occursIn", { enumerable: true, get: function () { return substitution_1.occursIn; } });
|
|
49
|
+
Object.defineProperty(exports, "unify", { enumerable: true, get: function () { return substitution_1.unify; } });
|
|
50
|
+
Object.defineProperty(exports, "isUnifyError", { enumerable: true, get: function () { return substitution_1.isUnifyError; } });
|
|
51
|
+
Object.defineProperty(exports, "generalize", { enumerable: true, get: function () { return substitution_1.generalize; } });
|
|
52
|
+
Object.defineProperty(exports, "instantiate", { enumerable: true, get: function () { return substitution_1.instantiate; } });
|
|
53
|
+
var infer_1 = require("./infer");
|
|
54
|
+
Object.defineProperty(exports, "algorithmW", { enumerable: true, get: function () { return infer_1.algorithmW; } });
|
|
55
|
+
Object.defineProperty(exports, "infer", { enumerable: true, get: function () { return infer_1.infer; } });
|
|
56
|
+
Object.defineProperty(exports, "inferScheme", { enumerable: true, get: function () { return infer_1.inferScheme; } });
|
|
57
|
+
Object.defineProperty(exports, "isInferError", { enumerable: true, get: function () { return infer_1.isInferError; } });
|
|
58
|
+
Object.defineProperty(exports, "initialEnv", { enumerable: true, get: function () { return infer_1.initialEnv; } });
|
|
59
|
+
Object.defineProperty(exports, "normalizeScheme", { enumerable: true, get: function () { return infer_1.normalizeScheme; } });
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hindley-milner/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,4CAA4C;AAC5C,+DAA+D;AAC/D,EAAE;AACF,2DAA2D;AAC3D,iDAAiD;AACjD,oEAAoE;AACpE,sCAAsC;AACtC,qDAAqD;AACrD,qEAAqE;AACrE,6CAA6C;AAC7C,+DAA+D;AAC/D,kEAAkE;AAClE,oCAAoC;;;AAMpC,iCAuBiB;AAtBf,gGAAA,OAAO,OAAA;AACP,6FAAA,IAAI,OAAA;AACJ,+FAAA,MAAM,OAAA;AACN,+FAAA,MAAM,OAAA;AACN,6FAAA,IAAI,OAAA;AACJ,+FAAA,MAAM,OAAA;AACN,6FAAA,IAAI,OAAA;AACJ,6FAAA,IAAI,OAAA;AACJ,6FAAA,IAAI,OAAA;AACJ,6FAAA,IAAI,OAAA;AACJ,8FAAA,KAAK,OAAA;AACL,6FAAA,IAAI,OAAA;AACJ,6FAAA,IAAI,OAAA;AACJ,gGAAA,OAAO,OAAA;AACP,4FAAA,GAAG,OAAA;AACH,6FAAA,IAAI,OAAA;AACJ,8FAAA,KAAK,OAAA;AACL,6FAAA,IAAI,OAAA;AACJ,qGAAA,YAAY,OAAA;AACZ,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,uGAAA,cAAc,OAAA;AAGhB,+CAYwB;AAXtB,0GAAA,UAAU,OAAA;AACV,0GAAA,UAAU,OAAA;AACV,gHAAA,gBAAgB,OAAA;AAChB,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AACZ,gHAAA,gBAAgB,OAAA;AAChB,wGAAA,QAAQ,OAAA;AACR,qGAAA,KAAK,OAAA;AACL,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AACV,2GAAA,WAAW,OAAA;AAGb,iCAAoG;AAA3F,mGAAA,UAAU,OAAA;AAAE,8FAAA,KAAK,OAAA;AAAE,oGAAA,WAAW,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,wGAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Expr, Type, TypeScheme } from './types';
|
|
2
|
+
import { TypeEnv } from './types';
|
|
3
|
+
import type { Substitution } from './substitution';
|
|
4
|
+
export interface InferResult {
|
|
5
|
+
type: Type;
|
|
6
|
+
subst: Substitution;
|
|
7
|
+
}
|
|
8
|
+
export type InferOutcome = InferResult | {
|
|
9
|
+
error: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function isInferError(r: InferOutcome): r is {
|
|
12
|
+
error: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function initialEnv(): TypeEnv;
|
|
15
|
+
export declare function algorithmW(expr: Expr, env: TypeEnv): InferOutcome;
|
|
16
|
+
export declare function infer(expr: Expr, env?: TypeEnv): InferOutcome;
|
|
17
|
+
export interface InferSchemeResult {
|
|
18
|
+
scheme: TypeScheme;
|
|
19
|
+
subst: Substitution;
|
|
20
|
+
type: Type;
|
|
21
|
+
}
|
|
22
|
+
export declare function inferScheme(expr: Expr, env?: TypeEnv): InferSchemeResult | {
|
|
23
|
+
error: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function normalizeScheme(sc: TypeScheme): TypeScheme;
|
|
26
|
+
//# sourceMappingURL=infer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../src/hindley-milner/infer.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAqB,OAAO,EAA4C,MAAM,SAAS,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAanD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,IAAI;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAEpE;AAOD,wBAAgB,UAAU,IAAI,OAAO,CA+CpC;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,YAAY,CAsHjE;AAQD,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,OAAsB,GAAG,YAAY,CAE3E;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,EACV,GAAG,GAAE,OAAsB,GAC1B,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAMvC;AAeD,wBAAgB,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,CAyB1D"}
|