@polintpro/proposit-core 0.1.2 → 0.1.4

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 (129) hide show
  1. package/README.md +47 -47
  2. package/dist/cli/commands/analysis.d.ts.map +1 -1
  3. package/dist/cli/commands/analysis.js +87 -13
  4. package/dist/cli/commands/analysis.js.map +1 -1
  5. package/dist/cli/commands/arguments.d.ts.map +1 -1
  6. package/dist/cli/commands/arguments.js +27 -4
  7. package/dist/cli/commands/arguments.js.map +1 -1
  8. package/dist/cli/commands/diff.d.ts +3 -0
  9. package/dist/cli/commands/diff.d.ts.map +1 -0
  10. package/dist/cli/commands/diff.js +46 -0
  11. package/dist/cli/commands/diff.js.map +1 -0
  12. package/dist/cli/commands/expressions.js.map +1 -1
  13. package/dist/cli/commands/premises.d.ts.map +1 -1
  14. package/dist/cli/commands/premises.js +36 -17
  15. package/dist/cli/commands/premises.js.map +1 -1
  16. package/dist/cli/commands/variables.d.ts.map +1 -1
  17. package/dist/cli/commands/variables.js +1 -0
  18. package/dist/cli/commands/variables.js.map +1 -1
  19. package/dist/cli/commands/versionShow.js +2 -2
  20. package/dist/cli/commands/versionShow.js.map +1 -1
  21. package/dist/cli/engine.d.ts +6 -0
  22. package/dist/cli/engine.d.ts.map +1 -1
  23. package/dist/cli/engine.js +41 -8
  24. package/dist/cli/engine.js.map +1 -1
  25. package/dist/cli/output/diffRenderer.d.ts +4 -0
  26. package/dist/cli/output/diffRenderer.d.ts.map +1 -0
  27. package/dist/cli/output/diffRenderer.js +102 -0
  28. package/dist/cli/output/diffRenderer.js.map +1 -0
  29. package/dist/cli/router.d.ts.map +1 -1
  30. package/dist/cli/router.js +1 -0
  31. package/dist/cli/router.js.map +1 -1
  32. package/dist/cli/storage/analysis.d.ts +3 -3
  33. package/dist/cli/storage/analysis.d.ts.map +1 -1
  34. package/dist/cli/storage/analysis.js +3 -3
  35. package/dist/cli/storage/analysis.js.map +1 -1
  36. package/dist/cli/storage/arguments.d.ts +5 -5
  37. package/dist/cli/storage/arguments.d.ts.map +1 -1
  38. package/dist/cli/storage/arguments.js +3 -3
  39. package/dist/cli/storage/arguments.js.map +1 -1
  40. package/dist/cli/storage/premises.d.ts +5 -5
  41. package/dist/cli/storage/premises.d.ts.map +1 -1
  42. package/dist/cli/storage/premises.js +3 -3
  43. package/dist/cli/storage/premises.js.map +1 -1
  44. package/dist/cli/storage/roles.d.ts +3 -3
  45. package/dist/cli/storage/roles.d.ts.map +1 -1
  46. package/dist/cli/storage/roles.js +2 -2
  47. package/dist/cli/storage/roles.js.map +1 -1
  48. package/dist/cli/storage/variables.d.ts +3 -3
  49. package/dist/cli/storage/variables.d.ts.map +1 -1
  50. package/dist/cli/storage/variables.js +2 -2
  51. package/dist/cli/storage/variables.js.map +1 -1
  52. package/dist/cli.js +7 -5
  53. package/dist/cli.js.map +1 -1
  54. package/dist/index.d.ts +13 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +12 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/lib/core/ArgumentEngine.d.ts +90 -12
  59. package/dist/lib/core/ArgumentEngine.d.ts.map +1 -1
  60. package/dist/lib/core/ArgumentEngine.js +104 -20
  61. package/dist/lib/core/ArgumentEngine.js.map +1 -1
  62. package/dist/lib/core/ExpressionManager.d.ts +60 -8
  63. package/dist/lib/core/ExpressionManager.d.ts.map +1 -1
  64. package/dist/lib/core/ExpressionManager.js +52 -3
  65. package/dist/lib/core/ExpressionManager.js.map +1 -1
  66. package/dist/lib/core/PremiseManager.d.ts +43 -23
  67. package/dist/lib/core/PremiseManager.d.ts.map +1 -1
  68. package/dist/lib/core/PremiseManager.js +65 -37
  69. package/dist/lib/core/PremiseManager.js.map +1 -1
  70. package/dist/lib/core/VariableManager.d.ts +39 -6
  71. package/dist/lib/core/VariableManager.d.ts.map +1 -1
  72. package/dist/lib/core/VariableManager.js +26 -0
  73. package/dist/lib/core/VariableManager.js.map +1 -1
  74. package/dist/lib/core/diff.d.ts +20 -0
  75. package/dist/lib/core/diff.d.ts.map +1 -0
  76. package/dist/lib/core/diff.js +213 -0
  77. package/dist/lib/core/diff.js.map +1 -0
  78. package/dist/lib/core/evaluation/shared.d.ts +19 -5
  79. package/dist/lib/core/evaluation/shared.d.ts.map +1 -1
  80. package/dist/lib/core/evaluation/shared.js +34 -2
  81. package/dist/lib/core/evaluation/shared.js.map +1 -1
  82. package/dist/lib/core/import.d.ts +14 -0
  83. package/dist/lib/core/import.d.ts.map +1 -0
  84. package/dist/lib/core/import.js +217 -0
  85. package/dist/lib/core/import.js.map +1 -0
  86. package/dist/lib/core/parser/formula-gen.js +850 -0
  87. package/dist/lib/core/parser/formula.d.ts +23 -0
  88. package/dist/lib/core/parser/formula.d.ts.map +1 -0
  89. package/dist/lib/core/parser/formula.js +7 -0
  90. package/dist/lib/core/parser/formula.js.map +1 -0
  91. package/dist/lib/index.d.ts +9 -0
  92. package/dist/lib/index.d.ts.map +1 -1
  93. package/dist/lib/index.js +8 -0
  94. package/dist/lib/index.js.map +1 -1
  95. package/dist/lib/schemata/analysis.d.ts +4 -3
  96. package/dist/lib/schemata/analysis.d.ts.map +1 -1
  97. package/dist/lib/schemata/analysis.js +6 -3
  98. package/dist/lib/schemata/analysis.js.map +1 -1
  99. package/dist/lib/schemata/argument.d.ts +25 -16
  100. package/dist/lib/schemata/argument.d.ts.map +1 -1
  101. package/dist/lib/schemata/argument.js +21 -13
  102. package/dist/lib/schemata/argument.js.map +1 -1
  103. package/dist/lib/schemata/import.d.ts +33 -0
  104. package/dist/lib/schemata/import.d.ts.map +1 -0
  105. package/dist/lib/schemata/import.js +18 -0
  106. package/dist/lib/schemata/import.js.map +1 -0
  107. package/dist/lib/schemata/index.d.ts +1 -0
  108. package/dist/lib/schemata/index.d.ts.map +1 -1
  109. package/dist/lib/schemata/index.js +1 -0
  110. package/dist/lib/schemata/index.js.map +1 -1
  111. package/dist/lib/schemata/propositional.d.ts +34 -25
  112. package/dist/lib/schemata/propositional.d.ts.map +1 -1
  113. package/dist/lib/schemata/propositional.js +41 -33
  114. package/dist/lib/schemata/propositional.js.map +1 -1
  115. package/dist/lib/types/diff.d.ts +56 -0
  116. package/dist/lib/types/diff.d.ts.map +1 -0
  117. package/dist/lib/types/diff.js +2 -0
  118. package/dist/lib/types/diff.js.map +1 -0
  119. package/dist/lib/types/evaluation.d.ts +128 -61
  120. package/dist/lib/types/evaluation.d.ts.map +1 -1
  121. package/dist/lib/utils/collections.d.ts +6 -0
  122. package/dist/lib/utils/collections.d.ts.map +1 -1
  123. package/dist/lib/utils/collections.js +6 -0
  124. package/dist/lib/utils/collections.js.map +1 -1
  125. package/dist/lib/utils.d.ts +7 -0
  126. package/dist/lib/utils.d.ts.map +1 -1
  127. package/dist/lib/utils.js +7 -5
  128. package/dist/lib/utils.js.map +1 -1
  129. package/package.json +15 -3
