occam-verify-cli 0.0.471 → 0.0.473

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 (40) hide show
  1. package/bin/utilities/fileSystem.js +1 -35
  2. package/lib/constants.js +4 -8
  3. package/lib/context/metaproof.js +9 -2
  4. package/lib/context/proof.js +9 -2
  5. package/lib/equality.js +22 -0
  6. package/lib/metaSubstitution.js +12 -52
  7. package/lib/step/metaproof.js +7 -7
  8. package/lib/substitution.js +16 -56
  9. package/lib/utilities/node.js +57 -4
  10. package/lib/utilities/releaseContext.js +22 -2
  11. package/lib/verify/derivation.js +4 -6
  12. package/lib/verify/metaDerivation.js +4 -6
  13. package/lib/verify/metaproof.js +3 -6
  14. package/lib/verify/metastatement/qualified.js +1 -7
  15. package/lib/verify/metastatement/unqualified.js +1 -7
  16. package/lib/verify/proof.js +3 -6
  17. package/lib/verify/statement/qualified.js +1 -7
  18. package/lib/verify/statement/unqualified.js +1 -7
  19. package/package.json +1 -1
  20. package/src/constants.js +1 -2
  21. package/src/context/metaproof.js +5 -1
  22. package/src/context/proof.js +5 -1
  23. package/src/equality.js +8 -0
  24. package/src/metaSubstitution.js +16 -87
  25. package/src/step/metaproof.js +13 -14
  26. package/src/substitution.js +19 -90
  27. package/src/utilities/node.js +78 -1
  28. package/src/utilities/releaseContext.js +41 -2
  29. package/src/verify/derivation.js +3 -8
  30. package/src/verify/metaDerivation.js +3 -8
  31. package/src/verify/metaproof.js +2 -8
  32. package/src/verify/metastatement/qualified.js +0 -9
  33. package/src/verify/metastatement/unqualified.js +0 -9
  34. package/src/verify/proof.js +2 -8
  35. package/src/verify/statement/qualified.js +0 -9
  36. package/src/verify/statement/unqualified.js +0 -9
  37. package/lib/utilities/metaAssertion.js +0 -117
  38. package/lib/utilities/statement.js +0 -45
  39. package/src/utilities/metaAssertion.js +0 -176
  40. package/src/utilities/statement.js +0 -50
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _statement = /*#__PURE__*/ _interopRequireDefault(require("../../verify/statement"));
12
12
  var _query = require("../../utilities/query");
13
- var _string = require("../../utilities/string");
14
13
  function _interopRequireDefault(obj) {
15
14
  return obj && obj.__esModule ? obj : {
16
15
  default: obj
@@ -20,8 +19,6 @@ var statementNodeQuery = (0, _query.nodeQuery)("/unqualifiedStatement/statement!
20
19
  function verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext) {
21
20
  var unqualifiedStatementVerified = false;
22
21
  proofContext.begin(unqualifiedStatementNode);
23
- var unqualifiedStatementString = (0, _string.nodeAsString)(unqualifiedStatementNode);
24
- proofContext.debug("Verifying the '".concat(unqualifiedStatementString, "' unqualified statement..."));
25
22
  var statementNode = statementNodeQuery(unqualifiedStatementNode);
26
23
  if (statementNode !== null) {
27
24
  var statementVerified = (0, _statement.default)(statementNode, proofContext);
@@ -35,11 +32,8 @@ function verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext) {
35
32
  }
36
33
  }
37
34
  }
38
- if (unqualifiedStatementVerified) {
39
- proofContext.info("Verified the '".concat(unqualifiedStatementString, "' unqualified statement."));
40
- }
41
35
  unqualifiedStatementVerified ? proofContext.complete(unqualifiedStatementNode) : proofContext.halt(unqualifiedStatementNode);
42
36
  return unqualifiedStatementVerified;
43
37
  }
