occam-verify-cli 0.0.869 → 0.0.871

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 (129) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +13 -13
  2. package/lib/conclusion.js +3 -3
  3. package/lib/context/file.js +77 -73
  4. package/lib/equality.js +2 -4
  5. package/lib/equivalence.js +1 -1
  6. package/lib/label.js +5 -6
  7. package/lib/metaLemmaMetatheorem.js +13 -13
  8. package/lib/mixins/context.js +28 -28
  9. package/lib/premise.js +4 -4
  10. package/lib/rule.js +13 -13
  11. package/lib/ruleNames.js +1 -29
  12. package/lib/substitution/metastatementForMetavariable.js +3 -2
  13. package/lib/substitution/statementForMetavariable.js +27 -64
  14. package/lib/substitution/termForVariable.js +5 -5
  15. package/lib/utilities/name.js +8 -8
  16. package/lib/utilities/node.js +14 -14
  17. package/lib/utilities/query.js +4 -9
  18. package/lib/utilities/tokens.js +6 -6
  19. package/lib/utilities/verifier.js +86 -0
  20. package/lib/verifier/node/metastatement.js +41 -28
  21. package/lib/verifier/node/statementAsCombinator.js +41 -28
  22. package/lib/verifier/node/termAsConstructor.js +30 -22
  23. package/lib/verifier/nodes/equality.js +27 -32
  24. package/lib/verifier/nodes/intrinsicLevel.js +25 -34
  25. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
  26. package/lib/verifier/nodes/metaLevel.js +25 -34
  27. package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
  28. package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
  29. package/lib/verify/argumentAgainstArgument.js +24 -0
  30. package/lib/verify/axiom.js +4 -4
  31. package/lib/verify/conjecture.js +4 -4
  32. package/lib/verify/containment.js +5 -5
  33. package/lib/verify/equality.js +9 -9
  34. package/lib/verify/label.js +8 -9
  35. package/lib/verify/labels.js +15 -8
  36. package/lib/verify/lemma.js +4 -4
  37. package/lib/verify/metaDerivation.js +19 -19
  38. package/lib/verify/metaLemma.js +4 -4
  39. package/lib/verify/metaproof.js +4 -6
  40. package/lib/verify/metastatement/qualified.js +3 -3
  41. package/lib/verify/metatheorem.js +4 -4
  42. package/lib/verify/metavariable.js +7 -5
  43. package/lib/verify/metavariableAgainstMetastatement.js +44 -0
  44. package/lib/verify/metavariableAgainstStatement.js +65 -0
  45. package/lib/verify/rule.js +4 -4
  46. package/lib/verify/statement/qualified.js +29 -29
  47. package/lib/verify/statement.js +4 -4
  48. package/lib/verify/statementAgainstMetaType.js +24 -0
  49. package/lib/verify/statementAtainstStatement.js +52 -0
  50. package/lib/verify/term.js +7 -8
  51. package/lib/verify/termAgainstTerm.js +22 -0
  52. package/lib/verify/termAgainstType.js +26 -0
  53. package/lib/verify/terms.js +2 -3
  54. package/lib/verify/theorem.js +4 -4
  55. package/lib/verify/type.js +7 -5
  56. package/lib/verify/typeAssertion.js +45 -40
  57. package/lib/verify/variable.js +7 -5
  58. package/lib/verify/variableAgainstTerm.js +70 -0
  59. package/package.json +4 -4
  60. package/src/axiomLemmaTheoremConjecture.js +13 -13
  61. package/src/conclusion.js +2 -2
  62. package/src/context/file.js +79 -73
  63. package/src/equality.js +3 -9
  64. package/src/equivalence.js +1 -1
  65. package/src/label.js +6 -7
  66. package/src/metaLemmaMetatheorem.js +13 -13
  67. package/src/mixins/context.js +17 -17
  68. package/src/premise.js +3 -3
  69. package/src/rule.js +13 -13
  70. package/src/ruleNames.js +0 -7
  71. package/src/substitution/metastatementForMetavariable.js +3 -1
  72. package/src/substitution/statementForMetavariable.js +32 -74
  73. package/src/substitution/termForVariable.js +3 -3
  74. package/src/utilities/name.js +7 -7
  75. package/src/utilities/node.js +13 -13
  76. package/src/utilities/query.js +3 -9
  77. package/src/utilities/tokens.js +4 -4
  78. package/src/utilities/verifier.js +46 -0
  79. package/src/verifier/node/metastatement.js +41 -34
  80. package/src/verifier/node/statementAsCombinator.js +39 -32
  81. package/src/verifier/node/termAsConstructor.js +30 -25
  82. package/src/verifier/nodes/equality.js +31 -36
  83. package/src/verifier/nodes/intrinsicLevel.js +30 -38
  84. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
  85. package/src/verifier/nodes/metaLevel.js +30 -38
  86. package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
  87. package/src/verifier/nodes/termAgainstConstructor.js +30 -71
  88. package/src/verify/argumentAgainstArgument.js +15 -0
  89. package/src/verify/axiom.js +4 -4
  90. package/src/verify/conjecture.js +4 -4
  91. package/src/verify/containment.js +4 -4
  92. package/src/verify/equality.js +8 -8
  93. package/src/verify/label.js +8 -9
  94. package/src/verify/labels.js +17 -7
  95. package/src/verify/lemma.js +4 -4
  96. package/src/verify/metaDerivation.js +18 -18
  97. package/src/verify/metaLemma.js +6 -6
  98. package/src/verify/metaproof.js +3 -6
  99. package/src/verify/metastatement/qualified.js +5 -4
  100. package/src/verify/metatheorem.js +4 -4
  101. package/src/verify/metavariable.js +7 -5
  102. package/src/verify/metavariableAgainstMetastatement.js +42 -0
  103. package/src/verify/metavariableAgainstStatement.js +77 -0
  104. package/src/verify/rule.js +4 -4
  105. package/src/verify/statement/qualified.js +35 -30
  106. package/src/verify/statement.js +5 -5
  107. package/src/verify/statementAgainstMetaType.js +21 -0
  108. package/src/verify/statementAtainstStatement.js +60 -0
  109. package/src/verify/term.js +13 -17
  110. package/src/verify/termAgainstTerm.js +20 -0
  111. package/src/verify/termAgainstType.js +28 -0
  112. package/src/verify/terms.js +1 -3
  113. package/src/verify/theorem.js +4 -4
  114. package/src/verify/type.js +7 -5
  115. package/src/verify/typeAssertion.js +56 -55
  116. package/src/verify/variable.js +7 -5
  117. package/src/verify/variableAgainstTerm.js +86 -0
  118. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
  119. package/lib/verifier/nodes/substitution.js +0 -223
  120. package/lib/verify/givenMetavariable.js +0 -31
  121. package/lib/verify/givenType.js +0 -31
  122. package/lib/verify/givenVariable.js +0 -31
  123. package/lib/verify/termAndGivenType.js +0 -39
  124. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
  125. package/src/verifier/nodes/substitution.js +0 -125
  126. package/src/verify/givenMetavariable.js +0 -31
  127. package/src/verify/givenType.js +0 -31
  128. package/src/verify/givenVariable.js +0 -31
  129. package/src/verify/termAndGivenType.js +0 -37
