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.
- package/bin/action/verify.js +13 -3
- package/lib/axiomLemmaTheoremConjecture.js +3 -3
- package/lib/conclusion.js +16 -5
- package/lib/consequent.js +11 -3
- package/lib/context/file.js +73 -3
- package/lib/context/release.js +7 -2
- package/lib/equality.js +13 -199
- package/lib/premise.js +24 -7
- package/lib/supposition.js +15 -4
- package/lib/type.js +3 -8
- package/lib/utilities/array.js +5 -2
- package/lib/utilities/string.js +26 -13
- package/lib/verifier/node/metastatement.js +176 -0
- package/lib/verifier/node/statementAsCombinator.js +186 -0
- package/lib/verifier/node/termAsConstructor.js +224 -0
- package/lib/verifier/node.js +158 -0
- package/lib/verifier/nodes/equality.js +155 -0
- package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/conclusion.js +13 -12
- package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/premise.js +13 -12
- package/lib/verifier/nodes/metastatementForMetavariable.js +198 -0
- package/lib/verifier/nodes/statement.js +200 -0
- package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/conclusion.js +13 -12
- package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/premise.js +13 -12
- package/lib/verifier/nodes/statementForMetavariable.js +203 -0
- package/lib/verifier/nodes/term.js +210 -0
- package/lib/verifier/{termForVariable/supposition.js → nodes/termForVariable/consequent.js} +13 -12
- package/lib/verifier/{termForVariable/consequent.js → nodes/termForVariable/supposition.js} +13 -12
- package/lib/verifier/nodes/termForVariable.js +217 -0
- package/lib/verifier/nodes.js +175 -0
- package/lib/verify/axiom.js +3 -3
- package/lib/verify/conclusion.js +3 -3
- package/lib/verify/conjecture.js +3 -3
- package/lib/verify/consequent.js +3 -3
- package/lib/verify/declaration/combinator.js +7 -2
- package/lib/verify/declaration/constructor.js +8 -2
- package/lib/verify/declaration/metavariable.js +7 -2
- package/lib/verify/declaration/type.js +7 -2
- package/lib/verify/declaration/variable.js +8 -2
- package/lib/verify/file.js +3 -3
- package/lib/verify/label.js +9 -4
- package/lib/verify/lemma.js +3 -3
- package/lib/verify/metastatement/qualified.js +5 -6
- package/lib/verify/metastatement/unqualified.js +9 -7
- package/lib/verify/metastatement.js +36 -156
- package/lib/verify/metavariable.js +6 -4
- package/lib/verify/premise.js +3 -3
- package/lib/verify/release.js +3 -3
- package/lib/verify/rule.js +3 -3
- package/lib/verify/statement/qualified.js +5 -6
- package/lib/verify/statement/unqualified.js +9 -7
- package/lib/verify/statement.js +86 -332
- package/lib/verify/statementAsCombinator.js +8 -82
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/term.js +79 -215
- package/lib/verify/termAsConstructor.js +15 -89
- package/lib/verify/terms.js +45 -0
- package/lib/verify/theorem.js +3 -3
- package/lib/verify/type.js +7 -5
- package/lib/verify/typeAssertion.js +124 -0
- package/lib/verify/variable.js +7 -5
- package/package.json +5 -5
- package/src/axiomLemmaTheoremConjecture.js +2 -2
- package/src/conclusion.js +13 -4
- package/src/consequent.js +9 -2
- package/src/context/file.js +9 -2
- package/src/context/release.js +9 -2
- package/src/equality.js +17 -143
- package/src/premise.js +23 -6
- package/src/supposition.js +12 -3
- package/src/type.js +3 -8
- package/src/utilities/array.js +1 -1
- package/src/utilities/string.js +34 -23
- package/src/verifier/node/metastatement.js +61 -0
- package/src/verifier/node/statementAsCombinator.js +80 -0
- package/src/verifier/node/termAsConstructor.js +124 -0
- package/src/verifier/node.js +85 -0
- package/src/verifier/nodes/equality.js +68 -0
- package/src/verifier/nodes/metastatementForMetavariable/conclusion.js +11 -0
- package/src/verifier/nodes/metastatementForMetavariable/premise.js +11 -0
- package/src/verifier/{metastatementForMetavariable.js → nodes/metastatementForMetavariable.js} +13 -13
- package/src/verifier/nodes/statement.js +100 -0
- package/src/verifier/nodes/statementForMetavariable/conclusion.js +11 -0
- package/src/verifier/nodes/statementForMetavariable/premise.js +11 -0
- package/src/verifier/{statementForMetavariable.js → nodes/statementForMetavariable.js} +10 -10
- package/src/verifier/nodes/term.js +106 -0
- package/src/verifier/nodes/termForVariable/consequent.js +11 -0
- package/src/verifier/nodes/termForVariable/supposition.js +11 -0
- package/src/verifier/{termForVariable.js → nodes/termForVariable.js} +42 -30
- package/src/verifier/nodes.js +111 -0
- package/src/verify/axiom.js +2 -2
- package/src/verify/conclusion.js +2 -2
- package/src/verify/conjecture.js +2 -2
- package/src/verify/consequent.js +2 -2
- package/src/verify/declaration/combinator.js +9 -1
- package/src/verify/declaration/constructor.js +15 -1
- package/src/verify/declaration/metavariable.js +9 -1
- package/src/verify/declaration/type.js +14 -1
- package/src/verify/declaration/variable.js +15 -1
- package/src/verify/file.js +2 -2
- package/src/verify/label.js +10 -2
- package/src/verify/lemma.js +4 -4
- package/src/verify/metastatement/qualified.js +4 -6
- package/src/verify/metastatement/unqualified.js +9 -7
- package/src/verify/metastatement.js +35 -56
- package/src/verify/metavariable.js +6 -3
- package/src/verify/premise.js +2 -2
- package/src/verify/release.js +2 -2
- package/src/verify/rule.js +2 -2
- package/src/verify/statement/qualified.js +4 -6
- package/src/verify/statement/unqualified.js +9 -7
- package/src/verify/statement.js +109 -302
- package/src/verify/statementAsCombinator.js +9 -129
- package/src/verify/supposition.js +2 -2
- package/src/verify/term.js +99 -156
- package/src/verify/termAsConstructor.js +20 -135
- package/src/verify/terms.js +54 -0
- package/src/verify/theorem.js +2 -2
- package/src/verify/type.js +7 -4
- package/src/verify/typeAssertion.js +164 -0
- package/src/verify/variable.js +7 -4
- package/lib/node/statement/combinator/equality.js +0 -21
- package/lib/ocmbinator/equality.js +0 -126
- package/lib/tokens/statement/combinator/equality.js +0 -17
- package/lib/verifier/metastatementForMetavariable.js +0 -198
- package/lib/verifier/statementForMetavariable.js +0 -203
- package/lib/verifier/termForVariable.js +0 -209
- package/lib/verifier.js +0 -138
- package/lib/verify/assertion/type.js +0 -115
- package/lib/verify/typeInference.js +0 -132
- package/src/node/statement/combinator/equality.js +0 -9
- package/src/ocmbinator/equality.js +0 -23
- package/src/tokens/statement/combinator/equality.js +0 -10
- package/src/verifier/metastatementForMetavariable/conclusion.js +0 -9
- package/src/verifier/metastatementForMetavariable/premise.js +0 -9
- package/src/verifier/statementForMetavariable/conclusion.js +0 -9
- package/src/verifier/statementForMetavariable/premise.js +0 -9
- package/src/verifier/termForVariable/consequent.js +0 -9
- package/src/verifier/termForVariable/supposition.js +0 -9
- package/src/verifier.js +0 -74
- package/src/verify/assertion/type.js +0 -153
- package/src/verify/typeInference.js +0 -146
package/src/context/file.js
CHANGED
|
@@ -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
|
-
|
|
258
|
-
|
|
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) {
|
package/src/context/release.js
CHANGED
|
@@ -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
|
-
|
|
278
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
142
|
-
|
|
101
|
+
const depth = EQUALITY_DEPTH,
|
|
102
|
+
statementNodeMatchesEqualityStatementNode = statementNode.match(equalityStatementNode, depth);
|
|
143
103
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
152
|
-
}
|
|
108
|
+
equality = new Equality(leftTermNode, rightTermNode);
|
|
153
109
|
}
|
|
154
110
|
|
|
155
|
-
return
|
|
111
|
+
return equality;
|
|
156
112
|
}
|
|
157
113
|
|
|
158
|
-
|
|
159
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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;
|
package/src/supposition.js
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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
|
-
|
|
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;
|
package/src/utilities/array.js
CHANGED
|
@@ -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;
|
package/src/utilities/string.js
CHANGED
|
@@ -3,39 +3,22 @@
|
|
|
3
3
|
import { COMMA, EMPTY_STRING } from "../constants";
|
|
4
4
|
|
|
5
5
|
export function nodeAsString(node, tokens) {
|
|
6
|
-
let string =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|