44
38
 
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5U3RhdGVtZW50IGZyb20gXCIuLi8uLi92ZXJpZnkvc3RhdGVtZW50XCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmNvbnN0IHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi91bnF1YWxpZmllZFN0YXRlbWVudC9zdGF0ZW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudCh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHByb29mQ29udGV4dCkge1xuICBsZXQgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbih1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgcHJvb2ZDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgdW5xdWFsaWZpZWQgc3RhdGVtZW50Li4uYCk7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgICAgaWYgKGRlcml2ZWQpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uTWF0Y2hlcyA9IHByb29mQ29udGV4dC5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gYXNzZXJ0aW9uTWF0Y2hlczsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBwcm9vZkNvbnRleHQuaW5mbyhgVmVyaWZpZWQgdGhlICcke3VucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgdW5xdWFsaWZpZWQgc3RhdGVtZW50LmApO1xuICB9XG5cbiAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsInByb29mQ29udGV4dCIsInVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJiZWdpbiIsInVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlTdGF0ZW1lbnQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwiYXNzZXJ0aW9uTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50IiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBU0E7OztlQUF3QkE7Ozs4REFQSTtxQkFFRjtzQkFDRzs7Ozs7O0FBRTdCLElBQU1DLHFCQUFxQkMsSUFBQUEsZ0JBQVMsRUFBQztBQUV0QixTQUFTRiwyQkFBMkJHLHdCQUF3QixFQUFFQyxZQUFZLEVBQUU7SUFDekYsSUFBSUMsK0JBQStCLEtBQUs7SUFFeENELGFBQWFFLEtBQUssQ0FBQ0g7SUFFbkIsSUFBTUksNkJBQTZCQyxJQUFBQSxvQkFBWSxFQUFDTDtJQUVoREMsYUFBYUssS0FBSyxDQUFDLEFBQUMsa0JBQTRDLE9BQTNCRiw0QkFBMkI7SUFFaEUsSUFBTUcsZ0JBQWdCVCxtQkFBbUJFO0lBRXpDLElBQUlPLGtCQUFrQixJQUFJLEVBQUU7UUFDMUIsSUFBTUMsb0JBQW9CQyxJQUFBQSxrQkFBZSxFQUFDRixlQUFlTjtRQUV6RCxJQUFJTyxtQkFBbUI7WUFDckIsSUFBTUUsVUFBVVQsYUFBYVUsU0FBUztZQUV0QyxJQUFJRCxTQUFTO2dCQUNYLElBQU1FLG1CQUFtQlgsYUFBYVksY0FBYyxDQUFDTjtnQkFFckRMLCtCQUErQlUsa0JBQW1CLEdBQUc7WUFDdkQsT0FBTztnQkFDTFYsK0JBQStCLElBQUk7WUFDckMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSUEsOEJBQThCO1FBQ2hDRCxhQUFhYSxJQUFJLENBQUMsQUFBQyxpQkFBMkMsT0FBM0JWLDRCQUEyQjtJQUNoRSxDQUFDO0lBRURGLCtCQUNFRCxhQUFhYyxRQUFRLENBQUNmLDRCQUNwQkMsYUFBYWUsSUFBSSxDQUFDaEIseUJBQXlCO0lBRS9DLE9BQU9FO0FBQ1QifQ==
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5U3RhdGVtZW50IGZyb20gXCIuLi8uLi92ZXJpZnkvc3RhdGVtZW50XCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3VucXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgICAgaWYgKGRlcml2ZWQpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uTWF0Y2hlcyA9IHByb29mQ29udGV4dC5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gYXNzZXJ0aW9uTWF0Y2hlczsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsInByb29mQ29udGV4dCIsInVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJiZWdpbiIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeVN0YXRlbWVudCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJhc3NlcnRpb25NYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnQiLCJjb21wbGV0ZSIsImhhbHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBd0JBOzs7OERBTkk7cUJBRUY7Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUM7QUFFdEIsU0FBU0YsMkJBQTJCRyx3QkFBd0IsRUFBRUMsWUFBWSxFQUFFO0lBQ3pGLElBQUlDLCtCQUErQixLQUFLO0lBRXhDRCxhQUFhRSxLQUFLLENBQUNIO0lBRW5CLElBQU1JLGdCQUFnQk4sbUJBQW1CRTtJQUV6QyxJQUFJSSxrQkFBa0IsSUFBSSxFQUFFO1FBQzFCLElBQU1DLG9CQUFvQkMsSUFBQUEsa0JBQWUsRUFBQ0YsZUFBZUg7UUFFekQsSUFBSUksbUJBQW1CO1lBQ3JCLElBQU1FLFVBQVVOLGFBQWFPLFNBQVM7WUFFdEMsSUFBSUQsU0FBUztnQkFDWCxJQUFNRSxtQkFBbUJSLGFBQWFTLGNBQWMsQ0FBQ047Z0JBRXJERiwrQkFBK0JPLGtCQUFtQixHQUFHO1lBQ3ZELE9BQU87Z0JBQ0xQLCtCQUErQixJQUFJO1lBQ3JDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEQSwrQkFDRUQsYUFBYVUsUUFBUSxDQUFDWCw0QkFDcEJDLGFBQWFXLElBQUksQ0FBQ1oseUJBQXlCO0lBRS9DLE9BQU9FO0FBQ1QifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "0.0.471",
4
+ "version": "0.0.473",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
package/src/constants.js CHANGED
@@ -9,5 +9,4 @@ export const LEFT_BRACKET = "(";
9
9
  export const RIGHT_BRACKET = ")";
