@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.
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/lexer/lexer.d.ts +2 -1
- package/dist/lexer/lexer.d.ts.map +1 -1
- package/dist/lexer/lexer.js +4 -2
- package/dist/lexer/lexer.js.map +1 -1
- package/dist/lexer/tokens.d.ts +17 -0
- package/dist/lexer/tokens.d.ts.map +1 -1
- package/dist/lexer/tokens.js +58 -21
- package/dist/lexer/tokens.js.map +1 -1
- package/dist/parser/parser.d.ts +2 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +4 -2
- package/dist/parser/parser.js.map +1 -1
- package/dist/profiles/classical/cdcl.d.ts +34 -0
- package/dist/profiles/classical/cdcl.d.ts.map +1 -0
- package/dist/profiles/classical/cdcl.js +843 -0
- package/dist/profiles/classical/cdcl.js.map +1 -0
- package/dist/profiles/classical/dpll.d.ts +20 -0
- package/dist/profiles/classical/dpll.d.ts.map +1 -0
- package/dist/profiles/classical/dpll.js +483 -0
- package/dist/profiles/classical/dpll.js.map +1 -0
- package/dist/profiles/classical/first-order.d.ts.map +1 -1
- package/dist/profiles/classical/first-order.js +20 -10
- package/dist/profiles/classical/first-order.js.map +1 -1
- package/dist/profiles/classical/parallel-sat.d.ts +62 -0
- package/dist/profiles/classical/parallel-sat.d.ts.map +1 -0
- package/dist/profiles/classical/parallel-sat.js +630 -0
- package/dist/profiles/classical/parallel-sat.js.map +1 -0
- package/dist/profiles/classical/propositional.d.ts.map +1 -1
- package/dist/profiles/classical/propositional.js +135 -22
- package/dist/profiles/classical/propositional.js.map +1 -1
- package/dist/profiles/classical/sat-preprocess.d.ts +17 -0
- package/dist/profiles/classical/sat-preprocess.d.ts.map +1 -0
- package/dist/profiles/classical/sat-preprocess.js +372 -0
- package/dist/profiles/classical/sat-preprocess.js.map +1 -0
- package/dist/profiles/classical/undecidability-detector.d.ts +13 -0
- package/dist/profiles/classical/undecidability-detector.d.ts.map +1 -0
- package/dist/profiles/classical/undecidability-detector.js +277 -0
- package/dist/profiles/classical/undecidability-detector.js.map +1 -0
- package/dist/profiles/paraconsistent/belnap.d.ts.map +1 -1
- package/dist/profiles/paraconsistent/belnap.js +4 -2
- package/dist/profiles/paraconsistent/belnap.js.map +1 -1
- package/dist/profiles/shared/tableau-engine.d.ts.map +1 -1
- package/dist/profiles/shared/tableau-engine.js +3 -1
- package/dist/profiles/shared/tableau-engine.js.map +1 -1
- package/dist/runtime/educational-notes.d.ts +27 -0
- package/dist/runtime/educational-notes.d.ts.map +1 -0
- package/dist/runtime/educational-notes.js +100 -0
- package/dist/runtime/educational-notes.js.map +1 -0
- package/dist/runtime/formula-factory.d.ts.map +1 -1
- package/dist/runtime/formula-factory.js +3 -2
- package/dist/runtime/formula-factory.js.map +1 -1
- package/dist/runtime/interpreter.d.ts +9 -0
- package/dist/runtime/interpreter.d.ts.map +1 -1
- package/dist/runtime/interpreter.js +126 -6
- package/dist/runtime/interpreter.js.map +1 -1
- package/dist/tests/benchmark-cdcl.test.d.ts +2 -0
- package/dist/tests/benchmark-cdcl.test.d.ts.map +1 -0
- package/dist/tests/benchmark-cdcl.test.js +172 -0
- package/dist/tests/benchmark-cdcl.test.js.map +1 -0
- package/dist/tests/limits.test.js +15 -7
- package/dist/tests/limits.test.js.map +1 -1
- package/dist/tests/parallel-sat.test.d.ts +2 -0
- package/dist/tests/parallel-sat.test.d.ts.map +1 -0
- package/dist/tests/parallel-sat.test.js +351 -0
- package/dist/tests/parallel-sat.test.js.map +1 -0
- package/dist/tests/stress-cdcl.test.d.ts +2 -0
- package/dist/tests/stress-cdcl.test.d.ts.map +1 -0
- package/dist/tests/stress-cdcl.test.js +792 -0
- package/dist/tests/stress-cdcl.test.js.map +1 -0
- package/dist/tests/stress-extreme.test.d.ts +2 -0
- package/dist/tests/stress-extreme.test.d.ts.map +1 -0
- package/dist/tests/stress-extreme.test.js +1005 -0
- package/dist/tests/stress-extreme.test.js.map +1 -0
- package/dist/tests/stress-hardware.test.js +161 -4
- package/dist/tests/stress-hardware.test.js.map +1 -1
- 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"}
|