occam-verify-cli 0.0.677 → 0.0.679
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 +14 -4
- package/lib/conclusion.js +10 -5
- package/lib/consequent.js +8 -3
- package/lib/context/file.js +74 -4
- package/lib/context/release.js +7 -2
- package/lib/equality.js +16 -16
- package/lib/premise.js +12 -7
- package/lib/supposition.js +9 -4
- package/lib/type.js +3 -8
- package/lib/utilities/string.js +26 -13
- package/lib/verifier/node/metastatement.js +173 -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/{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 +199 -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 +212 -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 +209 -0
- package/lib/verifier/nodes.js +175 -0
- package/lib/verify/assertion/type.js +20 -10
- 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 +34 -157
- 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 +112 -317
- package/lib/verify/statementAsCombinator.js +8 -82
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/term.js +69 -213
- package/lib/verify/termAsConstructor.js +15 -89
- package/lib/verify/theorem.js +3 -3
- package/lib/verify/type.js +7 -5
- package/lib/verify/typeInference.js +5 -5
- package/lib/verify/variable.js +7 -5
- package/package.json +5 -5
- package/src/conclusion.js +5 -4
- package/src/consequent.js +3 -2
- package/src/context/file.js +11 -4
- package/src/context/release.js +9 -2
- package/src/equality.js +10 -10
- package/src/premise.js +7 -6
- package/src/supposition.js +4 -3
- package/src/type.js +3 -8
- package/src/utilities/string.js +34 -23
- package/src/verifier/node/metastatement.js +57 -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/metastatementForMetavariable/conclusion.js +11 -0
- package/src/verifier/nodes/metastatementForMetavariable/premise.js +11 -0
- package/src/verifier/{metastatementForMetavariable.js → nodes/metastatementForMetavariable.js} +6 -6
- package/src/verifier/nodes/statement.js +98 -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 +111 -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} +9 -9
- package/src/verifier/nodes.js +111 -0
- package/src/verify/assertion/type.js +25 -9
- 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 +32 -57
- 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 +159 -283
- package/src/verify/statementAsCombinator.js +9 -129
- package/src/verify/supposition.js +2 -2
- package/src/verify/term.js +94 -159
- package/src/verify/termAsConstructor.js +20 -135
- package/src/verify/theorem.js +2 -2
- package/src/verify/type.js +7 -4
- package/src/verify/typeInference.js +4 -4
- package/src/verify/variable.js +7 -4
- 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/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/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,7 @@ 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);
|
|
49
50
|
|
|
50
51
|
if (nonTerminalNodeVerified) {
|
|
51
52
|
return true;
|
|
@@ -62,7 +63,7 @@ export default class Premise {
|
|
|
62
63
|
nonTerminalNodeB = statementNode, ///
|
|
63
64
|
fileContextA = fileContext, ///
|
|
64
65
|
proofContextB = statementProofContext, ///
|
|
65
|
-
nonTerminalNodeVerified =
|
|
66
|
+
nonTerminalNodeVerified = premiseStatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB),
|
|
66
67
|
statementNodeMatches = nonTerminalNodeVerified; ///
|
|
67
68
|
|
|
68
69
|
return statementNodeMatches;
|
|
@@ -91,7 +92,7 @@ export default class Premise {
|
|
|
91
92
|
nonTerminalNodeB = ruleSubproofMetastatementNode, ///
|
|
92
93
|
fileContextA = fileContext, ///
|
|
93
94
|
metaproofContextB = metastatementMetaproofContext, ///
|
|
94
|
-
nonTerminalNodeVerified =
|
|
95
|
+
nonTerminalNodeVerified = premiseMetastatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB);
|
|
95
96
|
|
|
96
97
|
if (nonTerminalNodeVerified) {
|
|
97
98
|
return true;
|
|
@@ -108,7 +109,7 @@ export default class Premise {
|
|
|
108
109
|
nonTerminalNodeB = metastatementNode, ///
|
|
109
110
|
fileContextA = fileContext, ///
|
|
110
111
|
metaproofContextB = metastatementMetaproofContext, ///
|
|
111
|
-
nonTerminalNodeVerified =
|
|
112
|
+
nonTerminalNodeVerified = premiseMetastatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB),
|
|
112
113
|
metastatementNodeMatches = nonTerminalNodeVerified; ///
|
|
113
114
|
|
|
114
115
|
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,7 @@ 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);
|
|
46
47
|
|
|
47
48
|
if (nonTerminalNodeVerified) {
|
|
48
49
|
return true;
|
|
@@ -59,7 +60,7 @@ export default class Supposition {
|
|
|
59
60
|
nonTerminalNodeB = statementNode, ///
|
|
60
61
|
proofContextA = proofContext, ///
|
|
61
62
|
proofContextB = statementProofContext, ///
|
|
62
|
-
nonTerminalNodeVerified =
|
|
63
|
+
nonTerminalNodeVerified = suppositionTermForVariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB),
|
|
63
64
|
statementNodeMatches = nonTerminalNodeVerified; ///
|
|
64
65
|
|
|
65
66
|
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/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,57 @@
|
|
|
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) {
|
|
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),
|
|
18
|
+
metavariableNodeVerified = metavariableVerified; ///
|
|
19
|
+
|
|
20
|
+
nonTerminalNodeVerified = metavariableNodeVerified; ///
|
|
21
|
+
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
default: {
|
|
26
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, metaproofContext);
|
|
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) {
|
|
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
|
+
metavariableVerified = metavariablePresent;
|
|
51
|
+
|
|
52
|
+
if (metavariableVerified) {
|
|
53
|
+
metaproofContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return metavariableVerified;
|
|
57
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import verifyTerm from "../../verify/term";
|
|
4
|
+
import NodeVerifier from "../../verifier/node";
|
|
5
|
+
|
|
6
|
+
import { nodeQuery, typeNameFromTypeNode } from "../../utilities/query";
|
|
7
|
+
import { TERM_RULE_NAME, ARGUMENT_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
|
|
9
|
+
const typeNodeQuery = nodeQuery("/argument/type"),
|
|
10
|
+
termNodeQuery = nodeQuery("/argument/term");
|
|
11
|
+
|
|
12
|
+
class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
13
|
+
verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead) {
|
|
14
|
+
let nonTerminalNodeVerified;
|
|
15
|
+
|
|
16
|
+
const ruleName = nonTerminalNode.getRuleName();
|
|
17
|
+
|
|
18
|
+
switch (ruleName) {
|
|
19
|
+
case TERM_RULE_NAME: {
|
|
20
|
+
const termNode = nonTerminalNode, ///
|
|
21
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, fileContext, verifyAhead),
|
|
22
|
+
termNodeVerified = standaloneTermVerified; ///
|
|
23
|
+
|
|
24
|
+
nonTerminalNodeVerified = termNodeVerified; ///
|
|
25
|
+
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
case ARGUMENT_RULE_NAME: {
|
|
30
|
+
const argumentNode = nonTerminalNode, ///
|
|
31
|
+
argumentVerified = verifyArgument(argumentNode, fileContext, verifyAhead),
|
|
32
|
+
argumentNodeVerified = argumentVerified; ///
|
|
33
|
+
|
|
34
|
+
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
35
|
+
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
default: {
|
|
40
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead);
|
|
41
|
+
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return nonTerminalNodeVerified;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const termAsConstructorNodeVerifier = new TermAsConstructorNodeVerifier();
|
|
51
|
+
|
|
52
|
+
export default termAsConstructorNodeVerifier;
|
|
53
|
+
|
|
54
|
+
export function verifyStandaloneTerm(termNode, fileContext, verifyAhead) {
|
|
55
|
+
let standaloneTermVerified;
|
|
56
|
+
|
|
57
|
+
const termString = fileContext.nodeAsString(termNode);
|
|
58
|
+
|
|
59
|
+
fileContext.trace(`Verifying the '${termString}' standalone term...`, termNode);
|
|
60
|
+
|
|
61
|
+
const types = [],
|
|
62
|
+
context = fileContext, ///
|
|
63
|
+
termVerified = verifyTerm(termNode, types, context, verifyAhead);
|
|
64
|
+
|
|
65
|
+
standaloneTermVerified = termVerified; ///
|
|
66
|
+
|
|
67
|
+
if (standaloneTermVerified) {
|
|
68
|
+
fileContext.debug(`...verified the '${termString}' standalone term.`, termNode);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return standaloneTermVerified;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function verifyType(typeNode, fileContext, verifyAhead) {
|
|
75
|
+
let typeVerified = false;
|
|
76
|
+
|
|
77
|
+
const typeString = fileContext.nodeAsString(typeNode);
|
|
78
|
+
|
|
79
|
+
fileContext.trace(`Verifying the '${typeString}' type...`, typeNode);
|
|
80
|
+
|
|
81
|
+
const typeName = typeNameFromTypeNode(typeNode),
|
|
82
|
+
typePresent = fileContext.isTypePresentByTypeName(typeName);
|
|
83
|
+
|
|
84
|
+
if (!typePresent) {
|
|
85
|
+
fileContext.info(`The type '${typeName}' is not present.`, typeNode);
|
|
86
|
+
} else {
|
|
87
|
+
fileContext.debug(`...verified the '${typeString}' type.`, typeNode);
|
|
88
|
+
|
|
89
|
+
const verifiedAhead = verifyAhead();
|
|
90
|
+
|
|
91
|
+
typeVerified = verifiedAhead; ///
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return typeVerified;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function verifyArgument(argumentNode, fileContext, verifyAhead) {
|
|
98
|
+
let argumentVerified;
|
|
99
|
+
|
|
100
|
+
const argumentString = fileContext.nodeAsString(argumentNode);
|
|
101
|
+
|
|
102
|
+
fileContext.trace(`Verifying the '${argumentString}' argument...`, argumentNode);
|
|
103
|
+
|
|
104
|
+
const typeNode = typeNodeQuery(argumentNode),
|
|
105
|
+
termNode = termNodeQuery(argumentNode);
|
|
106
|
+
|
|
107
|
+
if (typeNode !== null) {
|
|
108
|
+
const typeVerified = verifyType(typeNode, fileContext, verifyAhead);
|
|
109
|
+
|
|
110
|
+
argumentVerified = typeVerified; ///
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (termNode !== null) {
|
|
114
|
+
const standaloneTermVerified = verifyStandaloneTerm(termNode, fileContext, verifyAhead);
|
|
115
|
+
|
|
116
|
+
argumentVerified = standaloneTermVerified; ///
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (argumentVerified) {
|
|
120
|
+
fileContext.debug(`...verified the '${argumentString}' argument.`, argumentNode);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return argumentVerified;
|
|
124
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export default class NodeVerifier {
|
|
4
|
+
verifyNode(node, ...remainingArguments) {
|
|
5
|
+
let nodeVerified;
|
|
6
|
+
|
|
7
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
8
|
+
|
|
9
|
+
if (nodeTerminalNode) {
|
|
10
|
+
const terminalNode = node, ///
|
|
11
|
+
terminalNodeVerified = this.verifyTerminalNode(terminalNode, ...remainingArguments);
|
|
12
|
+
|
|
13
|
+
nodeVerified = terminalNodeVerified; ///
|
|
14
|
+
} else {
|
|
15
|
+
const nonTerminalNode = node, ///
|
|
16
|
+
nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, ...remainingArguments);
|
|
17
|
+
|
|
18
|
+
nodeVerified = nonTerminalNodeVerified; ///
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return nodeVerified;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
verifyChildNodes(childNodes, ...remainingArguments) {
|
|
25
|
+
let childNodesVerify;
|
|
26
|
+
|
|
27
|
+
const index = 0,
|
|
28
|
+
childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodes, ...remainingArguments);
|
|
29
|
+
|
|
30
|
+
childNodesVerify = childNodesVerifyAhead; ///
|
|
31
|
+
|
|
32
|
+
return childNodesVerify;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
verifyChildNodesAhead(index, childNodes, ...remainingArguments) {
|
|
36
|
+
let childNodesVerify;
|
|
37
|
+
|
|
38
|
+
const verifyAhead = remainingArguments.pop(), ///
|
|
39
|
+
childNodesLength = childNodes.length;
|
|
40
|
+
|
|
41
|
+
if (index === childNodesLength) {
|
|
42
|
+
const verifiedAhead = verifyAhead();
|
|
43
|
+
|
|
44
|
+
childNodesVerify = verifiedAhead; ///
|
|
45
|
+
} else {
|
|
46
|
+
const childNode = childNodes[index],
|
|
47
|
+
node = childNode, ///
|
|
48
|
+
nodeVerified = this.verifyNode(node, ...remainingArguments, () => {
|
|
49
|
+
index++;
|
|
50
|
+
|
|
51
|
+
remainingArguments.push(verifyAhead);
|
|
52
|
+
|
|
53
|
+
const childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodes, ...remainingArguments);
|
|
54
|
+
|
|
55
|
+
return childNodesVerifyAhead;
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
childNodesVerify = nodeVerified; ///
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return childNodesVerify;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
verifyTerminalNode(terminalNode, ...remainingArguments) {
|
|
65
|
+
let terminalNodeVerified;
|
|
66
|
+
|
|
67
|
+
const verifyAhead = remainingArguments.pop(), ///
|
|
68
|
+
verifiedAhead = verifyAhead(); ///
|
|
69
|
+
|
|
70
|
+
terminalNodeVerified = verifiedAhead; ///
|
|
71
|
+
|
|
72
|
+
return terminalNodeVerified;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
verifyNonTerminalNode(nonTerminalNode, ...remainingArguments) {
|
|
76
|
+
let nonTerminalNodeVerified;
|
|
77
|
+
|
|
78
|
+
const childNodes = nonTerminalNode.getChildNodes(), ///
|
|
79
|
+
childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
|
|
80
|
+
|
|
81
|
+
nonTerminalNodeVerified = childNodesVerify; ///
|
|
82
|
+
|
|
83
|
+
return nonTerminalNodeVerified;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MetastatementForMetavariableNodesVerifier from "../../../verifier/nodes/metastatementForMetavariable";
|
|
4
|
+
|
|
5
|
+
class ConclusionMetastatementForMetavariableNodesVerifier extends MetastatementForMetavariableNodesVerifier {
|
|
6
|
+
static createSubstitutions = false;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const conclusionMetastatementForMetavariableNodesVerifier = new ConclusionMetastatementForMetavariableNodesVerifier();
|
|
10
|
+
|
|
11
|
+
export default conclusionMetastatementForMetavariableNodesVerifier;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MetastatementForMetavariableNodesVerifier from "../../../verifier/nodes/metastatementForMetavariable";
|
|
4
|
+
|
|
5
|
+
class PremiseMetastatementForMetavariableNodesVerifier extends MetastatementForMetavariableNodesVerifier {
|
|
6
|
+
static createSubstitutions = true;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const premiseMetastatementForMetavariableNodesVerifier = new PremiseMetastatementForMetavariableNodesVerifier();
|
|
10
|
+
|
|
11
|
+
export default premiseMetastatementForMetavariableNodesVerifier;
|
package/src/verifier/{metastatementForMetavariable.js → nodes/metastatementForMetavariable.js}
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import MetastatementForMetavariableSubstitution from "
|
|
3
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import MetastatementForMetavariableSubstitution from "../../substitution/metastatementForMetavariable";
|
|
5
5
|
|
|
6
|
-
import { nodeQuery } from "
|
|
7
|
-
import { METASTATEMENT_RULE_NAME } from "
|
|
8
|
-
import { metavariableNameFromMetavariableNode } from "
|
|
6
|
+
import { nodeQuery } from "../../utilities/query";
|
|
7
|
+
import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
import { metavariableNameFromMetavariableNode } from "../../utilities/query";
|
|
9
9
|
|
|
10
10
|
const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!');
|
|
11
11
|
|
|
12
|
-
export default class
|
|
12
|
+
export default class MetastatementForMetavariableNodesVerifier extends NodesVerifier {
|
|
13
13
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB) {
|
|
14
14
|
let nonTerminalNodeVerified = false;
|
|
15
15
|
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
|
|
5
|
+
import { nodeQuery } from "../../utilities/query";
|
|
6
|
+
import { verifyArgument } from "../../verifier/nodes/term";
|
|
7
|
+
import { STATEMENT_META_TYPE } from "../../metaTypes";
|
|
8
|
+
import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
|
|
9
|
+
|
|
10
|
+
const metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
11
|
+
statementNodeQuery = nodeQuery("/metaArgument/statement!"),
|
|
12
|
+
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
|
|
13
|
+
|
|
14
|
+
class StatementNodesVerifier extends NodesVerifier {
|
|
15
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead) {
|
|
16
|
+
let nonTerminalNodeVerified = false;
|
|
17
|
+
|
|
18
|
+
const nonTerminalNode = nonTerminalNodeA, ///
|
|
19
|
+
combinatorNonTerminalNode = nonTerminalNodeB; ///
|
|
20
|
+
|
|
21
|
+
const ruleName = nonTerminalNode.getRuleName(), ///
|
|
22
|
+
combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
|
|
23
|
+
|
|
24
|
+
if (ruleName === combinatorRuleName) {
|
|
25
|
+
switch (ruleName) {
|
|
26
|
+
case ARGUMENT_RULE_NAME: {
|
|
27
|
+
const argumentNode = nonTerminalNode, ///
|
|
28
|
+
constructorArgumentNode = combinatorNonTerminalNode, ///
|
|
29
|
+
argumentVerified = verifyArgument(argumentNode, constructorArgumentNode, context, verifyAhead);
|
|
30
|
+
|
|
31
|
+
nonTerminalNodeVerified = argumentVerified; ///
|
|
32
|
+
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
case META_ARGUMENT_RULE_NAME: {
|
|
37
|
+
const metaArgumentNode = nonTerminalNode, ///
|
|
38
|
+
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
39
|
+
metaArgumentVerified = verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead),
|
|
40
|
+
metaArgumentNodeVerified = metaArgumentVerified; ///
|
|
41
|
+
|
|
42
|
+
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
43
|
+
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
default: {
|
|
48
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead);
|
|
49
|
+
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return nonTerminalNodeVerified;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const statementNodesVerifier = new StatementNodesVerifier();
|
|
60
|
+
|
|
61
|
+
export default statementNodesVerifier;
|
|
62
|
+
|
|
63
|
+
function verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead) {
|
|
64
|
+
let metaArgumentVerified = false;
|
|
65
|
+
|
|
66
|
+
const metaArgumentString = context.nodeAsString(metaArgumentNode);
|
|
67
|
+
|
|
68
|
+
context.trace(`Verifying the '${metaArgumentString}' metaargument...`, metaArgumentNode);
|
|
69
|
+
|
|
70
|
+
const statementNode = statementNodeQuery(metaArgumentNode),
|
|
71
|
+
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
72
|
+
|
|
73
|
+
if (statementNode === null) {
|
|
74
|
+
context.info(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
|
|
75
|
+
} else {
|
|
76
|
+
if (combinatorMetaTYpeNode === null) {
|
|
77
|
+
const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
78
|
+
|
|
79
|
+
context.info(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
80
|
+
} else {
|
|
81
|
+
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
82
|
+
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
83
|
+
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
84
|
+
|
|
85
|
+
if (!contentStatementMetaType) {
|
|
86
|
+
context.info(`Expected the meta-type to be 'Statement' but got '${content}'.`, metaArgumentNode);
|
|
87
|
+
} else {
|
|
88
|
+
metaArgumentVerified = true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (metaArgumentVerified) {
|
|
94
|
+
context.debug(`...verified the '${metaArgumentString}' metaargument.`, metaArgumentNode);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return metaArgumentVerified;
|
|
98
|
+
}
|