occam-verify-cli 0.0.678 → 0.0.680

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 (141) hide show
  1. package/bin/action/verify.js +13 -3
  2. package/lib/axiomLemmaTheoremConjecture.js +3 -3
  3. package/lib/conclusion.js +16 -5
  4. package/lib/consequent.js +11 -3
  5. package/lib/context/file.js +73 -3
  6. package/lib/context/release.js +7 -2
  7. package/lib/equality.js +13 -199
  8. package/lib/premise.js +24 -7
  9. package/lib/supposition.js +15 -4
  10. package/lib/type.js +3 -8
  11. package/lib/utilities/array.js +5 -2
  12. package/lib/utilities/string.js +26 -13
  13. package/lib/verifier/node/metastatement.js +176 -0
  14. package/lib/verifier/node/statementAsCombinator.js +186 -0
  15. package/lib/verifier/node/termAsConstructor.js +224 -0
  16. package/lib/verifier/node.js +158 -0
  17. package/lib/verifier/nodes/equality.js +155 -0
  18. package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/conclusion.js +13 -12
  19. package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/premise.js +13 -12
  20. package/lib/verifier/nodes/metastatementForMetavariable.js +198 -0
  21. package/lib/verifier/nodes/statement.js +200 -0
  22. package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/conclusion.js +13 -12
  23. package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/premise.js +13 -12
  24. package/lib/verifier/nodes/statementForMetavariable.js +203 -0
  25. package/lib/verifier/nodes/term.js +210 -0
  26. package/lib/verifier/{termForVariable/supposition.js → nodes/termForVariable/consequent.js} +13 -12
  27. package/lib/verifier/{termForVariable/consequent.js → nodes/termForVariable/supposition.js} +13 -12
  28. package/lib/verifier/nodes/termForVariable.js +217 -0
  29. package/lib/verifier/nodes.js +175 -0
  30. package/lib/verify/axiom.js +3 -3
  31. package/lib/verify/conclusion.js +3 -3
  32. package/lib/verify/conjecture.js +3 -3
  33. package/lib/verify/consequent.js +3 -3
  34. package/lib/verify/declaration/combinator.js +7 -2
  35. package/lib/verify/declaration/constructor.js +8 -2
  36. package/lib/verify/declaration/metavariable.js +7 -2
  37. package/lib/verify/declaration/type.js +7 -2
  38. package/lib/verify/declaration/variable.js +8 -2
  39. package/lib/verify/file.js +3 -3
  40. package/lib/verify/label.js +9 -4
  41. package/lib/verify/lemma.js +3 -3
  42. package/lib/verify/metastatement/qualified.js +5 -6
  43. package/lib/verify/metastatement/unqualified.js +9 -7
  44. package/lib/verify/metastatement.js +36 -156
  45. package/lib/verify/metavariable.js +6 -4
  46. package/lib/verify/premise.js +3 -3
  47. package/lib/verify/release.js +3 -3
  48. package/lib/verify/rule.js +3 -3
  49. package/lib/verify/statement/qualified.js +5 -6
  50. package/lib/verify/statement/unqualified.js +9 -7
  51. package/lib/verify/statement.js +86 -332
  52. package/lib/verify/statementAsCombinator.js +8 -82
  53. package/lib/verify/supposition.js +3 -3
  54. package/lib/verify/term.js +79 -215
  55. package/lib/verify/termAsConstructor.js +15 -89
  56. package/lib/verify/terms.js +45 -0
  57. package/lib/verify/theorem.js +3 -3
  58. package/lib/verify/type.js +7 -5
  59. package/lib/verify/typeAssertion.js +124 -0
  60. package/lib/verify/variable.js +7 -5
  61. package/package.json +5 -5
  62. package/src/axiomLemmaTheoremConjecture.js +2 -2
  63. package/src/conclusion.js +13 -4
  64. package/src/consequent.js +9 -2
  65. package/src/context/file.js +9 -2
  66. package/src/context/release.js +9 -2
  67. package/src/equality.js +17 -143
  68. package/src/premise.js +23 -6
  69. package/src/supposition.js +12 -3
  70. package/src/type.js +3 -8
  71. package/src/utilities/array.js +1 -1
  72. package/src/utilities/string.js +34 -23
  73. package/src/verifier/node/metastatement.js +61 -0
  74. package/src/verifier/node/statementAsCombinator.js +80 -0
  75. package/src/verifier/node/termAsConstructor.js +124 -0
  76. package/src/verifier/node.js +85 -0
  77. package/src/verifier/nodes/equality.js +68 -0
  78. package/src/verifier/nodes/metastatementForMetavariable/conclusion.js +11 -0
  79. package/src/verifier/nodes/metastatementForMetavariable/premise.js +11 -0
  80. package/src/verifier/{metastatementForMetavariable.js → nodes/metastatementForMetavariable.js} +13 -13
  81. package/src/verifier/nodes/statement.js +100 -0
  82. package/src/verifier/nodes/statementForMetavariable/conclusion.js +11 -0
  83. package/src/verifier/nodes/statementForMetavariable/premise.js +11 -0
  84. package/src/verifier/{statementForMetavariable.js → nodes/statementForMetavariable.js} +10 -10
  85. package/src/verifier/nodes/term.js +106 -0
  86. package/src/verifier/nodes/termForVariable/consequent.js +11 -0
  87. package/src/verifier/nodes/termForVariable/supposition.js +11 -0
  88. package/src/verifier/{termForVariable.js → nodes/termForVariable.js} +42 -30
  89. package/src/verifier/nodes.js +111 -0
  90. package/src/verify/axiom.js +2 -2
  91. package/src/verify/conclusion.js +2 -2
  92. package/src/verify/conjecture.js +2 -2
  93. package/src/verify/consequent.js +2 -2
  94. package/src/verify/declaration/combinator.js +9 -1
  95. package/src/verify/declaration/constructor.js +15 -1
  96. package/src/verify/declaration/metavariable.js +9 -1
  97. package/src/verify/declaration/type.js +14 -1
  98. package/src/verify/declaration/variable.js +15 -1
  99. package/src/verify/file.js +2 -2
  100. package/src/verify/label.js +10 -2
  101. package/src/verify/lemma.js +4 -4
  102. package/src/verify/metastatement/qualified.js +4 -6
  103. package/src/verify/metastatement/unqualified.js +9 -7
  104. package/src/verify/metastatement.js +35 -56
  105. package/src/verify/metavariable.js +6 -3
  106. package/src/verify/premise.js +2 -2
  107. package/src/verify/release.js +2 -2
  108. package/src/verify/rule.js +2 -2
  109. package/src/verify/statement/qualified.js +4 -6
  110. package/src/verify/statement/unqualified.js +9 -7
  111. package/src/verify/statement.js +109 -302
  112. package/src/verify/statementAsCombinator.js +9 -129
  113. package/src/verify/supposition.js +2 -2
  114. package/src/verify/term.js +99 -156
  115. package/src/verify/termAsConstructor.js +20 -135
  116. package/src/verify/terms.js +54 -0
  117. package/src/verify/theorem.js +2 -2
  118. package/src/verify/type.js +7 -4
  119. package/src/verify/typeAssertion.js +164 -0
  120. package/src/verify/variable.js +7 -4
  121. package/lib/node/statement/combinator/equality.js +0 -21
  122. package/lib/ocmbinator/equality.js +0 -126
  123. package/lib/tokens/statement/combinator/equality.js +0 -17
  124. package/lib/verifier/metastatementForMetavariable.js +0 -198
  125. package/lib/verifier/statementForMetavariable.js +0 -203
  126. package/lib/verifier/termForVariable.js +0 -209
  127. package/lib/verifier.js +0 -138
  128. package/lib/verify/assertion/type.js +0 -115
  129. package/lib/verify/typeInference.js +0 -132
  130. package/src/node/statement/combinator/equality.js +0 -9
  131. package/src/ocmbinator/equality.js +0 -23
  132. package/src/tokens/statement/combinator/equality.js +0 -10
  133. package/src/verifier/metastatementForMetavariable/conclusion.js +0 -9
  134. package/src/verifier/metastatementForMetavariable/premise.js +0 -9
  135. package/src/verifier/statementForMetavariable/conclusion.js +0 -9
  136. package/src/verifier/statementForMetavariable/premise.js +0 -9
  137. package/src/verifier/termForVariable/consequent.js +0 -9
  138. package/src/verifier/termForVariable/supposition.js +0 -9
  139. package/src/verifier.js +0 -74
  140. package/src/verify/assertion/type.js +0 -153
  141. package/src/verify/typeInference.js +0 -146
