@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,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Mathlib — Ring theory
|
|
4
|
+
// Verificación de axiomas de anillo y check de campo.
|
|
5
|
+
// ============================================================
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.verifyRing = verifyRing;
|
|
8
|
+
exports.isField = isField;
|
|
9
|
+
const group_1 = require("./group");
|
|
10
|
+
/**
|
|
11
|
+
* Verifica los axiomas de anillo (con identidad multiplicativa):
|
|
12
|
+
* - (R, +, 0) grupo abeliano.
|
|
13
|
+
* - (R, ·, 1) monoide (asociatividad + identidad).
|
|
14
|
+
* - · distribuye sobre + por ambos lados.
|
|
15
|
+
*/
|
|
16
|
+
function verifyRing(r, elements, eq = (a, b) => a === b) {
|
|
17
|
+
const failures = [];
|
|
18
|
+
// Grupo abeliano aditivo.
|
|
19
|
+
const addMagma = { op: r.add };
|
|
20
|
+
if (!(0, group_1.isAssociative)(addMagma, elements, eq))
|
|
21
|
+
failures.push('asociatividad aditiva');
|
|
22
|
+
if (!(0, group_1.hasIdentity)(addMagma, elements, r.zero, eq))
|
|
23
|
+
failures.push('identidad aditiva (0)');
|
|
24
|
+
if (!(0, group_1.hasInverses)({ op: r.add, identity: r.zero, inverse: r.neg }, elements, eq)) {
|
|
25
|
+
failures.push('inversos aditivos');
|
|
26
|
+
}
|
|
27
|
+
if (!(0, group_1.isCommutative)(addMagma, elements, eq))
|
|
28
|
+
failures.push('conmutatividad aditiva');
|
|
29
|
+
// Monoide multiplicativo.
|
|
30
|
+
const mulMagma = { op: r.mul };
|
|
31
|
+
if (!(0, group_1.isAssociative)(mulMagma, elements, eq))
|
|
32
|
+
failures.push('asociatividad multiplicativa');
|
|
33
|
+
if (!(0, group_1.hasIdentity)(mulMagma, elements, r.one, eq))
|
|
34
|
+
failures.push('identidad multiplicativa (1)');
|
|
35
|
+
// Distributividad: a·(b+c) = a·b + a·c y (a+b)·c = a·c + b·c.
|
|
36
|
+
for (const a of elements) {
|
|
37
|
+
for (const b of elements) {
|
|
38
|
+
for (const c of elements) {
|
|
39
|
+
const left = r.mul(a, r.add(b, c));
|
|
40
|
+
const right = r.add(r.mul(a, b), r.mul(a, c));
|
|
41
|
+
if (!eq(left, right)) {
|
|
42
|
+
failures.push('distributividad por izquierda');
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (failures.includes('distributividad por izquierda'))
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
if (failures.includes('distributividad por izquierda'))
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
for (const a of elements) {
|
|
53
|
+
for (const b of elements) {
|
|
54
|
+
for (const c of elements) {
|
|
55
|
+
const left = r.mul(r.add(a, b), c);
|
|
56
|
+
const right = r.add(r.mul(a, c), r.mul(b, c));
|
|
57
|
+
if (!eq(left, right)) {
|
|
58
|
+
failures.push('distributividad por derecha');
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (failures.includes('distributividad por derecha'))
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
if (failures.includes('distributividad por derecha'))
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
return { valid: failures.length === 0, failures };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Un anillo conmutativo R es campo si todo elemento no nulo tiene
|
|
72
|
+
* inverso multiplicativo dentro del conjunto. `div` debe devolver
|
|
73
|
+
* un T para argumentos válidos o `undefined` cuando no existe inverso.
|
|
74
|
+
*/
|
|
75
|
+
function isField(r, elements, div, eq = (a, b) => a === b) {
|
|
76
|
+
// Conmutatividad multiplicativa (requerido para campo).
|
|
77
|
+
if (!(0, group_1.isCommutative)({ op: r.mul }, elements, eq))
|
|
78
|
+
return false;
|
|
79
|
+
// Todo elemento no cero tiene inverso multiplicativo.
|
|
80
|
+
for (const a of elements) {
|
|
81
|
+
if (eq(a, r.zero))
|
|
82
|
+
continue;
|
|
83
|
+
const inv = div(r.one, a);
|
|
84
|
+
if (inv === undefined)
|
|
85
|
+
return false;
|
|
86
|
+
if (!eq(r.mul(a, inv), r.one))
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=ring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring.js","sourceRoot":"","sources":["../../../src/tooling/mathlib/ring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estructura algebraica genérica: un dominio de elementos + un
|
|
3
|
+
* diccionario de operaciones + una lista de axiomas declarados.
|
|
4
|
+
*
|
|
5
|
+
* `elements` puede ser un arreglo finito (para grupos finitos como S_3)
|
|
6
|
+
* o un generador indexado (para anillos infinitos como Z donde se
|
|
7
|
+
* muestrea un subconjunto representativo).
|
|
8
|
+
*/
|
|
9
|
+
export interface AlgebraicStructure<T> {
|
|
10
|
+
name: string;
|
|
11
|
+
elements: T[] | ((idx: number) => T);
|
|
12
|
+
operations: Map<string, (...args: T[]) => T>;
|
|
13
|
+
axioms: AlgebraAxiom[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Un axioma con su fórmula informal (template) y un verificador
|
|
17
|
+
* computacional opcional que decide si los elementos lo cumplen.
|
|
18
|
+
*/
|
|
19
|
+
export interface AlgebraAxiom {
|
|
20
|
+
name: string;
|
|
21
|
+
formula: string;
|
|
22
|
+
verifier?: (elements: unknown[], ops: Map<string, unknown>) => boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface PartialOrder<T> {
|
|
25
|
+
leq(a: T, b: T): boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface TotalOrder<T> extends PartialOrder<T> {
|
|
28
|
+
compare(a: T, b: T): -1 | 0 | 1;
|
|
29
|
+
}
|
|
30
|
+
export interface Magma<T> {
|
|
31
|
+
op: (a: T, b: T) => T;
|
|
32
|
+
}
|
|
33
|
+
export interface Semigroup<T> extends Magma<T> {
|
|
34
|
+
readonly _semigroup?: true;
|
|
35
|
+
}
|
|
36
|
+
export interface Monoid<T> extends Semigroup<T> {
|
|
37
|
+
identity: T;
|
|
38
|
+
}
|
|
39
|
+
export interface Group<T> extends Monoid<T> {
|
|
40
|
+
inverse: (a: T) => T;
|
|
41
|
+
}
|
|
42
|
+
export interface AbelianGroup<T> extends Group<T> {
|
|
43
|
+
readonly _abelian?: true;
|
|
44
|
+
}
|
|
45
|
+
export interface Ring<T> {
|
|
46
|
+
add: (a: T, b: T) => T;
|
|
47
|
+
mul: (a: T, b: T) => T;
|
|
48
|
+
zero: T;
|
|
49
|
+
one: T;
|
|
50
|
+
neg: (a: T) => T;
|
|
51
|
+
}
|
|
52
|
+
export interface Lemma {
|
|
53
|
+
name: string;
|
|
54
|
+
statement: string;
|
|
55
|
+
applicableTo: (structure: AlgebraicStructure<unknown>) => boolean;
|
|
56
|
+
proof?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface VerificationResult {
|
|
59
|
+
valid: boolean;
|
|
60
|
+
failures: string[];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tooling/mathlib/types.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC;IACrC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;CACxE;AAMD,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACjC;AAMD,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;CACvB;AAID,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CAC1B;AAMD,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC;IACR,GAAG,EAAE,CAAC,CAAC;IACP,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;CAClB;AAMD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Mathlib — Tipos base para estructuras algebraicas
|
|
4
|
+
// Inspirado en Lean mathlib, subset mínimo para enseñanza.
|
|
5
|
+
// ============================================================
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tooling/mathlib/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,uDAAuD;AACvD,2DAA2D;AAC3D,+DAA+D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Feature, ProofState } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Extrae features del estado. Estabilidad:
|
|
4
|
+
* - mismo state → mismo array (orden, nombres, valores).
|
|
5
|
+
* - todos los valores son números finitos.
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractFeatures(state: ProofState): Feature[];
|
|
8
|
+
/** Lista cerrada de feature names — útil para inicializar el modelo. */
|
|
9
|
+
export declare function featureNames(): string[];
|
|
10
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/features.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAgDnD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,EAAE,CAkC5D;AAED,wEAAwE;AACxE,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAMvC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Proof Guidance — Feature extraction
|
|
4
|
+
//
|
|
5
|
+
// Features simples y baratas (sin embeddings). El extractor es
|
|
6
|
+
// determinístico: para el mismo state siempre devuelve los mismos
|
|
7
|
+
// (name, value). Los tests de `extractFeatures determinístico'
|
|
8
|
+
// dependen de esa propiedad.
|
|
9
|
+
// ============================================================
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.extractFeatures = extractFeatures;
|
|
12
|
+
exports.featureNames = featureNames;
|
|
13
|
+
/**
|
|
14
|
+
* Símbolos top-level que reconocemos como features one-hot.
|
|
15
|
+
* El orden es estable — esos son los nombres de feature usados por
|
|
16
|
+
* el modelo.
|
|
17
|
+
*/
|
|
18
|
+
const TOP_LEVEL_SYMBOLS = ['→', '∧', '∨', '¬', '↔', '∀', '∃', '='];
|
|
19
|
+
/**
|
|
20
|
+
* Operadores que cuentan para "depth" del goal — cualquier ocurrencia
|
|
21
|
+
* de uno de estos (no solo top-level) suma 1.
|
|
22
|
+
*/
|
|
23
|
+
const DEPTH_OPERATORS = ['→', '∧', '∨', '¬', '↔', '∀', '∃', '⊥', '⊤'];
|
|
24
|
+
function countOperators(s) {
|
|
25
|
+
let n = 0;
|
|
26
|
+
for (const op of DEPTH_OPERATORS) {
|
|
27
|
+
let idx = 0;
|
|
28
|
+
while ((idx = s.indexOf(op, idx)) !== -1) {
|
|
29
|
+
n++;
|
|
30
|
+
idx += op.length;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return n;
|
|
34
|
+
}
|
|
35
|
+
/** ¿el goal contiene el símbolo? (no necesariamente top-level). */
|
|
36
|
+
function containsSymbol(goal, sym) {
|
|
37
|
+
return goal.includes(sym);
|
|
38
|
+
}
|
|
39
|
+
/** ¿alguna hipótesis aparece textualmente dentro del goal? */
|
|
40
|
+
function hypInGoal(state) {
|
|
41
|
+
if (state.hypotheses.length === 0)
|
|
42
|
+
return false;
|
|
43
|
+
for (const h of state.hypotheses) {
|
|
44
|
+
const trimmed = h.trim();
|
|
45
|
+
if (trimmed.length > 0 && state.goal.includes(trimmed))
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/** ¿alguna hipótesis es exactamente el goal? (caso trivial de assumption). */
|
|
51
|
+
function hypEqualsGoal(state) {
|
|
52
|
+
const goal = state.goal.trim();
|
|
53
|
+
return state.hypotheses.some((h) => h.trim() === goal);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extrae features del estado. Estabilidad:
|
|
57
|
+
* - mismo state → mismo array (orden, nombres, valores).
|
|
58
|
+
* - todos los valores son números finitos.
|
|
59
|
+
*/
|
|
60
|
+
function extractFeatures(state) {
|
|
61
|
+
const goal = state.goal;
|
|
62
|
+
const features = [];
|
|
63
|
+
// Conteo de hipótesis (saturado en 10 para evitar dominio del feature).
|
|
64
|
+
features.push({ name: 'numHypotheses', value: Math.min(state.hypotheses.length, 10) });
|
|
65
|
+
// Profundidad del goal (saturada en 20).
|
|
66
|
+
features.push({ name: 'goalDepth', value: Math.min(countOperators(goal), 20) });
|
|
67
|
+
// Longitud del goal en chars / 10 (proxy de complejidad sintáctica).
|
|
68
|
+
features.push({ name: 'goalLength', value: Math.min(goal.length / 10, 20) });
|
|
69
|
+
// One-hot de símbolos presentes en el goal.
|
|
70
|
+
for (const sym of TOP_LEVEL_SYMBOLS) {
|
|
71
|
+
features.push({
|
|
72
|
+
name: `hasSymbol:${sym}`,
|
|
73
|
+
value: containsSymbol(goal, sym) ? 1 : 0,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Booleanos derivados.
|
|
77
|
+
features.push({ name: 'hypInGoal', value: hypInGoal(state) ? 1 : 0 });
|
|
78
|
+
features.push({ name: 'hypEqualsGoal', value: hypEqualsGoal(state) ? 1 : 0 });
|
|
79
|
+
features.push({ name: 'goalIsEmpty', value: goal.trim().length === 0 ? 1 : 0 });
|
|
80
|
+
// Goal contiene `→`, `∧`, `∨` ya está cubierto arriba pero los
|
|
81
|
+
// duplicamos con nombres explícitos del spec para legibilidad y
|
|
82
|
+
// para que los tests que buscan estos nombres pasen.
|
|
83
|
+
features.push({ name: 'goalHasArrow', value: containsSymbol(goal, '→') ? 1 : 0 });
|
|
84
|
+
features.push({ name: 'goalHasAnd', value: containsSymbol(goal, '∧') ? 1 : 0 });
|
|
85
|
+
features.push({ name: 'goalHasOr', value: containsSymbol(goal, '∨') ? 1 : 0 });
|
|
86
|
+
return features;
|
|
87
|
+
}
|
|
88
|
+
/** Lista cerrada de feature names — útil para inicializar el modelo. */
|
|
89
|
+
function featureNames() {
|
|
90
|
+
const names = ['numHypotheses', 'goalDepth', 'goalLength'];
|
|
91
|
+
for (const sym of TOP_LEVEL_SYMBOLS)
|
|
92
|
+
names.push(`hasSymbol:${sym}`);
|
|
93
|
+
names.push('hypInGoal', 'hypEqualsGoal', 'goalIsEmpty');
|
|
94
|
+
names.push('goalHasArrow', 'goalHasAnd', 'goalHasOr');
|
|
95
|
+
return names;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { ApplyTactic, Feature, ProofState, RankedTactic, RankingModel, SearchOptions, SearchResult, TacticRecord, } from './types';
|
|
2
|
+
export { extractFeatures, featureNames } from './features';
|
|
3
|
+
export { createEmptyModel, rankTactics, tacticSuccessProbability, trainModel, updateModel, } from './model';
|
|
4
|
+
export { guidedSearch } from './search';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/index.ts"],"names":[],"mappings":"AAWA,YAAY,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Proof Guidance — ML-guided proof search
|
|
4
|
+
//
|
|
5
|
+
// Sistema de ranking de tácticas/lemas con feature extraction
|
|
6
|
+
// simple + logistic regression + beam search guiada.
|
|
7
|
+
//
|
|
8
|
+
// Sin dependencias externas, sin embeddings — todo deterministic
|
|
9
|
+
// y barato. Pensado para integrarse al agente IA del Agora como
|
|
10
|
+
// heurística previa a aplicar tácticas reales sobre ST.
|
|
11
|
+
// ============================================================
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.guidedSearch = exports.updateModel = exports.trainModel = exports.tacticSuccessProbability = exports.rankTactics = exports.createEmptyModel = exports.featureNames = exports.extractFeatures = void 0;
|
|
14
|
+
var features_1 = require("./features");
|
|
15
|
+
Object.defineProperty(exports, "extractFeatures", { enumerable: true, get: function () { return features_1.extractFeatures; } });
|
|
16
|
+
Object.defineProperty(exports, "featureNames", { enumerable: true, get: function () { return features_1.featureNames; } });
|
|
17
|
+
var model_1 = require("./model");
|
|
18
|
+
Object.defineProperty(exports, "createEmptyModel", { enumerable: true, get: function () { return model_1.createEmptyModel; } });
|
|
19
|
+
Object.defineProperty(exports, "rankTactics", { enumerable: true, get: function () { return model_1.rankTactics; } });
|
|
20
|
+
Object.defineProperty(exports, "tacticSuccessProbability", { enumerable: true, get: function () { return model_1.tacticSuccessProbability; } });
|
|
21
|
+
Object.defineProperty(exports, "trainModel", { enumerable: true, get: function () { return model_1.trainModel; } });
|
|
22
|
+
Object.defineProperty(exports, "updateModel", { enumerable: true, get: function () { return model_1.updateModel; } });
|
|
23
|
+
var search_1 = require("./search");
|
|
24
|
+
Object.defineProperty(exports, "guidedSearch", { enumerable: true, get: function () { return search_1.guidedSearch; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,6CAA6C;AAC7C,EAAE;AACF,8DAA8D;AAC9D,qDAAqD;AACrD,EAAE;AACF,iEAAiE;AACjE,gEAAgE;AAChE,wDAAwD;AACxD,+DAA+D;;;AAa/D,uCAA2D;AAAlD,2GAAA,eAAe,OAAA;AAAE,wGAAA,YAAY,OAAA;AAEtC,iCAMiB;AALf,yGAAA,gBAAgB,OAAA;AAChB,oGAAA,WAAW,OAAA;AACX,iHAAA,wBAAwB,OAAA;AACxB,mGAAA,UAAU,OAAA;AACV,oGAAA,WAAW,OAAA;AAGb,mCAAwC;AAA/B,sGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ProofState, RankedTactic, RankingModel, TacticRecord } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Inicializa modelo vacío con feature names canónicos.
|
|
4
|
+
* Los pesos arrancan en 0 — equivalente a "uniform prior".
|
|
5
|
+
*/
|
|
6
|
+
export declare function createEmptyModel(): RankingModel;
|
|
7
|
+
interface TrainOptions {
|
|
8
|
+
/** Pasadas sobre el dataset. Default: 50. */
|
|
9
|
+
epochs?: number;
|
|
10
|
+
/** Learning rate. Default: 0.1. */
|
|
11
|
+
learningRate?: number;
|
|
12
|
+
/** L2 regularization. Default: 0.001 — leve, evita pesos enormes. */
|
|
13
|
+
l2?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Entrena un `RankingModel` via logistic regression mini-batch full-epoch.
|
|
17
|
+
*
|
|
18
|
+
* Para cada record: target = `successful ? 1 : 0`, ponderado por
|
|
19
|
+
* `1 / (1 + proofDepthRemaining ?? 0)` cuando está presente — tácticas
|
|
20
|
+
* que dejan menos profundidad pesan más.
|
|
21
|
+
*
|
|
22
|
+
* Las features son las de `extractFeatures(record.beforeState)`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function trainModel(records: TacticRecord[], opts?: TrainOptions): RankingModel;
|
|
25
|
+
/**
|
|
26
|
+
* Rankea candidatas por score descendente. Las tácticas sin pesos
|
|
27
|
+
* aprendidos reciben score 0 (bias 0 + features × 0) y quedan al
|
|
28
|
+
* final establemente (sort estable por index).
|
|
29
|
+
*/
|
|
30
|
+
export declare function rankTactics(state: ProofState, model: RankingModel, candidates: string[]): RankedTactic[];
|
|
31
|
+
/**
|
|
32
|
+
* Update online: 1 paso de gradient descent con el record nuevo.
|
|
33
|
+
* Devuelve un modelo nuevo (no mutación in-place del Map original).
|
|
34
|
+
*
|
|
35
|
+
* Útil cuando el agente IA acaba de probar una táctica y queremos
|
|
36
|
+
* incorporar la señal sin re-entrenar desde cero.
|
|
37
|
+
*/
|
|
38
|
+
export declare function updateModel(model: RankingModel, record: TacticRecord, learningRate?: number): RankingModel;
|
|
39
|
+
/** Probabilidad calibrada [0,1] de éxito según el modelo. */
|
|
40
|
+
export declare function tacticSuccessProbability(state: ProofState, model: RankingModel, tactic: string): number;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/model.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAW,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgC7F;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAM/C;AAED,UAAU,YAAY;IACpB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,YAAY,CAuCzF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAAE,GACnB,YAAY,EAAE,CAchB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,YAAY,SAAM,GACjB,YAAY,CA2Bd;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Proof Guidance — Modelo de ranking
|
|
4
|
+
//
|
|
5
|
+
// Aprende un peso por par (tactic, feature) via logistic regression
|
|
6
|
+
// con descenso por gradiente. Sin embeddings, sin librerías externas
|
|
7
|
+
// — todo en memoria, vectorizable a mano.
|
|
8
|
+
// ============================================================
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.createEmptyModel = createEmptyModel;
|
|
11
|
+
exports.trainModel = trainModel;
|
|
12
|
+
exports.rankTactics = rankTactics;
|
|
13
|
+
exports.updateModel = updateModel;
|
|
14
|
+
exports.tacticSuccessProbability = tacticSuccessProbability;
|
|
15
|
+
const features_1 = require("./features");
|
|
16
|
+
const KEY_SEP = '::';
|
|
17
|
+
function weightKey(tactic, featureName) {
|
|
18
|
+
return `${tactic}${KEY_SEP}${featureName}`;
|
|
19
|
+
}
|
|
20
|
+
function sigmoid(z) {
|
|
21
|
+
// Clamp para evitar overflow numérico en exp().
|
|
22
|
+
if (z > 30)
|
|
23
|
+
return 1;
|
|
24
|
+
if (z < -30)
|
|
25
|
+
return 0;
|
|
26
|
+
return 1 / (1 + Math.exp(-z));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Score lineal de una táctica para un set de features.
|
|
30
|
+
* z = bias[tactic] + Σ_f weights[tactic, f] * featureValue.
|
|
31
|
+
*/
|
|
32
|
+
function linearScore(tactic, features, model) {
|
|
33
|
+
let z = model.bias.get(tactic) ?? 0;
|
|
34
|
+
for (const f of features) {
|
|
35
|
+
const w = model.weights.get(weightKey(tactic, f.name));
|
|
36
|
+
if (w !== undefined)
|
|
37
|
+
z += w * f.value;
|
|
38
|
+
}
|
|
39
|
+
return z;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Inicializa modelo vacío con feature names canónicos.
|
|
43
|
+
* Los pesos arrancan en 0 — equivalente a "uniform prior".
|
|
44
|
+
*/
|
|
45
|
+
function createEmptyModel() {
|
|
46
|
+
return {
|
|
47
|
+
features: (0, features_1.featureNames)(),
|
|
48
|
+
weights: new Map(),
|
|
49
|
+
bias: new Map(),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Entrena un `RankingModel` via logistic regression mini-batch full-epoch.
|
|
54
|
+
*
|
|
55
|
+
* Para cada record: target = `successful ? 1 : 0`, ponderado por
|
|
56
|
+
* `1 / (1 + proofDepthRemaining ?? 0)` cuando está presente — tácticas
|
|
57
|
+
* que dejan menos profundidad pesan más.
|
|
58
|
+
*
|
|
59
|
+
* Las features son las de `extractFeatures(record.beforeState)`.
|
|
60
|
+
*/
|
|
61
|
+
function trainModel(records, opts = {}) {
|
|
62
|
+
const epochs = opts.epochs ?? 50;
|
|
63
|
+
const lr = opts.learningRate ?? 0.1;
|
|
64
|
+
const l2 = opts.l2 ?? 0.001;
|
|
65
|
+
const model = createEmptyModel();
|
|
66
|
+
if (records.length === 0)
|
|
67
|
+
return model;
|
|
68
|
+
// Pre-extraemos features por record (1 vez, no por epoch).
|
|
69
|
+
const extracted = records.map((r) => ({
|
|
70
|
+
tactic: r.tactic,
|
|
71
|
+
features: (0, features_1.extractFeatures)(r.beforeState),
|
|
72
|
+
target: r.successful ? 1 : 0,
|
|
73
|
+
weight: r.proofDepthRemaining !== undefined ? 1 / (1 + Math.max(0, r.proofDepthRemaining)) : 1,
|
|
74
|
+
}));
|
|
75
|
+
for (let epoch = 0; epoch < epochs; epoch++) {
|
|
76
|
+
for (const sample of extracted) {
|
|
77
|
+
const z = linearScore(sample.tactic, sample.features, model);
|
|
78
|
+
const p = sigmoid(z);
|
|
79
|
+
const error = (p - sample.target) * sample.weight;
|
|
80
|
+
// Gradiente por feature.
|
|
81
|
+
for (const f of sample.features) {
|
|
82
|
+
const key = weightKey(sample.tactic, f.name);
|
|
83
|
+
const w = model.weights.get(key) ?? 0;
|
|
84
|
+
const grad = error * f.value + l2 * w;
|
|
85
|
+
model.weights.set(key, w - lr * grad);
|
|
86
|
+
}
|
|
87
|
+
// Gradiente del bias.
|
|
88
|
+
const b = model.bias.get(sample.tactic) ?? 0;
|
|
89
|
+
const gradB = error + l2 * b;
|
|
90
|
+
model.bias.set(sample.tactic, b - lr * gradB);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return model;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Rankea candidatas por score descendente. Las tácticas sin pesos
|
|
97
|
+
* aprendidos reciben score 0 (bias 0 + features × 0) y quedan al
|
|
98
|
+
* final establemente (sort estable por index).
|
|
99
|
+
*/
|
|
100
|
+
function rankTactics(state, model, candidates) {
|
|
101
|
+
const features = (0, features_1.extractFeatures)(state);
|
|
102
|
+
const scored = candidates.map((tactic, idx) => ({
|
|
103
|
+
tactic,
|
|
104
|
+
score: linearScore(tactic, features, model),
|
|
105
|
+
idx,
|
|
106
|
+
}));
|
|
107
|
+
scored.sort((a, b) => {
|
|
108
|
+
if (b.score !== a.score)
|
|
109
|
+
return b.score - a.score;
|
|
110
|
+
return a.idx - b.idx; // tie-break determinístico.
|
|
111
|
+
});
|
|
112
|
+
return scored.map(({ tactic, score }) => ({ tactic, score }));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Update online: 1 paso de gradient descent con el record nuevo.
|
|
116
|
+
* Devuelve un modelo nuevo (no mutación in-place del Map original).
|
|
117
|
+
*
|
|
118
|
+
* Útil cuando el agente IA acaba de probar una táctica y queremos
|
|
119
|
+
* incorporar la señal sin re-entrenar desde cero.
|
|
120
|
+
*/
|
|
121
|
+
function updateModel(model, record, learningRate = 0.1) {
|
|
122
|
+
const next = {
|
|
123
|
+
features: model.features,
|
|
124
|
+
weights: new Map(model.weights),
|
|
125
|
+
bias: new Map(model.bias),
|
|
126
|
+
};
|
|
127
|
+
const features = (0, features_1.extractFeatures)(record.beforeState);
|
|
128
|
+
const target = record.successful ? 1 : 0;
|
|
129
|
+
const sampleWeight = record.proofDepthRemaining !== undefined
|
|
130
|
+
? 1 / (1 + Math.max(0, record.proofDepthRemaining))
|
|
131
|
+
: 1;
|
|
132
|
+
const z = linearScore(record.tactic, features, next);
|
|
133
|
+
const p = sigmoid(z);
|
|
134
|
+
const error = (p - target) * sampleWeight;
|
|
135
|
+
for (const f of features) {
|
|
136
|
+
const key = weightKey(record.tactic, f.name);
|
|
137
|
+
const w = next.weights.get(key) ?? 0;
|
|
138
|
+
next.weights.set(key, w - learningRate * error * f.value);
|
|
139
|
+
}
|
|
140
|
+
const b = next.bias.get(record.tactic) ?? 0;
|
|
141
|
+
next.bias.set(record.tactic, b - learningRate * error);
|
|
142
|
+
return next;
|
|
143
|
+
}
|
|
144
|
+
/** Probabilidad calibrada [0,1] de éxito según el modelo. */
|
|
145
|
+
function tacticSuccessProbability(state, model, tactic) {
|
|
146
|
+
const features = (0, features_1.extractFeatures)(state);
|
|
147
|
+
return sigmoid(linearScore(tactic, features, model));
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ApplyTactic, ProofState, RankingModel, SearchOptions, SearchResult } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Beam search guiado por el modelo. `applyTactic` define la semántica
|
|
4
|
+
* de cada táctica — el módulo no asume nada sobre la lógica de fondo.
|
|
5
|
+
*/
|
|
6
|
+
export declare function guidedSearch(initialState: ProofState, applyTactic: ApplyTactic, model: RankingModel, candidates: string[], opts?: SearchOptions): SearchResult;
|
|
7
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/tooling/proof-guidance/search.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EAEb,MAAM,SAAS,CAAC;AA+BjB;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,UAAU,EACxB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,GAAE,aAAkB,GACvB,YAAY,CAyEd"}
|