@stevenvo780/st-lang 4.10.0 → 4.11.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/proof-systems/distributed-exchange/index.d.ts +101 -0
- package/dist/proof-systems/distributed-exchange/index.d.ts.map +1 -0
- package/dist/proof-systems/distributed-exchange/index.js +408 -0
- package/dist/proof-systems/distributed-exchange/index.js.map +1 -0
- package/dist/reasoning/graph-theory/index.d.ts +63 -0
- package/dist/reasoning/graph-theory/index.d.ts.map +1 -0
- package/dist/reasoning/graph-theory/index.js +1043 -0
- package/dist/reasoning/graph-theory/index.js.map +1 -0
- package/dist/reasoning/group-presentation/cayley.d.ts +8 -0
- package/dist/reasoning/group-presentation/cayley.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/cayley.js +38 -0
- package/dist/reasoning/group-presentation/cayley.js.map +1 -0
- package/dist/reasoning/group-presentation/index.d.ts +8 -0
- package/dist/reasoning/group-presentation/index.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/index.js +36 -0
- package/dist/reasoning/group-presentation/index.js.map +1 -0
- package/dist/reasoning/group-presentation/standard-groups.d.ts +6 -0
- package/dist/reasoning/group-presentation/standard-groups.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/standard-groups.js +93 -0
- package/dist/reasoning/group-presentation/standard-groups.js.map +1 -0
- package/dist/reasoning/group-presentation/todd-coxeter.d.ts +10 -0
- package/dist/reasoning/group-presentation/todd-coxeter.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/todd-coxeter.js +362 -0
- package/dist/reasoning/group-presentation/todd-coxeter.js.map +1 -0
- package/dist/reasoning/group-presentation/types.d.ts +7 -0
- package/dist/reasoning/group-presentation/types.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/types.js +22 -0
- package/dist/reasoning/group-presentation/types.js.map +1 -0
- package/dist/reasoning/group-presentation/words.d.ts +10 -0
- package/dist/reasoning/group-presentation/words.d.ts.map +1 -0
- package/dist/reasoning/group-presentation/words.js +109 -0
- package/dist/reasoning/group-presentation/words.js.map +1 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts +2 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.d.ts.map +1 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js +328 -0
- package/dist/tests/proof-systems/distributed-exchange/distributed-exchange.test.js.map +1 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts +2 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.d.ts.map +1 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.js +363 -0
- package/dist/tests/reasoning/graph-theory/graph-theory.test.js.map +1 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts +2 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.d.ts.map +1 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.js +229 -0
- package/dist/tests/reasoning/group-presentation/group-presentation.test.js.map +1 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts +2 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.d.ts.map +1 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js +411 -0
- package/dist/tests/tooling/exporters/coq-v2/coq-v2-exporter.test.js.map +1 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts +2 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.d.ts.map +1 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.js +197 -0
- package/dist/tests/tooling/lemma-library/lemma-library.test.js.map +1 -0
- package/dist/tests/tooling/provenance/ledger.test.d.ts +2 -0
- package/dist/tests/tooling/provenance/ledger.test.d.ts.map +1 -0
- package/dist/tests/tooling/provenance/ledger.test.js +545 -0
- package/dist/tests/tooling/provenance/ledger.test.js.map +1 -0
- package/dist/tooling/exporters/coq-v2/index.d.ts +68 -0
- package/dist/tooling/exporters/coq-v2/index.d.ts.map +1 -0
- package/dist/tooling/exporters/coq-v2/index.js +692 -0
- package/dist/tooling/exporters/coq-v2/index.js.map +1 -0
- package/dist/tooling/lemma-library/apply.d.ts +9 -0
- package/dist/tooling/lemma-library/apply.d.ts.map +1 -0
- package/dist/tooling/lemma-library/apply.js +94 -0
- package/dist/tooling/lemma-library/apply.js.map +1 -0
- package/dist/tooling/lemma-library/arithmetic.d.ts +3 -0
- package/dist/tooling/lemma-library/arithmetic.d.ts.map +1 -0
- package/dist/tooling/lemma-library/arithmetic.js +176 -0
- package/dist/tooling/lemma-library/arithmetic.js.map +1 -0
- package/dist/tooling/lemma-library/firstorder.d.ts +3 -0
- package/dist/tooling/lemma-library/firstorder.d.ts.map +1 -0
- package/dist/tooling/lemma-library/firstorder.js +136 -0
- package/dist/tooling/lemma-library/firstorder.js.map +1 -0
- package/dist/tooling/lemma-library/index.d.ts +13 -0
- package/dist/tooling/lemma-library/index.d.ts.map +1 -0
- package/dist/tooling/lemma-library/index.js +32 -0
- package/dist/tooling/lemma-library/index.js.map +1 -0
- package/dist/tooling/lemma-library/library.d.ts +34 -0
- package/dist/tooling/lemma-library/library.d.ts.map +1 -0
- package/dist/tooling/lemma-library/library.js +126 -0
- package/dist/tooling/lemma-library/library.js.map +1 -0
- package/dist/tooling/lemma-library/modal.d.ts +3 -0
- package/dist/tooling/lemma-library/modal.d.ts.map +1 -0
- package/dist/tooling/lemma-library/modal.js +138 -0
- package/dist/tooling/lemma-library/modal.js.map +1 -0
- package/dist/tooling/lemma-library/propositional.d.ts +3 -0
- package/dist/tooling/lemma-library/propositional.d.ts.map +1 -0
- package/dist/tooling/lemma-library/propositional.js +265 -0
- package/dist/tooling/lemma-library/propositional.js.map +1 -0
- package/dist/tooling/lemma-library/set-theory.d.ts +3 -0
- package/dist/tooling/lemma-library/set-theory.d.ts.map +1 -0
- package/dist/tooling/lemma-library/set-theory.js +134 -0
- package/dist/tooling/lemma-library/set-theory.js.map +1 -0
- package/dist/tooling/lemma-library/standard.d.ts +3 -0
- package/dist/tooling/lemma-library/standard.d.ts.map +1 -0
- package/dist/tooling/lemma-library/standard.js +27 -0
- package/dist/tooling/lemma-library/standard.js.map +1 -0
- package/dist/tooling/lemma-library/tfidf.d.ts +5 -0
- package/dist/tooling/lemma-library/tfidf.d.ts.map +1 -0
- package/dist/tooling/lemma-library/tfidf.js +100 -0
- package/dist/tooling/lemma-library/tfidf.js.map +1 -0
- package/dist/tooling/lemma-library/tokenize.d.ts +2 -0
- package/dist/tooling/lemma-library/tokenize.d.ts.map +1 -0
- package/dist/tooling/lemma-library/tokenize.js +74 -0
- package/dist/tooling/lemma-library/tokenize.js.map +1 -0
- package/dist/tooling/lemma-library/types.d.ts +53 -0
- package/dist/tooling/lemma-library/types.d.ts.map +1 -0
- package/dist/tooling/lemma-library/types.js +10 -0
- package/dist/tooling/lemma-library/types.js.map +1 -0
- package/dist/tooling/provenance/index.d.ts +3 -0
- package/dist/tooling/provenance/index.d.ts.map +1 -0
- package/dist/tooling/provenance/index.js +16 -0
- package/dist/tooling/provenance/index.js.map +1 -0
- package/dist/tooling/provenance/ledger.d.ts +89 -0
- package/dist/tooling/provenance/ledger.d.ts.map +1 -0
- package/dist/tooling/provenance/ledger.js +439 -0
- package/dist/tooling/provenance/ledger.js.map +1 -0
- package/dist/tooling/provenance/types.d.ts +70 -0
- package/dist/tooling/provenance/types.d.ts.map +1 -0
- package/dist/tooling/provenance/types.js +14 -0
- package/dist/tooling/provenance/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Todd-Coxeter coset enumeration.
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Enumera las clases laterales (cosets) de un subgrupo H ≤ G en
|
|
7
|
+
// un grupo finitamente presentado G = ⟨S | R⟩. Si H es trivial,
|
|
8
|
+
// enumera el grupo entero (los cosets son los elementos de G).
|
|
9
|
+
//
|
|
10
|
+
// Idea: representamos los cosets como enteros 1, 2, 3, ... El coset
|
|
11
|
+
// 1 es el subgrupo H. Mantenemos una tabla `τ(c, x) = c'` que
|
|
12
|
+
// significa "el coset `c` multiplicado por la letra `x` es el coset
|
|
13
|
+
// `c'`". A medida que aplicamos las relaciones de R en cada coset
|
|
14
|
+
// y los generadores subgrupales en el coset 1, descubrimos
|
|
15
|
+
// igualdades (coset c ≡ coset c') que se procesan por
|
|
16
|
+
// union-find (coincidence handling).
|
|
17
|
+
//
|
|
18
|
+
// Implementación: HLT (Haselgrove–Leech–Trotter) básico. Para los
|
|
19
|
+
// tamaños de tests que necesitamos (Z/n, D_n, S_3) basta de sobra
|
|
20
|
+
// y termina rápido. `maxCosets` actúa de poda: el algoritmo es
|
|
21
|
+
// indecidible en general (problema de la palabra), así que si se
|
|
22
|
+
// alcanza el límite devolvemos 'incomplete'.
|
|
23
|
+
//
|
|
24
|
+
// Referencias: Holt–Eick–O'Brien, "Handbook of Computational
|
|
25
|
+
// Group Theory", cap. 5 — versión escolar.
|
|
26
|
+
// ============================================================
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.toddCoxeter = toddCoxeter;
|
|
29
|
+
exports.groupOrder = groupOrder;
|
|
30
|
+
exports.isInSubgroup = isInSubgroup;
|
|
31
|
+
const words_1 = require("./words");
|
|
32
|
+
function buildAlphabet(generators) {
|
|
33
|
+
const out = [];
|
|
34
|
+
for (const g of generators) {
|
|
35
|
+
out.push(g);
|
|
36
|
+
out.push((0, words_1.inverse)(g));
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
// rep: encuentra la raíz de la clase de equivalencia con path
|
|
41
|
+
// compression. Si c nunca apareció en replaced, devuelve c.
|
|
42
|
+
function rep(state, c) {
|
|
43
|
+
let cur = c;
|
|
44
|
+
// Encuentra raíz.
|
|
45
|
+
while (true) {
|
|
46
|
+
const parent = state.replaced.get(cur);
|
|
47
|
+
if (parent === undefined || parent === cur)
|
|
48
|
+
break;
|
|
49
|
+
cur = parent;
|
|
50
|
+
}
|
|
51
|
+
// Path compression.
|
|
52
|
+
let walker = c;
|
|
53
|
+
while (true) {
|
|
54
|
+
const parent = state.replaced.get(walker);
|
|
55
|
+
if (parent === undefined || parent === cur)
|
|
56
|
+
break;
|
|
57
|
+
state.replaced.set(walker, cur);
|
|
58
|
+
walker = parent;
|
|
59
|
+
}
|
|
60
|
+
return cur;
|
|
61
|
+
}
|
|
62
|
+
// newCoset: reserva el siguiente cosetId disponible.
|
|
63
|
+
function newCoset(state) {
|
|
64
|
+
const c = state.next++;
|
|
65
|
+
state.alive.add(c);
|
|
66
|
+
state.table.set(c, new Map());
|
|
67
|
+
return c;
|
|
68
|
+
}
|
|
69
|
+
// get τ(c, x). Antes de leer canonicaliza c con rep().
|
|
70
|
+
function getEdge(state, c, x) {
|
|
71
|
+
const rc = rep(state, c);
|
|
72
|
+
const row = state.table.get(rc);
|
|
73
|
+
if (!row)
|
|
74
|
+
return undefined;
|
|
75
|
+
const v = row.get(x);
|
|
76
|
+
return v === undefined ? undefined : rep(state, v);
|
|
77
|
+
}
|
|
78
|
+
// set τ(c, x) = d y τ(d, x⁻¹) = c (consistencia). Si ya había
|
|
79
|
+
// un valor distinto, dispara una coincidencia (deducción de que
|
|
80
|
+
// dos cosets son iguales).
|
|
81
|
+
function setEdge(state, c, x, d, queue) {
|
|
82
|
+
const rc = rep(state, c);
|
|
83
|
+
const rd = rep(state, d);
|
|
84
|
+
const xi = (0, words_1.inverse)(x);
|
|
85
|
+
// Dirección c --x--> d
|
|
86
|
+
const rowC = state.table.get(rc);
|
|
87
|
+
if (!rowC)
|
|
88
|
+
throw new Error(`setEdge: coset ${rc} sin fila`);
|
|
89
|
+
const existing = rowC.get(x);
|
|
90
|
+
if (existing !== undefined) {
|
|
91
|
+
const re = rep(state, existing);
|
|
92
|
+
if (re !== rd) {
|
|
93
|
+
// Coincidencia: re ≡ rd
|
|
94
|
+
queue.push([re, rd]);
|
|
95
|
+
}
|
|
96
|
+
// No sobreescribimos; ya estaba apuntando a algo equivalente.
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
rowC.set(x, rd);
|
|
100
|
+
}
|
|
101
|
+
// Dirección d --x⁻¹--> c
|
|
102
|
+
const rowD = state.table.get(rd);
|
|
103
|
+
if (!rowD)
|
|
104
|
+
throw new Error(`setEdge: coset ${rd} sin fila`);
|
|
105
|
+
const existingInv = rowD.get(xi);
|
|
106
|
+
if (existingInv !== undefined) {
|
|
107
|
+
const rei = rep(state, existingInv);
|
|
108
|
+
if (rei !== rc) {
|
|
109
|
+
queue.push([rei, rc]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
rowD.set(xi, rc);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// processCoincidences: union-find sobre cosets, propaga igualdades.
|
|
117
|
+
function processCoincidences(state, queue) {
|
|
118
|
+
while (queue.length > 0) {
|
|
119
|
+
const pair = queue.shift();
|
|
120
|
+
if (!pair)
|
|
121
|
+
break;
|
|
122
|
+
const a = rep(state, pair[0]);
|
|
123
|
+
const b = rep(state, pair[1]);
|
|
124
|
+
if (a === b)
|
|
125
|
+
continue;
|
|
126
|
+
// Por convenio, identificamos el mayor con el menor.
|
|
127
|
+
const keep = a < b ? a : b;
|
|
128
|
+
const drop = a < b ? b : a;
|
|
129
|
+
state.replaced.set(drop, keep);
|
|
130
|
+
state.alive.delete(drop);
|
|
131
|
+
// Volcar la fila de `drop` sobre `keep`.
|
|
132
|
+
const rowDrop = state.table.get(drop);
|
|
133
|
+
if (!rowDrop)
|
|
134
|
+
continue;
|
|
135
|
+
for (const [x, target] of rowDrop) {
|
|
136
|
+
const rTarget = rep(state, target);
|
|
137
|
+
const rowKeep = state.table.get(keep);
|
|
138
|
+
if (!rowKeep)
|
|
139
|
+
continue;
|
|
140
|
+
const existing = rowKeep.get(x);
|
|
141
|
+
if (existing === undefined) {
|
|
142
|
+
rowKeep.set(x, rTarget);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
const rExisting = rep(state, existing);
|
|
146
|
+
if (rExisting !== rTarget) {
|
|
147
|
+
queue.push([rExisting, rTarget]);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
state.table.delete(drop);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// scan: recorre la palabra `w` empezando en `start`. Si en algún
|
|
155
|
+
// momento llega al final, deduce τ(prev, lastLetter) = start
|
|
156
|
+
// (porque la relación = 1 obliga al ciclo). Si no llega, completa
|
|
157
|
+
// con cosets nuevos hacia adelante.
|
|
158
|
+
function scanAndFill(state, start, w, queue) {
|
|
159
|
+
if (w.length === 0)
|
|
160
|
+
return;
|
|
161
|
+
// Caminamos desde la izquierda.
|
|
162
|
+
let left = start;
|
|
163
|
+
let leftIdx = 0;
|
|
164
|
+
while (leftIdx < w.length) {
|
|
165
|
+
const x = w[leftIdx];
|
|
166
|
+
const next = getEdge(state, left, x);
|
|
167
|
+
if (next === undefined)
|
|
168
|
+
break;
|
|
169
|
+
left = next;
|
|
170
|
+
leftIdx++;
|
|
171
|
+
}
|
|
172
|
+
if (leftIdx === w.length) {
|
|
173
|
+
// Cerramos el ciclo: τ(left, ε) ya está en start.
|
|
174
|
+
if (rep(state, left) !== rep(state, start)) {
|
|
175
|
+
queue.push([left, start]);
|
|
176
|
+
processCoincidences(state, queue);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Caminamos desde la derecha (con inversos).
|
|
181
|
+
let right = start;
|
|
182
|
+
let rightIdx = w.length;
|
|
183
|
+
while (rightIdx > leftIdx) {
|
|
184
|
+
const x = w[rightIdx - 1];
|
|
185
|
+
const xi = (0, words_1.inverse)(x);
|
|
186
|
+
const prev = getEdge(state, right, xi);
|
|
187
|
+
if (prev === undefined)
|
|
188
|
+
break;
|
|
189
|
+
right = prev;
|
|
190
|
+
rightIdx--;
|
|
191
|
+
}
|
|
192
|
+
// En este punto, izquierda y derecha solo están separadas por
|
|
193
|
+
// una porción de la palabra (leftIdx .. rightIdx).
|
|
194
|
+
if (leftIdx === rightIdx) {
|
|
195
|
+
// Se encontraron: nada que hacer salvo cerrar si no eran iguales.
|
|
196
|
+
if (rep(state, left) !== rep(state, right)) {
|
|
197
|
+
queue.push([left, right]);
|
|
198
|
+
processCoincidences(state, queue);
|
|
199
|
+
}
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (leftIdx + 1 === rightIdx) {
|
|
203
|
+
// Una sola letra entre medio: deducción τ(left, w[leftIdx]) = right.
|
|
204
|
+
const x = w[leftIdx];
|
|
205
|
+
setEdge(state, left, x, right, queue);
|
|
206
|
+
processCoincidences(state, queue);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Hay >1 letras entre medio: rellenamos con nuevos cosets desde
|
|
210
|
+
// la izquierda. (HLT clásico.)
|
|
211
|
+
while (leftIdx < rightIdx - 1) {
|
|
212
|
+
if (state.next > state.maxCosets) {
|
|
213
|
+
throw new Error('MAX_COSETS');
|
|
214
|
+
}
|
|
215
|
+
const x = w[leftIdx];
|
|
216
|
+
const fresh = newCoset(state);
|
|
217
|
+
setEdge(state, left, x, fresh, queue);
|
|
218
|
+
processCoincidences(state, queue);
|
|
219
|
+
left = rep(state, fresh);
|
|
220
|
+
leftIdx++;
|
|
221
|
+
}
|
|
222
|
+
// Última conexión.
|
|
223
|
+
const x = w[leftIdx];
|
|
224
|
+
setEdge(state, left, x, right, queue);
|
|
225
|
+
processCoincidences(state, queue);
|
|
226
|
+
}
|
|
227
|
+
// toddCoxeter: enumera cosets de ⟨subgroupGens⟩ en ⟨S | R⟩.
|
|
228
|
+
// Si subgroupGens es vacío o no se pasa, enumera el grupo.
|
|
229
|
+
// Devuelve la `CosetTable` si terminó, o 'incomplete' si alcanzó
|
|
230
|
+
// el cap `maxCosets`.
|
|
231
|
+
function toddCoxeter(presentation, subgroupGens = [], maxCosets = 4096) {
|
|
232
|
+
const alphabet = buildAlphabet(presentation.generators);
|
|
233
|
+
const state = {
|
|
234
|
+
table: new Map(),
|
|
235
|
+
replaced: new Map(),
|
|
236
|
+
alphabet,
|
|
237
|
+
generators: [...presentation.generators],
|
|
238
|
+
relations: presentation.relations.map((r) => (0, words_1.reduceWord)(r)),
|
|
239
|
+
next: 1,
|
|
240
|
+
alive: new Set(),
|
|
241
|
+
maxCosets,
|
|
242
|
+
};
|
|
243
|
+
// Coset 1 representa H.
|
|
244
|
+
const h = newCoset(state);
|
|
245
|
+
const queue = [];
|
|
246
|
+
try {
|
|
247
|
+
// Aplicar generadores de H en el coset 1: τ(1, w) debe volver
|
|
248
|
+
// a 1 para cada w ∈ subgroupGens.
|
|
249
|
+
for (const w of subgroupGens) {
|
|
250
|
+
scanAndFill(state, h, (0, words_1.reduceWord)(w), queue);
|
|
251
|
+
processCoincidences(state, queue);
|
|
252
|
+
}
|
|
253
|
+
// Bucle principal: escanea relaciones en cada coset vivo
|
|
254
|
+
// hasta que ya no haya cambios.
|
|
255
|
+
let changed = true;
|
|
256
|
+
while (changed) {
|
|
257
|
+
changed = false;
|
|
258
|
+
const alive = [...state.alive].sort((a, b) => a - b);
|
|
259
|
+
for (const c of alive) {
|
|
260
|
+
if (!state.alive.has(c))
|
|
261
|
+
continue;
|
|
262
|
+
// Escaneamos cada relación.
|
|
263
|
+
for (const r of state.relations) {
|
|
264
|
+
if (r.length === 0)
|
|
265
|
+
continue;
|
|
266
|
+
const before = state.next;
|
|
267
|
+
scanAndFill(state, c, r, queue);
|
|
268
|
+
processCoincidences(state, queue);
|
|
269
|
+
if (state.next !== before)
|
|
270
|
+
changed = true;
|
|
271
|
+
}
|
|
272
|
+
// Y completamos las celdas vacías de este coset con
|
|
273
|
+
// cosets nuevos (definition phase de HLT).
|
|
274
|
+
if (!state.alive.has(c))
|
|
275
|
+
continue;
|
|
276
|
+
const row = state.table.get(rep(state, c));
|
|
277
|
+
if (!row)
|
|
278
|
+
continue;
|
|
279
|
+
for (const x of alphabet) {
|
|
280
|
+
if (row.get(x) === undefined) {
|
|
281
|
+
if (state.next > state.maxCosets) {
|
|
282
|
+
throw new Error('MAX_COSETS');
|
|
283
|
+
}
|
|
284
|
+
const fresh = newCoset(state);
|
|
285
|
+
setEdge(state, c, x, fresh, queue);
|
|
286
|
+
processCoincidences(state, queue);
|
|
287
|
+
changed = true;
|
|
288
|
+
break; // re-escanear desde el principio
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (e) {
|
|
295
|
+
if (e instanceof Error && e.message === 'MAX_COSETS') {
|
|
296
|
+
return 'incomplete';
|
|
297
|
+
}
|
|
298
|
+
throw e;
|
|
299
|
+
}
|
|
300
|
+
// Compacta los cosets vivos a 1..N.
|
|
301
|
+
const aliveSorted = [...state.alive].sort((a, b) => a - b);
|
|
302
|
+
const remap = new Map();
|
|
303
|
+
aliveSorted.forEach((c, i) => remap.set(c, i + 1));
|
|
304
|
+
const outTable = new Map();
|
|
305
|
+
for (const c of aliveSorted) {
|
|
306
|
+
const row = state.table.get(c);
|
|
307
|
+
if (!row)
|
|
308
|
+
continue;
|
|
309
|
+
const newRow = new Map();
|
|
310
|
+
for (const [x, target] of row) {
|
|
311
|
+
const rt = rep(state, target);
|
|
312
|
+
const mapped = remap.get(rt);
|
|
313
|
+
if (mapped !== undefined)
|
|
314
|
+
newRow.set(x, mapped);
|
|
315
|
+
}
|
|
316
|
+
const mappedC = remap.get(c);
|
|
317
|
+
if (mappedC !== undefined)
|
|
318
|
+
outTable.set(mappedC, newRow);
|
|
319
|
+
}
|
|
320
|
+
return {
|
|
321
|
+
numCosets: aliveSorted.length,
|
|
322
|
+
generators: [...presentation.generators],
|
|
323
|
+
table: outTable,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
// groupOrder: orden del grupo. Enumera cosets del subgrupo trivial.
|
|
327
|
+
// Devuelve número finito, 'infinite' si la conjetura por
|
|
328
|
+
// presentación libre es inmediata, o 'unknown' si Todd-Coxeter no
|
|
329
|
+
// terminó dentro del cap.
|
|
330
|
+
function groupOrder(presentation, maxCosets = 4096) {
|
|
331
|
+
// Caso trivial: ⟨ | ⟩ es el grupo libre de rango 0, orden 1.
|
|
332
|
+
if (presentation.generators.length === 0) {
|
|
333
|
+
return presentation.relations.length === 0 ? 1 : 1;
|
|
334
|
+
}
|
|
335
|
+
// Heurística simple: si todas las relaciones se reducen
|
|
336
|
+
// libremente a la palabra vacía, no aportan información y el
|
|
337
|
+
// grupo es libre F_n (infinito para n ≥ 1).
|
|
338
|
+
if (presentation.relations.every((r) => (0, words_1.reduceWord)(r).length === 0)) {
|
|
339
|
+
return 'infinite';
|
|
340
|
+
}
|
|
341
|
+
const t = toddCoxeter(presentation, [], maxCosets);
|
|
342
|
+
if (t === 'incomplete')
|
|
343
|
+
return 'unknown';
|
|
344
|
+
return t.numCosets;
|
|
345
|
+
}
|
|
346
|
+
// isInSubgroup: dado un Word `w` y una tabla de cosets del par
|
|
347
|
+
// (G, H), decide si w ∈ H comprobando si τ(1, w) = 1.
|
|
348
|
+
function isInSubgroup(word, table) {
|
|
349
|
+
const w = (0, words_1.reduceWord)(word);
|
|
350
|
+
let cur = 1;
|
|
351
|
+
for (const letter of w) {
|
|
352
|
+
const row = table.table.get(cur);
|
|
353
|
+
if (!row)
|
|
354
|
+
return false;
|
|
355
|
+
const next = row.get(letter);
|
|
356
|
+
if (next === undefined)
|
|
357
|
+
return false;
|
|
358
|
+
cur = next;
|
|
359
|
+
}
|
|
360
|
+
return cur === 1;
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=todd-coxeter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todd-coxeter.js","sourceRoot":"","sources":["../../../src/reasoning/group-presentation/todd-coxeter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/reasoning/group-presentation/types.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,IAAI,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Tipos para presentaciones finitas de grupos ⟨S | R⟩.
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Un generador es un símbolo alfanumérico de un caracter. Su
|
|
7
|
+
// inverso se representa intercambiando mayúscula/minúscula:
|
|
8
|
+
// 'a' ↔ 'A' 'r' ↔ 'R'
|
|
9
|
+
// Esta convención (clásica en cómputo combinatorio de grupos)
|
|
10
|
+
// hace que palabras sobre el alfabeto libre F(S) sean strings o
|
|
11
|
+
// arrays cortos y la operación "inverso de letra" sea barata.
|
|
12
|
+
//
|
|
13
|
+
// Una `Word` es una secuencia ordenada de letras (generadores o
|
|
14
|
+
// sus inversos). La palabra vacía `[]` representa el neutro `1`.
|
|
15
|
+
//
|
|
16
|
+
// Una `GroupPresentation` `⟨S | R⟩` consta de los generadores S
|
|
17
|
+
// y un conjunto de relaciones R, donde cada relación r ∈ R es
|
|
18
|
+
// una palabra que se interpreta como `r = 1` en el grupo cociente
|
|
19
|
+
// F(S)/⟪R⟫.
|
|
20
|
+
// ============================================================
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/reasoning/group-presentation/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,uDAAuD;AACvD,+DAA+D;AAC/D,EAAE;AACF,6DAA6D;AAC7D,4DAA4D;AAC5D,iCAAiC;AACjC,8DAA8D;AAC9D,gEAAgE;AAChE,8DAA8D;AAC9D,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,EAAE;AACF,gEAAgE;AAChE,8DAA8D;AAC9D,kEAAkE;AAClE,YAAY;AACZ,+DAA+D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Generator, Word } from './types';
|
|
2
|
+
export declare function inverse(g: Generator): Generator;
|
|
3
|
+
export declare function reduceWord(w: Word): Word;
|
|
4
|
+
export declare function multiplyWords(a: Word, b: Word): Word;
|
|
5
|
+
export declare function invertWord(w: Word): Word;
|
|
6
|
+
export declare function wordEquals(a: Word, b: Word): boolean;
|
|
7
|
+
export declare function isReduced(w: Word): boolean;
|
|
8
|
+
export declare function parseWord(s: string): Word;
|
|
9
|
+
export declare function wordToString(w: Word): string;
|
|
10
|
+
//# sourceMappingURL=words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../../src/reasoning/group-presentation/words.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAK/C,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAU/C;AAKD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAWxC;AAID,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAEpD;AAGD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAMxC;AAID,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAMpD;AAGD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAc1C;AAID,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAMzC;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE5C"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Aritmética del grupo libre F(S) sobre palabras.
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Convención de inversos: letras a-z son generadores positivos;
|
|
7
|
+
// A-Z son sus inversos. `inverse('a') === 'A'` y viceversa. Para
|
|
8
|
+
// símbolos fuera de a-zA-Z (uso interno opcional), se asume que
|
|
9
|
+
// el caller pasa pares (g, g⁻¹) ya emparejados — pero las APIs
|
|
10
|
+
// públicas estándar (cyclic/dihedral/free/symmetric) viven en
|
|
11
|
+
// el alfabeto a-z/A-Z.
|
|
12
|
+
// ============================================================
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.inverse = inverse;
|
|
15
|
+
exports.reduceWord = reduceWord;
|
|
16
|
+
exports.multiplyWords = multiplyWords;
|
|
17
|
+
exports.invertWord = invertWord;
|
|
18
|
+
exports.wordEquals = wordEquals;
|
|
19
|
+
exports.isReduced = isReduced;
|
|
20
|
+
exports.parseWord = parseWord;
|
|
21
|
+
exports.wordToString = wordToString;
|
|
22
|
+
// inverse: invierte una letra (cambia caja). Lanza si no es una
|
|
23
|
+
// letra alfabética ASCII de un caracter, porque eso indica error
|
|
24
|
+
// del caller (las APIs expuestas siempre usan letras simples).
|
|
25
|
+
function inverse(g) {
|
|
26
|
+
if (g.length !== 1) {
|
|
27
|
+
throw new Error(`inverse: se esperaba letra de 1 caracter, recibí "${g}"`);
|
|
28
|
+
}
|
|
29
|
+
const code = g.charCodeAt(0);
|
|
30
|
+
// a..z
|
|
31
|
+
if (code >= 97 && code <= 122)
|
|
32
|
+
return String.fromCharCode(code - 32);
|
|
33
|
+
// A..Z
|
|
34
|
+
if (code >= 65 && code <= 90)
|
|
35
|
+
return String.fromCharCode(code + 32);
|
|
36
|
+
throw new Error(`inverse: letra no alfabética ASCII: "${g}"`);
|
|
37
|
+
}
|
|
38
|
+
// reduceWord: reducción libre. Cancela pares adyacentes `x x⁻¹`.
|
|
39
|
+
// Implementación O(n) con pila: lee secuencialmente y colapsa
|
|
40
|
+
// con el tope si se anulan. Idempotente.
|
|
41
|
+
function reduceWord(w) {
|
|
42
|
+
const stack = [];
|
|
43
|
+
for (const letter of w) {
|
|
44
|
+
const top = stack[stack.length - 1];
|
|
45
|
+
if (top !== undefined && top === inverse(letter)) {
|
|
46
|
+
stack.pop();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
stack.push(letter);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return stack;
|
|
53
|
+
}
|
|
54
|
+
// multiplyWords: concatena y reduce. La multiplicación en F(S)
|
|
55
|
+
// es la concatenación módulo cancelación libre.
|
|
56
|
+
function multiplyWords(a, b) {
|
|
57
|
+
return reduceWord([...a, ...b]);
|
|
58
|
+
}
|
|
59
|
+
// invertWord: w = x1 x2 ... xn ⇒ w⁻¹ = xn⁻¹ ... x1⁻¹.
|
|
60
|
+
function invertWord(w) {
|
|
61
|
+
const out = [];
|
|
62
|
+
for (let i = w.length - 1; i >= 0; i--) {
|
|
63
|
+
out.push(inverse(w[i]));
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
// wordEquals: igualdad sintáctica (no semántica módulo relaciones).
|
|
68
|
+
// Para igualdad módulo relaciones hay que pasar por Todd-Coxeter.
|
|
69
|
+
function wordEquals(a, b) {
|
|
70
|
+
if (a.length !== b.length)
|
|
71
|
+
return false;
|
|
72
|
+
for (let i = 0; i < a.length; i++) {
|
|
73
|
+
if (a[i] !== b[i])
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
// isReduced: true si no hay cancelaciones libres pendientes.
|
|
79
|
+
function isReduced(w) {
|
|
80
|
+
for (let i = 0; i < w.length - 1; i++) {
|
|
81
|
+
const a = w[i];
|
|
82
|
+
const b = w[i + 1];
|
|
83
|
+
if (a.length === 1 && b.length === 1) {
|
|
84
|
+
try {
|
|
85
|
+
if (inverse(a) === b)
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Si la letra no es alfabética simple, no podemos
|
|
90
|
+
// verificar cancelación con inverse; asumimos reducido.
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
// parseWord: convierte un string como "abAb" en ['a','b','A','b'].
|
|
97
|
+
// Útil para tests legibles. Acepta solo caracteres ASCII letra.
|
|
98
|
+
function parseWord(s) {
|
|
99
|
+
const out = [];
|
|
100
|
+
for (const ch of s) {
|
|
101
|
+
out.push(ch);
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
// wordToString: inversa de parseWord. La palabra vacía → "1".
|
|
106
|
+
function wordToString(w) {
|
|
107
|
+
return w.length === 0 ? '1' : w.join('');
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"words.js","sourceRoot":"","sources":["../../../src/reasoning/group-presentation/words.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributed-exchange.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/proof-systems/distributed-exchange/distributed-exchange.test.ts"],"names":[],"mappings":""}
|