10
10
  export const MAXIMUM_INDEXES_LENGTH = 10;
11
11
  export const MAXIMUM_PERMUTATION_LENGTH = 5;
12
- export const BRACKETED_STATEMENT_CHILD_NODES_LENGTH = 3;
13
- export const BRACKETED_METASTATEMENT_CHILD_NODES_LENGTH = 3;
12
+ export const BRACKETED_CHILD_NODES_LENGTH = 3;
@@ -44,10 +44,14 @@ class MetaproofContext {
44
44
  return lastMetaproofStep;
45
45
  }
46
46
 
47
- setDerived(derived) {
47
+ setDerived(derived = true) {
48
48
  this.derived = derived;
49
49
  }
50
50
 
51
+ resetDerived() {
52
+ this.derived = false;
53
+ }
54
+
51
55
  addMetaproofStep(metaproofStep) {
52
56
  this.metaproofSteps.push(metaproofStep);
53
57
  }
@@ -63,10 +63,14 @@ class ProofContext {
63
63
  return lastProofStep;
64
64
  }
65
65
 
66
- setDerived(derived) {
66
+ setDerived(derived = true) {
67
67
  this.derived = derived;
68
68
  }
69
69
 
70
+ resetDerived() {
71
+ this.derived = false;
72
+ }
73
+
70
74
  addVariable(variable) {
71
75
  this.variables.push(variable);
72
76
  }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ export default class Equality {
4
+ constructor(termNodeA, termNodeB) {
5
+ this.termNodeA = termNodeA;
6
+ this.termNodeB = termNodeB;
7
+ }
8
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { matchBracketedMetastatementChildNode, bracketedMetastatementChildNodeFromChildNodes } from "./utilities/metaAssertion";
3
+ import { matchNodes, bracketedChildNodeFromChildNodes } from "./utilities/node";
4
4
 
5
5
  export default class MetaSubstitution {
6
6
  constructor(metavariableName, nodes) {
@@ -19,34 +19,34 @@ export default class MetaSubstitution {
19
19
  matchNodes(nodes) {
20
20
  let matches;
21
21
 
22
- const metaSubstitutionNodes = this.nodes, ///
23
- metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes);
22
+ const nodesA = this.nodes, ///
23
+ nodesB = nodes,
24
+ metaSubstitutionNodesMatch = matchNodes(nodesA, nodesB);
24
25
 
25
- matches = metaSubstitutionNonTerminalNodeMatches; ///
26
+ matches = metaSubstitutionNodesMatch; ///
26
27
 
27
28
  if (!matches) {
28
29
  const childNodes = nodes, ///
29
- bracketedMetastatementChildNodeMatches = matchBracketedMetastatementChildNode(childNodes, (bracketedMetastatementChildNode) => {
30
- const nonTerminalNode = bracketedMetastatementChildNode, ///
31
- childNodes = nonTerminalNode.getChildNodes(),
32
- nodes = childNodes, ///
33
- metaAssertionNonTerminalNodeMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes),
34
- bracketedMetastatementChildNodeMatches = metaAssertionNonTerminalNodeMatches; ///
30
+ bracketedChildNode = bracketedChildNodeFromChildNodes(childNodes);
35
31
 
36
- return bracketedMetastatementChildNodeMatches;
37
- });
32
+ if (bracketedChildNode !== null) {
33
+ const nonTerminalNode = bracketedChildNode, ///
34
+ childNodes = nonTerminalNode.getChildNodes(),
35
+ nodesB = childNodes, ///
36
+ nodesMatch = matchNodes(nodesA, nodesB);
38
37
 
39
- matches = bracketedMetastatementChildNodeMatches; ///
38
+ matches = nodesMatch; ///
39
+ }
40
40
  }
41
41
 
42
42
  return matches;
43
43
  }
44
44
 
45
45
  static fromMetavariableNameAndNodes(metavariableName, nodes) {
46
- const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromChildNodes(nodes);
46
+ const bracketedChildNode = bracketedChildNodeFromChildNodes(nodes);
47
47
 
48
- if (bracketedMetastatementChildNode !== null) {
49
- const nonTerminalNode = bracketedMetastatementChildNode, ///
48
+ if (bracketedChildNode !== null) {
49
+ const nonTerminalNode = bracketedChildNode, ///
50
50
  childNodes = nonTerminalNode.getChildNodes();
51
51
 
52
52
  nodes = childNodes; ///
@@ -57,74 +57,3 @@ export default class MetaSubstitution {
57
57
  return metaSubstitution;
58
58
  }
59
59
  }
60
-
61
- function matchMetaSubstitutionNode(metaSubstitutionNode, node) {
62
- let metaSubstitutionNodeMatches = false;
63
-
64
- const nodeTerminalNode = node.isTerminalNode(),
65
- ruleNodeTerminalNode = metaSubstitutionNode.isTerminalNode();
66
-
67
- if (nodeTerminalNode === ruleNodeTerminalNode) {
68
- if (nodeTerminalNode) {
69
- const terminalNode = node, ///
70
- metaSubstitutionTerminalNode = metaSubstitutionNode, ///
71
- metaSubstitutionTerminalNodeMatches = matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode);
72
-
73
- metaSubstitutionNodeMatches = metaSubstitutionTerminalNodeMatches; ///
74
- } else {
75
- const nonTerminalNode = node, ///
76
- metaSubstitutionNonTerminalNode = metaSubstitutionNode, ///
77
- metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode);
78
-
79
- metaSubstitutionNodeMatches = metaSubstitutionNonTerminalNodeMatches; ///
80
- }
81
- }
82
-
83
- return metaSubstitutionNodeMatches;
84
- }
85
-
86
- function matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes) {
87
- let metaSubstitutionNodesMatches = false;
88
-
89
- const nodesLength = nodes.length,
90
- metaSubstitutionNodesLength = metaSubstitutionNodes.length;
91
-
92
- if (nodesLength === metaSubstitutionNodesLength) {
93
- metaSubstitutionNodesMatches = nodes.every((node, index) => {
94
- const metaSubstitutionNode = metaSubstitutionNodes[index],
95
- metaSubstitutionNodeMatches = matchMetaSubstitutionNode(metaSubstitutionNode, node);
96
-
97
- if (metaSubstitutionNodeMatches) {
98
- return true;
99
- }
100
- })
101
- }
102
-
103
- return metaSubstitutionNodesMatches;
104
- }
105
-
106
- function matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode) {
107
- const matches = metaSubstitutionTerminalNode.match(terminalNode),
108
- metaSubstitutionTerminalNodeMatches = matches; ///
109
-
110
- return metaSubstitutionTerminalNodeMatches;
111
- }
112
-
113
- function matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode) {
114
- let metaSubstitutionNonTerminalNodeMatches = false;
115
-
116
- const ruleName = nonTerminalNode.getRuleName(),
117
- metaSubstitutionRuleName = metaSubstitutionNonTerminalNode.getRuleName(); ///
118
-
119
- if (ruleName === metaSubstitutionRuleName) {
120
- const childNodes = nonTerminalNode.getChildNodes(),
121
- metaSubstitutionChildNodes = metaSubstitutionNonTerminalNode.getChildNodes(),
122
- nodes = childNodes, ///
123
- metaSubstitutionNodes = metaSubstitutionChildNodes, ///
124
- metaSubstitutionNodesMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes);
125
-
126
- metaSubstitutionNonTerminalNodeMatches = metaSubstitutionNodesMatches; ///
127
- }
128
-
129
- return metaSubstitutionNonTerminalNodeMatches;
130
- }
@@ -2,8 +2,7 @@
2
2
 
