occam-verify-cli 0.0.526 → 0.0.529

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 (221) hide show
  1. package/README.md +4 -0
  2. package/bin/abbreviations.js +5 -1
  3. package/bin/action/help.js +4 -0
  4. package/bin/action/verify.js +35 -13
  5. package/bin/actions.js +11 -6
  6. package/bin/defaults.js +4 -0
  7. package/bin/options.js +4 -0
  8. package/bin/utilities/releaseContext.js +5 -7
  9. package/lib/assertion/type.js +10 -40
  10. package/lib/axiom.js +8 -8
  11. package/lib/axiomLemmaTheoremConjecture.js +190 -0
  12. package/lib/combinator.js +4 -3
  13. package/lib/conclusion.js +8 -7
  14. package/lib/conjecture.js +141 -0
  15. package/lib/consequence.js +6 -5
  16. package/lib/constants.js +11 -27
  17. package/lib/constructor.js +5 -4
  18. package/lib/context/file.js +88 -73
  19. package/lib/context/metaproof.js +51 -20
  20. package/lib/context/proof.js +48 -114
  21. package/lib/context/release/directory.js +25 -6
  22. package/lib/context/release/file.js +38 -25
  23. package/lib/context/release.js +32 -51
  24. package/lib/equality.js +79 -51
  25. package/lib/index.js +4 -16
  26. package/lib/kinds.js +5 -1
  27. package/lib/label.js +4 -3
  28. package/lib/lemma.js +8 -8
  29. package/lib/log.js +146 -0
  30. package/lib/matcher.js +25 -75
  31. package/lib/metaTypeNames.js +13 -0
  32. package/lib/mixins/file.js +62 -2
  33. package/lib/mixins/logging.js +13 -13
  34. package/lib/node/metastatement/bracketed.js +16 -0
  35. package/lib/node/statement/bracketed.js +16 -0
  36. package/lib/node/statement/combinator/bracketed.js +17 -0
  37. package/lib/node/statement/combinator/equality.js +17 -0
  38. package/lib/node/statement/equality.js +16 -0
  39. package/lib/ocmbinator/bracketed.js +3 -4
  40. package/lib/ocmbinator/equality.js +3 -4
  41. package/lib/premise.js +13 -12
  42. package/lib/rule.js +5 -5
  43. package/lib/ruleNames.js +1 -9
  44. package/lib/step/metaproof.js +28 -25
  45. package/lib/step/proof.js +23 -1
  46. package/lib/substitution/metastatementForMetavariable.js +16 -13
  47. package/lib/substitution/statementForMetavariable.js +16 -13
  48. package/lib/substitution/termForVariable.js +76 -0
  49. package/lib/supposition.js +7 -6
  50. package/lib/theorem.js +8 -8
  51. package/lib/type.js +12 -5
  52. package/lib/utilities/metaproof.js +60 -0
  53. package/lib/utilities/node.js +56 -0
  54. package/lib/utilities/proof.js +60 -0
  55. package/lib/utilities/releaseContext.js +24 -12
  56. package/lib/utilities/string.js +3 -38
  57. package/lib/variable.js +4 -38
  58. package/lib/{matcher → verifier}/metastatementForMetavariable/conclusion.js +12 -12
  59. package/lib/{matcher → verifier}/metastatementForMetavariable/premise.js +12 -12
  60. package/lib/verifier/metastatementForMetavariable.js +198 -0
  61. package/lib/{matcher → verifier}/statementForMetavariable/conclusion.js +12 -12
  62. package/lib/{matcher → verifier}/statementForMetavariable/premise.js +12 -12
  63. package/lib/verifier/statementForMetavariable.js +203 -0
  64. package/lib/{matcher/statementForVariable → verifier/termForVariable}/consequence.js +13 -13
  65. package/lib/{matcher/statementForVariable → verifier/termForVariable}/supposition.js +13 -13
  66. package/lib/verifier/termForVariable.js +198 -0
  67. package/lib/verifier.js +92 -0
  68. package/lib/verify/assertion/type.js +62 -41
  69. package/lib/verify/axiom.js +3 -6
  70. package/lib/verify/conclusion.js +2 -4
  71. package/lib/verify/conjecture.js +54 -0
  72. package/lib/verify/consequence.js +2 -4
  73. package/lib/verify/declaration/combinator.js +1 -3
  74. package/lib/verify/declaration/constructor.js +1 -3
  75. package/lib/verify/declaration/topLevel.js +7 -5
  76. package/lib/verify/declaration/type.js +1 -3
  77. package/lib/verify/declaration/variable.js +1 -3
  78. package/lib/verify/derivation.js +1 -5
  79. package/lib/verify/label.js +1 -3
  80. package/lib/verify/lemma.js +3 -6
  81. package/lib/verify/metastatement/qualified.js +2 -5
  82. package/lib/verify/metastatement/unqualified.js +2 -5
  83. package/lib/verify/metastatement.js +1 -3
  84. package/lib/verify/premise.js +2 -4
  85. package/lib/verify/proof.js +3 -5
  86. package/lib/verify/rule.js +3 -6
  87. package/lib/verify/ruleDerivation.js +1 -5
  88. package/lib/verify/ruleProof.js +3 -5
  89. package/lib/verify/statement/qualified.js +40 -13
  90. package/lib/verify/statement/unqualified.js +2 -5
  91. package/lib/verify/statement.js +56 -62
  92. package/lib/verify/statementAsCombinator.js +4 -6
  93. package/lib/verify/supposition.js +2 -4
  94. package/lib/verify/term.js +4 -10
  95. package/lib/verify/termAsConstructor.js +6 -9
  96. package/lib/verify/theorem.js +3 -6
  97. package/lib/verify/type.js +5 -9
  98. package/lib/verify/variable.js +5 -9
  99. package/package.json +1 -1
  100. package/src/assertion/type.js +7 -32
  101. package/src/axiom.js +4 -4
  102. package/src/{axiomLemmaTheorem.js → axiomLemmaTheoremConjecture.js} +9 -9
  103. package/src/combinator.js +3 -3
  104. package/src/conclusion.js +7 -7
  105. package/src/conjecture.js +13 -0
  106. package/src/consequence.js +5 -5
  107. package/src/constants.js +3 -7
  108. package/src/constructor.js +4 -4
  109. package/src/context/file.js +85 -65
  110. package/src/context/metaproof.js +55 -15
  111. package/src/context/proof.js +53 -50
  112. package/src/context/release/directory.js +31 -7
  113. package/src/context/release/file.js +47 -31
  114. package/src/context/release.js +23 -32
  115. package/src/equality.js +108 -61
  116. package/src/index.js +2 -4
  117. package/src/kinds.js +1 -0
  118. package/src/label.js +3 -3
  119. package/src/lemma.js +4 -4
  120. package/src/log.js +116 -0
  121. package/src/matcher.js +32 -24
  122. package/src/metaTypeNames.js +3 -0
  123. package/src/mixins/file.js +46 -1
  124. package/src/mixins/logging.js +6 -6
  125. package/src/node/metastatement/bracketed.js +9 -0
  126. package/src/node/statement/bracketed.js +9 -0
  127. package/src/node/statement/combinator/bracketed.js +10 -0
  128. package/src/node/statement/combinator/equality.js +11 -0
  129. package/src/node/statement/equality.js +10 -0
  130. package/src/ocmbinator/bracketed.js +2 -5
  131. package/src/ocmbinator/equality.js +2 -5
  132. package/src/premise.js +13 -13
  133. package/src/rule.js +4 -4
  134. package/src/ruleNames.js +0 -2
  135. package/src/step/metaproof.js +32 -29
  136. package/src/step/proof.js +28 -0
  137. package/src/substitution/metastatementForMetavariable.js +10 -15
  138. package/src/substitution/statementForMetavariable.js +11 -16
  139. package/src/substitution/termForVariable.js +36 -0
  140. package/src/supposition.js +6 -6
  141. package/src/theorem.js +4 -4
  142. package/src/type.js +17 -7
  143. package/src/utilities/metaproof.js +62 -0
  144. package/src/utilities/node.js +73 -0
  145. package/src/utilities/proof.js +62 -0
  146. package/src/utilities/releaseContext.js +30 -12
  147. package/src/utilities/string.js +4 -53
  148. package/src/variable.js +4 -37
  149. package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
  150. package/src/verifier/metastatementForMetavariable/premise.js +9 -0
  151. package/src/verifier/metastatementForMetavariable.js +89 -0
  152. package/src/verifier/statementForMetavariable/conclusion.js +9 -0
  153. package/src/verifier/statementForMetavariable/premise.js +9 -0
  154. package/src/verifier/statementForMetavariable.js +105 -0
  155. package/src/verifier/termForVariable/consequence.js +9 -0
  156. package/src/verifier/termForVariable/supposition.js +9 -0
  157. package/src/verifier/termForVariable.js +89 -0
  158. package/src/verifier.js +74 -0
  159. package/src/verify/assertion/type.js +74 -74
  160. package/src/verify/axiom.js +2 -9
  161. package/src/verify/conclusion.js +1 -7
  162. package/src/verify/conjecture.js +67 -0
  163. package/src/verify/consequence.js +1 -7
  164. package/src/verify/declaration/combinator.js +0 -6
  165. package/src/verify/declaration/constructor.js +0 -6
  166. package/src/verify/declaration/topLevel.js +7 -6
  167. package/src/verify/declaration/type.js +0 -6
  168. package/src/verify/declaration/variable.js +0 -6
  169. package/src/verify/derivation.js +0 -12
  170. package/src/verify/label.js +0 -6
  171. package/src/verify/lemma.js +4 -11
  172. package/src/verify/metastatement/qualified.js +1 -8
  173. package/src/verify/metastatement/unqualified.js +1 -8
  174. package/src/verify/metastatement.js +0 -6
  175. package/src/verify/premise.js +1 -7
  176. package/src/verify/proof.js +1 -7
  177. package/src/verify/rule.js +2 -9
  178. package/src/verify/ruleDerivation.js +0 -12
  179. package/src/verify/ruleProof.js +1 -7
  180. package/src/verify/statement/qualified.js +54 -20
  181. package/src/verify/statement/unqualified.js +1 -8
  182. package/src/verify/statement.js +65 -95
  183. package/src/verify/statementAsCombinator.js +3 -9
  184. package/src/verify/supposition.js +1 -7
  185. package/src/verify/term.js +3 -21
  186. package/src/verify/termAsConstructor.js +5 -13
  187. package/src/verify/theorem.js +2 -9
  188. package/src/verify/type.js +4 -13
  189. package/src/verify/variable.js +4 -13
  190. package/bin/callbacks.js +0 -48
  191. package/lib/axiomLemmaTheorem.js +0 -190
  192. package/lib/callbacks.js +0 -75
  193. package/lib/context/release/combinator.js +0 -64
  194. package/lib/jsonTypes.js +0 -30
  195. package/lib/matcher/metastatementForMetavariable.js +0 -201
  196. package/lib/matcher/statementForMetavariable.js +0 -201
  197. package/lib/matcher/statementForVariable.js +0 -201
  198. package/lib/mixins/callbacks.js +0 -27
  199. package/lib/substitution/statementForVariable.js +0 -86
  200. package/lib/utilities/json.js +0 -187
  201. package/lib/utilities/substitution.js +0 -61
  202. package/lib/utilities/version.js +0 -32
  203. package/lib/versionChanges.js +0 -34
  204. package/src/callbacks.js +0 -39
  205. package/src/context/release/combinator.js +0 -39
  206. package/src/jsonTypes.js +0 -6
  207. package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
  208. package/src/matcher/metastatementForMetavariable/premise.js +0 -9
  209. package/src/matcher/metastatementForMetavariable.js +0 -99
  210. package/src/matcher/statementForMetavariable/conclusion.js +0 -9
  211. package/src/matcher/statementForMetavariable/premise.js +0 -9
  212. package/src/matcher/statementForMetavariable.js +0 -99
  213. package/src/matcher/statementForVariable/consequence.js +0 -9
  214. package/src/matcher/statementForVariable/supposition.js +0 -9
  215. package/src/matcher/statementForVariable.js +0 -99
  216. package/src/mixins/callbacks.js +0 -15
  217. package/src/substitution/statementForVariable.js +0 -64
  218. package/src/utilities/json.js +0 -264
  219. package/src/utilities/substitution.js +0 -79
  220. package/src/utilities/version.js +0 -30
  221. package/src/versionChanges.js +0 -11
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ import matcher from "../matcher";
4
+ import bracketedMetastatementNode from "../node/metastatement/bracketed";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { BRACKETED_METASTATEMENT_DEPTH } from "../constants";
8
+
9
+ const bracketedMetastatementChildNodeQuery = nodeQuery('/metastatement/metastatement!');
10
+
11
+ export function matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB) {
12
+ let metastatementMatchesModuloBrackets = false;
13
+
14
+ if (!metastatementMatchesModuloBrackets) {
15
+ const nodeA = metastatementNodeA, ///
16
+ nodeB = metastatementNodeB, ///
17
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
18
+
19
+ metastatementMatchesModuloBrackets = nodeMatches; ///
20
+ }
21
+
22
+ if (!metastatementMatchesModuloBrackets) {
23
+ const bracketedMetastatementChildNodeA = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNodeA);
24
+
25
+ if (bracketedMetastatementChildNodeA !== null) {
26
+ const nodeA = bracketedMetastatementChildNodeA, ///
27
+ nodeB = metastatementNodeB, ///
28
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
29
+
30
+ metastatementMatchesModuloBrackets = nodeMatches; ///
31
+ }
32
+ }
33
+
34
+ if (!metastatementMatchesModuloBrackets) {
35
+ const bracketedMetastatementChildNodeB = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNodeB);
36
+
37
+ if (bracketedMetastatementChildNodeB !== null) {
38
+ const nodeA = metastatementNodeA, ///
39
+ nodeB = bracketedMetastatementChildNodeB, ///
40
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
41
+
42
+ metastatementMatchesModuloBrackets = nodeMatches; ///
43
+ }
44
+ }
45
+
46
+ return metastatementMatchesModuloBrackets;
47
+ }
48
+
49
+ export function bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode) {
50
+ let bracketedMetastatementChildNode = null;
51
+
52
+ const nodeA = metastatementNode, ///
53
+ nodeB = bracketedMetastatementNode, ///
54
+ depth = BRACKETED_METASTATEMENT_DEPTH,
55
+ nonTerminalNodeMatches = matcher.matchNode(nodeA, nodeB, depth);
56
+
57
+ if (nonTerminalNodeMatches) {
58
+ bracketedMetastatementChildNode = bracketedMetastatementChildNodeQuery(metastatementNode);
59
+ }
60
+
61
+ return bracketedMetastatementChildNode;
62
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ import { rewriteNodes } from "occam-grammar-utilities";
4
+ import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { LABEL_RULE_NAME, UNQUALIFIED_STATEMENT_RULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME, CONSTRUCTOR_DECLARATIONRULE_NAME } from "../ruleNames";
8
+
9
+ import { combinedCustomGrammarFromNothing } from "./customGrammar";
10
+
11
+ const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
12
+ { florenceParserFromCombinedCustomGrammar } = parsersUtilities;
13
+
14
+ const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
15
+ florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar),
16
+ florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
17
+
18
+ const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
19
+ statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
20
+ metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
21
+
22
+ export function termNodeFromTermString(termString, lexer, parser) {
23
+ const ruleName = CONSTRUCTOR_DECLARATIONRULE_NAME,
24
+ content = `Constructor ${termString}
25
+ `,
26
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
27
+ constructorDeclarationNode = node, ///
28
+ termNode = termNodeQuery(constructorDeclarationNode);
29
+
30
+ return termNode;
31
+ }
32
+
33
+ export function labelNodeFromLabelString(labelString, lexer, parser) {
34
+ const content = labelString, ///
35
+ ruleName = LABEL_RULE_NAME,
36
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
37
+ labelNode = node; ///
38
+
39
+ return labelNode;
40
+ }
41
+
42
+ export function statementNodeFromStatementString(statementString, lexer, parser) {
43
+ const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
44
+ content = `${statementString}
45
+ `,
46
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
47
+ unqualifiedStatementNode = node, ///
48
+ statementNode = statementNodeQuery(unqualifiedStatementNode);
49
+
50
+ return statementNode;
51
+ }
52
+
53
+ export function metastatementNodeFromMetastatementString(metastatementString, lexer, parser) {
54
+ const ruleName = UNQUALIFIED_METASTATEMENT_RULE_NAME,
55
+ content = `${metastatementString}
56
+ `,
57
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
58
+ unqualifiedMetastatementNode = node, ///
59
+ metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
60
+
61
+ return metastatementNode;
62
+ }
63
+
64
+ function nodeFromContentAndRuleName(content, ruleName, lexer = florenceLexer, parser = florenceParser) {
65
+ const ruleMap = parser.getRuleMap(),
66
+ rule = ruleMap[ruleName],
67
+ tokens = lexer.tokenise(content),
68
+ node = parser.parse(tokens, rule);
69
+
70
+ rewriteNodes(node);
71
+
72
+ return node;
73
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ import matcher from "../matcher";
4
+ import bracketedStatementNode from "../node/statement/bracketed";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { BRACKETED_STATEMENT_DEPTH } from "../constants";
8
+
9
+ const bracketedStatementChildNodeQuery = nodeQuery('/statement/metaArgument!/statement!');
10
+
11
+ export function matchStatementModuloBrackets(statementNodeA, statementNodeB) {
12
+ let statementMatchesModuloBrackets = false;
13
+
14
+ if (!statementMatchesModuloBrackets) {
15
+ const nodeA = statementNodeA, ///
16
+ nodeB = statementNodeB, ///
17
+ nonTerminalNodeMatches = matcher.matchNode(nodeA, nodeB);
18
+
19
+ statementMatchesModuloBrackets = nonTerminalNodeMatches; ///
20
+ }
21
+
22
+ if (!statementMatchesModuloBrackets) {
23
+ const bracketedStatementChildNodeA = bracketedStatementChildNodeFromStatementNode(statementNodeA);
24
+
25
+ if (bracketedStatementChildNodeA !== null) {
26
+ const nodeA = bracketedStatementChildNodeA, ///
27
+ nodeB = statementNodeB, ///
28
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
29
+
30
+ statementMatchesModuloBrackets = nodeMatches; ///
31
+ }
32
+ }
33
+
34
+ if (!statementMatchesModuloBrackets) {
35
+ const bracketedStatementChildNodeB = bracketedStatementChildNodeFromStatementNode(statementNodeB);
36
+
37
+ if (bracketedStatementChildNodeB !== null) {
38
+ const nodeA = statementNodeA, ///
39
+ nodeB = bracketedStatementChildNodeB, ///
40
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
41
+
42
+ statementMatchesModuloBrackets = nodeMatches; ///
43
+ }
44
+ }
45
+
46
+ return statementMatchesModuloBrackets;
47
+ }
48
+
49
+ export function bracketedStatementChildNodeFromStatementNode(statementNode) {
50
+ let bracketedStatementChildNode = null;
51
+
52
+ const nodeA = statementNode, ///
53
+ nodeB = bracketedStatementNode, ///
54
+ depth = BRACKETED_STATEMENT_DEPTH,
55
+ nonTerminalNodeMatches = matcher.matchNode(nodeA, nodeB, depth);
56
+
57
+ if (nonTerminalNodeMatches) {
58
+ bracketedStatementChildNode = bracketedStatementChildNodeQuery(statementNode);
59
+ }
60
+
61
+ return bracketedStatementChildNode;
62
+ }
@@ -35,7 +35,7 @@ export function createReleaseContext(dependency, dependentNames, context, callba
35
35
 
36
36
  error = checkReleaseMatchesDependency(dependency, dependentNames, releaseContext);
37
37
 
38
- if (error !== null) {
38
+ if (error) {
39
39
  callback(error);
40
40
 
41
41
  return;
@@ -47,19 +47,25 @@ export function createReleaseContext(dependency, dependentNames, context, callba
47
47
  }, context);
48
48
  }
49
49
 
50
- export function initialiseReleaseContext(dependency, dependentName, verified, context) {
50
+ export function initialiseReleaseContext(dependency, dependentName, verified, context, callback) {
51
+ let error = null;
52
+
51
53
  const { releaseContextMap } = context,
52
54
  dependencyName = dependency.getName(),
53
55
  releaseName = dependencyName, ///
54
56
  releaseContext = releaseContextMap[releaseName] || null;
55
57
 
56
58
  if (releaseContext === null) {
59
+ callback(error);
60
+
57
61
  return;
58
62
  }
59
63
 
60
64
  const initialised = releaseContext.isInitialised();
61
65
 
62
66
  if (initialised) {
67
+ callback(error);
68
+
63
69
  return;
64
70
  }
65
71
 
@@ -67,27 +73,39 @@ export function initialiseReleaseContext(dependency, dependentName, verified, co
67
73
 
68
74
  if (verified) {
69
75
  if (!releaseContextVerified) {
70
- const { log } = context;
76
+ error = `Unable to initialise the '${releaseName}' dependency's context because its '${dependentName}' dependent is a package.`;
71
77
 
72
- log.error(`Unable to initialise the '${releaseName}' dependency's context because its '${dependentName}' dependent is a package.`);
78
+ callback(error);
73
79
 
74
80
  return;
75
81
  }
76
82
  }
77
83
 
78
- verified = releaseContextVerified; ///
79
-
80
84
  dependentName = releaseName; ///
81
85
 
86
+ verified = releaseContextVerified; ///
87
+
82
88
  const dependencies = releaseContext.getDependencies();
83
89
 
84
- dependencies.forEachDependency((dependency) => {
85
- initialiseReleaseContext(dependency, dependentName, verified, context);
86
- });
90
+ dependencies.asynchronousForEachDependency((dependency, next, done) => {
91
+ initialiseReleaseContext(dependency, dependentName, verified, context, (error) => {
92
+ if (error) {
93
+ callback(error);
87
94
 
88
- const dependencyReleaseContexts = retrieveDependencyReleaseContexts(dependency, context);
95
+ return;
96
+ }
89
97
 
90
- releaseContext.initialise(dependencyReleaseContexts);
98
+ next();
99
+ });
100
+ }, done);
101
+
102
+ function done() {
103
+ const dependencyReleaseContexts = retrieveDependencyReleaseContexts(dependency, context);
104
+
105
+ releaseContext.initialise(dependencyReleaseContexts);
106
+
107
+ callback(error);
108
+ }
91
109
  }
92
110
 
93
111
  export default {
@@ -153,7 +171,7 @@ function createDependencyReleaseContexts(dependency, dependentNames, context, ca
153
171
  dependencies.asynchronousForEachDependency((dependency, next, done) => {
154
172
  const error = checkCyclicDependencyExists(dependency, dependentNames);
155
173
 
156
- if (error !== null) {
174
+ if (error) {
157
175
  callback(error);
158
176
 
159
177
  return;
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { nodeQuery } from "../utilities/query";
4
3
  import { COMMA, EMPTY_STRING } from "../constants";
5
- import { LABEL_RULE_NAME, UNQUALIFIED_STATEMENT_RULE_NAME, CONSTRUCTOR_DECLARATIONRULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
6
-
7
- const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
8
- statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
9
- metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
10
4
 
11
5
  export function nodeAsString(node, tokens) {
12
6
  let string = null;
@@ -51,56 +45,13 @@ export function nodesAsString(nodes, tokens) {
51
45
  const string = nodes.reduce((string, node) => {
52
46
  const nodeString = nodeAsString(node, tokens);
53
47
 
54
- if (string === null) {
55
- string = nodeString; ///
56
- } else {
57
- string = `${string}${COMMA}${nodeString}`;
58
- }
48
+ string = (string === EMPTY_STRING) ?
49
+ nodeString :
50
+ `${string}${COMMA}${nodeString}`;
59
51
 
60
52
  return string;
61
- }, null);
53
+ }, EMPTY_STRING);
62
54
 
63
55
  return string;
64
56
  }
65
57
 
66
- export function termNodeFromTermString(termString, releaseContext) {
67
- const ruleName = CONSTRUCTOR_DECLARATIONRULE_NAME,
68
- content = `Constructor ${termString}
69
- `,
70
- node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
71
- constructorDeclarationNode = node, ///
72
- termNode = termNodeQuery(constructorDeclarationNode);
73
-
74
- return termNode;
75
- }
76
-
77
- export function labelNodeFromLabelString(labelString, releaseContext) {
78
- const content = labelString, ///
79
- ruleName = LABEL_RULE_NAME,
80
- node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
81
- labelNode = node; ///
82
-
83
- return labelNode;
84
- }
85
-
86
- export function statementNodeFromStatementString(statementString, releaseContext) {
87
- const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
88
- content = `${statementString}
89
- `,
90
- node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
91
- unqualifiedStatementNode = node, ///
92
- statementNode = statementNodeQuery(unqualifiedStatementNode);
93
-
94
- return statementNode;
95
- }
96
-
97
- export function metastatementNodeFromMetastatementString(metastatementString, releaseContext) {
98
- const ruleName = UNQUALIFIED_METASTATEMENT_RULE_NAME,
99
- content = `${metastatementString}
100
- `,
101
- node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
102
- unqualifiedMetastatementNode = node, ///
103
- metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
104
-
105
- return metastatementNode;
106
- }
package/src/variable.js CHANGED
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  export default class Variable {
4
- constructor(type, name, termNode) {
4
+ constructor(type, name) {
5
5
  this.type = type;
6
6
  this.name = name;
7
- this.termNode = termNode;
8
7
  }
9
8
 
10
9
  getType() {
@@ -15,53 +14,21 @@ export default class Variable {
15
14
  return this.name;
16
15
  }
17
16
 
18
- getTermNode() {
19
- return this.termNode;
20
- }
21
-
22
- setTermNode(termNode) {
23
- this.termNode = termNode;
24
- }
25
-
26
17
  matchName(name) {
27
18
  const matchesName = (this.name === name);
28
19
 
29
20
  return matchesName;
30
21
  }
31
22
 
32
- isEqualTo(variable) {
33
- let equalTo = false;
34
-
35
- if (variable === this) {
36
- equalTo = true;
37
- } else {
38
- const termNode = variable.getTermNode();
39
-
40
- if (termNode === this.termNode) {
41
- equalTo = true;
42
- }
43
- }
44
-
45
- return equalTo;
46
- }
47
-
48
23
  asString(tokens) {
49
- let string;
50
-
51
- if (this.type === null) {
52
- string = this.name;
53
- } else {
54
- const typeName = this.type.getName();
55
-
56
- string = `${this.name}:${typeName}`;
57
- }
24
+ const typeName = this.type.getName(),
25
+ string = `${this.name}:${typeName}`;
58
26
 
59
27
  return string;
60
28
  }
61
29
 
62
30
  static fromTypeAndName(type, name) {
63
- const termNode = null,
64
- variable = new Variable(type, name, termNode);
31
+ const variable = new Variable(type, name);
65
32
 
66
33
  return variable;
67
34
  }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import MetastatementForMetavariableVerifier from "../../verifier/metastatementForMetavariable";
4
+
5
+ class ConclusionMetastatementForMetavariableVerifier extends MetastatementForMetavariableVerifier {
6
+ static createSubstitutions = false;
7
+ }
8
+
9
+ export const conclusionMetastatementForMetavariableVerifier = new ConclusionMetastatementForMetavariableVerifier();
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import MetastatementForMetavariableVerifier from "../../verifier/metastatementForMetavariable";
4
+
5
+ class PremiseMetastatementForMetavariableVerifier extends MetastatementForMetavariableVerifier {
6
+ static createSubstitutions = true;
7
+ }
8
+
9
+ export const premiseMetastatementForMetavariableVerifier = new PremiseMetastatementForMetavariableVerifier();
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ import Verifier from "../verifier";
4
+ import MetastatementForMetavariableSubstitution from "../substitution/metastatementForMetavariable";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { METASTATEMENT_RULE_NAME } from "../ruleNames";
8
+ import { metavariableNameFromMetavariableNode } from "../utilities/query";
9
+
10
+ const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!');
11
+
12
+ export default class MetastatementForMetavariableVerifier extends Verifier {
13
+ matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
14
+ let nonTerminalNodeMatches = false;
15
+
16
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
17
+ nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
18
+
19
+ if (nonTerminalNodeBRuleName === nonTerminalNodeARuleName) {
20
+ const nonTerminalNodeARuleNameMetastatementRuleName = (nonTerminalNodeARuleName === METASTATEMENT_RULE_NAME),
21
+ nonTerminalNodeBRuleNameMetastatementRuleName = (nonTerminalNodeBRuleName === METASTATEMENT_RULE_NAME);
22
+
23
+ if (nonTerminalNodeARuleNameMetastatementRuleName && nonTerminalNodeBRuleNameMetastatementRuleName) {
24
+ const metastatementNodeA = nonTerminalNodeA, ///
25
+ metastatementNodeB = nonTerminalNodeB, ///
26
+ metastatementNodeMatches = this.matchMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions);
27
+
28
+ if (metastatementNodeMatches) {
29
+ nonTerminalNodeMatches = true; ///
30
+ } else {
31
+ nonTerminalNodeMatches = super.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
32
+ }
33
+ } else {
34
+ nonTerminalNodeMatches = super.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
35
+ }
36
+ }
37
+
38
+ return nonTerminalNodeMatches;
39
+ }
40
+
41
+ matchMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions) {
42
+ let metastatementNodeMatches = false;
43
+
44
+ const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
45
+
46
+ if (metavariableNodeA !== null) {
47
+ const metaVariableNodeMatches = this.matchMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions);
48
+
49
+ metastatementNodeMatches = metaVariableNodeMatches; ///
50
+ }
51
+
52
+ return metastatementNodeMatches;
53
+ }
54
+
55
+ matchMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions) {
56
+ let metavariableNodeMatches;
57
+
58
+ const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
59
+ substitution = substitutions.find((substitution) => {
60
+ const metavariableName = substitution.getMetavariableName();
61
+
62
+ if (metavariableName === metavariableNameA) {
63
+ return true;
64
+ }
65
+ }) || null;
66
+
67
+ if (substitution !== null) {
68
+ const metastatementNode = metastatementNodeB, ///
69
+ substitutionNodesMatch = substitution.matchMetastatementNode(metastatementNode);
70
+
71
+ metavariableNodeMatches = substitutionNodesMatch; ///
72
+ } else {
73
+ const { createSubstitutions } = this.constructor;
74
+
75
+ if (createSubstitutions) {
76
+ const metavariableName = metavariableNameA, ///
77
+ metastatementNode = metastatementNodeB, ///
78
+ metastatementForMetavariableSubstitution = MetastatementForMetavariableSubstitution.fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode),
79
+ substitution = metastatementForMetavariableSubstitution; ///
80
+
81
+ substitutions.push(substitution);
82
+ }
83
+
84
+ metavariableNodeMatches = true;
85
+ }
86
+
87
+ return metavariableNodeMatches;
88
+ }
89
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import StatementForMetavariableVerifier from "../../verifier/statementForMetavariable";
4
+
5
+ class ConclusionStatementForMetavariableVerifier extends StatementForMetavariableVerifier {
6
+ static createSubstitutions = false;
7
+ }
8
+
9
+ export const conclusionStatementForMetavariableVerifier = new ConclusionStatementForMetavariableVerifier();
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import StatementForMetavariableVerifier from "../../verifier/statementForMetavariable";
4
+
5
+ class PremiseStatementForMetavariableVerifier extends StatementForMetavariableVerifier {
6
+ static createSubstitutions = true;
7
+ }
8
+
9
+ export const premiseStatementForMetavariableVerifier = new PremiseStatementForMetavariableVerifier();
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ import Verifier from "../verifier";
4
+ import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { metavariableNameFromMetavariableNode } from "../utilities/query";
8
+ import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../ruleNames";
9
+
10
+ const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!'),
11
+ metaArgumentChildNodeNodeQuery = nodeQuery('/metaArgument/*!');
12
+
13
+ export default class StatementForMetavariableVerifier extends Verifier {
14
+ matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
15
+ let nonTerminalNodeMatches = false;
16
+
17
+ const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(),
18
+ nonTerminalNodeBRuleNameMetaArgumentRuleName = (nonTerminalNodeBRuleName === META_ARGUMENT_RULE_NAME);
19
+
20
+ if (nonTerminalNodeBRuleNameMetaArgumentRuleName) {
21
+ const metaArgumentNodeB = nonTerminalNodeB, ///
22
+ metaArgumentChildNodeB = metaArgumentChildNodeNodeQuery(metaArgumentNodeB);
23
+
24
+ nonTerminalNodeB = metaArgumentChildNodeB; ///
25
+
26
+ nonTerminalNodeMatches = this.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
27
+ } else {
28
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
29
+ nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(),
30
+ nonTerminalNodeARuleNameMetastatementRuleName = (nonTerminalNodeARuleName === METASTATEMENT_RULE_NAME),
31
+ nonTerminalNodeBRuleNameStatementRuleName = (nonTerminalNodeBRuleName === STATEMENT_RULE_NAME);
32
+
33
+ if (nonTerminalNodeARuleNameMetastatementRuleName && nonTerminalNodeBRuleNameStatementRuleName) {
34
+ const metastatementNodeA = nonTerminalNodeA, ///
35
+ statementNodeB = nonTerminalNodeB, ///
36
+ statementNodeMatches = this.matchStatementNode(metastatementNodeA, statementNodeB, substitutions);
37
+
38
+ if (statementNodeMatches) {
39
+ nonTerminalNodeMatches = true; ///
40
+ } else {
41
+ const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
42
+ nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
43
+ nodesA = nonTerminalNodeAChildNodes, ///
44
+ nodesB = nonTerminalNodeBChildNodes, ///
45
+ nodesMatch = this.matchNodes(nodesA, nodesB, substitutions);
46
+
47
+ nonTerminalNodeMatches = nodesMatch; ///
48
+ }
49
+ } else if (nonTerminalNodeBRuleName === nonTerminalNodeARuleName) {
50
+ nonTerminalNodeMatches = super.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
51
+ }
52
+ }
53
+
54
+ return nonTerminalNodeMatches;
55
+ }
56
+
57
+ matchStatementNode(metastatementNodeA, statementNodeB, substitutions) {
58
+ let statementNodeMatches = false;
59
+
60
+ const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
61
+
62
+ if (metavariableNodeA !== null) {
63
+ const metavariableNodeMatches = this.matchMetavariableNode(metavariableNodeA, statementNodeB, substitutions);
64
+
65
+ statementNodeMatches = metavariableNodeMatches; ///
66
+ }
67
+
68
+ return statementNodeMatches;
69
+ }
70
+
71
+ matchMetavariableNode(metavariableNodeA, statementNodeB, substitutions) {
72
+ let metavariableNodeMatches;
73
+
74
+ const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
75
+ substitution = substitutions.find((substitution) => {
76
+ const metavariableName = substitution.getMetavariableName();
77
+
78
+ if (metavariableName === metavariableNameA) {
79
+ return true;
80
+ }
81
+ }) || null;
82
+
83
+ if (substitution !== null) {
84
+ const statementNode = statementNodeB, ///
85
+ substitutionNodesMatch = substitution.matchStatementNode(statementNode);
86
+
87
+ metavariableNodeMatches = substitutionNodesMatch; ///
88
+ } else {
89
+ const { createSubstitutions } = this.constructor;
90
+
91
+ if (createSubstitutions) {
92
+ const metavariableName = metavariableNameA, ///
93
+ statementNode = statementNodeB, ///
94
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNameAndStatementNode(metavariableName, statementNode),
95
+ substitution = statementForMetavariableSubstitution; ///
96
+
97
+ substitutions.push(substitution);
98
+ }
99
+
100
+ metavariableNodeMatches = true;
101
+ }
102
+
103
+ return metavariableNodeMatches;
104
+ }
105
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import TermForVariableVerifier from "../../verifier/termForVariable";
4
+
5
+ class ConsequenceTermForVariableVerifier extends TermForVariableVerifier {
6
+ static createSubstitutions = false;
7
+ }
8
+
9
+ export const consequenceTermForVariableVerifier = new ConsequenceTermForVariableVerifier();