@@ -1,59 +1,54 @@
1
1
  "use strict";
2
2
 
3
3
  import NodesVerifier from "../../verifier/nodes";
4
+ import verifyTermAgainstTerm from "../../verify/termAgainstTerm";
4
5
 
5
- import { TERM_RULE_NAME } from "../../ruleNames";
6
- import { areTermNodesEqual } from "../../utilities/equivalences";
6
+ import { nodeQuery } from "../../utilities/query";
7
+ import { verifyNodes } from "../../utilities/verifier";
7
8
 
8
- class EqualityNodesVerifier extends NodesVerifier {
9
- verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equivalences, localContext, verifyAhead) {
10
- let nonTerminalNodeVerified = false;
9
+ const termNodeQuery = nodeQuery("/term!");
11
10
 
12
- const ruleNameA = nonTerminalNodeA.getRuleName(), ///
13
- ruleNameB = nonTerminalNodeB.getRuleName(); ///
11
+ class EqualityNodesVerifier extends NodesVerifier {
12
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
13
+ let nonTerminalNodeVerified;
14
14
 
15
- if (ruleNameA === ruleNameB) {
16
- switch (ruleNameA) {
17
- case TERM_RULE_NAME: {
18
- const termNodeA = nonTerminalNodeA, ///
19
- termNodeB = nonTerminalNodeB, ///
20
- termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, equivalences, localContext, verifyAhead);
15
+ const nodeQueryMaps = [
16
+ {
17
+ nodeQueryA: termNodeQuery,
18
+ nodeQueryB: termNodeQuery,
19
+ verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
20
+ let nonTerminalNodeVerified;
21
21
 
22
- nonTerminalNodeVerified = termNodeVerified; ///
22
+ const termNodeA = nodeA, ///
23
+ termNodeB = nodeB, ///
24
+ termNodeVerifiedAgainstTermNode =
23
25
 
24
- break;
25
- }
26
+ this.verifyTermNodeAgainstTermNode(termNodeA, termNodeB, localContext, verifyAhead);
26
27
 
27
- default: {
28
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equivalences, localContext, verifyAhead);
28
+ nonTerminalNodeVerified = termNodeVerifiedAgainstTermNode; ///
29
29
 
30
- break;
30
+ return nonTerminalNodeVerified;
31
31
  }
32
32
  }
33
- }
33
+ ];
34
34
 
35
- return nonTerminalNodeVerified;
36
- }
35
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
37
36
 
