occam-verify-cli 0.0.869 → 0.0.870

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 (89) hide show
  1. package/lib/conclusion.js +3 -3
  2. package/lib/equality.js +2 -4
  3. package/lib/equivalence.js +1 -1
  4. package/lib/premise.js +4 -4
  5. package/lib/ruleNames.js +1 -29
  6. package/lib/substitution/metastatementForMetavariable.js +3 -2
  7. package/lib/substitution/statementForMetavariable.js +27 -64
  8. package/lib/substitution/termForVariable.js +5 -5
  9. package/lib/utilities/verifier.js +86 -0
  10. package/lib/verifier/node/metastatement.js +41 -28
  11. package/lib/verifier/node/statementAsCombinator.js +41 -28
  12. package/lib/verifier/node/termAsConstructor.js +30 -22
  13. package/lib/verifier/nodes/equality.js +27 -32
  14. package/lib/verifier/nodes/intrinsicLevel.js +25 -34
  15. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
  16. package/lib/verifier/nodes/metaLevel.js +25 -34
  17. package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
  18. package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
  19. package/lib/verify/argumentAgainstArgument.js +24 -0
  20. package/lib/verify/containment.js +5 -5
  21. package/lib/verify/equality.js +9 -9
  22. package/lib/verify/metaDerivation.js +19 -19
  23. package/lib/verify/metaLemma.js +1 -1
  24. package/lib/verify/metaproof.js +4 -6
  25. package/lib/verify/metavariable.js +7 -5
  26. package/lib/verify/metavariableAgainstMetastatement.js +44 -0
  27. package/lib/verify/metavariableAgainstStatement.js +65 -0
  28. package/lib/verify/statement.js +4 -4
  29. package/lib/verify/statementAgainstMetaType.js +24 -0
  30. package/lib/verify/statementAtainstStatement.js +52 -0
  31. package/lib/verify/term.js +7 -8
  32. package/lib/verify/termAgainstTerm.js +22 -0
  33. package/lib/verify/termAgainstType.js +26 -0
  34. package/lib/verify/terms.js +2 -3
  35. package/lib/verify/type.js +7 -5
  36. package/lib/verify/typeAssertion.js +45 -40
  37. package/lib/verify/variable.js +7 -5
  38. package/lib/verify/variableAgainstTerm.js +70 -0
  39. package/package.json +4 -4
  40. package/src/conclusion.js +2 -2
  41. package/src/equality.js +3 -9
  42. package/src/equivalence.js +1 -1
  43. package/src/premise.js +3 -3
  44. package/src/ruleNames.js +0 -7
  45. package/src/substitution/metastatementForMetavariable.js +3 -1
  46. package/src/substitution/statementForMetavariable.js +32 -74
  47. package/src/substitution/termForVariable.js +3 -3
  48. package/src/utilities/verifier.js +46 -0
  49. package/src/verifier/node/metastatement.js +41 -34
  50. package/src/verifier/node/statementAsCombinator.js +39 -32
  51. package/src/verifier/node/termAsConstructor.js +30 -25
  52. package/src/verifier/nodes/equality.js +31 -36
  53. package/src/verifier/nodes/intrinsicLevel.js +30 -38
  54. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
  55. package/src/verifier/nodes/metaLevel.js +30 -38
  56. package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
  57. package/src/verifier/nodes/termAgainstConstructor.js +30 -71
  58. package/src/verify/argumentAgainstArgument.js +15 -0
  59. package/src/verify/containment.js +4 -4
  60. package/src/verify/equality.js +8 -8
  61. package/src/verify/metaDerivation.js +18 -18
  62. package/src/verify/metaLemma.js +2 -2
  63. package/src/verify/metaproof.js +3 -6
  64. package/src/verify/metavariable.js +7 -5
  65. package/src/verify/metavariableAgainstMetastatement.js +42 -0
  66. package/src/verify/metavariableAgainstStatement.js +77 -0
  67. package/src/verify/statement.js +5 -5
  68. package/src/verify/statementAgainstMetaType.js +21 -0
  69. package/src/verify/statementAtainstStatement.js +60 -0
  70. package/src/verify/term.js +13 -17
  71. package/src/verify/termAgainstTerm.js +20 -0
  72. package/src/verify/termAgainstType.js +28 -0
  73. package/src/verify/terms.js +1 -3
  74. package/src/verify/type.js +7 -5
  75. package/src/verify/typeAssertion.js +56 -55
  76. package/src/verify/variable.js +7 -5
  77. package/src/verify/variableAgainstTerm.js +86 -0
  78. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
  79. package/lib/verifier/nodes/substitution.js +0 -223
  80. package/lib/verify/givenMetavariable.js +0 -31
  81. package/lib/verify/givenType.js +0 -31
  82. package/lib/verify/givenVariable.js +0 -31
  83. package/lib/verify/termAndGivenType.js +0 -39
  84. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
  85. package/src/verifier/nodes/substitution.js +0 -125
  86. package/src/verify/givenMetavariable.js +0 -31
  87. package/src/verify/givenType.js +0 -31
  88. package/src/verify/givenVariable.js +0 -31
  89. package/src/verify/termAndGivenType.js +0 -37
