occam-verify-cli 0.0.677 → 0.0.679

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 (125) hide show
  1. package/bin/action/verify.js +14 -4
  2. package/lib/conclusion.js +10 -5
  3. package/lib/consequent.js +8 -3
  4. package/lib/context/file.js +74 -4
  5. package/lib/context/release.js +7 -2
  6. package/lib/equality.js +16 -16
  7. package/lib/premise.js +12 -7
  8. package/lib/supposition.js +9 -4
  9. package/lib/type.js +3 -8
  10. package/lib/utilities/string.js +26 -13
  11. package/lib/verifier/node/metastatement.js +173 -0
  12. package/lib/verifier/node/statementAsCombinator.js +186 -0
  13. package/lib/verifier/node/termAsConstructor.js +224 -0
  14. package/lib/verifier/node.js +158 -0
  15. package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/conclusion.js +13 -12
  16. package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/premise.js +13 -12
  17. package/lib/verifier/nodes/metastatementForMetavariable.js +198 -0
  18. package/lib/verifier/nodes/statement.js +199 -0
  19. package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/conclusion.js +13 -12
  20. package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/premise.js +13 -12
  21. package/lib/verifier/nodes/statementForMetavariable.js +203 -0
  22. package/lib/verifier/nodes/term.js +212 -0
  23. package/lib/verifier/{termForVariable/supposition.js → nodes/termForVariable/consequent.js} +13 -12
  24. package/lib/verifier/{termForVariable/consequent.js → nodes/termForVariable/supposition.js} +13 -12
  25. package/lib/verifier/nodes/termForVariable.js +209 -0
  26. package/lib/verifier/nodes.js +175 -0
  27. package/lib/verify/assertion/type.js +20 -10
  28. package/lib/verify/axiom.js +3 -3
  29. package/lib/verify/conclusion.js +3 -3
  30. package/lib/verify/conjecture.js +3 -3
  31. package/lib/verify/consequent.js +3 -3
  32. package/lib/verify/declaration/combinator.js +7 -2
  33. package/lib/verify/declaration/constructor.js +8 -2
  34. package/lib/verify/declaration/metavariable.js +7 -2
  35. package/lib/verify/declaration/type.js +7 -2
  36. package/lib/verify/declaration/variable.js +8 -2
  37. package/lib/verify/file.js +3 -3
  38. package/lib/verify/label.js +9 -4
  39. package/lib/verify/lemma.js +3 -3
  40. package/lib/verify/metastatement/qualified.js +5 -6
  41. package/lib/verify/metastatement/unqualified.js +9 -7
  42. package/lib/verify/metastatement.js +34 -157
  43. package/lib/verify/metavariable.js +6 -4
  44. package/lib/verify/premise.js +3 -3
  45. package/lib/verify/release.js +3 -3
  46. package/lib/verify/rule.js +3 -3
  47. package/lib/verify/statement/qualified.js +5 -6
  48. package/lib/verify/statement/unqualified.js +9 -7
  49. package/lib/verify/statement.js +112 -317
  50. package/lib/verify/statementAsCombinator.js +8 -82
  51. package/lib/verify/supposition.js +3 -3
  52. package/lib/verify/term.js +69 -213
  53. package/lib/verify/termAsConstructor.js +15 -89
  54. package/lib/verify/theorem.js +3 -3
  55. package/lib/verify/type.js +7 -5
  56. package/lib/verify/typeInference.js +5 -5
  57. package/lib/verify/variable.js +7 -5
  58. package/package.json +5 -5
  59. package/src/conclusion.js +5 -4
  60. package/src/consequent.js +3 -2
  61. package/src/context/file.js +11 -4
  62. package/src/context/release.js +9 -2
  63. package/src/equality.js +10 -10
  64. package/src/premise.js +7 -6
  65. package/src/supposition.js +4 -3
  66. package/src/type.js +3 -8
  67. package/src/utilities/string.js +34 -23
  68. package/src/verifier/node/metastatement.js +57 -0
  69. package/src/verifier/node/statementAsCombinator.js +80 -0
  70. package/src/verifier/node/termAsConstructor.js +124 -0
  71. package/src/verifier/node.js +85 -0
  72. package/src/verifier/nodes/metastatementForMetavariable/conclusion.js +11 -0
  73. package/src/verifier/nodes/metastatementForMetavariable/premise.js +11 -0
  74. package/src/verifier/{metastatementForMetavariable.js → nodes/metastatementForMetavariable.js} +6 -6
  75. package/src/verifier/nodes/statement.js +98 -0
  76. package/src/verifier/nodes/statementForMetavariable/conclusion.js +11 -0
  77. package/src/verifier/nodes/statementForMetavariable/premise.js +11 -0
  78. package/src/verifier/{statementForMetavariable.js → nodes/statementForMetavariable.js} +10 -10
  79. package/src/verifier/nodes/term.js +111 -0
  80. package/src/verifier/nodes/termForVariable/consequent.js +11 -0
  81. package/src/verifier/nodes/termForVariable/supposition.js +11 -0
  82. package/src/verifier/{termForVariable.js → nodes/termForVariable.js} +9 -9
  83. package/src/verifier/nodes.js +111 -0
  84. package/src/verify/assertion/type.js +25 -9
  85. package/src/verify/axiom.js +2 -2
  86. package/src/verify/conclusion.js +2 -2
  87. package/src/verify/conjecture.js +2 -2
  88. package/src/verify/consequent.js +2 -2
  89. package/src/verify/declaration/combinator.js +9 -1
  90. package/src/verify/declaration/constructor.js +15 -1
  91. package/src/verify/declaration/metavariable.js +9 -1
  92. package/src/verify/declaration/type.js +14 -1
  93. package/src/verify/declaration/variable.js +15 -1
  94. package/src/verify/file.js +2 -2
  95. package/src/verify/label.js +10 -2
  96. package/src/verify/lemma.js +4 -4
  97. package/src/verify/metastatement/qualified.js +4 -6
  98. package/src/verify/metastatement/unqualified.js +9 -7
  99. package/src/verify/metastatement.js +32 -57
  100. package/src/verify/metavariable.js +6 -3
  101. package/src/verify/premise.js +2 -2
  102. package/src/verify/release.js +2 -2
  103. package/src/verify/rule.js +2 -2
  104. package/src/verify/statement/qualified.js +4 -6
  105. package/src/verify/statement/unqualified.js +9 -7
  106. package/src/verify/statement.js +159 -283
  107. package/src/verify/statementAsCombinator.js +9 -129
  108. package/src/verify/supposition.js +2 -2
  109. package/src/verify/term.js +94 -159
  110. package/src/verify/termAsConstructor.js +20 -135
  111. package/src/verify/theorem.js +2 -2
  112. package/src/verify/type.js +7 -4
  113. package/src/verify/typeInference.js +4 -4
  114. package/src/verify/variable.js +7 -4
  115. package/lib/verifier/metastatementForMetavariable.js +0 -198
  116. package/lib/verifier/statementForMetavariable.js +0 -203
  117. package/lib/verifier/termForVariable.js +0 -209
  118. package/lib/verifier.js +0 -138
  119. package/src/verifier/metastatementForMetavariable/conclusion.js +0 -9
  120. package/src/verifier/metastatementForMetavariable/premise.js +0 -9
  121. package/src/verifier/statementForMetavariable/conclusion.js +0 -9
  122. package/src/verifier/statementForMetavariable/premise.js +0 -9
  123. package/src/verifier/termForVariable/consequent.js +0 -9
  124. package/src/verifier/termForVariable/supposition.js +0 -9
  125. package/src/verifier.js +0 -74