38
- verifyTermNode(termNodeA, termNodeB, equivalences, localContext, verifyAhead) {
39
- let termNodeVerified;
37
+ nonTerminalNodeVerified = nodesVerified ?
38
+ true :
39
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
40
40
 
41
- const leftTermNode = termNodeA, ///
42
- rightTermNode = termNodeB, ///
43
- termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, equivalences);
41
+ return nonTerminalNodeVerified;
42
+ }
44
43
 
45
- if (termNodesEqual) {
46
- const verifiedAhead = verifyAhead();
44
+ verifyTermNodeAgainstTermNode(termNodeA, termNodeB, localContext, verifyAhead) {
45
+ let termNodeVerifiedAgainstTermNode;
47
46
 
48
- termNodeVerified = verifiedAhead; ///
49
- } else {
50
- const nonTerminalNodeA = termNodeA, ///
51
- nonTerminalNodeB = termNodeB; ///
47
+ const termVerifiedAgainstTerm = verifyTermAgainstTerm(termNodeA, termNodeB, localContext, verifyAhead);
52
48
 
53
- termNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equivalences, localContext, verifyAhead);
54
- }
49
+ termNodeVerifiedAgainstTermNode = termVerifiedAgainstTerm; ///
55
50
 
56
- return termNodeVerified;
51
+ return termNodeVerifiedAgainstTermNode;
57
52
  }
58
53
  }
59
54
 
@@ -1,68 +1,60 @@
1
1
  "use strict";
2
2
 
3
3
  import NodesVerifier from "../../verifier/nodes";
4
- import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
4
+ import verifyVariableAgainstTerm from "../../verify/variableAgainstTerm";
5
5
 
6
6
  import { nodeQuery } from "../../utilities/query";
7
- import { TERM_RULE_NAME } from "../../ruleNames";
7
+ import { verifyNodes } from "../../utilities/verifier";
8
8
 
9
- const variableNodeQuery = nodeQuery("/term/variable!");
9
+ const termNodeQuery = nodeQuery("/term!"),
10
+ termVariableNodeQuery = nodeQuery("/term/variable!");
10
11
 
11
12
  class IntrinsicLevelNodesVerifier extends NodesVerifier {
12
13
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
13
- let nonTerminalNodeVerified = false;
14
+ let nonTerminalNodeVerified;
14
15
 
15
- const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
16
- nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
16
+ const nodeQueryMaps = [
17
+ {
18
+ nodeQueryA: termVariableNodeQuery,
19
+ nodeQueryB: termNodeQuery,
20
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
21
+ let nonTerminalNodeVerified;
17
22
 
18
- if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
19
- const ruleName = nonTerminalNodeARuleName; ///
23
+ const termNodeB = nodeB, ///
24
+ termVariableNodeA = nodeA, ///
25
+ termVariableNodeVerifiedAgainstTermNode =
20
26
 
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);
27
+ this.verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
26
28
 
27
- nonTerminalNodeVerified = termNodeVerified; ///
29
+ nonTerminalNodeVerified = termVariableNodeVerifiedAgainstTermNode; ///
28
30
 
29
- break;
31
+ return nonTerminalNodeVerified;
30
32
  }
33
+ }
34
+ ];
31
35
 
