@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,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// CSP Hoare — Trazas, failures, deadlock, livelock, refinement
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Sobre la LTS definida en `semantics.ts` calculamos las semánticas
|
|
6
|
+
// observacionales clásicas de CSP:
|
|
7
|
+
//
|
|
8
|
+
// • traces(P) — conjunto de prefijos de eventos visibles posibles.
|
|
9
|
+
// • failures(P) — pares (traza, refusal). El conjunto de refusal es el
|
|
10
|
+
// conjunto de eventos que el proceso PUEDE rehusar tras
|
|
11
|
+
// esa traza, bajo ALGUNA resolución del no-determinismo.
|
|
12
|
+
//
|
|
13
|
+
// Refinement (notación CSP estándar):
|
|
14
|
+
//
|
|
15
|
+
// P ⊑_T Q ⇔ traces(Q) ⊆ traces(P)
|
|
16
|
+
// P ⊑_F Q ⇔ traces(Q) ⊆ traces(P) ∧ failures(Q) ⊆ failures(P)
|
|
17
|
+
//
|
|
18
|
+
// Intuición: Q refina a P sii Q es "más predecible" / "más determinista".
|
|
19
|
+
// STOP es el refinement máximo: refina todo lo que tenga traza vacía.
|
|
20
|
+
// ============================================================
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.traces = traces;
|
|
23
|
+
exports.failures = failures;
|
|
24
|
+
exports.isDeadlocked = isDeadlocked;
|
|
25
|
+
exports.isLiveLocked = isLiveLocked;
|
|
26
|
+
exports.refinesTraces = refinesTraces;
|
|
27
|
+
exports.refinesFailures = refinesFailures;
|
|
28
|
+
const semantics_1 = require("./semantics");
|
|
29
|
+
// ── Trazas ──────────────────────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* Enumera todas las trazas de `p` hasta longitud `maxLength` (inclusive).
|
|
32
|
+
* Incluye la traza vacía (siempre presente) y los prefijos intermedios.
|
|
33
|
+
*
|
|
34
|
+
* Las trazas se devuelven sin duplicados, ordenadas por longitud
|
|
35
|
+
* ascendente, y como copias de arrays inmutables (las modificaciones no
|
|
36
|
+
* afectan el motor).
|
|
37
|
+
*/
|
|
38
|
+
function traces(p, maxLength = 6) {
|
|
39
|
+
const seen = new Set();
|
|
40
|
+
const out = [];
|
|
41
|
+
const visit = (q, prefix) => {
|
|
42
|
+
const key = prefix.join('');
|
|
43
|
+
if (seen.has(key))
|
|
44
|
+
return;
|
|
45
|
+
seen.add(key);
|
|
46
|
+
out.push([...prefix]);
|
|
47
|
+
if (prefix.length >= maxLength)
|
|
48
|
+
return;
|
|
49
|
+
// Para enumerar trazas hay que considerar TODAS las resoluciones
|
|
50
|
+
// internas: cada rama puede ofrecer eventos distintos.
|
|
51
|
+
const resolutions = (0, semantics_1.internalResolutions)(q);
|
|
52
|
+
for (const r of resolutions) {
|
|
53
|
+
const initials = (0, semantics_1.nextEvents)(r);
|
|
54
|
+
for (const e of initials) {
|
|
55
|
+
const next = (0, semantics_1.step)(r, e);
|
|
56
|
+
if (next !== null) {
|
|
57
|
+
visit(next, [...prefix, e]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
visit(p, []);
|
|
63
|
+
// Orden estable: por longitud, luego lex.
|
|
64
|
+
out.sort((a, b) => {
|
|
65
|
+
if (a.length !== b.length)
|
|
66
|
+
return a.length - b.length;
|
|
67
|
+
for (let i = 0; i < a.length; i++) {
|
|
68
|
+
const av = a[i] ?? '';
|
|
69
|
+
const bv = b[i] ?? '';
|
|
70
|
+
if (av !== bv)
|
|
71
|
+
return av < bv ? -1 : 1;
|
|
72
|
+
}
|
|
73
|
+
return 0;
|
|
74
|
+
});
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
// ── Failures ────────────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Para una RESOLUCIÓN interna estable `q`, el conjunto de refusal máximo
|
|
80
|
+
* sobre un alfabeto candidato `Σ` es: todo evento de `Σ` que `q` no
|
|
81
|
+
* ofrezca como inicial. (Definición estándar: R es refusal sii q no
|
|
82
|
+
* tiene transición para ningún a ∈ R.)
|
|
83
|
+
*
|
|
84
|
+
* `candidates` debe ser el conjunto de eventos relevantes (alfabeto de
|
|
85
|
+
* comparación) — típicamente la unión sintáctica de los alfabetos de los
|
|
86
|
+
* procesos involucrados en un test de refinement.
|
|
87
|
+
*/
|
|
88
|
+
function refusalsOf(q, candidates) {
|
|
89
|
+
const offered = (0, semantics_1.nextEvents)(q);
|
|
90
|
+
const r = new Set();
|
|
91
|
+
for (const e of candidates) {
|
|
92
|
+
if (!offered.has(e))
|
|
93
|
+
r.add(e);
|
|
94
|
+
}
|
|
95
|
+
return r;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Calcula failures hasta `maxLength`. Para cada traza alcanzable, registra
|
|
99
|
+
* los refusal sets posibles iterando todas las resoluciones internas del
|
|
100
|
+
* estado tras la traza.
|
|
101
|
+
*
|
|
102
|
+
* Devuelve una lista (no un set) porque los refusal sets son objetos —
|
|
103
|
+
* agrupamos por igualdad estructural y deduplicamos manualmente.
|
|
104
|
+
*/
|
|
105
|
+
function failures(p, maxLength = 4) {
|
|
106
|
+
const alphaPrime = collectVisibleEvents(p);
|
|
107
|
+
const reachable = [];
|
|
108
|
+
const seenStates = new Set();
|
|
109
|
+
const enqueue = (state, trace) => {
|
|
110
|
+
const key = trace.join('');
|
|
111
|
+
if (seenStates.has(key))
|
|
112
|
+
return;
|
|
113
|
+
seenStates.add(key);
|
|
114
|
+
reachable.push({ state, trace });
|
|
115
|
+
if (trace.length >= maxLength)
|
|
116
|
+
return;
|
|
117
|
+
const resolutions = (0, semantics_1.internalResolutions)(state);
|
|
118
|
+
for (const r of resolutions) {
|
|
119
|
+
const initials = (0, semantics_1.nextEvents)(r);
|
|
120
|
+
for (const e of initials) {
|
|
121
|
+
const next = (0, semantics_1.step)(r, e);
|
|
122
|
+
if (next !== null)
|
|
123
|
+
enqueue(next, [...trace, e]);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
enqueue(p, []);
|
|
128
|
+
const out = [];
|
|
129
|
+
const seenPairs = new Set();
|
|
130
|
+
for (const { state, trace } of reachable) {
|
|
131
|
+
const resolutions = (0, semantics_1.internalResolutions)(state);
|
|
132
|
+
for (const r of resolutions) {
|
|
133
|
+
const ref = refusalsOf(r, alphaPrime);
|
|
134
|
+
const k = trace.join('') + '|' + [...ref].sort().join(',');
|
|
135
|
+
if (seenPairs.has(k))
|
|
136
|
+
continue;
|
|
137
|
+
seenPairs.add(k);
|
|
138
|
+
out.push({ trace: [...trace], refusal: ref });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
/** Alfabeto visible relevante (incluye tick si aparece). */
|
|
144
|
+
function collectVisibleEvents(p) {
|
|
145
|
+
// Reaprovechamos `traces` superficialmente: alcanzamos hasta profundidad
|
|
146
|
+
// moderada para acumular eventos efectivamente observables.
|
|
147
|
+
const out = new Set();
|
|
148
|
+
const visit = (q, depth) => {
|
|
149
|
+
if (depth > 8)
|
|
150
|
+
return;
|
|
151
|
+
for (const r of (0, semantics_1.internalResolutions)(q)) {
|
|
152
|
+
const initials = (0, semantics_1.nextEvents)(r);
|
|
153
|
+
for (const e of initials) {
|
|
154
|
+
out.add(e);
|
|
155
|
+
const next = (0, semantics_1.step)(r, e);
|
|
156
|
+
if (next !== null)
|
|
157
|
+
visit(next, depth + 1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
visit(p, 0);
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
// ── Deadlock / livelock ─────────────────────────────────────
|
|
165
|
+
/**
|
|
166
|
+
* Hay deadlock si el proceso no ofrece NINGÚN evento (ni siquiera ✓) en
|
|
167
|
+
* ALGUNA resolución interna alcanzable desde el estado inicial.
|
|
168
|
+
*
|
|
169
|
+
* En `STOP` el chequeo es trivial: `nextEvents(STOP) = ∅`.
|
|
170
|
+
*/
|
|
171
|
+
function isDeadlocked(p) {
|
|
172
|
+
for (const r of (0, semantics_1.internalResolutions)(p)) {
|
|
173
|
+
if ((0, semantics_1.nextEvents)(r).size === 0)
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Detección heurística de livelock: el proceso recorre eventos ocultos
|
|
180
|
+
* (τ) indefinidamente sin avanzar visiblemente. Implementación: chequea
|
|
181
|
+
* si la profundidad de despliegues internos excede `depth` sin ofrecer
|
|
182
|
+
* eventos visibles.
|
|
183
|
+
*
|
|
184
|
+
* No es decisión: usamos límite acotado. Útil para advertir sobre `μX.X`
|
|
185
|
+
* o `(a → STOP) \ {a}` con loop.
|
|
186
|
+
*/
|
|
187
|
+
function isLiveLocked(p, depth = 32) {
|
|
188
|
+
// Estrategia: si tras `depth` resoluciones internas seguidas no hay
|
|
189
|
+
// eventos visibles (cardinality 0) pero la recursión sigue siendo
|
|
190
|
+
// "productiva" internamente, lo consideramos livelock probable.
|
|
191
|
+
const initials = (0, semantics_1.nextEvents)(p);
|
|
192
|
+
if (initials.size > 0)
|
|
193
|
+
return false;
|
|
194
|
+
// Sin eventos: distinguir deadlock estructural (STOP) vs livelock real
|
|
195
|
+
// requiere examinar el cuerpo de la recursión.
|
|
196
|
+
return isLiveLockedRec(p, depth);
|
|
197
|
+
}
|
|
198
|
+
function isLiveLockedRec(p, depth) {
|
|
199
|
+
if (depth <= 0)
|
|
200
|
+
return true;
|
|
201
|
+
// Si hay recursión que se autoincorpora sin guarda visible, divergir.
|
|
202
|
+
if (p.kind === 'recursion') {
|
|
203
|
+
// Cuerpo sin prefix ni skip → diverge.
|
|
204
|
+
if (!hasVisibleGuard(p.body, p.name))
|
|
205
|
+
return true;
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
if (p.kind === 'hide') {
|
|
209
|
+
// Si todos los eventos iniciales son ocultos, podemos estar en un loop τ.
|
|
210
|
+
const hidden = new Set(p.events);
|
|
211
|
+
const inner = (0, semantics_1.nextEvents)(p.process);
|
|
212
|
+
if (inner.size === 0)
|
|
213
|
+
return false;
|
|
214
|
+
let allHidden = true;
|
|
215
|
+
for (const e of inner) {
|
|
216
|
+
if (!hidden.has(e)) {
|
|
217
|
+
allHidden = false;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return allHidden;
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
function hasVisibleGuard(body, recName) {
|
|
226
|
+
switch (body.kind) {
|
|
227
|
+
case 'prefix':
|
|
228
|
+
return true; // hay un evento visible antes de recurrir.
|
|
229
|
+
case 'skip':
|
|
230
|
+
return true; // SKIP da ✓ (visible).
|
|
231
|
+
case 'choice':
|
|
232
|
+
case 'internal':
|
|
233
|
+
case 'parallel':
|
|
234
|
+
case 'interleave':
|
|
235
|
+
case 'sequence':
|
|
236
|
+
return hasVisibleGuard(body.left, recName) || hasVisibleGuard(body.right, recName);
|
|
237
|
+
case 'hide':
|
|
238
|
+
case 'rename':
|
|
239
|
+
return hasVisibleGuard(body.process, recName);
|
|
240
|
+
case 'recursion':
|
|
241
|
+
return hasVisibleGuard(body.body, recName);
|
|
242
|
+
case 'var':
|
|
243
|
+
return body.name !== recName; // si referencia otra var, asumimos guardada.
|
|
244
|
+
case 'stop':
|
|
245
|
+
return true; // STOP no es guarda pero tampoco divergente.
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// ── Refinement ──────────────────────────────────────────────
|
|
249
|
+
/**
|
|
250
|
+
* P ⊑_T Q : Q refina a P en trazas sii cada traza de Q es traza de P.
|
|
251
|
+
* Equivalentemente: Q no puede hacer nada que P no pudiera observar.
|
|
252
|
+
*/
|
|
253
|
+
function refinesTraces(spec, impl, maxLength = 6) {
|
|
254
|
+
const specTraces = encodeSet(traces(spec, maxLength));
|
|
255
|
+
const implTraces = traces(impl, maxLength);
|
|
256
|
+
for (const t of implTraces) {
|
|
257
|
+
if (!specTraces.has(encodeTrace(t)))
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* P ⊑_F Q : refinamiento en failures. Q refina a P sii:
|
|
264
|
+
* (a) traces(Q) ⊆ traces(P)
|
|
265
|
+
* (b) failures(Q) ⊆ failures(P)
|
|
266
|
+
*
|
|
267
|
+
* Una falla `(t, R)` de Q debe poder ser exhibida también por P. Esto
|
|
268
|
+
* capta el principio de que Q es "menos no-determinista" que P.
|
|
269
|
+
*/
|
|
270
|
+
function refinesFailures(spec, impl, maxLength = 4) {
|
|
271
|
+
if (!refinesTraces(spec, impl, maxLength))
|
|
272
|
+
return false;
|
|
273
|
+
const specF = failures(spec, maxLength);
|
|
274
|
+
const implF = failures(impl, maxLength);
|
|
275
|
+
// Para cada failure de impl, debe existir un failure de spec con la
|
|
276
|
+
// misma traza y un refusal ⊇ del de impl. (Refusal sets son cerrados
|
|
277
|
+
// por subconjunto en CSP: si P rehúsa R, también rehúsa todo R' ⊆ R.)
|
|
278
|
+
const specByTrace = new Map();
|
|
279
|
+
for (const f of specF) {
|
|
280
|
+
const k = encodeTrace(f.trace);
|
|
281
|
+
const arr = specByTrace.get(k) ?? [];
|
|
282
|
+
arr.push(f.refusal);
|
|
283
|
+
specByTrace.set(k, arr);
|
|
284
|
+
}
|
|
285
|
+
for (const f of implF) {
|
|
286
|
+
const k = encodeTrace(f.trace);
|
|
287
|
+
const candidates = specByTrace.get(k);
|
|
288
|
+
if (!candidates)
|
|
289
|
+
return false;
|
|
290
|
+
let matched = false;
|
|
291
|
+
for (const r of candidates) {
|
|
292
|
+
if (subsetEq(f.refusal, r)) {
|
|
293
|
+
matched = true;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (!matched)
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
function encodeTrace(t) {
|
|
303
|
+
return t.join('');
|
|
304
|
+
}
|
|
305
|
+
function encodeSet(ts) {
|
|
306
|
+
const out = new Set();
|
|
307
|
+
for (const t of ts)
|
|
308
|
+
out.add(encodeTrace(t));
|
|
309
|
+
return out;
|
|
310
|
+
}
|
|
311
|
+
function subsetEq(a, b) {
|
|
312
|
+
for (const e of a)
|
|
313
|
+
if (!b.has(e))
|
|
314
|
+
return false;
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/csp-hoare/analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Process } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Máquina expendedora simple: acepta una moneda y luego ofrece al
|
|
4
|
+
* entorno elegir entre té y café.
|
|
5
|
+
*
|
|
6
|
+
* VM = coin → ((tea → STOP) □ (coffee → STOP))
|
|
7
|
+
*
|
|
8
|
+
* Para uso en bucle infinito, ver `vendingMachineLoop`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function vendingMachine(): Process;
|
|
11
|
+
/** Versión recursiva: tras servir, vuelve al estado inicial. */
|
|
12
|
+
export declare function vendingMachineLoop(): Process;
|
|
13
|
+
/**
|
|
14
|
+
* Filósofo `i` (dining philosophers a la Hoare): toma su tenedor
|
|
15
|
+
* izquierdo (`L`), luego el derecho (`R`), come, los suelta y repite.
|
|
16
|
+
*
|
|
17
|
+
* PHIL_i = picks_up.L → picks_up.R → eats → puts_down.R → puts_down.L → STOP
|
|
18
|
+
*
|
|
19
|
+
* El bloqueo clásico aparece cuando todos los filósofos toman primero
|
|
20
|
+
* el izquierdo y luego intentan tomar el derecho: ya nadie lo tendrá
|
|
21
|
+
* libre. Lo detectamos con `isDeadlocked` sobre la composición paralela.
|
|
22
|
+
*/
|
|
23
|
+
export declare function philosopher(name: string): Process;
|
|
24
|
+
/**
|
|
25
|
+
* Composición paralela de `n` filósofos circulares con sus tenedores
|
|
26
|
+
* compartidos. El alfabeto de sincronización es exactamente el conjunto
|
|
27
|
+
* de eventos `pick.*` y `put.*` que comparten filósofo y fork.
|
|
28
|
+
*
|
|
29
|
+
* Con `n ≥ 2` y la estrategia ingenua (todos toman primero el izquierdo)
|
|
30
|
+
* llegamos a deadlock estructural una vez todos hicieron `pick.L`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function diningPhilosophers(n: number): Process;
|
|
33
|
+
//# sourceMappingURL=examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/examples.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,SAAS,CAAC;AAG9C;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AA0BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CA+BrD"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// CSP Hoare — Ejemplos estándar del libro de Hoare (1985)
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Construcciones canónicas que también sirven como tests integradores
|
|
6
|
+
// de la semántica.
|
|
7
|
+
// ============================================================
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.vendingMachine = vendingMachine;
|
|
10
|
+
exports.vendingMachineLoop = vendingMachineLoop;
|
|
11
|
+
exports.philosopher = philosopher;
|
|
12
|
+
exports.diningPhilosophers = diningPhilosophers;
|
|
13
|
+
const semantics_1 = require("./semantics");
|
|
14
|
+
/**
|
|
15
|
+
* Máquina expendedora simple: acepta una moneda y luego ofrece al
|
|
16
|
+
* entorno elegir entre té y café.
|
|
17
|
+
*
|
|
18
|
+
* VM = coin → ((tea → STOP) □ (coffee → STOP))
|
|
19
|
+
*
|
|
20
|
+
* Para uso en bucle infinito, ver `vendingMachineLoop`.
|
|
21
|
+
*/
|
|
22
|
+
function vendingMachine() {
|
|
23
|
+
return (0, semantics_1.prefix)('coin', (0, semantics_1.choice)((0, semantics_1.prefix)('tea', semantics_1.STOP), (0, semantics_1.prefix)('coffee', semantics_1.STOP)));
|
|
24
|
+
}
|
|
25
|
+
/** Versión recursiva: tras servir, vuelve al estado inicial. */
|
|
26
|
+
function vendingMachineLoop() {
|
|
27
|
+
return (0, semantics_1.recursion)('VM', (0, semantics_1.prefix)('coin', (0, semantics_1.choice)((0, semantics_1.prefix)('tea', (0, semantics_1.processVar)('VM')), (0, semantics_1.prefix)('coffee', (0, semantics_1.processVar)('VM')))));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Filósofo `i` (dining philosophers a la Hoare): toma su tenedor
|
|
31
|
+
* izquierdo (`L`), luego el derecho (`R`), come, los suelta y repite.
|
|
32
|
+
*
|
|
33
|
+
* PHIL_i = picks_up.L → picks_up.R → eats → puts_down.R → puts_down.L → STOP
|
|
34
|
+
*
|
|
35
|
+
* El bloqueo clásico aparece cuando todos los filósofos toman primero
|
|
36
|
+
* el izquierdo y luego intentan tomar el derecho: ya nadie lo tendrá
|
|
37
|
+
* libre. Lo detectamos con `isDeadlocked` sobre la composición paralela.
|
|
38
|
+
*/
|
|
39
|
+
function philosopher(name) {
|
|
40
|
+
const pickL = `pick.${name}.L`;
|
|
41
|
+
const pickR = `pick.${name}.R`;
|
|
42
|
+
const eats = `eat.${name}`;
|
|
43
|
+
const putR = `put.${name}.R`;
|
|
44
|
+
const putL = `put.${name}.L`;
|
|
45
|
+
return (0, semantics_1.prefix)(pickL, (0, semantics_1.prefix)(pickR, (0, semantics_1.prefix)(eats, (0, semantics_1.prefix)(putR, (0, semantics_1.prefix)(putL, semantics_1.STOP)))));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Tenedor `i`: oscila entre "libre" y "tomado". Solo puede ser tomado o
|
|
49
|
+
* soltado, alternativamente.
|
|
50
|
+
*
|
|
51
|
+
* FORK_i = pick → put → FORK_i
|
|
52
|
+
*
|
|
53
|
+
* En el modelo de Hoare, los nombres de evento son compartidos entre
|
|
54
|
+
* filósofo y tenedor: `pick.phi.X` debe coincidir con el evento
|
|
55
|
+
* correspondiente del fork.
|
|
56
|
+
*
|
|
57
|
+
* Aquí codificamos el deadlock estructuralmente: la composición paralela
|
|
58
|
+
* de N filósofos sin recursión queda en STOP global cuando todos se
|
|
59
|
+
* bloquean.
|
|
60
|
+
*/
|
|
61
|
+
function fork(_forkId, philLeft, philRight) {
|
|
62
|
+
// El tenedor es L para `philLeft` y R para `philRight`.
|
|
63
|
+
const pickL = `pick.${philLeft}.L`;
|
|
64
|
+
const putL = `put.${philLeft}.L`;
|
|
65
|
+
const pickR = `pick.${philRight}.R`;
|
|
66
|
+
const putR = `put.${philRight}.R`;
|
|
67
|
+
// Solo aceptamos cada movimiento UNA vez (modelado finito → deadlock visible).
|
|
68
|
+
return (0, semantics_1.choice)((0, semantics_1.prefix)(pickL, (0, semantics_1.prefix)(putL, semantics_1.STOP)), (0, semantics_1.prefix)(pickR, (0, semantics_1.prefix)(putR, semantics_1.STOP)));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Composición paralela de `n` filósofos circulares con sus tenedores
|
|
72
|
+
* compartidos. El alfabeto de sincronización es exactamente el conjunto
|
|
73
|
+
* de eventos `pick.*` y `put.*` que comparten filósofo y fork.
|
|
74
|
+
*
|
|
75
|
+
* Con `n ≥ 2` y la estrategia ingenua (todos toman primero el izquierdo)
|
|
76
|
+
* llegamos a deadlock estructural una vez todos hicieron `pick.L`.
|
|
77
|
+
*/
|
|
78
|
+
function diningPhilosophers(n) {
|
|
79
|
+
if (n < 2)
|
|
80
|
+
throw new Error('diningPhilosophers requiere n ≥ 2');
|
|
81
|
+
// Construimos `n` filósofos y `n` tenedores en una mesa circular.
|
|
82
|
+
// Fork `i` está entre Phil `i` y Phil `(i+1) mod n`.
|
|
83
|
+
const phils = [];
|
|
84
|
+
const forks = [];
|
|
85
|
+
for (let i = 0; i < n; i++) {
|
|
86
|
+
phils.push(philosopher(`P${i}`));
|
|
87
|
+
}
|
|
88
|
+
for (let i = 0; i < n; i++) {
|
|
89
|
+
const left = `P${i}`;
|
|
90
|
+
const right = `P${(i + 1) % n}`;
|
|
91
|
+
forks.push(fork(i, left, right));
|
|
92
|
+
}
|
|
93
|
+
// Alfabeto: todos los `pick.*` y `put.*`.
|
|
94
|
+
const sync = [];
|
|
95
|
+
for (let i = 0; i < n; i++) {
|
|
96
|
+
sync.push(`pick.P${i}.L`, `pick.P${i}.R`, `put.P${i}.L`, `put.P${i}.R`);
|
|
97
|
+
}
|
|
98
|
+
// Componemos en cascada: ((Phil0 |[A]| Fork0) |[A]| Phil1) |[A]| ...
|
|
99
|
+
let acc = phils[0];
|
|
100
|
+
for (let i = 0; i < n; i++) {
|
|
101
|
+
acc = (0, semantics_1.parallel)(acc, forks[i], sync);
|
|
102
|
+
if (i + 1 < n) {
|
|
103
|
+
acc = (0, semantics_1.parallel)(acc, phils[i + 1], sync);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return acc;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/csp-hoare/examples.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { Event, Process, Trace, FailurePair } from './types';
|
|
2
|
+
export { TICK } from './types';
|
|
3
|
+
export { STOP, SKIP, prefix, choice, internal, parallel, interleave, sequence, hide, rename, recursion, processVar, alphabet, nextEvents, step, internalResolutions, } from './semantics';
|
|
4
|
+
export { traces, failures, isDeadlocked, isLiveLocked, refinesTraces, refinesFailures, } from './analysis';
|
|
5
|
+
export { vendingMachine, vendingMachineLoop, philosopher, diningPhilosophers } from './examples';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/index.ts"],"names":[],"mappings":"AAgBA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// CSP Hoare — Comunicating Sequential Processes (Hoare 1978/1985)
|
|
4
|
+
// ============================================================
|
|
5
|
+
// Cálculo de procesos basado en eventos atómicos sincronizados.
|
|
6
|
+
// A diferencia del π-cálculo (centrado en pasar nombres), CSP modela
|
|
7
|
+
// concurrencia mediante la ocurrencia coordinada de nombres de evento
|
|
8
|
+
// compartidos en el alfabeto del paralelo.
|
|
9
|
+
//
|
|
10
|
+
// Semánticas implementadas:
|
|
11
|
+
// • Traces — qué secuencias de eventos visibles pueden ocurrir.
|
|
12
|
+
// • Failures — pares (traza, refusal) que capturan no-determinismo.
|
|
13
|
+
// • Refinement — P ⊑_T Q y P ⊑_F Q según las semánticas anteriores.
|
|
14
|
+
//
|
|
15
|
+
// Ejemplos canónicos: máquina expendedora, filósofos cenando.
|
|
16
|
+
// ============================================================
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.diningPhilosophers = exports.philosopher = exports.vendingMachineLoop = exports.vendingMachine = exports.refinesFailures = exports.refinesTraces = exports.isLiveLocked = exports.isDeadlocked = exports.failures = exports.traces = exports.internalResolutions = exports.step = exports.nextEvents = exports.alphabet = exports.processVar = exports.recursion = exports.rename = exports.hide = exports.sequence = exports.interleave = exports.parallel = exports.internal = exports.choice = exports.prefix = exports.SKIP = exports.STOP = exports.TICK = void 0;
|
|
19
|
+
var types_1 = require("./types");
|
|
20
|
+
Object.defineProperty(exports, "TICK", { enumerable: true, get: function () { return types_1.TICK; } });
|
|
21
|
+
var semantics_1 = require("./semantics");
|
|
22
|
+
Object.defineProperty(exports, "STOP", { enumerable: true, get: function () { return semantics_1.STOP; } });
|
|
23
|
+
Object.defineProperty(exports, "SKIP", { enumerable: true, get: function () { return semantics_1.SKIP; } });
|
|
24
|
+
Object.defineProperty(exports, "prefix", { enumerable: true, get: function () { return semantics_1.prefix; } });
|
|
25
|
+
Object.defineProperty(exports, "choice", { enumerable: true, get: function () { return semantics_1.choice; } });
|
|
26
|
+
Object.defineProperty(exports, "internal", { enumerable: true, get: function () { return semantics_1.internal; } });
|
|
27
|
+
Object.defineProperty(exports, "parallel", { enumerable: true, get: function () { return semantics_1.parallel; } });
|
|
28
|
+
Object.defineProperty(exports, "interleave", { enumerable: true, get: function () { return semantics_1.interleave; } });
|
|
29
|
+
Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return semantics_1.sequence; } });
|
|
30
|
+
Object.defineProperty(exports, "hide", { enumerable: true, get: function () { return semantics_1.hide; } });
|
|
31
|
+
Object.defineProperty(exports, "rename", { enumerable: true, get: function () { return semantics_1.rename; } });
|
|
32
|
+
Object.defineProperty(exports, "recursion", { enumerable: true, get: function () { return semantics_1.recursion; } });
|
|
33
|
+
Object.defineProperty(exports, "processVar", { enumerable: true, get: function () { return semantics_1.processVar; } });
|
|
34
|
+
Object.defineProperty(exports, "alphabet", { enumerable: true, get: function () { return semantics_1.alphabet; } });
|
|
35
|
+
Object.defineProperty(exports, "nextEvents", { enumerable: true, get: function () { return semantics_1.nextEvents; } });
|
|
36
|
+
Object.defineProperty(exports, "step", { enumerable: true, get: function () { return semantics_1.step; } });
|
|
37
|
+
Object.defineProperty(exports, "internalResolutions", { enumerable: true, get: function () { return semantics_1.internalResolutions; } });
|
|
38
|
+
var analysis_1 = require("./analysis");
|
|
39
|
+
Object.defineProperty(exports, "traces", { enumerable: true, get: function () { return analysis_1.traces; } });
|
|
40
|
+
Object.defineProperty(exports, "failures", { enumerable: true, get: function () { return analysis_1.failures; } });
|
|
41
|
+
Object.defineProperty(exports, "isDeadlocked", { enumerable: true, get: function () { return analysis_1.isDeadlocked; } });
|
|
42
|
+
Object.defineProperty(exports, "isLiveLocked", { enumerable: true, get: function () { return analysis_1.isLiveLocked; } });
|
|
43
|
+
Object.defineProperty(exports, "refinesTraces", { enumerable: true, get: function () { return analysis_1.refinesTraces; } });
|
|
44
|
+
Object.defineProperty(exports, "refinesFailures", { enumerable: true, get: function () { return analysis_1.refinesFailures; } });
|
|
45
|
+
var examples_1 = require("./examples");
|
|
46
|
+
Object.defineProperty(exports, "vendingMachine", { enumerable: true, get: function () { return examples_1.vendingMachine; } });
|
|
47
|
+
Object.defineProperty(exports, "vendingMachineLoop", { enumerable: true, get: function () { return examples_1.vendingMachineLoop; } });
|
|
48
|
+
Object.defineProperty(exports, "philosopher", { enumerable: true, get: function () { return examples_1.philosopher; } });
|
|
49
|
+
Object.defineProperty(exports, "diningPhilosophers", { enumerable: true, get: function () { return examples_1.diningPhilosophers; } });
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/csp-hoare/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kEAAkE;AAClE,+DAA+D;AAC/D,gEAAgE;AAChE,qEAAqE;AACrE,sEAAsE;AACtE,2CAA2C;AAC3C,EAAE;AACF,4BAA4B;AAC5B,kEAAkE;AAClE,sEAAsE;AACtE,sEAAsE;AACtE,EAAE;AACF,8DAA8D;AAC9D,+DAA+D;;;AAG/D,iCAA+B;AAAtB,6FAAA,IAAI,OAAA;AAEb,yCAiBqB;AAhBnB,iGAAA,IAAI,OAAA;AACJ,iGAAA,IAAI,OAAA;AACJ,mGAAA,MAAM,OAAA;AACN,mGAAA,MAAM,OAAA;AACN,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,iGAAA,IAAI,OAAA;AACJ,mGAAA,MAAM,OAAA;AACN,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,uGAAA,UAAU,OAAA;AACV,iGAAA,IAAI,OAAA;AACJ,gHAAA,mBAAmB,OAAA;AAGrB,uCAOoB;AANlB,kGAAA,MAAM,OAAA;AACN,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AAGjB,uCAAiG;AAAxF,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,8GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Event, Process } from './types';
|
|
2
|
+
export declare const STOP: Process;
|
|
3
|
+
export declare const SKIP: Process;
|
|
4
|
+
export declare function prefix(event: Event, cont: Process): Process;
|
|
5
|
+
export declare function choice(left: Process, right: Process): Process;
|
|
6
|
+
export declare function internal(left: Process, right: Process): Process;
|
|
7
|
+
export declare function parallel(left: Process, right: Process, alphabet: Event[]): Process;
|
|
8
|
+
export declare function interleave(left: Process, right: Process): Process;
|
|
9
|
+
export declare function sequence(left: Process, right: Process): Process;
|
|
10
|
+
export declare function hide(process: Process, events: Event[]): Process;
|
|
11
|
+
export declare function rename(process: Process, mapping: Map<Event, Event>): Process;
|
|
12
|
+
export declare function recursion(name: string, body: Process): Process;
|
|
13
|
+
export declare function processVar(name: string): Process;
|
|
14
|
+
/**
|
|
15
|
+
* Conjunto de eventos visibles mencionados sintácticamente en `p`.
|
|
16
|
+
* Los eventos renombrados aportan tanto la fuente como el destino
|
|
17
|
+
* (la fuente puede aparecer en una rama no recorrida, y el destino
|
|
18
|
+
* es lo que el entorno observa).
|
|
19
|
+
*/
|
|
20
|
+
export declare function alphabet(p: Process): Set<Event>;
|
|
21
|
+
/**
|
|
22
|
+
* Eventos visibles que `p` puede ofrecer inmediatamente como su primer
|
|
23
|
+
* evento (tomando todas las resoluciones internas). No incluye τ (los
|
|
24
|
+
* eventos ocultos son silenciosos por construcción).
|
|
25
|
+
*
|
|
26
|
+
* Para `SKIP` reportamos el tick `✓` — termina exitosamente.
|
|
27
|
+
*/
|
|
28
|
+
export declare function nextEvents(p: Process): Set<Event>;
|
|
29
|
+
/**
|
|
30
|
+
* `step(P, a)` aplica una transición visible etiquetada con `a` y devuelve
|
|
31
|
+
* el continuante, o `null` si `a` no está habilitado. Para procesos no-
|
|
32
|
+
* deterministas elegimos arbitrariamente cualquier rama que habilite `a`
|
|
33
|
+
* (eso es válido para análisis de trazas; para failures inspeccionamos
|
|
34
|
+
* todas las resoluciones aparte).
|
|
35
|
+
*/
|
|
36
|
+
export declare function step(p: Process, event: Event): Process | null;
|
|
37
|
+
/**
|
|
38
|
+
* Enumera todos los estados "estables" alcanzables desde `p` resolviendo
|
|
39
|
+
* elecciones internas (`⊓`) y desplegando recursiones inmediatas, sin
|
|
40
|
+
* consumir eventos visibles. Útil para la semántica de failures, donde
|
|
41
|
+
* el conjunto de refusal depende de QUÉ rama interna se eligió.
|
|
42
|
+
*
|
|
43
|
+
* Devuelve procesos sin un `internal` en la raíz (después de empujarlo
|
|
44
|
+
* hacia adentro de operadores asociativos cuando aplica). El número de
|
|
45
|
+
* resoluciones es 2^(# de internals encadenados), así que limitamos a un
|
|
46
|
+
* número razonable para no explotar.
|
|
47
|
+
*/
|
|
48
|
+
export declare function internalResolutions(p: Process, limit?: number): Process[];
|
|
49
|
+
//# sourceMappingURL=semantics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/semantics.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAK9C,eAAO,MAAM,IAAI,EAAE,OAA0B,CAAC;AAC9C,eAAO,MAAM,IAAI,EAAE,OAA0B,CAAC;AAE9C,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAE3D;AACD,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7D;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAElF;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjE;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AACD,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAE/D;AACD,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAE5E;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAE9D;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAID;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAI/C;AAiHD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAIjD;AA8GD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAE7D;AA0HD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE,CAIrE"}
|