@stevenvo780/st-lang 4.8.0 → 4.10.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/natural-deduction-nk/formula.d.ts +18 -0
- package/dist/logic/profiles/natural-deduction-nk/formula.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/formula.js +102 -0
- package/dist/logic/profiles/natural-deduction-nk/formula.js.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/index.d.ts +5 -0
- package/dist/logic/profiles/natural-deduction-nk/index.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/index.js +28 -0
- package/dist/logic/profiles/natural-deduction-nk/index.js.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.d.ts +49 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.js +557 -0
- package/dist/logic/profiles/natural-deduction-nk/prover.js.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/types.d.ts +48 -0
- package/dist/logic/profiles/natural-deduction-nk/types.d.ts.map +1 -0
- package/dist/logic/profiles/natural-deduction-nk/types.js +35 -0
- package/dist/logic/profiles/natural-deduction-nk/types.js.map +1 -0
- 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 +2 -1
- package/dist/namespaces/reasoning.d.ts.map +1 -1
- package/dist/namespaces/reasoning.js +3 -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/automata/dfa.d.ts +17 -0
- package/dist/reasoning/automata/dfa.d.ts.map +1 -0
- package/dist/reasoning/automata/dfa.js +276 -0
- package/dist/reasoning/automata/dfa.js.map +1 -0
- package/dist/reasoning/automata/index.d.ts +8 -0
- package/dist/reasoning/automata/index.d.ts.map +1 -0
- package/dist/reasoning/automata/index.js +64 -0
- package/dist/reasoning/automata/index.js.map +1 -0
- package/dist/reasoning/automata/languages.d.ts +10 -0
- package/dist/reasoning/automata/languages.d.ts.map +1 -0
- package/dist/reasoning/automata/languages.js +78 -0
- package/dist/reasoning/automata/languages.js.map +1 -0
- package/dist/reasoning/automata/nfa.d.ts +8 -0
- package/dist/reasoning/automata/nfa.d.ts.map +1 -0
- package/dist/reasoning/automata/nfa.js +122 -0
- package/dist/reasoning/automata/nfa.js.map +1 -0
- package/dist/reasoning/automata/pda.d.ts +10 -0
- package/dist/reasoning/automata/pda.d.ts.map +1 -0
- package/dist/reasoning/automata/pda.js +169 -0
- package/dist/reasoning/automata/pda.js.map +1 -0
- package/dist/reasoning/automata/regex.d.ts +6 -0
- package/dist/reasoning/automata/regex.d.ts.map +1 -0
- package/dist/reasoning/automata/regex.js +259 -0
- package/dist/reasoning/automata/regex.js.map +1 -0
- package/dist/reasoning/automata/types.d.ts +69 -0
- package/dist/reasoning/automata/types.d.ts.map +1 -0
- package/dist/reasoning/automata/types.js +29 -0
- package/dist/reasoning/automata/types.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/computability/index.d.ts +239 -0
- package/dist/reasoning/computability/index.d.ts.map +1 -0
- package/dist/reasoning/computability/index.js +851 -0
- package/dist/reasoning/computability/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/number-theory/crt.d.ts +9 -0
- package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
- package/dist/reasoning/number-theory/crt.js +39 -0
- package/dist/reasoning/number-theory/crt.js.map +1 -0
- package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
- package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
- package/dist/reasoning/number-theory/diophantine.js +87 -0
- package/dist/reasoning/number-theory/diophantine.js.map +1 -0
- package/dist/reasoning/number-theory/factorization.d.ts +12 -0
- package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
- package/dist/reasoning/number-theory/factorization.js +136 -0
- package/dist/reasoning/number-theory/factorization.js.map +1 -0
- package/dist/reasoning/number-theory/gcd.d.ts +8 -0
- package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
- package/dist/reasoning/number-theory/gcd.js +51 -0
- package/dist/reasoning/number-theory/gcd.js.map +1 -0
- package/dist/reasoning/number-theory/index.d.ts +9 -0
- package/dist/reasoning/number-theory/index.d.ts.map +1 -0
- package/dist/reasoning/number-theory/index.js +46 -0
- package/dist/reasoning/number-theory/index.js.map +1 -0
- package/dist/reasoning/number-theory/modular.d.ts +6 -0
- package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
- package/dist/reasoning/number-theory/modular.js +75 -0
- package/dist/reasoning/number-theory/modular.js.map +1 -0
- package/dist/reasoning/number-theory/primality.d.ts +6 -0
- package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
- package/dist/reasoning/number-theory/primality.js +144 -0
- package/dist/reasoning/number-theory/primality.js.map +1 -0
- package/dist/reasoning/number-theory/symbols.d.ts +3 -0
- package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
- package/dist/reasoning/number-theory/symbols.js +57 -0
- package/dist/reasoning/number-theory/symbols.js.map +1 -0
- package/dist/reasoning/real-analysis/index.d.ts +127 -0
- package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
- package/dist/reasoning/real-analysis/index.js +638 -0
- package/dist/reasoning/real-analysis/index.js.map +1 -0
- package/dist/reasoning/topology/index.d.ts +41 -0
- package/dist/reasoning/topology/index.d.ts.map +1 -0
- package/dist/reasoning/topology/index.js +739 -0
- package/dist/reasoning/topology/index.js.map +1 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
- package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.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/automata/automata.test.d.ts +2 -0
- package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
- package/dist/tests/reasoning/automata/automata.test.js +310 -0
- package/dist/tests/reasoning/automata/automata.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/computability/computability.test.d.ts +2 -0
- package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
- package/dist/tests/reasoning/computability/computability.test.js +246 -0
- package/dist/tests/reasoning/computability/computability.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/number-theory/number-theory.test.d.ts +2 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
- package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
- package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
- package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
- package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
- package/dist/tests/reasoning/topology/topology.test.js +327 -0
- package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
- package/dist/tests/tooling/exporters/lean4/lean4-exporter.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/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/exporters/lean4/index.d.ts +47 -0
- package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
- package/dist/tooling/exporters/lean4/index.js +423 -0
- package/dist/tooling/exporters/lean4/index.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/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,239 @@
|
|
|
1
|
+
export type TMState = string;
|
|
2
|
+
export type TMSymbol = string;
|
|
3
|
+
export type Direction = 'L' | 'R' | 'S';
|
|
4
|
+
export interface TMTransition {
|
|
5
|
+
readonly fromState: TMState;
|
|
6
|
+
readonly readSymbol: TMSymbol;
|
|
7
|
+
readonly toState: TMState;
|
|
8
|
+
readonly writeSymbol: TMSymbol;
|
|
9
|
+
readonly direction: Direction;
|
|
10
|
+
}
|
|
11
|
+
export interface TuringMachine {
|
|
12
|
+
readonly states: Set<TMState>;
|
|
13
|
+
readonly alphabet: Set<TMSymbol>;
|
|
14
|
+
readonly tapeAlphabet: Set<TMSymbol>;
|
|
15
|
+
readonly transitions: TMTransition[];
|
|
16
|
+
readonly initialState: TMState;
|
|
17
|
+
readonly acceptStates: Set<TMState>;
|
|
18
|
+
readonly rejectStates?: Set<TMState>;
|
|
19
|
+
readonly blank: TMSymbol;
|
|
20
|
+
}
|
|
21
|
+
export interface TMConfig {
|
|
22
|
+
readonly state: TMState;
|
|
23
|
+
readonly tape: TMSymbol[];
|
|
24
|
+
readonly head: number;
|
|
25
|
+
readonly step: number;
|
|
26
|
+
}
|
|
27
|
+
export type StepResult = TMConfig | 'halted-accept' | 'halted-reject' | 'no-transition';
|
|
28
|
+
/**
|
|
29
|
+
* Inicializa una configuración a partir de la entrada. La cinta arranca
|
|
30
|
+
* con los símbolos de `input`, cabeza en 0. Si la entrada es vacía la
|
|
31
|
+
* cinta arranca con un blank.
|
|
32
|
+
*/
|
|
33
|
+
export declare function initialConfig(M: TuringMachine, input: string): TMConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Un paso de la TM. Devuelve la próxima configuración o un terminal.
|
|
36
|
+
* • Si el estado actual ya es de aceptación → 'halted-accept'.
|
|
37
|
+
* • Si es de rechazo → 'halted-reject'.
|
|
38
|
+
* • Si no hay transición desde (state, leído) → 'no-transition'.
|
|
39
|
+
*/
|
|
40
|
+
export declare function step(M: TuringMachine, config: TMConfig): StepResult;
|
|
41
|
+
export interface RunResult {
|
|
42
|
+
readonly result: 'accept' | 'reject' | 'timeout' | 'no-transition';
|
|
43
|
+
readonly steps: number;
|
|
44
|
+
readonly finalConfig: TMConfig;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Corre la TM hasta aceptar, rechazar, agotarse o quedar sin transición.
|
|
48
|
+
* `maxSteps` defaultea a 10_000.
|
|
49
|
+
*/
|
|
50
|
+
export declare function run(M: TuringMachine, input: string, maxSteps?: number): RunResult;
|
|
51
|
+
/**
|
|
52
|
+
* Lista todas las configuraciones generadas, hasta `maxSteps`.
|
|
53
|
+
* Incluye la configuración inicial. No incluye un sentinel para terminal.
|
|
54
|
+
*/
|
|
55
|
+
export declare function trace(M: TuringMachine, input: string, maxSteps: number): TMConfig[];
|
|
56
|
+
/**
|
|
57
|
+
* Lectura útil de la cinta: la subcadena no-blank más larga centrada en
|
|
58
|
+
* la región explorada. Sirve para validar máquinas que escriben output
|
|
59
|
+
* en la cinta (binary increment, reverse, copy, etc.).
|
|
60
|
+
*/
|
|
61
|
+
export declare function readTape(M: TuringMachine, config: TMConfig): string;
|
|
62
|
+
/**
|
|
63
|
+
* Halting acotado: ¿la TM para en ≤ `maxSteps` pasos?
|
|
64
|
+
* • `true` si para por aceptación, rechazo o falta de transición.
|
|
65
|
+
* • `false` técnicamente nunca se devuelve aquí — para devolver
|
|
66
|
+
* `false` con certeza haría falta resolver el halting problem, que
|
|
67
|
+
* es indecidible. Cuando agotamos el budget devolvemos `'unknown'`.
|
|
68
|
+
* Esta función es semi-decidible: reconoce las máquinas que paran,
|
|
69
|
+
* pero no decide el lenguaje complemento (las que no paran).
|
|
70
|
+
*/
|
|
71
|
+
export declare function boundedHalts(M: TuringMachine, input: string, maxSteps: number): boolean | 'unknown';
|
|
72
|
+
/**
|
|
73
|
+
* Incrementa un número binario (MSB first) en la cinta.
|
|
74
|
+
* Algoritmo: ir al final, retroceder convirtiendo 1→0 mientras haya
|
|
75
|
+
* acarreo; al primer 0 escribir 1 y aceptar. Si todo era 1, escribir
|
|
76
|
+
* 1 al borde izquierdo y aceptar.
|
|
77
|
+
*/
|
|
78
|
+
export declare function tmBinaryIncrement(): TuringMachine;
|
|
79
|
+
/**
|
|
80
|
+
* Acepta sii la cantidad de 1s en la entrada (sobre alfabeto {1}) es par.
|
|
81
|
+
* Estados q0 = par hasta ahora, q1 = impar.
|
|
82
|
+
*/
|
|
83
|
+
export declare function tmUnaryParity(): TuringMachine;
|
|
84
|
+
/**
|
|
85
|
+
* Revierte una cadena sobre {a, b}. Algoritmo:
|
|
86
|
+
* 1. Marcar inicio (Sa, Sb) con un símbolo distintivo.
|
|
87
|
+
* 2. Encontrar el final y desplazar el símbolo del frente al fondo.
|
|
88
|
+
* 3. Repetir hasta agotar.
|
|
89
|
+
* Output: la cinta termina con el reverso de la entrada original.
|
|
90
|
+
*
|
|
91
|
+
* Implementación con cinta auxiliar a la derecha (más simple):
|
|
92
|
+
* Caminar a la derecha mientras se copian símbolos en orden inverso
|
|
93
|
+
* tras un separador. Al terminar borrar la entrada original.
|
|
94
|
+
*
|
|
95
|
+
* Para evitar complicaciones, esta versión usa una técnica de
|
|
96
|
+
* "shift left after marking": tras leer un símbolo, lo borra y lo
|
|
97
|
+
* reescribe al final del bloque restante.
|
|
98
|
+
*
|
|
99
|
+
* Nota: este algoritmo es O(n²) en pasos pero correcto.
|
|
100
|
+
*/
|
|
101
|
+
export declare function tmReverseString(): TuringMachine;
|
|
102
|
+
/**
|
|
103
|
+
* Copia w → w#w sobre {a, b}. El '#' se inserta automáticamente y la
|
|
104
|
+
* copia queda a la derecha. Algoritmo análogo a reverse pero copiando
|
|
105
|
+
* en orden directo (marcamos cada símbolo procesado con mayúscula).
|
|
106
|
+
*/
|
|
107
|
+
export declare function tmCopy(): TuringMachine;
|
|
108
|
+
/**
|
|
109
|
+
* Suma con `a` en binario y `b` en unario, formato "<a>+<b>" donde
|
|
110
|
+
* a ∈ {0,1}* (MSB-first), b ∈ {1}*.
|
|
111
|
+
*
|
|
112
|
+
* Mantener `b` unario evita la coreografía de decremento binario (que
|
|
113
|
+
* agrega ~10 estados sin enseñar nada nuevo) y muestra claramente la
|
|
114
|
+
* técnica de "incrementar `a` una vez por cada token de `b`".
|
|
115
|
+
*
|
|
116
|
+
* Algoritmo:
|
|
117
|
+
* 1. Ir al final.
|
|
118
|
+
* 2. Si la última posición es '1' (un token de b), borrarlo y entrar
|
|
119
|
+
* en `incA`: incrementar `a` y luego volver al final.
|
|
120
|
+
* 3. Si la última posición es '+' (b vacío), borrarlo: la cinta queda
|
|
121
|
+
* con sólo `a` (el resultado).
|
|
122
|
+
*/
|
|
123
|
+
export declare function tmAddBinary(): TuringMachine;
|
|
124
|
+
export type PRFn = {
|
|
125
|
+
kind: 'zero';
|
|
126
|
+
} | {
|
|
127
|
+
kind: 'succ';
|
|
128
|
+
} | {
|
|
129
|
+
kind: 'proj';
|
|
130
|
+
n: number;
|
|
131
|
+
i: number;
|
|
132
|
+
} | {
|
|
133
|
+
kind: 'comp';
|
|
134
|
+
outer: PRFn;
|
|
135
|
+
inner: PRFn[];
|
|
136
|
+
} | {
|
|
137
|
+
kind: 'rec';
|
|
138
|
+
base: PRFn;
|
|
139
|
+
step: PRFn;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Semántica de PRF:
|
|
143
|
+
* • zero() = 0
|
|
144
|
+
* • succ(x) = x + 1
|
|
145
|
+
* • U^n_i(x1..xn) = x_i
|
|
146
|
+
* • comp(h, g1..gk)(x1..xn) = h(g1(x1..xn), ..., gk(x1..xn))
|
|
147
|
+
* • rec(base, step):
|
|
148
|
+
* f(0, x1..xn) = base(x1..xn)
|
|
149
|
+
* f(y+1, x1..xn) = step(y, f(y, x1..xn), x1..xn)
|
|
150
|
+
*
|
|
151
|
+
* El argumento "iterado" es el primero (convención común). `args[0]` es
|
|
152
|
+
* el contador en `rec`.
|
|
153
|
+
*/
|
|
154
|
+
export declare function evalPR(f: PRFn, args: number[]): number;
|
|
155
|
+
/**
|
|
156
|
+
* Suma: add(0, y) = y, add(x+1, y) = succ(add(x, y))
|
|
157
|
+
* base = U^1_1 (identidad en y)
|
|
158
|
+
* step = succ ∘ U^3_2 (toma f(x,y) y le aplica succ)
|
|
159
|
+
*
|
|
160
|
+
* En nuestra convención args[0] es el contador → add(x, y).
|
|
161
|
+
*/
|
|
162
|
+
export declare const PR_ADD: PRFn;
|
|
163
|
+
/**
|
|
164
|
+
* Multiplicación: mul(0, y) = 0, mul(x+1, y) = add(mul(x,y), y)
|
|
165
|
+
* base = zero (después de proyectar y fuera)
|
|
166
|
+
* step = add(f(x,y), y)
|
|
167
|
+
*
|
|
168
|
+
* base: el caso 0 → 0. Es la función constante 0 sobre 1 argumento:
|
|
169
|
+
* const0(y) = zero ∘ U^1_1, pero zero ignora sus argumentos.
|
|
170
|
+
* En este eval, zero retorna 0 sin importar args.
|
|
171
|
+
*/
|
|
172
|
+
export declare const PR_MUL: PRFn;
|
|
173
|
+
export declare const PR_POW: PRFn;
|
|
174
|
+
/**
|
|
175
|
+
* Predecesor: pred(0) = 0, pred(x+1) = x.
|
|
176
|
+
* rec con base = zero, step = U^2_1 (devuelve y, el contador previo).
|
|
177
|
+
*/
|
|
178
|
+
export declare const PR_PREDECESSOR: PRFn;
|
|
179
|
+
/**
|
|
180
|
+
* Factorial: fact(0) = 1, fact(x+1) = mul(succ(x), fact(x)).
|
|
181
|
+
*
|
|
182
|
+
* En recursión: contador y, acumulador f(y), sin args extra. Step recibe
|
|
183
|
+
* (y, f(y)) y debe devolver mul(succ(y), f(y)).
|
|
184
|
+
*
|
|
185
|
+
* Cuidado: aquí args[0]=y es el "k" del bucle (0-indexed), por lo que
|
|
186
|
+
* succ(y) = y+1 = el siguiente número a multiplicar.
|
|
187
|
+
*/
|
|
188
|
+
export declare const PR_FACT: PRFn;
|
|
189
|
+
/**
|
|
190
|
+
* Función de Ackermann (Peter):
|
|
191
|
+
* A(0, n) = n + 1
|
|
192
|
+
* A(m+1, 0) = A(m, 1)
|
|
193
|
+
* A(m+1, n+1) = A(m, A(m+1, n))
|
|
194
|
+
*
|
|
195
|
+
* Crece más rápido que toda PRF: A(m, n) es la prueba canónica de que
|
|
196
|
+
* existen funciones recursivas totales no primitivas recursivas.
|
|
197
|
+
*
|
|
198
|
+
* Implementación iterativa por stack para esquivar el call-stack JS.
|
|
199
|
+
*/
|
|
200
|
+
export declare function ackermann(m: number, n: number): number;
|
|
201
|
+
/**
|
|
202
|
+
* Test heurístico de "esta función podría ser PR": evalúa la función
|
|
203
|
+
* sobre `samples` puntos pequeños y la compara con el patrón de
|
|
204
|
+
* crecimiento de Ackermann (que escapa a PR). Es estrictamente una
|
|
205
|
+
* heurística — no es un decisor.
|
|
206
|
+
*
|
|
207
|
+
* • Si la función supera a A(samples, samples) en algún punto pequeño
|
|
208
|
+
* → likely = false (probablemente no es PR).
|
|
209
|
+
* • Si nunca crece más rápido que cuadrático/exponencial moderado →
|
|
210
|
+
* likely = true.
|
|
211
|
+
*/
|
|
212
|
+
export declare function isInPR(f: (n: number) => number, samples?: number): {
|
|
213
|
+
likely: boolean;
|
|
214
|
+
estimate?: number;
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Rice (1953): toda propiedad **no trivial** sobre el lenguaje aceptado
|
|
218
|
+
* por una TM (es decir, sobre el comportamiento input/output observable)
|
|
219
|
+
* es **indecidible**.
|
|
220
|
+
*
|
|
221
|
+
* No podemos *decidir* la propiedad — eso es justo lo que el teorema
|
|
222
|
+
* niega. Lo que sí podemos es **verificar el predicado de Rice**: la
|
|
223
|
+
* propiedad debe ser
|
|
224
|
+
*
|
|
225
|
+
* 1. extensional (depende sólo del lenguaje, no del código),
|
|
226
|
+
* 2. no vacía (alguna TM la satisface),
|
|
227
|
+
* 3. no total (alguna TM no la satisface).
|
|
228
|
+
*
|
|
229
|
+
* Esta función toma el predicado, lo evalúa sobre un muestreo finito de
|
|
230
|
+
* TMs conocidas y, si encuentra una `M0` que la satisface y una `M1`
|
|
231
|
+
* que no, devuelve `undecidable = true` con explicación. Si todas las
|
|
232
|
+
* TMs de la muestra dan la misma respuesta no podemos concluir nada
|
|
233
|
+
* (la propiedad podría ser trivial, o la muestra puede ser muy chica).
|
|
234
|
+
*/
|
|
235
|
+
export declare function riceWitness(property: (m: TuringMachine) => boolean, sampleSize?: number): {
|
|
236
|
+
undecidable: boolean;
|
|
237
|
+
explanation: string;
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/computability/index.ts"],"names":[],"mappings":"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"}
|