@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,491 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Description Logic — Tableau de decisión para ALC
4
+ // ============================================================
5
+ // Procedimiento estándar de tableau con blocking (subset blocking)
6
+ // para garantizar terminación con TBox cíclica.
7
+ //
8
+ // Estado de la rama:
9
+ // - individuals: id -> Set<conceptHash> (labels)
10
+ // - roles: roleName -> Array<[from, to]>
11
+ // - blocked: id -> id (ancestro que bloquea, si aplica)
12
+ //
13
+ // Reglas:
14
+ // ⊓: añade ambos children
15
+ // ⊔: bifurca
16
+ // ∃R.C: si no hay R-sucesor con C, crea fresh y, R(x,y), C(y)
17
+ // ∀R.C: para todo R(x,y), añade C(y)
18
+ //
19
+ // Clash: A ∈ labels(x) y ¬A ∈ labels(x); o ⊥ ∈ labels(x).
20
+ //
21
+ // TBox internalization: cada axioma C ⊑ D se convierte en
22
+ // el concepto axiom = ¬C ⊔ D, que se añade a cada individuo
23
+ // (existente y futuro). C ≡ D se desdobla en C ⊑ D y D ⊑ C.
24
+ // ============================================================
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.conceptToString = void 0;
27
+ exports.isSatisfiable = isSatisfiable;
28
+ exports.isSubsumed = isSubsumed;
29
+ exports.isInstance = isInstance;
30
+ exports.classify = classify;
31
+ const types_1 = require("./types");
32
+ const nnf_1 = require("./nnf");
33
+ Object.defineProperty(exports, "conceptToString", { enumerable: true, get: function () { return nnf_1.conceptToString; } });
34
+ const MAX_INDIVIDUALS = 5000;
35
+ // ── Helpers ─────────────────────────────────────────────────
36
+ function makeBranch() {
37
+ return {
38
+ individuals: new Map(),
39
+ roleAssertions: new Map(),
40
+ tboxAxioms: [],
41
+ pendingOr: [],
42
+ processedOr: new Set(),
43
+ freshCounter: 0,
44
+ };
45
+ }
46
+ function cloneBranch(b) {
47
+ const c = {
48
+ individuals: new Map(),
49
+ roleAssertions: new Map(),
50
+ tboxAxioms: [...b.tboxAxioms],
51
+ pendingOr: b.pendingOr.map((p) => ({
52
+ indId: p.indId,
53
+ disjuncts: [...p.disjuncts],
54
+ sourceHash: p.sourceHash,
55
+ })),
56
+ processedOr: new Set(b.processedOr),
57
+ freshCounter: b.freshCounter,
58
+ };
59
+ for (const [k, ind] of b.individuals) {
60
+ c.individuals.set(k, {
61
+ id: ind.id,
62
+ labels: new Map(ind.labels),
63
+ parent: ind.parent,
64
+ });
65
+ }
66
+ for (const [role, pairs] of b.roleAssertions) {
67
+ c.roleAssertions.set(role, pairs.map((p) => [p[0], p[1]]));
68
+ }
69
+ return c;
70
+ }
71
+ function getOrCreateIndividual(branch, id, parent) {
72
+ let ind = branch.individuals.get(id);
73
+ if (!ind) {
74
+ ind = { id, labels: new Map(), parent };
75
+ branch.individuals.set(id, ind);
76
+ }
77
+ return ind;
78
+ }
79
+ function freshIndividual(branch, parent) {
80
+ const id = `_x${branch.freshCounter++}`;
81
+ return getOrCreateIndividual(branch, id, parent);
82
+ }
83
+ function roleSuccessors(branch, role, from) {
84
+ const pairs = branch.roleAssertions.get(role);
85
+ if (!pairs)
86
+ return [];
87
+ const out = [];
88
+ for (const [a, b] of pairs)
89
+ if (a === from)
90
+ out.push(b);
91
+ return out;
92
+ }
93
+ function addRoleAssertion(branch, role, from, to) {
94
+ let pairs = branch.roleAssertions.get(role);
95
+ if (!pairs) {
96
+ pairs = [];
97
+ branch.roleAssertions.set(role, pairs);
98
+ }
99
+ // de-dup
100
+ for (const [a, b] of pairs)
101
+ if (a === from && b === to)
102
+ return;
103
+ pairs.push([from, to]);
104
+ }
105
+ /**
106
+ * Subset blocking: un individuo anónimo x está bloqueado si existe un ancestro y
107
+ * (a través de la cadena parent → parent) tal que labels(x) ⊆ labels(y).
108
+ * Solo bloquea para conceptos generados por ∃ (no aplica a individuos de la ABox).
109
+ */
110
+ function isBlocked(branch, indId) {
111
+ const ind = branch.individuals.get(indId);
112
+ if (!ind || !ind.parent)
113
+ return false;
114
+ // Solo fresh individuals son bloqueables.
115
+ if (!indId.startsWith('_x'))
116
+ return false;
117
+ let ancestorId = ind.parent;
118
+ while (ancestorId) {
119
+ const anc = branch.individuals.get(ancestorId);
120
+ if (!anc)
121
+ break;
122
+ if (subsetOf(ind.labels, anc.labels))
123
+ return true;
124
+ ancestorId = anc.parent || '';
125
+ }
126
+ return false;
127
+ }
128
+ function subsetOf(a, b) {
129
+ for (const k of a.keys())
130
+ if (!b.has(k))
131
+ return false;
132
+ return true;
133
+ }
134
+ // ── Adición de concepto al individuo ────────────────────────
135
+ /**
136
+ * Añade `concept` (NNF) como label de `indId`. Devuelve:
137
+ * - 'clash' si la rama cierra
138
+ * - 'added' si era nuevo
139
+ * - 'dup' si ya estaba
140
+ */
141
+ function addLabel(branch, indId, concept) {
142
+ if (concept.kind === 'bottom')
143
+ return 'clash';
144
+ if (concept.kind === 'top')
145
+ return 'dup';
146
+ const ind = getOrCreateIndividual(branch, indId);
147
+ const h = (0, nnf_1.conceptHash)(concept);
148
+ if (ind.labels.has(h))
149
+ return 'dup';
150
+ // Check clash con negación.
151
+ const negH = (0, nnf_1.conceptHash)((0, nnf_1.toNNF)((0, types_1.not)(concept)));
152
+ if (ind.labels.has(negH))
153
+ return 'clash';
154
+ ind.labels.set(h, concept);
155
+ // Si era ⊓ → enqueuemos children directamente.
156
+ if (concept.kind === 'and') {
157
+ for (const c of concept.args || []) {
158
+ const r = addLabel(branch, indId, c);
159
+ if (r === 'clash')
160
+ return 'clash';
161
+ }
162
+ }
163
+ else if (concept.kind === 'or') {
164
+ const sourceHash = `${indId}::${h}`;
165
+ if (!branch.processedOr.has(sourceHash)) {
166
+ branch.pendingOr.push({
167
+ indId,
168
+ disjuncts: concept.args || [],
169
+ sourceHash,
170
+ });
171
+ }
172
+ }
173
+ return 'added';
174
+ }
175
+ // ── Aplicación de TBox al individuo ─────────────────────────
176
+ function applyTBoxTo(branch, indId) {
177
+ for (const ax of branch.tboxAxioms) {
178
+ const r = addLabel(branch, indId, ax);
179
+ if (r === 'clash')
180
+ return 'clash';
181
+ }
182
+ return 'ok';
183
+ }
184
+ // ── Reglas ∃ / ∀ ────────────────────────────────────────────
185
+ /**
186
+ * Aplica una pasada de reglas determinísticas: ∀, ∃.
187
+ * Devuelve true si se hizo algún cambio.
188
+ */
189
+ function applyDeterministicRules(branch) {
190
+ let changed = false;
191
+ // ── ∀R.C: para cada individuo no bloqueado con ∀R.C y cada R(x,y), añade C(y)
192
+ // Iteramos sobre un snapshot porque podemos crear nuevos sucesores.
193
+ const indSnapshot = Array.from(branch.individuals.values());
194
+ for (const ind of indSnapshot) {
195
+ if (isBlocked(branch, ind.id))
196
+ continue;
197
+ for (const [, c] of ind.labels) {
198
+ if (c.kind !== 'forall')
199
+ continue;
200
+ if (!c.role || !c.arg)
201
+ continue;
202
+ const role = c.role;
203
+ const inner = c.arg;
204
+ for (const succ of roleSuccessors(branch, role, ind.id)) {
205
+ const succInd = branch.individuals.get(succ);
206
+ if (!succInd)
207
+ continue;
208
+ if (succInd.labels.has((0, nnf_1.conceptHash)(inner)))
209
+ continue;
210
+ const r = addLabel(branch, succ, inner);
211
+ if (r === 'clash')
212
+ return 'clash';
213
+ if (r === 'added')
214
+ changed = true;
215
+ }
216
+ }
217
+ }
218
+ // ── ∃R.C: para cada individuo no bloqueado con ∃R.C que no tenga
219
+ // un R-sucesor con C, crear uno fresh.
220
+ // (Se aplica DESPUÉS de ∀ porque generar sucesor podría requerir refrescar.)
221
+ const indSnapshot2 = Array.from(branch.individuals.values());
222
+ for (const ind of indSnapshot2) {
223
+ if (isBlocked(branch, ind.id))
224
+ continue;
225
+ for (const [, c] of ind.labels) {
226
+ if (c.kind !== 'exists')
227
+ continue;
228
+ if (!c.role || !c.arg)
229
+ continue;
230
+ const role = c.role;
231
+ const inner = c.arg;
232
+ const innerH = (0, nnf_1.conceptHash)(inner);
233
+ const succs = roleSuccessors(branch, role, ind.id);
234
+ const satisfied = succs.some((s) => {
235
+ const si = branch.individuals.get(s);
236
+ return si ? si.labels.has(innerH) : false;
237
+ });
238
+ if (satisfied)
239
+ continue;
240
+ if (branch.individuals.size >= MAX_INDIVIDUALS) {
241
+ // Tableau agotado — para ALC con blocking no debería pasar, pero
242
+ // por defensa devolvemos stable para no diverger.
243
+ return 'stable';
244
+ }
245
+ const fresh = freshIndividual(branch, ind.id);
246
+ addRoleAssertion(branch, role, ind.id, fresh.id);
247
+ // Aplicar TBox al recién nacido.
248
+ const t = applyTBoxTo(branch, fresh.id);
249
+ if (t === 'clash')
250
+ return 'clash';
251
+ const r1 = addLabel(branch, fresh.id, inner);
252
+ if (r1 === 'clash')
253
+ return 'clash';
254
+ // Propagar ∀ del padre al recién nacido.
255
+ for (const [, vc] of ind.labels) {
256
+ if (vc.kind === 'forall' && vc.role === role && vc.arg) {
257
+ const r2 = addLabel(branch, fresh.id, vc.arg);
258
+ if (r2 === 'clash')
259
+ return 'clash';
260
+ }
261
+ }
262
+ changed = true;
263
+ }
264
+ }
265
+ return changed ? 'changed' : 'stable';
266
+ }
267
+ // ── Expansión principal ─────────────────────────────────────
268
+ function saturate(branch, depth) {
269
+ if (depth > 1000)
270
+ return true; // se considera abierta por defensa.
271
+ // 1) Aplicar reglas determinísticas hasta estabilizar.
272
+ for (;;) {
273
+ const r = applyDeterministicRules(branch);
274
+ if (r === 'clash')
275
+ return false;
276
+ if (r === 'stable')
277
+ break;
278
+ }
279
+ // 2) Procesar próximo ⊔ pendiente.
280
+ // Saltamos disyunciones cuyo individuo ya tiene un disyunto satisfecho.
281
+ while (branch.pendingOr.length > 0) {
282
+ const next = branch.pendingOr.shift();
283
+ if (!next)
284
+ break;
285
+ if (branch.processedOr.has(next.sourceHash))
286
+ continue;
287
+ const ind = branch.individuals.get(next.indId);
288
+ if (!ind) {
289
+ branch.processedOr.add(next.sourceHash);
290
+ continue;
291
+ }
292
+ // Si alguno de los disyuntos ya está en labels, no hace falta bifurcar.
293
+ const alreadySatisfied = next.disjuncts.some((d) => ind.labels.has((0, nnf_1.conceptHash)(d)));
294
+ if (alreadySatisfied) {
295
+ branch.processedOr.add(next.sourceHash);
296
+ continue;
297
+ }
298
+ branch.processedOr.add(next.sourceHash);
299
+ // Bifurcar: probar cada disyunto.
300
+ for (const d of next.disjuncts) {
301
+ const child = cloneBranch(branch);
302
+ const r = addLabel(child, next.indId, d);
303
+ if (r === 'clash')
304
+ continue;
305
+ if (saturate(child, depth + 1))
306
+ return true;
307
+ }
308
+ return false;
309
+ }
310
+ // 3) Sin más pendings ni cambios: rama abierta y saturada.
311
+ return true;
312
+ }
313
+ // ── Carga de KB ─────────────────────────────────────────────
314
+ function internalizeTBox(branch, tbox) {
315
+ for (const ax of tbox) {
316
+ if (ax.kind === 'subsumes') {
317
+ // C ⊑ D ≡ ⊤ ⊑ ¬C ⊔ D
318
+ const left = ax.left;
319
+ const right = ax.right;
320
+ branch.tboxAxioms.push((0, nnf_1.toNNF)((0, types_1.or)((0, types_1.not)(left), right)));
321
+ }
322
+ else if (ax.kind === 'equivalent') {
323
+ const left = ax.left;
324
+ const right = ax.right;
325
+ branch.tboxAxioms.push((0, nnf_1.toNNF)((0, types_1.or)((0, types_1.not)(left), right)));
326
+ branch.tboxAxioms.push((0, nnf_1.toNNF)((0, types_1.or)((0, types_1.not)(right), left)));
327
+ }
328
+ // instance / role-instance no son TBox — se ignoran aquí.
329
+ }
330
+ }
331
+ function loadABox(branch, abox) {
332
+ // Primero crear todos los individuos referenciados.
333
+ const seen = new Set();
334
+ const ensure = (id) => {
335
+ if (seen.has(id))
336
+ return;
337
+ seen.add(id);
338
+ getOrCreateIndividual(branch, id);
339
+ };
340
+ for (const ax of abox) {
341
+ if (ax.kind === 'instance')
342
+ ensure(ax.left);
343
+ if (ax.kind === 'role-instance') {
344
+ ensure(ax.left);
345
+ ensure(ax.right);
346
+ }
347
+ }
348
+ // Aplicar TBox a todos los individuos existentes.
349
+ for (const id of seen) {
350
+ if (applyTBoxTo(branch, id) === 'clash')
351
+ return 'clash';
352
+ }
353
+ // Cargar asertions.
354
+ for (const ax of abox) {
355
+ if (ax.kind === 'instance') {
356
+ const c = (0, nnf_1.toNNF)(ax.right);
357
+ if (addLabel(branch, ax.left, c) === 'clash')
358
+ return 'clash';
359
+ }
360
+ else if (ax.kind === 'role-instance') {
361
+ if (!ax.role)
362
+ continue;
363
+ addRoleAssertion(branch, ax.role, ax.left, ax.right);
364
+ }
365
+ }
366
+ return 'ok';
367
+ }
368
+ // ── API pública ─────────────────────────────────────────────
369
+ /**
370
+ * Decide si `concept` es satisfacible (eventualmente bajo la KB).
371
+ * Construye un tableau iniciando con un individuo fresco x : concept,
372
+ * y aplica las reglas hasta cerrar todas las ramas o encontrar una abierta.
373
+ */
374
+ function isSatisfiable(concept, kb) {
375
+ const branch = makeBranch();
376
+ if (kb)
377
+ internalizeTBox(branch, kb.tbox);
378
+ // Si hay KB no-vacía, cargamos su ABox primero (puede ya cerrar).
379
+ if (kb && kb.abox.length > 0) {
380
+ if (loadABox(branch, kb.abox) === 'clash')
381
+ return false;
382
+ }
383
+ // Individuo testigo para `concept`.
384
+ const witness = '_root';
385
+ getOrCreateIndividual(branch, witness);
386
+ if (applyTBoxTo(branch, witness) === 'clash')
387
+ return false;
388
+ if (addLabel(branch, witness, (0, nnf_1.toNNF)(concept)) === 'clash')
389
+ return false;
390
+ return saturate(branch, 0);
391
+ }
392
+ /**
393
+ * Decide si `sub ⊑ sup` (bajo la KB). Equivale a: ¬(sub ⊓ ¬sup) es válida,
394
+ * o sea, `sub ⊓ ¬sup` es insatisfacible.
395
+ */
396
+ function isSubsumed(sub, sup, kb) {
397
+ const probe = (0, types_1.and)(sub, (0, types_1.not)(sup));
398
+ return !isSatisfiable(probe, kb);
399
+ }
400
+ /**
401
+ * Decide si `individual` es instancia de `concept` bajo la KB.
402
+ * Equivale a: KB ∪ {individual : ¬concept} es inconsistente.
403
+ */
404
+ function isInstance(individual, concept, kb) {
405
+ // Construimos una KB extendida con el axioma de instancia negada.
406
+ const extended = {
407
+ tbox: kb.tbox,
408
+ abox: [...kb.abox, { kind: 'instance', left: individual, right: (0, types_1.not)(concept) }],
409
+ };
410
+ // El test es: ¿es la KB consistente? Si NO lo es, individuo es instancia.
411
+ const branch = makeBranch();
412
+ internalizeTBox(branch, extended.tbox);
413
+ if (loadABox(branch, extended.abox) === 'clash')
414
+ return true;
415
+ // Aún si la ABox carga sin clash inmediato, hay que saturar.
416
+ // Iniciamos saturación sin "concepto probe": el branch ya contiene
417
+ // todas las afirmaciones de la KB extendida.
418
+ // Si saturate devuelve true (abierta) → consistente → NO es instancia.
419
+ // Si saturate devuelve false (cerrada) → inconsistente → SÍ es instancia.
420
+ return !saturate(branch, 0);
421
+ }
422
+ /**
423
+ * Clasificación: produce taxonomía de conceptos atómicos de la KB.
424
+ * Devuelve Map<conceptName, Set<conceptName>> donde `Set` contiene
425
+ * los conceptos atómicos que subsumen al name (es decir: superconceptos).
426
+ * ⊤ y ⊥ se incluyen siempre.
427
+ */
428
+ function classify(kb) {
429
+ const names = collectAtomicNames(kb);
430
+ names.add('⊤');
431
+ names.add('⊥');
432
+ const result = new Map();
433
+ for (const n of names)
434
+ result.set(n, new Set());
435
+ const conceptOf = (n) => {
436
+ if (n === '⊤')
437
+ return types_1.TOP;
438
+ if (n === '⊥')
439
+ return types_1.BOTTOM;
440
+ return (0, types_1.atomic)(n);
441
+ };
442
+ for (const sub of names) {
443
+ const subSet = result.get(sub);
444
+ if (!subSet)
445
+ continue;
446
+ const subC = conceptOf(sub);
447
+ // ¿es satisfacible sub bajo KB? Si no, sub ≡ ⊥ → subsumido por todo.
448
+ const subSat = isSatisfiable(subC, kb);
449
+ if (!subSat) {
450
+ // sub es ⊥ bajo la KB: subsumido por todos.
451
+ for (const sup of names)
452
+ subSet.add(sup);
453
+ continue;
454
+ }
455
+ for (const sup of names) {
456
+ if (sub === sup) {
457
+ subSet.add(sup);
458
+ continue;
459
+ }
460
+ const supC = conceptOf(sup);
461
+ if (isSubsumed(subC, supC, kb)) {
462
+ subSet.add(sup);
463
+ }
464
+ }
465
+ }
466
+ return result;
467
+ }
468
+ function collectAtomicNames(kb) {
469
+ const out = new Set();
470
+ const walk = (c) => {
471
+ if (c.kind === 'atomic' && c.name)
472
+ out.add(c.name);
473
+ if (c.arg)
474
+ walk(c.arg);
475
+ if (c.args)
476
+ for (const a of c.args)
477
+ walk(a);
478
+ };
479
+ for (const ax of kb.tbox) {
480
+ if (typeof ax.left !== 'string')
481
+ walk(ax.left);
482
+ if (typeof ax.right !== 'string')
483
+ walk(ax.right);
484
+ }
485
+ for (const ax of kb.abox) {
486
+ if (typeof ax.right !== 'string')
487
+ walk(ax.right);
488
+ }
489
+ return out;
490
+ }
491
+ //# sourceMappingURL=tableau.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableau.js","sourceRoot":"","sources":["../../../src/profiles/description-logic/tableau.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type DLConceptKind = 'top' | 'bottom' | 'atomic' | 'not' | 'and' | 'or' | 'exists' | 'forall';
2
+ export interface DLConcept {
3
+ kind: DLConceptKind;
4
+ /** Atomic concept name (kind = 'atomic'). */
5
+ name?: string;
6
+ /** Single sub-concept (kind = 'not' / 'exists' / 'forall'). */
7
+ arg?: DLConcept;
8
+ /** n-ary children (kind = 'and' / 'or'). */
9
+ args?: DLConcept[];
10
+ /** Role name (kind = 'exists' / 'forall'). */
11
+ role?: string;
12
+ }
13
+ export type DLAxiomKind = 'subsumes' | 'equivalent' | 'instance' | 'role-instance';
14
+ export interface DLAxiom {
15
+ kind: DLAxiomKind;
16
+ /**
17
+ * - subsumes / equivalent: ambos lados son DLConcept (C ⊑ D, C ≡ D).
18
+ * - instance: left = individuo (string), right = DLConcept.
19
+ * - role-instance: left = individuo, right = individuo, role = nombre del rol.
20
+ */
21
+ left: DLConcept | string;
22
+ right: DLConcept | string;
23
+ /** Solo para role-instance. */
24
+ role?: string;
25
+ }
26
+ export interface DLKnowledgeBase {
27
+ /** Schema-level: subsumption / equivalence. */
28
+ tbox: DLAxiom[];
29
+ /** Instance assertions: instance + role-instance. */
30
+ abox: DLAxiom[];
31
+ }
32
+ export declare const TOP: DLConcept;
33
+ export declare const BOTTOM: DLConcept;
34
+ export declare function atomic(name: string): DLConcept;
35
+ export declare function not(c: DLConcept): DLConcept;
36
+ export declare function and(...args: DLConcept[]): DLConcept;
37
+ export declare function or(...args: DLConcept[]): DLConcept;
38
+ export declare function exists(role: string, c: DLConcept): DLConcept;
39
+ export declare function forall(role: string, c: DLConcept): DLConcept;
40
+ export declare function subsumes(left: DLConcept, right: DLConcept): DLAxiom;
41
+ export declare function equivalent(left: DLConcept, right: DLConcept): DLAxiom;
42
+ export declare function instance(individual: string, concept: DLConcept): DLAxiom;
43
+ export declare function roleInstance(from: string, role: string, to: string): DLAxiom;
44
+ export declare function emptyKB(): DLKnowledgeBase;
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/profiles/description-logic/types.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,KAAK,GACL,IAAI,GACJ,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,eAAe,CAAC;AAEnF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB;;;;OAIG;IACH,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,qDAAqD;IACrD,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAID,eAAO,MAAM,GAAG,EAAE,SAA2B,CAAC;AAC9C,eAAO,MAAM,MAAM,EAAE,SAA8B,CAAC;AAEpD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE9C;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAE3C;AAED,wBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,CAInD;AAED,wBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,CAIlD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAE5D;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAE5D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAEnE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAErE;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAExE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED,wBAAgB,OAAO,IAAI,eAAe,CAEzC"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Description Logic — ALC types
4
+ // ============================================================
5
+ // ALC: el fragmento base de OWL/DL.
6
+ // Conceptos C, roles R (binarios), individuos a.
7
+ // ⊤ ⊥ top / bottom
8
+ // ¬C complemento
9
+ // C ⊓ D intersección
10
+ // C ⊔ D unión
11
+ // ∃R.C restricción existencial
12
+ // ∀R.C restricción de valor
13
+ // ============================================================
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BOTTOM = exports.TOP = void 0;
16
+ exports.atomic = atomic;
17
+ exports.not = not;
18
+ exports.and = and;
19
+ exports.or = or;
20
+ exports.exists = exists;
21
+ exports.forall = forall;
22
+ exports.subsumes = subsumes;
23
+ exports.equivalent = equivalent;
24
+ exports.instance = instance;
25
+ exports.roleInstance = roleInstance;
26
+ exports.emptyKB = emptyKB;
27
+ // ── Constructores de conveniencia ──────────────────────────
28
+ exports.TOP = { kind: 'top' };
29
+ exports.BOTTOM = { kind: 'bottom' };
30
+ function atomic(name) {
31
+ return { kind: 'atomic', name };
32
+ }
33
+ function not(c) {
34
+ return { kind: 'not', arg: c };
35
+ }
36
+ function and(...args) {
37
+ if (args.length === 0)
38
+ return exports.TOP;
39
+ if (args.length === 1)
40
+ return args[0];
41
+ return { kind: 'and', args };
42
+ }
43
+ function or(...args) {
44
+ if (args.length === 0)
45
+ return exports.BOTTOM;
46
+ if (args.length === 1)
47
+ return args[0];
48
+ return { kind: 'or', args };
49
+ }
50
+ function exists(role, c) {
51
+ return { kind: 'exists', role, arg: c };
52
+ }
53
+ function forall(role, c) {
54
+ return { kind: 'forall', role, arg: c };
55
+ }
56
+ function subsumes(left, right) {
57
+ return { kind: 'subsumes', left, right };
58
+ }
59
+ function equivalent(left, right) {
60
+ return { kind: 'equivalent', left, right };
61
+ }
62
+ function instance(individual, concept) {
63
+ return { kind: 'instance', left: individual, right: concept };
64
+ }
65
+ function roleInstance(from, role, to) {
66
+ return { kind: 'role-instance', left: from, right: to, role };
67
+ }
68
+ function emptyKB() {
69
+ return { tbox: [], abox: [] };
70
+ }
71
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/description-logic/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAC/D,oCAAoC;AACpC,iDAAiD;AACjD,uBAAuB;AACvB,sBAAsB;AACtB,uBAAuB;AACvB,gBAAgB;AAChB,kCAAkC;AAClC,+BAA+B;AAC/B,+DAA+D;;;AAmD/D,wBAEC;AAED,kBAEC;AAED,kBAIC;AAED,gBAIC;AAED,wBAEC;AAED,wBAEC;AAED,4BAEC;AAED,gCAEC;AAED,4BAEC;AAED,oCAEC;AAED,0BAEC;AAnDD,8DAA8D;AAEjD,QAAA,GAAG,GAAc,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACjC,QAAA,MAAM,GAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEpD,SAAgB,MAAM,CAAC,IAAY;IACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAgB,GAAG,CAAC,CAAY;IAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,SAAgB,GAAG,CAAC,GAAG,IAAiB;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAG,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAgB,EAAE,CAAC,GAAG,IAAiB;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAM,CAAC;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY,EAAE,CAAY;IAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY,EAAE,CAAY;IAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAe,EAAE,KAAgB;IACxD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,UAAU,CAAC,IAAe,EAAE,KAAgB;IAC1D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,SAAgB,QAAQ,CAAC,UAAkB,EAAE,OAAkB;IAC7D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAChE,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU;IACjE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { HybridFormula, HybridFormulaKind, HybridFrame } from './types';
2
+ export { atom, nominal, not, and, or, implies, box, diamond, at, down, existsWorld, formulaToString, } from './types';
3
+ export { satisfies, isSatisfiableInFrame } from './semantics';
4
+ export { isSatisfiable } from './sat';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/profiles/hybrid-logic/index.ts"],"names":[],"mappings":"AAaA,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EACL,IAAI,EACJ,OAAO,EACP,GAAG,EACH,GAAG,EACH,EAAE,EACF,OAAO,EACP,GAAG,EACH,OAAO,EACP,EAAE,EACF,IAAI,EACJ,WAAW,EACX,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC"}