occam-verify-cli 0.0.534 → 0.0.536

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.
package/src/equality.js CHANGED
@@ -1,6 +1,18 @@
1
1
  "use strict";
2
2
 
3
+ import matcher from "./matcher";
4
+ import Verifier from "./verifier";
5
+ import verifyTerm from "./verify/term";
6
+ import equalityStatementNode from "./node/statement/equality";
7
+
8
+ import { nodeQuery } from "./utilities/query";
9
+ import { first, second } from "./utilities/array";
3
10
  import { TERM_RULE_NAME } from "./ruleNames";
11
+ import { EQUALITY_DEPTH } from "./constants";
12
+ import { verifyTermAsVariable } from "./verify/term";
13
+
14
+ const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
15
+ rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!");
4
16
 
5
17
  export default class Equality {
6
18
  constructor(leftTermNode, rightTermNode) {
@@ -16,7 +28,7 @@ export default class Equality {
16
28
  return this.rightTermNode;
17
29
  }
18
30
 
19
- matchTermNodes(leftTermNode, rightTermNode, reversed, context) {
31
+ matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context) {
20
32
  let leftTermNodeAndRightTermNodeMatch = true;
21
33
 
22
34
  if (leftTermNodeAndRightTermNodeMatch) {
@@ -24,9 +36,9 @@ export default class Equality {
24
36
  this.rightTermNode :
25
37
  this.leftTermNode, ///
26
38
  rightNonTerminalNode = leftTermNode, ///
27
- nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, context);
39
+ nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
28
40
 
29
- leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
41
+ leftTermNodeAndRightTermNodeMatch = nonTerminalNodeVerified; ///
30
42
  }
31
43
 
32
44
  if (leftTermNodeAndRightTermNodeMatch) {
@@ -34,30 +46,32 @@ export default class Equality {
34
46
  this.leftTermNode :
35
47
  this.rightTermNode, ///
36
48
  rightNonTerminalNode = rightTermNode, ///
37
- nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, context);
49
+ nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
38
50
 
39
- leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
51
+ leftTermNodeAndRightTermNodeMatch = nonTerminalNodeVerified; ///
40
52
  }
41
53
 
42
54
  return leftTermNodeAndRightTermNodeMatch;
43
55
  }
44
56
 
45
- match(equality, context) {
57
+ match(equality, equalities, context) {
46
58
  let matches = false;
47
59
 
48
60
  const leftTermNode = equality.getLeftTermNode(),
49
61
  rightTermNode = equality.getRightTermNode();
50
62
 
63
+ equalities = filterEqualities(equalities, equality); ///
64
+
51
65
  if (!matches) {
52
66
  const reversed = false,
53
- leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, context);
67
+ leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context);
54
68
 
55
69
  matches = leftTermNodeAndRightTermNodeMatch; ///
56
70
  }
57
71
 
58
72
  if (!matches) {
59
73
  const reversed = true,
60
- leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, context);
74
+ leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context);
61
75
 
62
76
  matches = leftTermNodeAndRightTermNodeMatch; ///
63
77
  }
@@ -65,13 +79,43 @@ export default class Equality {
65
79
  return matches;
66
80
  }
67
81
 
68
- equate(context) {
82
+ verify(equalities, context) {
69
83
  const leftNonTerminalNode = this.leftTermNode, ///
70
84
  rightNonTerminalNode = this.rightTermNode, ///
71
- nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, context),
72
- equates = nonTerminalNodeEquates; ///
85
+ nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context),
86
+ verified = nonTerminalNodeVerified; ///
87
+
88
+ return verified;
89
+ }
90
+
91
+ static fromProofStep(proofStep) {
92
+ let equality = null;
93
+
94
+ const statementNode = proofStep.getStatementNode();
95
+
96
+ if (statementNode !== null) {
97
+ const nodeA = statementNode, ///
98
+ nodeB = equalityStatementNode, ///
99
+ depth = EQUALITY_DEPTH,
100
+ nodeMatches = matcher.matchNode(nodeA, nodeB, depth);
101
+
102
+ if (nodeMatches) {
103
+ const leftTermNode = leftTermNodeQuery(statementNode),
104
+ rightTermNode = rightTermNodeQuery(statementNode);
105
+
106
+ equality = new Equality(leftTermNode, rightTermNode);
107
+ }
108
+ }
109
+
110
+ return equality;
111
+ }
73
112
 
