occam-verify-cli 0.0.492 → 0.0.495
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/metaAntecedent.js +214 -0
- package/lib/premise.js +2 -2
- package/lib/utilities/releaseContext.js +20 -16
- package/lib/verify/antecedent.js +2 -2
- package/lib/verify/assertion/type.js +81 -0
- package/lib/verify/derivation.js +11 -14
- package/lib/verify/metaAntecedent.js +41 -0
- package/lib/verify/metaDerivation.js +11 -14
- package/lib/verify/metaproof.js +5 -18
- package/lib/verify/metastatement.js +19 -0
- package/lib/verify/proof.js +5 -18
- package/lib/verify/statement.js +9 -9
- package/package.json +1 -1
- package/src/metaAntecedent.js +235 -0
- package/src/premise.js +2 -2
- package/src/utilities/releaseContext.js +32 -28
- package/src/verify/antecedent.js +1 -1
- package/src/verify/{statementTypeAssertion.js → assertion/type.js} +29 -34
- package/src/verify/derivation.js +14 -19
- package/src/verify/metaAntecedent.js +44 -0
- package/src/verify/metaDerivation.js +14 -19
- package/src/verify/metaproof.js +3 -25
- package/src/verify/metastatement.js +15 -0
- package/src/verify/proof.js +3 -25
- package/src/verify/statement.js +10 -9
- package/lib/equality.js +0 -190
- package/lib/verify/statementAsEquality.js +0 -76
- package/lib/verify/statementTypeAssertion.js +0 -84
- package/src/equality.js +0 -231
- package/src/verify/statementAsEquality.js +0 -101
|
@@ -1,84 +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 verifyStatementTypeAssertion;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
|
|
12
|
-
var _array = require("../utilities/array");
|
|
13
|
-
var _string = require("../utilities/string");
|
|
14
|
-
var _query = require("../utilities/query");
|
|
15
|
-
var _term = require("../verify/term");
|
|
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"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
|
|
22
|
-
function verifyStatementTypeAssertion(statementNode, qualified, proofContext) {
|
|
23
|
-
var statementTypeAssertionVerified = false;
|
|
24
|
-
proofContext.begin(statementNode);
|
|
25
|
-
var statementString = (0, _string.nodeAsString)(statementNode);
|
|
26
|
-
proofContext.debug("Verifying the '".concat(statementString, "' statement type assertion..."));
|
|
27
|
-
var typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
28
|
-
if (typeAssertionNode !== null) {
|
|
29
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
30
|
-
if (!typePresent) {
|
|
31
|
-
proofContext.error("The ".concat(typeName, " type is not present."));
|
|
32
|
-
} else {
|
|
33
|
-
if (!statementTypeAssertionVerified) {
|
|
34
|
-
var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, qualified, proofContext);
|
|
35
|
-
statementTypeAssertionVerified = variableTypeAssertionVerified; ///
|
|
36
|
-
}
|
|
37
|
-
if (!statementTypeAssertionVerified) {
|
|
38
|
-
var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, qualified, proofContext);
|
|
39
|
-
statementTypeAssertionVerified = termTypeAssertionVerified; ///
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (statementTypeAssertionVerified) {
|
|
44
|
-
proofContext.info("Verified the '".concat(statementString, "' statement type assertion."));
|
|
45
|
-
}
|
|
46
|
-
statementTypeAssertionVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
|
|
47
|
-
return statementTypeAssertionVerified;
|
|
48
|
-
}
|
|
49
|
-
function verifyVariableTypeAssertion(typeAssertionNode, qualified, proofContext) {
|
|
50
|
-
var variableTypeAssertionVerified = false;
|
|
51
|
-
var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode), termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
52
|
-
if (termVerifiedAsVariable) {
|
|
53
|
-
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();
|
|
54
|
-
var assertedTypeEqualToOrSubTypeOfVariableType = variableType === null ? true : assertedType.isEqualToOrSubTypeOf(variableType);
|
|
55
|
-
if (!assertedTypeEqualToOrSubTypeOfVariableType) {
|
|
56
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
|
|
57
|
-
} else {
|
|
58
|
-
if (!qualified) {
|
|
59
|
-
var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
|
|
60
|
-
proofContext.addVariable(variable1);
|
|
61
|
-
}
|
|
62
|
-
variableTypeAssertionVerified = true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return variableTypeAssertionVerified;
|
|
66
|
-
}
|
|
67
|
-
function verifyTermTypeAssertion(typeAssertionNode, qualified, proofContext) {
|
|
68
|
-
var termTypeAssertionVerified = false;
|
|
69
|
-
var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
|
|
70
|
-
if (termVerifiedAgainstConstructors) {
|
|
71
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstType = (0, _array.first)(types), termType = firstType, termString = (0, _string.nodeAsString)(termNode), assertedTypeEqualToOrSubTypeOfTermType = termType === null ? true : assertedType.isEqualToOrSubTypeOf(termType);
|
|
72
|
-
if (!assertedTypeEqualToOrSubTypeOfTermType) {
|
|
73
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
|
|
74
|
-
} else {
|
|
75
|
-
if (!qualified) {
|
|
76
|
-
debugger;
|
|
77
|
-
}
|
|
78
|
-
termTypeAssertionVerified = true;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return termTypeAssertionVerified;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50VHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUsIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIH0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZUFzc2VydGlvbi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGVcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50VHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSBwcm9vZkNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgJHt0eXBlTmFtZX0gdHlwZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlWYXJpYWJsZVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHF1YWxpZmllZCwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgICAgICBjb25zdCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VGVybVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHF1YWxpZmllZCwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkOyAgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgIHByb29mQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHR5cGUgYXNzZXJ0aW9uLmApO1xuICB9XG5cbiAgc3RhdGVtZW50VHlwZUFzc2VydGlvblZlcmlmaWVkID9cbiAgICBwcm9vZkNvbnRleHQuY29tcGxldGUoc3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCkge1xuICBsZXQgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBpZiAodGVybVZlcmlmaWVkQXNWYXJpYWJsZSkge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgYXNzZXJ0ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgYXNzZXJ0ZWRUeXBlID0gcHJvb2ZDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShhc3NlcnRlZFR5cGVOYW1lKSxcbiAgICAgICAgICBmaXJzdFZhcmlhYmxlID0gZmlyc3QodmFyaWFibGVzKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGZpcnN0VmFyaWFibGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCk7XG5cbiAgICBjb25zdCBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUgPSAodmFyaWFibGVUeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGVkVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih2YXJpYWJsZVR5cGUpO1xuXG4gICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUpIHtcbiAgICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlIGFzc2VydGVkIHR5cGUgaXMgbm90IGVxdWFsIHRvIG9yIGEgc3ViLXR5cGUgb2YgdGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlIHR5cGUuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcXVhbGlmaWVkKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhc3NlcnRlZFR5cGUsICAvLy9cbiAgICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UeXBlQW5kTmFtZSh0eXBlLCBuYW1lKTtcblxuICAgICAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICAgICAgfVxuXG4gICAgICB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcXVhbGlmaWVkLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgICAgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgIHRlcm1UeXBlID0gZmlyc3RUeXBlLFxuICAgICAgICAgIHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlID0gKHRlcm1UeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRlZFR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodGVybVR5cGUpO1xuXG4gICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgZXF1YWwgdG8gb3IgYSBzdWItdHlwZSBvZiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFxdWFsaWZpZWQpIHtcbiAgICAgICAgZGVidWdnZXJcbiAgICAgIH1cblxuICAgICAgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlTdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZSIsInF1YWxpZmllZCIsInByb29mQ29udGV4dCIsInN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCIsImJlZ2luIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJlcnJvciIsInZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uIiwidGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uIiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCIsImNvbnRleHQiLCJ2YXJpYWJsZXMiLCJ0ZXJtTm9kZSIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJ2ZXJpZnlUZXJtQXNWYXJpYWJsZSIsImFzc2VydGVkVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJmaXJzdFZhcmlhYmxlIiwiZmlyc3QiLCJ2YXJpYWJsZSIsInZhcmlhYmxlTmFtZSIsImdldE5hbWUiLCJ2YXJpYWJsZVR5cGUiLCJnZXRUeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVmFyaWFibGVUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJ0eXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiYWRkVmFyaWFibGUiLCJ0eXBlcyIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyIsImZpcnN0VHlwZSIsInRlcm1UeXBlIiwidGVybVN0cmluZyIsImFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQXdCQTs7OzZEQVhIO3FCQUVDO3NCQUNPO3FCQUNtQjtvQkFDb0I7Ozs7OztBQUVwRSxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCRSx5QkFBeUJGLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsNkJBQTZCSyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsWUFBWSxFQUFFO0lBQzNGLElBQUlDLGlDQUFpQyxLQUFLO0lBRTFDRCxhQUFhRSxLQUFLLENBQUNKO0lBRW5CLElB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
|
package/src/equality.js
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { nodeQuery } from "./utilities/query";
|
|
4
|
-
import { TERM_RULE_NAME } from "./ruleNames";
|
|
5
|
-
import { EQUALS_CHARACTER } from "./constants";
|
|
6
|
-
|
|
7
|
-
const specialNodeQuery = nodeQuery("/statement/@special!"),
|
|
8
|
-
leftTermNodeQuery = nodeQuery("/statement/term[0]"),
|
|
9
|
-
rightTermNodeQuery = nodeQuery("/statement/term[1]");
|
|
10
|
-
|
|
11
|
-
export default class Equality {
|
|
12
|
-
constructor(leftTermNode, rightTermNode) {
|
|
13
|
-
this.leftTermNode = leftTermNode;
|
|
14
|
-
this.rightTermNode = rightTermNode;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
getLeftTermNode() {
|
|
18
|
-
return this.leftTermNode;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
getRightTermNode() {
|
|
22
|
-
return this.rightTermNode;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
match(equality, equalities, proofContext) {
|
|
26
|
-
let matches = false;
|
|
27
|
-
|
|
28
|
-
const leftTermNode = equality.getLeftTermNode(),
|
|
29
|
-
rightTermNode = equality.getRightTermNode();
|
|
30
|
-
|
|
31
|
-
if (!matches) {
|
|
32
|
-
const reversed = false,
|
|
33
|
-
leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext);
|
|
34
|
-
|
|
35
|
-
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (!matches) {
|
|
39
|
-
const reversed = true,
|
|
40
|
-
leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext);
|
|
41
|
-
|
|
42
|
-
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return matches;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext) {
|
|
49
|
-
let leftTermNodeAndRightTermNodeMatch = true;
|
|
50
|
-
|
|
51
|
-
if (leftTermNodeAndRightTermNodeMatch) {
|
|
52
|
-
const leftNonTerminalNode = reversed ?
|
|
53
|
-
this.rightTermNode :
|
|
54
|
-
this.leftTermNode, ///
|
|
55
|
-
rightNonTerminalNode = leftTermNode, ///
|
|
56
|
-
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext);
|
|
57
|
-
|
|
58
|
-
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (leftTermNodeAndRightTermNodeMatch) {
|
|
62
|
-
const leftNonTerminalNode = reversed ?
|
|
63
|
-
this.leftTermNode :
|
|
64
|
-
this.rightTermNode, ///
|
|
65
|
-
rightNonTerminalNode = rightTermNode, ///
|
|
66
|
-
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext);
|
|
67
|
-
|
|
68
|
-
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return leftTermNodeAndRightTermNodeMatch;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
equate(equalities, proofContext) {
|
|
75
|
-
const leftNonTerminalNode = this.leftTermNode, ///
|
|
76
|
-
rightNonTerminalNode = this.rightTermNode, ///
|
|
77
|
-
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext),
|
|
78
|
-
equates = nonTerminalNodeEquates; ///
|
|
79
|
-
|
|
80
|
-
return equates;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
static fromProofStep(proofStep) {
|
|
84
|
-
let equality = null;
|
|
85
|
-
|
|
86
|
-
const statementNode = proofStep.getStatementNode();
|
|
87
|
-
|
|
88
|
-
if (statementNode !== null) {
|
|
89
|
-
const specialNode = specialNodeQuery(statementNode);
|
|
90
|
-
|
|
91
|
-
if (specialNode !== null) {
|
|
92
|
-
const terminalNode = specialNode, ///
|
|
93
|
-
terminalNodeContent = terminalNode.getContent();
|
|
94
|
-
|
|
95
|
-
if (terminalNodeContent === EQUALS_CHARACTER) {
|
|
96
|
-
const leftTermNode = leftTermNodeQuery(statementNode),
|
|
97
|
-
rightTermNode = rightTermNodeQuery(statementNode);
|
|
98
|
-
|
|
99
|
-
equality = new Equality(leftTermNode, rightTermNode);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return equality;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
static fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
|
|
108
|
-
const equality = new Equality(leftTermNode, rightTermNode);
|
|
109
|
-
|
|
110
|
-
return equality;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function equateNode(nodeA, nodeB, equalities, proofContext) {
|
|
115
|
-
let nodeEquates = false;
|
|
116
|
-
|
|
117
|
-
const nodeATerminalNode = nodeA.isTerminalNode(),
|
|
118
|
-
nodeBTerminalNode = nodeB.isTerminalNode();
|
|
119
|
-
|
|
120
|
-
if (nodeATerminalNode === nodeBTerminalNode) {
|
|
121
|
-
if (nodeATerminalNode) {
|
|
122
|
-
const terminalNodeA = nodeA, ///
|
|
123
|
-
terminalNodeB = nodeB, ///
|
|
124
|
-
terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, equalities, proofContext);
|
|
125
|
-
|
|
126
|
-
nodeEquates = terminalNodeEquates; ///
|
|
127
|
-
} else {
|
|
128
|
-
const nonTerminalNodeA = nodeA, ///
|
|
129
|
-
nonTerminalNodeB = nodeB, ///
|
|
130
|
-
nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equalities, proofContext);
|
|
131
|
-
|
|
132
|
-
nodeEquates = nonTerminalNodeEquates; ///
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return nodeEquates;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function equateNodes(leftNodes, rightNodes, equalities, proofContext) {
|
|
140
|
-
let nodesEquate = false;
|
|
141
|
-
|
|
142
|
-
const leftNodesLength = leftNodes.length,
|
|
143
|
-
rightNodesLength = rightNodes.length;
|
|
144
|
-
|
|
145
|
-
if (leftNodesLength === rightNodesLength) {
|
|
146
|
-
nodesEquate = leftNodes.every((LeftNode, index) => {
|
|
147
|
-
const rightNode = rightNodes[index],
|
|
148
|
-
nodeEquates = equateNode(LeftNode, rightNode, equalities, proofContext);
|
|
149
|
-
|
|
150
|
-
if (nodeEquates) {
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return nodesEquate;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function equateTerminalNode(terminalNodeA, terminalNodeB, equalities, proofContext) {
|
|
160
|
-
const matches = terminalNodeA.match(terminalNodeB),
|
|
161
|
-
terminalNodeEquates = matches; ///
|
|
162
|
-
|
|
163
|
-
return terminalNodeEquates;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext) {
|
|
167
|
-
let nonTerminalNodeEquates = false;
|
|
168
|
-
|
|
169
|
-
const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
|
|
170
|
-
rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
|
|
171
|
-
|
|
172
|
-
if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
|
|
173
|
-
const ruleName = leftNonTerminalNodeRuleName, ///
|
|
174
|
-
ruleNameTermRuleName = (ruleName === TERM_RULE_NAME);
|
|
175
|
-
|
|
176
|
-
if (ruleNameTermRuleName) {
|
|
177
|
-
const leftTermNode = leftNonTerminalNode, ///
|
|
178
|
-
rightTermNode = rightNonTerminalNode, ///
|
|
179
|
-
termNodeEquates = equateTermNode(leftTermNode, rightTermNode, equalities, proofContext);
|
|
180
|
-
|
|
181
|
-
nonTerminalNodeEquates = termNodeEquates; ///
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (!nonTerminalNodeEquates) {
|
|
185
|
-
const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
|
|
186
|
-
rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
|
|
187
|
-
leftNodes = leftNonTerminalNodeChildNodes, ///
|
|
188
|
-
rightNodes = rightNonTerminalNodeChildNodes, ///
|
|
189
|
-
nodesEquate = equateNodes(leftNodes, rightNodes, equalities, proofContext);
|
|
190
|
-
|
|
191
|
-
nonTerminalNodeEquates = nodesEquate; ///
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
return nonTerminalNodeEquates;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function equateTermNode(leftTermNode, rightTermNode, equalities, proofContext) {
|
|
199
|
-
const equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode),
|
|
200
|
-
equalityA = equality, ///
|
|
201
|
-
equalityMatches = equalities.some((equality) => { ///
|
|
202
|
-
let equalitiesB = equalities; ///
|
|
203
|
-
|
|
204
|
-
const equalityB = equality; ///
|
|
205
|
-
|
|
206
|
-
equalitiesB = pruneEqualities(equalitiesB, equalityB); ///
|
|
207
|
-
|
|
208
|
-
const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, proofContext);
|
|
209
|
-
|
|
210
|
-
if (equalityAMatchesEqualityB) {
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
}),
|
|
214
|
-
termNodeEquates = equalityMatches; ///
|
|
215
|
-
|
|
216
|
-
return termNodeEquates;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
function pruneEqualities(equalities, equality) {
|
|
220
|
-
const equalityA = equality; ///
|
|
221
|
-
|
|
222
|
-
equalities = equalities.filter((equality) => {
|
|
223
|
-
const equalityB = equality; ///
|
|
224
|
-
|
|
225
|
-
if (equalityA !== equalityB) {
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
return equalities;
|
|
231
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Equality from "../equality";
|
|
4
|
-
import verifyTerm from "../verify/term";
|
|
5
|
-
|
|
6
|
-
import { nodeQuery } from "../utilities/query";
|
|
7
|
-
import { nodeAsString } from "../utilities/string";
|
|
8
|
-
import { first, second } from "../utilities/array";
|
|
9
|
-
import { EQUALS_CHARACTER, MAXIMUM_INDEXES_LENGTH } from "../constants";
|
|
10
|
-
|
|
11
|
-
const specialNodeQuery = nodeQuery("/statement/@special!"),
|
|
12
|
-
leftTermNodeQuery = nodeQuery("/statement/term[0]"),
|
|
13
|
-
rightTermNodeQuery = nodeQuery("/statement/term[1]");
|
|
14
|
-
|
|
15
|
-
export default function verifyStatementAsEquality(statementNode, qualified, proofContext) {
|
|
16
|
-
let statementVerifiedAsEquality = false;
|
|
17
|
-
|
|
18
|
-
proofContext.begin(statementNode);
|
|
19
|
-
|
|
20
|
-
const statementString = nodeAsString(statementNode);
|
|
21
|
-
|
|
22
|
-
proofContext.debug(`Verifying the '${statementString}' statement as an equality...`);
|
|
23
|
-
|
|
24
|
-
const specialNode = specialNodeQuery(statementNode);
|
|
25
|
-
|
|
26
|
-
if (specialNode !== null) {
|
|
27
|
-
const terminalNode = specialNode, ///
|
|
28
|
-
terminalNodeContent = terminalNode.getContent();
|
|
29
|
-
|
|
30
|
-
if (terminalNodeContent === EQUALS_CHARACTER) {
|
|
31
|
-
const types = [],
|
|
32
|
-
context = proofContext, ///
|
|
33
|
-
leftTermNode = leftTermNodeQuery(statementNode),
|
|
34
|
-
rightTermNode = rightTermNodeQuery(statementNode),
|
|
35
|
-
leftTermVerified = verifyTerm(leftTermNode, types, context),
|
|
36
|
-
rightTermVerified = verifyTerm(rightTermNode, types, context);
|
|
37
|
-
|
|
38
|
-
if (leftTermVerified && rightTermVerified) {
|
|
39
|
-
const firstType = first(types),
|
|
40
|
-
secondType = second(types),
|
|
41
|
-
leftType = firstType, ///
|
|
42
|
-
rightType = secondType, ///
|
|
43
|
-
leftTermString = nodeAsString(leftTermNode),
|
|
44
|
-
rightTermString = nodeAsString(rightTermNode);
|
|
45
|
-
|
|
46
|
-
if ((leftType === null) && (rightType === null)) {
|
|
47
|
-
proofContext.error(`The types of the '${leftTermString}' and '${rightTermString}' terms are both undefined and therefore the terms cannot be equated.`);
|
|
48
|
-
} else if (rightType === null) {
|
|
49
|
-
proofContext.info(`The type of the right '${rightTermString}' term is undefined and therefore the types cannot be equated.`);
|
|
50
|
-
} else if (leftType === null) {
|
|
51
|
-
proofContext.info(`The type of the left '${leftTermString}' term is undefined and therefore the types cannot be equated.`);
|
|
52
|
-
} else {
|
|
53
|
-
const leftTypeMatchesRightType = leftType.match(rightType);
|
|
54
|
-
|
|
55
|
-
if (!leftTypeMatchesRightType) {
|
|
56
|
-
proofContext.error(`The types of the '${leftTermString}' and '${rightTermString}' terms do not match and therefore the terms cannot be equated.`);
|
|
57
|
-
} else {
|
|
58
|
-
if (!qualified) {
|
|
59
|
-
statementVerifiedAsEquality = true;
|
|
60
|
-
} else {
|
|
61
|
-
const equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode),
|
|
62
|
-
proofSteps = proofContext.getProofSteps(),
|
|
63
|
-
equalities = equalitiesFromProofSteps(proofSteps),
|
|
64
|
-
equalityEquates = equality.equate(equalities, proofContext);
|
|
65
|
-
|
|
66
|
-
statementVerifiedAsEquality = equalityEquates; ///
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (statementVerifiedAsEquality) {
|
|
75
|
-
proofContext.info(`Verified the '${statementString}' equality.`);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
statementVerifiedAsEquality ?
|
|
79
|
-
proofContext.complete(statementNode) :
|
|
80
|
-
proofContext.halt(statementNode);
|
|
81
|
-
|
|
82
|
-
return statementVerifiedAsEquality;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function equalitiesFromProofSteps(proofSteps) {
|
|
86
|
-
const start = -MAXIMUM_INDEXES_LENGTH; ///
|
|
87
|
-
|
|
88
|
-
proofSteps = proofSteps.slice(start); ///
|
|
89
|
-
|
|
90
|
-
const equalities = proofSteps.reduce((equalities, proofStep, index) => {
|
|
91
|
-
const equality = Equality.fromProofStep(proofStep);
|
|
92
|
-
|
|
93
|
-
if (equality !== null) {
|
|
94
|
-
equalities.push(equality);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return equalities;
|
|
98
|
-
}, []);
|
|
99
|
-
|
|
100
|
-
return equalities;
|
|
101
|
-
}
|