32
- default: {
33
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
36
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
34
37
 
35
- break;
36
- }
37
- }
38
- }
38
+ nonTerminalNodeVerified = nodesVerified ?
39
+ true :
40
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
39
41
 
40
42
  return nonTerminalNodeVerified;
41
43
  }
42
44
 
43
- verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
44
- let termNodeVerified;
45
+ verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
46
+ let termVariableNodeVerifiedAgainstTermNode;
45
47
 
46
- const variableNodeA = variableNodeQuery(termNodeA);
48
+ const termNode = termNodeB, ///
49
+ variableNode = termVariableNodeA, ///
50
+ termVerifiedAgainstVariable = verifyVariableAgainstTerm(variableNode, termNode, substitutions, localContextA, localContextB, verifyAhead);
47
51
 
48
- if (variableNodeA !== null) {
49
- const variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
52
+ termVariableNodeVerifiedAgainstTermNode = termVerifiedAgainstVariable; ///
50
53
 
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;
54
+ return termVariableNodeVerifiedAgainstTermNode;
61
55
  }
62
56
  }
63
57
 
64
- Object.assign(IntrinsicLevelNodesVerifier.prototype, intrinsicLevelNodesVerifierMixins);
65
-
66
58
  const intrinsicLevelNodesVerifier = new IntrinsicLevelNodesVerifier();
67
59
 
