occam-verify-cli 0.0.834 → 0.0.836

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 (51) hide show
  1. package/lib/conclusion.js +5 -5
  2. package/lib/consequent.js +3 -3
  3. package/lib/mixins/nodesVerifier/intrinsiclevel.js +59 -0
  4. package/lib/mixins/nodesVerifier/metaLevel.js +40 -0
  5. package/lib/premise.js +7 -7
  6. package/lib/substitution/metastatementForMetavariable.js +82 -5
  7. package/lib/substitution/statementForMetavariable.js +82 -5
  8. package/lib/substitution/termForVariable.js +82 -5
  9. package/lib/substitution.js +74 -0
  10. package/lib/supposition.js +4 -4
  11. package/lib/utilities/metaproof.js +2 -2
  12. package/lib/utilities/proof.js +2 -2
  13. package/lib/verifier/node/statementAsCombinator.js +7 -7
  14. package/lib/verifier/node/termAsConstructor.js +10 -18
  15. package/lib/verifier/nodes/equality.js +18 -8
  16. package/lib/verifier/nodes/intrinsicLevel.js +183 -0
  17. package/lib/verifier/nodes/metaLevel.js +183 -0
  18. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +257 -0
  19. package/lib/verifier/nodes/statement.js +8 -9
  20. package/lib/verifier/nodes/term.js +3 -3
  21. package/lib/verify/containment.js +5 -14
  22. package/lib/verify/statement.js +23 -62
  23. package/package.json +2 -2
  24. package/src/conclusion.js +4 -4
  25. package/src/consequent.js +2 -2
  26. package/src/mixins/nodesVerifier/intrinsiclevel.js +73 -0
  27. package/src/mixins/nodesVerifier/metaLevel.js +39 -0
  28. package/src/premise.js +6 -6
  29. package/src/substitution/metastatementForMetavariable.js +5 -1
  30. package/src/substitution/statementForMetavariable.js +5 -1
  31. package/src/substitution/termForVariable.js +5 -1
  32. package/src/substitution.js +33 -0
  33. package/src/supposition.js +3 -3
  34. package/src/utilities/metaproof.js +1 -1
  35. package/src/utilities/proof.js +1 -1
  36. package/src/verifier/node/statementAsCombinator.js +10 -11
  37. package/src/verifier/node/termAsConstructor.js +11 -11
  38. package/src/verifier/nodes/equality.js +25 -10
  39. package/src/verifier/nodes/intrinsicLevel.js +68 -0
  40. package/src/verifier/nodes/metaLevel.js +68 -0
  41. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +170 -0
  42. package/src/verifier/nodes/statement.js +12 -13
  43. package/src/verifier/nodes/term.js +4 -2
  44. package/src/verify/containment.js +2 -3
  45. package/src/verify/statement.js +24 -25
  46. package/lib/verifier/nodes/metastatementForMetavariable.js +0 -197
  47. package/lib/verifier/nodes/statementForMetavariable.js +0 -202
  48. package/lib/verifier/nodes/termForVariable.js +0 -216
  49. package/src/verifier/nodes/metastatementForMetavariable.js +0 -87
  50. package/src/verifier/nodes/statementForMetavariable.js +0 -103
  51. package/src/verifier/nodes/termForVariable.js +0 -120
@@ -15,17 +15,11 @@ class EqualityNodesVerifier extends NodesVerifier {
15
15
  if (ruleNameA === ruleNameB) {
16
16
  switch (ruleNameA) {
17
17
  case TERM_RULE_NAME: {
18
- const leftTermNode = nonTerminalNodeA, ///
19
- rightTermNode = nonTerminalNodeB, ///
20
- termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, collections);
18
+ const termNodeA = nonTerminalNodeA, ///
19
+ termNodeB = nonTerminalNodeB, ///
20
+ termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, collections, localContext, verifyAhead);
21
21
 
22
- if (termNodesEqual) {
23
- const verifiedAhead = verifyAhead();
24
-
25
- nonTerminalNodeVerified = verifiedAhead; ///
26
- } else {
27
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, collections, localContext, verifyAhead);
28
- }
22
+ nonTerminalNodeVerified = termNodeVerified; ///
29
23
 
30
24
  break;
31
25
  }
@@ -40,6 +34,27 @@ class EqualityNodesVerifier extends NodesVerifier {
40
34
 
41
35
  return nonTerminalNodeVerified;
42
36
  }
