@stevenvo780/st-lang 4.1.0 → 4.2.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/belief-revision/agm.d.ts +76 -0
- package/dist/belief-revision/agm.d.ts.map +1 -0
- package/dist/belief-revision/agm.js +249 -0
- package/dist/belief-revision/agm.js.map +1 -0
- package/dist/belief-revision/index.d.ts +6 -0
- package/dist/belief-revision/index.d.ts.map +1 -0
- package/dist/belief-revision/index.js +33 -0
- package/dist/belief-revision/index.js.map +1 -0
- package/dist/belief-revision/parser.d.ts +16 -0
- package/dist/belief-revision/parser.d.ts.map +1 -0
- package/dist/belief-revision/parser.js +199 -0
- package/dist/belief-revision/parser.js.map +1 -0
- package/dist/belief-revision/sat.d.ts +19 -0
- package/dist/belief-revision/sat.d.ts.map +1 -0
- package/dist/belief-revision/sat.js +90 -0
- package/dist/belief-revision/sat.js.map +1 -0
- package/dist/belief-revision/types.d.ts +51 -0
- package/dist/belief-revision/types.d.ts.map +1 -0
- package/dist/belief-revision/types.js +10 -0
- package/dist/belief-revision/types.js.map +1 -0
- package/dist/curry-howard/index.d.ts +7 -0
- package/dist/curry-howard/index.d.ts.map +1 -0
- package/dist/curry-howard/index.js +46 -0
- package/dist/curry-howard/index.js.map +1 -0
- package/dist/curry-howard/infer.d.ts +9 -0
- package/dist/curry-howard/infer.d.ts.map +1 -0
- package/dist/curry-howard/infer.js +129 -0
- package/dist/curry-howard/infer.js.map +1 -0
- package/dist/curry-howard/proof.d.ts +7 -0
- package/dist/curry-howard/proof.d.ts.map +1 -0
- package/dist/curry-howard/proof.js +282 -0
- package/dist/curry-howard/proof.js.map +1 -0
- package/dist/curry-howard/reduce.d.ts +7 -0
- package/dist/curry-howard/reduce.d.ts.map +1 -0
- package/dist/curry-howard/reduce.js +266 -0
- package/dist/curry-howard/reduce.js.map +1 -0
- package/dist/curry-howard/types.d.ts +91 -0
- package/dist/curry-howard/types.d.ts.map +1 -0
- package/dist/curry-howard/types.js +149 -0
- package/dist/curry-howard/types.js.map +1 -0
- package/dist/fol-prover-equality/demodulate.d.ts +29 -0
- package/dist/fol-prover-equality/demodulate.d.ts.map +1 -0
- package/dist/fol-prover-equality/demodulate.js +197 -0
- package/dist/fol-prover-equality/demodulate.js.map +1 -0
- package/dist/fol-prover-equality/index.d.ts +8 -0
- package/dist/fol-prover-equality/index.d.ts.map +1 -0
- package/dist/fol-prover-equality/index.js +24 -0
- package/dist/fol-prover-equality/index.js.map +1 -0
- package/dist/fol-prover-equality/paramodulate.d.ts +46 -0
- package/dist/fol-prover-equality/paramodulate.d.ts.map +1 -0
- package/dist/fol-prover-equality/paramodulate.js +159 -0
- package/dist/fol-prover-equality/paramodulate.js.map +1 -0
- package/dist/fol-prover-equality/prove.d.ts +7 -0
- package/dist/fol-prover-equality/prove.d.ts.map +1 -0
- package/dist/fol-prover-equality/prove.js +307 -0
- package/dist/fol-prover-equality/prove.js.map +1 -0
- package/dist/fol-prover-equality/term-utils.d.ts +43 -0
- package/dist/fol-prover-equality/term-utils.d.ts.map +1 -0
- package/dist/fol-prover-equality/term-utils.js +230 -0
- package/dist/fol-prover-equality/term-utils.js.map +1 -0
- package/dist/fol-prover-equality/types.d.ts +20 -0
- package/dist/fol-prover-equality/types.d.ts.map +1 -0
- package/dist/fol-prover-equality/types.js +5 -0
- package/dist/fol-prover-equality/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/profiles/ctl/check.d.ts +13 -0
- package/dist/profiles/ctl/check.d.ts.map +1 -0
- package/dist/profiles/ctl/check.js +359 -0
- package/dist/profiles/ctl/check.js.map +1 -0
- package/dist/profiles/ctl/index.d.ts +5 -0
- package/dist/profiles/ctl/index.d.ts.map +1 -0
- package/dist/profiles/ctl/index.js +23 -0
- package/dist/profiles/ctl/index.js.map +1 -0
- package/dist/profiles/ctl/types.d.ts +74 -0
- package/dist/profiles/ctl/types.d.ts.map +1 -0
- package/dist/profiles/ctl/types.js +53 -0
- package/dist/profiles/ctl/types.js.map +1 -0
- package/dist/profiles/ctl/witness.d.ts +20 -0
- package/dist/profiles/ctl/witness.d.ts.map +1 -0
- package/dist/profiles/ctl/witness.js +149 -0
- package/dist/profiles/ctl/witness.js.map +1 -0
- package/dist/profiles/default-logic/entailment.d.ts +14 -0
- package/dist/profiles/default-logic/entailment.d.ts.map +1 -0
- package/dist/profiles/default-logic/entailment.js +36 -0
- package/dist/profiles/default-logic/entailment.js.map +1 -0
- package/dist/profiles/default-logic/extensions.d.ts +35 -0
- package/dist/profiles/default-logic/extensions.d.ts.map +1 -0
- package/dist/profiles/default-logic/extensions.js +276 -0
- package/dist/profiles/default-logic/extensions.js.map +1 -0
- package/dist/profiles/default-logic/index.d.ts +5 -0
- package/dist/profiles/default-logic/index.d.ts.map +1 -0
- package/dist/profiles/default-logic/index.js +33 -0
- package/dist/profiles/default-logic/index.js.map +1 -0
- package/dist/profiles/default-logic/types.d.ts +29 -0
- package/dist/profiles/default-logic/types.d.ts.map +1 -0
- package/dist/profiles/default-logic/types.js +25 -0
- package/dist/profiles/default-logic/types.js.map +1 -0
- package/dist/profiles/description-logic/index.d.ts +5 -0
- package/dist/profiles/description-logic/index.d.ts.map +1 -0
- package/dist/profiles/description-logic/index.js +39 -0
- package/dist/profiles/description-logic/index.js.map +1 -0
- package/dist/profiles/description-logic/nnf.d.ts +13 -0
- package/dist/profiles/description-logic/nnf.d.ts.map +1 -0
- package/dist/profiles/description-logic/nnf.js +123 -0
- package/dist/profiles/description-logic/nnf.js.map +1 -0
- package/dist/profiles/description-logic/tableau.d.ts +27 -0
- package/dist/profiles/description-logic/tableau.d.ts.map +1 -0
- package/dist/profiles/description-logic/tableau.js +491 -0
- package/dist/profiles/description-logic/tableau.js.map +1 -0
- package/dist/profiles/description-logic/types.d.ts +45 -0
- package/dist/profiles/description-logic/types.d.ts.map +1 -0
- package/dist/profiles/description-logic/types.js +71 -0
- package/dist/profiles/description-logic/types.js.map +1 -0
- package/dist/profiles/hybrid-logic/index.d.ts +5 -0
- package/dist/profiles/hybrid-logic/index.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/index.js +34 -0
- package/dist/profiles/hybrid-logic/index.js.map +1 -0
- package/dist/profiles/hybrid-logic/sat.d.ts +15 -0
- package/dist/profiles/hybrid-logic/sat.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/sat.js +142 -0
- package/dist/profiles/hybrid-logic/sat.js.map +1 -0
- package/dist/profiles/hybrid-logic/semantics.d.ts +20 -0
- package/dist/profiles/hybrid-logic/semantics.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/semantics.js +107 -0
- package/dist/profiles/hybrid-logic/semantics.js.map +1 -0
- package/dist/profiles/hybrid-logic/types.d.ts +78 -0
- package/dist/profiles/hybrid-logic/types.d.ts.map +1 -0
- package/dist/profiles/hybrid-logic/types.js +107 -0
- package/dist/profiles/hybrid-logic/types.js.map +1 -0
- package/dist/profiles/ltl-sat/index.d.ts +4 -0
- package/dist/profiles/ltl-sat/index.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/index.js +40 -0
- package/dist/profiles/ltl-sat/index.js.map +1 -0
- package/dist/profiles/ltl-sat/sat.d.ts +8 -0
- package/dist/profiles/ltl-sat/sat.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/sat.js +140 -0
- package/dist/profiles/ltl-sat/sat.js.map +1 -0
- package/dist/profiles/ltl-sat/tableau.d.ts +19 -0
- package/dist/profiles/ltl-sat/tableau.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/tableau.js +358 -0
- package/dist/profiles/ltl-sat/tableau.js.map +1 -0
- package/dist/profiles/ltl-sat/types.d.ts +52 -0
- package/dist/profiles/ltl-sat/types.d.ts.map +1 -0
- package/dist/profiles/ltl-sat/types.js +101 -0
- package/dist/profiles/ltl-sat/types.js.map +1 -0
- package/dist/profiles/sequent-g3/index.d.ts +5 -0
- package/dist/profiles/sequent-g3/index.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/index.js +23 -0
- package/dist/profiles/sequent-g3/index.js.map +1 -0
- package/dist/profiles/sequent-g3/latex.d.ts +7 -0
- package/dist/profiles/sequent-g3/latex.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/latex.js +107 -0
- package/dist/profiles/sequent-g3/latex.js.map +1 -0
- package/dist/profiles/sequent-g3/normalize.d.ts +15 -0
- package/dist/profiles/sequent-g3/normalize.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/normalize.js +121 -0
- package/dist/profiles/sequent-g3/normalize.js.map +1 -0
- package/dist/profiles/sequent-g3/prover.d.ts +16 -0
- package/dist/profiles/sequent-g3/prover.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/prover.js +348 -0
- package/dist/profiles/sequent-g3/prover.js.map +1 -0
- package/dist/profiles/sequent-g3/types.d.ts +30 -0
- package/dist/profiles/sequent-g3/types.d.ts.map +1 -0
- package/dist/profiles/sequent-g3/types.js +16 -0
- package/dist/profiles/sequent-g3/types.js.map +1 -0
- package/dist/runtime/countermodel-min/index.d.ts +3 -0
- package/dist/runtime/countermodel-min/index.d.ts.map +1 -0
- package/dist/runtime/countermodel-min/index.js +9 -0
- package/dist/runtime/countermodel-min/index.js.map +1 -0
- package/dist/runtime/countermodel-min/minimize.d.ts +17 -0
- package/dist/runtime/countermodel-min/minimize.d.ts.map +1 -0
- package/dist/runtime/countermodel-min/minimize.js +0 -0
- package/dist/runtime/countermodel-min/minimize.js.map +1 -0
- package/dist/runtime/countermodel-min/types.d.ts +40 -0
- package/dist/runtime/countermodel-min/types.d.ts.map +1 -0
- package/dist/runtime/countermodel-min/types.js +6 -0
- package/dist/runtime/countermodel-min/types.js.map +1 -0
- package/dist/runtime/mus/extract.d.ts +34 -0
- package/dist/runtime/mus/extract.d.ts.map +1 -0
- package/dist/runtime/mus/extract.js +243 -0
- package/dist/runtime/mus/extract.js.map +1 -0
- package/dist/runtime/mus/index.d.ts +4 -0
- package/dist/runtime/mus/index.d.ts.map +1 -0
- package/dist/runtime/mus/index.js +12 -0
- package/dist/runtime/mus/index.js.map +1 -0
- package/dist/runtime/mus/quickxplain.d.ts +10 -0
- package/dist/runtime/mus/quickxplain.d.ts.map +1 -0
- package/dist/runtime/mus/quickxplain.js +100 -0
- package/dist/runtime/mus/quickxplain.js.map +1 -0
- package/dist/runtime/mus/types.d.ts +59 -0
- package/dist/runtime/mus/types.d.ts.map +1 -0
- package/dist/runtime/mus/types.js +20 -0
- package/dist/runtime/mus/types.js.map +1 -0
- package/dist/solver/cdcl-v2-incremental/index.d.ts +3 -0
- package/dist/solver/cdcl-v2-incremental/index.d.ts.map +1 -0
- package/dist/solver/cdcl-v2-incremental/index.js +16 -0
- package/dist/solver/cdcl-v2-incremental/index.js.map +1 -0
- package/dist/solver/cdcl-v2-incremental/solver.d.ts +83 -0
- package/dist/solver/cdcl-v2-incremental/solver.d.ts.map +1 -0
- package/dist/solver/cdcl-v2-incremental/solver.js +727 -0
- package/dist/solver/cdcl-v2-incremental/solver.js.map +1 -0
- package/dist/solver/cdcl-v2-incremental/types.d.ts +47 -0
- package/dist/solver/cdcl-v2-incremental/types.d.ts.map +1 -0
- package/dist/solver/cdcl-v2-incremental/types.js +13 -0
- package/dist/solver/cdcl-v2-incremental/types.js.map +1 -0
- package/dist/tests/belief-revision/agm.test.d.ts +2 -0
- package/dist/tests/belief-revision/agm.test.d.ts.map +1 -0
- package/dist/tests/belief-revision/agm.test.js +173 -0
- package/dist/tests/belief-revision/agm.test.js.map +1 -0
- package/dist/tests/countermodel-min/minimize.test.d.ts +2 -0
- package/dist/tests/countermodel-min/minimize.test.d.ts.map +1 -0
- package/dist/tests/countermodel-min/minimize.test.js +241 -0
- package/dist/tests/countermodel-min/minimize.test.js.map +1 -0
- package/dist/tests/ctl/check.test.d.ts +2 -0
- package/dist/tests/ctl/check.test.d.ts.map +1 -0
- package/dist/tests/ctl/check.test.js +337 -0
- package/dist/tests/ctl/check.test.js.map +1 -0
- package/dist/tests/curry-howard/infer.test.d.ts +2 -0
- package/dist/tests/curry-howard/infer.test.d.ts.map +1 -0
- package/dist/tests/curry-howard/infer.test.js +93 -0
- package/dist/tests/curry-howard/infer.test.js.map +1 -0
- package/dist/tests/curry-howard/proof.test.d.ts +2 -0
- package/dist/tests/curry-howard/proof.test.d.ts.map +1 -0
- package/dist/tests/curry-howard/proof.test.js +105 -0
- package/dist/tests/curry-howard/proof.test.js.map +1 -0
- package/dist/tests/curry-howard/reduce.test.d.ts +2 -0
- package/dist/tests/curry-howard/reduce.test.d.ts.map +1 -0
- package/dist/tests/curry-howard/reduce.test.js +109 -0
- package/dist/tests/curry-howard/reduce.test.js.map +1 -0
- package/dist/tests/default-logic/extensions.test.d.ts +2 -0
- package/dist/tests/default-logic/extensions.test.d.ts.map +1 -0
- package/dist/tests/default-logic/extensions.test.js +323 -0
- package/dist/tests/default-logic/extensions.test.js.map +1 -0
- package/dist/tests/description-logic/alc.test.d.ts +2 -0
- package/dist/tests/description-logic/alc.test.d.ts.map +1 -0
- package/dist/tests/description-logic/alc.test.js +253 -0
- package/dist/tests/description-logic/alc.test.js.map +1 -0
- package/dist/tests/fol-prover-equality/prove.test.d.ts +2 -0
- package/dist/tests/fol-prover-equality/prove.test.d.ts.map +1 -0
- package/dist/tests/fol-prover-equality/prove.test.js +179 -0
- package/dist/tests/fol-prover-equality/prove.test.js.map +1 -0
- package/dist/tests/hybrid-logic/semantics.test.d.ts +2 -0
- package/dist/tests/hybrid-logic/semantics.test.d.ts.map +1 -0
- package/dist/tests/hybrid-logic/semantics.test.js +169 -0
- package/dist/tests/hybrid-logic/semantics.test.js.map +1 -0
- package/dist/tests/ltl-sat/sat.test.d.ts +2 -0
- package/dist/tests/ltl-sat/sat.test.d.ts.map +1 -0
- package/dist/tests/ltl-sat/sat.test.js +160 -0
- package/dist/tests/ltl-sat/sat.test.js.map +1 -0
- package/dist/tests/mus/extract.test.d.ts +2 -0
- package/dist/tests/mus/extract.test.d.ts.map +1 -0
- package/dist/tests/mus/extract.test.js +352 -0
- package/dist/tests/mus/extract.test.js.map +1 -0
- package/dist/tests/sat-v2-incremental/basic.test.d.ts +2 -0
- package/dist/tests/sat-v2-incremental/basic.test.d.ts.map +1 -0
- package/dist/tests/sat-v2-incremental/basic.test.js +352 -0
- package/dist/tests/sat-v2-incremental/basic.test.js.map +1 -0
- package/dist/tests/sequent-g3/prover.test.d.ts +2 -0
- package/dist/tests/sequent-g3/prover.test.d.ts.map +1 -0
- package/dist/tests/sequent-g3/prover.test.js +205 -0
- package/dist/tests/sequent-g3/prover.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cloneClause = exports.termsEqual = exports.termKey = exports.isEqualityLiteral = void 0;
|
|
4
|
+
exports.paramodulate = paramodulate;
|
|
5
|
+
exports.paramodulateWithSubst = paramodulateWithSubst;
|
|
6
|
+
exports.paramodulateAll = paramodulateAll;
|
|
7
|
+
exports.reflexivityResolve = reflexivityResolve;
|
|
8
|
+
const unify_1 = require("../fol-prover/unify");
|
|
9
|
+
const term_utils_1 = require("./term-utils");
|
|
10
|
+
Object.defineProperty(exports, "cloneClause", { enumerable: true, get: function () { return term_utils_1.cloneClause; } });
|
|
11
|
+
Object.defineProperty(exports, "isEqualityLiteral", { enumerable: true, get: function () { return term_utils_1.isEqualityLiteral; } });
|
|
12
|
+
Object.defineProperty(exports, "termKey", { enumerable: true, get: function () { return term_utils_1.termKey; } });
|
|
13
|
+
Object.defineProperty(exports, "termsEqual", { enumerable: true, get: function () { return term_utils_1.termsEqual; } });
|
|
14
|
+
/**
|
|
15
|
+
* Paramodulation:
|
|
16
|
+
*
|
|
17
|
+
* from C ∨ (s = t) (eqClause, eq_idx points to the s=t literal)
|
|
18
|
+
* and D[u] (target clause, target_idx points to literal containing u,
|
|
19
|
+
* target_pos points inside that literal's args)
|
|
20
|
+
* if unify(s, u) = σ then (C ∨ D[u → t])·σ
|
|
21
|
+
*
|
|
22
|
+
* The direction is fixed: args[0] = s (lhs), args[1] = t (rhs). To paramodulate
|
|
23
|
+
* "in the other direction" callers should retry with the equation flipped (see
|
|
24
|
+
* `paramodulateAll` for the symmetric enumeration).
|
|
25
|
+
*
|
|
26
|
+
* Returns null when the literals can't paramodulate (wrong kind, unification fails, etc.).
|
|
27
|
+
*/
|
|
28
|
+
function paramodulate(c1Raw, eq_idx, c2Raw, target_idx, target_pos) {
|
|
29
|
+
const out = paramodulateWithSubst(c1Raw, eq_idx, c2Raw, target_idx, target_pos);
|
|
30
|
+
return out ? out.resolvent : null;
|
|
31
|
+
}
|
|
32
|
+
function paramodulateWithSubst(c1Raw, eq_idx, c2Raw, target_idx, target_pos) {
|
|
33
|
+
// Standardize variables apart between the two parents.
|
|
34
|
+
const c1 = (0, term_utils_1.freshenClause)(c1Raw);
|
|
35
|
+
const c2 = (0, term_utils_1.freshenClause)(c2Raw);
|
|
36
|
+
const eqLit = c1[eq_idx];
|
|
37
|
+
if (eqLit === undefined)
|
|
38
|
+
return null;
|
|
39
|
+
if (!(0, term_utils_1.isEqualityLiteral)(eqLit))
|
|
40
|
+
return null;
|
|
41
|
+
if (eqLit.negated)
|
|
42
|
+
return null;
|
|
43
|
+
const s = eqLit.args[0];
|
|
44
|
+
const t = eqLit.args[1];
|
|
45
|
+
if (s === undefined || t === undefined)
|
|
46
|
+
return null;
|
|
47
|
+
const target = c2[target_idx];
|
|
48
|
+
if (target === undefined)
|
|
49
|
+
return null;
|
|
50
|
+
const u = (0, term_utils_1.getLiteralSubterm)(target, target_pos);
|
|
51
|
+
if (u === null)
|
|
52
|
+
return null;
|
|
53
|
+
// Don't try to paramodulate into a bare variable subterm — that produces
|
|
54
|
+
// an explosion of useless rewrites equivalent to factoring.
|
|
55
|
+
if (u.kind === 'var')
|
|
56
|
+
return null;
|
|
57
|
+
const sigma = new Map();
|
|
58
|
+
const unified = (0, unify_1.unify)(s, u, sigma);
|
|
59
|
+
if (unified === null)
|
|
60
|
+
return null;
|
|
61
|
+
// Build C·σ (rest of clause 1 minus the equation literal)
|
|
62
|
+
const rest1 = c1.filter((_, k) => k !== eq_idx).map((lit) => (0, unify_1.applyLiteral)(lit, sigma));
|
|
63
|
+
// Build the rewritten target: replace u with t at target_pos, then apply σ.
|
|
64
|
+
const rewritten = (0, term_utils_1.replaceLiteralSubterm)(target, target_pos, (0, unify_1.applyTerm)(t, sigma));
|
|
65
|
+
const rewrittenSigma = (0, unify_1.applyLiteral)(rewritten, sigma);
|
|
66
|
+
const rest2 = c2.filter((_, k) => k !== target_idx).map((lit) => (0, unify_1.applyLiteral)(lit, sigma));
|
|
67
|
+
const merged = factor([...rest1, rewrittenSigma, ...rest2]);
|
|
68
|
+
return { resolvent: merged, substitution: sigma };
|
|
69
|
+
}
|
|
70
|
+
function paramodulateAll(idxA, cA, idxB, cB) {
|
|
71
|
+
const out = [];
|
|
72
|
+
collectParamods(idxA, cA, idxB, cB, false, out);
|
|
73
|
+
if (idxA !== idxB)
|
|
74
|
+
collectParamods(idxB, cB, idxA, cA, false, out);
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
function collectParamods(idxEq, cEq, idxTgt, cTgt, _unusedFlip, out) {
|
|
78
|
+
for (let i = 0; i < cEq.length; i++) {
|
|
79
|
+
const lit = cEq[i];
|
|
80
|
+
if (lit === undefined)
|
|
81
|
+
continue;
|
|
82
|
+
if (!(0, term_utils_1.isEqualityLiteral)(lit) || lit.negated)
|
|
83
|
+
continue;
|
|
84
|
+
const lhs = lit.args[0];
|
|
85
|
+
const rhs = lit.args[1];
|
|
86
|
+
if (lhs === undefined || rhs === undefined)
|
|
87
|
+
continue;
|
|
88
|
+
for (const flip of [false, true]) {
|
|
89
|
+
// Build a virtual clause where, when flip=true, the equation is t = s instead of s = t.
|
|
90
|
+
const directedEq = flip
|
|
91
|
+
? cEq.map((l, k) => k === i
|
|
92
|
+
? {
|
|
93
|
+
negated: l.negated,
|
|
94
|
+
predicate: l.predicate,
|
|
95
|
+
args: [(0, term_utils_1.cloneTerm)(rhs), (0, term_utils_1.cloneTerm)(lhs)],
|
|
96
|
+
}
|
|
97
|
+
: l)
|
|
98
|
+
: cEq;
|
|
99
|
+
for (let j = 0; j < cTgt.length; j++) {
|
|
100
|
+
const tgtLit = cTgt[j];
|
|
101
|
+
if (tgtLit === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
for (const pos of (0, term_utils_1.allLiteralPositions)(tgtLit)) {
|
|
104
|
+
const result = paramodulateWithSubst(directedEq, i, cTgt, j, pos);
|
|
105
|
+
if (result === null)
|
|
106
|
+
continue;
|
|
107
|
+
out.push({
|
|
108
|
+
fromEqClause: idxEq,
|
|
109
|
+
fromTargetClause: idxTgt,
|
|
110
|
+
eqIdx: i,
|
|
111
|
+
targetIdx: j,
|
|
112
|
+
targetPos: pos,
|
|
113
|
+
flipped: flip,
|
|
114
|
+
resolvent: result.resolvent,
|
|
115
|
+
substitution: result.substitution,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function factor(c) {
|
|
123
|
+
const seen = new Set();
|
|
124
|
+
const out = [];
|
|
125
|
+
for (const lit of c) {
|
|
126
|
+
const k = (0, term_utils_1.literalKey)(lit);
|
|
127
|
+
if (seen.has(k))
|
|
128
|
+
continue;
|
|
129
|
+
seen.add(k);
|
|
130
|
+
out.push(lit);
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Reflexivity resolution: drop a literal of the form ¬(t = t) from a clause.
|
|
136
|
+
* Useful both during search and for proving reflexive goals.
|
|
137
|
+
*/
|
|
138
|
+
function reflexivityResolve(c) {
|
|
139
|
+
for (let i = 0; i < c.length; i++) {
|
|
140
|
+
const lit = c[i];
|
|
141
|
+
if (lit === undefined)
|
|
142
|
+
continue;
|
|
143
|
+
if (!(0, term_utils_1.isEqualityLiteral)(lit))
|
|
144
|
+
continue;
|
|
145
|
+
if (!lit.negated)
|
|
146
|
+
continue;
|
|
147
|
+
const a = lit.args[0];
|
|
148
|
+
const b = lit.args[1];
|
|
149
|
+
if (a === undefined || b === undefined)
|
|
150
|
+
continue;
|
|
151
|
+
const sigma = new Map();
|
|
152
|
+
const u = (0, unify_1.unify)(a, b, sigma);
|
|
153
|
+
if (u === null)
|
|
154
|
+
continue;
|
|
155
|
+
return (0, unify_1.applyClause)(c.filter((_, k) => k !== i), sigma);
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=paramodulate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paramodulate.js","sourceRoot":"","sources":["../../src/fol-prover-equality/paramodulate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Formula } from '../types';
|
|
2
|
+
import type { FOLClause } from '../fol-prover/types';
|
|
3
|
+
import type { EqualityProveOptions, EqualityProveResult } from './types';
|
|
4
|
+
declare function rewriteEqualityClause(c: FOLClause): FOLClause;
|
|
5
|
+
export declare function proveWithEquality(premises: Formula[], goal: Formula, opts?: EqualityProveOptions): EqualityProveResult;
|
|
6
|
+
export { rewriteEqualityClause };
|
|
7
|
+
//# sourceMappingURL=prove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prove.d.ts","sourceRoot":"","sources":["../../src/fol-prover-equality/prove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAuB,MAAM,qBAAqB,CAAC;AAO1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAqB,MAAM,SAAS,CAAC;AAgC5F,iBAAS,qBAAqB,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAEtD;AA4FD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,oBAAyB,GAC9B,mBAAmB,CA6KrB;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.proveWithEquality = proveWithEquality;
|
|
4
|
+
exports.rewriteEqualityClause = rewriteEqualityClause;
|
|
5
|
+
const cnf_1 = require("../fol-prover/cnf");
|
|
6
|
+
const resolve_1 = require("../fol-prover/resolve");
|
|
7
|
+
const unify_1 = require("../fol-prover/unify");
|
|
8
|
+
const paramodulate_1 = require("./paramodulate");
|
|
9
|
+
const demodulate_1 = require("./demodulate");
|
|
10
|
+
const term_utils_1 = require("./term-utils");
|
|
11
|
+
const types_1 = require("./types");
|
|
12
|
+
const DEFAULT_TIMEOUT_MS = 3000;
|
|
13
|
+
const DEFAULT_MAX_STEPS = 5000;
|
|
14
|
+
/**
|
|
15
|
+
* Translate the FOL Formula's `equals` kind to our internal equality predicate.
|
|
16
|
+
* Currently the project's CNF pipeline does not natively know about `equals`; it
|
|
17
|
+
* would turn an `equals(t1, t2)` formula into a predicate literal with two
|
|
18
|
+
* parameters by name. To bring it into the equality prover we walk the Formula
|
|
19
|
+
* tree and rewrite any `equals` node into a `predicate` with the special name
|
|
20
|
+
* `__eq__` whose params are the term strings — but since the existing CNF only
|
|
21
|
+
* supports name-based terms, we explicitly construct the FOLClause for the goal
|
|
22
|
+
* and premises that contain equality.
|
|
23
|
+
*
|
|
24
|
+
* Strategy: parse premises and goal via the usual `toCNF`. After CNF, walk every
|
|
25
|
+
* literal and rewrite predicates that look like equalities into the canonical
|
|
26
|
+
* `__eq__(arg0, arg1)` form. The user-facing convention is: any literal of the
|
|
27
|
+
* form `equals(a, b)` (either as a predicate named "equals", "=", or "eq") is
|
|
28
|
+
* treated as an equality.
|
|
29
|
+
*/
|
|
30
|
+
const EQUALITY_ALIASES = new Set(['equals', '=', 'eq', '==']);
|
|
31
|
+
function rewriteEqualityLiteral(lit) {
|
|
32
|
+
if (EQUALITY_ALIASES.has(lit.predicate) && lit.args.length === 2) {
|
|
33
|
+
return { negated: lit.negated, predicate: types_1.EQ_PREDICATE, args: lit.args };
|
|
34
|
+
}
|
|
35
|
+
return lit;
|
|
36
|
+
}
|
|
37
|
+
function rewriteEqualityClause(c) {
|
|
38
|
+
return c.map(rewriteEqualityLiteral);
|
|
39
|
+
}
|
|
40
|
+
function preprocessFormula(f) {
|
|
41
|
+
if (f.kind === 'equals') {
|
|
42
|
+
const params = (f.params ?? f.terms ?? []).slice();
|
|
43
|
+
const newF = { kind: 'predicate', name: '=', params, terms: params };
|
|
44
|
+
if (f.args !== undefined)
|
|
45
|
+
newF.args = f.args.map(preprocessFormula);
|
|
46
|
+
return newF;
|
|
47
|
+
}
|
|
48
|
+
if (f.args === undefined)
|
|
49
|
+
return f;
|
|
50
|
+
return { ...f, args: f.args.map(preprocessFormula) };
|
|
51
|
+
}
|
|
52
|
+
function reflexivityClauses() {
|
|
53
|
+
// The axiom ∀x. x = x → CNF clause __eq__(x, x)
|
|
54
|
+
return [
|
|
55
|
+
[
|
|
56
|
+
{
|
|
57
|
+
negated: false,
|
|
58
|
+
predicate: types_1.EQ_PREDICATE,
|
|
59
|
+
args: [
|
|
60
|
+
{ kind: 'var', name: '__refl_x' },
|
|
61
|
+
{ kind: 'var', name: '__refl_x' },
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
function isTautology(c) {
|
|
68
|
+
// Standard tautology: P and ¬P with identical args.
|
|
69
|
+
for (let i = 0; i < c.length; i++) {
|
|
70
|
+
for (let j = i + 1; j < c.length; j++) {
|
|
71
|
+
const li = c[i];
|
|
72
|
+
const lj = c[j];
|
|
73
|
+
if (li === undefined || lj === undefined)
|
|
74
|
+
continue;
|
|
75
|
+
if (li.negated === lj.negated)
|
|
76
|
+
continue;
|
|
77
|
+
if (li.predicate !== lj.predicate)
|
|
78
|
+
continue;
|
|
79
|
+
if (li.args.length !== lj.args.length)
|
|
80
|
+
continue;
|
|
81
|
+
let same = true;
|
|
82
|
+
for (let k = 0; k < li.args.length; k++) {
|
|
83
|
+
const a = li.args[k];
|
|
84
|
+
const b = lj.args[k];
|
|
85
|
+
if (a === undefined || b === undefined) {
|
|
86
|
+
same = false;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (!(0, term_utils_1.termsEqual)(a, b)) {
|
|
90
|
+
same = false;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (same)
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Reflexive tautology: positive __eq__(t, t).
|
|
99
|
+
for (const lit of c) {
|
|
100
|
+
if (!(0, term_utils_1.isEqualityLiteral)(lit) || lit.negated)
|
|
101
|
+
continue;
|
|
102
|
+
const a = lit.args[0];
|
|
103
|
+
const b = lit.args[1];
|
|
104
|
+
if (a === undefined || b === undefined)
|
|
105
|
+
continue;
|
|
106
|
+
if ((0, term_utils_1.termsEqual)(a, b))
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
function reflexivityResolveStep(c) {
|
|
112
|
+
for (let i = 0; i < c.length; i++) {
|
|
113
|
+
const lit = c[i];
|
|
114
|
+
if (lit === undefined)
|
|
115
|
+
continue;
|
|
116
|
+
if (!(0, term_utils_1.isEqualityLiteral)(lit))
|
|
117
|
+
continue;
|
|
118
|
+
if (!lit.negated)
|
|
119
|
+
continue;
|
|
120
|
+
const a = lit.args[0];
|
|
121
|
+
const b = lit.args[1];
|
|
122
|
+
if (a === undefined || b === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
const sigma = new Map();
|
|
125
|
+
const u = (0, unify_1.unify)(a, b, sigma);
|
|
126
|
+
if (u === null)
|
|
127
|
+
continue;
|
|
128
|
+
const rest = c
|
|
129
|
+
.filter((_, k) => k !== i)
|
|
130
|
+
.map((l) => ({
|
|
131
|
+
negated: l.negated,
|
|
132
|
+
predicate: l.predicate,
|
|
133
|
+
args: l.args.map((t) => (0, unify_1.applyTerm)(t, sigma)),
|
|
134
|
+
}));
|
|
135
|
+
return { clause: rest, sigma };
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
function proveWithEquality(premises, goal, opts = {}) {
|
|
140
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
141
|
+
const maxSteps = opts.maxSteps ?? DEFAULT_MAX_STEPS;
|
|
142
|
+
// Rewrite `equals` nodes so CNF treats them as binary predicates we can recognise.
|
|
143
|
+
const preProcessedPremises = premises.map(preprocessFormula);
|
|
144
|
+
const preGoal = preprocessFormula(goal);
|
|
145
|
+
const rawPremiseClauses = preProcessedPremises.flatMap((p) => (0, cnf_1.toCNF)(p));
|
|
146
|
+
const negatedGoal = { kind: 'not', args: [preGoal] };
|
|
147
|
+
const rawNegGoalClauses = (0, cnf_1.toCNF)(negatedGoal);
|
|
148
|
+
const premiseClauses = rawPremiseClauses.map(rewriteEqualityClause);
|
|
149
|
+
const negGoalClauses = rawNegGoalClauses.map(rewriteEqualityClause);
|
|
150
|
+
if (premiseClauses.some((c) => c.length === 0) || negGoalClauses.some((c) => c.length === 0)) {
|
|
151
|
+
return { proven: true, steps: [] };
|
|
152
|
+
}
|
|
153
|
+
const all = [];
|
|
154
|
+
const seen = new Set();
|
|
155
|
+
const addClause = (c) => {
|
|
156
|
+
if (isTautology(c))
|
|
157
|
+
return { idx: -1, novel: false };
|
|
158
|
+
const key = (0, term_utils_1.clauseKey)(c);
|
|
159
|
+
const existingIdx = all.findIndex((existing) => (0, term_utils_1.clauseKey)(existing) === key);
|
|
160
|
+
if (existingIdx >= 0)
|
|
161
|
+
return { idx: existingIdx, novel: false };
|
|
162
|
+
seen.add(key);
|
|
163
|
+
all.push(c);
|
|
164
|
+
return { idx: all.length - 1, novel: true };
|
|
165
|
+
};
|
|
166
|
+
// Seed: reflexivity axiom (used by paramodulation when a clause demands x = x).
|
|
167
|
+
for (const c of reflexivityClauses())
|
|
168
|
+
addClause(c);
|
|
169
|
+
for (const c of premiseClauses)
|
|
170
|
+
addClause(c);
|
|
171
|
+
for (const c of negGoalClauses)
|
|
172
|
+
addClause(c);
|
|
173
|
+
const steps = [];
|
|
174
|
+
const startedAt = Date.now();
|
|
175
|
+
const finishSuccess = () => ({ proven: true, steps });
|
|
176
|
+
// Saturation loop: classic given-clause-ish. For each new clause, try resolution
|
|
177
|
+
// and paramodulation with every older clause; apply reflexivity resolution and
|
|
178
|
+
// equality factoring inline.
|
|
179
|
+
let cursor = 0;
|
|
180
|
+
while (cursor < all.length) {
|
|
181
|
+
if (Date.now() - startedAt > timeoutMs) {
|
|
182
|
+
return { proven: false, steps, timeoutHit: true };
|
|
183
|
+
}
|
|
184
|
+
if (steps.length >= maxSteps) {
|
|
185
|
+
return { proven: false, steps, reason: 'max-steps' };
|
|
186
|
+
}
|
|
187
|
+
const ci = all[cursor];
|
|
188
|
+
if (ci === undefined) {
|
|
189
|
+
cursor++;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
// Reflexivity resolution on the current clause itself.
|
|
193
|
+
{
|
|
194
|
+
const r = reflexivityResolveStep(ci);
|
|
195
|
+
if (r !== null) {
|
|
196
|
+
if (r.clause.length === 0) {
|
|
197
|
+
steps.push({
|
|
198
|
+
rule: 'reflex',
|
|
199
|
+
from: [cursor],
|
|
200
|
+
result: r.clause,
|
|
201
|
+
substitution: (0, term_utils_1.substToRecordTerm)(r.sigma),
|
|
202
|
+
});
|
|
203
|
+
return finishSuccess();
|
|
204
|
+
}
|
|
205
|
+
const { idx, novel } = addClause(r.clause);
|
|
206
|
+
if (novel && idx >= 0) {
|
|
207
|
+
steps.push({
|
|
208
|
+
rule: 'reflex',
|
|
209
|
+
from: [cursor],
|
|
210
|
+
result: r.clause,
|
|
211
|
+
substitution: (0, term_utils_1.substToRecordTerm)(r.sigma),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Equality factoring on the current clause.
|
|
217
|
+
for (const factored of (0, demodulate_1.equalityFactor)(ci)) {
|
|
218
|
+
const { idx, novel } = addClause(factored);
|
|
219
|
+
if (novel && idx >= 0) {
|
|
220
|
+
steps.push({
|
|
221
|
+
rule: 'factor',
|
|
222
|
+
from: [cursor],
|
|
223
|
+
result: factored,
|
|
224
|
+
substitution: {},
|
|
225
|
+
});
|
|
226
|
+
if (factored.length === 0)
|
|
227
|
+
return finishSuccess();
|
|
228
|
+
}
|
|
229
|
+
if (steps.length >= maxSteps)
|
|
230
|
+
return { proven: false, steps, reason: 'max-steps' };
|
|
231
|
+
}
|
|
232
|
+
for (let j = 0; j <= cursor; j++) {
|
|
233
|
+
if (Date.now() - startedAt > timeoutMs) {
|
|
234
|
+
return { proven: false, steps, timeoutHit: true };
|
|
235
|
+
}
|
|
236
|
+
const cj = all[j];
|
|
237
|
+
if (cj === undefined)
|
|
238
|
+
continue;
|
|
239
|
+
// --- Binary resolution
|
|
240
|
+
const resolvents = (0, resolve_1.resolveWithRecord)({ c1Idx: cursor, c2Idx: j, c1: ci, c2: cj });
|
|
241
|
+
for (const r of resolvents) {
|
|
242
|
+
if (r.resolvent.length === 0) {
|
|
243
|
+
steps.push({
|
|
244
|
+
rule: 'resolve',
|
|
245
|
+
from: [cursor, j],
|
|
246
|
+
result: r.resolvent,
|
|
247
|
+
substitution: {},
|
|
248
|
+
});
|
|
249
|
+
return finishSuccess();
|
|
250
|
+
}
|
|
251
|
+
const { idx, novel } = addClause(r.resolvent);
|
|
252
|
+
if (novel && idx >= 0) {
|
|
253
|
+
steps.push({
|
|
254
|
+
rule: 'resolve',
|
|
255
|
+
from: [cursor, j],
|
|
256
|
+
result: r.resolvent,
|
|
257
|
+
substitution: {},
|
|
258
|
+
});
|
|
259
|
+
if (steps.length >= maxSteps)
|
|
260
|
+
return { proven: false, steps, reason: 'max-steps' };
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// --- Paramodulation in both directions
|
|
264
|
+
const paramods = (0, paramodulate_1.paramodulateAll)(cursor, ci, j, cj);
|
|
265
|
+
for (const p of paramods) {
|
|
266
|
+
if (p.resolvent.length === 0) {
|
|
267
|
+
steps.push({
|
|
268
|
+
rule: 'paramod',
|
|
269
|
+
from: [p.fromEqClause, p.fromTargetClause],
|
|
270
|
+
result: p.resolvent,
|
|
271
|
+
substitution: (0, term_utils_1.substToRecordTerm)(p.substitution),
|
|
272
|
+
});
|
|
273
|
+
return finishSuccess();
|
|
274
|
+
}
|
|
275
|
+
// Apply reflexivity resolution to the paramodulant before adding; this
|
|
276
|
+
// catches the common pattern where paramod produces e.g. ¬(a = a) ∨ ...
|
|
277
|
+
let toAdd = p.resolvent;
|
|
278
|
+
const reflexed = reflexivityResolveStep(toAdd);
|
|
279
|
+
if (reflexed !== null)
|
|
280
|
+
toAdd = reflexed.clause;
|
|
281
|
+
if (toAdd.length === 0) {
|
|
282
|
+
steps.push({
|
|
283
|
+
rule: 'paramod',
|
|
284
|
+
from: [p.fromEqClause, p.fromTargetClause],
|
|
285
|
+
result: toAdd,
|
|
286
|
+
substitution: (0, term_utils_1.substToRecordTerm)(p.substitution),
|
|
287
|
+
});
|
|
288
|
+
return finishSuccess();
|
|
289
|
+
}
|
|
290
|
+
const { idx, novel } = addClause(toAdd);
|
|
291
|
+
if (novel && idx >= 0) {
|
|
292
|
+
steps.push({
|
|
293
|
+
rule: 'paramod',
|
|
294
|
+
from: [p.fromEqClause, p.fromTargetClause],
|
|
295
|
+
result: toAdd,
|
|
296
|
+
substitution: (0, term_utils_1.substToRecordTerm)(p.substitution),
|
|
297
|
+
});
|
|
298
|
+
if (steps.length >= maxSteps)
|
|
299
|
+
return { proven: false, steps, reason: 'max-steps' };
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
cursor++;
|
|
304
|
+
}
|
|
305
|
+
return { proven: false, steps, reason: 'saturated' };
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=prove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prove.js","sourceRoot":"","sources":["../../src/fol-prover-equality/prove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { FOLClause, FOLLiteral, FOLTerm } from '../fol-prover/types';
|
|
2
|
+
export declare function isEqualityLiteral(lit: FOLLiteral): boolean;
|
|
3
|
+
export declare function termKey(t: FOLTerm): string;
|
|
4
|
+
export declare function literalKey(lit: FOLLiteral): string;
|
|
5
|
+
export declare function clauseKey(c: FOLClause): string;
|
|
6
|
+
export declare function termsEqual(a: FOLTerm, b: FOLTerm): boolean;
|
|
7
|
+
export declare function cloneTerm(t: FOLTerm): FOLTerm;
|
|
8
|
+
export declare function cloneLiteral(lit: FOLLiteral): FOLLiteral;
|
|
9
|
+
export declare function cloneClause(c: FOLClause): FOLClause;
|
|
10
|
+
export declare function termSize(t: FOLTerm): number;
|
|
11
|
+
export declare function collectVars(t: FOLTerm, out: Set<string>): void;
|
|
12
|
+
export declare function termVars(t: FOLTerm): Set<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the subterm of `t` at the given position. Position [] returns t itself;
|
|
15
|
+
* position [i, j, ...] descends into args[i], then args[j], etc.
|
|
16
|
+
*/
|
|
17
|
+
export declare function termAt(t: FOLTerm, pos: number[]): FOLTerm | null;
|
|
18
|
+
/**
|
|
19
|
+
* Returns a new term equal to `t` but with the subterm at `pos` replaced by `replacement`.
|
|
20
|
+
* If pos is invalid returns `t` unchanged.
|
|
21
|
+
*/
|
|
22
|
+
export declare function replaceAt(t: FOLTerm, pos: number[], replacement: FOLTerm): FOLTerm;
|
|
23
|
+
/**
|
|
24
|
+
* Enumerate every (non-empty) position inside the term tree, including the root.
|
|
25
|
+
* Variables and constants only yield their own position; functions also yield children.
|
|
26
|
+
*/
|
|
27
|
+
export declare function allPositions(t: FOLTerm): number[][];
|
|
28
|
+
/**
|
|
29
|
+
* Enumerate positions for a literal as (argIndex, ...termPath). Useful for paramodulation
|
|
30
|
+
* targets that point inside a literal's args.
|
|
31
|
+
*/
|
|
32
|
+
export declare function allLiteralPositions(lit: FOLLiteral): number[][];
|
|
33
|
+
export declare function getLiteralSubterm(lit: FOLLiteral, pos: number[]): FOLTerm | null;
|
|
34
|
+
export declare function replaceLiteralSubterm(lit: FOLLiteral, pos: number[], replacement: FOLTerm): FOLLiteral;
|
|
35
|
+
/**
|
|
36
|
+
* Lexicographic path ordering–ish comparison used for orienting equations and
|
|
37
|
+
* for selecting which side rewrites the other in demodulation. Strictly compares
|
|
38
|
+
* (size, then key) so that the "bigger" term is rewritten into the "smaller" one.
|
|
39
|
+
*/
|
|
40
|
+
export declare function compareTerms(a: FOLTerm, b: FOLTerm): number;
|
|
41
|
+
export declare function freshenClause(c: FOLClause): FOLClause;
|
|
42
|
+
export declare function substToRecordTerm(s: Map<string, FOLTerm>): Record<string, FOLTerm>;
|
|
43
|
+
//# sourceMappingURL=term-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term-utils.d.ts","sourceRoot":"","sources":["../../src/fol-prover-equality/term-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG1E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAE1D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAI1C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAGlD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAE9C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAE1D;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAI7C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAMxD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAEnD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAM3C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAO9D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAIhD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAWhE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAUlF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,EAAE,CAanD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,EAAE,CAU/D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAOhF;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EAAE,EACb,WAAW,EAAE,OAAO,GACnB,UAAU,CASZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAS3D;AAID,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAoBrD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIlF"}
|