package/src/premise.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ import premiseStatementForMetavariableNodesVerifier from "./verifier/nodes/statementForMetavariable/premise";
4
+ import premiseMetastatementForMetavariableNodesVerifier from "./verifier/nodes/metastatementForMetavariable/premise";
5
+
3
6
  import { nodeAsString } from "./utilities/string";
4
7
  import { nodeQuery, nodesQuery } from "./utilities/query";
5
- import { premiseStatementForMetavariableVerifier } from "./verifier/statementForMetavariable/premise";
6
8
  import { metastatementNodeFromMetastatementString } from "./utilities/node";
7
- import { premiseMetastatementForMetavariableVerifier } from "./verifier/metastatementForMetavariable/premise";
8
9
 
9
10
  const ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
10
11
  ruleSubproofPremiseMetastatementQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
@@ -45,7 +46,7 @@ export default class Premise {
45
46
  nonTerminalNodeB = subproofStatementNode, ///
46
47
  fileContextA = fileContext, ///
47
48
  proofContextB = statementProofContext, ///
48
- nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB);
49
+ nonTerminalNodeVerified = premiseStatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB);
49
50
 
50
51
  if (nonTerminalNodeVerified) {
51
52
  return true;
@@ -62,7 +63,7 @@ export default class Premise {
62
63
  nonTerminalNodeB = statementNode, ///
63
64
  fileContextA = fileContext, ///
64
65
  proofContextB = statementProofContext, ///
65
- nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB),
66
+ nonTerminalNodeVerified = premiseStatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, proofContextB),
66
67
  statementNodeMatches = nonTerminalNodeVerified; ///
