occam-verify-cli 0.0.1089 → 0.0.1091

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 (126) hide show
  1. package/bin/action/verify.js +2 -2
  2. package/lib/assertion/contained.js +35 -41
  3. package/lib/assertion/defined.js +24 -24
  4. package/lib/assertion/subproof.js +24 -24
  5. package/lib/assertion/type.js +23 -23
  6. package/lib/assignment/equality.js +4 -10
  7. package/lib/assignment/judgement.js +4 -4
  8. package/lib/assignment/variable.js +4 -4
  9. package/lib/combinator/bracketed.js +3 -3
  10. package/lib/conclusion.js +11 -13
  11. package/lib/consequent.js +11 -13
  12. package/lib/constructor/bracketed.js +3 -3
  13. package/lib/constructor.js +2 -2
  14. package/lib/context/file.js +28 -27
  15. package/lib/context/local.js +31 -32
  16. package/lib/context/release.js +6 -3
  17. package/lib/declaration.js +18 -18
  18. package/lib/derivation.js +3 -3
  19. package/lib/equality.js +24 -24
  20. package/lib/equivalence.js +13 -13
  21. package/lib/frame.js +43 -43
  22. package/lib/index.js +2 -1
  23. package/lib/judgement.js +20 -20
  24. package/lib/label.js +9 -1
  25. package/lib/metaType.js +2 -2
  26. package/lib/metavariable.js +40 -39
  27. package/lib/mixins/statement/qualified/unify.js +19 -19
  28. package/lib/mixins/statement/resolve.js +11 -11
  29. package/lib/mixins/statement/unify.js +12 -12
  30. package/lib/mixins/statement/verify.js +36 -36
  31. package/lib/mixins/term/verify.js +2 -2
  32. package/lib/premise.js +31 -40
  33. package/lib/proof.js +6 -5
  34. package/lib/proofStep.js +17 -17
  35. package/lib/reference.js +8 -8
  36. package/lib/rule.js +21 -21
  37. package/lib/statement/qualified.js +17 -17
  38. package/lib/statement/unqualified.js +19 -19
  39. package/lib/statement.js +52 -54
  40. package/lib/subDerivation.js +3 -3
  41. package/lib/subproof.js +6 -5
  42. package/lib/substitution/frameForMetavariable.js +16 -39
  43. package/lib/substitution/statementForMetavariable.js +88 -74
  44. package/lib/substitution/termForVariable.js +15 -41
  45. package/lib/substitution.js +20 -6
  46. package/lib/substitutions.js +13 -13
  47. package/lib/supposition.js +31 -40
  48. package/lib/term.js +28 -28
  49. package/lib/topLevelAssertion.js +33 -21
  50. package/lib/unifier/equality.js +8 -8
  51. package/lib/unifier/intrinsicLevel.js +149 -0
  52. package/lib/unifier/metaLevel.js +41 -31
  53. package/lib/unifier/metavariable.js +14 -8
  54. package/lib/unifier/statementWithCombinator.js +16 -16
  55. package/lib/unifier/termWithConstructor.js +6 -6
  56. package/lib/unifier.js +47 -47
  57. package/lib/utilities/assignments.js +3 -3
  58. package/lib/utilities/equivalences.js +14 -14
  59. package/lib/utilities/json.js +22 -21
  60. package/lib/utilities/unifier.js +7 -8
  61. package/lib/variable.js +33 -33
  62. package/lib/verifier/statementAsCombinator.js +2 -2
  63. package/lib/verifier/termAsConstructor.js +2 -2
  64. package/package.json +2 -2
  65. package/src/assertion/contained.js +37 -45
  66. package/src/assertion/defined.js +25 -25
  67. package/src/assertion/subproof.js +25 -28
  68. package/src/assertion/type.js +23 -23
  69. package/src/assignment/equality.js +4 -6
  70. package/src/assignment/judgement.js +4 -4
  71. package/src/assignment/variable.js +4 -4
  72. package/src/combinator/bracketed.js +2 -2
  73. package/src/conclusion.js +14 -15
  74. package/src/consequent.js +14 -15
  75. package/src/constructor/bracketed.js +2 -2
  76. package/src/constructor.js +3 -2
  77. package/src/context/file.js +26 -25
  78. package/src/context/local.js +21 -23
  79. package/src/context/release.js +5 -3
  80. package/src/declaration.js +20 -20
  81. package/src/derivation.js +2 -2
  82. package/src/equality.js +26 -26
  83. package/src/equivalence.js +12 -12
  84. package/src/frame.js +42 -42
  85. package/src/index.js +1 -0
  86. package/src/judgement.js +25 -25
  87. package/src/label.js +14 -0
  88. package/src/metaType.js +1 -1
  89. package/src/metavariable.js +51 -43
  90. package/src/mixins/statement/qualified/unify.js +21 -21
  91. package/src/mixins/statement/resolve.js +12 -12
  92. package/src/mixins/statement/unify.js +11 -11
  93. package/src/mixins/statement/verify.js +35 -35
  94. package/src/mixins/term/verify.js +1 -1
  95. package/src/premise.js +42 -53
  96. package/src/proof.js +6 -4
  97. package/src/proofStep.js +21 -21
  98. package/src/reference.js +12 -11
  99. package/src/rule.js +20 -20
  100. package/src/statement/qualified.js +18 -17
  101. package/src/statement/unqualified.js +19 -18
  102. package/src/statement.js +63 -66
  103. package/src/subDerivation.js +2 -3
  104. package/src/subproof.js +6 -4
  105. package/src/substitution/frameForMetavariable.js +29 -45
  106. package/src/substitution/statementForMetavariable.js +136 -86
  107. package/src/substitution/termForVariable.js +28 -49
  108. package/src/substitution.js +15 -5
  109. package/src/substitutions.js +12 -12
  110. package/src/supposition.js +41 -53
  111. package/src/term.js +27 -27
  112. package/src/topLevelAssertion.js +32 -19
  113. package/src/unifier/equality.js +7 -7
  114. package/src/unifier/intrinsicLevel.js +61 -0
  115. package/src/unifier/metaLevel.js +60 -46
  116. package/src/unifier/metavariable.js +22 -13
  117. package/src/unifier/statementWithCombinator.js +28 -28
  118. package/src/unifier/termWithConstructor.js +8 -8
  119. package/src/unifier.js +55 -55
  120. package/src/utilities/assignments.js +2 -2
  121. package/src/utilities/equivalences.js +13 -13
  122. package/src/utilities/json.js +76 -66
  123. package/src/utilities/unifier.js +10 -12
  124. package/src/variable.js +43 -40
  125. package/src/verifier/statementAsCombinator.js +2 -1
  126. package/src/verifier/termAsConstructor.js +2 -1