68
60
  export default intrinsicLevelNodesVerifier;
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+
3
+ import NodesVerifier from "../../verifier/nodes";
4
+ import verifyVariableAgainstTerm from "../../verify/variableAgainstTerm";
5
+ import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
6
+
7
+ import { nodeQuery } from "../../utilities/query";
8
+ import { verifyNodes } from "../../utilities/verifier";
9
+
10
+ const termNodeQuery = nodeQuery("/term!"),
11
+ statementNodeQuery = nodeQuery("/statement!"),
12
+ termVariableNodeQuery = nodeQuery("/term/variable!"),
13
+ metastatementNodeQuery = nodeQuery("/metastatement!"),
14
+ metaArgumentStatementNodeQuery = nodeQuery("/metaArgument/statement!"),
15
+ metastatementStatementNodeQuery = nodeQuery("/metastatement/statement!"),
16
+ metastatementMetavariableNodeQuery = nodeQuery("/metastatement/metavariable!"),
17
+ metastatementSubstitutionNodeQuery = nodeQuery("/metastatement/substitution");
18
+
19
+ class IntrinsicLevelAgainstMetaLevelNodesVerifier extends NodesVerifier {
20
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
21
+ let nonTerminalNodeVerified;
22
+
23
+ const nodeQueryMaps = [
24
+ {
25
+ nodeQueryA: metastatementMetavariableNodeQuery,
26
+ nodeQueryB: metastatementStatementNodeQuery,
27
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
28
+ let nonTerminalNodeVerified;
29
+
30
+ const metastatementStatementNodeB = nodeB, ///
31
+ metastatementMetavariableNodeA = nodeA, ///
32
+ metastatementSubstitutionNodeA = metastatementSubstitutionNodeQuery(nonTerminalNodeA),
33
+ metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode =
34
+
35
+ this.verifyMetastatementMetavariableNodeAgainstMetastatementStatementNode(metastatementMetavariableNodeA, metastatementStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead);
36
+
37
+ nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode; ///
38
+
39
+ return nonTerminalNodeVerified;
40
+ }
41
+ },
42
+ {
43
+ nodeQueryA: metastatementMetavariableNodeQuery,
44
+ nodeQueryB: metaArgumentStatementNodeQuery,
45
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
46
+ let nonTerminalNodeVerified;
47
+
48
+ const metaArgumentStatementNodeB = nodeB, ///
49
+ metastatementMetavariableNodeA = nodeA, ///
50
+ metastatementSubstitutionNodeA = metastatementSubstitutionNodeQuery(nonTerminalNodeA),
51
+ metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode =
52
+
53
+ this.verifyMetastatementMetavariableNodeAgainstMetaArgumentStatementNode(metastatementMetavariableNodeA, metaArgumentStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead);
54
+
55
+ nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode; ///
56
+
57
+ return nonTerminalNodeVerified;
58
+ }
59
+ },
60
+ {
61
+ nodeQueryA: metastatementMetavariableNodeQuery,
62
+ nodeQueryB: statementNodeQuery,
63
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
64
+ let nonTerminalNodeVerified;
65
+
66
+ const statementNodeB = nodeB, ///
67
+ metastatementMetavariableNodeA = nodeA, ///
68
+ metastatementSubstitutionNodeA = metastatementSubstitutionNodeQuery(nonTerminalNodeA),
69
+ metastatementMetavariableNodeVerifiedAgainstStatementNode =
70
+
71
+ this.verifyMetastatementMetavariableNodeAgainstStatementNode(metastatementMetavariableNodeA, statementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead);
72
+
73
+ nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstStatementNode; ///
74
+
75
+ return nonTerminalNodeVerified;
76
+ }
77
+ },
78
+ {
79
+ nodeQueryA: metastatementStatementNodeQuery,
80
+ nodeQueryB: statementNodeQuery,
81
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
82
+ let nonTerminalNodeVerified;
83
+
84
+ const statementNodeB = nodeB, ///
85
+ metastatementStatementNodeA = nodeA, ///
86
+ metastatementStatementNodeVerifiedAgainstStatementNode =
87
+
88
+ this.verifyMetastatementStatementNodeAgainstStatementNode(metastatementStatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
89
+
90
+ nonTerminalNodeVerified = metastatementStatementNodeVerifiedAgainstStatementNode; ///
91
+
92
+ return nonTerminalNodeVerified;
93
+ }
94
+ },
95
+ {
96
+ nodeQueryA: metastatementNodeQuery,
97
+ nodeQueryB: statementNodeQuery,
98
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
99
+ let nonTerminalNodeVerified;
100
+
101
+ const statementNodeB = nodeB, ///
102
+ metastatementNodeA = nodeA, ///
103
+ metastatementNodeVerifiedAgainstStatementNode =
104
+
105
+ this.verifyMetastatementNodeAgainstStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
106
+
107
+ nonTerminalNodeVerified = metastatementNodeVerifiedAgainstStatementNode; ///
108
+
109
+ return nonTerminalNodeVerified;
110
+ }
111
+ },
112
+ {
113
+ nodeQueryA: termVariableNodeQuery,
114
+ nodeQueryB: termNodeQuery,
115
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
116
+ let nonTerminalNodeVerified;
117
+
118
+ const termNodeB = nodeB, ///
119
+ termVariableNodeA = nodeA, ///
120
+ variableNodeVerifiedAgainstTermNode =
121
+
122
+ this.verifyVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
123
+
124
+ nonTerminalNodeVerified = variableNodeVerifiedAgainstTermNode; ///
125
+
126
+ return nonTerminalNodeVerified;
127
+ }
128
+ }
129
+ ];
130
+
131
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
132
+
133
+ nonTerminalNodeVerified = nodesVerified ?
134
+ true :
135
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
136
+
137
+ return nonTerminalNodeVerified;
138
+ }
139
+
140
+ verifyMetastatementMetavariableNodeAgainstMetastatementStatementNode(metastatementMetavariableNodeA, metastatementStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead) {
141
+ let metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode;
142
+
143
+ const statementNode = metastatementStatementNodeB, ///
144
+ metavariableNode = metastatementMetavariableNodeA, ///
145
+ substitutionNode = metastatementSubstitutionNodeA, ///
146
+ metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
147
+
148
+ metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode = metavariableVerifiedAgainstStatement; ///
149
+
150
+ return metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode;
151
+ }
152
+
153
+ verifyMetastatementMetavariableNodeAgainstMetaArgumentStatementNode(metastatementMetavariableNodeA, metaArgumentStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead) {
154
+ let metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode;
155
+
156
+ const statementNode = metaArgumentStatementNodeB, ///
157
+ metavariableNode = metastatementMetavariableNodeA, ///
158
+ substitutionNode = metastatementSubstitutionNodeA, ///
159
+ metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
160
+
161
+ metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode = metavariableVerifiedAgainstStatement; ///
162
+
163
+ return metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode;
164
+ }
165
+
166
+ verifyMetastatementMetavariableNodeAgainstStatementNode(metastatementMetavariableNodeA, statementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead) {
167
+ let metastatementMetavariableNodeVerifiedAgainstStatementNode;
168
+
169
+ const statementNode = statementNodeB, ///
170
+ metavariableNode = metastatementMetavariableNodeA, ///
171
+ substitutionNode = metastatementSubstitutionNodeA, ///
172
+ metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
173
+
174
+ metastatementMetavariableNodeVerifiedAgainstStatementNode = metavariableVerifiedAgainstStatement; ///
175
+
176
+ return metastatementMetavariableNodeVerifiedAgainstStatementNode;
177
+ }
178
+
179
+ verifyMetastatementStatementNodeAgainstStatementNode(metastatementStatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
180
+ let metastatementStatementNodeVerifiedAgainstStatementNode;
181
+
182
+ const nonTerminalNodeA = metastatementStatementNodeA, ///
183
+ nonTerminalNodeB = statementNodeB, ///
184
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
185
+
186
+ metastatementStatementNodeVerifiedAgainstStatementNode = nonTerminalNodeVerified; ///
187
+
188
+ return metastatementStatementNodeVerifiedAgainstStatementNode;
189
+ }
190
+
191
+ verifyMetastatementNodeAgainstStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
192
+ let metastatementNodeVerifiedAgainstStatementNode;
193
+
194
+ const nonTerminalNodeA = metastatementNodeA, ///
195
+ nonTerminalNodeB = statementNodeB, ///
196
+ nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
197
+ nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
198
+ childNodesA = nonTerminalNodeAChildNodes, ///
199
+ childNodesB = nonTerminalNodeBChildNodes, ///
200
+ childNodesVerified = this.verifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB, verifyAhead);
201
+
202
+ metastatementNodeVerifiedAgainstStatementNode = childNodesVerified; ///
203
+
204
+ return metastatementNodeVerifiedAgainstStatementNode;
205
+ }
206
+
207
+ verifyVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
208
+ let variableNodeVerifiedAgainstTermNode;
209
+
210
+ const termNode = termNodeB, ///
211
+ variableNode = termVariableNodeA, ///
212
+ variableVerifiedAgainstTerm = verifyVariableAgainstTerm(variableNode, termNode, substitutions, localContextA, localContextB, verifyAhead);
213
+
214
+ variableNodeVerifiedAgainstTermNode = variableVerifiedAgainstTerm; ///
215
+
216
+ return variableNodeVerifiedAgainstTermNode;
217
+ }
218
+ }
219
+
220
+ const intrinsicLevelAgainstMetaLevelNodesVerifier = new IntrinsicLevelAgainstMetaLevelNodesVerifier();
221
+
222
+ export default intrinsicLevelAgainstMetaLevelNodesVerifier;
@@ -1,68 +1,60 @@
1
1
  "use strict";