67
68
 
68
69
  return statementNodeMatches;
@@ -91,7 +92,7 @@ export default class Premise {
91
92
  nonTerminalNodeB = ruleSubproofMetastatementNode, ///
92
93
  fileContextA = fileContext, ///
93
94
  metaproofContextB = metastatementMetaproofContext, ///
94
- nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB);
95
+ nonTerminalNodeVerified = premiseMetastatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB);
95
96
 
96
97
  if (nonTerminalNodeVerified) {
97
98
  return true;
@@ -108,7 +109,7 @@ export default class Premise {
108
109
  nonTerminalNodeB = metastatementNode, ///
109
110
  fileContextA = fileContext, ///
110
111
  metaproofContextB = metastatementMetaproofContext, ///
111
- nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB),
112
+ nonTerminalNodeVerified = premiseMetastatementForMetavariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB),
112
113
  metastatementNodeMatches = nonTerminalNodeVerified; ///
113
114
 
114
115
  return metastatementNodeMatches;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ import suppositionTermForVariableNodesVerifier from "./verifier/nodes/termForVariable/supposition";
4
+
3
5
  import { nodeAsString } from "./utilities/string";
4
6
  import { nodeQuery, nodesQuery } from "./utilities/query";
5
7
  import { statementNodeFromStatementString } from "./utilities/node";
6
- import { suppositionTermForVariableVerifier } from "./verifier/termForVariable/supposition";
7
8
 
8
9
  const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
9
10
  subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
@@ -42,7 +43,7 @@ export default class Supposition {
42
43
  nonTerminalNodeB = subproofStatementNode, ///
43
44
  proofContextA = proofContext, ///
44
45
  proofContextB = statementProofContext, ///
45
- nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB);
46
+ nonTerminalNodeVerified = suppositionTermForVariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB);
46
47
 
47
48
  if (nonTerminalNodeVerified) {
48
49
  return true;
@@ -59,7 +60,7 @@ export default class Supposition {
59
60
  nonTerminalNodeB = statementNode, ///
60
61
  proofContextA = proofContext, ///
61
62
  proofContextB = statementProofContext, ///
62
- nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB),
63
+ nonTerminalNodeVerified = suppositionTermForVariableNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, proofContextA, proofContextB),
63
64
  statementNodeMatches = nonTerminalNodeVerified; ///
64
65
 
65
66
  return statementNodeMatches;