74
- return equates;
113
+ static fromStatementNode(statementNode) {
114
+ const leftTermNode = leftTermNodeQuery(statementNode),
115
+ rightTermNode = rightTermNodeQuery(statementNode),
116
+ equality = new Equality(leftTermNode, rightTermNode);
117
+
118
+ return equality;
75
119
  }
76
120
 
77
121
  static fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
@@ -81,108 +125,138 @@ export default class Equality {
81
125
  }
82
126
  }
83
127
 
84
- function equateNode(nodeA, nodeB, context) {
85
- let nodeEquates = false;
128
+ class EqualityVerifier extends Verifier {
129
+ verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context) {
130
+ let nonTerminalNodeVerified = false;
86
131
 
87
- const nodeATerminalNode = nodeA.isTerminalNode(),
88
- nodeBTerminalNode = nodeB.isTerminalNode();
132
+ const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
133
+ rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
89
134
 
90
- if (nodeATerminalNode === nodeBTerminalNode) {
91
- if (nodeATerminalNode) {
92
- const terminalNodeA = nodeA, ///
93
- terminalNodeB = nodeB, ///
94
- terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, context);
135
+ if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
136
+ const ruleName = leftNonTerminalNodeRuleName, ///
137
+ ruleNameTermRuleName = (ruleName === TERM_RULE_NAME);
95
138
 
96
- nodeEquates = terminalNodeEquates; ///
97
- } else {
98
- const nonTerminalNodeA = nodeA, ///
99
- nonTerminalNodeB = nodeB, ///
100
- nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context);
139
+ if (ruleNameTermRuleName) {
140
+ const leftTermNode = leftNonTerminalNode, ///
141
+ rightTermNode = rightNonTerminalNode, ///
142
+ termNodeVerified = this.verifyTermNode(leftTermNode, rightTermNode, equalities, context);
143
+
144
+ nonTerminalNodeVerified = termNodeVerified; ///
145
+ }
101
146
 
102
- nodeEquates = nonTerminalNodeEquates; ///
147
+ if (!nonTerminalNodeVerified) {
148
+ const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
149
+ rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
150
+ leftNodes = leftNonTerminalNodeChildNodes, ///
151
+ rightNodes = rightNonTerminalNodeChildNodes, ///
152
+ nodesVerified = this.verifyNodes(leftNodes, rightNodes, equalities, context);
153
+
154
+ nonTerminalNodeVerified = nodesVerified; ///
155
+ }
103
156
  }
157
+
158
+ return nonTerminalNodeVerified;
104
159
  }
105
160
 
