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.
Files changed (79) hide show
  1. package/lib/assignment/equality.js +4 -4
  2. package/lib/assignment/variable.js +4 -4
  3. package/lib/conclusion.js +5 -5
  4. package/lib/context/local.js +14 -1
  5. package/lib/equality.js +5 -3
  6. package/lib/equivalence.js +17 -17
  7. package/lib/mixins/nodesVerifier/intrinsiclevel.js +2 -2
  8. package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
  9. package/lib/premise.js +6 -5
  10. package/lib/substitution/statementForMetavariable.js +29 -9
  11. package/lib/substitution/termForVariable.js +8 -1
  12. package/lib/term.js +9 -9
  13. package/lib/utilities/array.js +1 -11
  14. package/lib/utilities/equivalences.js +14 -14
  15. package/lib/verifier/node/metastatement.js +5 -4
  16. package/lib/verifier/node/statementAsCombinator.js +6 -6
  17. package/lib/verifier/node/termAsConstructor.js +5 -5
  18. package/lib/verifier/nodes/metaLevel.js +7 -7
  19. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +30 -31
  20. package/lib/verifier/nodes/statementAgainstCombinator.js +11 -11
  21. package/lib/verifier/nodes/substitution.js +223 -0
  22. package/lib/verifier/nodes/termAgainstConstructor.js +10 -10
  23. package/lib/verify/containment.js +29 -10
  24. package/lib/verify/defining.js +6 -6
  25. package/lib/verify/equality.js +17 -17
  26. package/lib/verify/givenType.js +6 -6
  27. package/lib/verify/givenVariable.js +6 -6
  28. package/lib/verify/metavariable.js +6 -6
  29. package/lib/verify/statement/qualified.js +13 -13
  30. package/lib/verify/statement/unqualified.js +2 -2
  31. package/lib/verify/statement.js +40 -40
  32. package/lib/verify/statementAsCombinator.js +2 -1
  33. package/lib/verify/term.js +30 -30
  34. package/lib/verify/termAndGivenType.js +7 -7
  35. package/lib/verify/termAsConstructor.js +3 -2
  36. package/lib/verify/terms.js +7 -7
  37. package/lib/verify/type.js +7 -7
  38. package/lib/verify/typeAssertion.js +19 -19
  39. package/lib/verify/variable.js +6 -6
  40. package/package.json +1 -1
  41. package/src/assignment/equality.js +5 -5
  42. package/src/assignment/variable.js +5 -5
  43. package/src/conclusion.js +6 -6
  44. package/src/context/local.js +12 -0
  45. package/src/equality.js +6 -4
  46. package/src/equivalence.js +16 -16
  47. package/src/mixins/nodesVerifier/intrinsiclevel.js +2 -2
  48. package/src/mixins/nodesVerifier/metaLevel.js +1 -1
  49. package/src/premise.js +9 -4
  50. package/src/substitution/statementForMetavariable.js +44 -12
  51. package/src/substitution/termForVariable.js +10 -0
  52. package/src/term.js +8 -8
  53. package/src/utilities/array.js +0 -6
  54. package/src/utilities/equivalences.js +13 -13
  55. package/src/verifier/node/metastatement.js +8 -9
  56. package/src/verifier/node/statementAsCombinator.js +8 -11
  57. package/src/verifier/node/termAsConstructor.js +6 -8
  58. package/src/verifier/nodes/metaLevel.js +6 -6
  59. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +37 -41
  60. package/src/verifier/nodes/statementAgainstCombinator.js +10 -10
  61. package/src/verifier/nodes/substitution.js +125 -0
  62. package/src/verifier/nodes/termAgainstConstructor.js +9 -9
  63. package/src/verify/containment.js +38 -12
  64. package/src/verify/defining.js +5 -5
  65. package/src/verify/equality.js +16 -16
  66. package/src/verify/givenType.js +5 -5
  67. package/src/verify/givenVariable.js +5 -5
  68. package/src/verify/metavariable.js +5 -5
  69. package/src/verify/statement/qualified.js +12 -13
  70. package/src/verify/statement/unqualified.js +1 -2
  71. package/src/verify/statement.js +39 -39
  72. package/src/verify/statementAsCombinator.js +1 -0
  73. package/src/verify/term.js +29 -29
  74. package/src/verify/termAndGivenType.js +7 -7
  75. package/src/verify/termAsConstructor.js +3 -1
  76. package/src/verify/terms.js +7 -7
  77. package/src/verify/type.js +6 -6
  78. package/src/verify/typeAssertion.js +18 -18
  79. 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