package/src/type.js CHANGED
@@ -187,18 +187,13 @@ function superTypeFromSuperTypeJSONAndFileContext(superTypeJSON, fileContext) {
187
187
 
188
188
  if (superTypeJSON !== null) {
189
189
  const json = superTypeJSON, ///
190
- { name } = json;
191
-
192
- if (name === OBJECT_TYPE_NAME) {
193
- superType = objectType; ///
194
- } else {
195
- const typeName = name, ///
196
- type = fileContext.findTypeByTypeName(typeName);
190
+ { name } = json,
191
+ typeName = name, ///
192
+ type = fileContext.findTypeByTypeName(typeName);
197
193
 
198
194
  superType = (type !== null) ?
199
195
  type : ///
200
196
  Type.fromJSONAndFileContext(json, fileContext); ///
201
- }
202
197
  }
203
198
 
204
199
  return superType;
@@ -3,39 +3,22 @@
3
3
  import { COMMA, EMPTY_STRING } from "../constants";
4
4
 
5
5
  export function nodeAsString(node, tokens) {
6
- let string = null;
6
+ let string = EMPTY_STRING;
7
7
 
8
8
  if (node !== null) {
9
9
  const nodeTerminalNode = node.isTerminalNode();
10
10
 
11
11
  if (nodeTerminalNode) {
12
- const terminalNode = node, ///
13
- content = terminalNode.getContent();
12
+ const terminalNode = node; ///
14
13
 
15
- string = content; ///
14
+ string = terminalNodeAsString(terminalNode);
16
15
  } else {
17
- const nonTerminalNode = node, ///
18
- firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
19
- lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
20
- firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
21
- lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
22
- start = firstSignificantTokenIndex, ///
23
- end = lastSignificantTokenIndex + 1;
16
+ const nonTerminalNode = node; ///
24
17
 
25
- tokens = tokens.slice(start, end); ///
26
-
27
- string = tokens.reduce((string, token) => {
28
- const content = token.getContent();
29
-
30
- string = `${string}${content}`;
31
-
32
- return string;
33
- }, EMPTY_STRING);
18
+ string = nonTerminalNodeAsString(nonTerminalNode, tokens);
34
19
  }
35
- }
36
20
 
37
- if (string !== null) {
38
- string = string.replace(/[\r\n]/, EMPTY_STRING)
21
+ string = string.replace(/[\r\n]/, EMPTY_STRING);
39
22
  }
40
23
 
41
24
  return string;
@@ -54,3 +37,31 @@ export function nodesAsString(nodes, tokens) {
54
37
 
55
38
  return string;
56
39
  }
40
+
41
+ export function terminalNodeAsString(terminalNode) {
42
+ const content = terminalNode.getContent(),
43
+ string = content; ///
44
+
45
+ return string;
46
+ }
47
+
48
+ export function nonTerminalNodeAsString(nonTerminalNode, tokens) {
49
+ const firstSignificantToken = nonTerminalNode.getFirstSignificantToken(),
50
+ lastSignificantToken = nonTerminalNode.getLastSignificantToken(),
51
+ firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
52
+ lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken),
53
+ start = firstSignificantTokenIndex, ///
54
+ end = lastSignificantTokenIndex + 1;
55
+
56
+ tokens = tokens.slice(start, end); ///
57
+
58
+ const string = tokens.reduce((string, token) => {
59
+ const content = token.getContent();
60
+
61
+ string = `${string}${content}`;
62
+
63
+ return string;
64
+ }, EMPTY_STRING);
65
+
66
+ return string;
67
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ import NodeVerifier from "../../verifier/node";
4
+
5
+ import { METAVARIABLE_RULE_NAME } from "../../ruleNames";
6
+ import { metavariableNameFromMetavariableNode } from "../../utilities/query";
7
+
8
+ class MetastatementNodeVerifier extends NodeVerifier {
9
+ verifyNonTerminalNode(nonTerminalNode, metaproofContext) {
10
+ let nonTerminalNodeVerified;
11
+
12
+ const ruleName = nonTerminalNode.getRuleName(); ///
13
+
14
+ switch (ruleName) {
15
+ case METAVARIABLE_RULE_NAME: {
16
+ const metavariableNode = nonTerminalNode, ///
17
+ metavariableVerified = verifyMetavariable(metavariableNode, metaproofContext),
18
+ metavariableNodeVerified = metavariableVerified; ///
19
+
20
+ nonTerminalNodeVerified = metavariableNodeVerified; ///
21
+
22
+ break;
23
+ }
24
+
25
+ default: {
26
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, metaproofContext);
27
+
28
+ break;
29
+ }
30
+ }
31
+
32
+ return nonTerminalNodeVerified;
33
+ }
34
+ }
35
+
36
+ const metastatementNodeVerifier = new MetastatementNodeVerifier();
37
+
38
+ export default metastatementNodeVerifier;
39
+
40
+ function verifyMetavariable(metavariableNode, metaproofContext) {
41
+ let metavariableVerified;
42
+
43
+ const metavariableString = metaproofContext.nodeAsString(metavariableNode);
44
+
45
+ metaproofContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
46
+
47
+ const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
48
+ metavariablePresent = metaproofContext.isMetavariablePresentByMetavariableName(metavariableName);
49
+
50
+ metavariableVerified = metavariablePresent;
51
+
52
+ if (metavariableVerified) {
53
+ metaproofContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
54
+ }
55
+
56
+ return metavariableVerified;
57
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ import NodeVerifier from "../../verifier/node";
4
+ import verifyStatement from "../../verify/statement";
5
+
6
+ import { verifyStandaloneTerm, verifyType } from "./../../verifier/node/termAsConstructor";
7
+ import { TYPE_RULE_NAME, TERM_RULE_NAME, STATEMENT_RULE_NAME } from "../../ruleNames";
8
+
9
+ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
10
+ verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead) {
11
+ let nonTerminalNodeVerified;
12
+
13
+ const ruleName = nonTerminalNode.getRuleName();
14
+
15
+ switch (ruleName) {
16
+ case TYPE_RULE_NAME: {
17
+ const typeNode = nonTerminalNode, ///
18
+ typeVerified = verifyType(typeNode, fileContext, verifyAhead),
19
+ typeNodeVerified = typeVerified; ///
20
+
21
+ nonTerminalNodeVerified = typeNodeVerified; ///
22
+
23
+ break;
24
+ }
25
+
26
+ case TERM_RULE_NAME: {
27
+ const termNode = nonTerminalNode, ///
28
+ standaloneTermVerified = verifyStandaloneTerm(termNode, fileContext, verifyAhead),
29
+ termNodeVerified = standaloneTermVerified; ///
30
+
31
+ nonTerminalNodeVerified = termNodeVerified; ///
32
+
33
+ break;
34
+ }
35
+
36
+ case STATEMENT_RULE_NAME: {
37
+ const statementNode = nonTerminalNode, ///
38
+ standaloneStatementVerified = verifyStandaloneStatement(statementNode, fileContext, verifyAhead),
39
+ statementNodeVerified = standaloneStatementVerified; ///
40
+
41
+ nonTerminalNodeVerified = statementNodeVerified; ///
42
+
43
+ break;
44
+ }
45
+
46
+ default: {
47
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead); ///
48
+
49
+ break;
50
+ }
51
+ }
52
+
53
+ return nonTerminalNodeVerified;
54
+ }
55
+ }
56
+
57
+ const statementAsCombinatorNodeVerifier = new StatementAsCombinatorNodeVerifier();
58
+
59
+ export default statementAsCombinatorNodeVerifier;
60
+
61
+ function verifyStandaloneStatement(statementNode, fileContext, verifyAhead) {
62
+ let standaloneStatementVerified;
63
+
64
+ const statementString = fileContext.nodeAsString(statementNode);
65
+
66
+ fileContext.trace(`Verifying the '${statementString}' standalone statement...`, statementNode);
67
+
68
+ const context = fileContext, ///
69
+ derived = false,
70
+ assignments = [],
71
+ statementVerified = verifyStatement(statementNode, assignments, derived, context, verifyAhead);
72
+
73
+ standaloneStatementVerified = statementVerified; ///
74
+
75
+ if (standaloneStatementVerified) {
76
+ fileContext.debug(`...verified the '${statementString}' standalone statement.`, statementNode);
77
+ }
78
+
79
+ return standaloneStatementVerified;
80
+ }
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ import verifyTerm from "../../verify/term";
4
+ import NodeVerifier from "../../verifier/node";
5
+
6
+ import { nodeQuery, typeNameFromTypeNode } from "../../utilities/query";
7
+ import { TERM_RULE_NAME, ARGUMENT_RULE_NAME } from "../../ruleNames";
8
+
9
+ const typeNodeQuery = nodeQuery("/argument/type"),
10
+ termNodeQuery = nodeQuery("/argument/term");
11
+
12
+ class TermAsConstructorNodeVerifier extends NodeVerifier {
13
+ verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead) {
14
+ let nonTerminalNodeVerified;
15
+
16
+ const ruleName = nonTerminalNode.getRuleName();
17
+
18
+ switch (ruleName) {
19
+ case TERM_RULE_NAME: {
20
+ const termNode = nonTerminalNode, ///
21
+ standaloneTermVerified = verifyStandaloneTerm(termNode, fileContext, verifyAhead),
22
+ termNodeVerified = standaloneTermVerified; ///
23
+
24
+ nonTerminalNodeVerified = termNodeVerified; ///
25
+
26
+ break;
27
+ }
28
+
29
+ case ARGUMENT_RULE_NAME: {
30
+ const argumentNode = nonTerminalNode, ///
31
+ argumentVerified = verifyArgument(argumentNode, fileContext, verifyAhead),
32
+ argumentNodeVerified = argumentVerified; ///
33
+
34
+ nonTerminalNodeVerified = argumentNodeVerified; ///
35
+
36
+ break;
37
+ }
38
+
39
+ default: {
40
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, fileContext, verifyAhead);
41
+
42
+ break;
43
+ }
44
+ }
45
+
46
+ return nonTerminalNodeVerified;
47
+ }
48
+ }
49
+
50
+ const termAsConstructorNodeVerifier = new TermAsConstructorNodeVerifier();
51
+
52
+ export default termAsConstructorNodeVerifier;
53
+
54
+ export function verifyStandaloneTerm(termNode, fileContext, verifyAhead) {
55
+ let standaloneTermVerified;
56
+
57
+ const termString = fileContext.nodeAsString(termNode);
58
+
59
+ fileContext.trace(`Verifying the '${termString}' standalone term...`, termNode);
60
+
61
+ const types = [],
62
+ context = fileContext, ///
63
+ termVerified = verifyTerm(termNode, types, context, verifyAhead);
64
+
65
+ standaloneTermVerified = termVerified; ///
66
+
67
+ if (standaloneTermVerified) {
68
+ fileContext.debug(`...verified the '${termString}' standalone term.`, termNode);
69
+ }
70
+
71
+ return standaloneTermVerified;
72
+ }
73
+
74
+ export function verifyType(typeNode, fileContext, verifyAhead) {
75
+ let typeVerified = false;
76
+
77
+ const typeString = fileContext.nodeAsString(typeNode);
78
+
79
+ fileContext.trace(`Verifying the '${typeString}' type...`, typeNode);
80
+
81
+ const typeName = typeNameFromTypeNode(typeNode),
82
+ typePresent = fileContext.isTypePresentByTypeName(typeName);
83
+
84
+ if (!typePresent) {
85
+ fileContext.info(`The type '${typeName}' is not present.`, typeNode);
86
+ } else {
87
+ fileContext.debug(`...verified the '${typeString}' type.`, typeNode);
88
+
89
+ const verifiedAhead = verifyAhead();
90
+
91
+ typeVerified = verifiedAhead; ///
92
+ }
93
+
94
+ return typeVerified;
95
+ }
96
+
97
+ function verifyArgument(argumentNode, fileContext, verifyAhead) {
98
+ let argumentVerified;
99
+
100
+ const argumentString = fileContext.nodeAsString(argumentNode);
101
+
102
+ fileContext.trace(`Verifying the '${argumentString}' argument...`, argumentNode);
103
+
104
+ const typeNode = typeNodeQuery(argumentNode),
105
+ termNode = termNodeQuery(argumentNode);
106
+
107
+ if (typeNode !== null) {
108
+ const typeVerified = verifyType(typeNode, fileContext, verifyAhead);
109
+
110
+ argumentVerified = typeVerified; ///
111
+ }
112
+
113
+ if (termNode !== null) {
114
+ const standaloneTermVerified = verifyStandaloneTerm(termNode, fileContext, verifyAhead);
115
+
116
+ argumentVerified = standaloneTermVerified; ///
117
+ }
118
+
119
+ if (argumentVerified) {
120
+ fileContext.debug(`...verified the '${argumentString}' argument.`, argumentNode);
121
+ }
122
+
123
+ return argumentVerified;
124
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ export default class NodeVerifier {
4
+ verifyNode(node, ...remainingArguments) {
5
+ let nodeVerified;
6
+
7
+ const nodeTerminalNode = node.isTerminalNode();
8
+
9
+ if (nodeTerminalNode) {
10
+ const terminalNode = node, ///
11
+ terminalNodeVerified = this.verifyTerminalNode(terminalNode, ...remainingArguments);
12
+
13
+ nodeVerified = terminalNodeVerified; ///
14
+ } else {
15
+ const nonTerminalNode = node, ///
16
+ nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, ...remainingArguments);
17
+
18
+ nodeVerified = nonTerminalNodeVerified; ///
19
+ }
20
+
21
+ return nodeVerified;
22
+ }
23
+
24
+ verifyChildNodes(childNodes, ...remainingArguments) {
25
+ let childNodesVerify;
26
+
27
+ const index = 0,
28
+ childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodes, ...remainingArguments);
29
+
30
+ childNodesVerify = childNodesVerifyAhead; ///
31
+
32
+ return childNodesVerify;
33
+ }
34
+
35
+ verifyChildNodesAhead(index, childNodes, ...remainingArguments) {
36
+ let childNodesVerify;
37
+
38
+ const verifyAhead = remainingArguments.pop(), ///
39
+ childNodesLength = childNodes.length;
40
+
41
+ if (index === childNodesLength) {
42
+ const verifiedAhead = verifyAhead();
43
+
44
+ childNodesVerify = verifiedAhead; ///
45
+ } else {
46
+ const childNode = childNodes[index],
47
+ node = childNode, ///
48
+ nodeVerified = this.verifyNode(node, ...remainingArguments, () => {
49
+ index++;
50
+
51
+ remainingArguments.push(verifyAhead);
52
+
53
+ const childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodes, ...remainingArguments);
54
+
55
+ return childNodesVerifyAhead;
56
+ });
57
+
58
+ childNodesVerify = nodeVerified; ///
59
+ }
60
+
61
+ return childNodesVerify;
62
+ }
63
+
64
+ verifyTerminalNode(terminalNode, ...remainingArguments) {
65
+ let terminalNodeVerified;
66
+
67
+ const verifyAhead = remainingArguments.pop(), ///
68
+ verifiedAhead = verifyAhead(); ///
69
+
70
+ terminalNodeVerified = verifiedAhead; ///
71
+
72
+ return terminalNodeVerified;
73
+ }
74
+
75
+ verifyNonTerminalNode(nonTerminalNode, ...remainingArguments) {
76
+ let nonTerminalNodeVerified;
77
+
78
+ const childNodes = nonTerminalNode.getChildNodes(), ///
79
+ childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
80
+
81
+ nonTerminalNodeVerified = childNodesVerify; ///
82
+
83
+ return nonTerminalNodeVerified;
84
+ }
85
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import MetastatementForMetavariableNodesVerifier from "../../../verifier/nodes/metastatementForMetavariable";
4
+
5
+ class ConclusionMetastatementForMetavariableNodesVerifier extends MetastatementForMetavariableNodesVerifier {
6
+ static createSubstitutions = false;
7
+ }
8
+
9
+ const conclusionMetastatementForMetavariableNodesVerifier = new ConclusionMetastatementForMetavariableNodesVerifier();
10
+
11
+ export default conclusionMetastatementForMetavariableNodesVerifier;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import MetastatementForMetavariableNodesVerifier from "../../../verifier/nodes/metastatementForMetavariable";
4
+
5
+ class PremiseMetastatementForMetavariableNodesVerifier extends MetastatementForMetavariableNodesVerifier {
6
+ static createSubstitutions = true;
7
+ }
8
+
9
+ const premiseMetastatementForMetavariableNodesVerifier = new PremiseMetastatementForMetavariableNodesVerifier();
10
+
11
+ export default premiseMetastatementForMetavariableNodesVerifier;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
 