106
- return nodeEquates;
107
- }
161
+ verifyTermNode(leftTermNode, rightTermNode, equalities, context) {
162
+ let termNodeVerified = false;
108
163
 
109
- function equateNodes(leftNodes, rightNodes, context) {
110
- let nodesEquate = false;
164
+ const variables = [],
165
+ leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
166
+ rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
111
167
 
112
- const leftNodesLength = leftNodes.length,
113
- rightNodesLength = rightNodes.length;
168
+ let equality = null;
114
169
 
115
- if (leftNodesLength === rightNodesLength) {
116
- nodesEquate = leftNodes.every((LeftNode, index) => {
117
- const rightNode = rightNodes[index],
118
- nodeEquates = equateNode(LeftNode, rightNode, context);
170
+ if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
171
+ const firstVariable = first(variables),
172
+ secondVariable = second(variables),
173
+ leftVariable = firstVariable, ///
174
+ rightVariable = secondVariable, ///
175
+ leftVariableType = leftVariable.getType(),
176
+ rightVariableType = rightVariable.getType(),
177
+ leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
119
178
 
120
- if (nodeEquates) {
121
- return true;
179
+ if (leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
180
+ equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
122
181
  }
123
- });
124
- }
182
+ } else if (leftTermVerifiedAsVariable) {
183
+ const types = [];
125
184
 
126
- return nodesEquate;
127
- }
185
+ verifyTerm(rightTermNode, types, context);
128
186
 
129
- function equateTerminalNode(terminalNodeA, terminalNodeB, context) {
130
- const matches = terminalNodeA.match(terminalNodeB),
131
- terminalNodeEquates = matches; ///
187
+ const firstType = first(types),
188
+ firstVariable = first(variables),
189
+ leftVariable = firstVariable, ///
190
+ rightTermType = firstType, ///
191
+ leftVariableType = leftVariable.getType(),
192
+ leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
132
193
 
133
- return terminalNodeEquates;
134
- }
194
+ if (leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
195
+ equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
196
+ }
197
+ } else if (rightTermVerifiedAsVariable) {
198
+ const types = [];
135
199
 
136
- function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, context) {
137
- let nonTerminalNodeEquates = false;
200
+ verifyTerm(leftTermNode, types, context);
138
201
 
139
- const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
140
- rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
202
+ const firstType = first(types),
203
+ firstVariable = first(variables),
204
+ leftTermType = firstType, ///
205
+ rightVariable = firstVariable, ///
206
+ rightVariableType = rightVariable.getType(),
207
+ rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
141
208
 
142
- if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
143
- const ruleName = leftNonTerminalNodeRuleName, ///
144
- ruleNameTermRuleName = (ruleName === TERM_RULE_NAME);
209
+ if (rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
210
+ equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
211
+ }
212
+ } else {
213
+ const types = [];
145
214
 
146
- if (ruleNameTermRuleName) {
147
- const leftTermNode = leftNonTerminalNode, ///
148
- rightTermNode = rightNonTerminalNode, ///
149
- termNodeEquates = equateTermNode(leftTermNode, rightTermNode, context);
215
+ verifyTerm(leftTermNode, types, context);
150
216
 
151
- nonTerminalNodeEquates = termNodeEquates; ///
217
+ verifyTerm(rightTermNode, types, context);
218
+
219
+ const firstType = first(types),
220
+ secondType = second(types),
221
+ leftTermType = firstType, ///
222
+ rightTermType = secondType, ///
223
+ leftTermTypeEqualToRightTermType = leftTermType.isEqualTo(rightTermType);
224
+
225
+ if (leftTermTypeEqualToRightTermType) {
226
+ equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
227
+ }
152
228
  }
153
229
 
154
- if (!nonTerminalNodeEquates) {
155
- const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
156
- rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
157
- leftNodes = leftNonTerminalNodeChildNodes, ///
158
- rightNodes = rightNonTerminalNodeChildNodes, ///
159
- nodesEquate = equateNodes(leftNodes, rightNodes, context);
230
+ if (equality !== null) {
231
+ const equalityA = equality, ///
232
+ equalitiesB = equalities, ///
233
+ equalityMatches = equalitiesB.some((equalityB) => { ///
234
+ const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, context);
160
235
 
161
- nonTerminalNodeEquates = nodesEquate; ///
236
+ if (equalityAMatchesEqualityB) {
237
+ return true;
238
+ }
239
+ });
240
+
241
+ termNodeVerified = equalityMatches; ///
162
242
  }
163
- }
164
243
 
165
- return nonTerminalNodeEquates;
244
+ return termNodeVerified;
245
+ }
166
246
  }
167
247
 
168
- function equateTermNode(leftTermNode, rightTermNode, context) {
169
- let termNodeEquates = false;
170
-
171
- const equality = equalityFromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, context);
248
+ const equalityVerifier = new EqualityVerifier();
172
249
 
