@stevenvo780/st-lang 2.7.0 → 2.8.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.
Files changed (80) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +11 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lexer/lexer.d.ts +2 -1
  6. package/dist/lexer/lexer.d.ts.map +1 -1
  7. package/dist/lexer/lexer.js +4 -2
  8. package/dist/lexer/lexer.js.map +1 -1
  9. package/dist/lexer/tokens.d.ts +17 -0
  10. package/dist/lexer/tokens.d.ts.map +1 -1
  11. package/dist/lexer/tokens.js +58 -21
  12. package/dist/lexer/tokens.js.map +1 -1
  13. package/dist/parser/parser.d.ts +2 -1
  14. package/dist/parser/parser.d.ts.map +1 -1
  15. package/dist/parser/parser.js +4 -2
  16. package/dist/parser/parser.js.map +1 -1
  17. package/dist/profiles/classical/cdcl.d.ts +34 -0
  18. package/dist/profiles/classical/cdcl.d.ts.map +1 -0
  19. package/dist/profiles/classical/cdcl.js +843 -0
  20. package/dist/profiles/classical/cdcl.js.map +1 -0
  21. package/dist/profiles/classical/dpll.d.ts +20 -0
  22. package/dist/profiles/classical/dpll.d.ts.map +1 -0
  23. package/dist/profiles/classical/dpll.js +483 -0
  24. package/dist/profiles/classical/dpll.js.map +1 -0
  25. package/dist/profiles/classical/first-order.d.ts.map +1 -1
  26. package/dist/profiles/classical/first-order.js +20 -10
  27. package/dist/profiles/classical/first-order.js.map +1 -1
  28. package/dist/profiles/classical/parallel-sat.d.ts +62 -0
  29. package/dist/profiles/classical/parallel-sat.d.ts.map +1 -0
  30. package/dist/profiles/classical/parallel-sat.js +630 -0
  31. package/dist/profiles/classical/parallel-sat.js.map +1 -0
  32. package/dist/profiles/classical/propositional.d.ts.map +1 -1
  33. package/dist/profiles/classical/propositional.js +135 -22
  34. package/dist/profiles/classical/propositional.js.map +1 -1
  35. package/dist/profiles/classical/sat-preprocess.d.ts +17 -0
  36. package/dist/profiles/classical/sat-preprocess.d.ts.map +1 -0
  37. package/dist/profiles/classical/sat-preprocess.js +372 -0
  38. package/dist/profiles/classical/sat-preprocess.js.map +1 -0
  39. package/dist/profiles/classical/undecidability-detector.d.ts +13 -0
  40. package/dist/profiles/classical/undecidability-detector.d.ts.map +1 -0
  41. package/dist/profiles/classical/undecidability-detector.js +277 -0
  42. package/dist/profiles/classical/undecidability-detector.js.map +1 -0
  43. package/dist/profiles/paraconsistent/belnap.d.ts.map +1 -1
  44. package/dist/profiles/paraconsistent/belnap.js +4 -2
  45. package/dist/profiles/paraconsistent/belnap.js.map +1 -1
  46. package/dist/profiles/shared/tableau-engine.d.ts.map +1 -1
  47. package/dist/profiles/shared/tableau-engine.js +3 -1
  48. package/dist/profiles/shared/tableau-engine.js.map +1 -1
  49. package/dist/runtime/educational-notes.d.ts +27 -0
  50. package/dist/runtime/educational-notes.d.ts.map +1 -0
  51. package/dist/runtime/educational-notes.js +100 -0
  52. package/dist/runtime/educational-notes.js.map +1 -0
  53. package/dist/runtime/formula-factory.d.ts.map +1 -1
  54. package/dist/runtime/formula-factory.js +3 -2
  55. package/dist/runtime/formula-factory.js.map +1 -1
  56. package/dist/runtime/interpreter.d.ts +9 -0
  57. package/dist/runtime/interpreter.d.ts.map +1 -1
  58. package/dist/runtime/interpreter.js +126 -6
  59. package/dist/runtime/interpreter.js.map +1 -1
  60. package/dist/tests/benchmark-cdcl.test.d.ts +2 -0
  61. package/dist/tests/benchmark-cdcl.test.d.ts.map +1 -0
  62. package/dist/tests/benchmark-cdcl.test.js +172 -0
  63. package/dist/tests/benchmark-cdcl.test.js.map +1 -0
  64. package/dist/tests/limits.test.js +15 -7
  65. package/dist/tests/limits.test.js.map +1 -1
  66. package/dist/tests/parallel-sat.test.d.ts +2 -0
  67. package/dist/tests/parallel-sat.test.d.ts.map +1 -0
  68. package/dist/tests/parallel-sat.test.js +351 -0
  69. package/dist/tests/parallel-sat.test.js.map +1 -0
  70. package/dist/tests/stress-cdcl.test.d.ts +2 -0
  71. package/dist/tests/stress-cdcl.test.d.ts.map +1 -0
  72. package/dist/tests/stress-cdcl.test.js +792 -0
  73. package/dist/tests/stress-cdcl.test.js.map +1 -0
  74. package/dist/tests/stress-extreme.test.d.ts +2 -0
  75. package/dist/tests/stress-extreme.test.d.ts.map +1 -0
  76. package/dist/tests/stress-extreme.test.js +1005 -0
  77. package/dist/tests/stress-extreme.test.js.map +1 -0
  78. package/dist/tests/stress-hardware.test.js +161 -4
  79. package/dist/tests/stress-hardware.test.js.map +1 -1
  80. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ type Clause = Int32Array;