@@ -11,6 +11,7 @@ import Combinator from "../combinator";
11
11
  import Constructor from "../constructor";
12
12
  import Metavariable from "../metavariable";
13
13
 
14
+ import { objectType } from "../type";
14
15
  import { push, filter } from "../utilities/array";
15
16
  import { statementMetaType } from "../metaType";
16
17
  import { nodeAsString, nodesAsString } from "../utilities/string";
@@ -254,8 +255,14 @@ export default class FileContext {
254
255
  }
255
256
 
256
257
  findTypeByTypeName(typeName) {
257
- const types = this.getTypes(),
258
- type = types.find((type) => {
258
+ let types = this.getTypes();
259
+
260
+ types = [ ///
261
+ ...types,
262
+ objectType
263
+ ];
264
+
265
+ const type = types.find((type) => {
259
266
  const matches = type.matchTypeName(typeName);
260
267
 
261
268
  if (matches) {
@@ -5,6 +5,7 @@ import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
5
5
  import FileContext from "./file";
6
6
 
7
7
  import { push } from "../utilities/array";
8
+ import { objectType } from "../type";
8
9
  import { customGrammarFromNameAndEntries, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
9
10
 
10
11
  const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
@@ -274,8 +275,14 @@ export default class ReleaseContext {
274
275
  }
275
276
 
276
277
  findTypeByTypeName(typeName) {
277
- const types = this.getTypes(),
278
- type = types.find((type) => {
278
+ let types = this.getTypes();
279
+
280
+ types = [ ///
281
+ ...types,
282
+ objectType
283
+ ];
284
+
285
+ const type = types.find((type) => {
279
286
  const matches = type.matchTypeName(typeName);
280
287
 
281
288
  if (matches) {
package/src/equality.js CHANGED
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import Verifier from "./verifier";
4
- import verifyTerm from "./verify/term";
5
3
  import equalityStatementNode from "./node/statement/equality";
4
+ import equalityNodesVerifier from "./verifier/nodes/equality";
6
5
 
7
6
  import { nodeQuery } from "./utilities/query";
8
- import { first, second } from "./utilities/array";
9
- import { TERM_RULE_NAME } from "./ruleNames";
10
7
  import { EQUALITY_DEPTH } from "./constants";
11
- import { verifyTermAsVariable } from "./verify/term";
12
8
 
13
9
  const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
14
10
  rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!");
@@ -35,7 +31,7 @@ export default class Equality {
35
31
  this.rightTermNode :
36
32
  this.leftTermNode, ///
37
33
  rightNonTerminalNode = leftTermNode, ///
38
- nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
34
+ nonTerminalNodeVerified = equalityNodesVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
39
35
 
40
36
  leftTermNodeAndRightTermNodeMatch = nonTerminalNodeVerified; ///
41
37
  }
@@ -45,7 +41,7 @@ export default class Equality {
45
41
  this.leftTermNode :
46
42
  this.rightTermNode, ///
47
43
  rightNonTerminalNode = rightTermNode, ///
48
- nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
44
+ nonTerminalNodeVerified = equalityNodesVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
49
45
 
50
46
  leftTermNodeAndRightTermNodeMatch = nonTerminalNodeVerified; ///
51
47
  }
@@ -78,10 +74,10 @@ export default class Equality {
78
74
  return matches;
79
75
  }
80
76
 
81
- verify(equalities, context) {
77
+ verify(equalities, context, verifyAhead) {
82
78
  const leftNonTerminalNode = this.leftTermNode, ///
83
79
  rightNonTerminalNode = this.rightTermNode, ///
84
- nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context),
80
+ nonTerminalNodeVerified = equalityNodesVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context, verifyAhead),
85
81
  verified = nonTerminalNodeVerified; ///
86
82
 
87
83
  return verified;
@@ -93,157 +89,35 @@ export default class Equality {
93
89
  const statementNode = proofStep.getStatementNode();
94
90
 
95
91
  if (statementNode !== null) {
96
- const depth = EQUALITY_DEPTH,
97
- statementNodeMatchesEqualityStatementNode = statementNode.match(equalityStatementNode, depth);
98
-
99
- if (statementNodeMatchesEqualityStatementNode) {
100
- const leftTermNode = leftTermNodeQuery(statementNode),
101
- rightTermNode = rightTermNodeQuery(statementNode);
102
-
103
- equality = new Equality(leftTermNode, rightTermNode);
104
- }
92
+ equality = Equality.fromStatementNode(statementNode);
105
93
  }
106
94
 
107
95
  return equality;
108
96
  }
109
97
 
110
98
  static fromStatementNode(statementNode) {
111
- const leftTermNode = leftTermNodeQuery(statementNode),
112
- rightTermNode = rightTermNodeQuery(statementNode),
113
- equality = new Equality(leftTermNode, rightTermNode);
114
-
115
- return equality;
116
- }
117
-
118
- static fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
119
- const equality = new Equality(leftTermNode, rightTermNode);
120
-
121
- return equality;
122
- }
123
- }
124
-
125
- class EqualityVerifier extends Verifier {
126
- verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context) {
127
- let nonTerminalNodeVerified = false;
128
-
129
- const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
130
- rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
131
-
132
- if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
133
- const ruleName = leftNonTerminalNodeRuleName, ///
134
- ruleNameTermRuleName = (ruleName === TERM_RULE_NAME);
135
-
136
- if (ruleNameTermRuleName) {
137
- const leftTermNode = leftNonTerminalNode, ///
138
- rightTermNode = rightNonTerminalNode, ///
139
- termNodeVerified = this.verifyTermNode(leftTermNode, rightTermNode, equalities, context);
99
+ let equality = null;
140
100
 
141
- nonTerminalNodeVerified = termNodeVerified; ///
142
- }
101
+ const depth = EQUALITY_DEPTH,
102
+ statementNodeMatchesEqualityStatementNode = statementNode.match(equalityStatementNode, depth);
143
103
 
144
- if (!nonTerminalNodeVerified) {
145
- const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
146
- rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
147
- leftNodes = leftNonTerminalNodeChildNodes, ///
148
- rightNodes = rightNonTerminalNodeChildNodes, ///
149
- nodesVerified = this.verifyNodes(leftNodes, rightNodes, equalities, context);
104
+ if (statementNodeMatchesEqualityStatementNode) {
105
+ const leftTermNode = leftTermNodeQuery(statementNode),
106
+ rightTermNode = rightTermNodeQuery(statementNode);
150
107
 
151
- nonTerminalNodeVerified = nodesVerified; ///
152
- }
108
+ equality = new Equality(leftTermNode, rightTermNode);
153
109
  }
154
110
 
155
- return nonTerminalNodeVerified;
111
+ return equality;
156
112
  }
157
113
 
158
- verifyTermNode(leftTermNode, rightTermNode, equalities, context) {
159
- let termNodeVerified = false;
160
-
161
- const variables = [],
162
- leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
163
- rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
164
-
165
- let equality = null;
166
-
167
- if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
168
- const firstVariable = first(variables),
169
- secondVariable = second(variables),
170
- leftVariable = firstVariable, ///
171
- rightVariable = secondVariable, ///
172
- leftVariableType = leftVariable.getType(),
173
- rightVariableType = rightVariable.getType(),
174
- leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
175
-
176
- if (leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
177
- equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
178
- }
179
- } else if (leftTermVerifiedAsVariable) {
180
- const types = [];
181
-
182
- verifyTerm(rightTermNode, types, context);
183
-
184
- const firstType = first(types),
185
- firstVariable = first(variables),
186
- leftVariable = firstVariable, ///
187
- rightTermType = firstType, ///
188
- leftVariableType = leftVariable.getType(),
189
- leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
190
-
191
- if (leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
192
- equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
193
- }
194
- } else if (rightTermVerifiedAsVariable) {
195
- const types = [];
196
-
197
- verifyTerm(leftTermNode, types, context);
198
-
199
- const firstType = first(types),
200
- firstVariable = first(variables),
201
- leftTermType = firstType, ///
202
- rightVariable = firstVariable, ///
203
- rightVariableType = rightVariable.getType(),
204
- rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
205
-
206
- if (rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
207
- equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
208
- }
209
- } else {
210
- const types = [];
211
-
212
- verifyTerm(leftTermNode, types, context);
213
-
214
- verifyTerm(rightTermNode, types, context);
215
-
216
- const firstType = first(types),
217
- secondType = second(types),
218
- leftTermType = firstType, ///
219
- rightTermType = secondType, ///
220
- leftTermTypeEqualToOrSubTypeOfOfSuperTypeOfRightTermType = leftTermType.isEqualToOrSubTypeOfOfSuperTypeOf(rightTermType);
221
-
222
- if (leftTermTypeEqualToOrSubTypeOfOfSuperTypeOfRightTermType) {
223
- equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
224
- }
225
- }
226
-
227
- if (equality !== null) {
228
- const equalityA = equality, ///
229
- equalitiesB = equalities, ///
230
- equalityMatches = equalitiesB.some((equalityB) => { ///
231
- const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, context);
232
-
233
- if (equalityAMatchesEqualityB) {
234
- return true;
235
- }
236
- });
237
-
238
- termNodeVerified = equalityMatches; ///
239
- }
114
+ static fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
115
+ const equality = new Equality(leftTermNode, rightTermNode);
240
116
 
241
- return termNodeVerified;
117
+ return equality;
242
118
  }
243
119
  }
244
120
 
245
- const equalityVerifier = new EqualityVerifier();
246
-
247
121
  function filterEqualities(equalities, equality) {
248
122
  const equalityA = equality; ///
249
123
 
package/src/premise.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ import premiseStatementForMetavariableNodesVerifier from "./verifier/nodes/statementForMetavariable/premise";
4
+ import premiseMetastatementForMetavariableNodesVerifier from "./verifier/nodes/metastatementForMetavariable/premise";
5
+
3
6
  import { nodeAsString } from "./utilities/string";
4
7
  import { nodeQuery, nodesQuery } from "./utilities/query";
5
- import { premiseStatementForMetavariableVerifier } from "./verifier/statementForMetavariable/premise";
6
8
  import { metastatementNodeFromMetastatementString } from "./utilities/node";
7
- import { premiseMetastatementForMetavariableVerifier } from "./verifier/metastatementForMetavariable/premise";
8
9
 
9
10
  const ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
10
11
  ruleSubproofPremiseMetastatementQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
@@ -45,7 +46,11 @@ export default class Premise {
45
46
  nonTerminalNodeB = subproofStatementNode, ///
46
47
  fileContextA = fileContext, ///
47
48
  proofContextB = statementProofContext, ///
48
- nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB);
49
+ nonTerminalNodeVerified = premiseStatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB, () => {
50
+ const verifiedAhead = true;
51
+
52
+ return verifiedAhead;
53
+ });
49
54
 
50
55
  if (nonTerminalNodeVerified) {
51
56
  return true;
@@ -62,7 +67,11 @@ export default class Premise {
62
67
  nonTerminalNodeB = statementNode, ///
63
68
  fileContextA = fileContext, ///
64
69
  proofContextB = statementProofContext, ///
65
- nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB),
70
+ nonTerminalNodeVerified = premiseStatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB, () => {
71
+ const verifiedAhead = true;
72
+
73
+ return verifiedAhead;
74
+ }),
66
75
  statementNodeMatches = nonTerminalNodeVerified; ///
67
76
 
68
77
  return statementNodeMatches;
@@ -91,7 +100,11 @@ export default class Premise {
91
100
  nonTerminalNodeB = ruleSubproofMetastatementNode, ///
92
101
  fileContextA = fileContext, ///
93
102
  metaproofContextB = metastatementMetaproofContext, ///
94
- nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB);
103
+ nonTerminalNodeVerified = premiseMetastatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB, () => {
104
+ const verifiedAhead = true;
105
+
106
+ return verifiedAhead;
107
+ });
95
108
 
96
109
  if (nonTerminalNodeVerified) {
97
110
  return true;
@@ -108,7 +121,11 @@ export default class Premise {
108
121
  nonTerminalNodeB = metastatementNode, ///
109
122
  fileContextA = fileContext, ///
110
123
  metaproofContextB = metastatementMetaproofContext, ///
111
- nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB),
124
+ nonTerminalNodeVerified = premiseMetastatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB, () => {
125
+ const verifiedAhead = true;
126
+
127
+ return verifiedAhead;
128
+ }),
112
129
  metastatementNodeMatches = nonTerminalNodeVerified; ///
113
130
 
114
131
  return metastatementNodeMatches;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ import suppositionTermForVariableNodesVerifier from "./verifier/nodes/termForVariable/supposition";
4
+
3
5
  import { nodeAsString } from "./utilities/string";
4
6
  import { nodeQuery, nodesQuery } from "./utilities/query";
5
7
  import { statementNodeFromStatementString } from "./utilities/node";
6
- import { suppositionTermForVariableVerifier } from "./verifier/termForVariable/supposition";
7
8
 
8
9
  const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
9
10
  subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
@@ -42,7 +43,11 @@ export default class Supposition {
42
43
  nonTerminalNodeB = subproofStatementNode, ///
43
44
  proofContextA = proofContext, ///
44
45
  proofContextB = statementProofContext, ///
45
- nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB);
46
+ nonTerminalNodeVerified = suppositionTermForVariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB, () => {
47
+ const verifiedAhead = true;
48
+
49
+ return verifiedAhead;
50
+ });
46
51
 
47
52
  if (nonTerminalNodeVerified) {
48
53
  return true;
@@ -59,7 +64,11 @@ export default class Supposition {
59
64
  nonTerminalNodeB = statementNode, ///
60
65
  proofContextA = proofContext, ///
61
66
  proofContextB = statementProofContext, ///
62
- nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB),
67
+ nonTerminalNodeVerified = suppositionTermForVariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB, () => {
68
+ const verifiedAhead = true;
69
+
70
+ return verifiedAhead;
71
+ }),
63
72
  statementNodeMatches = nonTerminalNodeVerified; ///
64
73
 
65
74
  return statementNodeMatches;
package/src/type.js CHANGED
@@ -187,18 +187,13 @@ function superTypeFromSuperTypeJSONAndFileContext(superTypeJSON, fileContext) {
187
187
 
188
188
  if (superTypeJSON !== null) {
189
189
  const json = superTypeJSON, ///
190
- { name } = json;
191
-
192
- if (name === OBJECT_TYPE_NAME) {
193
- superType = objectType; ///
194
- } else {
195
- const typeName = name, ///
196
- type = fileContext.findTypeByTypeName(typeName);
190
+ { name } = json,
191
+ typeName = name, ///
192
+ type = fileContext.findTypeByTypeName(typeName);
197
193
 
198
194
  superType = (type !== null) ?
199
195
  type : ///
200
196
  Type.fromJSONAndFileContext(json, fileContext); ///
201
- }
202
197
  }
203
198
 
204
199
  return superType;
@@ -6,7 +6,7 @@ import permutationsMatrix from "../permutationsMatrix";
6
6
 
7
7
  import { MAXIMUM_INDEXES_LENGTH, MAXIMUM_PERMUTATION_LENGTH } from "../constants";
8
8
 
9
- export const { first, second, last, push, prune, filter } = arrayUtilities;
9
+ export const { first, second, last, push, prune, filter, clear } = arrayUtilities;
10
10
 
11
11
  export function someSubArray(array, subArrayLength, callback) {
12
12
  let found = false;
@@ -3,39 +3,22 @@
3
3
  import { COMMA, EMPTY_STRING } from "../constants";
4
4
 
5
5
  export function nodeAsString(node, tokens) {
6
- let string = null;
6
+ let string = EMPTY_STRING;
7
7
 
8
8
  if (node !== null) {
9
9
  const nodeTerminalNode = node.isTerminalNode();
10
10
 
11
11
  if (nodeTerminalNode) {
12
- const terminalNode = node, ///
13
- content = terminalNode.getContent();
12
+ const terminalNode = node; ///
14
13
 
15
- string = content; ///
14
+ string = terminalNodeAsString(terminalNode);
16
15
  } else {
17
- const nonTerminalNode = node, ///
18
- firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
19
- lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
20
- firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
21
- lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
22
- start = firstSignificantTokenIndex, ///
23
- end = lastSignificantTokenIndex + 1;
16
+ const nonTerminalNode = node; ///
24
17
 
25
- tokens = tokens.slice(start, end); ///
26
-
27
- string = tokens.reduce((string, token) => {
28
- const content = token.getContent();
29
-
30
- string = `${string}${content}`;
31
-
32
- return string;
33
- }, EMPTY_STRING);
18
+ string = nonTerminalNodeAsString(nonTerminalNode, tokens);
34
19
  }
35
- }
36
20
 
37
- if (string !== null) {
38
- string = string.replace(/[\r\n]/, EMPTY_STRING)
21
+ string = string.replace(/[\r\n]/, EMPTY_STRING);
39
22
  }
40
23
 
41
24
  return string;
@@ -54,3 +37,31 @@ export function nodesAsString(nodes, tokens) {
54
37
 
55
38
  return string;
56
39
  }
40
+
41
+ export function terminalNodeAsString(terminalNode) {
42
+ const content = terminalNode.getContent(),
43
+ string = content; ///
44
+
45
+ return string;
46
+ }
47
+
48
+ export function nonTerminalNodeAsString(nonTerminalNode, tokens) {
49
+ const firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
50
+ lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
51
+ firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
52
+ lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
53
+ start = firstSignificantTokenIndex, ///
54
+ end = lastSignificantTokenIndex + 1;
55
+
56
+ tokens = tokens.slice(start, end); ///
57
+
58
+ const string = tokens.reduce((string, token) => {
59
+ const content = token.getContent();
60
+
61
+ string = `${string}${content}`;
62
+
63
+ return string;
64
+ }, EMPTY_STRING);
65
+
66
+ return string;
67
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ import NodeVerifier from "../../verifier/node";
4
+
5
+ import { METAVARIABLE_RULE_NAME } from "../../ruleNames";
6
+ import { metavariableNameFromMetavariableNode } from "../../utilities/query";
7
+
8
+ class MetastatementNodeVerifier extends NodeVerifier {
9
+ verifyNonTerminalNode(nonTerminalNode, metaproofContext, verifyAhead) {
10
+ let nonTerminalNodeVerified;
11
+
12
+ const ruleName = nonTerminalNode.getRuleName(); ///
13
+
14
+ switch (ruleName) {
15
+ case METAVARIABLE_RULE_NAME: {
16
+ const metavariableNode = nonTerminalNode, ///
17
+ metavariableVerified = verifyMetavariable(metavariableNode, metaproofContext, verifyAhead),
18
+ metavariableNodeVerified = metavariableVerified; ///
19
+
20
+ nonTerminalNodeVerified = metavariableNodeVerified; ///
21
+
22
+ break;
23
+ }
24
+
25
+ default: {
26
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, metaproofContext, verifyAhead);
27
+
28
+ break;
29
+ }
30
+ }
31
+
32
+ return nonTerminalNodeVerified;
33
+ }
34
+ }
35
+
36
+ const metastatementNodeVerifier = new MetastatementNodeVerifier();
37
+
38
+ export default metastatementNodeVerifier;
39
+
40
+ function verifyMetavariable(metavariableNode, metaproofContext, verifyAhead) {
41
+ let metavariableVerified;
42
+
43
+ const metavariableString = metaproofContext.nodeAsString(metavariableNode);
44
+
45
+ metaproofContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
46
+
47
+ const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
48
+ metavariablePresent = metaproofContext.isMetavariablePresentByMetavariableName(metavariableName);
49
+
50
+ if (metavariablePresent) {
51
+ const verifiedAhead = verifyAhead();
52
+
53
+ metavariableVerified = verifiedAhead; ///
54
+ }
55
+
56
+ if (metavariableVerified) {
57
+ metaproofContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
58
+ }
59
+
60
+ return metavariableVerified;
61
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ import NodeVerifier from "../../verifier/node";
4
+ import verifyStatement from "../../verify/statement";
5
+
6
+ import { verifyStandaloneTerm, verifyType } from "./../../verifier/node/termAsConstructor";
7
+ import { TYPE_RULE_NAME, TERM_RULE_NAME, STATEMENT_RULE_NAME } from "../../ruleNames";
8
+
9
+ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
10
+ verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead) {
11
+ let nonTerminalNodeVerified;
12
+
13
+ const ruleName = nonTerminalNode.getRuleName();
14
+
15
+ switch (ruleName) {
16
+ case TYPE_RULE_NAME: {
17
+ const typeNode = nonTerminalNode, ///
18
+ typeVerified = verifyType(typeNode, fileContext, verifyAhead),
19
+ typeNodeVerified = typeVerified; ///
20
+
21
+ nonTerminalNodeVerified = typeNodeVerified; ///
22
+
23
+ break;
24
+ }
25
+
26
+ case TERM_RULE_NAME: {
27
+ const termNode = nonTerminalNode, ///
28
+ standaloneTermVerified = verifyStandaloneTerm(termNode, fileContext, verifyAhead),
29
+ termNodeVerified = standaloneTermVerified; ///
30
+
31
+ nonTerminalNodeVerified = termNodeVerified; ///
32
+
33
+ break;
34
+ }
35
+
36
+ case STATEMENT_RULE_NAME: {
37
+ const statementNode = nonTerminalNode, ///
38
+ standaloneStatementVerified = verifyStandaloneStatement(statementNode, fileContext, verifyAhead),
39
+ statementNodeVerified = standaloneStatementVerified; ///
40
+
41
+ nonTerminalNodeVerified = statementNodeVerified; ///
42
+
43
+ break;
44
+ }
45
+
46
+ default: {
47
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead); ///
48
+
49
+ break;
50
+ }
51
+ }
52
+
53
+ return nonTerminalNodeVerified;
54
+ }
55
+ }
56
+
57
+ const statementAsCombinatorNodeVerifier = new StatementAsCombinatorNodeVerifier();
58
+
59
+ export default statementAsCombinatorNodeVerifier;
60
+
61
+ function verifyStandaloneStatement(statementNode, fileContext, verifyAhead) {
62
+ let standaloneStatementVerified;
63
+
64
+ const statementString = fileContext.nodeAsString(statementNode);
65
+
66
+ fileContext.trace(`Verifying the '${statementString}' standalone statement...`, statementNode);
67
+
68
+ const context = fileContext, ///
69
+ derived = false,
70
+ assignments = [],
71
+ statementVerified = verifyStatement(statementNode, assignments, derived, context, verifyAhead);
72
+
73
+ standaloneStatementVerified = statementVerified; ///
74
+
75
+ if (standaloneStatementVerified) {
76
+ fileContext.debug(`...verified the '${statementString}' standalone statement.`, statementNode);
77
+ }
78
+
79
+ return standaloneStatementVerified;
80
+ }