3
3
  import { first, second } from "../utilities/array";
4
4
  import { nodeQuery, nodesQuery } from "../utilities/query";
5
-
6
- import { matchTopmostMetaAssertionMetastatementNode } from "../utilities/metaAssertion";
5
+ import { matchBracketedNonTerminalNode } from "../utilities/node";
7
6
 
8
7
  const metastatementNodesQuery = nodesQuery("/metaSubproofAssertion/metastatement"),
9
8
  metaSubproofAssertionNodeQuery = nodeQuery("/metastatement/metaSubproofAssertion"),
@@ -45,10 +44,10 @@ export default class MetaproofStep {
45
44
  let metastatementsMatch = false;
46
45
 
47
46
  if (this.metastatementNode !== null) {
48
- const topmostMetastatementNode = metastatementNode, ///
49
- topmostMetaAssertionMetastatementNode = this.metastatementNode, ///
50
- topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode),
51
- metastatementNodeMatches = topmostMetaAssertionMetastatementNodeMatches; ///
47
+ const nonTerminalNodeA = metastatementNode, ///
48
+ nonTerminalNodeB = this.metastatementNode, ///
49
+ bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB),
50
+ metastatementNodeMatches = bracketedNodeMatches; ///
52
51
 
53
52
  return metastatementNodeMatches;