2
2
 
3
3
  import NodesVerifier from "../../verifier/nodes";
4
- import metaLevelNodesVerifierMixins from "../../mixins/nodesVerifier/metaLevel";
4
+ import verifyMetavariableAgainstMetastatement from "../../verify/metavariableAgainstMetastatement";
5
5
 
6
6
  import { nodeQuery } from "../../utilities/query";
7
- import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
7
+ import { verifyNodes } from "../../utilities/verifier";
8
8
 
9
- const metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
9
+ const metastatementNodeQuery = nodeQuery("/metastatement!"),
10
+ metastatementMetavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
10
11
 
11
12
  class MetaLevelNodesVerifier extends NodesVerifier {
12
13
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
13
- let nonTerminalNodeVerified = false;
14
+ let nonTerminalNodeVerified;
14
15
 
15
- const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
16
- nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
16
+ const nodeQueryMaps = [
17
+ {
18
+ nodeQueryA: metastatementMetavariableNodeQuery,
19
+ nodeQueryB: metastatementNodeQuery,
20
+ verifyNodes: (nodeA, nodeB, substitutions, localContextA, localMetaContextB, verifyAhead) => {
21
+ let nonTerminalNodeVerified;
17
22
 
18
- if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
19
- const ruleName = nonTerminalNodeARuleName; ///
23
+ const metastatementNodeB = nodeB, ///
24
+ metastatementMetavariableNodeA = nodeA, ///
25
+ metastatementMetavariableNodeVerifiedAgainstMetastatementNode =
20
26
 
21
- switch (ruleName) {
22
- case METASTATEMENT_RULE_NAME: {
23
- const metastatementNodeA = nonTerminalNodeA, ///
24
- metastatementNodeB = nonTerminalNodeB, ///
25
- metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
27
+ this.verifyMetastatementMetavariableNodeAgainstMetastatementNode(metastatementMetavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
26
28
 
27
- nonTerminalNodeVerified = metastatementNodeVerified; ///
29
+ nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstMetastatementNode; ///
28
30
 
29
- break;
31
+ return nonTerminalNodeVerified;
30
32
  }
33
+ }
34
+ ];
31
35
 
32
- default: {
33
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
36
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
34
37
 
35
- break;
36
- }
37
- }
38
- }
38
+ nonTerminalNodeVerified = nodesVerified ?
39
+ true :
40
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
39
41
 
40
42
  return nonTerminalNodeVerified;
41
43
  }
42
44
 
43
- verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
44
- let metastatementNodeVerified;
45
+ verifyMetastatementMetavariableNodeAgainstMetastatementNode(metastatementMetavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
46
+ let metastatementMetavariableNodeVerifiedAgainstMetastatementNode;
45
47
 
46
- const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
48
+ const metavariableNode = metastatementMetavariableNodeA, ///
49
+ metastatementNode = metastatementNodeB, ///
50
+ metavariableVerifiedAgainstMetastatement = verifyMetavariableAgainstMetastatement(metavariableNode, metastatementNode, substitutions, localContextA, localMetaContextB, verifyAhead);
47
51
 
48
- if (metavariableNodeA !== null) {
49
- const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
52
+ metastatementMetavariableNodeVerifiedAgainstMetastatementNode = metavariableVerifiedAgainstMetastatement; ///
50
53
 
51
- metastatementNodeVerified = metaVariableNodeVerified; ///
52
- } else {
53
- const nonTerminalNodeA = metastatementNodeA, ///
54
- nonTerminalNodeB = metastatementNodeB, ///
55
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
56
-
57
- metastatementNodeVerified = nonTerminalNodeVerified; ///
58
- }
59
-
60
- return metastatementNodeVerified;
54
+ return metastatementMetavariableNodeVerifiedAgainstMetastatementNode;
61
55
  }
62
56
  }
