occam-verify-cli 0.0.844 → 0.0.846
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/lib/assignment/equality.js +4 -4
- package/lib/assignment/variable.js +4 -4
- package/lib/conclusion.js +5 -5
- package/lib/context/local.js +14 -1
- package/lib/equality.js +5 -3
- package/lib/equivalence.js +17 -17
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
- package/lib/premise.js +6 -5
- package/lib/substitution/statementForMetavariable.js +29 -9
- package/lib/substitution/termForVariable.js +8 -1
- package/lib/term.js +9 -9
- package/lib/utilities/array.js +1 -11
- package/lib/utilities/equivalences.js +14 -14
- package/lib/verifier/node/metastatement.js +5 -4
- package/lib/verifier/node/statementAsCombinator.js +6 -6
- package/lib/verifier/node/termAsConstructor.js +5 -5
- package/lib/verifier/nodes/metaLevel.js +7 -7
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +30 -31
- package/lib/verifier/nodes/statementAgainstCombinator.js +11 -11
- package/lib/verifier/nodes/substitution.js +223 -0
- package/lib/verifier/nodes/termAgainstConstructor.js +10 -10
- package/lib/verify/containment.js +29 -10
- package/lib/verify/defining.js +6 -6
- package/lib/verify/equality.js +17 -17
- package/lib/verify/givenType.js +6 -6
- package/lib/verify/givenVariable.js +6 -6
- package/lib/verify/metavariable.js +6 -6
- package/lib/verify/statement/qualified.js +13 -13
- package/lib/verify/statement/unqualified.js +2 -2
- package/lib/verify/statement.js +40 -40
- package/lib/verify/statementAsCombinator.js +2 -1
- package/lib/verify/term.js +30 -30
- package/lib/verify/termAndGivenType.js +7 -7
- package/lib/verify/termAsConstructor.js +3 -2
- package/lib/verify/terms.js +7 -7
- package/lib/verify/type.js +7 -7
- package/lib/verify/typeAssertion.js +19 -19
- package/lib/verify/variable.js +6 -6
- package/package.json +1 -1
- package/src/assignment/equality.js +5 -5
- package/src/assignment/variable.js +5 -5
- package/src/conclusion.js +6 -6
- package/src/context/local.js +12 -0
- package/src/equality.js +6 -4
- package/src/equivalence.js +16 -16
- package/src/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/src/mixins/nodesVerifier/metaLevel.js +1 -1
- package/src/premise.js +9 -4
- package/src/substitution/statementForMetavariable.js +44 -12
- package/src/substitution/termForVariable.js +10 -0
- package/src/term.js +8 -8
- package/src/utilities/array.js +0 -6
- package/src/utilities/equivalences.js +13 -13
- package/src/verifier/node/metastatement.js +8 -9
- package/src/verifier/node/statementAsCombinator.js +8 -11
- package/src/verifier/node/termAsConstructor.js +6 -8
- package/src/verifier/nodes/metaLevel.js +6 -6
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +37 -41
- package/src/verifier/nodes/statementAgainstCombinator.js +10 -10
- package/src/verifier/nodes/substitution.js +125 -0
- package/src/verifier/nodes/termAgainstConstructor.js +9 -9
- package/src/verify/containment.js +38 -12
- package/src/verify/defining.js +5 -5
- package/src/verify/equality.js +16 -16
- package/src/verify/givenType.js +5 -5
- package/src/verify/givenVariable.js +5 -5
- package/src/verify/metavariable.js +5 -5
- package/src/verify/statement/qualified.js +12 -13
- package/src/verify/statement/unqualified.js +1 -2
- package/src/verify/statement.js +39 -39
- package/src/verify/statementAsCombinator.js +1 -0
- package/src/verify/term.js +29 -29
- package/src/verify/termAndGivenType.js +7 -7
- package/src/verify/termAsConstructor.js +3 -1
- package/src/verify/terms.js +7 -7
- package/src/verify/type.js +6 -6
- package/src/verify/typeAssertion.js +18 -18
- package/src/verify/variable.js +5 -5
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import Substitution from "../substitution";
|
|
4
4
|
|
|
5
|
+
import substitutionNodesVerifier from "../verifier/nodes/substitution";
|
|
5
6
|
import TermForVariableSubstitution from "./termForVariable";
|
|
6
7
|
import intrinsicLevelNodesVerifier from "../verifier/nodes/intrinsicLevel";
|
|
7
8
|
|
|
9
|
+
import { push } from "../utilities/array";
|
|
8
10
|
import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
|
|
9
11
|
|
|
10
12
|
export default class StatementForMetavariableSubstitution extends Substitution {
|
|
@@ -52,9 +54,9 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
52
54
|
if (this.substitution === null) {
|
|
53
55
|
statementNodeMatches = this.statementNode.match(statementNode);
|
|
54
56
|
} else {
|
|
55
|
-
const substitution = this.substitution,
|
|
56
|
-
statementNodeA = statementNode,
|
|
57
|
-
statementNodeB = this.statementNode;
|
|
57
|
+
const substitution = this.substitution, ///
|
|
58
|
+
statementNodeA = statementNode, ///
|
|
59
|
+
statementNodeB = this.statementNode; ///
|
|
58
60
|
|
|
59
61
|
statementNodeMatches = matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB);
|
|
60
62
|
}
|
|
@@ -99,26 +101,56 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
103
|
|
|
104
|
+
function transformSubstitutions(substitutionsA, substitutionsB) {
|
|
105
|
+
substitutionsA = substitutionsA.map((substitutionA) => {
|
|
106
|
+
const substitution = substitutionA, ///
|
|
107
|
+
substitutions = substitutionsB,
|
|
108
|
+
termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions);
|
|
109
|
+
|
|
110
|
+
substitutionA = termForVariableSubstitution; ///
|
|
111
|
+
|
|
112
|
+
return substitutionA;
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
return substitutionsA;
|
|
116
|
+
}
|
|
117
|
+
|
|
102
118
|
export function matchStatementNode(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
|
|
103
|
-
let statementNodeMatches;
|
|
119
|
+
let statementNodeMatches = false;
|
|
120
|
+
|
|
121
|
+
const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions),
|
|
122
|
+
intrinsic = termForVariableSubstitution.isIntrinsic(substitution);
|
|
104
123
|
|
|
105
|
-
|
|
124
|
+
let substitutionsA = []; ///
|
|
106
125
|
|
|
107
|
-
|
|
126
|
+
if (intrinsic) {
|
|
127
|
+
const substitutionA = termForVariableSubstitution; ///
|
|
108
128
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
];
|
|
129
|
+
substitutionsA.push(substitutionA);
|
|
130
|
+
}
|
|
112
131
|
|
|
113
|
-
const nonTerminalNodeA = statementNodeA,
|
|
132
|
+
const nonTerminalNodeA = statementNodeA, ///
|
|
114
133
|
nonTerminalNodeB = statementNodeB, ///
|
|
115
|
-
nonTerminalNodeVerified =
|
|
134
|
+
nonTerminalNodeVerified = substitutionNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
|
|
116
135
|
const verifiedAhead = true;
|
|
117
136
|
|
|
118
137
|
return verifiedAhead;
|
|
119
138
|
});
|
|
120
139
|
|
|
121
|
-
|
|
140
|
+
if (nonTerminalNodeVerified) {
|
|
141
|
+
if (!intrinsic) {
|
|
142
|
+
const substitutionB = termForVariableSubstitution, ///
|
|
143
|
+
substitutionsB = [
|
|
144
|
+
substitutionB
|
|
145
|
+
];
|
|
146
|
+
|
|
147
|
+
substitutionsA = transformSubstitutions(substitutionsA, substitutionsB);
|
|
148
|
+
|
|
149
|
+
push(substitutions, substitutionsA);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
statementNodeMatches = true;
|
|
153
|
+
}
|
|
122
154
|
|
|
123
155
|
return statementNodeMatches;
|
|
124
156
|
}
|
|
@@ -23,6 +23,16 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
23
23
|
return this.termNode;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
isIntrinsic(substitution) {
|
|
27
|
+
const termNod = substitution.getTermNode(),
|
|
28
|
+
variableNode = substitution.getVariableNode(),
|
|
29
|
+
termNodeMatches = this.termNode.match(termNod),
|
|
30
|
+
variableNodeMatches = this.variableNode.match(variableNode),
|
|
31
|
+
intrinsic = ((!termNodeMatches) && (!variableNodeMatches));
|
|
32
|
+
|
|
33
|
+
return intrinsic;
|
|
34
|
+
}
|
|
35
|
+
|
|
26
36
|
matchTermNode(termNode) {
|
|
27
37
|
const termNodeMatches = this.termNode.match(termNode);
|
|
28
38
|
|
package/src/term.js
CHANGED
|
@@ -26,12 +26,12 @@ export default class Term {
|
|
|
26
26
|
return matches;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
getVariables(
|
|
29
|
+
getVariables(localContext) {
|
|
30
30
|
const variables = [],
|
|
31
31
|
variableNodes = variableNodesQuery(this.node);
|
|
32
32
|
|
|
33
33
|
variableNodes.forEach((variableNode) => {
|
|
34
|
-
const variable =
|
|
34
|
+
const variable = localContext.findVariableByVariableNode(variableNode),
|
|
35
35
|
variablesIncludesVariable = variables.includes(variable);
|
|
36
36
|
|
|
37
37
|
if (!variablesIncludesVariable) {
|
|
@@ -42,8 +42,8 @@ export default class Term {
|
|
|
42
42
|
return variables;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
isGrounded(definedVariables,
|
|
46
|
-
const variables = this.getVariables(
|
|
45
|
+
isGrounded(definedVariables, localContext) {
|
|
46
|
+
const variables = this.getVariables(localContext);
|
|
47
47
|
|
|
48
48
|
filter(variables, (variable) => {
|
|
49
49
|
const definedVariablesIncludesVariable = definedVariables.includes(variable);
|
|
@@ -60,16 +60,16 @@ export default class Term {
|
|
|
60
60
|
return grounded;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
isInitiallyGrounded(
|
|
64
|
-
const variables = this.getVariables(
|
|
63
|
+
isInitiallyGrounded(localContext) {
|
|
64
|
+
const variables = this.getVariables(localContext),
|
|
65
65
|
variablesLength = variables.length,
|
|
66
66
|
initiallyGrounded = (variablesLength === 0);
|
|
67
67
|
|
|
68
68
|
return initiallyGrounded;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
isImplicitlyGrounded(definedVariables,
|
|
72
|
-
const grounded = this.isGrounded(definedVariables,
|
|
71
|
+
isImplicitlyGrounded(definedVariables, localContext) {
|
|
72
|
+
const grounded = this.isGrounded(definedVariables, localContext),
|
|
73
73
|
implicitlyGrounded = grounded; ///
|
|
74
74
|
|
|
75
75
|
return implicitlyGrounded;
|
package/src/utilities/array.js
CHANGED
|
@@ -29,12 +29,6 @@ export function someSubArray(array, subArrayLength, callback) {
|
|
|
29
29
|
permutations = permutationsMatrix[indexesLength][permutationLength];
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
if (subArrayLength === 4) {
|
|
33
|
-
permutations = [
|
|
34
|
-
[ 0, 2, 3, 4 ]
|
|
35
|
-
];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
32
|
if (permutations !== null) {
|
|
39
33
|
found = permutations.some((permutation) => {
|
|
40
34
|
if (permutation !== null) {
|
|
@@ -83,7 +83,7 @@ export function findEquivalenceByTerm(equivalences, term) {
|
|
|
83
83
|
return equivalence;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables,
|
|
86
|
+
export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables, localContext) {
|
|
87
87
|
let groundedEquivalences,
|
|
88
88
|
remainingEquivalences,
|
|
89
89
|
initiallyGroundedEquivalences,
|
|
@@ -93,7 +93,7 @@ export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalence
|
|
|
93
93
|
|
|
94
94
|
initiallyGroundedEquivalences = [];
|
|
95
95
|
|
|
96
|
-
separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences,
|
|
96
|
+
separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences, localContext);
|
|
97
97
|
|
|
98
98
|
const initiallyGroundedEquivalencesLength = initiallyGroundedEquivalences.length;
|
|
99
99
|
|
|
@@ -109,9 +109,9 @@ export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalence
|
|
|
109
109
|
while (definedVariablesLength > previousDefinedVariablesLength) {
|
|
110
110
|
previousDefinedVariablesLength = definedVariablesLength; ///
|
|
111
111
|
|
|
112
|
-
groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms,
|
|
112
|
+
groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, localContext);
|
|
113
113
|
|
|
114
|
-
definedVariablesFromGroundedTerms(groundedTerms, definedVariables,
|
|
114
|
+
definedVariablesFromGroundedTerms(groundedTerms, definedVariables, localContext);
|
|
115
115
|
|
|
116
116
|
definedVariablesLength = definedVariables.length;
|
|
117
117
|
}
|
|
@@ -122,7 +122,7 @@ export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalence
|
|
|
122
122
|
|
|
123
123
|
implicitlyGroundedEquivalences = [];
|
|
124
124
|
|
|
125
|
-
separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables,
|
|
125
|
+
separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, localContext);
|
|
126
126
|
|
|
127
127
|
push(groundedEquivalences, implicitlyGroundedEquivalences);
|
|
128
128
|
|
|
@@ -153,12 +153,12 @@ function findEquivalenceByTermNodes(equivalences, termNodes) {
|
|
|
153
153
|
return equivalence;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
function definedVariablesFromGroundedTerms(groundedTerms, definedVariables,
|
|
156
|
+
function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, localContext) {
|
|
157
157
|
const terms = groundedTerms, ///
|
|
158
158
|
variables = definedVariables; ///
|
|
159
159
|
|
|
160
160
|
terms.forEach((term) => {
|
|
161
|
-
const termVariables = term.getVariables(
|
|
161
|
+
const termVariables = term.getVariables(localContext);
|
|
162
162
|
|
|
163
163
|
termVariables.forEach((termVariable) => {
|
|
164
164
|
const variablesIncludesTermVariable = variables.includes(termVariable);
|
|
@@ -172,9 +172,9 @@ function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, cont
|
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences,
|
|
175
|
+
function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences, localContext) {
|
|
176
176
|
separate(equivalences, remainingEquivalences, initiallyGroundedEquivalences, (equivalence) => {
|
|
177
|
-
const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(
|
|
177
|
+
const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(localContext);
|
|
178
178
|
|
|
179
179
|
if (!equivalenceInitiallyGrounded) {
|
|
180
180
|
return true;
|
|
@@ -182,9 +182,9 @@ function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalenc
|
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables,
|
|
185
|
+
function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, localContext) {
|
|
186
186
|
separate(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, (equivalence) => {
|
|
187
|
-
const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables,
|
|
187
|
+
const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables, localContext);
|
|
188
188
|
|
|
189
189
|
if (!equivalenceImplicitlyGrounded) {
|
|
190
190
|
return true;
|
|
@@ -192,8 +192,8 @@ function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalen
|
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms,
|
|
195
|
+
function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, localContext) {
|
|
196
196
|
groundedEquivalences.forEach((groundedEquivalence) => {
|
|
197
|
-
groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms,
|
|
197
|
+
groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms, localContext);
|
|
198
198
|
});
|
|
199
199
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import LocalContext from "../../context/local";
|
|
3
4
|
import NodeVerifier from "../../verifier/node";
|
|
4
5
|
|
|
5
6
|
import { verifyStandaloneTerm } from "../../verify/term";
|
|
@@ -15,9 +16,8 @@ class MetastatementNodeVerifier extends NodeVerifier {
|
|
|
15
16
|
|
|
16
17
|
switch (ruleName) {
|
|
17
18
|
case METAVARIABLE_RULE_NAME: {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, context, verifyAhead),
|
|
19
|
+
const metavariableNode = nonTerminalNode, ///
|
|
20
|
+
standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead),
|
|
21
21
|
metavariableNodeVerified = standaloneMetavariableVerified; ///
|
|
22
22
|
|
|
23
23
|
nonTerminalNodeVerified = metavariableNodeVerified; ///
|
|
@@ -26,9 +26,8 @@ class MetastatementNodeVerifier extends NodeVerifier {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
case VARIABLE_RULE_NAME: {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
standaloneVariableVerified = verifyStandaloneVariable(variableNode, context, verifyAhead),
|
|
29
|
+
const variableNode = nonTerminalNode, ///
|
|
30
|
+
standaloneVariableVerified = verifyStandaloneVariable(variableNode, localMetaContext, verifyAhead),
|
|
32
31
|
variableNodeVerified = standaloneVariableVerified; ///
|
|
33
32
|
|
|
34
33
|
nonTerminalNodeVerified = variableNodeVerified; ///
|
|
@@ -37,9 +36,9 @@ class MetastatementNodeVerifier extends NodeVerifier {
|
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
case TERM_RULE_NAME: {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
standaloneTermVerified = verifyStandaloneTerm(termNode,
|
|
39
|
+
const termNode = nonTerminalNode, ///
|
|
40
|
+
localContext = LocalContext.fromLocalMetaContext(localMetaContext),
|
|
41
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
43
42
|
termNodeVerified = standaloneTermVerified; ///
|
|
44
43
|
|
|
45
44
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -8,16 +8,15 @@ import { verifyStandaloneStatement } from "../../verify/statement";
|
|
|
8
8
|
import { TYPE_RULE_NAME, TERM_RULE_NAME, STATEMENT_RULE_NAME } from "../../ruleNames";
|
|
9
9
|
|
|
10
10
|
class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
11
|
-
verifyNonTerminalNode(nonTerminalNode,
|
|
11
|
+
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
12
12
|
let nonTerminalNodeVerified;
|
|
13
13
|
|
|
14
14
|
const ruleName = nonTerminalNode.getRuleName();
|
|
15
15
|
|
|
16
16
|
switch (ruleName) {
|
|
17
17
|
case STATEMENT_RULE_NAME: {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
standaloneStatementVerified = verifyStandaloneStatement(statementNode, context, verifyAhead),
|
|
18
|
+
const statementNode = nonTerminalNode, ///
|
|
19
|
+
standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
|
|
21
20
|
statementNodeVerified = standaloneStatementVerified; ///
|
|
22
21
|
|
|
23
22
|
nonTerminalNodeVerified = statementNodeVerified; ///
|
|
@@ -26,9 +25,8 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
case TERM_RULE_NAME: {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
standaloneTermVerified = verifyStandaloneTerm(termNode, context, verifyAhead),
|
|
28
|
+
const termNode = nonTerminalNode, ///
|
|
29
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
32
30
|
termNodeVerified = standaloneTermVerified; ///
|
|
33
31
|
|
|
34
32
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -37,9 +35,8 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
case TYPE_RULE_NAME: {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
standaloneTypeVerified = verifyStandaloneType(typeNode, context, verifyAhead),
|
|
38
|
+
const typeNode = nonTerminalNode, ///
|
|
39
|
+
standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
|
|
43
40
|
typeNodeVerified = standaloneTypeVerified; ///
|
|
44
41
|
|
|
45
42
|
nonTerminalNodeVerified = typeNodeVerified; ///
|
|
@@ -48,7 +45,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
48
45
|
}
|
|
49
46
|
|
|
50
47
|
default: {
|
|
51
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode,
|
|
48
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead); ///
|
|
52
49
|
|
|
53
50
|
break;
|
|
54
51
|
}
|
|
@@ -7,16 +7,15 @@ import { verifyStandaloneTerm } from "../../verify/term";
|
|
|
7
7
|
import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../../ruleNames";
|
|
8
8
|
|
|
9
9
|
class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
10
|
-
verifyNonTerminalNode(nonTerminalNode,
|
|
10
|
+
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
11
11
|
let nonTerminalNodeVerified;
|
|
12
12
|
|
|
13
13
|
const ruleName = nonTerminalNode.getRuleName();
|
|
14
14
|
|
|
15
15
|
switch (ruleName) {
|
|
16
16
|
case TERM_RULE_NAME: {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
standaloneTermVerified = verifyStandaloneTerm(termNode, context, verifyAhead),
|
|
17
|
+
const termNode = nonTerminalNode, ///
|
|
18
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
20
19
|
termNodeVerified = standaloneTermVerified; ///
|
|
21
20
|
|
|
22
21
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -25,9 +24,8 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
case TYPE_RULE_NAME: {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
standaloneTypeVerified = verifyStandaloneType(typeNode, context, verifyAhead),
|
|
27
|
+
const typeNode = nonTerminalNode, ///
|
|
28
|
+
standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
|
|
31
29
|
typeNodeVerified = standaloneTypeVerified; ///
|
|
32
30
|
|
|
33
31
|
nonTerminalNodeVerified = typeNodeVerified; ///
|
|
@@ -36,7 +34,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
default: {
|
|
39
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode,
|
|
37
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
|
|
40
38
|
|
|
41
39
|
break;
|
|
42
40
|
}
|
|
@@ -9,7 +9,7 @@ import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
|
|
|
9
9
|
const metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
|
|
10
10
|
|
|
11
11
|
class MetaLevelNodesVerifier extends NodesVerifier {
|
|
12
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
12
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
13
13
|
let nonTerminalNodeVerified = false;
|
|
14
14
|
|
|
15
15
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
@@ -22,7 +22,7 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
22
22
|
case METASTATEMENT_RULE_NAME: {
|
|
23
23
|
const metastatementNodeA = nonTerminalNodeA, ///
|
|
24
24
|
metastatementNodeB = nonTerminalNodeB, ///
|
|
25
|
-
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions,
|
|
25
|
+
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
26
26
|
|
|
27
27
|
nonTerminalNodeVerified = metastatementNodeVerified; ///
|
|
28
28
|
|
|
@@ -30,7 +30,7 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
default: {
|
|
33
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
33
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
34
34
|
|
|
35
35
|
break;
|
|
36
36
|
}
|
|
@@ -40,19 +40,19 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
40
40
|
return nonTerminalNodeVerified;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions,
|
|
43
|
+
verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
44
44
|
let metastatementNodeVerified;
|
|
45
45
|
|
|
46
46
|
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
47
47
|
|
|
48
48
|
if (metavariableNodeA !== null) {
|
|
49
|
-
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions,
|
|
49
|
+
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
50
50
|
|
|
51
51
|
metastatementNodeVerified = metaVariableNodeVerified; ///
|
|
52
52
|
} else {
|
|
53
53
|
const nonTerminalNodeA = metastatementNodeA, ///
|
|
54
54
|
nonTerminalNodeB = metastatementNodeB, ///
|
|
55
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
55
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
56
56
|
|
|
57
57
|
metastatementNodeVerified = nonTerminalNodeVerified; ///
|
|
58
58
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import LocalContext from "../../context/local";
|
|
4
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
5
4
|
import TermForVariableSubstitution from "../../substitution/termForVariable";
|
|
6
5
|
import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
|
|
@@ -16,7 +15,7 @@ const variableNodeQuery = nodeQuery("/*/variable!"),
|
|
|
16
15
|
substitutionNodeQuery = nodeQuery("/metastatement/substitution!");
|
|
17
16
|
|
|
18
17
|
class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
19
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
18
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
20
19
|
let nonTerminalNodeVerified;
|
|
21
20
|
|
|
22
21
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName();
|
|
@@ -24,7 +23,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
24
23
|
switch (nonTerminalNodeARuleName) {
|
|
25
24
|
case METASTATEMENT_RULE_NAME: {
|
|
26
25
|
const metastatementNodeA = nonTerminalNodeA, ///
|
|
27
|
-
metaArgumentNodeVerified = this.verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions,
|
|
26
|
+
metaArgumentNodeVerified = this.verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
28
27
|
|
|
29
28
|
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
30
29
|
|
|
@@ -33,7 +32,6 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
33
32
|
|
|
34
33
|
case TERM_RULE_NAME: {
|
|
35
34
|
const termNodeA = nonTerminalNodeA, ///
|
|
36
|
-
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
37
35
|
termNodeVerified = this.verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
38
36
|
|
|
39
37
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -42,14 +40,14 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
42
40
|
}
|
|
43
41
|
|
|
44
42
|
default: {
|
|
45
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
43
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
46
44
|
}
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
return nonTerminalNodeVerified;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions,
|
|
50
|
+
verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
53
51
|
let metastatementNodeVerified;
|
|
54
52
|
|
|
55
53
|
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
@@ -57,7 +55,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
57
55
|
switch (nonTerminalNodeBRuleName) {
|
|
58
56
|
case META_ARGUMENT_RULE_NAME: {
|
|
59
57
|
const metaArgumentNodeB = nonTerminalNodeB, ///
|
|
60
|
-
metaArgumentNodeVerified = this.verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions,
|
|
58
|
+
metaArgumentNodeVerified = this.verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
61
59
|
|
|
62
60
|
metastatementNodeVerified = metaArgumentNodeVerified; ///
|
|
63
61
|
|
|
@@ -66,7 +64,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
66
64
|
|
|
67
65
|
case STATEMENT_RULE_NAME: {
|
|
68
66
|
const statementNodeB = nonTerminalNodeB, ///
|
|
69
|
-
statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions,
|
|
67
|
+
statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
70
68
|
|
|
71
69
|
metastatementNodeVerified = statementNodeVerified; ///
|
|
72
70
|
|
|
@@ -77,7 +75,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
77
75
|
return metastatementNodeVerified;
|
|
78
76
|
}
|
|
79
77
|
|
|
80
|
-
verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions,
|
|
78
|
+
verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
81
79
|
let metaArgumentNodeVerified = false;
|
|
82
80
|
|
|
83
81
|
const statementNodeB = statementNodeQuery(metaArgumentNodeB),
|
|
@@ -85,7 +83,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
85
83
|
|
|
86
84
|
if ((metavariableNodeA !== null) && (statementNodeB !== null)) {
|
|
87
85
|
const substitutionNodeA = substitutionNodeQuery(metastatementNodeA),
|
|
88
|
-
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions,
|
|
86
|
+
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
89
87
|
|
|
90
88
|
metaArgumentNodeVerified = metavariableNodeVerified; ///
|
|
91
89
|
}
|
|
@@ -93,7 +91,32 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
93
91
|
return metaArgumentNodeVerified;
|
|
94
92
|
}
|
|
95
93
|
|
|
96
|
-
|
|
94
|
+
verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
95
|
+
let statementNodeVerified;
|
|
96
|
+
|
|
97
|
+
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
98
|
+
|
|
99
|
+
if (metavariableNodeA !== null) {
|
|
100
|
+
const substitutionNodeA = substitutionNodeQuery(metastatementNodeA),
|
|
101
|
+
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
102
|
+
|
|
103
|
+
statementNodeVerified = metavariableNodeVerified; ///
|
|
104
|
+
} else {
|
|
105
|
+
const nonTerminalNodeA = metastatementNodeA, ///
|
|
106
|
+
nonTerminalNodeB = statementNodeB, ///
|
|
107
|
+
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
108
|
+
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
109
|
+
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
110
|
+
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
111
|
+
childNodesVerified = super.verifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB, verifyAhead);
|
|
112
|
+
|
|
113
|
+
statementNodeVerified = childNodesVerified; ///
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return statementNodeVerified;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
97
120
|
let metavariableNodeVerified;
|
|
98
121
|
|
|
99
122
|
const substitution = substitutions.find((substitution) => {
|
|
@@ -105,8 +128,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
105
128
|
}) || null;
|
|
106
129
|
|
|
107
130
|
if (substitution !== null) {
|
|
108
|
-
const statementNode = substitution.getStatementNode()
|
|
109
|
-
localContextA = LocalContext.fromFileContext(fileContextA);
|
|
131
|
+
const statementNode = substitution.getStatementNode();
|
|
110
132
|
|
|
111
133
|
if (substitutionNodeA !== null) {
|
|
112
134
|
const substitutionNode = substitutionNodeA, ///
|
|
@@ -136,32 +158,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
136
158
|
return metavariableNodeVerified;
|
|
137
159
|
}
|
|
138
160
|
|
|
139
|
-
|
|
140
|
-
let statementNodeVerified;
|
|
141
|
-
|
|
142
|
-
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
143
|
-
|
|
144
|
-
if (metavariableNodeA !== null) {
|
|
145
|
-
const substitutionNodeA = null, ///
|
|
146
|
-
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
147
|
-
|
|
148
|
-
statementNodeVerified = metavariableNodeVerified; ///
|
|
149
|
-
} else {
|
|
150
|
-
const nonTerminalNodeA = metastatementNodeA, ///
|
|
151
|
-
nonTerminalNodeB = statementNodeB, ///
|
|
152
|
-
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
153
|
-
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
154
|
-
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
155
|
-
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
156
|
-
childNodesVerified = super.verifyChildNodes(childNodesA, childNodesB, substitutions, fileContextA, localContextB, verifyAhead);
|
|
157
|
-
|
|
158
|
-
statementNodeVerified = childNodesVerified; ///
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return statementNodeVerified;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
|
|
161
|
+
verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
165
162
|
let termNodeVerified = false;
|
|
166
163
|
|
|
167
164
|
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
@@ -172,14 +169,13 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
172
169
|
|
|
173
170
|
if (variableNodeA !== null) {
|
|
174
171
|
const termNodeB = nonTerminalNodeB, ///
|
|
175
|
-
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
176
172
|
variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
177
173
|
|
|
178
174
|
termNodeVerified = variableNodeVerified; ///
|
|
179
175
|
} else {
|
|
180
176
|
const nonTerminalNodeA = termNodeA, ///
|
|
181
177
|
nonTerminalNodeB = termNodeB, ///
|
|
182
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
178
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
183
179
|
|
|
184
180
|
termNodeVerified = nonTerminalNodeVerified; ///
|
|
185
181
|
}
|