occam-verify-cli 0.0.526 → 0.0.527

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 (106) hide show
  1. package/lib/assertion/type.js +10 -40
  2. package/lib/axiom.js +7 -7
  3. package/lib/axiomLemmaTheoremConjecture.js +190 -0
  4. package/lib/conjecture.js +141 -0
  5. package/lib/consequence.js +3 -3
  6. package/lib/constants.js +4 -16
  7. package/lib/context/file.js +76 -39
  8. package/lib/context/metaproof.js +40 -10
  9. package/lib/context/proof.js +38 -105
  10. package/lib/context/release/directory.js +20 -1
  11. package/lib/context/release/file.js +27 -3
  12. package/lib/equality.js +78 -51
  13. package/lib/index.js +1 -13
  14. package/lib/kinds.js +5 -1
  15. package/lib/lemma.js +7 -7
  16. package/lib/matcher/metastatementForMetavariable.js +16 -19
  17. package/lib/matcher/statementForMetavariable.js +22 -20
  18. package/lib/matcher/{statementForVariable → termForVariable}/consequence.js +13 -13
  19. package/lib/matcher/{statementForVariable → termForVariable}/supposition.js +13 -13
  20. package/lib/matcher/termForVariable.js +198 -0
  21. package/lib/matcher.js +23 -64
  22. package/lib/mixins/file.js +62 -2
  23. package/lib/premise.js +4 -4
  24. package/lib/ruleNames.js +1 -9
  25. package/lib/step/proof.js +22 -1
  26. package/lib/substitution/statementForMetavariable.js +12 -8
  27. package/lib/substitution/termForVariable.js +86 -0
  28. package/lib/supposition.js +4 -4
  29. package/lib/theorem.js +7 -7
  30. package/lib/type.js +9 -2
  31. package/lib/utilities/string.js +3 -7
  32. package/lib/utilities/substitution.js +4 -5
  33. package/lib/variable.js +4 -38
  34. package/lib/verify/assertion/type.js +59 -36
  35. package/lib/verify/axiom.js +1 -2
  36. package/lib/verify/conjecture.js +56 -0
  37. package/lib/verify/declaration/topLevel.js +7 -3
  38. package/lib/verify/lemma.js +1 -2
  39. package/lib/verify/metastatement/qualified.js +1 -2
  40. package/lib/verify/metastatement/unqualified.js +1 -2
  41. package/lib/verify/rule.js +1 -2
  42. package/lib/verify/statement/qualified.js +39 -10
  43. package/lib/verify/statement/unqualified.js +1 -2
  44. package/lib/verify/statement.js +44 -47
  45. package/lib/verify/theorem.js +1 -2
  46. package/package.json +1 -1
  47. package/src/assertion/type.js +7 -32
  48. package/src/axiom.js +4 -4
  49. package/src/{axiomLemmaTheorem.js → axiomLemmaTheoremConjecture.js} +5 -5
  50. package/src/conjecture.js +13 -0
  51. package/src/consequence.js +2 -2
  52. package/src/constants.js +1 -4
  53. package/src/context/file.js +81 -37
  54. package/src/context/metaproof.js +42 -5
  55. package/src/context/proof.js +42 -41
  56. package/src/context/release/directory.js +24 -0
  57. package/src/context/release/file.js +34 -3
  58. package/src/equality.js +110 -61
  59. package/src/index.js +0 -3
  60. package/src/kinds.js +1 -0
  61. package/src/lemma.js +4 -4
  62. package/src/matcher/metastatementForMetavariable.js +22 -32
  63. package/src/matcher/statementForMetavariable.js +40 -34
  64. package/src/matcher/termForVariable/consequence.js +9 -0
  65. package/src/matcher/termForVariable/supposition.js +9 -0
  66. package/src/matcher/termForVariable.js +89 -0
  67. package/src/matcher.js +28 -22
  68. package/src/mixins/file.js +46 -1
  69. package/src/premise.js +4 -4
  70. package/src/ruleNames.js +0 -2
  71. package/src/step/proof.js +27 -0
  72. package/src/substitution/statementForMetavariable.js +17 -10
  73. package/src/substitution/termForVariable.js +64 -0
  74. package/src/supposition.js +3 -3
  75. package/src/theorem.js +4 -4
  76. package/src/type.js +14 -4
  77. package/src/utilities/string.js +4 -6
  78. package/src/utilities/substitution.js +6 -4
  79. package/src/variable.js +4 -37
  80. package/src/verify/assertion/type.js +70 -64
  81. package/src/verify/axiom.js +0 -1
  82. package/src/verify/conjecture.js +73 -0
  83. package/src/verify/declaration/topLevel.js +7 -0
  84. package/src/verify/lemma.js +0 -1
  85. package/src/verify/metastatement/qualified.js +0 -1
  86. package/src/verify/metastatement/unqualified.js +0 -1
  87. package/src/verify/rule.js +0 -1
  88. package/src/verify/statement/qualified.js +53 -13
  89. package/src/verify/statement/unqualified.js +0 -1
  90. package/src/verify/statement.js +46 -66
  91. package/src/verify/theorem.js +0 -1
  92. package/lib/axiomLemmaTheorem.js +0 -190
  93. package/lib/jsonTypes.js +0 -30
  94. package/lib/matcher/statementForVariable.js +0 -201
  95. package/lib/substitution/statementForVariable.js +0 -86
  96. package/lib/utilities/json.js +0 -187
  97. package/lib/utilities/version.js +0 -32
  98. package/lib/versionChanges.js +0 -34
  99. package/src/jsonTypes.js +0 -6
  100. package/src/matcher/statementForVariable/consequence.js +0 -9
  101. package/src/matcher/statementForVariable/supposition.js +0 -9
  102. package/src/matcher/statementForVariable.js +0 -99
  103. package/src/substitution/statementForVariable.js +0 -64
  104. package/src/utilities/json.js +0 -264
  105. package/src/utilities/version.js +0 -30
  106. package/src/versionChanges.js +0 -11
@@ -15,7 +15,6 @@ var _labels = /*#__PURE__*/ _interopRequireDefault(require("../verify/labels"));
15
15
  var _supposition = /*#__PURE__*/ _interopRequireDefault(require("./supposition"));
16
16
  var _consequence = /*#__PURE__*/ _interopRequireDefault(require("./consequence"));
17
17
  var _array = require("../utilities/array");
18
- var _string = require("../utilities/string");
19
18
  var _query = require("../utilities/query");