63
57
 
64
- Object.assign(MetaLevelNodesVerifier.prototype, metaLevelNodesVerifierMixins);
65
-
66
58
  const metaLevelNodesVerifier = new MetaLevelNodesVerifier();
67
59
 
68
60
  export default metaLevelNodesVerifier;
@@ -1,89 +1,86 @@
1
1
  "use strict";
2
2
 
3
3
  import NodesVerifier from "../../verifier/nodes";
4
- import termAgainstConstructorNodesVerifier from "../../verifier/nodes/termAgainstConstructor";
4
+ import verifyArgumentAgainstArgument from "../../verify/argumentAgainstArgument";
5
+ import verifyStatementAgainstMetaType from "../../verify/statementAgainstMetaType";
5
6
 
6
7
  import { nodeQuery } from "../../utilities/query";
7
- import { STATEMENT_META_TYPE_NAME } from "../../metaTypeNames";
8
- import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
8
+ import { verifyNodes } from "../../utilities/verifier";
9
9
 
10
- const metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
11
- statementNodeQuery = nodeQuery("/metaArgument/statement!"),
12
- metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
10
+ const argumentNodeQuery = nodeQuery("/argument!"),
11
+ metaArgumentMetaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
12
+ metaArgumentStatementNodeQuery = nodeQuery("/metaArgument/statement!");
13
13
 
14
14
  class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
15
15
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
16
- let nonTerminalNodeVerified = false;
16
+ let nonTerminalNodeVerified;
17
17
 