- const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions);
124
+ let substitutionsA = []; ///
106
125
 
107
- substitution = termForVariableSubstitution; ///
126
+ if (intrinsic) {
127
+ const substitutionA = termForVariableSubstitution; ///
108
128
 
109
- substitutions = [ ///
110
- substitution
111
- ];
129
+ substitutionsA.push(substitutionA);
130
+ }
112
131
 
113
- const nonTerminalNodeA = statementNodeA, ///
132
+ const nonTerminalNodeA = statementNodeA, ///
114
133
  nonTerminalNodeB = statementNodeB, ///
115
- nonTerminalNodeVerified = intrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
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
- statementNodeMatches = nonTerminalNodeVerified; ///
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(context) {
29
+ getVariables(localContext) {
30
30
  const variables = [],
31
31
  variableNodes = variableNodesQuery(this.node);
32
32
 
33
33
  variableNodes.forEach((variableNode) => {
34
- const variable = context.findVariableByVariableNode(variableNode),
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, context) {
46
- const variables = this.getVariables(context);
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(context) {
64
- const variables = this.getVariables(context),
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, context) {
72
- const grounded = this.isGrounded(definedVariables, context),
71
+ isImplicitlyGrounded(definedVariables, localContext) {
72
+ const grounded = this.isGrounded(definedVariables, localContext),
73
73
  implicitlyGrounded = grounded; ///
74
74
 
75
75
  return implicitlyGrounded;
@@ -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, context) {
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, context);
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, context);
112
+ groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, localContext);
113
113
 
114
- definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context);
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, context);
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, context) {
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(context);
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, context) {
175
+ function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences, localContext) {
176
176
  separate(equivalences, remainingEquivalences, initiallyGroundedEquivalences, (equivalence) => {
177
- const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(context);
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, context) {
185
+ function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, localContext) {
186
186
  separate(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, (equivalence) => {
187
- const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables, context);
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, context) {
195
+ function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, localContext) {
196
196
  groundedEquivalences.forEach((groundedEquivalence) => {
197
- groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms, context);
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 context = localMetaContext, ///
19
- metavariableNode = nonTerminalNode, ///
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 context = localMetaContext, ///
30
- variableNode = nonTerminalNode, ///
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 context = localMetaContext, ///
41
- termNode = nonTerminalNode, ///
42
- standaloneTermVerified = verifyStandaloneTerm(termNode, context, verifyAhead),
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, fileContext, verifyAhead) {
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 context = fileContext, ///
19
- statementNode = nonTerminalNode, ///
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 context = fileContext, ///
30
- termNode = nonTerminalNode, ///
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 context = fileContext, ///
41
- typeNode = nonTerminalNode, ///
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, fileContext, verifyAhead); ///
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, fileContext, verifyAhead) {
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 context = fileContext, ///
18
- termNode = nonTerminalNode, ///
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 context = fileContext, ///
29
- typeNode = nonTerminalNode, ///
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, fileContext, verifyAhead);
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, fileContextA, localMetaContextB, verifyAhead) {
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, fileContextA, localMetaContextB, verifyAhead);
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, fileContextA, localMetaContextB, verifyAhead);
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, fileContextA, localMetaContextB, verifyAhead) {
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, fileContextA, localMetaContextB, verifyAhead);
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, fileContextA, localMetaContextB, verifyAhead);
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, fileContextA, localContextB, verifyAhead) {
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, fileContextA, localContextB, verifyAhead);
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, fileContextA, localContextB, verifyAhead);
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, fileContextA, localContextB, verifyAhead) {
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, fileContextA, localContextB, verifyAhead);
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, fileContextA, localContextB, verifyAhead);
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, fileContextA, localContextB, verifyAhead) {
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, fileContextA, localContextB, verifyAhead);
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
- verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
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
- verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
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, fileContextA, localContextB, verifyAhead);
178
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
183
179
 
184
180
  termNodeVerified = nonTerminalNodeVerified; ///
185
181
  }