occam-verify-cli 0.0.479 → 0.0.481
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.
- package/lib/conclusion.js +21 -20
- package/lib/constants.js +5 -1
- package/lib/equality.js +10 -13
- package/lib/metaSubstitution.js +26 -24
- package/lib/premise.js +21 -16
- package/lib/substitution.js +27 -25
- package/lib/utilities/node.js +16 -15
- package/lib/verify/statement.js +14 -16
- package/lib/verify/statementAsEquality.js +139 -0
- package/lib/verify/statementTypeAssertion.js +82 -0
- package/package.json +1 -1
- package/src/conclusion.js +35 -41
- package/src/constants.js +1 -0
- package/src/equality.js +14 -16
- package/src/metaSubstitution.js +33 -29
- package/src/premise.js +24 -26
- package/src/substitution.js +34 -30
- package/src/utilities/node.js +13 -13
- package/src/verify/statement.js +15 -19
- package/src/verify/statementAsEquality.js +146 -0
- package/src/verify/{assertion/type.js → statementTypeAssertion.js} +35 -29
- package/lib/verify/assertion/type.js +0 -79
- package/lib/verify/equality.js +0 -133
- package/src/verify/equality.js +0 -136
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return verifyTypeAssertion;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _array = require("../../utilities/array");
|
|
12
|
-
var _string = require("../../utilities/string");
|
|
13
|
-
var _query = require("../../utilities/query");
|
|
14
|
-
var _term = require("../../verify/term");
|
|
15
|
-
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../../variable"));
|
|
16
|
-
function _interopRequireDefault(obj) {
|
|
17
|
-
return obj && obj.__esModule ? obj : {
|
|
18
|
-
default: obj
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var termNodeQuery = (0, _query.nodeQuery)("/typeAssertion/term"), typeNodeQuery = (0, _query.nodeQuery)("/typeAssertion/type");
|
|
22
|
-
function verifyTypeAssertion(typeAssertionNode, proofContext) {
|
|
23
|
-
var typeAssertionVerified = false;
|
|
24
|
-
proofContext.begin(typeAssertionNode);
|
|
25
|
-
var typeAssertionString = (0, _string.nodeAsString)(typeAssertionNode);
|
|
26
|
-
proofContext.debug("Verifying the '".concat(typeAssertionString, "' type assertion..."));
|
|
27
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
28
|
-
if (!typePresent) {
|
|
29
|
-
proofContext.error("The ".concat(typeName, " type is not present."));
|
|
30
|
-
} else {
|
|
31
|
-
var context = proofContext, termNode = termNodeQuery(typeAssertionNode), variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
32
|
-
if (termVerifiedAsVariable) {
|
|
33
|
-
var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, proofContext);
|
|
34
|
-
typeAssertionVerified = variableTypeAssertionVerified; ///
|
|
35
|
-
} else {
|
|
36
|
-
var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, proofContext);
|
|
37
|
-
typeAssertionVerified = termTypeAssertionVerified; ///
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
if (typeAssertionVerified) {
|
|
41
|
-
proofContext.info("Verified the '".concat(typeAssertionString, "' type assertion."));
|
|
42
|
-
}
|
|
43
|
-
typeAssertionVerified ? proofContext.complete(typeAssertionNode) : proofContext.halt(typeAssertionNode);
|
|
44
|
-
return typeAssertionVerified;
|
|
45
|
-
}
|
|
46
|
-
function verifyTermTypeAssertion(typeAssertionNode, proofContext) {
|
|
47
|
-
var termTypeAssertionVerified = false;
|
|
48
|
-
var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
|
|
49
|
-
if (termVerifiedAgainstConstructors) {
|
|
50
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstType = (0, _array.first)(types), termType = firstType, assertedTypeEqualToOrSubTypeOfTermType = assertedType.isEqualToOrSubTypeOf(termType);
|
|
51
|
-
if (!assertedTypeEqualToOrSubTypeOfTermType) {
|
|
52
|
-
var termString = (0, _string.nodeAsString)(termNode);
|
|
53
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
|
|
54
|
-
} else {
|
|
55
|
-
termTypeAssertionVerified = true;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return termTypeAssertionVerified;
|
|
59
|
-
}
|
|
60
|
-
function verifyVariableTypeAssertion(typeAssertionNode, proofContext) {
|
|
61
|
-
var variableTypeAssertionVerified = false;
|
|
62
|
-
var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode);
|
|
63
|
-
(0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
64
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstVariable = (0, _array.first)(variables), variable = firstVariable, variableName = variable.getName(), variableType = variable.getType();
|
|
65
|
-
var assertedTypeEqualToOrSubTypeOfVariableType = variableType === null ? true : assertedType.isEqualToOrSubTypeOf(variableType);
|
|
66
|
-
if (!assertedTypeEqualToOrSubTypeOfVariableType) {
|
|
67
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
|
|
68
|
-
} else {
|
|
69
|
-
var derived = proofContext.isDerived();
|
|
70
|
-
if (!derived) {
|
|
71
|
-
var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
|
|
72
|
-
proofContext.addVariable(variable1);
|
|
73
|
-
}
|
|
74
|
-
variableTypeAssertionVerified = true;
|
|
75
|
-
}
|
|
76
|
-
return variableTypeAssertionVerified;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvYXNzZXJ0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgdHlwZU5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyB2ZXJpZnlUZXJtQXNWYXJpYWJsZSwgdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnMgfSBmcm9tIFwiLi4vLi4vdmVyaWZ5L3Rlcm1cIjtcbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vLi4vdmFyaWFibGVcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3Rlcm1cIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVBc3NlcnRpb24vdHlwZVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBwcm9vZkNvbnRleHQuYmVnaW4odHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSBub2RlQXNTdHJpbmcodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIHByb29mQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgdHlwZVByZXNlbnQgPSBwcm9vZkNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSAke3R5cGVOYW1lfSB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1WZXJpZmllZEFzVmFyaWFibGUpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VGVybVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7ICAvLy9cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZUFzc2VydGlvblZlcmlmaWVkKSB7XG4gICAgcHJvb2ZDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZSh0eXBlQXNzZXJ0aW9uTm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgICAgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgIHRlcm1UeXBlID0gZmlyc3RUeXBlLFxuICAgICAgICAgIGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlID0gYXNzZXJ0ZWRUeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHRlcm1UeXBlKTtcblxuICAgIGlmICghYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVGVybVR5cGUpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpO1xuXG4gICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSBhc3NlcnRlZCB0eXBlIGlzIG5vdCBlcXVhbCB0byBvciBhIHN1Yi10eXBlIG9mIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0eXBlLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGV4dCA9IHByb29mQ29udGV4dCwgLy8vXG4gICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICBhc3NlcnRlZFR5cGVOYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgYXNzZXJ0ZWRUeXBlID0gcHJvb2ZDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShhc3NlcnRlZFR5cGVOYW1lKSxcbiAgICAgICAgZmlyc3RWYXJpYWJsZSA9IGZpcnN0KHZhcmlhYmxlcyksXG4gICAgICAgIHZhcmlhYmxlID0gZmlyc3RWYXJpYWJsZSwgLy8vXG4gICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgdmFyaWFibGVUeXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gIGNvbnN0IGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSA9ICh2YXJpYWJsZVR5cGUgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRlZFR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodmFyaWFibGVUeXBlKTtcblxuICBpZiAoIWFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSkge1xuICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlIGFzc2VydGVkIHR5cGUgaXMgbm90IGVxdWFsIHRvIG9yIGEgc3ViLXR5cGUgb2YgdGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlIHR5cGUuYCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgY29uc3QgdHlwZSA9IGFzc2VydGVkVHlwZSwgIC8vL1xuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVHlwZUFuZE5hbWUodHlwZSwgbmFtZSk7XG5cbiAgICAgIHByb29mQ29udGV4dC5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7XG4gICAgfVxuXG4gICAgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVR5cGVBc3NlcnRpb24iLCJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsInR5cGVBc3NlcnRpb25Ob2RlIiwicHJvb2ZDb250ZXh0IiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwiYmVnaW4iLCJ0eXBlQXNzZXJ0aW9uU3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwiZXJyb3IiLCJjb250ZXh0IiwidGVybU5vZGUiLCJ2YXJpYWJsZXMiLCJ0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlIiwidmVyaWZ5VGVybUFzVmFyaWFibGUiLCJ2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbiIsInRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbiIsImluZm8iLCJjb21wbGV0ZSIsImhhbHQiLCJ0eXBlcyIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyIsImFzc2VydGVkVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInRlcm1UeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVGVybVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsInRlcm1TdHJpbmciLCJmaXJzdFZhcmlhYmxlIiwidmFyaWFibGUiLCJ2YXJpYWJsZU5hbWUiLCJnZXROYW1lIiwidmFyaWFibGVUeXBlIiwiZ2V0VHlwZSIsImFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ0eXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiYWRkVmFyaWFibGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBd0JBOzs7cUJBVEY7c0JBQ087cUJBQ21CO29CQUNvQjs2REFDL0M7Ozs7OztBQUVyQixJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUM7QUFFakIsU0FBU0Ysb0JBQW9CSSxpQkFBaUIsRUFBRUMsWUFBWSxFQUFFO0lBQzNFLElBQUlDLHdCQUF3QixLQUFLO0lBRWpDRCxhQUFhRSxLQUFLLENBQUNIO0lBRW5CLElBQU1JLHNCQUFzQkMsSUFBQUEsb0JBQVksRUFBQ0w7SUFFekNDLGFBQWFLLEtBQUssQ0FBQyxBQUFDLGtCQUFxQyxPQUFwQkYscUJBQW9CO0lBRXpELElBQU1HLFdBQVdSLGNBQWNDLG9CQUN6QlEsV0FBV0MsSUFBQUEsMkJBQW9CLEVBQUNGLFdBQ2hDRyxjQUFjVCxhQUFhVSx1QkFBdUIsQ0FBQ0g7SUFFekQsSUFBSSxDQUFDRSxhQUFhO1FBQ2hCVCxhQUFhVyxLQUFLLENBQUMsQUFBQyxPQUFlLE9BQVRKLFVBQVM7SUFDckMsT0FBTztRQUNMLElBQU1LLFVBQVVaLGNBQ1ZhLFdBQVdqQixjQUFjRyxvQkFDekJlLFlBQVksRUFBRSxFQUNkQyx5QkFBeUJDLElBQUFBLDBCQUFvQixFQUFDSCxVQUFVQyxXQUFXRjtRQUV6RSxJQUFJRyx3QkFBd0I7WUFDMUIsSUFBTUUsZ0NBQWdDQyw0QkFBNEJuQixtQkFBbUJDO1lBRXJGQyx3QkFBd0JnQiwrQkFBZ0MsR0FBRztRQUM3RCxPQUFPO1lBQ0wsSUFBTUUsNEJBQTRCQyx3QkFBd0JyQixtQkFBbUJDO1lBRTdFQyx3QkFBd0JrQiwyQkFBNEIsR0FBRztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUlsQix1QkFBdUI7UUFDekJELGFBQWFxQixJQUFJLENBQUMsQUFBQyxpQkFBb0MsT0FBcEJsQixxQkFBb0I7SUFDekQsQ0FBQztJQUVERix3QkFDRUQsYUFBYXNCLFFBQVEsQ0FBQ3ZCLHFCQUNwQkMsYUFBYXVCLElBQUksQ0FBQ3hCLGtCQUFrQjtJQUV4QyxPQUFPRTtBQUNUO0FBRUEsU0FBU21CLHdCQUF3QnJCLGlCQUFpQixFQUFFQyxZQUFZLEVBQUU7SUFDaEUsSUFBSW1CLDRCQUE0QixLQUFLO0lBRXJDLElBQU1LLFFBQVEsRUFBRSxFQUNWWixVQUFVWixjQUNWYSxXQUFXakIsY0FBY0csb0JBQ3pCMEIsa0NBQWtDQyxJQUFBQSxtQ0FBNkIsRUFBQ2IsVUFBVVcsT0FBT1o7SUFFdkYsSUFBSWEsaUNBQWlDO1FBQ25DLElBQU1uQixXQUFXUixjQUFjQyxvQkFDekJRLFdBQVdDLElBQUFBLDJCQUFvQixFQUFDRixXQUNoQ3FCLG1CQUFtQnBCLFVBQ25CcUIsZUFBZTVCLGFBQWE2QixrQkFBa0IsQ0FBQ0YsbUJBQy9DRyxZQUFZQyxJQUFBQSxZQUFLLEVBQUNQLFFBQ2xCUSxXQUFXRixXQUNYRyx5Q0FBeUNMLGFBQWFNLG9CQUFvQixDQUFDRjtRQUVqRixJQUFJLENBQUNDLHdDQUF3QztZQUMzQyxJQUFNRSxhQUFhL0IsSUFBQUEsb0JBQVksRUFBQ1M7WUFFaENiLGFBQWFXLEtBQUssQ0FBQyxBQUFDLDJEQUFxRSxPQUFYd0IsWUFBVztRQUMzRixPQUFPO1lBQ0xoQiw0QkFBNEIsSUFBSTtRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU9BO0FBQ1Q7QUFFQSxTQUFTRCw0QkFBNEJuQixpQkFBaUIsRUFBRUMsWUFBWSxFQUFFO0lBQ3BFLElBQUlpQixnQ0FBZ0MsS0FBSztJQUV6QyxJQUFNTCxVQUFVWixjQUNWYyxZQUFZLEVBQUUsRUFDZEQsV0FBV2pCLGNBQWNHO0lBRS9CaUIsSUFBQUEsMEJBQW9CLEVBQUNILFVBQVVDLFdBQVdGO0lBRTFDLElBQU1OLFdBQVdSLGNBQWNDLG9CQUN6QlEsV0FBV0MsSUFBQUEsMkJBQW9CLEVBQUNGLFdBQ2hDcUIsbUJBQW1CcEIsVUFDbkJxQixlQUFlNUIsYUFBYTZCLGtCQUFrQixDQUFDRixtQkFDL0NTLGdCQUFnQkwsSUFBQUEsWUFBSyxFQUFDakIsWUFDdEJ1QixXQUFXRCxlQUNYRSxlQUFlRCxTQUFTRSxPQUFPLElBQy9CQyxlQUFlSCxTQUFTSSxPQUFPO0lBRXJDLElBQU1DLDZDQUE2QyxBQUFDRixpQkFBaUIsSUFBSSxHQUNuQixJQUFJLEdBQ0ZaLGFBQWFNLG9CQUFvQixDQUFDTSxhQUFhO0lBRXZHLElBQUksQ0FBQ0UsNENBQTRDO1FBQy9DMUMsYUFBYVcsS0FBSyxDQUFDLEFBQUMsMkRBQXVFLE9BQWIyQixjQUFhO0lBQzdGLE9BQU87UUFDTCxJQUFNSyxVQUFVM0MsYUFBYTRDLFNBQVM7UUFFdEMsSUFBSSxDQUFDRCxTQUFTO1lBQ1osSUFBTUUsT0FBT2pCLGNBQ1BrQixPQUFPUixjQUNQRCxZQUFXVSxpQkFBUSxDQUFDQyxlQUFlLENBQUNILE1BQU1DO1lBRWhEOUMsYUFBYWlELFdBQVcsQ0FBQ1o7UUFDM0IsQ0FBQztRQUVEcEIsZ0NBQWdDLElBQUk7SUFDdEMsQ0FBQztJQUVELE9BQU9BO0FBQ1QifQ==
|
package/lib/verify/equality.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return verifyEquality;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _equality = /*#__PURE__*/ _interopRequireDefault(require("../equality"));
|
|
12
|
-
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
|
|
13
|
-
var _term = /*#__PURE__*/ _interopRequireWildcard(require("../verify/term"));
|
|
14
|
-
var _query = require("../utilities/query");
|
|
15
|
-
var _string = require("../utilities/string");
|
|
16
|
-
var _array = require("../utilities/array");
|
|
17
|
-
var _constants = require("../constants");
|
|
18
|
-
function _interopRequireDefault(obj) {
|
|
19
|
-
return obj && obj.__esModule ? obj : {
|
|
20
|
-
default: obj
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
24
|
-
if (typeof WeakMap !== "function") return null;
|
|
25
|
-
var cacheBabelInterop = new WeakMap();
|
|
26
|
-
var cacheNodeInterop = new WeakMap();
|
|
27
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
28
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
29
|
-
})(nodeInterop);
|
|
30
|
-
}
|
|
31
|
-
function _interopRequireWildcard(obj, nodeInterop) {
|
|
32
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
33
|
-
return obj;
|
|
34
|
-
}
|
|
35
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
36
|
-
return {
|
|
37
|
-
default: obj
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
41
|
-
if (cache && cache.has(obj)) {
|
|
42
|
-
return cache.get(obj);
|
|
43
|
-
}
|
|
44
|
-
var newObj = {};
|
|
45
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
46
|
-
for(var key in obj){
|
|
47
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
48
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
49
|
-
if (desc && (desc.get || desc.set)) {
|
|
50
|
-
Object.defineProperty(newObj, key, desc);
|
|
51
|
-
} else {
|
|
52
|
-
newObj[key] = obj[key];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
newObj.default = obj;
|
|
57
|
-
if (cache) {
|
|
58
|
-
cache.set(obj, newObj);
|
|
59
|
-
}
|
|
60
|
-
return newObj;
|
|
61
|
-
}
|
|
62
|
-
var leftTermNodeQuery = (0, _query.nodeQuery)("/equality/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/equality/term[1]");
|
|
63
|
-
function verifyEquality(equalityNode, proofContext) {
|
|
64
|
-
var equalityVerified = false;
|
|
65
|
-
proofContext.begin(equalityNode);
|
|
66
|
-
var equalityString = (0, _string.nodeAsString)(equalityNode);
|
|
67
|
-
proofContext.debug("Verifying the '".concat(equalityString, "' equality..."));
|
|
68
|
-
var types = [], context = proofContext, leftTermNode = leftTermNodeQuery(equalityNode), rightTermNode = rightTermNodeQuery(equalityNode), leftTermVerified = (0, _term.default)(leftTermNode, types, context), rightTermVerified = (0, _term.default)(rightTermNode, types, context);
|
|
69
|
-
if (leftTermVerified && rightTermVerified) {
|
|
70
|
-
var firstType = (0, _array.first)(types), secondType = (0, _array.second)(types), leftType = firstType, rightType = secondType, leftTermString = (0, _string.nodeAsString)(leftTermNode), rightTermString = (0, _string.nodeAsString)(rightTermNode);
|
|
71
|
-
if (leftType === null && rightType === null) {
|
|
72
|
-
proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms are both undefined and therefore the terms cannot be equated."));
|
|
73
|
-
} else if (rightType === null) {
|
|
74
|
-
var type = leftType, termNode = rightTermNode, variable = addVariable(type, termNode, proofContext);
|
|
75
|
-
if (variable !== null) {
|
|
76
|
-
var leftTypeName = leftType.getName();
|
|
77
|
-
proofContext.info("The '".concat(rightTermString, "' variable has been given the '").concat(leftTypeName, "' type."));
|
|
78
|
-
equalityVerified = true;
|
|
79
|
-
}
|
|
80
|
-
} else if (leftType === null) {
|
|
81
|
-
var type1 = rightType, termNode1 = leftType, variable1 = addVariable(type1, termNode1, proofContext);
|
|
82
|
-
if (variable1 !== null) {
|
|
83
|
-
var rightTypeName = rightType.getName();
|
|
84
|
-
proofContext.info("The '".concat(rightTermString, "' variable has been given the '").concat(rightTypeName, "' type."));
|
|
85
|
-
equalityVerified = true;
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
var leftTypeMatchesRightType = leftType.match(rightType);
|
|
89
|
-
if (!leftTypeMatchesRightType) {
|
|
90
|
-
proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms do not match and therefore the terms cannot be equated."));
|
|
91
|
-
} else {
|
|
92
|
-
var derived = proofContext.isDerived();
|
|
93
|
-
if (!derived) {
|
|
94
|
-
equalityVerified = true;
|
|
95
|
-
} else {
|
|
96
|
-
var equality = _equality.default.fromEqualityNode(equalityNode), proofSteps = proofContext.getProofSteps(), equalities = equalitiesFromProofSteps(proofSteps), equalityEquates = equality.equate(equalities, proofContext);
|
|
97
|
-
equalityVerified = equalityEquates; ///
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (equalityVerified) {
|
|
103
|
-
proofContext.info("Verified the '".concat(equalityString, "' equality."));
|
|
104
|
-
}
|
|
105
|
-
equalityVerified ? proofContext.complete(equalityNode) : proofContext.halt(equalityNode);
|
|
106
|
-
return equalityVerified;
|
|
107
|
-
}
|
|
108
|
-
function equalitiesFromProofSteps(proofSteps) {
|
|
109
|
-
var start = -_constants.MAXIMUM_INDEXES_LENGTH; ///
|
|
110
|
-
proofSteps = proofSteps.slice(start); ///
|
|
111
|
-
var equalities = proofSteps.reduce(function(equalities, proofStep, index) {
|
|
112
|
-
var equality = _equality.default.fromProofStep(proofStep);
|
|
113
|
-
if (equality !== null) {
|
|
114
|
-
equalities.push(equality);
|
|
115
|
-
}
|
|
116
|
-
return equalities;
|
|
117
|
-
}, []);
|
|
118
|
-
return equalities;
|
|
119
|
-
}
|
|
120
|
-
function addVariable(type, termNode, proofContext) {
|
|
121
|
-
var variable = null;
|
|
122
|
-
var variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, proofContext);
|
|
123
|
-
if (termVerifiedAsVariable) {
|
|
124
|
-
var firstVariable = (0, _array.first)(variables);
|
|
125
|
-
variable = firstVariable; ///
|
|
126
|
-
var name = variable.getName();
|
|
127
|
-
variable = _variable.default.fromTypeAndName(type, name); ///
|
|
128
|
-
proofContext.addVariable(variable);
|
|
129
|
-
}
|
|
130
|
-
return variable;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvZXF1YWxpdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcXVhbGl0eSBmcm9tIFwiLi4vZXF1YWxpdHlcIjtcbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vdmFyaWFibGVcIjtcbmltcG9ydCB2ZXJpZnlUZXJtIGZyb20gXCIuLi92ZXJpZnkvdGVybVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlIH0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5pbXBvcnQgeyBNQVhJTVVNX0lOREVYRVNfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZWZ0VGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9lcXVhbGl0eS90ZXJtWzBdXCIpLFxuICAgICAgcmlnaHRUZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2VxdWFsaXR5L3Rlcm1bMV1cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeUVxdWFsaXR5KGVxdWFsaXR5Tm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKGVxdWFsaXR5Tm9kZSk7XG5cbiAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSBub2RlQXNTdHJpbmcoZXF1YWxpdHlOb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS4uLmApO1xuXG4gIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgIGNvbnRleHQgPSBwcm9vZkNvbnRleHQsICAvLy9cbiAgICAgICAgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlUXVlcnkoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGVRdWVyeShlcXVhbGl0eU5vZGUpLFxuICAgICAgICBsZWZ0VGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybShsZWZ0VGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKHJpZ2h0VGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KTtcblxuICBpZiAobGVmdFRlcm1WZXJpZmllZCAmJiByaWdodFRlcm1WZXJpZmllZCkge1xuICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICBzZWNvbmRUeXBlID0gc2Vjb25kKHR5cGVzKSxcbiAgICAgICAgICBsZWZ0VHlwZSA9IGZpcnN0VHlwZSwgLy8vXG4gICAgICAgICAgcmlnaHRUeXBlID0gc2Vjb25kVHlwZSwgLy8vXG4gICAgICAgICAgbGVmdFRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcobGVmdFRlcm1Ob2RlKSxcbiAgICAgICAgICByaWdodFRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcocmlnaHRUZXJtTm9kZSk7XG5cbiAgICBpZiAoKGxlZnRUeXBlID09PSBudWxsKSAmJiAocmlnaHRUeXBlID09PSBudWxsKSkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgdHlwZXMgb2YgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zIGFyZSBib3RoIHVuZGVmaW5lZCBhbmQgdGhlcmVmb3JlIHRoZSB0ZXJtcyBjYW5ub3QgYmUgZXF1YXRlZC5gKTtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0VHlwZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IGxlZnRUeXBlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgdmFyaWFibGUgPSBhZGRWYXJpYWJsZSh0eXBlLCB0ZXJtTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGxlZnRUeXBlTmFtZSA9IGxlZnRUeXBlLmdldE5hbWUoKTtcblxuICAgICAgICBwcm9vZkNvbnRleHQuaW5mbyhgVGhlICcke3JpZ2h0VGVybVN0cmluZ30nIHZhcmlhYmxlIGhhcyBiZWVuIGdpdmVuIHRoZSAnJHtsZWZ0VHlwZU5hbWV9JyB0eXBlLmApO1xuXG4gICAgICAgIGVxdWFsaXR5VmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGVmdFR5cGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSByaWdodFR5cGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1Ob2RlID0gbGVmdFR5cGUsIC8vL1xuICAgICAgICAgICAgdmFyaWFibGUgPSBhZGRWYXJpYWJsZSh0eXBlLCB0ZXJtTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJpZ2h0VHlwZU5hbWUgPSByaWdodFR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgIHByb29mQ29udGV4dC5pbmZvKGBUaGUgJyR7cmlnaHRUZXJtU3RyaW5nfScgdmFyaWFibGUgaGFzIGJlZW4gZ2l2ZW4gdGhlICcke3JpZ2h0VHlwZU5hbWV9JyB0eXBlLmApO1xuXG4gICAgICAgIGVxdWFsaXR5VmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZWZ0VHlwZU1hdGNoZXNSaWdodFR5cGUgPSBsZWZ0VHlwZS5tYXRjaChyaWdodFR5cGUpO1xuXG4gICAgICBpZiAoIWxlZnRUeXBlTWF0Y2hlc1JpZ2h0VHlwZSkge1xuICAgICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSB0eXBlcyBvZiB0aGUgJyR7bGVmdFRlcm1TdHJpbmd9JyBhbmQgJyR7cmlnaHRUZXJtU3RyaW5nfScgdGVybXMgZG8gbm90IG1hdGNoIGFuZCB0aGVyZWZvcmUgdGhlIHRlcm1zIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgICAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgICAgICBlcXVhbGl0eVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICAgICAgICBwcm9vZlN0ZXBzID0gcHJvb2ZDb250ZXh0LmdldFByb29mU3RlcHMoKSxcbiAgICAgICAgICAgICAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzKHByb29mU3RlcHMpLFxuICAgICAgICAgICAgICAgIGVxdWFsaXR5RXF1YXRlcyA9IGVxdWFsaXR5LmVxdWF0ZShlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgICAgZXF1YWxpdHlWZXJpZmllZCA9IGVxdWFsaXR5RXF1YXRlczsgIC8vL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVxdWFsaXR5VmVyaWZpZWQpIHtcbiAgICBwcm9vZkNvbnRleHQuaW5mbyhgVmVyaWZpZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gIH1cblxuICBlcXVhbGl0eVZlcmlmaWVkID9cbiAgICBwcm9vZkNvbnRleHQuY29tcGxldGUoZXF1YWxpdHlOb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChlcXVhbGl0eU5vZGUpO1xuXG4gIHJldHVybiBlcXVhbGl0eVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiBlcXVhbGl0aWVzRnJvbVByb29mU3RlcHMocHJvb2ZTdGVwcykge1xuICBjb25zdCBzdGFydCA9IC1NQVhJTVVNX0lOREVYRVNfTEVOR1RIOyAgLy8vXG5cbiAgcHJvb2ZTdGVwcyA9IHByb29mU3RlcHMuc2xpY2Uoc3RhcnQpOyAvLy9cblxuICBjb25zdCBlcXVhbGl0aWVzID0gcHJvb2ZTdGVwcy5yZWR1Y2UoKGVxdWFsaXRpZXMsIHByb29mU3RlcCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21Qcm9vZlN0ZXAocHJvb2ZTdGVwKTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlcXVhbGl0aWVzO1xufVxuXG5mdW5jdGlvbiBhZGRWYXJpYWJsZSh0eXBlLCB0ZXJtTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVzID0gW10sXG4gICAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBwcm9vZkNvbnRleHQpO1xuXG4gIGlmICh0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlKSB7XG4gICAgY29uc3QgZmlyc3RWYXJpYWJsZSA9IGZpcnN0KHZhcmlhYmxlcyk7XG5cbiAgICB2YXJpYWJsZSA9IGZpcnN0VmFyaWFibGU7ICAvLy9cblxuICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZS5nZXROYW1lKCk7XG5cbiAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UeXBlQW5kTmFtZSh0eXBlLCBuYW1lKTsgIC8vL1xuXG4gICAgcHJvb2ZDb250ZXh0LmFkZFZhcmlhYmxlKHZhcmlhYmxlKTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlFcXVhbGl0eSIsImxlZnRUZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwicmlnaHRUZXJtTm9kZVF1ZXJ5IiwiZXF1YWxpdHlOb2RlIiwicHJvb2ZDb250ZXh0IiwiZXF1YWxpdHlWZXJpZmllZCIsImJlZ2luIiwiZXF1YWxpdHlTdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInR5cGVzIiwiY29udGV4dCIsImxlZnRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJsZWZ0VGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsInJpZ2h0VGVybVZlcmlmaWVkIiwiZmlyc3RUeXBlIiwiZmlyc3QiLCJzZWNvbmRUeXBlIiwic2Vjb25kIiwibGVmdFR5cGUiLCJyaWdodFR5cGUiLCJsZWZ0VGVybVN0cmluZyIsInJpZ2h0VGVybVN0cmluZyIsImVycm9yIiwidHlwZSIsInRlcm1Ob2RlIiwidmFyaWFibGUiLCJhZGRWYXJpYWJsZSIsImxlZnRUeXBlTmFtZSIsImdldE5hbWUiLCJpbmZvIiwicmlnaHRUeXBlTmFtZSIsImxlZnRUeXBlTWF0Y2hlc1JpZ2h0VHlwZSIsIm1hdGNoIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsImVxdWFsaXR5IiwiRXF1YWxpdHkiLCJmcm9tRXF1YWxpdHlOb2RlIiwicHJvb2ZTdGVwcyIsImdldFByb29mU3RlcHMiLCJlcXVhbGl0aWVzIiwiZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzIiwiZXF1YWxpdHlFcXVhdGVzIiwiZXF1YXRlIiwiY29tcGxldGUiLCJoYWx0Iiwic3RhcnQiLCJNQVhJTVVNX0lOREVYRVNfTEVOR1RIIiwic2xpY2UiLCJyZWR1Y2UiLCJwcm9vZlN0ZXAiLCJpbmRleCIsImZyb21Qcm9vZlN0ZXAiLCJwdXNoIiwidmFyaWFibGVzIiwidGVybVZlcmlmaWVkQXNWYXJpYWJsZSIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlIiwiZmlyc3RWYXJpYWJsZSIsIm5hbWUiLCJWYXJp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
|
package/src/verify/equality.js
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Equality from "../equality";
|
|
4
|
-
import Variable from "../variable";
|
|
5
|
-
import verifyTerm from "../verify/term";
|
|
6
|
-
|
|
7
|
-
import { nodeQuery } from "../utilities/query";
|
|
8
|
-
import { nodeAsString } from "../utilities/string";
|
|
9
|
-
import { first, second } from "../utilities/array";
|
|
10
|
-
import { verifyTermAsVariable } from "../verify/term";
|
|
11
|
-
import { MAXIMUM_INDEXES_LENGTH } from "../constants";
|
|
12
|
-
|
|
13
|
-
const leftTermNodeQuery = nodeQuery("/equality/term[0]"),
|
|
14
|
-
rightTermNodeQuery = nodeQuery("/equality/term[1]");
|
|
15
|
-
|
|
16
|
-
export default function verifyEquality(equalityNode, proofContext) {
|
|
17
|
-
let equalityVerified = false;
|
|
18
|
-
|
|
19
|
-
proofContext.begin(equalityNode);
|
|
20
|
-
|
|
21
|
-
const equalityString = nodeAsString(equalityNode);
|
|
22
|
-
|
|
23
|
-
proofContext.debug(`Verifying the '${equalityString}' equality...`);
|
|
24
|
-
|
|
25
|
-
const types = [],
|
|
26
|
-
context = proofContext, ///
|
|
27
|
-
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
28
|
-
rightTermNode = rightTermNodeQuery(equalityNode),
|
|
29
|
-
leftTermVerified = verifyTerm(leftTermNode, types, context),
|
|
30
|
-
rightTermVerified = verifyTerm(rightTermNode, types, context);
|
|
31
|
-
|
|
32
|
-
if (leftTermVerified && rightTermVerified) {
|
|
33
|
-
const firstType = first(types),
|
|
34
|
-
secondType = second(types),
|
|
35
|
-
leftType = firstType, ///
|
|
36
|
-
rightType = secondType, ///
|
|
37
|
-
leftTermString = nodeAsString(leftTermNode),
|
|
38
|
-
rightTermString = nodeAsString(rightTermNode);
|
|
39
|
-
|
|
40
|
-
if ((leftType === null) && (rightType === null)) {
|
|
41
|
-
proofContext.error(`The types of the '${leftTermString}' and '${rightTermString}' terms are both undefined and therefore the terms cannot be equated.`);
|
|
42
|
-
} else if (rightType === null) {
|
|
43
|
-
const type = leftType, ///
|
|
44
|
-
termNode = rightTermNode, ///
|
|
45
|
-
variable = addVariable(type, termNode, proofContext);
|
|
46
|
-
|
|
47
|
-
if (variable !== null) {
|
|
48
|
-
const leftTypeName = leftType.getName();
|
|
49
|
-
|
|
50
|
-
proofContext.info(`The '${rightTermString}' variable has been given the '${leftTypeName}' type.`);
|
|
51
|
-
|
|
52
|
-
equalityVerified = true;
|
|
53
|
-
}
|
|
54
|
-
} else if (leftType === null) {
|
|
55
|
-
const type = rightType, ///
|
|
56
|
-
termNode = leftType, ///
|
|
57
|
-
variable = addVariable(type, termNode, proofContext);
|
|
58
|
-
|
|
59
|
-
if (variable !== null) {
|
|
60
|
-
const rightTypeName = rightType.getName();
|
|
61
|
-
|
|
62
|
-
proofContext.info(`The '${rightTermString}' variable has been given the '${rightTypeName}' type.`);
|
|
63
|
-
|
|
64
|
-
equalityVerified = true;
|
|
65
|
-
}
|
|
66
|
-
} else {
|
|
67
|
-
const leftTypeMatchesRightType = leftType.match(rightType);
|
|
68
|
-
|
|
69
|
-
if (!leftTypeMatchesRightType) {
|
|
70
|
-
proofContext.error(`The types of the '${leftTermString}' and '${rightTermString}' terms do not match and therefore the terms cannot be equated.`);
|
|
71
|
-
} else {
|
|
72
|
-
const derived = proofContext.isDerived();
|
|
73
|
-
|
|
74
|
-
if (!derived) {
|
|
75
|
-
equalityVerified = true;
|
|
76
|
-
} else {
|
|
77
|
-
const equality = Equality.fromEqualityNode(equalityNode),
|
|
78
|
-
proofSteps = proofContext.getProofSteps(),
|
|
79
|
-
equalities = equalitiesFromProofSteps(proofSteps),
|
|
80
|
-
equalityEquates = equality.equate(equalities, proofContext);
|
|
81
|
-
|
|
82
|
-
equalityVerified = equalityEquates; ///
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (equalityVerified) {
|
|
89
|
-
proofContext.info(`Verified the '${equalityString}' equality.`);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
equalityVerified ?
|
|
93
|
-
proofContext.complete(equalityNode) :
|
|
94
|
-
proofContext.halt(equalityNode);
|
|
95
|
-
|
|
96
|
-
return equalityVerified;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function equalitiesFromProofSteps(proofSteps) {
|
|
100
|
-
const start = -MAXIMUM_INDEXES_LENGTH; ///
|
|
101
|
-
|
|
102
|
-
proofSteps = proofSteps.slice(start); ///
|
|
103
|
-
|
|
104
|
-
const equalities = proofSteps.reduce((equalities, proofStep, index) => {
|
|
105
|
-
const equality = Equality.fromProofStep(proofStep);
|
|
106
|
-
|
|
107
|
-
if (equality !== null) {
|
|
108
|
-
equalities.push(equality);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return equalities;
|
|
112
|
-
}, []);
|
|
113
|
-
|
|
114
|
-
return equalities;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function addVariable(type, termNode, proofContext) {
|
|
118
|
-
let variable = null;
|
|
119
|
-
|
|
120
|
-
const variables = [],
|
|
121
|
-
termVerifiedAsVariable = verifyTermAsVariable(termNode, variables, proofContext);
|
|
122
|
-
|
|
123
|
-
if (termVerifiedAsVariable) {
|
|
124
|
-
const firstVariable = first(variables);
|
|
125
|
-
|
|
126
|
-
variable = firstVariable; ///
|
|
127
|
-
|
|
128
|
-
const name = variable.getName();
|
|
129
|
-
|
|
130
|
-
variable = Variable.fromTypeAndName(type, name); ///
|
|
131
|
-
|
|
132
|
-
proofContext.addVariable(variable);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return variable;
|
|
136
|
-
}
|