173
- if (equality !== null) {
174
- const equalityA = equality, ///
175
- equalitiesB = equalities, ///
176
- equalityMatches = equalitiesB.some((equalityB) => { ///
177
- const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, context);
250
+ function filterEqualities(equalities, equality) {
251
+ const equalityA = equality; ///
178
252
 
179
- if (equalityAMatchesEqualityB) {
180
- return true;
181
- }
182
- });
253
+ equalities = equalities.filter((equality) => {
254
+ const equalityB = equality; ///
183
255
 
184
- termNodeEquates = equalityMatches; ///
185
- }
256
+ if (equalityA !== equalityB) {
257
+ return true;
258
+ }
259
+ });
186
260
 
187
- return termNodeEquates;
261
+ return equalities;
188
262
  }
package/src/log.js CHANGED
@@ -110,14 +110,16 @@ function formatMessage(level, message, node = null, tokens = null, filePath = nu
110
110
  message = `${upperCaseLevel}: ${message}`;
111
111
  } else {
112
112
  const leastLineIndex = leastLineIndexFromNodeAndTokens(node, tokens),
113
- greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens);
113
+ leastLineNumber = leastLineIndex + 1,
114
+ greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens),
115
+ greatestLineNumber = greatestLineIndex + 1;
114
116
 
115
- if (leastLineIndex === greatestLineIndex) {
116
- const lineIndex = leastLineIndex; ///
117
+ if (leastLineNumber === greatestLineNumber) {
118
+ const lineNumber = leastLineNumber; ///
117
119
 
118
- message = `${upperCaseLevel}: ${filePath} (${lineIndex}) - ${message}`;
120
+ message = `${upperCaseLevel}: ${filePath} (${lineNumber}) - ${message}`;
119
121
  } else {
120
- message = `${upperCaseLevel}: ${filePath} (${leastLineIndex}-${greatestLineIndex}) - ${message}`;
122
+ message = `${upperCaseLevel}: ${filePath} (${leastLineNumber}-${greatestLineNumber}) - ${message}`;
121
123
  }
122
124
  }
123
125
 
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import { statementNodeFromStatementString } from "../../utilities/node";
4
+
5
+ const equalityStatementString = "n=m";
6
+
7
+ const equalityStatementNode = statementNodeFromStatementString(equalityStatementString);
8
+
9
+ export default equalityStatementNode;
package/src/premise.js CHANGED
@@ -43,9 +43,9 @@ export default class Premise {
43
43
  const subproofStatementNode = subproofStatementNodes[index],
44
44
  nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
45
45
  nonTerminalNodeB = subproofStatementNode, ///
46
- nonTerminalNodeVerifies = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
46
+ nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
47
47
 
48
- if (nonTerminalNodeVerifies) {
48
+ if (nonTerminalNodeVerified) {
49
49
  return true;
50
50
  }
51
51
  });