54
53
  }
@@ -65,19 +64,19 @@ export default class MetaproofStep {
65
64
  qualifiedOrUnqualifiedMetastatementMetastatementNodes = qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery(this.metaSubproofNode),
66
65
  firstQualifiedOrUnqualifiedMetastatementMetastatementNode = first(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
67
66
 
68
- const topmostMetastatementNode = firstMetaSubproofAssertionMetastatementNode, ///
69
- topmostMetaAssertionMetastatementNode = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
70
- topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
67
+ const nonTerminalNodeA = firstMetaSubproofAssertionMetastatementNode, ///
68
+ nonTerminalNodeB = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
69
+ bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
71
70
 
72
- if (topmostMetaAssertionMetastatementNodeMatches) {
71
+ if (bracketedNodeMatches) {
73
72
  const secondMetaSubproofAssertionMetastatementNode = second(metaSubproofAssertionMetastatementNodes),
74
73
  secondQualifiedOrUnqualifiedMetastatementMetastatementNode = second(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
75
74
 
76
- const topmostMetastatementNode = secondMetaSubproofAssertionMetastatementNode, ///
77
- topmostMetaAssertionMetastatementNode = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
78
- topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
75
+ const nonTerminalNodeA = secondMetaSubproofAssertionMetastatementNode, ///
76
+ nonTerminalNodeB = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
77
+ bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
79
78
 
80
- metaSubproofAssertionMatches = topmostMetaAssertionMetastatementNodeMatches; ///
79
+ metaSubproofAssertionMatches = bracketedNodeMatches; ///
81
80
  }
82
81
  }
83
82
 
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { matchBracketedStatementChildNode, bracketedStatementChildNodeFromChildNodes } from "./utilities/statement";
3
+ import { matchNodes, bracketedChildNodeFromChildNodes } from "./utilities/node";
4
4
 
5
5
  export default class Substitution {
6
6
  constructor(variableName, nodes) {
@@ -19,112 +19,41 @@ export default class Substitution {
19
19
  matchNodes(nodes) {
20
20
  let matches;
21
21
 
22
- const substitutionNodes = this.nodes, ///
23
- substitutionNonTerminalNodeMatches = matchSubstitutionNodes(substitutionNodes, nodes);
22
+ const nodesA = this.nodes, ///
23
+ nodesB = nodes,
24
+ metaSubstitutionNodesMatch = matchNodes(nodesA, nodesB);
24
25
 
25
- matches = substitutionNonTerminalNodeMatches; ///
26
+ matches = metaSubstitutionNodesMatch; ///
26
27
 
27
28
  if (!matches) {
28
29
  const childNodes = nodes, ///
29
- bracketedStatementChildNodeMatches = matchBracketedStatementChildNode(childNodes, (bracketedStatementChildNode) => {
30
- const nonTerminalNode = bracketedStatementChildNode, ///
31
- childNodes = nonTerminalNode.getChildNodes(),
32
- nodes = childNodes, ///
33
- assertionNonTerminalNodeMatches = matchSubstitutionNodes(substitutionNodes, nodes),
34
- bracketedStatementChildNodeMatches = assertionNonTerminalNodeMatches; ///
30
+ bracketedChildNode = bracketedChildNodeFromChildNodes(childNodes);
35
31
 
36
- return bracketedStatementChildNodeMatches;
37
- });
32
+ if (bracketedChildNode !== null) {
33
+ const nonTerminalNode = bracketedChildNode, ///
34
+ childNodes = nonTerminalNode.getChildNodes(),
35
+ nodesB = childNodes, ///
36
+ nodesMatch = matchNodes(nodesA, nodesB);
38
37
 
39
- matches = bracketedStatementChildNodeMatches; ///
38
+ matches = nodesMatch; ///
39
+ }
40
40
  }
41
41
 
42
42
  return matches;
43
43
  }
44
44
 
45
- static fromVariableNameAndNodes(variableName, nodes) {
46
- const bracketedStatementChildNode = bracketedStatementChildNodeFromChildNodes(nodes);
45
+ static fromMetavariableNameAndNodes(variableName, nodes) {
46
+ const bracketedChildNode = bracketedChildNodeFromChildNodes(nodes);
47
47
 
48
- if (bracketedStatementChildNode !== null) {
49
- const nonTerminalNode = bracketedStatementChildNode, ///
48
+ if (bracketedChildNode !== null) {
49
+ const nonTerminalNode = bracketedChildNode, ///
50
50
  childNodes = nonTerminalNode.getChildNodes();
51
51
 
52
52
  nodes = childNodes; ///
53
53
  }
54
54
 
55
- const substitution = new Substitution(variableName, nodes);
56
-
57
- return substitution;
58
- }
59
- }
60
-
61
- function matchSubstitutionNode(substitutionNode, node) {
62
- let substitutionNodeMatches = false;
63
-
64
- const nodeTerminalNode = node.isTerminalNode(),
65
- ruleNodeTerminalNode = substitutionNode.isTerminalNode();
66
-
67
- if (nodeTerminalNode === ruleNodeTerminalNode) {
68
- if (nodeTerminalNode) {
69
- const terminalNode = node, ///
70
- substitutionTerminalNode = substitutionNode, ///
71
- substitutionTerminalNodeMatches = matchSubstitutionTerminalNode(substitutionTerminalNode, terminalNode);
72
-
73
- substitutionNodeMatches = substitutionTerminalNodeMatches; ///
74
- } else {
75
- const nonTerminalNode = node, ///
76
- substitutionNonTerminalNode = substitutionNode, ///
77
- substitutionNonTerminalNodeMatches = matchSubstitutionNonTerminalNode(substitutionNonTerminalNode, nonTerminalNode);
78
-
79
- substitutionNodeMatches = substitutionNonTerminalNodeMatches; ///
80
- }
81
- }
82
-
83
- return substitutionNodeMatches;
84
- }
85
-
86
- function matchSubstitutionNodes(substitutionNodes, nodes) {
87
- let substitutionNodesMatches = false;
55
+ const metaSubstitution = new Substitution(variableName, nodes);
88
56
 
89
- const nodesLength = nodes.length,
90
- substitutionNodesLength = substitutionNodes.length;
91
-
92
- if (nodesLength === substitutionNodesLength) {
93
- substitutionNodesMatches = nodes.every((node, index) => {
94
- const substitutionNode = substitutionNodes[index],
95
- substitutionNodeMatches = matchSubstitutionNode(substitutionNode, node);
96
-
97
- if (substitutionNodeMatches) {
98
- return true;
99
- }
100
- })
101
- }
102
-
103
- return substitutionNodesMatches;
104
- }
105
-
106
- function matchSubstitutionTerminalNode(substitutionTerminalNode, terminalNode) {
107
- const matches = substitutionTerminalNode.match(terminalNode),
108
- substitutionTerminalNodeMatches = matches; ///
109
-
110
- return substitutionTerminalNodeMatches;
111
- }
112
-
113
- function matchSubstitutionNonTerminalNode(substitutionNonTerminalNode, nonTerminalNode) {
114
- let substitutionNonTerminalNodeMatches = false;
115
-
116
- const ruleName = nonTerminalNode.getRuleName(),
117
- substitutionRuleName = substitutionNonTerminalNode.getRuleName(); ///
118
-
119
- if (ruleName === substitutionRuleName) {
120
- const childNodes = nonTerminalNode.getChildNodes(),
121
- substitutionChildNodes = substitutionNonTerminalNode.getChildNodes(),
122
- nodes = childNodes, ///
123
- substitutionNodes = substitutionChildNodes, ///
124
- substitutionNodesMatches = matchSubstitutionNodes(substitutionNodes, nodes);
125
-
126
- substitutionNonTerminalNodeMatches = substitutionNodesMatches; ///
57
+ return metaSubstitution;
127
58
  }
128
-
129
- return substitutionNonTerminalNodeMatches;
130
59
  }
@@ -1,5 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ import { first, second, third } from "./array";
4
+ import { METASTATEMENT_RULE_NAME } from "../ruleNames";
5
+ import { BRACKETED_CHILD_NODES_LENGTH, LEFT_BRACKET, RIGHT_BRACKET } from "../constants";
6
+
3
7
  export function matchNode(nodeA, nodeB) {
4
8
  let nodeMatches = false;
5
9
 
@@ -25,7 +29,7 @@ export function matchNode(nodeA, nodeB) {
25
29
  return nodeMatches;
26
30
  }
27
31
 
28
- function matchNodes(nodesA, nodesB) {
32
+ export function matchNodes(nodesA, nodesB) {
29
33
  let nodesMatch = false;
30
34
 
31
35
  const nodesALength = nodesA.length,
@@ -45,6 +49,79 @@ function matchNodes(nodesA, nodesB) {
45
49
  return nodesMatch;
46
50
  }
47
51
 
52
+ export function matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB) {
53
+ let bracketedNodeMatches = false;
54
+
55
+ if (!bracketedNodeMatches) {
56
+ const nonTerminalNodeMatches = matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
57
+
58
+ bracketedNodeMatches = nonTerminalNodeMatches; ///
59
+ }
60
+
61
+ if (!bracketedNodeMatches) {
62
+ const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
63
+ childNodesA = nonTerminalNodeAChildNodes, ///
64
+ bracketedChildNodeA = bracketedChildNodeFromChildNodes(childNodesA);
65
+
66
+ if (bracketedChildNodeA !== null) {
67
+ const nodeA = bracketedChildNodeA, ///
68
+ nodeB = nonTerminalNodeB, ///
69
+ nodeMatches = matchNode(nodeA, nodeB);
70
+
71
+ bracketedNodeMatches = nodeMatches; ///
72
+ }
73
+ }
74
+
75
+ if (!bracketedNodeMatches) {
76
+ const nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
77
+ childNodesB = nonTerminalNodeBChildNodes, ///
78
+ bracketedChildNodeB = bracketedChildNodeFromChildNodes(childNodesB);
79
+
80
+ if (bracketedChildNodeB !== null) {
81
+ const nodeB = bracketedChildNodeB, ///
82
+ nodeA = nonTerminalNodeA, ///
83
+ nodeMatches = matchNode(nodeA, nodeB);
84
+
85
+ bracketedNodeMatches = nodeMatches; ///
86
+ }
87
+ }
88
+
89
+ return bracketedNodeMatches;
90
+ }
91
+
92
+ export function bracketedChildNodeFromChildNodes(childNodes) {
93
+ let bracketedChildNode = null;
94
+
95
+ const childNodesLength = childNodes.length;
96
+
97
+ if (childNodesLength === BRACKETED_CHILD_NODES_LENGTH) {
98
+ const firstChildNode = first(childNodes),
99
+ thirdChildNode = third(childNodes),
100
+ secondChildNode = second(childNodes),
101
+ firstChildNodeTerminalNode = firstChildNode.isTerminalNode(),
102
+ thirdChildNodeTerminalNode = thirdChildNode.isTerminalNode(),
103
+ secondChildNodeNonTerminalNode = secondChildNode.isNonTerminalNode();
104
+
105
+ if (firstChildNodeTerminalNode && secondChildNodeNonTerminalNode && thirdChildNodeTerminalNode) {
106
+ const nonTerminalNode = secondChildNode, ///
107
+ firstTerminalNode = firstChildNode, ///
108
+ secondTerminalNode = thirdChildNode, ///
109
+ nonTerminalNodeRuleName = nonTerminalNode.getRuleName(),
110
+ firstTerminalNodeContent = firstTerminalNode.getContent(),
111
+ secondTerminalNodeContent = secondTerminalNode.getContent(),
112
+ firstTerminalNodeContentLeftBracket = (firstTerminalNodeContent === LEFT_BRACKET),
113
+ secondTerminalNodeContentRightBracket = (secondTerminalNodeContent === RIGHT_BRACKET),
114
+ nonTerminalNodeRuleNameMetastatementRuleName = (nonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
115
+
116
+ if (firstTerminalNodeContentLeftBracket && nonTerminalNodeRuleNameMetastatementRuleName && secondTerminalNodeContentRightBracket) {
117
+ bracketedChildNode = nonTerminalNode; ///
118
+ }
119
+ }
120
+ }
121
+
122
+ return bracketedChildNode;
123
+ }
124
+
48
125
  function matchTerminalNode(terminalNodeA, terminalNodeB) {
49
126
  const matches = terminalNodeA.match(terminalNodeB),
50
127
  terminalNodeMatches = matches; ///
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import { last } from "../utilities/array";
4
+
3
5
  export function createReleaseContext(dependency, dependentNames, context, callback) {
4
6
  const { releaseContextMap } = context,
5
7
  dependencyName = dependency.getName(),
@@ -25,9 +27,9 @@ export function createReleaseContext(dependency, dependentNames, context, callba
25
27
 
26
28
  releaseContextMap[releaseName] = releaseContext;
27
29
 
28
- if (releaseContext === null) {
29
- const { log } = context;
30
+ const { log } = context;
30
31
 
32
+ if (releaseContext === null) {
31
33
  log.error(`The '${releaseName}' package could not be created.`);
32
34
 
33
35
  callback(error);
@@ -35,6 +37,26 @@ export function createReleaseContext(dependency, dependentNames, context, callba
35
37
  return;
36
38
  }
37
39
 
40
+ const releaseMatchesDependency = checkReleaseMatchesDependency(dependency, dependentNames, releaseContext, context);
41
+
42
+ if (!releaseMatchesDependency) {
43
+ const version = releaseContext.getVersion(),
44
+ versionString = version.toString(),
45
+ lastDependentName = last(dependentNames),
46
+ dependentName = lastDependentName, ///
47
+ dependencyName = dependency.getName(),
48
+ shortenedVersion = dependency.getShortedVersion(),
49
+ shortenedVersionString = shortenedVersion.toString();
50
+
51
+ error = `Version mismatch: '${dependentName}' requires '${dependencyName}' to be version ${shortenedVersionString}.0 or higher but version ${versionString} has been supplied.`;
52
+
53
+ log.error(error);
54
+
55
+ callback(error);
56
+
57
+ return;
58
+ }
59
+
38
60
  createDependencyReleaseContexts(dependency, dependentNames, context, callback);
39
61
  }, context);
40
62
  }
@@ -107,6 +129,23 @@ function checkCyclicDependencyExists(dependency, dependentNames, context) {
107
129
  return cyclicDependencyExists;
108
130
  }
109
131
 
132
+ function checkReleaseMatchesDependency(dependency, dependentNames, releaseContext, context) {
133
+ let releaseMatchesDependency = true;
134
+
135
+ const entries = releaseContext.getEntries(),
136
+ shortenedVersion = dependency.getShortedVersion();
137
+
138
+ if (shortenedVersion !== null) {
139
+ const entriesMatchShortenedVersion = entries.matchShortenedVersion(shortenedVersion);
140
+
141
+ if (!entriesMatchShortenedVersion) {
142
+ releaseMatchesDependency = false;
143
+ }
144
+ }
145
+
146
+ return releaseMatchesDependency;
147
+ }
148
+
110
149
  function createDependencyReleaseContexts(dependency, dependentNames, context, callback) {
111
150
  const { releaseContextMap } = context,
112
151
  dependencyName = dependency.getName(),
@@ -14,14 +14,11 @@ const statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/s
14
14
  unqualifiedStatementNodesQuery = nodesQuery("/subproof/unqualifiedStatement")
15
15
 
16
16
  export default function verifyDerivation(derivationNode, proofContext) {
17
- let derivationVerified,
18
- derived;
17
+ let derivationVerified;
19
18
 
20
19
  proofContext.begin(derivationNode);
21
20
 
22
- derived = true;
23
-
24
- proofContext.setDerived(derived);
21
+ proofContext.setDerived();
25
22
 
26
23
  const derivationChildNodes = derivationChildNodesQuery(derivationNode);
27
24
 
@@ -33,9 +30,7 @@ export default function verifyDerivation(derivationNode, proofContext) {
33
30
  }
34
31
  });
35
32
 
36
- derived = false;
37
-
38
- proofContext.setDerived(derived);
33
+ proofContext.setDerived();
39
34
 
40
35
  derivationVerified ?
41
36
  proofContext.complete(derivationNode) :
@@ -14,14 +14,11 @@ const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMet
14
14
  unqualifiedMetastatementNodesQuery = nodesQuery("/metaSubproof/unqualifiedMetastatement")
15
15
 
16
16
  export default function verifyMetaDerivation(metaDerivationNode, metaproofContext) {
17
- let metaDerivationVerified,
18
- derived;
17
+ let metaDerivationVerified;
19
18
 
20
19
  metaproofContext.begin(metaDerivationNode);
21
20
 
22
- derived = true;
23
-
24
- metaproofContext.setDerived(derived);
21
+ metaproofContext.setDerived();
25
22
 
26
23
  const metaDerivationChildNodes = metaDerivationChildNodesQuery(metaDerivationNode);
27
24
 
@@ -33,9 +30,7 @@ export default function verifyMetaDerivation(metaDerivationNode, metaproofContex
33
30
  }
34
31
  });
35
32
 
36
- derived = false;
37
-
38
- metaproofContext.setDerived(derived);
33
+ metaproofContext.resetDerived();
39
34
 
40
35
  metaDerivationVerified ?
41
36
  metaproofContext.complete(metaDerivationNode) :