3
- import Verifier from "../verifier";
4
- import MetastatementForMetavariableSubstitution from "../substitution/metastatementForMetavariable";
3
+ import NodesVerifier from "../../verifier/nodes";
4
+ import MetastatementForMetavariableSubstitution from "../../substitution/metastatementForMetavariable";
5
5
 
6
- import { nodeQuery } from "../utilities/query";
7
- import { METASTATEMENT_RULE_NAME } from "../ruleNames";
8
- import { metavariableNameFromMetavariableNode } from "../utilities/query";
6
+ import { nodeQuery } from "../../utilities/query";
7
+ import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
8
+ import { metavariableNameFromMetavariableNode } from "../../utilities/query";
9
9
 
10
10
  const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!');
11
11
 
12
- export default class MetastatementForMetavariableVerifier extends Verifier {
12
+ export default class MetastatementForMetavariableNodesVerifier extends NodesVerifier {
13
13
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, metaproofContextB) {
14
14
  let nonTerminalNodeVerified = false;
15
15
 
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ import NodesVerifier from "../../verifier/nodes";
4
+
5
+ import { nodeQuery } from "../../utilities/query";
6
+ import { verifyArgument } from "../../verifier/nodes/term";
7
+ import { STATEMENT_META_TYPE } from "../../metaTypes";
8
+ import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
9
+
10
+ const metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
11
+ statementNodeQuery = nodeQuery("/metaArgument/statement!"),
12
+ metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
13
+
14
+ class StatementNodesVerifier extends NodesVerifier {
15
+ verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead) {
16
+ let nonTerminalNodeVerified = false;
17
+
18
+ const nonTerminalNode = nonTerminalNodeA, ///
19
+ combinatorNonTerminalNode = nonTerminalNodeB; ///
20
+
21
+ const ruleName = nonTerminalNode.getRuleName(), ///
22
+ combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
23
+
24
+ if (ruleName === combinatorRuleName) {
25
+ switch (ruleName) {
26
+ case ARGUMENT_RULE_NAME: {
27
+ const argumentNode = nonTerminalNode, ///
28
+ constructorArgumentNode = combinatorNonTerminalNode, ///
29
+ argumentVerified = verifyArgument(argumentNode, constructorArgumentNode, context, verifyAhead);
30
+
31
+ nonTerminalNodeVerified = argumentVerified; ///
32
+
33
+ break;
34
+ }
35
+
36
+ case META_ARGUMENT_RULE_NAME: {
37
+ const metaArgumentNode = nonTerminalNode, ///
38
+ combinatorMetaargumentNode = combinatorNonTerminalNode, ///
39
+ metaArgumentVerified = verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead),
40
+ metaArgumentNodeVerified = metaArgumentVerified; ///
41
+
42
+ nonTerminalNodeVerified = metaArgumentNodeVerified; ///
43
+
44
+ break;
45
+ }
46
+
47
+ default: {
48
+ nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context, verifyAhead);
49
+
50
+ break;
51
+ }
52
+ }
53
+ }
54
+
55
+ return nonTerminalNodeVerified;
56
+ }
57
+ }
58
+
59
+ const statementNodesVerifier = new StatementNodesVerifier();
60
+
61
+ export default statementNodesVerifier;
62
+
63
+ function verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead) {
64
+ let metaArgumentVerified = false;
65
+
66
+ const metaArgumentString = context.nodeAsString(metaArgumentNode);
67
+
68
+ context.trace(`Verifying the '${metaArgumentString}' metaargument...`, metaArgumentNode);
69
+
70
+ const statementNode = statementNodeQuery(metaArgumentNode),
71
+ combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
72
+
73
+ if (statementNode === null) {
74
+ context.info(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
75
+ } else {
76
+ if (combinatorMetaTYpeNode === null) {
77
+ const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
78
+
79
+ context.info(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
80
+ } else {
81
+ const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
82
+ content = combinatorMetaTypeTerminalNode.getContent(),
83
+ contentStatementMetaType = (content === STATEMENT_META_TYPE);
84
+
85
+ if (!contentStatementMetaType) {
86
+ context.info(`Expected the meta-type to be 'Statement' but got '${content}'.`, metaArgumentNode);
87
+ } else {
88
+ metaArgumentVerified = true;
89
+ }
90
+ }
91
+ }
92
+
93
+ if (metaArgumentVerified) {
94
+ context.debug(`...verified the '${metaArgumentString}' metaargument.`, metaArgumentNode);
95
+ }
96
+
97
+ return metaArgumentVerified;
98
+ }