@@ -58,8 +58,8 @@ export default class Premise {
58
58
  matchStatementNode(statementNode, substitutions) {
59
59
  const nonTerminalNodeA = this.metastatementNode, ///
60
60
  nonTerminalNodeB = statementNode, ///
61
- nonTerminalNodeVerifies = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
62
- statementNodeMatches = nonTerminalNodeVerifies; ///
61
+ nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
62
+ statementNodeMatches = nonTerminalNodeVerified; ///
63
63
 
64
64
  return statementNodeMatches;
65
65
  }
@@ -85,9 +85,9 @@ export default class Premise {
85
85
  const ruleSubproofMetastatementNode = ruleSubproofMetastatementNodes[index],
86
86
  nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
87
87
  nonTerminalNodeB = ruleSubproofMetastatementNode, ///
88
- nonTerminalNodeVerifies = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
88
+ nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
89
89
 
90
- if (nonTerminalNodeVerifies) {
90
+ if (nonTerminalNodeVerified) {
91
91
  return true;
92
92
  }
93
93
  });
@@ -100,8 +100,8 @@ export default class Premise {
100
100
  matchMetastatementNode(metastatementNode, substitutions) {
101
101
  const nonTerminalNodeA = this.metastatementNode, ///
102
102
  nonTerminalNodeB = metastatementNode, ///
103
- nonTerminalNodeVerifies = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
104
- metastatementNodeMatches = nonTerminalNodeVerifies; ///
103
+ nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
104
+ metastatementNodeMatches = nonTerminalNodeVerified; ///
105
105
 
106
106
  return metastatementNodeMatches;
107
107
  }
@@ -40,9 +40,9 @@ export default class Supposition {
40
40
  const subproofStatementNode = subproofStatementNodes[index],
41
41
  nonTerminalNodeA = subproofAssertionStatementNode, ///
42
42
  nonTerminalNodeB = subproofStatementNode, ///
43
- nonTerminalNodeVerifies = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
43
+ nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
44
44
 
45
- if (nonTerminalNodeVerifies) {
45
+ if (nonTerminalNodeVerified) {
46
46
  return true;
47
47
  }
48
48
  });
@@ -55,8 +55,8 @@ export default class Supposition {
55
55
  matchStatementNode(statementNode, substitutions) {
56
56
  const nonTerminalNodeA = this.statementNode, ///
57
57
  nonTerminalNodeB = statementNode, ///
58
- nonTerminalNodeVerifies = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
59
- statementNodeMatches = nonTerminalNodeVerifies; ///
58
+ nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
59
+ statementNodeMatches = nonTerminalNodeVerified; ///
60
60
 
61
61
  return statementNodeMatches;
62
62
  }
package/src/type.js CHANGED
@@ -60,19 +60,28 @@ export default class Type {
60
60
  }
61
61
 
62
62
  isEqualToOrSubTypeOf(type) {
63
- const equalToType = this.isEqualTo(type),
64
- subTypeOfType = this.isSubTypeOf(type),
65
- equalToTypeOrSubTypeOf = (equalToType || subTypeOfType);
63
+ const equalTo = this.isEqualTo(type),
64
+ subTypeOf = this.isSubTypeOf(type),
65
+ equalToOrSubTypeOf = (equalTo || subTypeOf);
66
66
 
67
- return equalToTypeOrSubTypeOf;
67
+ return equalToOrSubTypeOf;
68
68
  }
69
69
 
70
70
  isEqualToOrSuperTypeOf(type) {
71
- const equalToType = this.isEqualTo(type),
72
- superTypeOfType = this.isSuperTypeOf(type),
73
- equalToTypeOrSuperTypeOf = (equalToType || superTypeOfType);
71
+ const equalTo = this.isEqualTo(type),
72
+ superTypeOf = this.isSuperTypeOf(type),
73
+ equalToOrSuperTypeOf = (equalTo || superTypeOf);
74
+
75
+ return equalToOrSuperTypeOf;
76
+ }
77
+
78
+ isEqualToOrSubTypeOfOfSuperTypeOf(type) {
79
+ const equalTo = this.isEqualTo(type),
80
+ subTypeOf = this.isSubTypeOf(type),
81
+ superTypeOf = this.isSuperTypeOf(type),
82
+ equalToOrSubTypeOfOfSuperTypeOf = (equalTo || subTypeOf || superTypeOf);
74
83
 
75
- return equalToTypeOrSuperTypeOf;
84
+ return equalToOrSubTypeOfOfSuperTypeOf;
76
85
  }
77
86
 
78
87
  match(type) {
package/src/variable.js CHANGED
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  export default class Variable {
4
- constructor(type, name, termNode) {
4
+ constructor(type, name) {
5
5
  this.type = type;
6
6
  this.name = name;
7
- this.termNode = termNode;
8
7
  }
9
8
 
10
9
  getType() {
@@ -15,14 +14,6 @@ export default class Variable {
15
14
  return this.name;
16
15
  }
17
16
 
18
- getTermNode() {
19
- return this.termNode;
20
- }
21
-
22
- isUndefined() {
23
- return (this.termNode === null);
24
- }
25
-
26
17
  matchName(name) {
27
18
  const matchesName = (this.name === name);
28
19
 
@@ -37,14 +28,7 @@ export default class Variable {
37
28
  }
38
29
 
39
30
  static fromTypeAndName(type, name) {
40
- const termNode = null,
41
- variable = new Variable(type, name, termNode);
42
-
43
- return variable;
44
- }
45
-
46
- static fromTypeNameAndTermNode(type, name, termNode) {
47
- const variable = new Variable(type, name, termNode);
31
+ const variable = new Variable(type, name);
48
32
 
49
33
  return variable;
50
34
  }
@@ -11,7 +11,7 @@ const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!');
11
11
 
12
12
  export default class MetastatementForMetavariableVerifier extends Verifier {
13
13
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
14
- let nonTerminalNodeVerifies = false;
14
+ let nonTerminalNodeVerified = false;
15
15
 
16
16
  const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
17
17
  nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
@@ -23,37 +23,37 @@ export default class MetastatementForMetavariableVerifier extends Verifier {
23
23
  if (nonTerminalNodeARuleNameMetastatementRuleName && nonTerminalNodeBRuleNameMetastatementRuleName) {
24
24
  const metastatementNodeA = nonTerminalNodeA, ///
25
25
  metastatementNodeB = nonTerminalNodeB, ///
26
- metastatementNodeVerifies = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions);
26
+ metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions);
27
27
 
28
- if (metastatementNodeVerifies) {
29
- nonTerminalNodeVerifies = true; ///
28
+ if (metastatementNodeVerified) {
29
+ nonTerminalNodeVerified = true; ///
30
30
  } else {
31
- nonTerminalNodeVerifies = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
31
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
32
32
  }
33
33
  } else {
34
- nonTerminalNodeVerifies = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
34
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
35
35
  }
36
36
  }
37
37
 
38
- return nonTerminalNodeVerifies;
38
+ return nonTerminalNodeVerified;
39
39
  }
40
40
 
41
41
  verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions) {
42
- let metastatementNodeVerifies = false;
42
+ let metastatementNodeVerified = false;
43
43
 
44
44
  const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
45
45
 
46
46
  if (metavariableNodeA !== null) {
47
- const metaVariableNodeVerifies = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions);
47
+ const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions);
48
48
 
49
- metastatementNodeVerifies = metaVariableNodeVerifies; ///
49
+ metastatementNodeVerified = metaVariableNodeVerified; ///
50
50
  }
51
51
 
52
- return metastatementNodeVerifies;
52
+ return metastatementNodeVerified;
53
53
  }
54
54
 
55
55
  verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions) {
56
- let metavariableNodeVerifies;
56
+ let metavariableNodeVerified;
57
57
 
58
58
  const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
59
59
  substitution = substitutions.find((substitution) => {
@@ -66,9 +66,9 @@ export default class MetastatementForMetavariableVerifier extends Verifier {
66
66
 
67
67
  if (substitution !== null) {
68
68
  const metastatementNode = metastatementNodeB, ///
69
- substitutionNodesMatch = substitution.verifyMetastatementNode(metastatementNode);
69
+ metastatementNodeMatches = substitution.matchMetastatementNode(metastatementNode);
70
70
 
71
- metavariableNodeVerifies = substitutionNodesMatch; ///
71
+ metavariableNodeVerified = metastatementNodeMatches; ///
72
72
  } else {
73
73
  const { createSubstitutions } = this.constructor;
74
74
 
@@ -81,9 +81,9 @@ export default class MetastatementForMetavariableVerifier extends Verifier {
81
81
  substitutions.push(substitution);
82
82
  }
83
83
 
84
- metavariableNodeVerifies = true;
84
+ metavariableNodeVerified = true;
85
85
  }
86
86
 
87
- return metavariableNodeVerifies;
87
+ return metavariableNodeVerified;
88
88
  }
89
89
  }