@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.
Files changed (265) hide show
  1. package/dist/belief-revision/agm.d.ts +76 -0
  2. package/dist/belief-revision/agm.d.ts.map +1 -0
  3. package/dist/belief-revision/agm.js +249 -0
  4. package/dist/belief-revision/agm.js.map +1 -0
  5. package/dist/belief-revision/index.d.ts +6 -0
  6. package/dist/belief-revision/index.d.ts.map +1 -0
  7. package/dist/belief-revision/index.js +33 -0
  8. package/dist/belief-revision/index.js.map +1 -0
  9. package/dist/belief-revision/parser.d.ts +16 -0
  10. package/dist/belief-revision/parser.d.ts.map +1 -0
  11. package/dist/belief-revision/parser.js +199 -0
  12. package/dist/belief-revision/parser.js.map +1 -0
  13. package/dist/belief-revision/sat.d.ts +19 -0
  14. package/dist/belief-revision/sat.d.ts.map +1 -0
  15. package/dist/belief-revision/sat.js +90 -0
  16. package/dist/belief-revision/sat.js.map +1 -0
  17. package/dist/belief-revision/types.d.ts +51 -0
  18. package/dist/belief-revision/types.d.ts.map +1 -0
  19. package/dist/belief-revision/types.js +10 -0
  20. package/dist/belief-revision/types.js.map +1 -0
  21. package/dist/curry-howard/index.d.ts +7 -0
  22. package/dist/curry-howard/index.d.ts.map +1 -0
  23. package/dist/curry-howard/index.js +46 -0
  24. package/dist/curry-howard/index.js.map +1 -0
  25. package/dist/curry-howard/infer.d.ts +9 -0
  26. package/dist/curry-howard/infer.d.ts.map +1 -0
  27. package/dist/curry-howard/infer.js +129 -0
  28. package/dist/curry-howard/infer.js.map +1 -0
  29. package/dist/curry-howard/proof.d.ts +7 -0
  30. package/dist/curry-howard/proof.d.ts.map +1 -0
  31. package/dist/curry-howard/proof.js +282 -0
  32. package/dist/curry-howard/proof.js.map +1 -0
  33. package/dist/curry-howard/reduce.d.ts +7 -0
  34. package/dist/curry-howard/reduce.d.ts.map +1 -0
  35. package/dist/curry-howard/reduce.js +266 -0
  36. package/dist/curry-howard/reduce.js.map +1 -0
  37. package/dist/curry-howard/types.d.ts +91 -0
  38. package/dist/curry-howard/types.d.ts.map +1 -0
  39. package/dist/curry-howard/types.js +149 -0
  40. package/dist/curry-howard/types.js.map +1 -0
  41. package/dist/fol-prover-equality/demodulate.d.ts +29 -0
  42. package/dist/fol-prover-equality/demodulate.d.ts.map +1 -0
  43. package/dist/fol-prover-equality/demodulate.js +197 -0
  44. package/dist/fol-prover-equality/demodulate.js.map +1 -0
  45. package/dist/fol-prover-equality/index.d.ts +8 -0
  46. package/dist/fol-prover-equality/index.d.ts.map +1 -0
  47. package/dist/fol-prover-equality/index.js +24 -0
  48. package/dist/fol-prover-equality/index.js.map +1 -0
  49. package/dist/fol-prover-equality/paramodulate.d.ts +46 -0
  50. package/dist/fol-prover-equality/paramodulate.d.ts.map +1 -0
  51. package/dist/fol-prover-equality/paramodulate.js +159 -0
  52. package/dist/fol-prover-equality/paramodulate.js.map +1 -0
  53. package/dist/fol-prover-equality/prove.d.ts +7 -0
  54. package/dist/fol-prover-equality/prove.d.ts.map +1 -0
  55. package/dist/fol-prover-equality/prove.js +307 -0
  56. package/dist/fol-prover-equality/prove.js.map +1 -0
  57. package/dist/fol-prover-equality/term-utils.d.ts +43 -0
  58. package/dist/fol-prover-equality/term-utils.d.ts.map +1 -0
  59. package/dist/fol-prover-equality/term-utils.js +230 -0
  60. package/dist/fol-prover-equality/term-utils.js.map +1 -0
  61. package/dist/fol-prover-equality/types.d.ts +20 -0
  62. package/dist/fol-prover-equality/types.d.ts.map +1 -0
  63. package/dist/fol-prover-equality/types.js +5 -0
  64. package/dist/fol-prover-equality/types.js.map +1 -0
  65. package/dist/index.d.ts +4 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +18 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/profiles/ctl/check.d.ts +13 -0
  70. package/dist/profiles/ctl/check.d.ts.map +1 -0
  71. package/dist/profiles/ctl/check.js +359 -0
  72. package/dist/profiles/ctl/check.js.map +1 -0
  73. package/dist/profiles/ctl/index.d.ts +5 -0
  74. package/dist/profiles/ctl/index.d.ts.map +1 -0
  75. package/dist/profiles/ctl/index.js +23 -0
  76. package/dist/profiles/ctl/index.js.map +1 -0
  77. package/dist/profiles/ctl/types.d.ts +74 -0
  78. package/dist/profiles/ctl/types.d.ts.map +1 -0
  79. package/dist/profiles/ctl/types.js +53 -0
  80. package/dist/profiles/ctl/types.js.map +1 -0
  81. package/dist/profiles/ctl/witness.d.ts +20 -0
  82. package/dist/profiles/ctl/witness.d.ts.map +1 -0
  83. package/dist/profiles/ctl/witness.js +149 -0
  84. package/dist/profiles/ctl/witness.js.map +1 -0
  85. package/dist/profiles/default-logic/entailment.d.ts +14 -0
  86. package/dist/profiles/default-logic/entailment.d.ts.map +1 -0
  87. package/dist/profiles/default-logic/entailment.js +36 -0
  88. package/dist/profiles/default-logic/entailment.js.map +1 -0
  89. package/dist/profiles/default-logic/extensions.d.ts +35 -0
  90. package/dist/profiles/default-logic/extensions.d.ts.map +1 -0
  91. package/dist/profiles/default-logic/extensions.js +276 -0
  92. package/dist/profiles/default-logic/extensions.js.map +1 -0
  93. package/dist/profiles/default-logic/index.d.ts +5 -0
  94. package/dist/profiles/default-logic/index.d.ts.map +1 -0
  95. package/dist/profiles/default-logic/index.js +33 -0
  96. package/dist/profiles/default-logic/index.js.map +1 -0
  97. package/dist/profiles/default-logic/types.d.ts +29 -0
  98. package/dist/profiles/default-logic/types.d.ts.map +1 -0
  99. package/dist/profiles/default-logic/types.js +25 -0
  100. package/dist/profiles/default-logic/types.js.map +1 -0
  101. package/dist/profiles/description-logic/index.d.ts +5 -0
  102. package/dist/profiles/description-logic/index.d.ts.map +1 -0
  103. package/dist/profiles/description-logic/index.js +39 -0
  104. package/dist/profiles/description-logic/index.js.map +1 -0
  105. package/dist/profiles/description-logic/nnf.d.ts +13 -0
  106. package/dist/profiles/description-logic/nnf.d.ts.map +1 -0
  107. package/dist/profiles/description-logic/nnf.js +123 -0
  108. package/dist/profiles/description-logic/nnf.js.map +1 -0
  109. package/dist/profiles/description-logic/tableau.d.ts +27 -0
  110. package/dist/profiles/description-logic/tableau.d.ts.map +1 -0
  111. package/dist/profiles/description-logic/tableau.js +491 -0
  112. package/dist/profiles/description-logic/tableau.js.map +1 -0
  113. package/dist/profiles/description-logic/types.d.ts +45 -0
  114. package/dist/profiles/description-logic/types.d.ts.map +1 -0
  115. package/dist/profiles/description-logic/types.js +71 -0
  116. package/dist/profiles/description-logic/types.js.map +1 -0
  117. package/dist/profiles/hybrid-logic/index.d.ts +5 -0
  118. package/dist/profiles/hybrid-logic/index.d.ts.map +1 -0
  119. package/dist/profiles/hybrid-logic/index.js +34 -0
  120. package/dist/profiles/hybrid-logic/index.js.map +1 -0
  121. package/dist/profiles/hybrid-logic/sat.d.ts +15 -0
  122. package/dist/profiles/hybrid-logic/sat.d.ts.map +1 -0
  123. package/dist/profiles/hybrid-logic/sat.js +142 -0
  124. package/dist/profiles/hybrid-logic/sat.js.map +1 -0
  125. package/dist/profiles/hybrid-logic/semantics.d.ts +20 -0
  126. package/dist/profiles/hybrid-logic/semantics.d.ts.map +1 -0
  127. package/dist/profiles/hybrid-logic/semantics.js +107 -0
  128. package/dist/profiles/hybrid-logic/semantics.js.map +1 -0
  129. package/dist/profiles/hybrid-logic/types.d.ts +78 -0
  130. package/dist/profiles/hybrid-logic/types.d.ts.map +1 -0
  131. package/dist/profiles/hybrid-logic/types.js +107 -0
  132. package/dist/profiles/hybrid-logic/types.js.map +1 -0
  133. package/dist/profiles/ltl-sat/index.d.ts +4 -0
  134. package/dist/profiles/ltl-sat/index.d.ts.map +1 -0
  135. package/dist/profiles/ltl-sat/index.js +40 -0
  136. package/dist/profiles/ltl-sat/index.js.map +1 -0
  137. package/dist/profiles/ltl-sat/sat.d.ts +8 -0
  138. package/dist/profiles/ltl-sat/sat.d.ts.map +1 -0
  139. package/dist/profiles/ltl-sat/sat.js +140 -0
  140. package/dist/profiles/ltl-sat/sat.js.map +1 -0
  141. package/dist/profiles/ltl-sat/tableau.d.ts +19 -0
  142. package/dist/profiles/ltl-sat/tableau.d.ts.map +1 -0
  143. package/dist/profiles/ltl-sat/tableau.js +358 -0
  144. package/dist/profiles/ltl-sat/tableau.js.map +1 -0
  145. package/dist/profiles/ltl-sat/types.d.ts +52 -0
  146. package/dist/profiles/ltl-sat/types.d.ts.map +1 -0
  147. package/dist/profiles/ltl-sat/types.js +101 -0
  148. package/dist/profiles/ltl-sat/types.js.map +1 -0
  149. package/dist/profiles/sequent-g3/index.d.ts +5 -0
  150. package/dist/profiles/sequent-g3/index.d.ts.map +1 -0
  151. package/dist/profiles/sequent-g3/index.js +23 -0
  152. package/dist/profiles/sequent-g3/index.js.map +1 -0
  153. package/dist/profiles/sequent-g3/latex.d.ts +7 -0
  154. package/dist/profiles/sequent-g3/latex.d.ts.map +1 -0
  155. package/dist/profiles/sequent-g3/latex.js +107 -0
  156. package/dist/profiles/sequent-g3/latex.js.map +1 -0
  157. package/dist/profiles/sequent-g3/normalize.d.ts +15 -0
  158. package/dist/profiles/sequent-g3/normalize.d.ts.map +1 -0
  159. package/dist/profiles/sequent-g3/normalize.js +121 -0
  160. package/dist/profiles/sequent-g3/normalize.js.map +1 -0
  161. package/dist/profiles/sequent-g3/prover.d.ts +16 -0
  162. package/dist/profiles/sequent-g3/prover.d.ts.map +1 -0
  163. package/dist/profiles/sequent-g3/prover.js +348 -0
  164. package/dist/profiles/sequent-g3/prover.js.map +1 -0
  165. package/dist/profiles/sequent-g3/types.d.ts +30 -0
  166. package/dist/profiles/sequent-g3/types.d.ts.map +1 -0
  167. package/dist/profiles/sequent-g3/types.js +16 -0
  168. package/dist/profiles/sequent-g3/types.js.map +1 -0
  169. package/dist/runtime/countermodel-min/index.d.ts +3 -0
  170. package/dist/runtime/countermodel-min/index.d.ts.map +1 -0
  171. package/dist/runtime/countermodel-min/index.js +9 -0
  172. package/dist/runtime/countermodel-min/index.js.map +1 -0
  173. package/dist/runtime/countermodel-min/minimize.d.ts +17 -0
  174. package/dist/runtime/countermodel-min/minimize.d.ts.map +1 -0
  175. package/dist/runtime/countermodel-min/minimize.js +0 -0
  176. package/dist/runtime/countermodel-min/minimize.js.map +1 -0
  177. package/dist/runtime/countermodel-min/types.d.ts +40 -0
  178. package/dist/runtime/countermodel-min/types.d.ts.map +1 -0
  179. package/dist/runtime/countermodel-min/types.js +6 -0
  180. package/dist/runtime/countermodel-min/types.js.map +1 -0
  181. package/dist/runtime/mus/extract.d.ts +34 -0
  182. package/dist/runtime/mus/extract.d.ts.map +1 -0
  183. package/dist/runtime/mus/extract.js +243 -0
  184. package/dist/runtime/mus/extract.js.map +1 -0
  185. package/dist/runtime/mus/index.d.ts +4 -0
  186. package/dist/runtime/mus/index.d.ts.map +1 -0
  187. package/dist/runtime/mus/index.js +12 -0
  188. package/dist/runtime/mus/index.js.map +1 -0
  189. package/dist/runtime/mus/quickxplain.d.ts +10 -0
  190. package/dist/runtime/mus/quickxplain.d.ts.map +1 -0
  191. package/dist/runtime/mus/quickxplain.js +100 -0
  192. package/dist/runtime/mus/quickxplain.js.map +1 -0
  193. package/dist/runtime/mus/types.d.ts +59 -0
  194. package/dist/runtime/mus/types.d.ts.map +1 -0
  195. package/dist/runtime/mus/types.js +20 -0
  196. package/dist/runtime/mus/types.js.map +1 -0
  197. package/dist/solver/cdcl-v2-incremental/index.d.ts +3 -0
  198. package/dist/solver/cdcl-v2-incremental/index.d.ts.map +1 -0
  199. package/dist/solver/cdcl-v2-incremental/index.js +16 -0
  200. package/dist/solver/cdcl-v2-incremental/index.js.map +1 -0
  201. package/dist/solver/cdcl-v2-incremental/solver.d.ts +83 -0
  202. package/dist/solver/cdcl-v2-incremental/solver.d.ts.map +1 -0
  203. package/dist/solver/cdcl-v2-incremental/solver.js +727 -0
  204. package/dist/solver/cdcl-v2-incremental/solver.js.map +1 -0
  205. package/dist/solver/cdcl-v2-incremental/types.d.ts +47 -0
  206. package/dist/solver/cdcl-v2-incremental/types.d.ts.map +1 -0
  207. package/dist/solver/cdcl-v2-incremental/types.js +13 -0
  208. package/dist/solver/cdcl-v2-incremental/types.js.map +1 -0
  209. package/dist/tests/belief-revision/agm.test.d.ts +2 -0
  210. package/dist/tests/belief-revision/agm.test.d.ts.map +1 -0
  211. package/dist/tests/belief-revision/agm.test.js +173 -0
  212. package/dist/tests/belief-revision/agm.test.js.map +1 -0
  213. package/dist/tests/countermodel-min/minimize.test.d.ts +2 -0
  214. package/dist/tests/countermodel-min/minimize.test.d.ts.map +1 -0
  215. package/dist/tests/countermodel-min/minimize.test.js +241 -0
  216. package/dist/tests/countermodel-min/minimize.test.js.map +1 -0
  217. package/dist/tests/ctl/check.test.d.ts +2 -0
  218. package/dist/tests/ctl/check.test.d.ts.map +1 -0
  219. package/dist/tests/ctl/check.test.js +337 -0
  220. package/dist/tests/ctl/check.test.js.map +1 -0
  221. package/dist/tests/curry-howard/infer.test.d.ts +2 -0
  222. package/dist/tests/curry-howard/infer.test.d.ts.map +1 -0
  223. package/dist/tests/curry-howard/infer.test.js +93 -0
  224. package/dist/tests/curry-howard/infer.test.js.map +1 -0
  225. package/dist/tests/curry-howard/proof.test.d.ts +2 -0
  226. package/dist/tests/curry-howard/proof.test.d.ts.map +1 -0
  227. package/dist/tests/curry-howard/proof.test.js +105 -0
  228. package/dist/tests/curry-howard/proof.test.js.map +1 -0
  229. package/dist/tests/curry-howard/reduce.test.d.ts +2 -0
  230. package/dist/tests/curry-howard/reduce.test.d.ts.map +1 -0
  231. package/dist/tests/curry-howard/reduce.test.js +109 -0
  232. package/dist/tests/curry-howard/reduce.test.js.map +1 -0
  233. package/dist/tests/default-logic/extensions.test.d.ts +2 -0
  234. package/dist/tests/default-logic/extensions.test.d.ts.map +1 -0
  235. package/dist/tests/default-logic/extensions.test.js +323 -0
  236. package/dist/tests/default-logic/extensions.test.js.map +1 -0
  237. package/dist/tests/description-logic/alc.test.d.ts +2 -0
  238. package/dist/tests/description-logic/alc.test.d.ts.map +1 -0
  239. package/dist/tests/description-logic/alc.test.js +253 -0
  240. package/dist/tests/description-logic/alc.test.js.map +1 -0
  241. package/dist/tests/fol-prover-equality/prove.test.d.ts +2 -0
  242. package/dist/tests/fol-prover-equality/prove.test.d.ts.map +1 -0
  243. package/dist/tests/fol-prover-equality/prove.test.js +179 -0
  244. package/dist/tests/fol-prover-equality/prove.test.js.map +1 -0
  245. package/dist/tests/hybrid-logic/semantics.test.d.ts +2 -0
  246. package/dist/tests/hybrid-logic/semantics.test.d.ts.map +1 -0
  247. package/dist/tests/hybrid-logic/semantics.test.js +169 -0
  248. package/dist/tests/hybrid-logic/semantics.test.js.map +1 -0
  249. package/dist/tests/ltl-sat/sat.test.d.ts +2 -0
  250. package/dist/tests/ltl-sat/sat.test.d.ts.map +1 -0
  251. package/dist/tests/ltl-sat/sat.test.js +160 -0
  252. package/dist/tests/ltl-sat/sat.test.js.map +1 -0
  253. package/dist/tests/mus/extract.test.d.ts +2 -0
  254. package/dist/tests/mus/extract.test.d.ts.map +1 -0
  255. package/dist/tests/mus/extract.test.js +352 -0
  256. package/dist/tests/mus/extract.test.js.map +1 -0
  257. package/dist/tests/sat-v2-incremental/basic.test.d.ts +2 -0
  258. package/dist/tests/sat-v2-incremental/basic.test.d.ts.map +1 -0
  259. package/dist/tests/sat-v2-incremental/basic.test.js +352 -0
  260. package/dist/tests/sat-v2-incremental/basic.test.js.map +1 -0
  261. package/dist/tests/sequent-g3/prover.test.d.ts +2 -0
  262. package/dist/tests/sequent-g3/prover.test.d.ts.map +1 -0
  263. package/dist/tests/sequent-g3/prover.test.js +205 -0
  264. package/dist/tests/sequent-g3/prover.test.js.map +1 -0
  265. 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"}