20
19
  function _interopRequireDefault(obj) {
21
20
  return obj && obj.__esModule ? obj : {
@@ -55,4 +54,4 @@ function verifyTheorem(theoremNode, fileContext) {
55
54
  return theoremVerified;
56
55
  }
57
56
 
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGhlb3JlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRoZW9yZW0gZnJvbSBcIi4uL3RoZW9yZW1cIjtcbmltcG9ydCB2ZXJpZnlQcm9vZiBmcm9tIFwiLi4vdmVyaWZ5L3Byb29mXCI7XG5pbXBvcnQgUHJvb2ZDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3Byb29mXCI7XG5pbXBvcnQgdmVyaWZ5TGFiZWxzIGZyb20gXCIuLi92ZXJpZnkvbGFiZWxzXCI7XG5pbXBvcnQgdmVyaWZ5U3VwcG9zaXRpb24gZnJvbSBcIi4vc3VwcG9zaXRpb25cIjtcbmltcG9ydCB2ZXJpZnlDb25zZXF1ZW5jZSBmcm9tIFwiLi9jb25zZXF1ZW5jZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVzQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBwcm9vZk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90aGVvcmVtL3Byb29mIVwiKSxcbiAgICAgIGxhYmVsTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvdGhlb3JlbS9sYWJlbFwiKSxcbiAgICAgIGNvbnNlcXVlbmNlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3RoZW9yZW0vY29uc2VxdWVuY2UhXCIpLFxuICAgICAgc3VwcG9zaXRpb25zTm9kZVF1ZXJ5ID0gbm9kZXNRdWVyeShcIi90aGVvcmVtL3N1cHBvc2l0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlUaGVvcmVtKHRoZW9yZW1Ob2RlLCBmaWxlQ29udGV4dCkge1xuICBsZXQgdGhlb3JlbVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgZmlsZUNvbnRleHQuYmVnaW4odGhlb3JlbU5vZGUpO1xuXG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBsYWJlbE5vZGVzUXVlcnkodGhlb3JlbU5vZGUpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBmaWxlQ29udGV4dC5ub2Rlc0FzU3RyaW5nKGxhYmVsTm9kZXMpLFxuICAgICAgICBwcm9vZkNvbnRleHQgPSBQcm9vZkNvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KTtcblxuICBmaWxlQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHtsYWJlbHNTdHJpbmd9JyB0aGVvcmVtLi4uYCk7XG5cbiAgY29uc3QgbGFiZWxzID0gW10sXG4gICAgICAgIGxhYmVsc1ZlcmlmaWVkID0gdmVyaWZ5TGFiZWxzKGxhYmVsTm9kZXMsIGxhYmVscywgZmlsZUNvbnRleHQpO1xuXG4gIGlmIChsYWJlbHNWZXJpZmllZCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IFtdLFxuICAgICAgICAgIHN1cHBvc2l0aW9uTm9kZXMgPSBzdXBwb3NpdGlvbnNOb2RlUXVlcnkodGhlb3JlbU5vZGUpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc1ZlcmlmaWVkID0gc3VwcG9zaXRpb25Ob2Rlcy5ldmVyeSgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvblZlcmlmaWVkID0gdmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb25Ob2RlLCBzdXBwb3NpdGlvbnMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBjb25zZXF1ZW5jZXMgPSBbXSxcbiAgICAgICAgICAgIGNvbnNlcXVlbmNlTm9kZSA9IGNvbnNlcXVlbmNlTm9kZVF1ZXJ5KHRoZW9yZW1Ob2RlKSxcbiAgICAgICAgICAgIGNvbnNlcXVlbmNlVmVyaWZpZWQgPSB2ZXJpZnlDb25zZXF1ZW5jZShjb25zZXF1ZW5jZU5vZGUsIGNvbnNlcXVlbmNlcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgaWYgKGNvbnNlcXVlbmNlVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgcHJvb2ZOb2RlID0gcHJvb2ZOb2RlUXVlcnkodGhlb3JlbU5vZGUpLFxuICAgICAgICAgICAgICBmaXJzdENvbnNlcXVlbmNlID0gZmlyc3QoY29uc2VxdWVuY2VzKSxcbiAgICAgICAgICAgICAgY29uc2VxdWVuY2UgPSBmaXJzdENvbnNlcXVlbmNlLCAvLy9cbiAgICAgICAgICAgICAgcHJvb2ZWZXJpZmllZCA9IHZlcmlmeVByb29mKHByb29mTm9kZSwgY29uc2VxdWVuY2UsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHByb29mVmVyaWZpZWQpIHtcbiAgICAgICAgICBjb25zdCB0aGVvcmVtID0gVGhlb3JlbS5mcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kQ29uc2VxdWVuY2UobGFiZWxzLCBzdXBwb3NpdGlvbnMsIGNvbnNlcXVlbmNlKTtcblxuICAgICAgICAgIGZpbGVDb250ZXh0LmFkZFRoZW9yZW0odGhlb3JlbSk7XG5cbiAgICAgICAgICB0aGVvcmVtVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoZW9yZW1WZXJpZmllZCkge1xuICAgIGZpbGVDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHtsYWJlbHNTdHJpbmd9JyB0aGVvcmVtLmApO1xuICB9XG5cbiAgdGhlb3JlbVZlcmlmaWVkID9cbiAgICBmaWxlQ29udGV4dC5jb21wbGV0ZSh0aGVvcmVtTm9kZSkgOlxuICAgICAgZmlsZUNvbnRleHQuY29tcGxldGUodGhlb3JlbU5vZGUpO1xuXG4gIHJldHVybiB0aGVvcmVtVmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5VGhlb3JlbSIsInByb29mTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGFiZWxOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsImNvbnNlcXVlbmNlTm9kZVF1ZXJ5Iiwic3VwcG9zaXRpb25zTm9kZVF1ZXJ5IiwidGhlb3JlbU5vZGUiLCJmaWxlQ29udGV4dCIsInRoZW9yZW1WZXJpZmllZCIsImJlZ2luIiwibGFiZWxOb2RlcyIsImxhYmVsc1N0cmluZyIsIm5vZGVzQXNTdHJpbmciLCJwcm9vZkNvbnRleHQiLCJQcm9vZkNvbnRleHQiLCJmcm9tRmlsZUNvbnRleHQiLCJkZWJ1ZyIsImxhYmVscyIsImxhYmVsc1ZlcmlmaWVkIiwidmVyaWZ5TGFiZWxzIiwic3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25Ob2RlcyIsInN1cHBvc2l0aW9uc1ZlcmlmaWVkIiwiZXZlcnkiLCJzdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvblZlcmlmaWVkIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJjb25zZXF1ZW5jZXMiLCJjb25zZXF1ZW5jZU5vZGUiLCJjb25zZXF1ZW5jZVZlcmlmaWVkIiwidmVyaWZ5Q29uc2VxdWVuY2UiLCJwcm9vZk5vZGUiLCJmaXJzdENvbnNlcXVlbmNlIiwiZmlyc3QiLCJjb25zZXF1ZW5jZSIsInByb29mVmVyaWZpZWQiLCJ2ZXJpZnlQcm9vZiIsInRoZW9yZW0iLCJUaGVvcmVtIiwiZnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZENvbnNlcXVlbmNlIiwiYWRkVGhlb3JlbSIsImluZm8iLCJjb21wbGV0ZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa0JBOzs7ZUFBd0JBOzs7NERBaEJKOzBEQUNJOzJEQUNDOzJEQUNBO2dFQUNLO2dFQUNBO3FCQUVSO3NCQUNRO3FCQUNROzs7Ozs7QUFFdEMsSUFBTUMsaUJBQWlCQyxJQUFBQSxnQkFBUyxFQUFDLG9CQUMzQkMsa0JBQWtCQyxJQUFBQSxpQkFBVSxFQUFDLG1CQUM3QkMsdUJBQXVCSCxJQUFBQSxnQkFBUyxFQUFDLDBCQUNqQ0ksd0JBQXdCRixJQUFBQSxpQkFBVSxFQUFDO0FBRTFCLFNBQVNKLGNBQWNPLFdBQVcsRUFBRUMsV0FBVyxFQUFFO0lBQzlELElBQUlDLGtCQUFrQixLQUFLO0lBRTNCRCxZQUFZRSxLQUFLLENBQUNIO0lBRWxCLElBQU1JLGFBQWFSLGdCQUFnQkksY0FDN0JLLGVBQWVKLFlBQVlLLGFBQWEsQ0FBQ0YsYUFDekNHLGVBQWVDLGVBQVksQ0FBQ0MsZUFBZSxDQUFDUjtJQUVsREEsWUFBWVMsS0FBSyxDQUFDLEFBQUMsa0JBQThCLE9BQWJMLGNBQWE7SUFFakQsSUFBTU0sU0FBUyxFQUFFLEVBQ1hDLGlCQUFpQkMsSUFBQUEsZUFBWSxFQUFDVCxZQUFZTyxRQUFRVjtJQUV4RCxJQUFJVyxnQkFBZ0I7UUFDbEIsSUFBTUUsZUFBZSxFQUFFLEVBQ2pCQyxtQkFBbUJoQixzQkFBc0JDLGNBQ3pDZ0IsdUJBQXVCRCxpQkFBaUJFLEtBQUssQ0FBQyxTQUFDQyxpQkFBb0I7WUFDakUsSUFBTUMsc0JBQXNCQyxJQUFBQSxvQkFBaUIsRUFBQ0YsaUJBQWlCSixjQUFjUDtZQUU3RSxJQUFJWSxxQkFBcUI7Z0JBQ3ZCLE9BQU8sSUFBSTtZQUNiLENBQUM7UUFDSDtRQUVOLElBQUlILHNCQUFzQjtZQUN4QixJQUFNSyxlQUFlLEVBQUUsRUFDakJDLGtCQUFrQnhCLHFCQUFxQkUsY0FDdkN1QixzQkFBc0JDLElBQUFBLG9CQUFpQixFQUFDRixpQkFBaUJELGNBQWNkO1lBRTdFLElBQUlnQixxQkFBcUI7Z0JBQ3ZCLElBQU1FLFlBQVkvQixlQUFlTSxjQUMzQjBCLG1CQUFtQkMsSUFBQUEsWUFBSyxFQUFDTixlQUN6Qk8sY0FBY0Ysa0JBQ2RHLGdCQUFnQkMsSUFBQUEsY0FBVyxFQUFDTCxXQUFXRyxhQUFhckI7Z0JBRTFELElBQUlzQixlQUFlO29CQUNqQixJQUFNRSxVQUFVQyxnQkFBTyxDQUFDQyxvQ0FBb0MsQ0FBQ3RCLFFBQVFHLGNBQWNjO29CQUVuRjNCLFlBQVlpQyxVQUFVLENBQUNIO29CQUV2QjdCLGtCQUFrQixJQUFJO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSUEsaUJBQWlCO1FBQ25CRCxZQUFZa0MsSUFBSSxDQUFDLEFBQUMsaUJBQTZCLE9BQWI5QixjQUFhO0lBQ2pELENBQUM7SUFFREgsa0JBQ0VELFlBQVltQyxRQUFRLENBQUNwQyxlQUNuQkMsWUFBWW1DLFFBQVEsQ0FBQ3BDLFlBQVk7SUFFckMsT0FBT0U7QUFDVCJ9
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGhlb3JlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRoZW9yZW0gZnJvbSBcIi4uL3RoZW9yZW1cIjtcbmltcG9ydCB2ZXJpZnlQcm9vZiBmcm9tIFwiLi4vdmVyaWZ5L3Byb29mXCI7XG5pbXBvcnQgUHJvb2ZDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L3Byb29mXCI7XG5pbXBvcnQgdmVyaWZ5TGFiZWxzIGZyb20gXCIuLi92ZXJpZnkvbGFiZWxzXCI7XG5pbXBvcnQgdmVyaWZ5U3VwcG9zaXRpb24gZnJvbSBcIi4vc3VwcG9zaXRpb25cIjtcbmltcG9ydCB2ZXJpZnlDb25zZXF1ZW5jZSBmcm9tIFwiLi9jb25zZXF1ZW5jZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgbm9kZXNRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgcHJvb2ZOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGhlb3JlbS9wcm9vZiFcIiksXG4gICAgICBsYWJlbE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL3RoZW9yZW0vbGFiZWxcIiksXG4gICAgICBjb25zZXF1ZW5jZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90aGVvcmVtL2NvbnNlcXVlbmNlIVwiKSxcbiAgICAgIHN1cHBvc2l0aW9uc05vZGVRdWVyeSA9IG5vZGVzUXVlcnkoXCIvdGhlb3JlbS9zdXBwb3NpdGlvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VGhlb3JlbSh0aGVvcmVtTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW1WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGZpbGVDb250ZXh0LmJlZ2luKHRoZW9yZW1Ob2RlKTtcblxuICBjb25zdCBsYWJlbE5vZGVzID0gbGFiZWxOb2Rlc1F1ZXJ5KHRoZW9yZW1Ob2RlKSxcbiAgICAgICAgbGFiZWxzU3RyaW5nID0gZmlsZUNvbnRleHQubm9kZXNBc1N0cmluZyhsYWJlbE5vZGVzKSxcbiAgICAgICAgcHJvb2ZDb250ZXh0ID0gUHJvb2ZDb250ZXh0LmZyb21GaWxlQ29udGV4dChmaWxlQ29udGV4dCk7XG5cbiAgZmlsZUNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7bGFiZWxzU3RyaW5nfScgdGhlb3JlbS4uLmApO1xuXG4gIGNvbnN0IGxhYmVscyA9IFtdLFxuICAgICAgICBsYWJlbHNWZXJpZmllZCA9IHZlcmlmeUxhYmVscyhsYWJlbE5vZGVzLCBsYWJlbHMsIGZpbGVDb250ZXh0KTtcblxuICBpZiAobGFiZWxzVmVyaWZpZWQpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBbXSxcbiAgICAgICAgICBzdXBwb3NpdGlvbk5vZGVzID0gc3VwcG9zaXRpb25zTm9kZVF1ZXJ5KHRoZW9yZW1Ob2RlKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNWZXJpZmllZCA9IHN1cHBvc2l0aW9uTm9kZXMuZXZlcnkoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25WZXJpZmllZCA9IHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uTm9kZSwgc3VwcG9zaXRpb25zLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZmllZCkge1xuICAgICAgY29uc3QgY29uc2VxdWVuY2VzID0gW10sXG4gICAgICAgICAgICBjb25zZXF1ZW5jZU5vZGUgPSBjb25zZXF1ZW5jZU5vZGVRdWVyeSh0aGVvcmVtTm9kZSksXG4gICAgICAgICAgICBjb25zZXF1ZW5jZVZlcmlmaWVkID0gdmVyaWZ5Q29uc2VxdWVuY2UoY29uc2VxdWVuY2VOb2RlLCBjb25zZXF1ZW5jZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIGlmIChjb25zZXF1ZW5jZVZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IHByb29mTm9kZSA9IHByb29mTm9kZVF1ZXJ5KHRoZW9yZW1Ob2RlKSxcbiAgICAgICAgICAgICAgZmlyc3RDb25zZXF1ZW5jZSA9IGZpcnN0KGNvbnNlcXVlbmNlcyksXG4gICAgICAgICAgICAgIGNvbnNlcXVlbmNlID0gZmlyc3RDb25zZXF1ZW5jZSwgLy8vXG4gICAgICAgICAgICAgIHByb29mVmVyaWZpZWQgPSB2ZXJpZnlQcm9vZihwcm9vZk5vZGUsIGNvbnNlcXVlbmNlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgIGlmIChwcm9vZlZlcmlmaWVkKSB7XG4gICAgICAgICAgY29uc3QgdGhlb3JlbSA9IFRoZW9yZW0uZnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZENvbnNlcXVlbmNlKGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW5jZSk7XG5cbiAgICAgICAgICBmaWxlQ29udGV4dC5hZGRUaGVvcmVtKHRoZW9yZW0pO1xuXG4gICAgICAgICAgdGhlb3JlbVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aGVvcmVtVmVyaWZpZWQpIHtcbiAgICBmaWxlQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7bGFiZWxzU3RyaW5nfScgdGhlb3JlbS5gKTtcbiAgfVxuXG4gIHRoZW9yZW1WZXJpZmllZCA/XG4gICAgZmlsZUNvbnRleHQuY29tcGxldGUodGhlb3JlbU5vZGUpIDpcbiAgICAgIGZpbGVDb250ZXh0LmNvbXBsZXRlKHRoZW9yZW1Ob2RlKTtcblxuICByZXR1cm4gdGhlb3JlbVZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVRoZW9yZW0iLCJwcm9vZk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsImxhYmVsTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJjb25zZXF1ZW5jZU5vZGVRdWVyeSIsInN1cHBvc2l0aW9uc05vZGVRdWVyeSIsInRoZW9yZW1Ob2RlIiwiZmlsZUNvbnRleHQiLCJ0aGVvcmVtVmVyaWZpZWQiLCJiZWdpbiIsImxhYmVsTm9kZXMiLCJsYWJlbHNTdHJpbmciLCJub2Rlc0FzU3RyaW5nIiwicHJvb2ZDb250ZXh0IiwiUHJvb2ZDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwiZGVidWciLCJsYWJlbHMiLCJsYWJlbHNWZXJpZmllZCIsInZlcmlmeUxhYmVscyIsInN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNWZXJpZmllZCIsImV2ZXJ5Iiwic3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25WZXJpZmllZCIsInZlcmlmeVN1cHBvc2l0aW9uIiwiY29uc2VxdWVuY2VzIiwiY29uc2VxdWVuY2VOb2RlIiwiY29uc2VxdWVuY2VWZXJpZmllZCIsInZlcmlmeUNvbnNlcXVlbmNlIiwicHJvb2ZOb2RlIiwiZmlyc3RDb25zZXF1ZW5jZSIsImZpcnN0IiwiY29uc2VxdWVuY2UiLCJwcm9vZlZlcmlmaWVkIiwidmVyaWZ5UHJvb2YiLCJ0aGVvcmVtIiwiVGhlb3JlbSIsImZyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmRDb25zZXF1ZW5jZSIsImFkZFRoZW9yZW0iLCJpbmZvIiwiY29tcGxldGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQXdCQTs7OzREQWZKOzBEQUNJOzJEQUNDOzJEQUNBO2dFQUNLO2dFQUNBO3FCQUVSO3FCQUNnQjs7Ozs7O0FBRXRDLElBQU1DLGlCQUFpQkMsSUFBQUEsZ0JBQVMsRUFBQyxvQkFDM0JDLGtCQUFrQkMsSUFBQUEsaUJBQVUsRUFBQyxtQkFDN0JDLHVCQUF1QkgsSUFBQUEsZ0JBQVMsRUFBQywwQkFDakNJLHdCQUF3QkYsSUFBQUEsaUJBQVUsRUFBQztBQUUxQixTQUFTSixjQUFjTyxXQUFXLEVBQUVDLFdBQVcsRUFBRTtJQUM5RCxJQUFJQyxrQkFBa0IsS0FBSztJQUUzQkQsWUFBWUUsS0FBSyxDQUFDSDtJQUVsQixJQUFNSSxhQUFhUixnQkFBZ0JJLGNBQzdCSyxlQUFlSixZQUFZSyxhQUFhLENBQUNGLGFBQ3pDRyxlQUFlQyxlQUFZLENBQUNDLGVBQWUsQ0FBQ1I7SUFFbERBLFlBQVlTLEtBQUssQ0FBQyxBQUFDLGtCQUE4QixPQUFiTCxjQUFhO0lBRWpELElBQU1NLFNBQVMsRUFBRSxFQUNYQyxpQkFBaUJDLElBQUFBLGVBQVksRUFBQ1QsWUFBWU8sUUFBUVY7SUFFeEQsSUFBSVcsZ0JBQWdCO1FBQ2xCLElBQU1FLGVBQWUsRUFBRSxFQUNqQkMsbUJBQW1CaEIsc0JBQXNCQyxjQUN6Q2dCLHVCQUF1QkQsaUJBQWlCRSxLQUFLLENBQUMsU0FBQ0MsaUJBQW9CO1lBQ2pFLElBQU1DLHNCQUFzQkMsSUFBQUEsb0JBQWlCLEVBQUNGLGlCQUFpQkosY0FBY1A7WUFFN0UsSUFBSVkscUJBQXFCO2dCQUN2QixPQUFPLElBQUk7WUFDYixDQUFDO1FBQ0g7UUFFTixJQUFJSCxzQkFBc0I7WUFDeEIsSUFBTUssZUFBZSxFQUFFLEVBQ2pCQyxrQkFBa0J4QixxQkFBcUJFLGNBQ3ZDdUIsc0JBQXNCQyxJQUFBQSxvQkFBaUIsRUFBQ0YsaUJBQWlCRCxjQUFjZDtZQUU3RSxJQUFJZ0IscUJBQXFCO2dCQUN2QixJQUFNRSxZQUFZL0IsZUFBZU0sY0FDM0IwQixtQkFBbUJDLElBQUFBLFlBQUssRUFBQ04sZUFDekJPLGNBQWNGLGtCQUNkRyxnQkFBZ0JDLElBQUFBLGNBQVcsRUFBQ0wsV0FBV0csYUFBYXJCO2dCQUUxRCxJQUFJc0IsZUFBZTtvQkFDakIsSUFBTUUsVUFBVUMsZ0JBQU8sQ0FBQ0Msb0NBQW9DLENBQUN0QixRQUFRRyxjQUFjYztvQkFFbkYzQixZQUFZaUMsVUFBVSxDQUFDSDtvQkFFdkI3QixrQkFBa0IsSUFBSTtnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUlBLGlCQUFpQjtRQUNuQkQsWUFBWWtDLElBQUksQ0FBQyxBQUFDLGlCQUE2QixPQUFiOUIsY0FBYTtJQUNqRCxDQUFDO0lBRURILGtCQUNFRCxZQUFZbUMsUUFBUSxDQUFDcEMsZUFDbkJDLFlBQVltQyxRQUFRLENBQUNwQyxZQUFZO0lBRXJDLE9BQU9FO0FBQ1QifQ==
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.526",
4
+ "version": "0.0.527",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -1,45 +1,20 @@
1
1
  "use strict";
2
2
 
3
- import Variable from "../variable";
4
-
5
3
  export default class TypeAssertion {
6
- constructor(type, termNode, variableName) {
7
- this.type = type;
8
- this.termNode = termNode;
9
- this.variableName = variableName;
10
- }
11
-
12
- getType() {
13
- return this.type;
14
- }
15
-
16
- getTermNode() {
17
- return this.termNode;
4
+ constructor(variable) {
5
+ this.variable = variable;
18
6
  }
19
7
 
20
- getVariableName() {
21
- return this.variableName;
8
+ getVariable() {
9
+ return this.variable;
22
10
  }
23
11
 
24
12
  assert(proofContext) {
25
- if (this.variableName !== null) {
26
- const name = this.variableName, ///
27
- variable = Variable.fromTypeAndName(this.type, name);
28
-
29
- proofContext.addVariable(variable);
30
- }
31
- }
32
-
33
- static fromTypeAndTermNode(type, termNode) {
34
- const variableName = null,
35
- typeAssertion = new TypeAssertion(type, termNode, variableName);
36
-
37
- return typeAssertion;
13
+ proofContext.addVariable(this.variable);
38
14
  }
39
15
 
40
- static fromTypeAndVariableName(type, variableName) {
41
- const termNode = null,
42
- typeAssertion = new TypeAssertion(type, termNode, variableName);
16
+ static fromVariable(variable) {
17
+ const typeAssertion = new TypeAssertion(variable);
43
18
 
44
19
  return typeAssertion;
45
20
  }
package/src/axiom.js CHANGED
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import AxiomLemmaTheorem from "./axiomLemmaTheorem";
3
+ import AxiomLemmaTheoremConjecture from "./axiomLemmaTheoremConjecture";
4
4
 
5
5
  import { AXIOM_KIND } from "./kinds";
6
6
 
7
- export default class Axiom extends AxiomLemmaTheorem {
7
+ export default class Axiom extends AxiomLemmaTheoremConjecture {
8
8
  static kind = AXIOM_KIND;
9
9
 
10
- static fromJSON(json, releaseContext) { return AxiomLemmaTheorem.fromJSON(Axiom, json, releaseContext); }
10
+ static fromJSON(json, releaseContext) { return AxiomLemmaTheoremConjecture.fromJSON(Axiom, json, releaseContext); }
11
11
 
12
- static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheorem.fromLabelsSuppositionsAndConsequence(Axiom, labels, suppositions, consequence); }
12
+ static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Axiom, labels, suppositions, consequence); }
13
13
  }
@@ -7,7 +7,7 @@ import Consequence from "./consequence";
7
7
  import { prune } from "./utilities/array";
8
8
  import { someSubArray } from "./utilities/array";
9
9
 
10
- export default class AxiomLemmaTheorem {
10
+ export default class AxiomLemmaTheoremConjecture {
11
11
  constructor(labels, suppositions, consequence) {
12
12
  this.labels = labels;
13
13
  this.suppositions = suppositions;
@@ -156,7 +156,7 @@ function matchSupposition(supposition, proofSteps, substitutions) {
156
156
  }
157
157
 
158
158
  function matchSuppositions(supposition, proofSteps, substitutions) {
159
- const suppositionsMatches = supposition.every((supposition) => {
159
+ const suppositionsMatch = supposition.every((supposition) => {
160
160
  const suppositionMatches = matchSupposition(supposition, proofSteps, substitutions);
161
161
 
162
162
  if (suppositionMatches) {
@@ -164,7 +164,7 @@ function matchSuppositions(supposition, proofSteps, substitutions) {
164
164
  }
165
165
  });
166
166
 
167
- return suppositionsMatches;
167
+ return suppositionsMatch;
168
168
  }
169
169
 
170
170
  function matchConsequence(consequence, statementNode, substitutions) {
@@ -178,9 +178,9 @@ function matchSuppositionsAndConsequence(suppositions, consequence, proofSteps,
178
178
  let suppositionsMatchConsequence = false;
179
179
 
180
180
  const substitutions = [],
181
- suppositionsMatches = matchSuppositions(suppositions, proofSteps, substitutions);
181
+ suppositionsMatch = matchSuppositions(suppositions, proofSteps, substitutions);
182
182
 
183
- if (suppositionsMatches) {
183
+ if (suppositionsMatch) {
184
184
  const consequenceMatches = matchConsequence(consequence, statementNode, substitutions);
185
185
 
186
186
  suppositionsMatchConsequence = consequenceMatches; ///
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import AxiomLemmaTheoremConjecture from "./axiomLemmaTheoremConjecture";
4
+
5
+ import { CONJECTURE_KIND } from "./kinds";
6
+
7
+ export default class Conjecture extends AxiomLemmaTheoremConjecture {
8
+ static kind = CONJECTURE_KIND;
9
+
10
+ static fromJSON(json, releaseContext) { return AxiomLemmaTheoremConjecture.fromJSON(Conjecture, json, releaseContext); }
11
+
12
+ static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Conjecture, labels, suppositions, consequence); }
13
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { nodeAsString } from "./utilities/string";
4
4
  import { statementNodeFromStatementString } from "./utilities/string";
5
- import { consequenceStatementForVariableMatcher } from "./matcher/statementForVariable/consequence";
5
+ import { consequenceTermForVariableMatcher } from "./matcher/termForVariable/consequence";
6
6
 
7
7
  export default class Consequence {
8
8
  constructor(statementNode) {
@@ -16,7 +16,7 @@ export default class Consequence {
16
16
  matchStatementNode(statementNode, substitutions) {
17
17
  const nonTerminalNodeA = this.statementNode, ///
18
18
  nonTerminalNodeB = statementNode, ///
19
- nonTerminalNodeMatches = consequenceStatementForVariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
19
+ nonTerminalNodeMatches = consequenceTermForVariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
20
20
  statementNodeMatches = nonTerminalNodeMatches; ///
21
21
 
22
22
  return statementNodeMatches;
package/src/constants.js CHANGED
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  export const COMMA = ',';
4
- export const STRING = "string";
5
- export const NUMBER = "number";
6
- export const BOOLEAN = "boolean";
7
4
  export const EMPTY_STRING = "";
8
5
  export const LEFT_BRACKET = "(";
9
6
  export const RIGHT_BRACKET = ")";
10
- export const EQUALS_CHARACTER = "=";
7
+ export const EQUALITY_DEPTH = 2;
11
8
  export const MAXIMUM_INDEXES_LENGTH = 10;
12
9
  export const MAXIMUM_PERMUTATION_LENGTH = 5;
13
10
  export const BRACKETED_CHILD_NODES_LENGTH = 3;
@@ -7,19 +7,23 @@ import { nodeAsString, nodesAsString } from "../utilities/string";
7
7
  import { leastLineIndexFromNodeAndTokens, greatestLineIndexFromNodeAndTokens } from "../utilities/tokens";
8
8
 
9
9
  export default class FileContext {
10
- constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, combinators, constructors) {
10
+ constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors, variables, metavariables) {
11
11
  this.releaseContext = releaseContext;
12
12
  this.filePath = filePath;
13
13
  this.tokens = tokens;
14
14
  this.node = node;
15
+
15
16
  this.types = types;
16
17
  this.rules = rules;
17
18
  this.axioms = axioms;
18
19
  this.lemmas = lemmas;
19
20
  this.theorems = theorems;
20
- this.variables = variables;
21
+ this.conjectures = conjectures;
21
22
  this.combinators = combinators;
22
23
  this.constructors = constructors;
24
+
25
+ this.variables = variables;
26
+ this.metavariables = metavariables;
23
27
  }
24
28
 
25
29
  getReleaseContext() {
@@ -38,8 +42,16 @@ export default class FileContext {
38
42
  return this.node;
39
43
  }
40
44
 
41
- getVariables() {
42
- return this.variables;
45
+ getProofSteps() {
46
+ const proofSteps = []; ///
47
+
48
+ return proofSteps;
49
+ }
50
+
51
+ getMetaproofSteps() {
52
+ const metaproofSteps = []; ///
53
+
54
+ return metaproofSteps;
43
55
  }
44
56
 
45
57
  getLabels(includeRelease = true) {
@@ -148,6 +160,20 @@ export default class FileContext {
148
160
  return theorems;
149
161
  }
150
162
 
163
+ getConjectures(includeRelease = true) {
164
+ const conjectures = [];
165
+
166
+ push(conjectures, this.conjectures);
167
+
168
+ if (includeRelease) {
169
+ const releaseContextConjectures = this.releaseContext.getConjectures();
170
+
171
+ push(conjectures, releaseContextConjectures);
172
+ }
173
+
174
+ return conjectures;
175
+ }
176
+
151
177
  getCombinators(includeRelease = true) {
152
178
  const combinators = [];
153
179
 
@@ -176,16 +202,12 @@ export default class FileContext {
176
202
  return constructors;
177
203
  }
178
204
 
179
- getProofSteps() {
180
- const proofSteps = []; ///
181
-
182
- return proofSteps;
205
+ getVariables() {
206
+ return this.variables;
183
207
  }
184
208
 
185
- getMetaproofSteps() {
186
- const metaproofSteps = []; ///
187
-
188
- return metaproofSteps;
209
+ getMetavariables() {
210
+ return this.metavariables;
189
211
  }
190
212
 
191
213
  findTypeByTypeName(typeName) {
@@ -271,18 +293,25 @@ export default class FileContext {
271
293
  return theorem;
272
294
  }
273
295
 
274
- findVariableByVariableName(variableName) {
275
- const name = variableName, ///
276
- variables = this.getVariables(),
277
- variable = variables.find((variable) => {
278
- const matches = variable.matchName(name);
296
+ findConjectureByReferenceName(referenceName) {
297
+ const labelName = referenceName, ///
298
+ conjectures = this.getConjectures(),
299
+ conjecture = conjectures.find((conjecture) => {
300
+ const conjectureMatchesLabelName = conjecture.matchLabelName(labelName);
279
301
 
280
- if (matches) {
302
+ if (conjectureMatchesLabelName) {
281
303
  return true;
282
304
  }
283
305
  }) || null;
284
306
 
285
- return variable;
307
+ return conjecture;
308
+ }
309
+
310
+ isLabelPresentByLabelName(labelName) {
311
+ const label = this.findLabelByLabelName(labelName),
312
+ labelPresent = (label !== null);
313
+
314
+ return labelPresent;
286
315
  }
287
316
 
288
317
  isTypePresentByTypeName(typeName) {
@@ -292,11 +321,30 @@ export default class FileContext {
292
321
  return typePresent;
293
322
  }
294
323
 
295
- isLabelPresentByLabelName(labelName) {
296
- const label = this.findLabelByLabelName(labelName),
297
- labelPresent = (label !== null);
324
+ nodeAsString(node) {
325
+ const string = nodeAsString(node, this.tokens);
298
326
 
299
- return labelPresent;
327
+ return string;
328
+ }
329
+
330
+ nodesAsString(node) {
331
+ const string = nodesAsString(node, this.tokens);
332
+
333
+ return string;
334
+ }
335
+
336
+ findVariableByVariableName(variableName) {
337
+ const name = variableName, ///
338
+ variables = this.getVariables(),
339
+ variable = variables.find((variable) => {
340
+ const matches = variable.matchName(name);
341
+
342
+ if (matches) {
343
+ return true;
344
+ }
345
+ }) || null;
346
+
347
+ return variable;
300
348
  }
301
349
 
302
350
  isVariablePresentByVariableName(variableName) {
@@ -344,18 +392,6 @@ export default class FileContext {
344
392
  this.constructors.push(constructor);
345
393
  }
346
394
 
347
- nodeAsString(node) {
348
- const string = nodeAsString(node, this.tokens);
349
-
350
- return string;
351
- }
352
-
353
- nodesAsString(node) {
354
- const string = nodesAsString(node, this.tokens);
355
-
356
- return string;
357
- }
358
-
359
395
  trace(message) { this.releaseContext.trace(message); }
360
396
 
361
397
  debug(message) { this.releaseContext.debug(message); }
@@ -422,6 +458,12 @@ export default class FileContext {
422
458
  json.push(theoremJSON);
423
459
  });
424
460
 
461
+ this.conjectures.forEach((conjecture) => {
462
+ const conjectureJSON = conjecture.toJSON(this.tokens);
463
+
464
+ json.push(conjectureJSON);
465
+ });
466
+
425
467
  this.combinators.forEach((combinator) => {
426
468
  const combinatorJSON = combinator.toJSON(this.tokens);
427
469
 
@@ -452,10 +494,12 @@ export default class FileContext {
452
494
  axioms = [],
453
495
  lemmas = [],
454
496
  theorems = [],
455
- variables = [],
497
+ conjectures = [],
456
498
  combinators = [],
457
499
  constructors = [],
458
- fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, combinators, constructors);
500
+ variables = [],
501
+ metavariables = [],
502
+ fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors, variables, metavariables);
459
503
 
460
504
  return fileContext;
461
505
  }
@@ -4,11 +4,12 @@ import fileMixins from "../mixins/file";
4
4
  import loggingMixins from "../mixins/logging";
5
5
  import callbacksMixins from "../mixins/callbacks";
6
6
 
7
- import { last } from "../utilities/array";
7
+ import { push, last } from "../utilities/array";
8
8
 
9
9
  class MetaproofContext {
10
- constructor(context, metaproofSteps) {
10
+ constructor(context, metavariables, metaproofSteps) {
11
11
  this.context = context;
12
+ this.metavariables = metavariables;
12
13
  this.metaproofSteps = metaproofSteps;
13
14
  }
14
15
 
@@ -16,6 +17,20 @@ class MetaproofContext {
16
17
  return this.context;
17
18
  }
18
19
 
20
+ getVariables() { return this.context.getVariables(); }
21
+
22
+ getMetavariables() {
23
+ const metavariables = [];
24
+
25
+ push(metavariables, this.metavariables);
26
+
27
+ const contextMetavariables = this.context.getMetavariables();
28
+
29
+ push(metavariables, contextMetavariables);
30
+
31
+ return metavariables;
32
+ }
33
+
19
34
  getMetaproofSteps() {
20
35
  let metaproofSteps = this.context.getMetaproofSteps();
21
36
 
@@ -39,6 +54,10 @@ class MetaproofContext {
39
54
  return lastMetaproofStep;
40
55
  }
41
56
 
57
+ addMetavariable(metavariable) {
58
+ this.metavariables.push(metavariable);
59
+ }
60
+
42
61
  addMetaproofStep(metaproofStep) {
43
62
  this.metaproofSteps.push(metaproofStep);
44
63
  }
@@ -61,9 +80,26 @@ class MetaproofContext {
61
80
  return metastatementMatches;
62
81
  }
63
82
 
64
- nodeAsString(node) { return this.context.nodeAsString(node); }
83
+ findMetavariableByMetavariableName(metavariableName) {
84
+ const name = metavariableName, ///
85
+ metavariables = this.getMetavariables(),
86
+ metavariable = metavariables.find((metavariable) => {
87
+ const matches = metavariable.matchName(name);
65
88
 
66
- nodesAsString(node) { return this.context.nodesAsString(node); }
89
+ if (matches) {
90
+ return true;
91
+ }
92
+ }) || null;
93
+
94
+ return metavariable;
95
+ }
96
+
97
+ isMetavariablePresentByVariableName(metavariableName) {
98
+ const metavariable = this.findMetavariableByMetavariableName(metavariableName),
99
+ metavariablePresent = (metavariable !== null);
100
+
101
+ return metavariablePresent;
102
+ }
67
103
 
68
104
  static fromFileContext(fileContext) {
69
105
  const context = fileContext, ///
@@ -75,9 +111,10 @@ class MetaproofContext {
75
111
 
76
112
  static fromMetaproofContext(metaproofContext) {
77
113
  const context = metaproofContext, ///
114
+ metavariables = [],
78
115
  metaproofSteps = [];
79
116
 
80
- metaproofContext = new MetaproofContext(context, metaproofSteps); ///
117
+ metaproofContext = new MetaproofContext(context, metavariables, metaproofSteps); ///
81
118
 
82
119
  return metaproofContext;
83
120
  }
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ import Equality from "../equality";
3
4
  import fileMixins from "../mixins/file";
4
5
  import loggingMixins from "../mixins/logging";
5
6
  import callbacksMixins from "../mixins/callbacks";
6
7
 
7
8
  import { push, last } from "../utilities/array";
9
+ import { MAXIMUM_INDEXES_LENGTH } from "../constants";
8
10
 
9
11
  class ProofContext {
10
12
  constructor(context, variables, proofSteps) {
@@ -17,6 +19,18 @@ class ProofContext {
17
19
  return this.context;
18
20
  }
19
21
 
22
+ getVariables() {
23
+ const variables = [];
24
+
25
+ push(variables, this.variables);
26
+
27
+ const contextVariables = this.context.getVariables();
28
+
29
+ push(variables, contextVariables);
30
+
31
+ return variables;
32
+ }
33
+
20
34
  getProofSteps() {
21
35
  let proofSteps = this.context.getProofSteps();
22
36
 
@@ -28,34 +42,34 @@ class ProofContext {
28
42
  return proofSteps;
29
43
  }
30
44
 
31
- getTypes() { return this.context.getTypes(); }
45
+ getLastProofStep() {
46
+ let lastProofStep = null;
32
47
 
33
- getAxioms() { return this.context.getAxioms(); }
48
+ const proofStepsLength = this.proofSteps.length;
34
49
 
35
- getLemmas() { return this.context.getLemmas(); }
50
+ if (proofStepsLength > 0) {
51
+ lastProofStep = last(this.proofSteps);
52
+ }
36
53
 
37
- getTheorems() { return this.context.getTheorems(); }
54
+ return lastProofStep;
55
+ }
38
56
 
39
- getCombinators() { return this.context.getCombinators(); }
57
+ getMetavariables() { return this.context.getMetavariables(); }
40
58
 
41
- getConstructors() { return this.context.getConstructors(); }
59
+ getEqualities() {
60
+ const equalities = [],
61
+ start = -MAXIMUM_INDEXES_LENGTH, ///
62
+ proofSteps = this.proofSteps.slice(start); ///
42
63
 
43
- getVariables() {
44
- const variables = [];
64
+ proofSteps.forEach((proofStep) => {
65
+ const equality = Equality.fromProofStep(proofStep);
45
66
 
46
- push(variables, this.variables);
47
-
48
- const contextVariables = this.context.getVariables();
49
-
50
- push(variables, contextVariables);
51
-
52
- return variables;
53
- }
54
-
55
- getLastProofStep() {
56
- const lastProofStep = last(this.proofSteps);
67
+ if (equality !== null) {
68
+ equalities.push(equality);
69
+ }
70
+ });
57
71
 
58
- return lastProofStep;
72
+ return equalities;
59
73
  }
60
74
 
61
75
  addVariable(variable) {
@@ -100,31 +114,11 @@ class ProofContext {
100
114
 
101
115
  isVariablePresentByVariableName(variableName) {
102
116
  const variable = this.findVariableByVariableName(variableName),
103
- variablePresent = (variable !== null);
117
+ variablePresent = (variable !== null);
104
118
 
105
119
  return variablePresent;
106
120
  }
107
121
 
108
- findTypeByTypeName(typeName) { return this.context.findTypeByTypeName(typeName); }
109
-
110
- findLabelByTypeName(labelName) { return this.context.findLabelByTypeName(labelName); }
111
-
112
- findRuleByReferenceName(referenceName) { return this.context.findRuleByReferenceName(referenceName); }
113
-
114
- findAxiomByReferenceName(referenceName) { return this.context.findAxiomByReferenceName(referenceName); }
115
-
116
- findLemmaByReferenceName(referenceName) { return this.context.findLemmaByReferenceName(referenceName); }
117
-
118
- findTheoremByReferenceName(referenceName) { return this.context.findTheoremByReferenceName(referenceName); }
119
-
120
- isLabelPresentByLabelName(labelName) { return this.context.isLabelPresentByLabelName(labelName); }
121
-
122
- isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
123
-
124
- nodeAsString(node) { return this.context.nodeAsString(node); }
125
-
126
- nodesAsString(node) { return this.context.nodesAsString(node); }
127
-
128
122
  static fromFileContext(fileContext) {
129
123
  const context = fileContext, ///
130
124
  variables = [],
@@ -150,3 +144,10 @@ Object.assign(ProofContext.prototype, loggingMixins);
150
144
  Object.assign(ProofContext.prototype, callbacksMixins);
151
145
 
152
146
  export default ProofContext;
147
+
148
+ function equalitiesFromProofSteps(proofSteps, context) {
149
+ let equalities = [];
150
+
151
+
152
+ return equalities;
153
+ }
@@ -149,6 +149,30 @@ export default class DirectoryReleaseContext extends ReleaseContext {
149
149
  return theorems;
150
150
  }
151
151
 
152
+ getConjectures(includeDependencies = true) {
153
+ const conjectures = [];
154
+
155
+ this.fileContexts.forEach((fileContext) => {
156
+ const includeRelease = false,
157
+ fileContextConjectures = fileContext.getConjectures(includeRelease);
158
+
159
+ push(conjectures, fileContextConjectures);
160
+ });
161
+
162
+ if (includeDependencies) {
163
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
164
+
165
+ dependencyReleaseContexts.forEach((releaseContext) => {
166
+ const includeDependencies = false,
167
+ releaseContextConjectures = releaseContext.getConjectures(includeDependencies);
168
+
169
+ push(conjectures, releaseContextConjectures);
170
+ });
171
+ }
172
+
173
+ return conjectures;
174
+ }
175
+
152
176
  getCombinators(includeDependencies = true) {
153
177
  const combinators = [];
154
178