@stevenvo780/st-lang 4.8.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 +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/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/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/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/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/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/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,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Proof Certificate — Standard rule checkers
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Cada checker recibe (args, conclusion, premises) y retorna true
|
|
7
|
+
// si el paso aplica la regla correctamente. NO hacen búsqueda — sólo
|
|
8
|
+
// chequean estructura sintáctica de strings canonicalizados.
|
|
9
|
+
//
|
|
10
|
+
// Las fórmulas viajan como strings. Reconocemos los operadores
|
|
11
|
+
// estándar de proposicional/clásico con variantes ASCII y Unicode:
|
|
12
|
+
//
|
|
13
|
+
// negación: ~ A | ¬A | !A | not A
|
|
14
|
+
// conjunción: A & B | A ∧ B | A and B
|
|
15
|
+
// disyunción: A | B | A ∨ B | A or B
|
|
16
|
+
// implicación: A -> B | A → B
|
|
17
|
+
// bicondicional: A <-> B | A ↔ B
|
|
18
|
+
//
|
|
19
|
+
// Para minimizar dependencia con el AST interno, comparamos por
|
|
20
|
+
// igualdad de la forma normalizada (`normalizeFormula`). Cuando
|
|
21
|
+
// necesitamos descomponer un operador binario, escaneamos a top-level
|
|
22
|
+
// respetando paréntesis.
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.STANDARD_RULES = void 0;
|
|
25
|
+
const canonical_1 = require("./canonical");
|
|
26
|
+
function strip(formula) {
|
|
27
|
+
let s = (0, canonical_1.normalizeFormula)(formula);
|
|
28
|
+
while (s.startsWith('(') && s.endsWith(')') && balancedOuter(s)) {
|
|
29
|
+
s = s.slice(1, -1).trim();
|
|
30
|
+
}
|
|
31
|
+
return s;
|
|
32
|
+
}
|
|
33
|
+
function balancedOuter(s) {
|
|
34
|
+
if (!s.startsWith('(') || !s.endsWith(')'))
|
|
35
|
+
return false;
|
|
36
|
+
let depth = 0;
|
|
37
|
+
for (let i = 0; i < s.length; i++) {
|
|
38
|
+
const c = s[i];
|
|
39
|
+
if (c === '(')
|
|
40
|
+
depth++;
|
|
41
|
+
else if (c === ')') {
|
|
42
|
+
depth--;
|
|
43
|
+
if (depth === 0 && i < s.length - 1)
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return depth === 0;
|
|
48
|
+
}
|
|
49
|
+
// Operadores binarios ordenados por precedencia (menor precedencia
|
|
50
|
+
// primero — escaneamos de menor a mayor). Cada entrada es una lista
|
|
51
|
+
// de spellings equivalentes.
|
|
52
|
+
const BINARY_OPS = [
|
|
53
|
+
{ name: 'iff', spellings: ['<->', '↔'] },
|
|
54
|
+
{ name: 'implies', spellings: ['->', '→'] },
|
|
55
|
+
{ name: 'or', spellings: ['|', '∨', ' or '] },
|
|
56
|
+
{ name: 'and', spellings: ['&', '∧', ' and '] },
|
|
57
|
+
];
|
|
58
|
+
function findTopLevel(s, needle) {
|
|
59
|
+
let depth = 0;
|
|
60
|
+
for (let i = 0; i <= s.length - needle.length; i++) {
|
|
61
|
+
const c = s[i];
|
|
62
|
+
if (c === '(') {
|
|
63
|
+
depth++;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (c === ')') {
|
|
67
|
+
depth--;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (depth === 0 && s.startsWith(needle, i))
|
|
71
|
+
return i;
|
|
72
|
+
}
|
|
73
|
+
return -1;
|
|
74
|
+
}
|
|
75
|
+
function splitBinary(formula, opName) {
|
|
76
|
+
const s = strip(formula);
|
|
77
|
+
for (const op of BINARY_OPS) {
|
|
78
|
+
if (op.name !== opName)
|
|
79
|
+
continue;
|
|
80
|
+
for (const sp of op.spellings) {
|
|
81
|
+
const idx = findTopLevel(s, sp);
|
|
82
|
+
if (idx >= 0) {
|
|
83
|
+
const left = strip(s.slice(0, idx));
|
|
84
|
+
const right = strip(s.slice(idx + sp.length));
|
|
85
|
+
return { operator: opName, left, right };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
function stripNot(formula) {
|
|
92
|
+
const s = strip(formula);
|
|
93
|
+
if (s.startsWith('~'))
|
|
94
|
+
return strip(s.slice(1));
|
|
95
|
+
if (s.startsWith('¬'))
|
|
96
|
+
return strip(s.slice(1));
|
|
97
|
+
if (s.startsWith('!'))
|
|
98
|
+
return strip(s.slice(1));
|
|
99
|
+
if (s.toLowerCase().startsWith('not '))
|
|
100
|
+
return strip(s.slice(4));
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
function eq(a, b) {
|
|
104
|
+
return strip(a) === strip(b);
|
|
105
|
+
}
|
|
106
|
+
// ---- Checkers ----
|
|
107
|
+
const axiomChecker = (args, conclusion, premises) => {
|
|
108
|
+
// axiom: la conclusión es uno de los args (el nombre del axioma es
|
|
109
|
+
// la propia fórmula) y no hay premisas.
|
|
110
|
+
if (premises.length !== 0)
|
|
111
|
+
return false;
|
|
112
|
+
if (args.length === 0)
|
|
113
|
+
return false;
|
|
114
|
+
return args.some((a) => eq(a, conclusion));
|
|
115
|
+
};
|
|
116
|
+
const assumptionChecker = (_args, _conclusion, premises) => {
|
|
117
|
+
// assumption: no premisas (es una hipótesis local). El verificador
|
|
118
|
+
// global se encarga de comprobar que se descargue eventualmente.
|
|
119
|
+
return premises.length === 0;
|
|
120
|
+
};
|
|
121
|
+
const reiterationChecker = (_args, conclusion, premises) => {
|
|
122
|
+
// reit: una sola premisa idéntica a la conclusión.
|
|
123
|
+
if (premises.length !== 1)
|
|
124
|
+
return false;
|
|
125
|
+
return eq(premises[0], conclusion);
|
|
126
|
+
};
|
|
127
|
+
const modusPonensChecker = (_args, conclusion, premises) => {
|
|
128
|
+
// MP: premisas = [A -> B, A], conclusión = B
|
|
129
|
+
if (premises.length !== 2)
|
|
130
|
+
return false;
|
|
131
|
+
const [impl, ant] = premises;
|
|
132
|
+
const split = splitBinary(impl, 'implies');
|
|
133
|
+
if (!split)
|
|
134
|
+
return false;
|
|
135
|
+
return eq(split.left, ant) && eq(split.right, conclusion);
|
|
136
|
+
};
|
|
137
|
+
const modusTollensChecker = (_args, conclusion, premises) => {
|
|
138
|
+
// MT: premisas = [A -> B, ~B], conclusión = ~A
|
|
139
|
+
if (premises.length !== 2)
|
|
140
|
+
return false;
|
|
141
|
+
const [impl, notB] = premises;
|
|
142
|
+
const split = splitBinary(impl, 'implies');
|
|
143
|
+
if (!split)
|
|
144
|
+
return false;
|
|
145
|
+
const inside = stripNot(notB);
|
|
146
|
+
const concInside = stripNot(conclusion);
|
|
147
|
+
if (inside === null || concInside === null)
|
|
148
|
+
return false;
|
|
149
|
+
return eq(inside, split.right) && eq(concInside, split.left);
|
|
150
|
+
};
|
|
151
|
+
const andIntroChecker = (_args, conclusion, premises) => {
|
|
152
|
+
// ∧I: premisas = [A, B], conclusión = A & B
|
|
153
|
+
if (premises.length !== 2)
|
|
154
|
+
return false;
|
|
155
|
+
const split = splitBinary(conclusion, 'and');
|
|
156
|
+
if (!split)
|
|
157
|
+
return false;
|
|
158
|
+
return eq(split.left, premises[0]) && eq(split.right, premises[1]);
|
|
159
|
+
};
|
|
160
|
+
const andElimLeftChecker = (_args, conclusion, premises) => {
|
|
161
|
+
if (premises.length !== 1)
|
|
162
|
+
return false;
|
|
163
|
+
const split = splitBinary(premises[0], 'and');
|
|
164
|
+
if (!split)
|
|
165
|
+
return false;
|
|
166
|
+
return eq(split.left, conclusion);
|
|
167
|
+
};
|
|
168
|
+
const andElimRightChecker = (_args, conclusion, premises) => {
|
|
169
|
+
if (premises.length !== 1)
|
|
170
|
+
return false;
|
|
171
|
+
const split = splitBinary(premises[0], 'and');
|
|
172
|
+
if (!split)
|
|
173
|
+
return false;
|
|
174
|
+
return eq(split.right, conclusion);
|
|
175
|
+
};
|
|
176
|
+
const orIntroLeftChecker = (_args, conclusion, premises) => {
|
|
177
|
+
// ∨IL: premisa = A, conclusión = A | B (B arbitrario pero declarado en args[0])
|
|
178
|
+
if (premises.length !== 1)
|
|
179
|
+
return false;
|
|
180
|
+
const split = splitBinary(conclusion, 'or');
|
|
181
|
+
if (!split)
|
|
182
|
+
return false;
|
|
183
|
+
return eq(split.left, premises[0]);
|
|
184
|
+
};
|
|
185
|
+
const orIntroRightChecker = (_args, conclusion, premises) => {
|
|
186
|
+
if (premises.length !== 1)
|
|
187
|
+
return false;
|
|
188
|
+
const split = splitBinary(conclusion, 'or');
|
|
189
|
+
if (!split)
|
|
190
|
+
return false;
|
|
191
|
+
return eq(split.right, premises[0]);
|
|
192
|
+
};
|
|
193
|
+
const orElimChecker = (_args, conclusion, premises) => {
|
|
194
|
+
// ∨E: premisas = [A | B, A -> C, B -> C], conclusión = C
|
|
195
|
+
if (premises.length !== 3)
|
|
196
|
+
return false;
|
|
197
|
+
const disj = splitBinary(premises[0], 'or');
|
|
198
|
+
const impL = splitBinary(premises[1], 'implies');
|
|
199
|
+
const impR = splitBinary(premises[2], 'implies');
|
|
200
|
+
if (!disj || !impL || !impR)
|
|
201
|
+
return false;
|
|
202
|
+
return (eq(disj.left, impL.left) &&
|
|
203
|
+
eq(disj.right, impR.left) &&
|
|
204
|
+
eq(impL.right, conclusion) &&
|
|
205
|
+
eq(impR.right, conclusion));
|
|
206
|
+
};
|
|
207
|
+
const impliesIntroChecker = (args, conclusion, premises) => {
|
|
208
|
+
// →I: descarga la hipótesis declarada en args[0] de la sub-derivación
|
|
209
|
+
// que produjo `premises[0]`. Conclusión = args[0] -> premises[0].
|
|
210
|
+
// El checker se limita a la forma sintáctica.
|
|
211
|
+
if (premises.length !== 1)
|
|
212
|
+
return false;
|
|
213
|
+
if (args.length < 1)
|
|
214
|
+
return false;
|
|
215
|
+
const split = splitBinary(conclusion, 'implies');
|
|
216
|
+
if (!split)
|
|
217
|
+
return false;
|
|
218
|
+
return eq(split.left, args[0]) && eq(split.right, premises[0]);
|
|
219
|
+
};
|
|
220
|
+
const impliesElimChecker = modusPonensChecker;
|
|
221
|
+
const notIntroChecker = (args, conclusion, premises) => {
|
|
222
|
+
// ¬I: de una sub-derivación de ⊥ asumiendo args[0], deriva ¬args[0].
|
|
223
|
+
// premises[0] debe ser ⊥ (false/bottom/⊥/_|_).
|
|
224
|
+
if (premises.length !== 1)
|
|
225
|
+
return false;
|
|
226
|
+
if (args.length < 1)
|
|
227
|
+
return false;
|
|
228
|
+
const inside = stripNot(conclusion);
|
|
229
|
+
if (inside === null)
|
|
230
|
+
return false;
|
|
231
|
+
const bottom = strip(premises[0]);
|
|
232
|
+
if (!['⊥', 'false', '_|_', 'bottom'].includes(bottom.toLowerCase())) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
return eq(inside, args[0]);
|
|
236
|
+
};
|
|
237
|
+
const notElimChecker = (_args, conclusion, premises) => {
|
|
238
|
+
// ¬E: premisas = [A, ~A], conclusión = ⊥
|
|
239
|
+
if (premises.length !== 2)
|
|
240
|
+
return false;
|
|
241
|
+
const a = premises[0];
|
|
242
|
+
const notA = stripNot(premises[1]);
|
|
243
|
+
if (notA === null)
|
|
244
|
+
return false;
|
|
245
|
+
if (!eq(a, notA))
|
|
246
|
+
return false;
|
|
247
|
+
const c = strip(conclusion).toLowerCase();
|
|
248
|
+
return ['⊥', 'false', '_|_', 'bottom'].includes(c);
|
|
249
|
+
};
|
|
250
|
+
const efqChecker = (_args, _conclusion, premises) => {
|
|
251
|
+
// ex falso: de ⊥ deriva cualquier cosa.
|
|
252
|
+
if (premises.length !== 1)
|
|
253
|
+
return false;
|
|
254
|
+
const b = strip(premises[0]).toLowerCase();
|
|
255
|
+
return ['⊥', 'false', '_|_', 'bottom'].includes(b);
|
|
256
|
+
};
|
|
257
|
+
const doubleNegElimChecker = (_args, conclusion, premises) => {
|
|
258
|
+
// ¬¬E: premisa = ~~A, conclusión = A. (clásico)
|
|
259
|
+
if (premises.length !== 1)
|
|
260
|
+
return false;
|
|
261
|
+
const inner1 = stripNot(premises[0]);
|
|
262
|
+
if (inner1 === null)
|
|
263
|
+
return false;
|
|
264
|
+
const inner2 = stripNot(inner1);
|
|
265
|
+
if (inner2 === null)
|
|
266
|
+
return false;
|
|
267
|
+
return eq(inner2, conclusion);
|
|
268
|
+
};
|
|
269
|
+
const doubleNegIntroChecker = (_args, conclusion, premises) => {
|
|
270
|
+
// ¬¬I: premisa = A, conclusión = ~~A.
|
|
271
|
+
if (premises.length !== 1)
|
|
272
|
+
return false;
|
|
273
|
+
const inner1 = stripNot(conclusion);
|
|
274
|
+
if (inner1 === null)
|
|
275
|
+
return false;
|
|
276
|
+
const inner2 = stripNot(inner1);
|
|
277
|
+
if (inner2 === null)
|
|
278
|
+
return false;
|
|
279
|
+
return eq(inner2, premises[0]);
|
|
280
|
+
};
|
|
281
|
+
const iffIntroChecker = (_args, conclusion, premises) => {
|
|
282
|
+
// ↔I: premisas = [A -> B, B -> A], conclusión = A <-> B
|
|
283
|
+
if (premises.length !== 2)
|
|
284
|
+
return false;
|
|
285
|
+
const fwd = splitBinary(premises[0], 'implies');
|
|
286
|
+
const bwd = splitBinary(premises[1], 'implies');
|
|
287
|
+
if (!fwd || !bwd)
|
|
288
|
+
return false;
|
|
289
|
+
if (!(eq(fwd.left, bwd.right) && eq(fwd.right, bwd.left)))
|
|
290
|
+
return false;
|
|
291
|
+
const iff = splitBinary(conclusion, 'iff');
|
|
292
|
+
if (!iff)
|
|
293
|
+
return false;
|
|
294
|
+
return eq(iff.left, fwd.left) && eq(iff.right, fwd.right);
|
|
295
|
+
};
|
|
296
|
+
const iffElimLeftChecker = (_args, conclusion, premises) => {
|
|
297
|
+
// ↔EL: premisa = A <-> B, conclusión = A -> B
|
|
298
|
+
if (premises.length !== 1)
|
|
299
|
+
return false;
|
|
300
|
+
const iff = splitBinary(premises[0], 'iff');
|
|
301
|
+
if (!iff)
|
|
302
|
+
return false;
|
|
303
|
+
const impl = splitBinary(conclusion, 'implies');
|
|
304
|
+
if (!impl)
|
|
305
|
+
return false;
|
|
306
|
+
return eq(iff.left, impl.left) && eq(iff.right, impl.right);
|
|
307
|
+
};
|
|
308
|
+
const iffElimRightChecker = (_args, conclusion, premises) => {
|
|
309
|
+
if (premises.length !== 1)
|
|
310
|
+
return false;
|
|
311
|
+
const iff = splitBinary(premises[0], 'iff');
|
|
312
|
+
if (!iff)
|
|
313
|
+
return false;
|
|
314
|
+
const impl = splitBinary(conclusion, 'implies');
|
|
315
|
+
if (!impl)
|
|
316
|
+
return false;
|
|
317
|
+
return eq(iff.left, impl.right) && eq(iff.right, impl.left);
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* Tabla de reglas estándar. El verificador busca primero en esta tabla
|
|
321
|
+
* (o en una tabla custom pasada como parámetro). Si la regla no
|
|
322
|
+
* existe, registra un error pero no aborta para listar todos.
|
|
323
|
+
*/
|
|
324
|
+
exports.STANDARD_RULES = new Map([
|
|
325
|
+
['axiom', axiomChecker],
|
|
326
|
+
['assumption', assumptionChecker],
|
|
327
|
+
['hypothesis', assumptionChecker],
|
|
328
|
+
['premise', axiomChecker],
|
|
329
|
+
['reiteration', reiterationChecker],
|
|
330
|
+
['reit', reiterationChecker],
|
|
331
|
+
['modus-ponens', modusPonensChecker],
|
|
332
|
+
['mp', modusPonensChecker],
|
|
333
|
+
['implies-elim', impliesElimChecker],
|
|
334
|
+
['->E', impliesElimChecker],
|
|
335
|
+
['modus-tollens', modusTollensChecker],
|
|
336
|
+
['mt', modusTollensChecker],
|
|
337
|
+
['implies-intro', impliesIntroChecker],
|
|
338
|
+
['->I', impliesIntroChecker],
|
|
339
|
+
['and-intro', andIntroChecker],
|
|
340
|
+
['&I', andIntroChecker],
|
|
341
|
+
['conj-intro', andIntroChecker],
|
|
342
|
+
['and-elim-left', andElimLeftChecker],
|
|
343
|
+
['&EL', andElimLeftChecker],
|
|
344
|
+
['and-elim-right', andElimRightChecker],
|
|
345
|
+
['&ER', andElimRightChecker],
|
|
346
|
+
['or-intro-left', orIntroLeftChecker],
|
|
347
|
+
['|IL', orIntroLeftChecker],
|
|
348
|
+
['or-intro-right', orIntroRightChecker],
|
|
349
|
+
['|IR', orIntroRightChecker],
|
|
350
|
+
['or-elim', orElimChecker],
|
|
351
|
+
['|E', orElimChecker],
|
|
352
|
+
['not-intro', notIntroChecker],
|
|
353
|
+
['~I', notIntroChecker],
|
|
354
|
+
['not-elim', notElimChecker],
|
|
355
|
+
['~E', notElimChecker],
|
|
356
|
+
['ex-falso', efqChecker],
|
|
357
|
+
['efq', efqChecker],
|
|
358
|
+
['double-neg-elim', doubleNegElimChecker],
|
|
359
|
+
['~~E', doubleNegElimChecker],
|
|
360
|
+
['double-neg-intro', doubleNegIntroChecker],
|
|
361
|
+
['~~I', doubleNegIntroChecker],
|
|
362
|
+
['iff-intro', iffIntroChecker],
|
|
363
|
+
['<->I', iffIntroChecker],
|
|
364
|
+
['iff-elim-left', iffElimLeftChecker],
|
|
365
|
+
['<->EL', iffElimLeftChecker],
|
|
366
|
+
['iff-elim-right', iffElimRightChecker],
|
|
367
|
+
['<->ER', iffElimRightChecker],
|
|
368
|
+
]);
|
|
369
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/proof-systems/certificate/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Un paso del certificado. Cada paso tiene un id único dentro del
|
|
3
|
+
* certificado, una regla declarada, una lista de argumentos
|
|
4
|
+
* (referencias a ids previos o términos literales), una conclusión
|
|
5
|
+
* derivada por aplicar la regla a las premisas, y la lista de ids
|
|
6
|
+
* de los pasos de los que depende.
|
|
7
|
+
*
|
|
8
|
+
* - `id`: identificador único en el certificado (e.g. `s1`, `step-3`).
|
|
9
|
+
* - `rule`: nombre canónico de la regla. Ver `STANDARD_RULES`.
|
|
10
|
+
* - `args`: lista de argumentos textuales para la regla. Para reglas
|
|
11
|
+
* tipo `modus-ponens` los args suelen ser ids de premisas en el
|
|
12
|
+
* orden esperado por la regla (e.g. `["s1", "s2"]`). Reglas como
|
|
13
|
+
* `axiom` o `assumption` pueden tener `args` vacíos o incluir un
|
|
14
|
+
* nombre del axioma.
|
|
15
|
+
* - `conclusion`: fórmula derivada en el paso, en forma canónica.
|
|
16
|
+
* - `depends`: ids de pasos previos referenciados (ya sea por args
|
|
17
|
+
* o por contexto). El verificador valida que no haya ciclos y que
|
|
18
|
+
* todos los ids citados existan.
|
|
19
|
+
*/
|
|
20
|
+
export interface CertStep {
|
|
21
|
+
id: string;
|
|
22
|
+
rule: string;
|
|
23
|
+
args: string[];
|
|
24
|
+
conclusion: string;
|
|
25
|
+
depends: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Firma criptográfica de un certificado. Por defecto Ed25519 vía
|
|
29
|
+
* WebCrypto cuando está disponible; cae a HMAC-SHA256 en runtimes
|
|
30
|
+
* que no soporten Ed25519 (Node antiguo, Bun viejo).
|
|
31
|
+
*/
|
|
32
|
+
export interface CertSignature {
|
|
33
|
+
/** Algoritmo usado. */
|
|
34
|
+
algorithm: 'Ed25519' | 'HMAC-SHA256';
|
|
35
|
+
/** Clave pública en hex (raw export). Para HMAC: clave compartida. */
|
|
36
|
+
publicKey: string;
|
|
37
|
+
/** Firma en hex sobre la forma canónica sin hash ni signature. */
|
|
38
|
+
signature: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Certificado portable de prueba. Estructura inspirada en LFSC.
|
|
42
|
+
*
|
|
43
|
+
* `hash` es SHA-256 de la forma canónica del certificado SIN los
|
|
44
|
+
* campos `hash` ni `signature`. Esto permite verificar integridad
|
|
45
|
+
* antes y después de firmar.
|
|
46
|
+
*
|
|
47
|
+
* Ejemplo mínimo (modus ponens):
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* const cert: ProofCertificate = {
|
|
51
|
+
* version: '1.0',
|
|
52
|
+
* goal: 'q',
|
|
53
|
+
* profile: 'classical.propositional',
|
|
54
|
+
* axioms: ['p', 'p -> q'],
|
|
55
|
+
* steps: [
|
|
56
|
+
* { id: 's1', rule: 'axiom', args: ['p'], conclusion: 'p', depends: [] },
|
|
57
|
+
* { id: 's2', rule: 'axiom', args: ['p -> q'], conclusion: 'p -> q', depends: [] },
|
|
58
|
+
* { id: 's3', rule: 'modus-ponens', args: ['s2', 's1'], conclusion: 'q', depends: ['s2', 's1'] },
|
|
59
|
+
* ],
|
|
60
|
+
* hash: '...',
|
|
61
|
+
* };
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export interface ProofCertificate {
|
|
65
|
+
version: '1.0';
|
|
66
|
+
/** Fórmula final probada, en forma canónica. */
|
|
67
|
+
goal: string;
|
|
68
|
+
/** Perfil lógico bajo el cual se interpreta la prueba. */
|
|
69
|
+
profile: string;
|
|
70
|
+
/** Axiomas asumidos sobre los que se construye la prueba. */
|
|
71
|
+
axioms: string[];
|
|
72
|
+
/** Pasos del certificado en orden topológico (deps antes que dependientes). */
|
|
73
|
+
steps: CertStep[];
|
|
74
|
+
/** SHA-256 hex de la forma canónica sin `hash` ni `signature`. */
|
|
75
|
+
hash: string;
|
|
76
|
+
/** Firma opcional. Si presente, debe verificar contra la forma canónica sin firma. */
|
|
77
|
+
signature?: CertSignature;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resultado de verificar un certificado en modo check-only.
|
|
81
|
+
*
|
|
82
|
+
* `valid` sólo es `true` si TODOS los chequeos pasan:
|
|
83
|
+
* - el hash coincide con la forma canónica del certificado;
|
|
84
|
+
* - todos los ids son únicos y todas las referencias existen;
|
|
85
|
+
* - no hay ciclos en `depends`;
|
|
86
|
+
* - el goal aparece como conclusión de algún paso;
|
|
87
|
+
* - cada paso aplica su regla correctamente vía
|
|
88
|
+
* `CertRuleChecker` (regla declarada existe y el checker
|
|
89
|
+
* retorna true para los args/conclusion/premisas).
|
|
90
|
+
*
|
|
91
|
+
* `errors` lista todas las violaciones detectadas; el verificador
|
|
92
|
+
* NO se detiene en la primera para dar feedback completo.
|
|
93
|
+
*
|
|
94
|
+
* `stepsVerified` cuenta los pasos cuya regla fue chequeada con
|
|
95
|
+
* éxito por su `CertRuleChecker`. `totalSteps` es `steps.length`.
|
|
96
|
+
*/
|
|
97
|
+
export interface VerificationResult {
|
|
98
|
+
valid: boolean;
|
|
99
|
+
errors: string[];
|
|
100
|
+
stepsVerified: number;
|
|
101
|
+
totalSteps: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Firma de un checker de regla. Recibe los argumentos crudos del
|
|
105
|
+
* paso, la conclusión declarada y las premisas resueltas (las
|
|
106
|
+
* conclusiones de los pasos referenciados en `depends`, en el
|
|
107
|
+
* orden en que aparecen en `depends`).
|
|
108
|
+
*
|
|
109
|
+
* Debe retornar `true` si y sólo si la regla se aplica
|
|
110
|
+
* correctamente. NO debe hacer búsqueda — sólo chequear estructura
|
|
111
|
+
* sintáctica de strings.
|
|
112
|
+
*/
|
|
113
|
+
export type CertRuleChecker = (args: string[], conclusion: string, premises: string[]) => boolean;
|
|
114
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/proof-systems/certificate/types.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,SAAS,EAAE,SAAS,GAAG,aAAa,CAAC;IACrC,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+EAA+E;IAC/E,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// ST Proof Certificate — Tipos públicos
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Formato canónico portable para certificados de prueba inspirado
|
|
7
|
+
// en LFSC (LF + Side Conditions) y Dedukti. La filosofía es
|
|
8
|
+
// "check-only": el verificador NO hace búsqueda de prueba ni
|
|
9
|
+
// resuelve fórmulas — sólo comprueba que cada paso aplica
|
|
10
|
+
// correctamente una regla declarada sobre premisas ya derivadas.
|
|
11
|
+
//
|
|
12
|
+
// Las fórmulas viajan como strings en una representación canónica
|
|
13
|
+
// definida por la profile/perfil. El verificador trata strings con
|
|
14
|
+
// comparación literal previa normalización (trim + colapsar
|
|
15
|
+
// whitespace interno). Esto hace al certificado independiente del
|
|
16
|
+
// AST interno del prover y permite intercambio entre herramientas.
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/proof-systems/certificate/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,wCAAwC;AACxC,+DAA+D;AAC/D,EAAE;AACF,kEAAkE;AAClE,4DAA4D;AAC5D,6DAA6D;AAC7D,0DAA0D;AAC1D,iEAAiE;AACjE,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,4DAA4D;AAC5D,kEAAkE;AAClE,mEAAmE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { canonicalize } from './canonical';
|
|
2
|
+
import type { CertRuleChecker, ProofCertificate, VerificationResult } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Verifica un certificado en modo check-only.
|
|
5
|
+
*
|
|
6
|
+
* Las reglas custom (parámetro `rules`) se prueban PRIMERO; si no
|
|
7
|
+
* está la regla, se busca en `STANDARD_RULES`. Esto permite a
|
|
8
|
+
* profiles externos extender el conjunto sin tocar el core.
|
|
9
|
+
*/
|
|
10
|
+
export declare function verifyCertificate(cert: ProofCertificate, rules?: Map<string, CertRuleChecker>): Promise<VerificationResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Helper para construir un certificado "a mano" a partir de pasos
|
|
13
|
+
* crudos: rellena `hash` (y opcionalmente firma) y normaliza
|
|
14
|
+
* fórmulas.
|
|
15
|
+
*
|
|
16
|
+
* Acepta un objeto similar a `ProofCertificate` sin `hash`; las
|
|
17
|
+
* fórmulas se normalizan in-place vía `canonicalize`.
|
|
18
|
+
*/
|
|
19
|
+
export { canonicalize };
|
|
20
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/proof-systems/certificate/verify.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAqC,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EAAE,eAAe,EAAY,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAyC/F;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAkB,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAkH7B;AAED;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,CAAC"}
|