@@ -0,0 +1,213 @@
1
+ /** Compares two argument metadata objects and returns field-level changes for `metadata.title` and `metadata.description`. */
2
+ export function defaultCompareArgument(before, after) {
3
+ const changes = [];
4
+ if (before.metadata.title !== after.metadata.title) {
5
+ changes.push({
6
+ field: "metadata.title",
7
+ before: before.metadata.title,
8
+ after: after.metadata.title,
9
+ });
10
+ }
11
+ if (before.metadata.description !== after.metadata.description) {
12
+ changes.push({
13
+ field: "metadata.description",
14
+ before: before.metadata.description,
15
+ after: after.metadata.description,
16
+ });
17
+ }
18
+ return changes;
19
+ }
20
+ /** Compares two variables and returns field-level changes for `symbol` and `metadata`. */
21
+ export function defaultCompareVariable(before, after) {
22
+ const changes = [];
23
+ if (before.symbol !== after.symbol) {
24
+ changes.push({
25
+ field: "symbol",
26
+ before: before.symbol,
27
+ after: after.symbol,
28
+ });
29
+ }
30
+ if (JSON.stringify(before.metadata) !== JSON.stringify(after.metadata)) {
31
+ changes.push({
32
+ field: "metadata",
33
+ before: before.metadata,
34
+ after: after.metadata,
35
+ });
36
+ }
37
+ return changes;
38
+ }
39
+ /** Compares two premises and returns field-level changes for `metadata.title` and `rootExpressionId`. */
40
+ export function defaultComparePremise(before, after) {
41
+ const changes = [];
42
+ if (before.metadata.title !== after.metadata.title) {
43
+ changes.push({
44
+ field: "metadata.title",
45
+ before: before.metadata.title,
46
+ after: after.metadata.title,
47
+ });
48
+ }
49
+ if (before.rootExpressionId !== after.rootExpressionId) {
50
+ changes.push({
51
+ field: "rootExpressionId",
52
+ before: before.rootExpressionId,
53
+ after: after.rootExpressionId,
54
+ });
55
+ }
56
+ return changes;
57
+ }
58
+ /** Compares two expressions and returns field-level changes for structural fields (`type`, `parentId`, `position`, `variableId`, `operator`). */
59
+ export function defaultCompareExpression(before, after) {
60
+ const changes = [];
61
+ if (before.type !== after.type) {
62
+ changes.push({
63
+ field: "type",
64
+ before: before.type,
65
+ after: after.type,
66
+ });
67
+ }
68
+ if (before.parentId !== after.parentId) {
69
+ changes.push({
70
+ field: "parentId",
71
+ before: before.parentId,
72
+ after: after.parentId,
73
+ });
74
+ }
75
+ if (before.position !== after.position) {
76
+ changes.push({
77
+ field: "position",
78
+ before: before.position,
79
+ after: after.position,
80
+ });
81
+ }
82
+ if (before.type === "variable" && after.type === "variable") {
83
+ if (before.variableId !== after.variableId) {
84
+ changes.push({
85
+ field: "variableId",
86
+ before: before.variableId,
87
+ after: after.variableId,
88
+ });
89
+ }
90
+ }
91
+ if (before.type === "operator" && after.type === "operator") {
92
+ if (before.operator !== after.operator) {
93
+ changes.push({
94
+ field: "operator",
95
+ before: before.operator,
96
+ after: after.operator,
97
+ });
98
+ }
99
+ }
100
+ return changes;
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Entity set diffing helpers
104
+ // ---------------------------------------------------------------------------
105
+ function diffEntitySet(beforeItems, afterItems, compare) {
106
+ const beforeById = new Map(beforeItems.map((item) => [item.id, item]));
107
+ const afterById = new Map(afterItems.map((item) => [item.id, item]));
108
+ const added = [];
109
+ const removed = [];
110
+ const modified = [];
111
+ for (const [id, beforeItem] of beforeById) {
112
+ const afterItem = afterById.get(id);
113
+ if (!afterItem) {
114
+ removed.push(beforeItem);
115
+ continue;
116
+ }
117
+ const changes = compare(beforeItem, afterItem);
118
+ if (changes.length > 0) {
119
+ modified.push({ before: beforeItem, after: afterItem, changes });
120
+ }
121
+ }
122
+ for (const [id, afterItem] of afterById) {
123
+ if (!beforeById.has(id)) {
124
+ added.push(afterItem);
125
+ }
126
+ }
127
+ return { added, removed, modified };
128
+ }
129
+ function diffPremiseSet(beforePremises, afterPremises, comparePremise, compareExpression) {
130
+ const beforeById = new Map(beforePremises.map((p) => [p.id, p]));
131
+ const afterById = new Map(afterPremises.map((p) => [p.id, p]));
132
+ const added = [];
133
+ const removed = [];
134
+ const modified = [];
135
+ for (const [id, beforePremise] of beforeById) {
136
+ const afterPremise = afterById.get(id);
137
+ if (!afterPremise) {
138
+ removed.push(beforePremise);
139
+ continue;
140
+ }
141
+ const premiseChanges = comparePremise(beforePremise, afterPremise);
142
+ const expressionsDiff = diffEntitySet(beforePremise.expressions, afterPremise.expressions, compareExpression);
143
+ const hasExpressionChanges = expressionsDiff.added.length > 0 ||
144
+ expressionsDiff.removed.length > 0 ||
145
+ expressionsDiff.modified.length > 0;
146
+ if (premiseChanges.length > 0 || hasExpressionChanges) {
147
+ modified.push({
148
+ before: beforePremise,
149
+ after: afterPremise,
150
+ changes: premiseChanges,
151
+ expressions: expressionsDiff,
152
+ });
153
+ }
154
+ }
155
+ for (const [id, afterPremise] of afterById) {
156
+ if (!beforeById.has(id)) {
157
+ added.push(afterPremise);
158
+ }
159
+ }
160
+ return { added, removed, modified };
161
+ }
162
+ function diffRoles(beforeConclusion, afterConclusion, beforeSupporting, afterSupporting) {
163
+ const beforeSet = new Set(beforeSupporting);
164
+ const afterSet = new Set(afterSupporting);
165
+ return {
166
+ conclusion: { before: beforeConclusion, after: afterConclusion },
167
+ supportingAdded: afterSupporting.filter((id) => !beforeSet.has(id)),
168
+ supportingRemoved: beforeSupporting.filter((id) => !afterSet.has(id)),
169
+ };
170
+ }
171
+ function collectVariables(engine) {
172
+ const seen = new Set();
173
+ const vars = [];
174
+ for (const pm of engine.listPremises()) {
175
+ for (const v of pm.getVariables()) {
176
+ if (!seen.has(v.id)) {
177
+ seen.add(v.id);
178
+ vars.push(v);
179
+ }
180
+ }
181
+ }
182
+ return vars;
183
+ }
184
+ // ---------------------------------------------------------------------------
185
+ // Main diff function
186
+ // ---------------------------------------------------------------------------
187
+ /**
188
+ * Computes a structural diff between two argument engines.
189
+ *
190
+ * Compares argument metadata, variables, premises (with nested expression
191
+ * diffs), and role assignments. Uses pluggable comparators that default to
192
+ * the `defaultCompare*` functions.
193
+ */
194
+ export function diffArguments(engineA, engineB, options) {
195
+ const dataA = engineA.toData();
196
+ const dataB = engineB.toData();
197
+ const compareArg = options?.compareArgument ?? defaultCompareArgument;
198
+ const compareVar = options?.compareVariable ?? defaultCompareVariable;
199
+ const comparePrem = options?.comparePremise ?? defaultComparePremise;
200
+ const compareExpr = options?.compareExpression ?? defaultCompareExpression;
201
+ const argumentChanges = compareArg(dataA.argument, dataB.argument);
202
+ return {
203
+ argument: {
204
+ before: dataA.argument,
205
+ after: dataB.argument,
206
+ changes: argumentChanges,
207
+ },
208
+ variables: diffEntitySet(collectVariables(engineA), collectVariables(engineB), compareVar),
209
+ premises: diffPremiseSet(dataA.premises, dataB.premises, comparePrem, compareExpr),
210
+ roles: diffRoles(dataA.roles.conclusionPremiseId, dataB.roles.conclusionPremiseId, dataA.roles.supportingPremiseIds, dataB.roles.supportingPremiseIds),
211
+ };
212
+ }
213
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/lib/core/diff.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,20 @@
1
- import type { TDirectionalVacuity, TValidationIssue, TValidationResult } from "../../types/evaluation.js";
2
- export declare function makeValidationResult(issues: TValidationIssue[]): TValidationResult;
3
- export declare function makeErrorIssue(issue: Omit<TValidationIssue, "severity">): TValidationIssue;
4
- export declare function implicationValue(antecedent: boolean, consequent: boolean): boolean;
5
- export declare function buildDirectionalVacuity(antecedentTrue: boolean, consequentTrue: boolean): TDirectionalVacuity;
1
+ import type { TCoreDirectionalVacuity, TCoreTrivalentValue, TCoreValidationIssue, TCoreValidationResult } from "../../types/evaluation.js";
2
+ /** Creates a validation result, setting `ok` based on whether any error-severity issues exist. */
3
+ export declare function makeValidationResult(issues: TCoreValidationIssue[]): TCoreValidationResult;
4
+ /** Creates a validation issue with `severity: "error"`. */
5
+ export declare function makeErrorIssue(issue: Omit<TCoreValidationIssue, "severity">): TCoreValidationIssue;
6
+ /** Computes Kleene three-valued material implication: `!antecedent || consequent`. */
7
+ export declare function implicationValue(antecedent: TCoreTrivalentValue, consequent: TCoreTrivalentValue): TCoreTrivalentValue;
8
+ /** Builds a directional vacuity diagnostic for one direction of an implication. */
9
+ export declare function buildDirectionalVacuity(antecedentTrue: TCoreTrivalentValue, consequentTrue: TCoreTrivalentValue): TCoreDirectionalVacuity;
10
+ /** Kleene three-valued NOT: null propagates. */
11
+ export declare function kleeneNot(a: TCoreTrivalentValue): TCoreTrivalentValue;
12
+ /** Kleene three-valued AND: false dominates, null propagates. */
13
+ export declare function kleeneAnd(a: TCoreTrivalentValue, b: TCoreTrivalentValue): TCoreTrivalentValue;
14
+ /** Kleene three-valued OR: true dominates, null propagates. */
15
+ export declare function kleeneOr(a: TCoreTrivalentValue, b: TCoreTrivalentValue): TCoreTrivalentValue;
16
+ /** Kleene three-valued material implication: NOT a OR b. */
17
+ export declare function kleeneImplies(a: TCoreTrivalentValue, b: TCoreTrivalentValue): TCoreTrivalentValue;
18
+ /** Kleene three-valued biconditional: (a -> b) AND (b -> a). */
19
+ export declare function kleeneIff(a: TCoreTrivalentValue, b: TCoreTrivalentValue): TCoreTrivalentValue;
6
20
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/lib/core/evaluation/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,2BAA2B,CAAA;AAElC,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,gBAAgB,EAAE,GAC3B,iBAAiB,CAKnB;AAED,wBAAgB,cAAc,CAC1B,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAC1C,gBAAgB,CAElB;AAED,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,GACpB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACnC,cAAc,EAAE,OAAO,EACvB,cAAc,EAAE,OAAO,GACxB,mBAAmB,CASrB"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/lib/core/evaluation/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACxB,MAAM,2BAA2B,CAAA;AAElC,kGAAkG;AAClG,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,oBAAoB,EAAE,GAC/B,qBAAqB,CAKvB;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAC1B,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,GAC9C,oBAAoB,CAEtB;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,mBAAmB,GAChC,mBAAmB,CAErB;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CACnC,cAAc,EAAE,mBAAmB,EACnC,cAAc,EAAE,mBAAmB,GACpC,uBAAuB,CASzB;AAED,gDAAgD;AAChD,wBAAgB,SAAS,CAAC,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,CAErE;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CACrB,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,GACvB,mBAAmB,CAIrB;AAED,+DAA+D;AAC/D,wBAAgB,QAAQ,CACpB,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,GACvB,mBAAmB,CAIrB;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CACzB,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,GACvB,mBAAmB,CAErB;AAED,gEAAgE;AAChE,wBAAgB,SAAS,CACrB,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,GACvB,mBAAmB,CAErB"}
@@ -1,23 +1,55 @@
1
+ /** Creates a validation result, setting `ok` based on whether any error-severity issues exist. */
1
2
  export function makeValidationResult(issues) {
2
3
  return {
3
4
  ok: issues.every((issue) => issue.severity !== "error"),
4
5
  issues,
5
6
  };
6
7
  }