2
+ /**
3
+ * Result of preprocessing: simplified clauses and any forced assignments.
4
+ */
5
+ export interface PreprocessResult {
6
+ clauses: Clause[];
7
+ forcedLiterals: number[];
8
+ eliminated: boolean;
9
+ trivialUnsat: boolean;
10
+ }
11
+ /**
12
+ * Main preprocessing pipeline.
13
+ * Applies simplifications in order of effectiveness.
14
+ */
15
+ export declare function preprocess(clauses: Clause[], numVars: number): PreprocessResult;
16
+ export {};
17
+ //# sourceMappingURL=sat-preprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sat-preprocess.d.ts","sourceRoot":"","sources":["../../../src/profiles/classical/sat-preprocess.ts"],"names":[],"mappings":"AAMA,KAAK,MAAM,GAAG,UAAU,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AA0TD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAmE/E"}
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // SAT Preprocessing — Simplification before solving
4
+ // Implements: Subsumption Elimination, Self-Subsuming Resolution,
5
+ // Bounded Variable Elimination, Failed Literal Probing
6
+ // ============================================================
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.preprocess = preprocess;
9
+ /**
10
+ * Check if clause A subsumes clause B (A ⊂ B as sets).
11
+ * If A subsumes B, B is redundant and can be removed.
12
+ */
13
+ function subsumes(a, b) {
14
+ if (a.length >= b.length)
15
+ return false;
16
+ let ai = 0;
17
+ for (let bi = 0; bi < b.length && ai < a.length; bi++) {
18
+ if (a[ai] === b[bi])
19
+ ai++;
20
+ }
21
+ return ai === a.length;
22
+ }
23
+ /**
24
+ * Subsumption Elimination:
25
+ * If clause A ⊂ clause B, remove B (it's redundant).
26
+ */
27
+ function subsumptionElimination(clauses) {
28
+ // Sort clauses by length for efficient checking
29
+ const sorted = clauses.slice().sort((a, b) => a.length - b.length);
30
+ const removed = new Uint8Array(sorted.length);
31
+ for (let i = 0; i < sorted.length; i++) {
32
+ if (removed[i])
33
+ continue;
34
+ for (let j = i + 1; j < sorted.length; j++) {
35
+ if (removed[j])
36
+ continue;
37
+ if (subsumes(sorted[i], sorted[j])) {
38
+ removed[j] = 1;
39
+ }
40
+ }
41
+ }
42
+ const result = [];
43
+ for (let i = 0; i < sorted.length; i++) {
44
+ if (!removed[i])
45
+ result.push(sorted[i]);
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * Remove duplicate literals within each clause and sort them.
51
+ * Also removes tautological clauses (containing both x and -x).
52
+ */
53
+ function normalizeClauses(clauses) {
54
+ const result = [];
55
+ for (const clause of clauses) {
56
+ const sorted = Array.from(clause).sort((a, b) => Math.abs(a) - Math.abs(b) || a - b);
57
+ // Remove duplicates and check for tautology
58
+ const deduped = [];
59
+ let tautology = false;
60
+ for (let i = 0; i < sorted.length; i++) {
61
+ if (i > 0 && sorted[i] === sorted[i - 1])
62
+ continue;
63
+ // Check for complementary literals
64
+ if (i > 0 && sorted[i] === -sorted[i - 1]) {
65
+ tautology = true;
66
+ break;
67
+ }
68
+ deduped.push(sorted[i]);
69
+ }
70
+ if (!tautology) {
71
+ result.push(new Int32Array(deduped));
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ /**
77
+ * Remove duplicate clauses using signature hashing.
78
+ */
79
+ function removeDuplicateClauses(clauses) {
80
+ const seen = new Set();
81
+ const result = [];
82
+ for (const c of clauses) {
83
+ const key = c.join(',');
84
+ if (!seen.has(key)) {
85
+ seen.add(key);
86
+ result.push(c);
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+ /**
92
+ * Self-Subsuming Resolution:
93
+ * If resolving A with B produces a clause that subsumes A, replace A with the resolvent.
94
+ * Example: {P, Q, R} resolved with {¬P, Q} → {Q, R} which subsumes {P, Q, R}
95
+ */
96
+ function selfSubsumingResolution(clauses) {
97
+ const result = clauses.slice();
98
+ let changed = true;
99
+ let iterations = 0;
100
+ const maxIterations = 3; // Limit passes to prevent excessive computation
101
+ while (changed && iterations < maxIterations) {
102
+ changed = false;
103
+ iterations++;
104
+ for (let i = 0; i < result.length; i++) {
105
+ const ci = result[i];
106
+ if (ci.length === 0)
107
+ continue;
108
+ for (let j = 0; j < result.length; j++) {
109
+ if (i === j)
110
+ continue;
111
+ const cj = result[j];
112
+ if (cj.length === 0 || cj.length > ci.length)
113
+ continue;
114
+ // Try to resolve cj against ci on some literal
115
+ for (let li = 0; li < ci.length; li++) {
116
+ const lit = ci[li];
117
+ // Check if cj contains -lit and all other literals of cj are in ci
118
+ let hasNegLit = false;
119
+ let allOthersInCi = true;
120
+ for (let lj = 0; lj < cj.length; lj++) {
121
+ if (cj[lj] === -lit) {
122
+ hasNegLit = true;
123
+ }
124
+ else {
125
+ // Check if this literal is also in ci
126
+ let found = false;
127
+ for (let lk = 0; lk < ci.length; lk++) {
128
+ if (ci[lk] === cj[lj]) {
129
+ found = true;
130
+ break;
131
+ }
132
+ }
133
+ if (!found) {
134
+ allOthersInCi = false;
135
+ break;
136
+ }
137
+ }
138
+ }
139
+ if (hasNegLit && allOthersInCi) {
140
+ // Self-subsumption: remove lit from ci
141
+ const newClause = [];
142
+ for (let lk = 0; lk < ci.length; lk++) {
143
+ if (ci[lk] !== lit)
144
+ newClause.push(ci[lk]);
145
+ }
146
+ result[i] = new Int32Array(newClause);
147
+ changed = true;
148
+ break;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ return result;
155
+ }
156
+ /**
157
+ * Bounded Variable Elimination (BVE):
158
+ * If a variable appears few times, resolve all its positive clauses against
159
+ * negative clauses and check if the result is smaller.
160
+ */
161
+ function boundedVariableElimination(clauses, numVars) {
162
+ const eliminated = new Set();
163
+ let current = clauses.slice();
164
+ const MAX_GROWTH = 0; // Only eliminate if it doesn't increase clause count
165
+ for (let v = 1; v <= numVars; v++) {
166
+ const posClauses = [];
167
+ const negClauses = [];
168
+ for (let ci = 0; ci < current.length; ci++) {
169
+ for (let li = 0; li < current[ci].length; li++) {
170
+ if (current[ci][li] === v) {
171
+ posClauses.push(ci);
172
+ break;
173
+ }
174
+ if (current[ci][li] === -v) {
175
+ negClauses.push(ci);
176
+ break;
177
+ }
178
+ }
179
+ }
180
+ // Skip if too many resolvents would be created
181
+ if (posClauses.length * negClauses.length >
182
+ posClauses.length + negClauses.length + MAX_GROWTH) {
183
+ continue;
184
+ }
185
+ // Generate all resolvents
186
+ const resolvents = [];
187
+ const tooLarge = false;
188
+ for (const pi of posClauses) {
189
+ for (const ni of negClauses) {
190
+ const resolvent = resolve(current[pi], current[ni], v);
191
+ if (resolvent === null)
192
+ continue; // tautology
193
+ resolvents.push(resolvent);
194
+ }
195
+ }
196
+ if (tooLarge)
197
+ continue;
198
+ // Only eliminate if result has fewer or equal clauses
199
+ if (resolvents.length <= posClauses.length + negClauses.length) {
200
+ // Remove old clauses and add resolvents
201
+ const toRemove = new Set([...posClauses, ...negClauses]);
202
+ const newClauses = [];
203
+ for (let ci = 0; ci < current.length; ci++) {
204
+ if (!toRemove.has(ci))
205
+ newClauses.push(current[ci]);
206
+ }
207
+ newClauses.push(...resolvents);
208
+ current = newClauses;
209
+ eliminated.add(v);
210
+ }
211
+ }
212
+ return { clauses: current, eliminated };
213
+ }
214
+ /**
215
+ * Resolve two clauses on variable v.
216
+ * Returns null if the resolvent is a tautology.
217
+ */
218
+ function resolve(a, b, v) {
219
+ const lits = new Set();
220
+ for (let i = 0; i < a.length; i++) {
221
+ const l = a[i];
222
+ if (l !== v && l !== -v)
223
+ lits.add(l);
224
+ }
225
+ for (let i = 0; i < b.length; i++) {
226
+ const l = b[i];
227
+ if (l !== v && l !== -v) {
228
+ if (lits.has(-l))
229
+ return null; // tautology
230
+ lits.add(l);
231
+ }
232
+ }
233
+ return new Int32Array(Array.from(lits).sort((a, b) => a - b));
234
+ }
235
+ /**
236
+ * Failed Literal Probing:
237
+ * For each unassigned variable, assume it's true and propagate.
238
+ * If conflict → the variable must be false (and vice versa).
239
+ */
240
+ function failedLiteralProbing(clauses, numVars) {
241
+ const forced = [];
242
+ for (let v = 1; v <= numVars; v++) {
243
+ // Try v = true
244
+ const trueResult = probeAssignment(clauses, numVars, v);
245
+ // Try v = false
246
+ const falseResult = probeAssignment(clauses, numVars, -v);
247
+ if (trueResult === 'conflict' && falseResult === 'conflict') {
248
+ // Both conflict → UNSAT, but we handle this later
249
+ return { forcedLiterals: forced, clauses };
250
+ }
251
+ if (trueResult === 'conflict') {
252
+ forced.push(-v);
253
+ }
254
+ else if (falseResult === 'conflict') {
255
+ forced.push(v);
256
+ }
257
+ }
258
+ // Apply forced literals
259
+ let current = clauses;
260
+ for (const lit of forced) {
261
+ current = applyLiteral(current, lit);
262
+ }
263
+ return { forcedLiterals: forced, clauses: current };
264
+ }
265
+ /**
266
+ * Probe: assign a literal and run unit propagation.
267
+ * Returns 'conflict' if a conflict is found, 'ok' otherwise.
268
+ */
269
+ function probeAssignment(clauses, numVars, lit) {
270
+ let current = applyLiteral(clauses, lit);
271
+ // Run simple unit propagation
272
+ let changed = true;
273
+ while (changed) {
274
+ changed = false;
275
+ for (const c of current) {
276
+ if (c.length === 0)
277
+ return 'conflict';
278
+ if (c.length === 1) {
279
+ current = applyLiteral(current, c[0]);
280
+ changed = true;
281
+ break;
282
+ }
283
+ }
284
+ }
285
+ return 'ok';
286
+ }
287
+ /**
288
+ * Apply a literal assignment to a clause set.
289
+ * Removes satisfied clauses and shrinks clauses containing -lit.
290
+ */
291
+ function applyLiteral(clauses, lit) {
292
+ const result = [];
293
+ for (const c of clauses) {
294
+ let satisfied = false;
295
+ const remaining = [];
296
+ for (let i = 0; i < c.length; i++) {
297
+ if (c[i] === lit) {
298
+ satisfied = true;
299
+ break;
300
+ }
301
+ if (c[i] !== -lit)
302
+ remaining.push(c[i]);
303
+ }
304
+ if (!satisfied) {
305
+ result.push(new Int32Array(remaining));
306
+ }
307
+ }
308
+ return result;
309
+ }
310
+ /**
311
+ * Main preprocessing pipeline.
312
+ * Applies simplifications in order of effectiveness.
313
+ */
314
+ function preprocess(clauses, numVars) {
315
+ // Step 0: normalize and deduplicate
316
+ let current = normalizeClauses(clauses);
317
+ current = removeDuplicateClauses(current);
318
+ // Check trivial cases
319
+ for (const c of current) {
320
+ if (c.length === 0) {
321
+ return { clauses: current, forcedLiterals: [], eliminated: false, trivialUnsat: true };
322
+ }
323
+ }
324
+ const initialCount = current.length;
325
+ const allForced = [];
326
+ // Step 1: extract unit clauses
327
+ let changed = true;
328
+ while (changed) {
329
+ changed = false;
330
+ for (let i = 0; i < current.length; i++) {
331
+ if (current[i].length === 1) {
332
+ const lit = current[i][0];
333
+ allForced.push(lit);
334
+ current = applyLiteral(current, lit);
335
+ changed = true;
336
+ break;
337
+ }
338
+ }
339
+ }
340
+ // Step 2: subsumption elimination
341
+ current = subsumptionElimination(current);
342
+ // Step 3: self-subsuming resolution
343
+ current = selfSubsumingResolution(current);
344
+ // Step 4: Bounded Variable Elimination (only for small formulas to avoid blowup)
345
+ if (numVars <= 500) {
346
+ const bve = boundedVariableElimination(current, numVars);
347
+ current = bve.clauses;
348
+ }
349
+ // Step 5: Failed Literal Probing (only for moderate sizes)
350
+ if (numVars <= 200) {
351
+ const flp = failedLiteralProbing(current, numVars);
352
+ allForced.push(...flp.forcedLiterals);
353
+ current = flp.clauses;
354
+ }
355
+ // Final normalization
356
+ current = normalizeClauses(current);
357
+ current = removeDuplicateClauses(current);
358
+ current = subsumptionElimination(current);
359
+ // Check for empty clause after all preprocessing
360
+ for (const c of current) {
361
+ if (c.length === 0) {
362
+ return { clauses: current, forcedLiterals: allForced, eliminated: true, trivialUnsat: true };
363
+ }
364
+ }
365
+ return {
366
+ clauses: current,
367
+ forcedLiterals: allForced,
368
+ eliminated: current.length < initialCount,
369
+ trivialUnsat: false,
370
+ };
371
+ }
372
+ //# sourceMappingURL=sat-preprocess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sat-preprocess.js","sourceRoot":"","sources":["../../../src/profiles/classical/sat-preprocess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Formula } from '../../types';
2
+ export interface UndecidabilityWarning {
3
+ pattern: string;
4
+ description: string;
5
+ severity: 'info' | 'warning' | 'critical';
6
+ suggestion: string;
7
+ }
8
+ /**
9
+ * Analyze a first-order formula for known undecidable or computationally
10
+ * intractable patterns. Returns warnings if any are detected.
11
+ */
12
+ export declare function detectUndecidable(formula: Formula): UndecidabilityWarning[];
13
+ //# sourceMappingURL=undecidability-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undecidability-detector.d.ts","sourceRoot":"","sources":["../../../src/profiles/classical/undecidability-detector.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,qBAAqB,EAAE,CAqF3E"}