@stevenvo780/st-lang 4.7.0 → 4.9.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/logic/profiles/quantum/index.d.ts +153 -0
- package/dist/logic/profiles/quantum/index.d.ts.map +1 -0
- package/dist/logic/profiles/quantum/index.js +788 -0
- package/dist/logic/profiles/quantum/index.js.map +1 -0
- package/dist/namespaces/reasoning.d.ts +3 -1
- package/dist/namespaces/reasoning.d.ts.map +1 -1
- package/dist/namespaces/reasoning.js +5 -1
- package/dist/namespaces/reasoning.js.map +1 -1
- package/dist/proof-systems/certificate/canonical.d.ts +18 -0
- package/dist/proof-systems/certificate/canonical.d.ts.map +1 -0
- package/dist/proof-systems/certificate/canonical.js +79 -0
- package/dist/proof-systems/certificate/canonical.js.map +1 -0
- package/dist/proof-systems/certificate/generate.d.ts +39 -0
- package/dist/proof-systems/certificate/generate.d.ts.map +1 -0
- package/dist/proof-systems/certificate/generate.js +259 -0
- package/dist/proof-systems/certificate/generate.js.map +1 -0
- package/dist/proof-systems/certificate/index.d.ts +7 -0
- package/dist/proof-systems/certificate/index.d.ts.map +1 -0
- package/dist/proof-systems/certificate/index.js +23 -0
- package/dist/proof-systems/certificate/index.js.map +1 -0
- package/dist/proof-systems/certificate/lfsc.d.ts +15 -0
- package/dist/proof-systems/certificate/lfsc.d.ts.map +1 -0
- package/dist/proof-systems/certificate/lfsc.js +395 -0
- package/dist/proof-systems/certificate/lfsc.js.map +1 -0
- package/dist/proof-systems/certificate/rules.d.ts +8 -0
- package/dist/proof-systems/certificate/rules.d.ts.map +1 -0
- package/dist/proof-systems/certificate/rules.js +369 -0
- package/dist/proof-systems/certificate/rules.js.map +1 -0
- package/dist/proof-systems/certificate/types.d.ts +114 -0
- package/dist/proof-systems/certificate/types.d.ts.map +1 -0
- package/dist/proof-systems/certificate/types.js +18 -0
- package/dist/proof-systems/certificate/types.js.map +1 -0
- package/dist/proof-systems/certificate/verify.d.ts +20 -0
- package/dist/proof-systems/certificate/verify.d.ts.map +1 -0
- package/dist/proof-systems/certificate/verify.js +171 -0
- package/dist/proof-systems/certificate/verify.js.map +1 -0
- package/dist/reasoning/ban-logic/analyze.d.ts +31 -0
- package/dist/reasoning/ban-logic/analyze.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/analyze.js +113 -0
- package/dist/reasoning/ban-logic/analyze.js.map +1 -0
- package/dist/reasoning/ban-logic/index.d.ts +7 -0
- package/dist/reasoning/ban-logic/index.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/index.js +66 -0
- package/dist/reasoning/ban-logic/index.js.map +1 -0
- package/dist/reasoning/ban-logic/protocols.d.ts +54 -0
- package/dist/reasoning/ban-logic/protocols.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/protocols.js +219 -0
- package/dist/reasoning/ban-logic/protocols.js.map +1 -0
- package/dist/reasoning/ban-logic/rules.d.ts +83 -0
- package/dist/reasoning/ban-logic/rules.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/rules.js +409 -0
- package/dist/reasoning/ban-logic/rules.js.map +1 -0
- package/dist/reasoning/ban-logic/terms.d.ts +26 -0
- package/dist/reasoning/ban-logic/terms.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/terms.js +262 -0
- package/dist/reasoning/ban-logic/terms.js.map +1 -0
- package/dist/reasoning/ban-logic/types.d.ts +107 -0
- package/dist/reasoning/ban-logic/types.d.ts.map +1 -0
- package/dist/reasoning/ban-logic/types.js +27 -0
- package/dist/reasoning/ban-logic/types.js.map +1 -0
- package/dist/reasoning/combinatorial-games/index.d.ts +105 -0
- package/dist/reasoning/combinatorial-games/index.d.ts.map +1 -0
- package/dist/reasoning/combinatorial-games/index.js +377 -0
- package/dist/reasoning/combinatorial-games/index.js.map +1 -0
- package/dist/reasoning/differential-privacy/index.d.ts +121 -0
- package/dist/reasoning/differential-privacy/index.d.ts.map +1 -0
- package/dist/reasoning/differential-privacy/index.js +417 -0
- package/dist/reasoning/differential-privacy/index.js.map +1 -0
- package/dist/reasoning/mechanism-design/auctions.d.ts +49 -0
- package/dist/reasoning/mechanism-design/auctions.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/auctions.js +179 -0
- package/dist/reasoning/mechanism-design/auctions.js.map +1 -0
- package/dist/reasoning/mechanism-design/index.d.ts +5 -0
- package/dist/reasoning/mechanism-design/index.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/index.js +39 -0
- package/dist/reasoning/mechanism-design/index.js.map +1 -0
- package/dist/reasoning/mechanism-design/myerson.d.ts +64 -0
- package/dist/reasoning/mechanism-design/myerson.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/myerson.js +253 -0
- package/dist/reasoning/mechanism-design/myerson.js.map +1 -0
- package/dist/reasoning/mechanism-design/types.d.ts +44 -0
- package/dist/reasoning/mechanism-design/types.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/types.js +22 -0
- package/dist/reasoning/mechanism-design/types.js.map +1 -0
- package/dist/reasoning/mechanism-design/vcg.d.ts +29 -0
- package/dist/reasoning/mechanism-design/vcg.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/vcg.js +305 -0
- package/dist/reasoning/mechanism-design/vcg.js.map +1 -0
- package/dist/reasoning/probabilistic/distributions.d.ts +44 -0
- package/dist/reasoning/probabilistic/distributions.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/distributions.js +207 -0
- package/dist/reasoning/probabilistic/distributions.js.map +1 -0
- package/dist/reasoning/probabilistic/examples.d.ts +31 -0
- package/dist/reasoning/probabilistic/examples.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/examples.js +85 -0
- package/dist/reasoning/probabilistic/examples.js.map +1 -0
- package/dist/reasoning/probabilistic/index.d.ts +6 -0
- package/dist/reasoning/probabilistic/index.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/index.js +42 -0
- package/dist/reasoning/probabilistic/index.js.map +1 -0
- package/dist/reasoning/probabilistic/inference.d.ts +45 -0
- package/dist/reasoning/probabilistic/inference.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/inference.js +579 -0
- package/dist/reasoning/probabilistic/inference.js.map +1 -0
- package/dist/reasoning/probabilistic/types.d.ts +153 -0
- package/dist/reasoning/probabilistic/types.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/types.js +37 -0
- package/dist/reasoning/probabilistic/types.js.map +1 -0
- package/dist/solver/smt-z3/index.d.ts +3 -0
- package/dist/solver/smt-z3/index.d.ts.map +1 -0
- package/dist/solver/smt-z3/index.js +11 -0
- package/dist/solver/smt-z3/index.js.map +1 -0
- package/dist/solver/smt-z3/types.d.ts +52 -0
- package/dist/solver/smt-z3/types.d.ts.map +1 -0
- package/dist/solver/smt-z3/types.js +6 -0
- package/dist/solver/smt-z3/types.js.map +1 -0
- package/dist/solver/smt-z3/z3-wasm-backend.d.ts +88 -0
- package/dist/solver/smt-z3/z3-wasm-backend.d.ts.map +1 -0
- package/dist/solver/smt-z3/z3-wasm-backend.js +437 -0
- package/dist/solver/smt-z3/z3-wasm-backend.js.map +1 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.d.ts +2 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.d.ts.map +1 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.js +209 -0
- package/dist/tests/logic/profiles/quantum/quantum.test.js.map +1 -0
- package/dist/tests/proof-systems/certificate/certificate.test.d.ts +2 -0
- package/dist/tests/proof-systems/certificate/certificate.test.d.ts.map +1 -0
- package/dist/tests/proof-systems/certificate/certificate.test.js +449 -0
- package/dist/tests/proof-systems/certificate/certificate.test.js.map +1 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts +2 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts.map +1 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.js +270 -0
- package/dist/tests/reasoning/ban-logic/ban-logic.test.js.map +1 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts +2 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts.map +1 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js +203 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js.map +1 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts +2 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts.map +1 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js +388 -0
- package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js.map +1 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts +2 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts.map +1 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js +290 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js.map +1 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts +2 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts.map +1 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.js +370 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.js.map +1 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts +2 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts.map +1 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js +394 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js.map +1 -0
- package/dist/tests/tooling/mathlib/mathlib.test.d.ts +2 -0
- package/dist/tests/tooling/mathlib/mathlib.test.d.ts.map +1 -0
- package/dist/tests/tooling/mathlib/mathlib.test.js +214 -0
- package/dist/tests/tooling/mathlib/mathlib.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/features.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/features.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/features.test.js +72 -0
- package/dist/tests/tooling/proof-guidance/features.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/model.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/model.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/model.test.js +165 -0
- package/dist/tests/tooling/proof-guidance/model.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/search.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/search.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/search.test.js +238 -0
- package/dist/tests/tooling/proof-guidance/search.test.js.map +1 -0
- package/dist/tests/type-theory/cubical/cubical.test.d.ts +2 -0
- package/dist/tests/type-theory/cubical/cubical.test.d.ts.map +1 -0
- package/dist/tests/type-theory/cubical/cubical.test.js +207 -0
- package/dist/tests/type-theory/cubical/cubical.test.js.map +1 -0
- package/dist/tests/type-theory/effects/effects.test.d.ts +2 -0
- package/dist/tests/type-theory/effects/effects.test.d.ts.map +1 -0
- package/dist/tests/type-theory/effects/effects.test.js +242 -0
- package/dist/tests/type-theory/effects/effects.test.js.map +1 -0
- package/dist/tooling/mathlib/group.d.ts +27 -0
- package/dist/tooling/mathlib/group.d.ts.map +1 -0
- package/dist/tooling/mathlib/group.js +89 -0
- package/dist/tooling/mathlib/group.js.map +1 -0
- package/dist/tooling/mathlib/index.d.ts +8 -0
- package/dist/tooling/mathlib/index.d.ts.map +1 -0
- package/dist/tooling/mathlib/index.js +40 -0
- package/dist/tooling/mathlib/index.js.map +1 -0
- package/dist/tooling/mathlib/instances.d.ts +29 -0
- package/dist/tooling/mathlib/instances.d.ts.map +1 -0
- package/dist/tooling/mathlib/instances.js +139 -0
- package/dist/tooling/mathlib/instances.js.map +1 -0
- package/dist/tooling/mathlib/lemmas.d.ts +3 -0
- package/dist/tooling/mathlib/lemmas.d.ts.map +1 -0
- package/dist/tooling/mathlib/lemmas.js +72 -0
- package/dist/tooling/mathlib/lemmas.js.map +1 -0
- package/dist/tooling/mathlib/order.d.ts +29 -0
- package/dist/tooling/mathlib/order.d.ts.map +1 -0
- package/dist/tooling/mathlib/order.js +91 -0
- package/dist/tooling/mathlib/order.js.map +1 -0
- package/dist/tooling/mathlib/ring.d.ts +15 -0
- package/dist/tooling/mathlib/ring.d.ts.map +1 -0
- package/dist/tooling/mathlib/ring.js +91 -0
- package/dist/tooling/mathlib/ring.js.map +1 -0
- package/dist/tooling/mathlib/types.d.ts +62 -0
- package/dist/tooling/mathlib/types.d.ts.map +1 -0
- package/dist/tooling/mathlib/types.js +7 -0
- package/dist/tooling/mathlib/types.js.map +1 -0
- package/dist/tooling/proof-guidance/features.d.ts +10 -0
- package/dist/tooling/proof-guidance/features.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/features.js +97 -0
- package/dist/tooling/proof-guidance/features.js.map +1 -0
- package/dist/tooling/proof-guidance/index.d.ts +5 -0
- package/dist/tooling/proof-guidance/index.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/index.js +25 -0
- package/dist/tooling/proof-guidance/index.js.map +1 -0
- package/dist/tooling/proof-guidance/model.d.ts +42 -0
- package/dist/tooling/proof-guidance/model.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/model.js +149 -0
- package/dist/tooling/proof-guidance/model.js.map +1 -0
- package/dist/tooling/proof-guidance/search.d.ts +7 -0
- package/dist/tooling/proof-guidance/search.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/search.js +102 -0
- package/dist/tooling/proof-guidance/search.js.map +1 -0
- package/dist/tooling/proof-guidance/types.d.ts +77 -0
- package/dist/tooling/proof-guidance/types.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/types.js +8 -0
- package/dist/tooling/proof-guidance/types.js.map +1 -0
- package/dist/type-theory/cubical/equality.d.ts +4 -0
- package/dist/type-theory/cubical/equality.d.ts.map +1 -0
- package/dist/type-theory/cubical/equality.js +78 -0
- package/dist/type-theory/cubical/equality.js.map +1 -0
- package/dist/type-theory/cubical/index.d.ts +14 -0
- package/dist/type-theory/cubical/index.d.ts.map +1 -0
- package/dist/type-theory/cubical/index.js +71 -0
- package/dist/type-theory/cubical/index.js.map +1 -0
- package/dist/type-theory/cubical/infer.d.ts +18 -0
- package/dist/type-theory/cubical/infer.d.ts.map +1 -0
- package/dist/type-theory/cubical/infer.js +241 -0
- package/dist/type-theory/cubical/infer.js.map +1 -0
- package/dist/type-theory/cubical/interval.d.ts +12 -0
- package/dist/type-theory/cubical/interval.d.ts.map +1 -0
- package/dist/type-theory/cubical/interval.js +118 -0
- package/dist/type-theory/cubical/interval.js.map +1 -0
- package/dist/type-theory/cubical/normalize.d.ts +5 -0
- package/dist/type-theory/cubical/normalize.d.ts.map +1 -0
- package/dist/type-theory/cubical/normalize.js +191 -0
- package/dist/type-theory/cubical/normalize.js.map +1 -0
- package/dist/type-theory/cubical/path-algebra.d.ts +12 -0
- package/dist/type-theory/cubical/path-algebra.d.ts.map +1 -0
- package/dist/type-theory/cubical/path-algebra.js +109 -0
- package/dist/type-theory/cubical/path-algebra.js.map +1 -0
- package/dist/type-theory/cubical/substitute.d.ts +3 -0
- package/dist/type-theory/cubical/substitute.d.ts.map +1 -0
- package/dist/type-theory/cubical/substitute.js +109 -0
- package/dist/type-theory/cubical/substitute.js.map +1 -0
- package/dist/type-theory/cubical/types.d.ts +77 -0
- package/dist/type-theory/cubical/types.d.ts.map +1 -0
- package/dist/type-theory/cubical/types.js +258 -0
- package/dist/type-theory/cubical/types.js.map +1 -0
- package/dist/type-theory/effects/core.d.ts +27 -0
- package/dist/type-theory/effects/core.d.ts.map +1 -0
- package/dist/type-theory/effects/core.js +79 -0
- package/dist/type-theory/effects/core.js.map +1 -0
- package/dist/type-theory/effects/exception.d.ts +18 -0
- package/dist/type-theory/effects/exception.d.ts.map +1 -0
- package/dist/type-theory/effects/exception.js +59 -0
- package/dist/type-theory/effects/exception.js.map +1 -0
- package/dist/type-theory/effects/index.d.ts +11 -0
- package/dist/type-theory/effects/index.d.ts.map +1 -0
- package/dist/type-theory/effects/index.js +50 -0
- package/dist/type-theory/effects/index.js.map +1 -0
- package/dist/type-theory/effects/reader.d.ts +20 -0
- package/dist/type-theory/effects/reader.d.ts.map +1 -0
- package/dist/type-theory/effects/reader.js +62 -0
- package/dist/type-theory/effects/reader.js.map +1 -0
- package/dist/type-theory/effects/state.d.ts +31 -0
- package/dist/type-theory/effects/state.d.ts.map +1 -0
- package/dist/type-theory/effects/state.js +91 -0
- package/dist/type-theory/effects/state.js.map +1 -0
- package/dist/type-theory/effects/types.d.ts +45 -0
- package/dist/type-theory/effects/types.d.ts.map +1 -0
- package/dist/type-theory/effects/types.js +21 -0
- package/dist/type-theory/effects/types.js.map +1 -0
- package/dist/type-theory/effects/writer.d.ts +30 -0
- package/dist/type-theory/effects/writer.d.ts.map +1 -0
- package/dist/type-theory/effects/writer.js +79 -0
- package/dist/type-theory/effects/writer.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// BAN Logic — Constructores y equality de términos/fórmulas
|
|
4
|
+
// ============================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.formulaAnd = exports.controls = exports.sharedSecret = exports.publicKey = exports.sharedKey = exports.fresh = exports.jurisdiction = exports.saidMessage = exports.said = exports.sees = exports.believes = exports.compound = exports.hashed = exports.encrypted = exports.message = exports.atom = exports.nonce = exports.key = exports.principal = void 0;
|
|
7
|
+
exports.termEquals = termEquals;
|
|
8
|
+
exports.formulaEquals = formulaEquals;
|
|
9
|
+
exports.hasFormula = hasFormula;
|
|
10
|
+
exports.termToString = termToString;
|
|
11
|
+
exports.formulaToString = formulaToString;
|
|
12
|
+
/* ── Constructores de términos ── */
|
|
13
|
+
const principal = (name) => ({ kind: 'principal', name });
|
|
14
|
+
exports.principal = principal;
|
|
15
|
+
const key = (name, shared) => shared ? { kind: 'key', name, shared } : { kind: 'key', name };
|
|
16
|
+
exports.key = key;
|
|
17
|
+
const nonce = (name) => ({ kind: 'nonce', name });
|
|
18
|
+
exports.nonce = nonce;
|
|
19
|
+
const atom = (name) => ({ kind: 'atom', name });
|
|
20
|
+
exports.atom = atom;
|
|
21
|
+
const message = (...content) => ({ kind: 'message', content });
|
|
22
|
+
exports.message = message;
|
|
23
|
+
const encrypted = (msg, k) => ({
|
|
24
|
+
kind: 'encrypted',
|
|
25
|
+
message: msg,
|
|
26
|
+
key: k,
|
|
27
|
+
});
|
|
28
|
+
exports.encrypted = encrypted;
|
|
29
|
+
const hashed = (msg) => ({ kind: 'hashed', message: msg });
|
|
30
|
+
exports.hashed = hashed;
|
|
31
|
+
const compound = (...parts) => ({ kind: 'compound', parts });
|
|
32
|
+
exports.compound = compound;
|
|
33
|
+
/* ── Constructores de fórmulas ── */
|
|
34
|
+
const believes = (p, f) => ({
|
|
35
|
+
kind: 'believes',
|
|
36
|
+
principal: p,
|
|
37
|
+
about: f,
|
|
38
|
+
});
|
|
39
|
+
exports.believes = believes;
|
|
40
|
+
const sees = (p, w) => ({
|
|
41
|
+
kind: 'sees',
|
|
42
|
+
principal: p,
|
|
43
|
+
what: w,
|
|
44
|
+
});
|
|
45
|
+
exports.sees = sees;
|
|
46
|
+
const said = (p, f) => ({
|
|
47
|
+
kind: 'said',
|
|
48
|
+
principal: p,
|
|
49
|
+
what: f,
|
|
50
|
+
});
|
|
51
|
+
exports.said = said;
|
|
52
|
+
const saidMessage = (p, w) => ({
|
|
53
|
+
kind: 'said-message',
|
|
54
|
+
principal: p,
|
|
55
|
+
what: w,
|
|
56
|
+
});
|
|
57
|
+
exports.saidMessage = saidMessage;
|
|
58
|
+
const jurisdiction = (p, f) => ({
|
|
59
|
+
kind: 'jurisdiction',
|
|
60
|
+
principal: p,
|
|
61
|
+
over: f,
|
|
62
|
+
});
|
|
63
|
+
exports.jurisdiction = jurisdiction;
|
|
64
|
+
const fresh = (w) => ({ kind: 'fresh', what: w });
|
|
65
|
+
exports.fresh = fresh;
|
|
66
|
+
const sharedKey = (a, b, k) => ({
|
|
67
|
+
kind: 'sharedKey',
|
|
68
|
+
a,
|
|
69
|
+
b,
|
|
70
|
+
key: k,
|
|
71
|
+
});
|
|
72
|
+
exports.sharedKey = sharedKey;
|
|
73
|
+
const publicKey = (p, k) => ({
|
|
74
|
+
kind: 'publicKey',
|
|
75
|
+
principal: p,
|
|
76
|
+
key: k,
|
|
77
|
+
});
|
|
78
|
+
exports.publicKey = publicKey;
|
|
79
|
+
const sharedSecret = (a, b, s) => ({
|
|
80
|
+
kind: 'sharedSecret',
|
|
81
|
+
a,
|
|
82
|
+
b,
|
|
83
|
+
secret: s,
|
|
84
|
+
});
|
|
85
|
+
exports.sharedSecret = sharedSecret;
|
|
86
|
+
const controls = (p, f) => ({
|
|
87
|
+
kind: 'controls',
|
|
88
|
+
principal: p,
|
|
89
|
+
statement: f,
|
|
90
|
+
});
|
|
91
|
+
exports.controls = controls;
|
|
92
|
+
const formulaAnd = (left, right) => ({
|
|
93
|
+
kind: 'formula-and',
|
|
94
|
+
left,
|
|
95
|
+
right,
|
|
96
|
+
});
|
|
97
|
+
exports.formulaAnd = formulaAnd;
|
|
98
|
+
/* ── Igualdad estructural ── */
|
|
99
|
+
function termEquals(a, b) {
|
|
100
|
+
if (a.kind !== b.kind)
|
|
101
|
+
return false;
|
|
102
|
+
switch (a.kind) {
|
|
103
|
+
case 'principal':
|
|
104
|
+
case 'nonce':
|
|
105
|
+
case 'atom':
|
|
106
|
+
// narrow b to a kind with .name
|
|
107
|
+
return b.name === a.name;
|
|
108
|
+
case 'key': {
|
|
109
|
+
const bk = b;
|
|
110
|
+
if (bk.name !== a.name)
|
|
111
|
+
return false;
|
|
112
|
+
const as = a.shared;
|
|
113
|
+
const bs = bk.shared;
|
|
114
|
+
if (!as && !bs)
|
|
115
|
+
return true;
|
|
116
|
+
if (!as || !bs)
|
|
117
|
+
return false;
|
|
118
|
+
// Shared pair es bi-direccional: {A,B} == {B,A}.
|
|
119
|
+
return (as[0] === bs[0] && as[1] === bs[1]) || (as[0] === bs[1] && as[1] === bs[0]);
|
|
120
|
+
}
|
|
121
|
+
case 'message': {
|
|
122
|
+
const bm = b;
|
|
123
|
+
if (a.content.length !== bm.content.length)
|
|
124
|
+
return false;
|
|
125
|
+
for (let i = 0; i < a.content.length; i++) {
|
|
126
|
+
const ai = a.content[i];
|
|
127
|
+
const bi = bm.content[i];
|
|
128
|
+
if (!ai || !bi)
|
|
129
|
+
return false;
|
|
130
|
+
if (!termEquals(ai, bi))
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
case 'compound': {
|
|
136
|
+
const bc = b;
|
|
137
|
+
if (a.parts.length !== bc.parts.length)
|
|
138
|
+
return false;
|
|
139
|
+
for (let i = 0; i < a.parts.length; i++) {
|
|
140
|
+
const ai = a.parts[i];
|
|
141
|
+
const bi = bc.parts[i];
|
|
142
|
+
if (!ai || !bi)
|
|
143
|
+
return false;
|
|
144
|
+
if (!termEquals(ai, bi))
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
case 'encrypted': {
|
|
150
|
+
const be = b;
|
|
151
|
+
return termEquals(a.message, be.message) && termEquals(a.key, be.key);
|
|
152
|
+
}
|
|
153
|
+
case 'hashed': {
|
|
154
|
+
const bh = b;
|
|
155
|
+
return termEquals(a.message, bh.message);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function formulaEquals(a, b) {
|
|
160
|
+
if (a.kind !== b.kind)
|
|
161
|
+
return false;
|
|
162
|
+
switch (a.kind) {
|
|
163
|
+
case 'believes': {
|
|
164
|
+
const bb = b;
|
|
165
|
+
return termEquals(a.principal, bb.principal) && formulaEquals(a.about, bb.about);
|
|
166
|
+
}
|
|
167
|
+
case 'sees': {
|
|
168
|
+
const bs = b;
|
|
169
|
+
return termEquals(a.principal, bs.principal) && termEquals(a.what, bs.what);
|
|
170
|
+
}
|
|
171
|
+
case 'said': {
|
|
172
|
+
const bs = b;
|
|
173
|
+
return termEquals(a.principal, bs.principal) && formulaEquals(a.what, bs.what);
|
|
174
|
+
}
|
|
175
|
+
case 'said-message': {
|
|
176
|
+
const bs = b;
|
|
177
|
+
return termEquals(a.principal, bs.principal) && termEquals(a.what, bs.what);
|
|
178
|
+
}
|
|
179
|
+
case 'jurisdiction': {
|
|
180
|
+
const bj = b;
|
|
181
|
+
return termEquals(a.principal, bj.principal) && formulaEquals(a.over, bj.over);
|
|
182
|
+
}
|
|
183
|
+
case 'fresh': {
|
|
184
|
+
const bf = b;
|
|
185
|
+
return termEquals(a.what, bf.what);
|
|
186
|
+
}
|
|
187
|
+
case 'sharedKey': {
|
|
188
|
+
const bs = b;
|
|
189
|
+
// El predicado "A ↔K B" es simétrico en (A,B).
|
|
190
|
+
const ab = termEquals(a.a, bs.a) && termEquals(a.b, bs.b);
|
|
191
|
+
const ba = termEquals(a.a, bs.b) && termEquals(a.b, bs.a);
|
|
192
|
+
return (ab || ba) && termEquals(a.key, bs.key);
|
|
193
|
+
}
|
|
194
|
+
case 'publicKey': {
|
|
195
|
+
const bp = b;
|
|
196
|
+
return termEquals(a.principal, bp.principal) && termEquals(a.key, bp.key);
|
|
197
|
+
}
|
|
198
|
+
case 'sharedSecret': {
|
|
199
|
+
const bs = b;
|
|
200
|
+
const ab = termEquals(a.a, bs.a) && termEquals(a.b, bs.b);
|
|
201
|
+
const ba = termEquals(a.a, bs.b) && termEquals(a.b, bs.a);
|
|
202
|
+
return (ab || ba) && termEquals(a.secret, bs.secret);
|
|
203
|
+
}
|
|
204
|
+
case 'controls': {
|
|
205
|
+
const bc = b;
|
|
206
|
+
return termEquals(a.principal, bc.principal) && formulaEquals(a.statement, bc.statement);
|
|
207
|
+
}
|
|
208
|
+
case 'formula-and': {
|
|
209
|
+
const ba = b;
|
|
210
|
+
return formulaEquals(a.left, ba.left) && formulaEquals(a.right, ba.right);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function hasFormula(state, target) {
|
|
215
|
+
return state.some((f) => formulaEquals(f, target));
|
|
216
|
+
}
|
|
217
|
+
/* ── Pretty printing ── */
|
|
218
|
+
function termToString(t) {
|
|
219
|
+
switch (t.kind) {
|
|
220
|
+
case 'principal':
|
|
221
|
+
case 'nonce':
|
|
222
|
+
case 'atom':
|
|
223
|
+
return t.name;
|
|
224
|
+
case 'key':
|
|
225
|
+
return t.shared ? `K_${t.shared[0]}${t.shared[1]}` : t.name;
|
|
226
|
+
case 'message':
|
|
227
|
+
return `<${t.content.map(termToString).join(', ')}>`;
|
|
228
|
+
case 'compound':
|
|
229
|
+
return `(${t.parts.map(termToString).join(' · ')})`;
|
|
230
|
+
case 'encrypted':
|
|
231
|
+
return `{${termToString(t.message)}}_${termToString(t.key)}`;
|
|
232
|
+
case 'hashed':
|
|
233
|
+
return `H(${termToString(t.message)})`;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function formulaToString(f) {
|
|
237
|
+
switch (f.kind) {
|
|
238
|
+
case 'believes':
|
|
239
|
+
return `${termToString(f.principal)} |≡ ${formulaToString(f.about)}`;
|
|
240
|
+
case 'sees':
|
|
241
|
+
return `${termToString(f.principal)} ◁ ${termToString(f.what)}`;
|
|
242
|
+
case 'said':
|
|
243
|
+
return `${termToString(f.principal)} |~ ${formulaToString(f.what)}`;
|
|
244
|
+
case 'said-message':
|
|
245
|
+
return `${termToString(f.principal)} |~ ${termToString(f.what)}`;
|
|
246
|
+
case 'jurisdiction':
|
|
247
|
+
return `${termToString(f.principal)} |⇒ ${formulaToString(f.over)}`;
|
|
248
|
+
case 'fresh':
|
|
249
|
+
return `#(${termToString(f.what)})`;
|
|
250
|
+
case 'sharedKey':
|
|
251
|
+
return `${termToString(f.a)} ↔${termToString(f.key)} ${termToString(f.b)}`;
|
|
252
|
+
case 'publicKey':
|
|
253
|
+
return `|→${termToString(f.key)} ${termToString(f.principal)}`;
|
|
254
|
+
case 'sharedSecret':
|
|
255
|
+
return `${termToString(f.a)} ⇌${termToString(f.secret)} ${termToString(f.b)}`;
|
|
256
|
+
case 'controls':
|
|
257
|
+
return `${termToString(f.principal)} |⇒ ${formulaToString(f.statement)}`;
|
|
258
|
+
case 'formula-and':
|
|
259
|
+
return `(${formulaToString(f.left)}) ∧ (${formulaToString(f.right)})`;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=terms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terms.js","sourceRoot":"","sources":["../../../src/reasoning/ban-logic/terms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Un término BAN es un objeto del dominio: principal (agente), clave,
|
|
3
|
+
* nonce, mensaje compuesto, mensaje cifrado, hash o término genérico.
|
|
4
|
+
*/
|
|
5
|
+
export type BANTerm = {
|
|
6
|
+
kind: 'principal';
|
|
7
|
+
name: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'key';
|
|
10
|
+
name: string;
|
|
11
|
+
shared?: [string, string];
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'nonce';
|
|
14
|
+
name: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: 'message';
|
|
17
|
+
content: BANTerm[];
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'encrypted';
|
|
20
|
+
message: BANTerm;
|
|
21
|
+
key: BANTerm;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'hashed';
|
|
24
|
+
message: BANTerm;
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'compound';
|
|
27
|
+
parts: BANTerm[];
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'atom';
|
|
30
|
+
name: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Una fórmula BAN es una proposición sobre creencias, posesión o
|
|
34
|
+
* propiedades de términos. Es lo que las reglas manipulan.
|
|
35
|
+
*
|
|
36
|
+
* Nota: tratamos `said` y `said-message` por separado porque BAN distingue
|
|
37
|
+
* entre "P dijo una fórmula completa" (raro) y "P dijo un término"
|
|
38
|
+
* (caso usual; lo que aparece en mensajes ciphered).
|
|
39
|
+
*/
|
|
40
|
+
export type BANFormula = {
|
|
41
|
+
kind: 'believes';
|
|
42
|
+
principal: BANTerm;
|
|
43
|
+
about: BANFormula;
|
|
44
|
+
} | {
|
|
45
|
+
kind: 'sees';
|
|
46
|
+
principal: BANTerm;
|
|
47
|
+
what: BANTerm;
|
|
48
|
+
} | {
|
|
49
|
+
kind: 'said';
|
|
50
|
+
principal: BANTerm;
|
|
51
|
+
what: BANFormula;
|
|
52
|
+
} | {
|
|
53
|
+
kind: 'said-message';
|
|
54
|
+
principal: BANTerm;
|
|
55
|
+
what: BANTerm;
|
|
56
|
+
} | {
|
|
57
|
+
kind: 'jurisdiction';
|
|
58
|
+
principal: BANTerm;
|
|
59
|
+
over: BANFormula;
|
|
60
|
+
} | {
|
|
61
|
+
kind: 'fresh';
|
|
62
|
+
what: BANTerm;
|
|
63
|
+
} | {
|
|
64
|
+
kind: 'sharedKey';
|
|
65
|
+
a: BANTerm;
|
|
66
|
+
b: BANTerm;
|
|
67
|
+
key: BANTerm;
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'publicKey';
|
|
70
|
+
principal: BANTerm;
|
|
71
|
+
key: BANTerm;
|
|
72
|
+
} | {
|
|
73
|
+
kind: 'sharedSecret';
|
|
74
|
+
a: BANTerm;
|
|
75
|
+
b: BANTerm;
|
|
76
|
+
secret: BANTerm;
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'controls';
|
|
79
|
+
principal: BANTerm;
|
|
80
|
+
statement: BANFormula;
|
|
81
|
+
} | {
|
|
82
|
+
kind: 'formula-and';
|
|
83
|
+
left: BANFormula;
|
|
84
|
+
right: BANFormula;
|
|
85
|
+
};
|
|
86
|
+
export interface BANRule {
|
|
87
|
+
name: string;
|
|
88
|
+
description: string;
|
|
89
|
+
}
|
|
90
|
+
export interface ProtocolStep {
|
|
91
|
+
from: string;
|
|
92
|
+
to: string;
|
|
93
|
+
message: BANTerm;
|
|
94
|
+
}
|
|
95
|
+
export interface Protocol {
|
|
96
|
+
name: string;
|
|
97
|
+
participants: string[];
|
|
98
|
+
initialAssumptions: BANFormula[];
|
|
99
|
+
steps: ProtocolStep[];
|
|
100
|
+
goals: BANFormula[];
|
|
101
|
+
}
|
|
102
|
+
export interface ProtocolAnalysis {
|
|
103
|
+
satisfied: BANFormula[];
|
|
104
|
+
unsatisfied: BANFormula[];
|
|
105
|
+
trace: BANFormula[];
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/reasoning/ban-logic/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// BAN Logic — Tipos públicos
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Burrows-Abadi-Needham logic (1989): cálculo modal de creencias para
|
|
7
|
+
// análisis de protocolos criptográficos de autenticación.
|
|
8
|
+
//
|
|
9
|
+
// Símbolos (notación estándar BAN):
|
|
10
|
+
//
|
|
11
|
+
// P |≡ X "P believes X" P cree X
|
|
12
|
+
// P ◁ X "P sees X" P ve X (recibió un mensaje con X)
|
|
13
|
+
// P |~ X "P once said X" P dijo X alguna vez
|
|
14
|
+
// P |⇒ X "P has jurisdiction over X" P es autoridad sobre X
|
|
15
|
+
// #(X) "fresh X" X es fresco (nonce reciente)
|
|
16
|
+
// P ↔K Q "K is shared between P, Q" K es clave compartida
|
|
17
|
+
// |→K P "K is public key for P" K es la clave pública de P
|
|
18
|
+
// P ⇌X Q "X is shared secret" X es un secreto compartido
|
|
19
|
+
// {X}_K "X encrypted with K" X cifrado con K
|
|
20
|
+
// <X>_Y "X combined with secret Y" X concatenado con secreto Y
|
|
21
|
+
// H(X) "hash of X" hash de X
|
|
22
|
+
//
|
|
23
|
+
// Reglas de inferencia clásicas (10): message-meaning (3 variantes:
|
|
24
|
+
// shared-key, public-key, shared-secret), nonce-verification,
|
|
25
|
+
// jurisdiction, freshness propagation, belief conjunction, seeing rules.
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/reasoning/ban-logic/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,6BAA6B;AAC7B,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,0DAA0D;AAC1D,EAAE;AACF,oCAAoC;AACpC,EAAE;AACF,sDAAsD;AACtD,+EAA+E;AAC/E,iEAAiE;AACjE,oEAAoE;AACpE,0EAA0E;AAC1E,mEAAmE;AACnE,wEAAwE;AACxE,wEAAwE;AACxE,6DAA6D;AAC7D,yEAAyE;AACzE,uDAAuD;AACvD,EAAE;AACF,oEAAoE;AACpE,8DAA8D;AAC9D,yEAAyE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export interface ImpartialGame<S> {
|
|
2
|
+
readonly initial: S;
|
|
3
|
+
readonly moves: (state: S) => S[];
|
|
4
|
+
readonly isTerminal: (state: S) => boolean;
|
|
5
|
+
readonly key?: (state: S) => string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Minimum Excludant: menor entero ≥ 0 que no está en el conjunto.
|
|
9
|
+
* mex(∅) = 0, mex({0,1,3}) = 2, mex({1,2}) = 0.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mex(set: Set<number>): number;
|
|
12
|
+
/**
|
|
13
|
+
* Valor de Grundy del estado dado bajo el juego imparcial.
|
|
14
|
+
* Define: G(terminal) = 0; G(s) = mex { G(s') : s' ∈ moves(s) }.
|
|
15
|
+
* Usa caché (compartido entre llamadas) keyed por la clave canónica del estado.
|
|
16
|
+
*/
|
|
17
|
+
export declare function grundyValue<S>(game: ImpartialGame<S>, state: S, cache?: Map<string, number>): number;
|
|
18
|
+
/**
|
|
19
|
+
* El jugador a mover gana sii grundy ≠ 0 (juego imparcial con convención
|
|
20
|
+
* normal: el que no puede mover, pierde).
|
|
21
|
+
*/
|
|
22
|
+
export declare function isWinning<S>(game: ImpartialGame<S>, state: S): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Nim-sum: XOR bit a bit de los valores. Identidad del monoide de Grundy
|
|
25
|
+
* bajo suma disjunta de juegos imparciales.
|
|
26
|
+
*/
|
|
27
|
+
export declare function nimSum(values: number[]): number;
|
|
28
|
+
/**
|
|
29
|
+
* Grundy de la suma disjunta de juegos imparciales independientes:
|
|
30
|
+
* G(G1 + G2 + ... + Gn)(s1,...,sn) = G1(s1) ⊕ G2(s2) ⊕ ... ⊕ Gn(sn).
|
|
31
|
+
* Requiere games.length === states.length.
|
|
32
|
+
*/
|
|
33
|
+
export declare function multiGameGrundy<S>(games: Array<ImpartialGame<S>>, states: S[]): number;
|
|
34
|
+
/**
|
|
35
|
+
* Nim clásico: varios montones de piedras, un movimiento = sacar ≥1
|
|
36
|
+
* piedras de un único montón. Pierde quien no puede mover (todos los
|
|
37
|
+
* montones a 0). Estado: vector de tamaños (normalizado, sin ceros y
|
|
38
|
+
* ordenado descendente para que el caché sea efectivo entre simetrías).
|
|
39
|
+
*/
|
|
40
|
+
export declare function nim(piles: number[]): ImpartialGame<number[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Nim 1D: una sola pila de `stones` piedras; sacar 1..stones. Equivale
|
|
43
|
+
* a `nim([stones])` pero con estado más compacto (un número).
|
|
44
|
+
*/
|
|
45
|
+
export declare function nim1d(stones: number): ImpartialGame<number>;
|
|
46
|
+
/**
|
|
47
|
+
* Chomp: tablero rows×cols de "chocolate". Cada movida elige una casilla
|
|
48
|
+
* viva (true) y "muerde" todo el rectángulo abajo-derecha desde ella. La
|
|
49
|
+
* casilla (0,0) es veneno: quien la come pierde (convención misère
|
|
50
|
+
* implementada como: estado terminal cuando solo queda (0,0)).
|
|
51
|
+
*
|
|
52
|
+
* Estado: matriz booleana rows×cols con true = casilla viva.
|
|
53
|
+
*
|
|
54
|
+
* Nota: Chomp tiene posición ganadora conocida para el primer jugador
|
|
55
|
+
* en todo tablero ≥ 2×2 (argumento de robo de estrategia), pero la
|
|
56
|
+
* estrategia explícita es desconocida en general. Para 1×1 (sólo el
|
|
57
|
+
* veneno) el jugador a mover pierde, así que grundy = 0.
|
|
58
|
+
*/
|
|
59
|
+
export declare function chompGame(rows: number, cols: number): ImpartialGame<boolean[][]>;
|
|
60
|
+
export interface SurrealNumber {
|
|
61
|
+
readonly left: SurrealNumber[];
|
|
62
|
+
readonly right: SurrealNumber[];
|
|
63
|
+
}
|
|
64
|
+
/** 0 = { | } — sin opciones para ninguno; "second player wins". */
|
|
65
|
+
export declare const ZERO: SurrealNumber;
|
|
66
|
+
/** 1 = { 0 | }. */
|
|
67
|
+
export declare const ONE: SurrealNumber;
|
|
68
|
+
/** -1 = { | 0 }. */
|
|
69
|
+
export declare const MINUS_ONE: SurrealNumber;
|
|
70
|
+
/** * (star) = { 0 | 0 } — primer jugador gana, no comparable a 0 (fuzzy). */
|
|
71
|
+
export declare const STAR: SurrealNumber;
|
|
72
|
+
/**
|
|
73
|
+
* Construye el surreal correspondiente al entero `n`.
|
|
74
|
+
* 0 = { | }
|
|
75
|
+
* n = { n-1 | } (n > 0)
|
|
76
|
+
* -n = { | -(n-1) } (n < 0)
|
|
77
|
+
*/
|
|
78
|
+
export declare function fromInt(n: number): SurrealNumber;
|
|
79
|
+
/**
|
|
80
|
+
* Negación: -G = { -GR | -GL }.
|
|
81
|
+
*/
|
|
82
|
+
export declare function negate(s: SurrealNumber): SurrealNumber;
|
|
83
|
+
/**
|
|
84
|
+
* Suma de juegos: G + H = { GL+H, G+HL | GR+H, G+HR }.
|
|
85
|
+
*/
|
|
86
|
+
export declare function add(a: SurrealNumber, b: SurrealNumber): SurrealNumber;
|
|
87
|
+
export declare function compare(a: SurrealNumber, b: SurrealNumber): -1 | 0 | 1;
|
|
88
|
+
/**
|
|
89
|
+
* G es fuzzy con 0 sii no satisface G ≤ 0 ni 0 ≤ G — es decir, el
|
|
90
|
+
* primer jugador gana. * es el ejemplo canónico.
|
|
91
|
+
*/
|
|
92
|
+
export declare function isFuzzy(s: SurrealNumber): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Simplificación parcial: elimina opciones dominadas en cada lado.
|
|
95
|
+
*
|
|
96
|
+
* En la lista Left, una opción L1 domina a L2 si L1 ≥ L2 (entonces
|
|
97
|
+
* L2 puede borrarse: el jugador Left preferirá L1).
|
|
98
|
+
* En la lista Right, una opción R1 domina a R2 si R1 ≤ R2.
|
|
99
|
+
*
|
|
100
|
+
* No hace eliminación reversible ("bypass") — eso podría requerirse
|
|
101
|
+
* para canonicalización completa Conway. Para nuestros tests es
|
|
102
|
+
* suficiente.
|
|
103
|
+
*/
|
|
104
|
+
export declare function simplify(s: SurrealNumber): SurrealNumber;
|
|
105
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/combinatorial-games/index.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAE3C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;CACrC;AAMD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAI5C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EACR,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAA6B,GACrD,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAEtE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAYtF;AAID;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAuB5D;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAc3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAsDhF;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC;CACjC;AAMD,mEAAmE;AACnE,eAAO,MAAM,IAAI,EAAE,aAAmC,CAAC;AAEvD,mBAAmB;AACnB,eAAO,MAAM,GAAG,EAAE,aAAuC,CAAC;AAE1D,oBAAoB;AACpB,eAAO,MAAM,SAAS,EAAE,aAAuC,CAAC;AAEhE,6EAA6E;AAC7E,eAAO,MAAM,IAAI,EAAE,aAA2C,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAKhD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAKtD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAQrE;AAwBD,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAOtE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAEjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAqCxD"}
|