@@ -2,45 +2,50 @@
2
2
 
3
3
  import NodeVerifier from "../../verifier/node";
4
4
 
5
+ import { nodeQuery } from "../../utilities/query";
6
+ import { verifyNode } from "../../utilities/verifier";
5
7
  import { verifyStandaloneType } from "../../verify/type";
6
8
  import { verifyStandaloneTerm } from "../../verify/term";
7
- import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../../ruleNames";
9
+
10
+ const termNodeQuery = nodeQuery("/term!"),
11
+ typeNodeQuery = nodeQuery("/type!");
8
12
 
9
13
  class TermAsConstructorNodeVerifier extends NodeVerifier {
10
14
  verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
11
15
  let nonTerminalNodeVerified;
12
16
 
13
- const ruleName = nonTerminalNode.getRuleName();
14
-
15
- switch (ruleName) {
16
- case TERM_RULE_NAME: {
17
- const termNode = nonTerminalNode, ///
18
- standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
19
- termNodeVerified = standaloneTermVerified; ///
20
-
21
- nonTerminalNodeVerified = termNodeVerified; ///
22
-
23
- break;
17
+ const nodeQueryMaps = [
18
+ {
19
+ nodeQuery: termNodeQuery,
20
+ verifyNode: this.verifyTermNode
21
+ },
22
+ {
23
+ nodeQuery: typeNodeQuery,
24
+ verifyNode: this.verifyTypeNode
24
25
  }
26
+ ];
25
27
 
26
- case TYPE_RULE_NAME: {
27
- const typeNode = nonTerminalNode, ///
28
- standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
29
- typeNodeVerified = standaloneTypeVerified; ///
28
+ const nodeVerified = verifyNode(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
30
29
 
31
- nonTerminalNodeVerified = typeNodeVerified; ///
30
+ nonTerminalNodeVerified = nodeVerified ?
31
+ true :
32
+ super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
32
33
 
33
- break;
34
- }
34
+ return nonTerminalNodeVerified;
35
+ }
35
36
 
36
- default: {
37
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
37
+ verifyTermNode(termNode, localContext, verifyAhead) {
38
+ const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
39
+ termNodeVerified = standaloneTermVerified; ///
38
40
 
39
- break;
40
- }
41
- }
41
+ return termNodeVerified;
42
+ }
42
43
 
43
- return nonTerminalNodeVerified;
44
+ verifyTypeNode(typeNode, localContext, verifyAhead) {
45
+ const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
46
+ typeNodeVerified = standaloneTypeVerified; ///
47
+
48
+ return typeNodeVerified;
44
49
  }
45
50
  }
46
51
 
@@ -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;