37
+
38
+ verifyTermNode(termNodeA, termNodeB, collections, localContext, verifyAhead) {
39
+ let termNodeVerified;
40
+
41
+ const leftTermNode = termNodeA, ///
42
+ rightTermNode = termNodeB, ///
43
+ termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, collections);
44
+
45
+ if (termNodesEqual) {
46
+ const verifiedAhead = verifyAhead();
47
+
48
+ termNodeVerified = verifiedAhead; ///
49
+ } else {
50
+ const nonTerminalNodeA = termNodeA, ///
51
+ nonTerminalNodeB = termNodeB; ///
52
+
53
+ termNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, collections, localContext, verifyAhead);
54
+ }
55
+
56
+ return termNodeVerified;
57
+ }
43
58
  }
44
59
 
45
60
  const equalityNodesVerifier = new EqualityNodesVerifier();
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ import NodesVerifier from "../../verifier/nodes";
4
+ import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
5
+
6
+ import { nodeQuery } from "../../utilities/query";
7
+ import { TERM_RULE_NAME } from "../../ruleNames";
8
+
9
+ const variableNodeQuery = nodeQuery("/term/variable!");
10
+
11
+ class IntrinsicLevelNodesVerifier extends NodesVerifier {
12
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
13
+ let nonTerminalNodeVerified = false;
14
+
15
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
16
+ nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
17
+
18
+ if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
19
+ const ruleName = nonTerminalNodeARuleName; ///
20
+
21
+ switch (ruleName) {
22
+ case TERM_RULE_NAME: {
23
+ const termNodeA = nonTerminalNodeA, ///
24
+ termNodeB = nonTerminalNodeB, ///
25
+ termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
26
+
27
+ nonTerminalNodeVerified = termNodeVerified; ///
28
+
29
+ break;
30
+ }
31
+
32
+ default: {
33
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
34
+
35
+ break;
36
+ }
37
+ }
38
+ }
39
+
40
+ return nonTerminalNodeVerified;
41
+ }
42
+
43
+ verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
44
+ let termNodeVerified;
45
+
46
+ const variableNodeA = variableNodeQuery(termNodeA);
47
+
48
+ if (variableNodeA !== null) {
49
+ const variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
50
+
51
+ termNodeVerified = variableNodeVerified; ///
52
+ } else {
53
+ const nonTerminalNodeA = termNodeA, ///
54
+ nonTerminalNodeB = termNodeB, ///
55
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
56
+
57
+ termNodeVerified = nonTerminalNodeVerified; ///
58
+ }
59
+
60
+ return termNodeVerified;
61
+ }
62
+ }
63
+
64
+ Object.assign(IntrinsicLevelNodesVerifier.prototype, intrinsicLevelNodesVerifierMixins);
65
+
66
+ const intrinsicLevelNodesVerifier = new IntrinsicLevelNodesVerifier();
67
+
68
+ export default intrinsicLevelNodesVerifier;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ import NodesVerifier from "../../verifier/nodes";
4
+ import metaLevelNodesVerifierMixins from "../../mixins/nodesVerifier/metaLevel";
5
+
6
+ import { nodeQuery } from "../../utilities/query";
7
+ import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
8
+
9
+ const metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
10
+
11
+ class MetaLevelNodesVerifier extends NodesVerifier {
12
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead) {
13
+ let nonTerminalNodeVerified = false;
14
+
15
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
16
+ nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
17
+
18
+ if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
19
+ const ruleName = nonTerminalNodeARuleName; ///
20
+
21
+ switch (ruleName) {
22
+ case METASTATEMENT_RULE_NAME: {
23
+ const metastatementNodeA = nonTerminalNodeA, ///
24
+ metastatementNodeB = nonTerminalNodeB, ///
25
+ metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
26
+
27
+ nonTerminalNodeVerified = metastatementNodeVerified; ///
28
+
29
+ break;
30
+ }
31
+
32
+ default: {
33
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
34
+
35
+ break;
36
+ }
37
+ }
38
+ }
39
+
40
+ return nonTerminalNodeVerified;
41
+ }
42
+
43
+ verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead) {
44
+ let metastatementNodeVerified;
45
+
46
+ const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
47
+
48
+ if (metavariableNodeA !== null) {
49
+ const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
50
+
51
+ metastatementNodeVerified = metaVariableNodeVerified; ///
52
+ } else {
53
+ const nonTerminalNodeA = metastatementNodeA, ///
54
+ nonTerminalNodeB = metastatementNodeB, ///
55
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead);
56
+
57
+ metastatementNodeVerified = nonTerminalNodeVerified; ///
58
+ }
59
+
60
+ return metastatementNodeVerified;
61
+ }
62
+ }
63
+
64
+ Object.assign(MetaLevelNodesVerifier.prototype, metaLevelNodesVerifierMixins);
65
+
66
+ const metaLevelNodesVerifier = new MetaLevelNodesVerifier();
67
+
68
+ export default metaLevelNodesVerifier;
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+
3
+ import LocalContext from "../../context/local";
4
+ import NodesVerifier from "../../verifier/nodes";
5
+ import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
6
+ import StatementForMetavariableSubstitution from "../../substitution/statementForMetavariable";
7
+
8
+ import { nodeQuery } from "../../utilities/query";
9
+ import { TERM_RULE_NAME, STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
10
+
11
+ const variableNodeQuery = nodeQuery("/term/variable!"),
12
+ statementNodeQuery = nodeQuery("/metaArgument/statement"),
13
+ metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
14
+
15
+ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
16
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
17
+ let nonTerminalNodeVerified;
18
+
19
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName();
20
+
21
+ switch (nonTerminalNodeARuleName) {
22
+ case METASTATEMENT_RULE_NAME: {
23
+ const metastatementNodeA = nonTerminalNodeA, ///
24
+ metaArgumentNodeVerified = this.verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
25
+
26
+ nonTerminalNodeVerified = metaArgumentNodeVerified; ///
27
+
28
+ break;
29
+ }
30
+
31
+ case TERM_RULE_NAME: {
32
+ const termNodeA = nonTerminalNodeA, ///
33
+ termNodeVerified = this.verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
34
+
35
+ nonTerminalNodeVerified = termNodeVerified; ///
36
+
37
+ break;
38
+ }
39
+
40
+ default: {
41
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
42
+ }
43
+ }
44
+
45
+ return nonTerminalNodeVerified;
46
+ }
47
+
48
+ verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
49
+ let metastatementNodeVerified;
50
+
51
+ const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
52
+
53
+ switch (nonTerminalNodeBRuleName) {
54
+ case META_ARGUMENT_RULE_NAME: {
55
+ const metaArgumentNodeB = nonTerminalNodeB, ///
56
+ metaArgumentNodeVerified = this.verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, fileContextA, localContextB, verifyAhead);
57
+
58
+ metastatementNodeVerified = metaArgumentNodeVerified; ///
59
+
60
+ break;
61
+ }
62
+
63
+ case STATEMENT_RULE_NAME: {
64
+ const statementNodeB = nonTerminalNodeB, ///
65
+ statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead);
66
+
67
+ metastatementNodeVerified = statementNodeVerified; ///
68
+
69
+ break;
70
+ }
71
+ }
72
+
73
+ return metastatementNodeVerified;
74
+ }
75
+
76
+ verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
77
+ let metaArgumentNodeVerified = false;
78
+
79
+ const statementNodeB = statementNodeQuery(metaArgumentNodeB),
80
+ metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
81
+
82
+ if ((metavariableNodeA !== null) && (statementNodeB !== null)) {
83
+ const metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead);
84
+
85
+ metaArgumentNodeVerified = metavariableNodeVerified; ///
86
+ }
87
+
88
+ return metaArgumentNodeVerified;
89
+ }
90
+
91
+ verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
92
+ let metavariableNodeVerified;
93
+
94
+ const substitution = substitutions.find((substitution) => {
95
+ const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNodeA);
96
+
97
+ if (substitutionMatchesMetavariableNodeA) {
98
+ return true;
99
+ }
100
+ }) || null;
101
+
102
+ if (substitution !== null) {
103
+ const statementNode = statementNodeB, ///
104
+ statementNodeMatches = substitution.matchStatementNode(statementNode);
105
+
106
+ metavariableNodeVerified = statementNodeMatches; ///
107
+ } else {
108
+ const metavariableNode = metavariableNodeA, ///
109
+ statementNode = statementNodeB, ///
110
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode),
111
+ substitution = statementForMetavariableSubstitution; ///
112
+
113
+ substitutions.push(substitution);
114
+
115
+ metavariableNodeVerified = true;
116
+ }
117
+
118
+ return metavariableNodeVerified;
119
+ }
120
+
121
+ verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
122
+ let statementNodeVerified;
123
+
124
+ const nonTerminalNodeA = metastatementNodeA, ///
125
+ nonTerminalNodeB = statementNodeB, ///
126
+ nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
127
+ nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
128
+ childNodesA = nonTerminalNodeAChildNodes, ///
129
+ childNodesB = nonTerminalNodeBChildNodes, ///
130
+ childNodesVerified = super.verifyChildNodes(childNodesA, childNodesB, substitutions, fileContextA, localContextB, verifyAhead);
131
+
132
+ statementNodeVerified = childNodesVerified; ///
133
+
134
+ return statementNodeVerified;
135
+ }
136
+
137
+ verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead) {
138
+ let termNodeVerified = false;
139
+
140
+ const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
141
+
142
+ switch (nonTerminalNodeBRuleName) {
143
+ case TERM_RULE_NAME: {
144
+ const variableNodeA = variableNodeQuery(termNodeA);
145
+
146
+ if (variableNodeA !== null) {
147
+ const termNodeB = nonTerminalNodeB, ///
148
+ localContextA = LocalContext.fromFileContext(fileContextA),
149
+ variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
150
+
151
+ termNodeVerified = variableNodeVerified; ///
152
+ } else {
153
+ const nonTerminalNodeA = termNodeA, ///
154
+ nonTerminalNodeB = termNodeB, ///
155
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContextB, verifyAhead);
156
+
157
+ termNodeVerified = nonTerminalNodeVerified; ///
158
+ }
159
+ }
160
+ }
161
+
162
+ return termNodeVerified;
163
+ }
164
+ }
165
+
166
+ Object.assign(MetaLevelToIntrinsicLevelNodesVerifier.prototype, intrinsicLevelNodesVerifierMixins);
167
+
168
+ const metaLevelToIntrinsicLevelNodesVerifier = new MetaLevelToIntrinsicLevelNodesVerifier();
169
+
170
+ export default metaLevelToIntrinsicLevelNodesVerifier;
@@ -16,23 +16,12 @@ class StatementNodesVerifier extends NodesVerifier {
16
16
  let nonTerminalNodeVerified = false;
17
17
 
18
18
  const nonTerminalNode = nonTerminalNodeA, ///
19
- combinatorNonTerminalNode = nonTerminalNodeB; ///
20
-
21
- const ruleName = nonTerminalNode.getRuleName(), ///
19
+ combinatorNonTerminalNode = nonTerminalNodeB, ///
20
+ ruleName = nonTerminalNode.getRuleName(), ///
22
21
  combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
23
22
 
24
23
  if (ruleName === combinatorRuleName) {
25
24
  switch (ruleName) {
26
- case ARGUMENT_RULE_NAME: {
27
- const argumentNode = nonTerminalNode, ///
28
- constructorArgumentNode = combinatorNonTerminalNode, ///
29
- argumentNodeVerified = termNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead);
30
-
31
- nonTerminalNodeVerified = argumentNodeVerified; ///
32
-
33
- break;
34
- }
35
-
36
25
  case META_ARGUMENT_RULE_NAME: {
37
26
  const metaArgumentNode = nonTerminalNode, ///
38
27
  combinatorMetaargumentNode = combinatorNonTerminalNode, ///
@@ -43,6 +32,16 @@ class StatementNodesVerifier extends NodesVerifier {
43
32
  break;
44
33
  }
45
34
 
35
+ case ARGUMENT_RULE_NAME: {
36
+ const argumentNode = nonTerminalNode, ///
37
+ constructorArgumentNode = combinatorNonTerminalNode, ///
38
+ argumentNodeVerified = termNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, context, verifyAhead);
39
+
40
+ nonTerminalNodeVerified = argumentNodeVerified; ///
41
+
42
+ break;
43
+ }
44
+
46
45
  default: {
47
46
  nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead);
48
47
 
@@ -10,10 +10,12 @@ const termNodeQuery = nodeQuery("/argument/term!"),
10
10
  typeNodeQuery = nodeQuery("/argument/type!");
11
11
 
12
12
  class TermNodesVerifier extends NodesVerifier {
13
- verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode, context, verifyAhead) {
13
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead) {
14
14
  let nonTerminalNodeVerified = false;
15
15
 
16
- const ruleName = nonTerminalNode.getRuleName(), ///
16
+ const nonTerminalNode = nonTerminalNodeA, ///
17
+ constructorNonTerminalNode = nonTerminalNodeB, ///
18
+ ruleName = nonTerminalNode.getRuleName(), ///
17
19
  constructorRuleName = constructorNonTerminalNode.getRuleName(); ///
18
20
 
19
21
  if (ruleName === constructorRuleName) {
@@ -4,9 +4,8 @@ import { third } from "../utilities/array";
4
4
  import { CONTAINED } from "../constants";
5
5
  import { nodeQuery, nodesQuery } from "../utilities/query";
6
6
 
7
- const statementVariableNodesQuery = nodesQuery("/statement//variable");
8
-
9
- export const containmentVariableNodeQuery = nodeQuery("/containment/argument/term/variable!");
7
+ const statementVariableNodesQuery = nodesQuery("/statement//variable"),
8
+ containmentVariableNodeQuery = nodeQuery("/containment/argument/term/variable!");
10
9
 
11
10
  export default function verifyContainment(containmentNode, statementNode) {
12
11
  let containmentVerified = false;
@@ -7,10 +7,9 @@ import verifyTypeAssertion from "../verify/typeAssertion";
7
7
  import statementNodesVerifier from "../verifier/nodes/statement";
8
8
 
9
9
  import { nodeQuery } from "../utilities/query";
10
- import { containmentVariableNodeQuery } from "../verify/containment";
11
10
 
12
11
  const equalityNodeQuery = nodeQuery("/statement/equality!"),
13
- statementNodeQuery = nodeQuery("/statement/statement!"),
12
+ statementNodeQuery = nodeQuery("/statement/metaArgument/statement!"),
14
13
  containmentNodeQuery = nodeQuery("/statement/containment!"),
15
14
  typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
16
15
 
@@ -120,37 +119,37 @@ function verifyStatementWithContainment(statementNode, assignments, derived, con
120
119
  const containmentNode = containmentNodeQuery(statementNode);
121
120
 
122
121
  if (containmentNode !== null) {
123
- statementNode = statementNodeQuery(statementNode); ///
122
+ const statementString = context.nodeAsString(statementNode);
124
123
 
125
- const statementString = context.nodeAsString(statementNode),
126
- containmentVariableNode = containmentVariableNodeQuery(containmentNode),
127
- containmentVariableString = context.nodeAsString(containmentVariableNode);
124
+ statementNode = statementNodeQuery(statementNode); ///
128
125
 
129
- context.trace(`Verifying that the '${containmentVariableString}' is either contained in or omitted from the '${statementString}' statement...`, statementNode);
126
+ if (statementNode !== null) {
127
+ context.trace(`Verifying the '${statementString}' statement with containment...`, statementNode);
130
128
 
131
- const containmentVerified = verifyContainment(containmentNode, statementNode);
129
+ const containmentVerified = verifyContainment(containmentNode, statementNode);
132
130
 
133
- if (containmentVerified) {
134
- const verifyStatementFunctions = [
135
- verifyStatementAsEquality,
136
- verifyStatementAgainstCombinators
137
- ];
131
+ if (containmentVerified) {
132
+ const verifyStatementFunctions = [
133
+ verifyStatementAsEquality,
134
+ verifyStatementAgainstCombinators
135
+ ];
138
136
 
139
- const statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
140
- const derived = false,
141
- assignments = [],
142
- statementVerified = verifyStatementFunction(statementNode, assignments, derived, context, verifyAhead);
137
+ const statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
138
+ const derived = false,
139
+ assignments = [],
140
+ statementVerified = verifyStatementFunction(statementNode, assignments, derived, context, verifyAhead);
143
141
 
144
- if (statementVerified) {
145
- return true;
146
- }
147
- });
142
+ if (statementVerified) {
143
+ return true;
144
+ }
145
+ });
148
146
 
149
- statementVerifiedWithContainment = statementVerified; ///
150
- }
147
+ statementVerifiedWithContainment = statementVerified; ///
148
+ }
151
149
 
152
- if (statementVerifiedWithContainment) {
153
- context.debug(`...verified that '${containmentVariableString}' is either contained in or omitted from the '${statementString}' statement.`, statementNode);
150
+ if (statementVerifiedWithContainment) {
151
+ context.debug(`...verified the '${statementString}' statement with containment.`, statementNode);
152
+ }
154
153
  }
155
154
  }
156
155