@@ -5,12 +5,19 @@ import Substitution from "../substitution";
5
5
  import LocalContext from "../context/local";
6
6
  import metaLevelUnifier from "../unifier/metaLevel";
7
7
 
8
+ import { nodeQuery } from "../utilities/query";
8
9
  import { stripBracketsFromStatementNode } from "../utilities/brackets";
9
10
  import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
11
+ import { unqualifiedStatementTokensFromUnqualifiedStatementString, substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
12
+ import { substitutionNodeFromUnqualifiedStatementNode,
13
+ unqualifiedStatementStringFromSubstitutionString,
14
+ unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
10
15
 
11
- export default class StatementForMetavariableSubstitution extends Substitution {
12
- constructor(string, resolved, statement, metavariable, substitution) {
13
- super(string);
16
+ const substitutionNodeQuery = nodeQuery("/statement/substitution");
17
+
18
+ class StatementForMetavariableSubstitution extends Substitution {
19
+ constructor(string, node, tokens, resolved, statement, metavariable, substitution) {
20
+ super(string, node, tokens);
14
21
 
15
22
  this.resolved = resolved;
16
23
  this.statement = statement;
@@ -46,78 +53,114 @@ export default class StatementForMetavariableSubstitution extends Substitution {
46
53
  return simple;
47
54
  }
48
55
 
49
- resolve(substitutions, localContextA, localContextB) {
56
+ matchStatementNode(statementNode) {
57
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
58
+
59
+ const statementNodeMatches = this.statement.matchStatementNode(statementNode);
60
+
61
+ return statementNodeMatches;
62
+ }
63
+
64
+ matchMetavariableNode(metavariableNode) { return this.metavariable.matchMetavariableNode(metavariableNode); }
65
+
66
+ matchSubstitutionNode(substitutionNode) {
67
+ debugger
68
+
69
+ let substitutionNodeMatches;
70
+
71
+ if ((substitutionNode === null) && (this.substitution === null)) {
72
+ substitutionNodeMatches = true;
73
+ } else if ((substitutionNode === null) && (this.substitution !== null)) {
74
+ substitutionNodeMatches = false;
75
+ } else if ((substitutionNode !== null) && (this.substitution === null)) {
76
+ substitutionNodeMatches = false;
77
+ } else {
78
+ substitutionNodeMatches = this.substitution.matchSubstitutionNode(substitutionNode);
79
+ }
80
+
81
+ return substitutionNodeMatches;
82
+ }
83
+
84
+ matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
85
+ const metavariableNodeMatches = this.matchMetavariableNode(metavariableNode),
86
+ substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
87
+ metavariableNodeAndSubstitutionNodeMatches = (metavariableNodeMatches && substitutionNodeMatches);
88
+
89
+ return metavariableNodeAndSubstitutionNodeMatches;
90
+ }
91
+
92
+ resolve(substitutions, generalContext, specificContext) {
50
93
  const substitutionString = this.string;
51
94
 
52
95
  const metavariableNode = this.getMetavariableNode(),
53
96
  simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNode);
54
97
 
55
98
  if (simpleSubstitution !== null) {
56
- localContextB.trace(`Resolving the ${substitutionString} substitution...`);
99
+ specificContext.trace(`Resolving the ${substitutionString} substitution...`);
57
100
 
58
101
  const substitution = simpleSubstitution, ///
59
- substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, localContextA, localContextB);
102
+ substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, generalContext, specificContext);
60
103
 
61
104
  this.resolved = substitutionResolved; ///
62
105
 
63
106
  if (this.resolved) {
64
- localContextB.debug(`...resolved the ${substitutionString} substitution.`);
107
+ specificContext.debug(`...resolved the ${substitutionString} substitution.`);
65
108
  }
66
109
  }
67
110
  }
68
111
 
69
- resolveSubstitution(substitution, statement, substitutions, localContextA, localContextB) {
112
+ resolveSubstitution(substitution, statement, substitutions, generalContext, specificContext) {
70
113
  let substitutionResolved = false;
71
114
 
72
115
  const substitutionString = substitution.getString();
73
116
 
74
- localContextB.trace(`Resolving the ${substitutionString} substitution...`);
117
+ specificContext.trace(`Resolving the ${substitutionString} substitution...`);
75
118
 
76
- const substitutionA = substitution, ///
77
- substitutionB = this.unifyStatement(statement, localContextB, localContextB); ///
119
+ const generalSubstitution = substitution, ///
120
+ specificSubstitution = this.unifyStatement(statement, specificContext, specificContext); ///
78
121
 
79
- if (substitutionB !== null) {
80
- localContextA = localContextFromLocalContextAndSubstitution(localContextA, substitutionA); ///
122
+ if (specificSubstitution !== null) {
123
+ generalContext = contextFromLocalContextAndSubstitution(generalContext, generalSubstitution); ///
81
124
 
82
- localContextB = localContextFromLocalContextAndSubstitution(localContextB, substitutionB); ///
125
+ specificContext = contextFromLocalContextAndSubstitution(specificContext, specificSubstitution); ///
83
126
 
84
127
  substitutions.snapshot();
85
128
 
86
- const substitutionNodeA = substitutionA.getSubstitutionNode(), ///
87
- substitutionNodeB = substitutionB.getSubstitutionNode(), ///
88
- substitutionStringA = localContextA.nodeAsString(substitutionNodeA),
89
- substitutionStringB = localContextB.nodeAsString(substitutionNodeB);
129
+ const generalSubstitutionNode = generalSubstitution.getSubstitutionNode(), ///
130
+ specificSubstitutionNode = specificSubstitution.getSubstitutionNode(), ///
131
+ generalSubstitutionString = generalContext.nodeAsString(generalSubstitutionNode),
132
+ specificSubstitutionString = specificContext.nodeAsString(specificSubstitutionNode);
90
133
 
91
- localContextB.trace(`Unifying the '${substitutionStringB}' substitution with the '${substitutionStringA}' substitution...`);
134
+ specificContext.trace(`Unifying the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution...`);
92
135
 
93
- const nodeA = substitutionNodeA, ///
94
- nodeB = substitutionNodeB, ///
95
- unifiedAtMetaLevel = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
136
+ const generalNode = generalSubstitutionNode, ///
137
+ specificNode = specificSubstitutionNode, ///
138
+ unifiedAtMetaLevel = metaLevelUnifier.unify(generalNode, specificNode, substitutions, generalContext, specificContext);
96
139
 
97
140
  if (unifiedAtMetaLevel) {
98
- localContextB.trace(`...unified the '${substitutionStringB}' substitution with the '${substitutionStringA}' substitution.`);
141
+ specificContext.trace(`...unified the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution.`);
99
142
  }
100
143
 
101
144
  unifiedAtMetaLevel ?
102
145
  substitutions.continue() :
103
- substitutions.rollback(localContextB);
146
+ substitutions.rollback(specificContext);
104
147
 
105
148
  substitutionResolved = unifiedAtMetaLevel; ///
106
149
  }
107
150
 
108
151
  if (substitutionResolved) {
109
- localContextB.debug(`...resolved the ${substitutionString} substitution.`);
152
+ specificContext.debug(`...resolved the ${substitutionString} substitution.`);
110
153
  }
111
154
 
112
155
  return substitutionResolved;
113
156
  }
114
157
 
115
- unifyStatement(statement, localContextA, localContextB) {
116
- let substitution = null;
158
+ unifyStatement(statement, generalContext, specificContext) {
159
+ let specificSubstitution = null;
117
160
 
118
161
  const { Substitutions } = shim,
119
162
  substitutions = Substitutions.fromNothing(),
120
- statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
163
+ statementUnified = this.statement.unifyStatement(statement, substitutions, generalContext, specificContext);
121
164
 
122
165
  if (statementUnified) {
123
166
  const substitutionsLength = substitutions.getLength();
@@ -125,45 +168,11 @@ export default class StatementForMetavariableSubstitution extends Substitution {
125
168
  if (substitutionsLength === 1) {
126
169
  const firstSubstitution = substitutions.getFirstSubstitution();
127
170
 
128
- substitution = firstSubstitution; ///
171
+ specificSubstitution = firstSubstitution; ///
129
172
  }
130
173
  }
131
174
 
132
- return substitution;
133
- }
134
-
135
- matchStatementNode(statementNode) {
136
- statementNode = stripBracketsFromStatementNode(statementNode); ///
137
-
138
- const statementNodeMatches = this.statement.matchStatementNode(statementNode);
139
-
140
- return statementNodeMatches;
141
- }
142
-
143
- matchMetavariableNode(metavariableNode) { return this.metavariable.matchMetavariableNode(metavariableNode); }
144
-
145
- matchSubstitutionNode(substitutionNode) {
146
- let substitutionNodeMatches;
147
-
148
- if ((substitutionNode === null) && (this.substitution === null)) {
149
- substitutionNodeMatches = true;
150
- } else if ((substitutionNode === null) && (this.substitution !== null)) {
151
- substitutionNodeMatches = false;
152
- } else if ((substitutionNode !== null) && (this.substitution === null)) {
153
- substitutionNodeMatches = false;
154
- } else {
155
- substitutionNodeMatches = this.substitution.matchSubstitutionNode(substitutionNode);
156
- }
157
-
158
- return substitutionNodeMatches;
159
- }
160
-
161
- matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
162
- const metavariableNodeMatches = this.matchMetavariableNode(metavariableNode),
163
- substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
164
- metavariableNodeAndSubstitutionNodeMatches = (metavariableNodeMatches && substitutionNodeMatches);
165
-
166
- return metavariableNodeAndSubstitutionNodeMatches;
175
+ return specificSubstitution;
167
176
  }
168
177
 
169
178
  toJSON() {
@@ -183,66 +192,107 @@ export default class StatementForMetavariableSubstitution extends Substitution {
183
192
 
184
193
  static fromJSON(json, fileContext) {
185
194
  const { string } = json,
195
+ lexer = fileContext.getLexer(),
196
+ parser = fileContext.getParser(),
197
+ substitutionString = string, ///
198
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
199
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
200
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
201
+ substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
202
+ substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
203
+ node = substitutionNode, ///
204
+ tokens = substitutionTokens, ///
186
205
  resolved = true,
187
206
  statement = statementFromJSON(json, fileContext),
188
207
  metavariable = metavariableFromJSON(json, fileContext),
189
208
  substitution = null, ///
190
- statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, resolved, statement, metavariable, substitution);
209
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
191
210
 
192
211
  return statementForMetavariableSubstitution;
193
212
  }
194
213
 
195
- static fromStatementAndMetavariable(statement, metavariable, localContext) {
214
+ static fromStatementAndMetavariable(statement, metavariable, context) {
196
215
  let statementNode = statement.getNode();
197
216
 
198
217
  statementNode = stripBracketsFromStatementNode(statementNode); ///
199
218
 
200
219
  const { Statement } = shim;
201
220
 
202
- statement = Statement.fromStatementNode(statementNode, localContext);
203
-
204
- const substitution = null,
221
+ statement = Statement.fromStatementNode(statementNode, context);
222
+
223
+ const lexer = context.getLexer(),
224
+ parser = context.getParser(),
225
+ string = stringFromStatementAndMetavariable(statement, metavariable),
226
+ substitutionString = string, ///
227
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
228
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
229
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
230
+ substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
231
+ substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
232
+ node = substitutionNode, ///
233
+ tokens = substitutionTokens, ///
205
234
  resolved = true,
206
- string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext),
207
- statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, resolved, statement, metavariable, substitution);
235
+ substitution = null,
236
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
208
237
 
209
238
  return statementForMetavariableSubstitution;
210
239
  }
211
240
 
212
- static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
241
+ static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context) {
213
242
  let statementNode = statement.getNode();
214
243
 
215
244
  statementNode = stripBracketsFromStatementNode(statementNode); ///
216
245
 
217
246
  const { Statement } = shim;
218
247
 
219
- statement = Statement.fromStatementNode(statementNode, localContext);
220
-
221
- const string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext),
248
+ statement = Statement.fromStatementNode(statementNode, context);
249
+
250
+ const lexer = context.getLexer(),
251
+ parser = context.getParser(),
252
+ string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context),
253
+ substitutionString = string, ///
254
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
255
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
256
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
257
+ substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
258
+ substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
259
+ node = substitutionNode, ///
260
+ tokens = substitutionTokens, ///
222
261
  resolved = false,
223
- statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, resolved, statement, metavariable, substitution);
262
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
224
263
 
225
264
  return statementForMetavariableSubstitution;
226
265
  }
227
266
  }
228
267
 
229
- function localContextFromLocalContextAndSubstitution(localContext, substitution) {
230
- substitution.setSubstitutionNodeAndTokens(localContext);
268
+ Object.assign(shim, {
269
+ StatementForMetavariableSubstitution
270
+ });
271
+
272
+ export default StatementForMetavariableSubstitution;
231
273
 
232
- const substitutionTokens = substitution.getSubstitutionTokens(),
233
- context = localContext, ///
234
- tokens = substitutionTokens; ///
274
+ function contextFromLocalContextAndSubstitution(context, substitution) {
275
+ const substitutionTokens = substitution.getTokens(),
276
+ tokens = substitutionTokens, ///
277
+ localContext = LocalContext.fromContextAndTokens(context, tokens); ///
235
278
 
236
- localContext = LocalContext.fromContextAndTokens(context, tokens); ///
279
+ context = localContext; ///
237
280
 
238
- return localContext;
281
+ return context;
282
+ }
283
+
284
+ function stringFromStatementAndMetavariable(statement, metavariable) {
285
+ const statementString = statement.getString(),
286
+ metavariableString = metavariable.getString(),
287
+ string = `[${statementString} for ${metavariableString}]`;
288
+
289
+ return string;
239
290
  }
240
291
 
241
- function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
292
+ function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution) {
242
293
  let string;
243
294
 
244
- const statementNode = statement.getNode(),
245
- statementString = localContext.nodeAsString(statementNode),
295
+ const statementString = statement.getString(),
246
296
  metavariableString = metavariable.getString();
247
297
 
248
298
  if (substitution === null) {
@@ -16,13 +16,11 @@ const termNodeQuery = nodeQuery("/substitution/term[0]"),
16
16
  substitutionNodeQuery = nodeQuery("/statement/substitution");
17
17
 
18
18
  export default class TermForVariableSubstitution extends Substitution {
19
- constructor(string, term, variable, substitutionNode, substitutionTokens) {
20
- super(string);
19
+ constructor(string, node, tokens, term, variable) {
20
+ super(string, node, tokens);
21
21
 
22
22
  this.term = term;
23
23
  this.variable = variable;
24
- this.substitutionNode = substitutionNode;
25
- this.substitutionTokens = substitutionTokens;
26
24
  }
27
25
 
28
26
  getTerm() {
@@ -33,35 +31,6 @@ export default class TermForVariableSubstitution extends Substitution {
33
31
  return this.variable;
34
32
  }
35
33
 
36
- getSubstitutionNode() {
37
- return this.substitutionNode;
38
- }
39
-
40
- getSubstitutionTokens() {
41
- return this.substitutionTokens;
42
- }
43
-
44
- getSubstitutionString() {
45
- const termString = this.term.getString(),
46
- variableString = this.variable.getString(),
47
- substitutionString = `[${termString} for ${variableString}]`;
48
-
49
- return substitutionString;
50
- }
51
-
52
- setSubstitutionNodeAndTokens(localContext) {
53
- const lexer = localContext.getLexer(),
54
- parser = localContext.getParser(),
55
- substitutionString = this.getSubstitutionString(),
56
- unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
57
- unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
58
- unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
59
-
60
- this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
61
-
62
- this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
63
- }
64
-
65
34
  isEqualTo(substitution) {
66
35
  let equalTo = false;
67
36
 
@@ -103,6 +72,8 @@ export default class TermForVariableSubstitution extends Substitution {
103
72
  }
104
73
 
105
74
  matchSubstitutionNode(substitutionNode) {
75
+ debugger
76
+
106
77
  let substitutionNodeMatches;
107
78
 
108
79
  if ((substitutionNode === null) && (this.substitutionNode === null)) {
@@ -118,7 +89,7 @@ export default class TermForVariableSubstitution extends Substitution {
118
89
  return substitutionNodeMatches;
119
90
  }
120
91
 
121
- unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
92
+ unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext) {
122
93
  let unifiedWithEquivalence;
123
94
 
124
95
  const termNode = this.term.getNode(),
@@ -136,7 +107,7 @@ export default class TermForVariableSubstitution extends Substitution {
136
107
  return unifiedWithEquivalence;
137
108
  }
138
109
 
139
- static fromStatementNode(statementNode, localContext) {
110
+ static fromStatementNode(statementNode, context) {
140
111
  let termForVariableSubstitution = null;
141
112
 
142
113
  const substitutionNode = substitutionNodeQuery(statementNode);
@@ -147,39 +118,47 @@ export default class TermForVariableSubstitution extends Substitution {
147
118
 
148
119
  if ((termNode !== null) && (variableNode !== null)) {
149
120
  const { Term, Variable } = shim,
150
- term = Term.fromTermNode(termNode, localContext),
151
- variable = Variable.fromVariableNode(variableNode, localContext),
152
- string = stringFromTermAndVariable(term, variable, localContext),
153
- substitutionTokens = localContext.nodeAsTokens(substitutionNode);
121
+ term = Term.fromTermNode(termNode, context),
122
+ variable = Variable.fromVariableNode(variableNode, context),
123
+ node = substitutionNode, ///
124
+ tokens = context.nodeAsTokens(node),
125
+ string = stringFromTermAndVariable(term, variable);
154
126
 
155
- termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
127
+ termForVariableSubstitution = new TermForVariableSubstitution(string, node, tokens, term, variable);
156
128
  }
157
129
  }
158
130
 
159
131
  return termForVariableSubstitution;
160
132
  }
161
133
 
162
- static fromTernAndVariable(term, variable, localContext) {
134
+ static fromTernAndVariable(term, variable, context) {
163
135
  let termNode = term.getNode();
164
136
 
165
137
  termNode = stripBracketsFromTermNode(termNode); ///
166
138
 
167
139
  const { Term } = shim;
168
140
 
169
- term = Term.fromTermNode(termNode, localContext);
141
+ term = Term.fromTermNode(termNode, context);
170
142
 
171
- const string = stringFromTermAndVariable(term, variable, localContext),
172
- substitutionNode = null,
173
- substitutionTokens = null,
174
- termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
143
+ const lexer = context.getLexer(),
144
+ parser = context.getParser(),
145
+ string = stringFromTermAndVariable(term, variable),
146
+ substitutionString = string, ///
147
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
148
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
149
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
150
+ substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
151
+ substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
152
+ node = substitutionNode, //
153
+ tokens = substitutionTokens, ///
154
+ termForVariableSubstitution = new TermForVariableSubstitution(string, node, tokens, term, variable);
175
155
 
176
156
  return termForVariableSubstitution;
177
157
  }
178
158
  }
179
159
 
180
- function stringFromTermAndVariable(term, variable, localContext) {
181
- const termNode = term.getNode(),
182
- termString = localContext.nodeAsString(termNode),
160
+ function stringFromTermAndVariable(term, variable) {
161
+ const termString = term.getString(),
183
162
  variableString = variable.getString(),
184
163
  string = `[${termString} for ${variableString}]`;
185
164
 
@@ -3,14 +3,24 @@
3
3
  import shim from "./shim";
4
4
 
5
5
  class Substitution {
6
- constructor(string) {
6
+ constructor(string, node, tokens) {
7
7
  this.string = string;
8
+ this.node = node;
9
+ this.tokens = tokens;
8
10
  }
9
11
 
10
12
  getString() {
11
13
  return this.string;
12
14
  }
13
15
 
16
+ getNode() {
17
+ return this.node;
18
+ }
19
+
20
+ getTokens() {
21
+ return this.tokens;
22
+ }
23
+
14
24
  getTerm() {
15
25
  const term = null;
16
26
 
@@ -60,7 +70,7 @@ class Substitution {
60
70
  return equalTo;
61
71
  }
62
72
 
63
- resolve(substitutions, localContext) {
73
+ resolve(substitutions, context) {
64
74
  const resolved = true;
65
75
 
66
76
  return resolved;
@@ -102,15 +112,15 @@ class Substitution {
102
112
  return metavariableNodeAndSubstitutionNodeMatches;
103
113
  }
104
114
 
105
- unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
115
+ unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext) {
106
116
  let unifiedWithEquivalence = false;
107
117
 
108
118
  return unifiedWithEquivalence;
109
119
  }
110
120
 
111
- unifyWithEquivalences(equivalences, substitutions, localContextA, localContextB) {
121
+ unifyWithEquivalences(equivalences, substitutions, generalContext, specificContext) {
112
122
  const unifiedWithEquivalences = equivalences.some((equivalence) => {
113
- const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB);
123
+ const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext);
114
124
 
115
125
  if (substitutionUnifiedWithEquivalence) {
116
126
  return true;
@@ -186,15 +186,15 @@ class Substitutions {
186
186
  return substitutionPresent;
187
187
  }
188
188
 
189
- addSubstitution(substitution, localContext) {
189
+ addSubstitution(substitution, context) {
190
190
  this.array.push(substitution);
191
191
 
192
192
  const substitutionString = substitution.getString();
193
193
 
194
- localContext.trace(`Added the ${substitutionString} substitution.`);
194
+ context.trace(`Added the ${substitutionString} substitution.`);
195
195
  }
196
196
 
197
- removeSubstitution(substitution, localContext) {
197
+ removeSubstitution(substitution, context) {
198
198
  const substitutionA = substitution; ///
199
199
 
200
200
  prune(this.array, (substitution) => {
@@ -207,13 +207,13 @@ class Substitutions {
207
207
 
208
208
  const substitutionString = substitution.getString();
209
209
 
210
- localContext.trace(`Removed the ${substitutionString} substitution.`);
210
+ context.trace(`Removed the ${substitutionString} substitution.`);
211
211
  }
212
212
 
213
- unifyWithEquivalences(equivalences, localContext) {
213
+ unifyWithEquivalences(equivalences, context) {
214
214
  const unifiedWithEquivalences = this.everySubstitution((substitution) => {
215
215
  const substitutions = this, ///
216
- substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, localContext);
216
+ substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, context);
217
217
 
218
218
  if (substitutionUnifiedWithEquivalence) {
219
219
  return true;
@@ -223,7 +223,7 @@ class Substitutions {
223
223
  return unifiedWithEquivalences;
224
224
  }
225
225
 
226
- resolve(localContextA, localContextB) {
226
+ resolve(generalContext, specificContext) {
227
227
  const metavariableNodes = this.getMetavariableNodes();
228
228
 
229
229
  metavariableNodes.forEach((metavariableNode) => {
@@ -237,7 +237,7 @@ class Substitutions {
237
237
  resolved = substitution.isResolved();
238
238
 
239
239
  if (!resolved) {
240
- substitution.resolve(substitutions, localContextA, localContextB);
240
+ substitution.resolve(substitutions, generalContext, specificContext);
241
241
  }
242
242
  });
243
243
 
@@ -273,7 +273,7 @@ class Substitutions {
273
273
  ];
274
274
  }
275
275
 
276
- rollback(localContext) {
276
+ rollback(context) {
277
277
  const array = [
278
278
  ...this.array
279
279
  ];
@@ -281,7 +281,7 @@ class Substitutions {
281
281
  leftDifference(array, this.savedArray);
282
282
 
283
283
  array.forEach((substitution) => {
284
- this.removeSubstitution(substitution, localContext);
284
+ this.removeSubstitution(substitution, context);
285
285
  });
286
286
 
287
287
  this.array = [
@@ -295,9 +295,9 @@ class Substitutions {
295
295
  this.savedArray = null;
296
296
  }
297
297
 
298
- getString(localContextA, localContextB) {
298
+ getString(generalContext, specificContext) {
299
299
  let string = this.array.reduce((string, substitution) => {
300
- const substitutionString = substitution.getString(localContextA, localContextB);
300
+ const substitutionString = substitution.getString(generalContext, specificContext);
301
301
 
302
302
  string = (string === null) ?
303
303
  substitutionString :