@stevenvo780/st-lang 4.0.0 → 4.1.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 (133) hide show
  1. package/dist/proof-exchange/index.d.ts +4 -6
  2. package/dist/proof-exchange/index.d.ts.map +1 -1
  3. package/dist/proof-exchange/index.js +9 -5
  4. package/dist/proof-exchange/index.js.map +1 -1
  5. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts +2 -0
  6. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts.map +1 -0
  7. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js +255 -0
  8. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js.map +1 -0
  9. package/dist/tests/coverage-95/argumentation.test.d.ts +2 -0
  10. package/dist/tests/coverage-95/argumentation.test.d.ts.map +1 -0
  11. package/dist/tests/coverage-95/argumentation.test.js +105 -0
  12. package/dist/tests/coverage-95/argumentation.test.js.map +1 -0
  13. package/dist/tests/coverage-95/arithmetic.test.d.ts +2 -0
  14. package/dist/tests/coverage-95/arithmetic.test.d.ts.map +1 -0
  15. package/dist/tests/coverage-95/arithmetic.test.js +139 -0
  16. package/dist/tests/coverage-95/arithmetic.test.js.map +1 -0
  17. package/dist/tests/coverage-95/belnap.test.d.ts +2 -0
  18. package/dist/tests/coverage-95/belnap.test.d.ts.map +1 -0
  19. package/dist/tests/coverage-95/belnap.test.js +145 -0
  20. package/dist/tests/coverage-95/belnap.test.js.map +1 -0
  21. package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts +2 -0
  22. package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts.map +1 -0
  23. package/dist/tests/coverage-95/cdcl-v2-solver.test.js +61 -0
  24. package/dist/tests/coverage-95/cdcl-v2-solver.test.js.map +1 -0
  25. package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts +2 -0
  26. package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts.map +1 -0
  27. package/dist/tests/coverage-95/classical-propositional-direct.test.js +175 -0
  28. package/dist/tests/coverage-95/classical-propositional-direct.test.js.map +1 -0
  29. package/dist/tests/coverage-95/compat.test.d.ts +2 -0
  30. package/dist/tests/coverage-95/compat.test.d.ts.map +1 -0
  31. package/dist/tests/coverage-95/compat.test.js +82 -0
  32. package/dist/tests/coverage-95/compat.test.js.map +1 -0
  33. package/dist/tests/coverage-95/examples-runner.test.d.ts +2 -0
  34. package/dist/tests/coverage-95/examples-runner.test.d.ts.map +1 -0
  35. package/dist/tests/coverage-95/examples-runner.test.js +34 -0
  36. package/dist/tests/coverage-95/examples-runner.test.js.map +1 -0
  37. package/dist/tests/coverage-95/first-order.test.d.ts +2 -0
  38. package/dist/tests/coverage-95/first-order.test.d.ts.map +1 -0
  39. package/dist/tests/coverage-95/first-order.test.js +138 -0
  40. package/dist/tests/coverage-95/first-order.test.js.map +1 -0
  41. package/dist/tests/coverage-95/fol-prover.test.d.ts +2 -0
  42. package/dist/tests/coverage-95/fol-prover.test.d.ts.map +1 -0
  43. package/dist/tests/coverage-95/fol-prover.test.js +228 -0
  44. package/dist/tests/coverage-95/fol-prover.test.js.map +1 -0
  45. package/dist/tests/coverage-95/interpreter-commands.test.d.ts +2 -0
  46. package/dist/tests/coverage-95/interpreter-commands.test.d.ts.map +1 -0
  47. package/dist/tests/coverage-95/interpreter-commands.test.js +332 -0
  48. package/dist/tests/coverage-95/interpreter-commands.test.js.map +1 -0
  49. package/dist/tests/coverage-95/lsp-server.test.d.ts +2 -0
  50. package/dist/tests/coverage-95/lsp-server.test.d.ts.map +1 -0
  51. package/dist/tests/coverage-95/lsp-server.test.js +181 -0
  52. package/dist/tests/coverage-95/lsp-server.test.js.map +1 -0
  53. package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts +2 -0
  54. package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts.map +1 -0
  55. package/dist/tests/coverage-95/modal-tableau-profiles.test.js +157 -0
  56. package/dist/tests/coverage-95/modal-tableau-profiles.test.js.map +1 -0
  57. package/dist/tests/coverage-95/parallel-sat.test.d.ts +2 -0
  58. package/dist/tests/coverage-95/parallel-sat.test.d.ts.map +1 -0
  59. package/dist/tests/coverage-95/parallel-sat.test.js +42 -0
  60. package/dist/tests/coverage-95/parallel-sat.test.js.map +1 -0
  61. package/dist/tests/coverage-95/parser-extra.test.d.ts +2 -0
  62. package/dist/tests/coverage-95/parser-extra.test.d.ts.map +1 -0
  63. package/dist/tests/coverage-95/parser-extra.test.js +210 -0
  64. package/dist/tests/coverage-95/parser-extra.test.js.map +1 -0
  65. package/dist/tests/coverage-95/propositional-utilities.test.d.ts +2 -0
  66. package/dist/tests/coverage-95/propositional-utilities.test.d.ts.map +1 -0
  67. package/dist/tests/coverage-95/propositional-utilities.test.js +281 -0
  68. package/dist/tests/coverage-95/propositional-utilities.test.js.map +1 -0
  69. package/dist/tests/coverage-95/protocol-handler.test.d.ts +2 -0
  70. package/dist/tests/coverage-95/protocol-handler.test.d.ts.map +1 -0
  71. package/dist/tests/coverage-95/protocol-handler.test.js +275 -0
  72. package/dist/tests/coverage-95/protocol-handler.test.js.map +1 -0
  73. package/dist/tests/coverage-95/smt-mock-backend.test.d.ts +2 -0
  74. package/dist/tests/coverage-95/smt-mock-backend.test.d.ts.map +1 -0
  75. package/dist/tests/coverage-95/smt-mock-backend.test.js +201 -0
  76. package/dist/tests/coverage-95/smt-mock-backend.test.js.map +1 -0
  77. package/dist/tests/coverage-95/smt-serializer.test.d.ts +2 -0
  78. package/dist/tests/coverage-95/smt-serializer.test.d.ts.map +1 -0
  79. package/dist/tests/coverage-95/smt-serializer.test.js +143 -0
  80. package/dist/tests/coverage-95/smt-serializer.test.js.map +1 -0
  81. package/dist/tests/coverage-95/smt-subprocess.test.d.ts +2 -0
  82. package/dist/tests/coverage-95/smt-subprocess.test.d.ts.map +1 -0
  83. package/dist/tests/coverage-95/smt-subprocess.test.js +96 -0
  84. package/dist/tests/coverage-95/smt-subprocess.test.js.map +1 -0
  85. package/dist/tests/coverage-95/tableau-engine.test.d.ts +2 -0
  86. package/dist/tests/coverage-95/tableau-engine.test.d.ts.map +1 -0
  87. package/dist/tests/coverage-95/tableau-engine.test.js +125 -0
  88. package/dist/tests/coverage-95/tableau-engine.test.js.map +1 -0
  89. package/dist/tests/coverage-95/temporal-ltl.test.d.ts +2 -0
  90. package/dist/tests/coverage-95/temporal-ltl.test.d.ts.map +1 -0
  91. package/dist/tests/coverage-95/temporal-ltl.test.js +94 -0
  92. package/dist/tests/coverage-95/temporal-ltl.test.js.map +1 -0
  93. package/dist/tests/coverage-95/typecheck-checker.test.d.ts +2 -0
  94. package/dist/tests/coverage-95/typecheck-checker.test.d.ts.map +1 -0
  95. package/dist/tests/coverage-95/typecheck-checker.test.js +191 -0
  96. package/dist/tests/coverage-95/typecheck-checker.test.js.map +1 -0
  97. package/dist/tests/coverage-95/undecidability-detector.test.d.ts +2 -0
  98. package/dist/tests/coverage-95/undecidability-detector.test.d.ts.map +1 -0
  99. package/dist/tests/coverage-95/undecidability-detector.test.js +149 -0
  100. package/dist/tests/coverage-95/undecidability-detector.test.js.map +1 -0
  101. package/dist/tests/coverage-95/visitor.test.d.ts +2 -0
  102. package/dist/tests/coverage-95/visitor.test.d.ts.map +1 -0
  103. package/dist/tests/coverage-95/visitor.test.js +140 -0
  104. package/dist/tests/coverage-95/visitor.test.js.map +1 -0
  105. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts +2 -0
  106. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts.map +1 -0
  107. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js +200 -0
  108. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js.map +1 -0
  109. package/dist/text-layer/v2/index.d.ts +2 -0
  110. package/dist/text-layer/v2/index.d.ts.map +1 -1
  111. package/dist/text-layer/v2/index.js +7 -1
  112. package/dist/text-layer/v2/index.js.map +1 -1
  113. package/dist/text-layer/v2/mdx-bridge/diff.d.ts +13 -0
  114. package/dist/text-layer/v2/mdx-bridge/diff.d.ts.map +1 -0
  115. package/dist/text-layer/v2/mdx-bridge/diff.js +69 -0
  116. package/dist/text-layer/v2/mdx-bridge/diff.js.map +1 -0
  117. package/dist/text-layer/v2/mdx-bridge/index.d.ts +14 -0
  118. package/dist/text-layer/v2/mdx-bridge/index.d.ts.map +1 -0
  119. package/dist/text-layer/v2/mdx-bridge/index.js +21 -0
  120. package/dist/text-layer/v2/mdx-bridge/index.js.map +1 -0
  121. package/dist/text-layer/v2/mdx-bridge/parser.d.ts +33 -0
  122. package/dist/text-layer/v2/mdx-bridge/parser.d.ts.map +1 -0
  123. package/dist/text-layer/v2/mdx-bridge/parser.js +192 -0
  124. package/dist/text-layer/v2/mdx-bridge/parser.js.map +1 -0
  125. package/dist/text-layer/v2/mdx-bridge/serializer.d.ts +17 -0
  126. package/dist/text-layer/v2/mdx-bridge/serializer.d.ts.map +1 -0
  127. package/dist/text-layer/v2/mdx-bridge/serializer.js +69 -0
  128. package/dist/text-layer/v2/mdx-bridge/serializer.js.map +1 -0
  129. package/dist/text-layer/v2/mdx-bridge/types.d.ts +53 -0
  130. package/dist/text-layer/v2/mdx-bridge/types.d.ts.map +1 -0
  131. package/dist/text-layer/v2/mdx-bridge/types.js +19 -0
  132. package/dist/text-layer/v2/mdx-bridge/types.js.map +1 -0
  133. package/package.json +1 -1
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const tableau_engine_1 = require("../../profiles/shared/tableau-engine");
5
+ const atom = (name) => ({ kind: 'atom', name });
6
+ const not = (a) => ({ kind: 'not', args: [a] });
7
+ const and = (a, b) => ({ kind: 'and', args: [a, b] });
8
+ const or = (a, b) => ({ kind: 'or', args: [a, b] });
9
+ const implies = (a, b) => ({ kind: 'implies', args: [a, b] });
10
+ const bic = (a, b) => ({ kind: 'biconditional', args: [a, b] });
11
+ const box = (a) => ({ kind: 'modal_necessity', args: [a] });
12
+ const dia = (a) => ({ kind: 'modal_possibility', args: [a] });
13
+ const forall = (v, body) => ({
14
+ kind: 'forall',
15
+ variable: v,
16
+ args: [body],
17
+ });
18
+ const exists = (v, body) => ({
19
+ kind: 'exists',
20
+ variable: v,
21
+ args: [body],
22
+ });
23
+ (0, vitest_1.describe)('tableau-engine — formulaEqual', () => {
24
+ (0, vitest_1.it)('atoms with same name are equal', () => {
25
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(atom('P'), atom('P'))).toBe(true);
26
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(atom('P'), atom('Q'))).toBe(false);
27
+ });
28
+ (0, vitest_1.it)('compound: same structure equal', () => {
29
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(and(atom('P'), atom('Q')), and(atom('P'), atom('Q')))).toBe(true);
30
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(and(atom('P'), atom('Q')), or(atom('P'), atom('Q')))).toBe(false);
31
+ });
32
+ (0, vitest_1.it)('alpha-equivalence ∀x.P(x) ≡ ∀y.P(y) (with rename)', () => {
33
+ const f1 = forall('x', { kind: 'predicate', name: 'P', params: ['x'] });
34
+ const f2 = forall('y', { kind: 'predicate', name: 'P', params: ['y'] });
35
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(f1, f2)).toBe(true);
36
+ });
37
+ (0, vitest_1.it)('alpha-inequivalence ∀x.P(x) ≠ ∀x.Q(x)', () => {
38
+ const f1 = forall('x', { kind: 'predicate', name: 'P', params: ['x'] });
39
+ const f2 = forall('x', { kind: 'predicate', name: 'Q', params: ['x'] });
40
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaEqual)(f1, f2)).toBe(false);
41
+ });
42
+ });
43
+ (0, vitest_1.describe)('tableau-engine — formulaHash', () => {
44
+ (0, vitest_1.it)('atom hash is name', () => {
45
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(atom('P'))).toBe('P');
46
+ });
47
+ (0, vitest_1.it)('hash respects structure', () => {
48
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(and(atom('P'), atom('Q')))).toMatch(/&/);
49
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(or(atom('P'), atom('Q')))).toMatch(/\|/);
50
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(implies(atom('P'), atom('Q')))).toMatch(/->/);
51
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(bic(atom('P'), atom('Q')))).toMatch(/<->/);
52
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(not(atom('P')))).toMatch(/!/);
53
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(box(atom('P')))).toMatch(/\[\]/);
54
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(dia(atom('P')))).toMatch(/<>/);
55
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(forall('x', atom('P')))).toMatch(/^Ax/);
56
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(exists('x', atom('P')))).toMatch(/^Ex/);
57
+ });
58
+ (0, vitest_1.it)('hash for predicate includes params', () => {
59
+ const pred = { kind: 'predicate', name: 'R', args: [atom('a'), atom('b')] };
60
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)(pred)).toContain('R(');
61
+ });
62
+ (0, vitest_1.it)('hash for temporal operators', () => {
63
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)({ kind: 'temporal_next', args: [atom('P')] })).toMatch(/X/);
64
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)({ kind: 'temporal_until', args: [atom('P'), atom('Q')] })).toMatch(/U/);
65
+ });
66
+ (0, vitest_1.it)('hash for equals', () => {
67
+ (0, vitest_1.expect)((0, tableau_engine_1.formulaHash)({ kind: 'equals', args: [atom('a'), atom('b')] })).toMatch(/=/);
68
+ });
69
+ });
70
+ (0, vitest_1.describe)('tableau-engine — eliminateConnectives and fullNNF', () => {
71
+ (0, vitest_1.it)('eliminateConnectives unwraps implies/bicond into and/or/not', () => {
72
+ const f = implies(atom('P'), atom('Q'));
73
+ const r = (0, tableau_engine_1.eliminateConnectives)(f);
74
+ (0, vitest_1.expect)(r.kind).not.toBe('implies');
75
+ });
76
+ (0, vitest_1.it)('fullNNF pushes negation inward', () => {
77
+ const f = not(and(atom('P'), atom('Q')));
78
+ const r = (0, tableau_engine_1.fullNNF)(f);
79
+ (0, vitest_1.expect)(r.kind).toBe('or');
80
+ });
81
+ (0, vitest_1.it)('fullNNF preserves atoms', () => {
82
+ (0, vitest_1.expect)((0, tableau_engine_1.fullNNF)(atom('P'))).toEqual(atom('P'));
83
+ });
84
+ });
85
+ (0, vitest_1.describe)('tableau-engine — isValid / isSatisfiable', () => {
86
+ (0, vitest_1.it)('K: tautology P -> P is valid', () => {
87
+ (0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(atom('P'), atom('P')), tableau_engine_1.FRAME_K)).toBe(true);
88
+ });
89
+ (0, vitest_1.it)('K: P alone is satisfiable but not valid', () => {
90
+ (0, vitest_1.expect)((0, tableau_engine_1.isSatisfiable)(atom('P'), tableau_engine_1.FRAME_K)).toBe(true);
91
+ (0, vitest_1.expect)((0, tableau_engine_1.isValid)(atom('P'), tableau_engine_1.FRAME_K)).toBe(false);
92
+ });
93
+ (0, vitest_1.it)('K: contradiction P & !P is unsatisfiable', () => {
94
+ (0, vitest_1.expect)((0, tableau_engine_1.isSatisfiable)(and(atom('P'), not(atom('P'))), tableau_engine_1.FRAME_K)).toBe(false);
95
+ });
96
+ (0, vitest_1.it)('KD seriality: []P -> <>P', () => {
97
+ const f = implies(box(atom('P')), dia(atom('P')));
98
+ (0, vitest_1.expect)((0, tableau_engine_1.isValid)(f, tableau_engine_1.FRAME_KD)).toBe(true);
99
+ });
100
+ (0, vitest_1.it)('T reflexivity: []P -> P', () => {
101
+ (0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(box(atom('P')), atom('P')), tableau_engine_1.FRAME_T)).toBe(true);
102
+ });
103
+ (0, vitest_1.it)('S4 transitivity: []P -> [][]P', () => {
104
+ (0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(box(atom('P')), box(box(atom('P')))), tableau_engine_1.FRAME_S4)).toBe(true);
105
+ });
106
+ (0, vitest_1.it)('S5: <>P -> []<>P', () => {
107
+ (0, vitest_1.expect)((0, tableau_engine_1.isValid)(implies(dia(atom('P')), box(dia(atom('P')))), tableau_engine_1.FRAME_S5)).toBe(true);
108
+ });
109
+ });
110
+ (0, vitest_1.describe)('tableau-engine — checkTableau', () => {
111
+ (0, vitest_1.it)('returns ExpandResult with closed flag', () => {
112
+ const r = (0, tableau_engine_1.checkTableau)(implies(atom('P'), atom('P')), tableau_engine_1.FRAME_K, true);
113
+ (0, vitest_1.expect)(r.closed).toBe(true);
114
+ });
115
+ (0, vitest_1.it)('returns openBranch when satisfiable', () => {
116
+ const r = (0, tableau_engine_1.checkTableau)(atom('P'), tableau_engine_1.FRAME_K, false);
117
+ (0, vitest_1.expect)(r.closed).toBe(false);
118
+ (0, vitest_1.expect)(r.openBranch).toBeDefined();
119
+ });
120
+ (0, vitest_1.it)('makeBranch produces a Branch with w0', () => {
121
+ const b = (0, tableau_engine_1.makeBranch)([{ formula: atom('P'), world: 'w0' }]);
122
+ (0, vitest_1.expect)(b.worlds.has('w0')).toBe(true);
123
+ });
124
+ });
125
+ //# sourceMappingURL=tableau-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableau-engine.test.js","sourceRoot":"","sources":["../../../src/tests/coverage-95/tableau-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=temporal-ltl.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-ltl.test.d.ts","sourceRoot":"","sources":["../../../src/tests/coverage-95/temporal-ltl.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const ltl_1 = require("../../profiles/temporal/ltl");
5
+ const atom = (name) => ({ kind: 'atom', name });
6
+ const not = (a) => ({ kind: 'not', args: [a] });
7
+ const and = (a, b) => ({ kind: 'and', args: [a, b] });
8
+ const or = (a, b) => ({ kind: 'or', args: [a, b] });
9
+ const implies = (a, b) => ({ kind: 'implies', args: [a, b] });
10
+ const biconditional = (a, b) => ({
11
+ kind: 'biconditional',
12
+ args: [a, b],
13
+ });
14
+ const G = (a) => ({ kind: 'modal_necessity', args: [a] });
15
+ const F = (a) => ({ kind: 'modal_possibility', args: [a] });
16
+ const X = (a) => ({ kind: 'temporal_next', args: [a] });
17
+ const U = (a, b) => ({ kind: 'temporal_until', args: [a, b] });
18
+ (0, vitest_1.describe)('TemporalLTL — profile', () => {
19
+ const p = new ltl_1.TemporalLTL();
20
+ (0, vitest_1.it)('has name temporal.ltl', () => {
21
+ (0, vitest_1.expect)(p.name).toBe('temporal.ltl');
22
+ (0, vitest_1.expect)(p.description).toContain('LTL');
23
+ });
24
+ (0, vitest_1.it)('explainSystem returns a non-empty multi-line block', () => {
25
+ const exp = p.explainSystem();
26
+ (0, vitest_1.expect)(exp).toContain('G(');
27
+ (0, vitest_1.expect)(exp).toContain('F(');
28
+ (0, vitest_1.expect)(exp.split('\n').length).toBeGreaterThan(5);
29
+ });
30
+ (0, vitest_1.it)('formatFormula renders G(P) as G(P)', () => {
31
+ (0, vitest_1.expect)(p.formatFormula(G(atom('P')))).toBe('G(P)');
32
+ });
33
+ (0, vitest_1.it)('formatFormula renders F(P)', () => {
34
+ (0, vitest_1.expect)(p.formatFormula(F(atom('P')))).toBe('F(P)');
35
+ });
36
+ (0, vitest_1.it)('formatFormula renders X(P)', () => {
37
+ (0, vitest_1.expect)(p.formatFormula(X(atom('P')))).toBe('X(P)');
38
+ });
39
+ (0, vitest_1.it)('formatFormula renders P U Q', () => {
40
+ (0, vitest_1.expect)(p.formatFormula(U(atom('P'), atom('Q')))).toMatch(/U/);
41
+ });
42
+ (0, vitest_1.it)('formatFormula renders negation over atom inline', () => {
43
+ (0, vitest_1.expect)(p.formatFormula(not(atom('P')))).toBe('¬P');
44
+ });
45
+ (0, vitest_1.it)('formatFormula renders negation over compound with parens', () => {
46
+ (0, vitest_1.expect)(p.formatFormula(not(and(atom('P'), atom('Q'))))).toMatch(/¬\(/);
47
+ });
48
+ (0, vitest_1.it)('formatFormula renders and/or/implies/biconditional', () => {
49
+ (0, vitest_1.expect)(p.formatFormula(and(atom('P'), atom('Q')))).toContain('∧');
50
+ (0, vitest_1.expect)(p.formatFormula(or(atom('P'), atom('Q')))).toContain('∨');
51
+ (0, vitest_1.expect)(p.formatFormula(implies(atom('P'), atom('Q')))).toContain('→');
52
+ (0, vitest_1.expect)(p.formatFormula(biconditional(atom('P'), atom('Q')))).toContain('↔');
53
+ });
54
+ (0, vitest_1.it)('formatFormula handles incomplete G as G(?)', () => {
55
+ (0, vitest_1.expect)(p.formatFormula({ kind: 'modal_necessity' })).toBe('G(?)');
56
+ (0, vitest_1.expect)(p.formatFormula({ kind: 'modal_possibility' })).toBe('F(?)');
57
+ (0, vitest_1.expect)(p.formatFormula({ kind: 'temporal_next' })).toBe('X(?)');
58
+ });
59
+ (0, vitest_1.it)('formatFormula falls back to formulaToString for unknown kinds', () => {
60
+ (0, vitest_1.expect)(typeof p.formatFormula({ kind: 'true' })).toBe('string');
61
+ });
62
+ });
63
+ (0, vitest_1.describe)('TemporalLTL — explain() classifies patterns', () => {
64
+ const p = new ltl_1.TemporalLTL();
65
+ (0, vitest_1.it)('classifies G(¬P) as Safety', () => {
66
+ const r = p.explain(G(not(atom('crash'))));
67
+ (0, vitest_1.expect)(r.output).toContain('Safety');
68
+ });
69
+ (0, vitest_1.it)('classifies F(P) as Liveness', () => {
70
+ const r = p.explain(F(atom('serve')));
71
+ (0, vitest_1.expect)(r.output).toContain('Liveness');
72
+ });
73
+ (0, vitest_1.it)('classifies G(P → F(Q)) as Response', () => {
74
+ const r = p.explain(G(implies(atom('req'), F(atom('ack')))));
75
+ (0, vitest_1.expect)(r.output).toContain('Response');
76
+ });
77
+ (0, vitest_1.it)('classifies F(G(P)) as Persistence', () => {
78
+ const r = p.explain(F(G(atom('stable'))));
79
+ (0, vitest_1.expect)(r.output).toContain('Persistence');
80
+ });
81
+ (0, vitest_1.it)('classifies G(F(P)) as Recurrence', () => {
82
+ const r = p.explain(G(F(atom('serve'))));
83
+ (0, vitest_1.expect)(r.output).toContain('Recurrence');
84
+ });
85
+ (0, vitest_1.it)('classifies ¬P U Q as Precedence', () => {
86
+ const r = p.explain(U(not(atom('p')), atom('q')));
87
+ (0, vitest_1.expect)(r.output).toContain('Precedence');
88
+ });
89
+ (0, vitest_1.it)('returns base result without pattern for simple atom', () => {
90
+ const r = p.explain(atom('P'));
91
+ (0, vitest_1.expect)(typeof r.output).toBe('string');
92
+ });
93
+ });
94
+ //# sourceMappingURL=temporal-ltl.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-ltl.test.js","sourceRoot":"","sources":["../../../src/tests/coverage-95/temporal-ltl.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=typecheck-checker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecheck-checker.test.d.ts","sourceRoot":"","sources":["../../../src/tests/coverage-95/typecheck-checker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const checker_1 = require("../../runtime/typecheck/checker");
5
+ const parser_1 = require("../../parser/parser");
6
+ function parseProgram(src) {
7
+ const p = new parser_1.Parser('<test>');
8
+ return p.parse(src);
9
+ }
10
+ (0, vitest_1.describe)('TypeChecker — duplicates and undeclared', () => {
11
+ (0, vitest_1.it)('TC006: duplicate axiom declaration', () => {
12
+ const prog = parseProgram(`logic classical.propositional
13
+ axiom a : P
14
+ axiom a : Q
15
+ `);
16
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
17
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC006')).toBe(true);
18
+ });
19
+ (0, vitest_1.it)('TC006: duplicate theorem declaration', () => {
20
+ const prog = parseProgram(`logic classical.propositional
21
+ theorem t : P
22
+ theorem t : Q
23
+ `);
24
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
25
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC006')).toBe(true);
26
+ });
27
+ (0, vitest_1.it)('TC001: undeclared premise in derive', () => {
28
+ const prog = parseProgram(`logic classical.propositional
29
+ axiom a1 : P
30
+ derive Q from notDeclared
31
+ `);
32
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
33
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC001')).toBe(true);
34
+ });
35
+ (0, vitest_1.it)('TC001: undeclared premise in prove', () => {
36
+ const prog = parseProgram(`logic classical.propositional
37
+ axiom a1 : P
38
+ prove Q from missingPremise
39
+ `);
40
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
41
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC001')).toBe(true);
42
+ });
43
+ });
44
+ (0, vitest_1.describe)('TypeChecker — operator/profile mismatch', () => {
45
+ (0, vitest_1.it)('TC004: modal operator in non-modal profile', () => {
46
+ const prog = parseProgram(`logic classical.propositional
47
+ axiom a : []P
48
+ `);
49
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
50
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC004')).toBe(true);
51
+ });
52
+ (0, vitest_1.it)('TC004: temporal operator detected when manually injected (parse keeps as token)', () => {
53
+ const prog = parseProgram(`logic classical.propositional
54
+ axiom a : P
55
+ `);
56
+ // Manually inject a temporal_next into the AST to simulate type confusion
57
+ const ax = prog.statements[1];
58
+ if (ax && ax.kind === 'axiom_decl') {
59
+ ax.formula = {
60
+ kind: 'temporal_next',
61
+ args: [{ kind: 'atom', name: 'P' }],
62
+ };
63
+ }
64
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
65
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC004')).toBe(true);
66
+ });
67
+ });
68
+ (0, vitest_1.describe)('TypeChecker — imports', () => {
69
+ (0, vitest_1.it)('TC007: circular import to same file', () => {
70
+ const prog = parseProgram(`logic classical.propositional
71
+ import "<test>"
72
+ `);
73
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional', '<test>');
74
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC007')).toBe(true);
75
+ });
76
+ (0, vitest_1.it)('TC007: duplicate import', () => {
77
+ const prog = parseProgram(`logic classical.propositional
78
+ import "foo.st"
79
+ import "foo.st"
80
+ `);
81
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
82
+ (0, vitest_1.expect)(errs.some((e) => e.code === 'TC007')).toBe(true);
83
+ });
84
+ });
85
+ (0, vitest_1.describe)('TypeChecker — accepts valid programs', () => {
86
+ (0, vitest_1.it)('valid propositional program produces no errors', () => {
87
+ const prog = parseProgram(`logic classical.propositional
88
+ axiom a1 : P -> Q
89
+ axiom a2 : P
90
+ derive Q from a1, a2
91
+ check valid (P -> P)
92
+ `);
93
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
94
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
95
+ });
96
+ (0, vitest_1.it)('let bindings are registered', () => {
97
+ const prog = parseProgram(`logic classical.propositional
98
+ let phi = P -> Q
99
+ axiom a1 : P
100
+ `);
101
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
102
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
103
+ });
104
+ (0, vitest_1.it)('check satisfiable, equivalent, countermodel all OK', () => {
105
+ const prog = parseProgram(`logic classical.propositional
106
+ check satisfiable (P | !P)
107
+ check equivalent (P & Q), (Q & P)
108
+ countermodel (P -> Q)
109
+ `);
110
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
111
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
112
+ });
113
+ (0, vitest_1.it)('truth_table and explain OK', () => {
114
+ const prog = parseProgram(`logic classical.propositional
115
+ truth_table (P & Q)
116
+ explain (P -> P)
117
+ `);
118
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
119
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
120
+ });
121
+ (0, vitest_1.it)('analyze with premises and conclusion OK', () => {
122
+ const prog = parseProgram(`logic classical.propositional
123
+ analyze {
124
+ premises: [P -> Q, P]
125
+ conclusion: Q
126
+ }
127
+ `);
128
+ (0, checker_1.typeCheck)(prog, 'classical.propositional');
129
+ });
130
+ (0, vitest_1.it)('theory declaration is type-checked recursively', () => {
131
+ const prog = parseProgram(`logic classical.propositional
132
+ theory Persona(n) {
133
+ axiom existencia : P
134
+ theorem identidad : P -> P
135
+ }
136
+ `);
137
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
138
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
139
+ });
140
+ (0, vitest_1.it)('modal profile accepts modal operators', () => {
141
+ const prog = parseProgram(`logic modal.k
142
+ axiom a : []P
143
+ `);
144
+ const errs = (0, checker_1.typeCheck)(prog, 'modal.k');
145
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error' && e.code === 'TC004').length).toBe(0);
146
+ });
147
+ (0, vitest_1.it)('temporal profile accepts temporal operators', () => {
148
+ const prog = parseProgram(`logic temporal.ltl
149
+ axiom a : X(P)
150
+ `);
151
+ const errs = (0, checker_1.typeCheck)(prog, 'temporal.ltl');
152
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error' && e.code === 'TC004').length).toBe(0);
153
+ });
154
+ (0, vitest_1.it)('empty profile suppresses operator-specific errors', () => {
155
+ const prog = parseProgram(`axiom a : []P
156
+ `);
157
+ const errs = (0, checker_1.typeCheck)(prog, '');
158
+ (0, vitest_1.expect)(errs.filter((e) => e.code === 'TC004').length).toBe(0);
159
+ });
160
+ });
161
+ (0, vitest_1.describe)('TypeChecker — define and unfold/fold', () => {
162
+ (0, vitest_1.it)('define declaration registers in scope', () => {
163
+ const prog = parseProgram(`logic classical.propositional
164
+ define Mortal(x) := P -> Q
165
+ `);
166
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
167
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
168
+ });
169
+ });
170
+ (0, vitest_1.describe)('TypeChecker — file-level fn declarations', () => {
171
+ (0, vitest_1.it)('declares function and uses it without error', () => {
172
+ const prog = parseProgram(`logic classical.propositional
173
+ fn helper(p) {
174
+ return p
175
+ }
176
+ `);
177
+ const errs = (0, checker_1.typeCheck)(prog, 'classical.propositional');
178
+ (0, vitest_1.expect)(errs.filter((e) => e.severity === 'error').length).toBe(0);
179
+ });
180
+ });
181
+ (0, vitest_1.describe)('TypeChecker — top-level typeCheck()', () => {
182
+ (0, vitest_1.it)('typeCheck on empty program returns []', () => {
183
+ const prog = parseProgram('');
184
+ (0, vitest_1.expect)((0, checker_1.typeCheck)(prog)).toEqual([]);
185
+ });
186
+ (0, vitest_1.it)('typeCheck handles file arg', () => {
187
+ const prog = parseProgram('logic classical.propositional\n');
188
+ (0, vitest_1.expect)((0, checker_1.typeCheck)(prog, 'classical.propositional', 'foo.st')).toEqual([]);
189
+ });
190
+ });
191
+ //# sourceMappingURL=typecheck-checker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecheck-checker.test.js","sourceRoot":"","sources":["../../../src/tests/coverage-95/typecheck-checker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=undecidability-detector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undecidability-detector.test.d.ts","sourceRoot":"","sources":["../../../src/tests/coverage-95/undecidability-detector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const undecidability_detector_1 = require("../../profiles/classical/undecidability-detector");
5
+ const atom = (name) => ({ kind: 'atom', name });
6
+ const not = (a) => ({ kind: 'not', args: [a] });
7
+ const and = (a, b) => ({ kind: 'and', args: [a, b] });
8
+ const pred = (name, ...terms) => ({
9
+ kind: 'predicate',
10
+ name,
11
+ args: terms.map((t) => ({ kind: 'atom', name: t })),
12
+ });
13
+ const forall = (variable, body) => ({
14
+ kind: 'forall',
15
+ variable,
16
+ args: [body],
17
+ });
18
+ const exists = (variable, body) => ({
19
+ kind: 'exists',
20
+ variable,
21
+ args: [body],
22
+ });
23
+ const fn = (name, ...args) => ({
24
+ kind: 'fn_call',
25
+ name,
26
+ args,
27
+ });
28
+ (0, vitest_1.describe)('detectUndecidable() — undecidability detector', () => {
29
+ (0, vitest_1.it)('returns empty array for a simple atom', () => {
30
+ (0, vitest_1.expect)((0, undecidability_detector_1.detectUndecidable)(atom('P'))).toEqual([]);
31
+ });
32
+ (0, vitest_1.it)('returns empty for a single quantifier', () => {
33
+ const f = forall('x', pred('P', 'x'));
34
+ (0, vitest_1.expect)((0, undecidability_detector_1.detectUndecidable)(f)).toEqual([]);
35
+ });
36
+ (0, vitest_1.it)('detects quantifier alternation depth >= 3 as warning', () => {
37
+ // ∀x ∃y ∀z ∃w P(x,y,z,w)
38
+ const f = forall('x', exists('y', forall('z', exists('w', pred('P', 'x', 'y', 'z', 'w')))));
39
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
40
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'quantifier_alternation')).toBe(true);
41
+ const qa = w.find((x) => x.pattern === 'quantifier_alternation');
42
+ (0, vitest_1.expect)(qa).toBeDefined();
43
+ (0, vitest_1.expect)(['warning', 'critical']).toContain(qa.severity);
44
+ });
45
+ (0, vitest_1.it)('marks quantifier alternation depth >= 4 as critical', () => {
46
+ // ∀ ∃ ∀ ∃ ∀ → alternation depth 4
47
+ const f = forall('a', exists('b', forall('c', exists('d', forall('e', pred('Q', 'a', 'b', 'c', 'd', 'e'))))));
48
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
49
+ const qa = w.find((x) => x.pattern === 'quantifier_alternation');
50
+ (0, vitest_1.expect)(qa).toBeDefined();
51
+ (0, vitest_1.expect)(qa.severity).toBe('critical');
52
+ });
53
+ (0, vitest_1.it)('detects deep quantifier nesting (>=5)', () => {
54
+ // ∀∀∀∀∀ P(a,b,c,d,e) — nesting 5, alternation 0
55
+ const f = forall('a', forall('b', forall('c', forall('d', forall('e', pred('R', 'a', 'b', 'c', 'd', 'e'))))));
56
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
57
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'deep_quantifier_nesting')).toBe(true);
58
+ });
59
+ (0, vitest_1.it)('marks nesting >= 8 as critical', () => {
60
+ let body = pred('S', 'a');
61
+ for (let i = 0; i < 8; i++) {
62
+ body = forall(`v${i}`, body);
63
+ }
64
+ const w = (0, undecidability_detector_1.detectUndecidable)(body);
65
+ const dn = w.find((x) => x.pattern === 'deep_quantifier_nesting');
66
+ (0, vitest_1.expect)(dn).toBeDefined();
67
+ (0, vitest_1.expect)(dn.severity).toBe('critical');
68
+ });
69
+ (0, vitest_1.it)('detects Gödel-like self-reference (provable)', () => {
70
+ const f = forall('x', pred('provable_of', 'x'));
71
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
72
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
73
+ });
74
+ (0, vitest_1.it)('detects truth_of self-reference', () => {
75
+ const f = pred('truth_of', 'x');
76
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
77
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
78
+ });
79
+ (0, vitest_1.it)('detects godel atom', () => {
80
+ const f = atom('godel_sentence');
81
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
82
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
83
+ });
84
+ (0, vitest_1.it)('detects halt-like names', () => {
85
+ const f = pred('halts', 'p');
86
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
87
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
88
+ });
89
+ (0, vitest_1.it)('detects reflexive predicate', () => {
90
+ const f = pred('reflexive_check', 'x');
91
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
92
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'goedel_self_reference')).toBe(true);
93
+ });
94
+ (0, vitest_1.it)('detects deep function nesting with quantifiers', () => {
95
+ // P(f(f(f(f(x)))))
96
+ const fx = fn('f', atom('x'));
97
+ const ffx = fn('f', fx);
98
+ const fffx = fn('f', ffx);
99
+ const ffffx = fn('f', fffx);
100
+ const f = forall('x', { kind: 'predicate', name: 'P', args: [ffffx] });
101
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
102
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'deep_function_nesting')).toBe(true);
103
+ });
104
+ (0, vitest_1.it)('marks function nesting >= 6 as critical', () => {
105
+ let term = atom('x');
106
+ for (let i = 0; i < 6; i++) {
107
+ term = fn('g', term);
108
+ }
109
+ const f = forall('x', { kind: 'predicate', name: 'P', args: [term] });
110
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
111
+ const fn_w = w.find((x) => x.pattern === 'deep_function_nesting');
112
+ (0, vitest_1.expect)(fn_w).toBeDefined();
113
+ (0, vitest_1.expect)(fn_w.severity).toBe('critical');
114
+ });
115
+ (0, vitest_1.it)('detects polyadic predicates combined with alternation', () => {
116
+ // ∀x ∃y ∀z P(x,y,z) — alternation depth 2 + polyadic predicate
117
+ const f = forall('x', exists('y', forall('z', pred('Three', 'x', 'y', 'z'))));
118
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
119
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'polyadic_with_alternation')).toBe(true);
120
+ });
121
+ (0, vitest_1.it)('detects infinite-domain-requiring formula', () => {
122
+ // ∀x ∃y ¬P(x,y)
123
+ const f = forall('x', exists('y', not(pred('P', 'x', 'y'))));
124
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
125
+ (0, vitest_1.expect)(w.some((x) => x.pattern === 'infinite_domain')).toBe(true);
126
+ });
127
+ (0, vitest_1.it)('does not report on monadic decidable patterns', () => {
128
+ const f = forall('x', pred('M', 'x'));
129
+ const w = (0, undecidability_detector_1.detectUndecidable)(f);
130
+ (0, vitest_1.expect)(w.find((x) => x.pattern === 'polyadic_with_alternation')).toBeUndefined();
131
+ (0, vitest_1.expect)(w.find((x) => x.pattern === 'quantifier_alternation')).toBeUndefined();
132
+ });
133
+ (0, vitest_1.it)('returns empty for and/or compound without quantifiers', () => {
134
+ const f = and(atom('P'), atom('Q'));
135
+ (0, vitest_1.expect)((0, undecidability_detector_1.detectUndecidable)(f)).toEqual([]);
136
+ });
137
+ (0, vitest_1.it)('all warnings have required fields', () => {
138
+ const f = forall('a', exists('b', forall('c', exists('d', pred('provable', 'a', 'b', 'c', 'd')))));
139
+ const ws = (0, undecidability_detector_1.detectUndecidable)(f);
140
+ (0, vitest_1.expect)(ws.length).toBeGreaterThan(0);
141
+ for (const w of ws) {
142
+ (0, vitest_1.expect)(typeof w.pattern).toBe('string');
143
+ (0, vitest_1.expect)(typeof w.description).toBe('string');
144
+ (0, vitest_1.expect)(['info', 'warning', 'critical']).toContain(w.severity);
145
+ (0, vitest_1.expect)(typeof w.suggestion).toBe('string');
146
+ }
147
+ });
148
+ });
149
+ //# sourceMappingURL=undecidability-detector.test.js.map