18
- const nonTerminalNode = nonTerminalNodeA, ///
19
- combinatorNonTerminalNode = nonTerminalNodeB, ///
20
- ruleName = nonTerminalNode.getRuleName(), ///
21
- combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
18
+ const nodeQueryMaps = [
19
+ {
20
+ nodeQueryA: metaArgumentStatementNodeQuery,
21
+ nodeQueryB: metaArgumentMetaTypeNodeQuery,
22
+ verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
23
+ let nonTerminalNodeVerified;
22
24
 
23
- if (ruleName === combinatorRuleName) {
24
- switch (ruleName) {
25
- case META_ARGUMENT_RULE_NAME: {
26
- const metaArgumentNode = nonTerminalNode, ///
27
- combinatorMetaargumentNode = combinatorNonTerminalNode, ///
28
- metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead);
25
+ const metaArgumentMetaTypeNodeB = nodeB, ///
26
+ metaArgumentStatementNodeA = nodeA, ///
27
+ metaArgumentStatementVerifiedAgainstMetaArgumentMetaType =
29
28
 
30
- nonTerminalNodeVerified = metaArgumentNodeVerified; ///
29
+ this.verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead);
31
30
 
32
- break;
33
- }
31
+ nonTerminalNodeVerified = metaArgumentStatementVerifiedAgainstMetaArgumentMetaType; ///
34
32
 
35
- case ARGUMENT_RULE_NAME: {
36
- const argumentNode = nonTerminalNode, ///
37
- constructorArgumentNode = combinatorNonTerminalNode, ///
38
- argumentNodeVerified = termAgainstConstructorNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
33
+ return nonTerminalNodeVerified;
34
+ }
35
+ },
36
+ {
37
+ nodeQueryA: argumentNodeQuery,
38
+ nodeQueryB: argumentNodeQuery,
39
+ verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
40
+ let nonTerminalNodeVerified;
39
41
 
40
- nonTerminalNodeVerified = argumentNodeVerified; ///
42
+ const argumentNodeA = nodeA, ///
43
+ argumentNodeB = nodeB, ///
44
+ argumentNodeVerifiedAgainstArgumentNode =
41
45
 
42
- break;
43
- }
46
+ this.verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead);
44
47
 
45
- default: {
46
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
48
+ nonTerminalNodeVerified = argumentNodeVerifiedAgainstArgumentNode; ///
47
49
 
48
- break;
50
+ return nonTerminalNodeVerified;
49
51
  }
50
52
  }
51
- }
53
+ ];
54
+
55
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
56
+
57
+ nonTerminalNodeVerified = nodesVerified ?
58
+ true :
59
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
52
60
 
53
61
  return nonTerminalNodeVerified;
54
62
  }
55
63
 
56
- verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead) {
57
- let metaArgumentNodeVerified = false;
64
+ verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead) {
65
+ let metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = false;
58
66
 
59
- const metaArgumentString = localContext.nodeAsString(metaArgumentNode);
67
+ const metaTypeNode = metaArgumentMetaTypeNodeB, ///
68
+ statementNode = metaArgumentStatementNodeA, ///
69
+ statementVerifiedAgainstMetaType = verifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, verifyAhead);
60
70
 
61
- const statementNode = statementNodeQuery(metaArgumentNode),
62
- combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
71
+ metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = statementVerifiedAgainstMetaType; ///
63
72
 
64
- if (statementNode === null) {
65
- localContext.debug(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
66
- } else {
67
- if (combinatorMetaTYpeNode === null) {
68
- const combinatorMetaargumentString = localContext.nodeAsString(combinatorMetaargumentNode);
73
+ return metaArgumentStatementVerifiedAgainstMetaArgumentMetaType;
74
+ }
69
75
 
70
- localContext.debug(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
71
- } else {
72
- const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
73
- content = combinatorMetaTypeTerminalNode.getContent(),
74
- contentStatementMetaType = (content === STATEMENT_META_TYPE_NAME);
76
+ verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead) {
77
+ let argumentNodeVerifiedAgainstArgumentNode;
75
78
 
76
- if (!contentStatementMetaType) {
77
- localContext.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE_NAME}' but got '${content}' instead.`, metaArgumentNode);
78
- } else {
79
- const verifiedAhead = verifyAhead();
79
+ const argumentVerifiedAgainstArgument = verifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, verifyAhead);
80
80
 
81
- metaArgumentNodeVerified = verifiedAhead; ///
82
- }
83
- }
84
- }
81
+ argumentNodeVerifiedAgainstArgumentNode = argumentVerifiedAgainstArgument; ///
85
82
 
86
- return metaArgumentNodeVerified;
83
+ return argumentNodeVerifiedAgainstArgumentNode;
87
84
  }
88
85
  }
89
86