8
+ /** Creates a validation issue with `severity: "error"`. */
7
9
  export function makeErrorIssue(issue) {
8
10
  return { severity: "error", ...issue };
9
11
  }
12
+ /** Computes Kleene three-valued material implication: `!antecedent || consequent`. */
10
13
  export function implicationValue(antecedent, consequent) {
11
- return !antecedent || consequent;
14
+ return kleeneImplies(antecedent, consequent);
12
15
  }
16
+ /** Builds a directional vacuity diagnostic for one direction of an implication. */
13
17
  export function buildDirectionalVacuity(antecedentTrue, consequentTrue) {
14
18
  const implication = implicationValue(antecedentTrue, consequentTrue);
15
19
  return {
16
20
  antecedentTrue,
17
21
  consequentTrue,
18
22
  implicationValue: implication,
19
- isVacuouslyTrue: !antecedentTrue,
23
+ isVacuouslyTrue: kleeneAnd(implication, kleeneNot(antecedentTrue)),
20
24
  fired: antecedentTrue,
21
25
  };
22
26
  }
27
+ /** Kleene three-valued NOT: null propagates. */
28
+ export function kleeneNot(a) {
29
+ return a === null ? null : !a;
30
+ }
31
+ /** Kleene three-valued AND: false dominates, null propagates. */
32
+ export function kleeneAnd(a, b) {
33
+ if (a === false || b === false)
34
+ return false;
35
+ if (a === null || b === null)
36
+ return null;
37
+ return true;
38
+ }
39
+ /** Kleene three-valued OR: true dominates, null propagates. */
40
+ export function kleeneOr(a, b) {
41
+ if (a === true || b === true)
42
+ return true;
43
+ if (a === null || b === null)
44
+ return null;
45
+ return false;
46
+ }
47
+ /** Kleene three-valued material implication: NOT a OR b. */
48
+ export function kleeneImplies(a, b) {
49
+ return kleeneOr(kleeneNot(a), b);
50
+ }
51
+ /** Kleene three-valued biconditional: (a -> b) AND (b -> a). */
52
+ export function kleeneIff(a, b) {
53
+ return kleeneAnd(kleeneImplies(a, b), kleeneImplies(b, a));
54
+ }
23
55
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/lib/core/evaluation/shared.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,oBAAoB,CAChC,MAA0B;IAE1B,OAAO;QACH,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;QACvD,MAAM;KACT,CAAA;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAyC;IAEzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,UAAmB,EACnB,UAAmB;IAEnB,OAAO,CAAC,UAAU,IAAI,UAAU,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,cAAuB,EACvB,cAAuB;IAEvB,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;IACpE,OAAO;QACH,cAAc;QACd,cAAc;QACd,gBAAgB,EAAE,WAAW;QAC7B,eAAe,EAAE,CAAC,cAAc;QAChC,KAAK,EAAE,cAAc;KACxB,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/lib/core/evaluation/shared.ts"],"names":[],"mappings":"AAOA,kGAAkG;AAClG,MAAM,UAAU,oBAAoB,CAChC,MAA8B;IAE9B,OAAO;QACH,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;QACvD,MAAM;KACT,CAAA;AACL,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAC1B,KAA6C;IAE7C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;AAC1C,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAC5B,UAA+B,EAC/B,UAA+B;IAE/B,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;AAChD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CACnC,cAAmC,EACnC,cAAmC;IAEnC,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;IACpE,OAAO;QACH,cAAc;QACd,cAAc;QACd,gBAAgB,EAAE,WAAW;QAC7B,eAAe,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;QAClE,KAAK,EAAE,cAAc;KACxB,CAAA;AACL,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,SAAS,CAAC,CAAsB;IAC5C,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjC,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,SAAS,CACrB,CAAsB,EACtB,CAAsB;IAEtB,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC5C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACzC,OAAO,IAAI,CAAA;AACf,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,QAAQ,CACpB,CAAsB,EACtB,CAAsB;IAEtB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACzC,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CACzB,CAAsB,EACtB,CAAsB;IAEtB,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,SAAS,CACrB,CAAsB,EACtB,CAAsB;IAEtB,OAAO,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { ArgumentEngine } from "./ArgumentEngine.js";
2
+ /**
3
+ * Parses a YAML string representing a logical argument and returns a
4
+ * fully hydrated ArgumentEngine.
5
+ *
6
+ * Variables are implicitly declared by their usage in formula strings.
7
+ * Premises without an explicit `role` default to `"supporting"`.
8
+ * At most one premise may have `role: "conclusion"`.
9
+ *
10
+ * @throws On YAML parse errors, schema validation failures, formula
11
+ * parse errors, nested implies/iff operators, or multiple conclusions.
12
+ */
13
+ export declare function importArgumentFromYaml(yamlString: string): ArgumentEngine;
14
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/lib/core/import.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AA2KpD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAqGzE"}
@@ -0,0 +1,217 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import yaml from "js-yaml";
3
+ import { Value } from "typebox/value";
4
+ import { CoreYamlArgumentSchema } from "../schemata/import.js";
5
+ import { parseFormula } from "./parser/formula.js";
6
+ import { ArgumentEngine } from "./ArgumentEngine.js";
7
+ /**
8
+ * Validates that `implies` and `iff` nodes appear only at the AST root.
9
+ * Throws if an implication/biconditional is nested inside another operator.
10
+ */
11
+ function validateRootOnly(ast, isRoot, premiseIndex, premiseTitle) {
12
+ if (!isRoot && (ast.type === "implies" || ast.type === "iff")) {
13
+ const label = premiseTitle
14
+ ? `premise "${premiseTitle}" (index ${premiseIndex})`
15
+ : `premise at index ${premiseIndex}`;
16
+ throw new Error(`${ast.type === "implies" ? "Implication (→)" : "Biconditional (↔)"} operator must be at the root of a formula, but found nested in ${label}.`);
17
+ }
18
+ switch (ast.type) {
19
+ case "variable":
20
+ break;
21
+ case "not":
22
+ validateRootOnly(ast.operand, false, premiseIndex, premiseTitle);
23
+ break;
24
+ case "and":
25
+ case "or":
26
+ for (const operand of ast.operands) {
27
+ validateRootOnly(operand, false, premiseIndex, premiseTitle);
28
+ }
29
+ break;
30
+ case "implies":
31
+ case "iff":
32
+ validateRootOnly(ast.left, false, premiseIndex, premiseTitle);
33
+ validateRootOnly(ast.right, false, premiseIndex, premiseTitle);
34
+ break;
35
+ }
36
+ }
37
+ /** Recursively collects all variable names from a formula AST. */
38
+ function collectVariableNames(ast, names) {
39
+ switch (ast.type) {
40
+ case "variable":
41
+ names.add(ast.name);
42
+ break;
43
+ case "not":
44
+ collectVariableNames(ast.operand, names);
45
+ break;
46
+ case "and":
47
+ case "or":
48
+ for (const operand of ast.operands) {
49
+ collectVariableNames(operand, names);
50
+ }
51
+ break;
52
+ case "implies":
53
+ case "iff":
54
+ collectVariableNames(ast.left, names);
55
+ collectVariableNames(ast.right, names);
56
+ break;
57
+ }
58
+ }
59
+ /**
60
+ * Converts a formula AST into internal expression objects and adds them
61
+ * to the premise manager. Returns the root expression ID.
62
+ */
63
+ function buildExpressions(ast, parentId, position, argumentId, argumentVersion, variablesByName, addExpression) {
64
+ const id = randomUUID();
65
+ switch (ast.type) {
66
+ case "variable": {
67
+ const variable = variablesByName.get(ast.name);
68
+ addExpression({
69
+ id,
70
+ argumentId,
71
+ argumentVersion,
72
+ type: "variable",
73
+ variableId: variable.id,
74
+ parentId,
75
+ position,
76
+ });
77
+ return id;
78
+ }
79
+ case "not": {
80
+ addExpression({
81
+ id,
82
+ argumentId,
83
+ argumentVersion,
84
+ type: "operator",
85
+ operator: "not",
86
+ parentId,
87
+ position,
88
+ });
89
+ buildExpressions(ast.operand, id, 0, argumentId, argumentVersion, variablesByName, addExpression);
90
+ return id;
91
+ }
92
+ case "and":
93
+ case "or": {
94
+ addExpression({
95
+ id,
96
+ argumentId,
97
+ argumentVersion,
98
+ type: "operator",
99
+ operator: ast.type,
100
+ parentId,
101
+ position,
102
+ });
103
+ for (let i = 0; i < ast.operands.length; i++) {
104
+ buildExpressions(ast.operands[i], id, i, argumentId, argumentVersion, variablesByName, addExpression);
105
+ }
106
+ return id;
107
+ }
108
+ case "implies":
109
+ case "iff": {
110
+ addExpression({
111
+ id,
112
+ argumentId,
113
+ argumentVersion,
114
+ type: "operator",
115
+ operator: ast.type,
116
+ parentId,
117
+ position,
118
+ });
119
+ buildExpressions(ast.left, id, 0, argumentId, argumentVersion, variablesByName, addExpression);
120
+ buildExpressions(ast.right, id, 1, argumentId, argumentVersion, variablesByName, addExpression);
121
+ return id;
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Parses a YAML string representing a logical argument and returns a
127
+ * fully hydrated ArgumentEngine.
128
+ *
129
+ * Variables are implicitly declared by their usage in formula strings.
130
+ * Premises without an explicit `role` default to `"supporting"`.
131
+ * At most one premise may have `role: "conclusion"`.
132
+ *
133
+ * @throws On YAML parse errors, schema validation failures, formula
134
+ * parse errors, nested implies/iff operators, or multiple conclusions.
135
+ */
136
+ export function importArgumentFromYaml(yamlString) {
137
+ const raw = yaml.load(yamlString);
138
+ const input = Value.Parse(CoreYamlArgumentSchema, raw);
139
+ // Parse all formulas and validate root-only constraint
140
+ const parsedFormulas = [];
141
+ for (let i = 0; i < input.premises.length; i++) {
142
+ const premise = input.premises[i];
143
+ let ast;
144
+ try {
145
+ ast = parseFormula(premise.formula);
146
+ }
147
+ catch (error) {
148
+ const label = premise.metadata?.title
149
+ ? `premise "${premise.metadata.title}" (index ${i})`
150
+ : `premise at index ${i}`;
151
+ const msg = error instanceof Error ? error.message : String(error);
152
+ throw new Error(`Failed to parse formula for ${label}: ${msg}`);
153
+ }
154
+ validateRootOnly(ast, true, i, premise.metadata?.title);
155
+ parsedFormulas.push(ast);
156
+ }
157
+ // Validate conclusion count
158
+ const conclusionIndices = input.premises
159
+ .map((p, i) => (p.role === "conclusion" ? i : -1))
160
+ .filter((i) => i !== -1);
161
+ if (conclusionIndices.length > 1) {
162
+ throw new Error(`Multiple premises designated as conclusion (indices ${conclusionIndices.join(", ")}). Only one conclusion is allowed.`);
163
+ }
164
+ // Collect all variable names across all formulas
165
+ const allVariableNames = new Set();
166
+ for (const ast of parsedFormulas) {
167
+ collectVariableNames(ast, allVariableNames);
168
+ }
169
+ // Build the argument
170
+ const argumentId = randomUUID();
171
+ const argument = {
172
+ id: argumentId,
173
+ version: 0,
174
+ metadata: {
175
+ title: input.metadata.title,
176
+ ...(input.metadata.description !== undefined
177
+ ? { description: input.metadata.description }
178
+ : {}),
179
+ },
180
+ createdAt: Date.now(),
181
+ published: false,
182
+ };
183
+ const engine = new ArgumentEngine(argument);
184
+ // Create variables
185
+ const variablesByName = new Map();
186
+ for (const name of [...allVariableNames].sort()) {
187
+ const variable = {
188
+ id: randomUUID(),
189
+ argumentId,
190
+ argumentVersion: 0,
191
+ symbol: name,
192
+ metadata: {},
193
+ };
194
+ variablesByName.set(name, variable);
195
+ }
196
+ // Create premises and build expression trees
197
+ for (let i = 0; i < input.premises.length; i++) {
198
+ const premiseDef = input.premises[i];
199
+ const pm = engine.createPremise(premiseDef.metadata ? { ...premiseDef.metadata } : undefined);
200
+ // Register all variables with this premise
201
+ for (const variable of variablesByName.values()) {
202
+ pm.addVariable(variable);
203
+ }
204
+ // Build expression tree from parsed AST
205
+ buildExpressions(parsedFormulas[i], null, null, argumentId, 0, variablesByName, (expr) => pm.addExpression(expr));
206
+ // Assign role
207
+ const role = premiseDef.role ?? "supporting";
208
+ if (role === "conclusion") {
209
+ engine.setConclusionPremise(pm.getId());
210
+ }
211
+ else {
212
+ engine.addSupportingPremise(pm.getId());
213
+ }
214
+ }
215
+ return engine;
216
+ }
217
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/lib/core/import.ts"],"names":[],"mappings":"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"}