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.
@@ -0,0 +1,139 @@
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 verifyStatementAsEquality;
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 specialNodeQuery = (0, _query.nodeQuery)("/statement/@special!"), leftTermNodeQuery = (0, _query.nodeQuery)("/statement/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/statement/term[1]");
63
+ function verifyStatementAsEquality(statementNode, proofContext) {
64
+ var statementVerifiedAsEquality = false;
65
+ proofContext.begin(statementNode);
66
+ var statementString = (0, _string.nodeAsString)(statementNode);
67
+ proofContext.debug("Verifying the '".concat(statementString, "' statement as an equality..."));
68
+ var specialNode = specialNodeQuery(statementNode);
69
+ if (specialNode !== null) {
70
+ var terminalNode = specialNode, terminalNodeContent = terminalNode.getContent();
71
+ if (terminalNodeContent === _constants.EQUALS_CHARACTER) {
72
+ var types = [], context = proofContext, leftTermNode = leftTermNodeQuery(statementNode), rightTermNode = rightTermNodeQuery(statementNode), leftTermVerified = (0, _term.default)(leftTermNode, types, context), rightTermVerified = (0, _term.default)(rightTermNode, types, context);
73
+ if (leftTermVerified && rightTermVerified) {
74
+ 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);
75
+ if (leftType === null && rightType === null) {
76
+ proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms are both undefined and therefore the terms cannot be equated."));
77
+ } else if (rightType === null) {
78
+ var type = leftType, termNode = rightTermNode, variable = addVariable(type, termNode, proofContext);
79
+ if (variable !== null) {
80
+ var leftTypeName = leftType.getName();
81
+ proofContext.info("The '".concat(rightTermString, "' variable has been given the '").concat(leftTypeName, "' type."));
82
+ statementVerifiedAsEquality = true;
83
+ }
84
+ } else if (leftType === null) {
85
+ var type1 = rightType, termNode1 = leftType, variable1 = addVariable(type1, termNode1, proofContext);
86
+ if (variable1 !== null) {
87
+ var rightTypeName = rightType.getName();
88
+ proofContext.info("The '".concat(rightTermString, "' variable has been given the '").concat(rightTypeName, "' type."));
89
+ statementVerifiedAsEquality = true;
90
+ }
91
+ } else {
92
+ var leftTypeMatchesRightType = leftType.match(rightType);
93
+ if (!leftTypeMatchesRightType) {
94
+ proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms do not match and therefore the terms cannot be equated."));
95
+ } else {
96
+ var derived = proofContext.isDerived();
97
+ if (!derived) {
98
+ statementVerifiedAsEquality = true;
99
+ } else {
100
+ var equality = _equality.default.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode), proofSteps = proofContext.getProofSteps(), equalities = equalitiesFromProofSteps(proofSteps), equalityEquates = equality.equate(equalities, proofContext);
101
+ statementVerifiedAsEquality = equalityEquates; ///
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ if (statementVerifiedAsEquality) {
109
+ proofContext.info("Verified the '".concat(statementString, "' equality."));
110
+ }
111
+ statementVerifiedAsEquality ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
112
+ return statementVerifiedAsEquality;
113
+ }
114
+ function equalitiesFromProofSteps(proofSteps) {
115
+ var start = -_constants.MAXIMUM_INDEXES_LENGTH; ///
116
+ proofSteps = proofSteps.slice(start); ///
117
+ var equalities = proofSteps.reduce(function(equalities, proofStep, index) {
118
+ var equality = _equality.default.fromProofStep(proofStep);
119
+ if (equality !== null) {
120
+ equalities.push(equality);
121
+ }
122
+ return equalities;
123
+ }, []);
124
+ return equalities;
125
+ }
126
+ function addVariable(type, termNode, proofContext) {
127
+ var variable = null;
128
+ var variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, proofContext);
129
+ if (termVerifiedAsVariable) {
130
+ var firstVariable = (0, _array.first)(variables);
131
+ variable = firstVariable; ///
132
+ var name = variable.getName();
133
+ variable = _variable.default.fromTypeAndName(type, name); ///
134
+ proofContext.addVariable(variable);
135
+ }
136
+ return variable;
137
+ }
138
+
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50QXNFcXVhbGl0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuaW1wb3J0IHZlcmlmeVRlcm0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUgfSBmcm9tIFwiLi4vdmVyaWZ5L3Rlcm1cIjtcbmltcG9ydCB7IEVRVUFMU19DSEFSQUNURVIsIE1BWElNVU1fSU5ERVhFU19MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHNwZWNpYWxOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L0BzcGVjaWFsIVwiKSxcbiAgICAgIGxlZnRUZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90ZXJtWzBdXCIpLFxuICAgICAgcmlnaHRUZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90ZXJtWzFdXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudE5vZGUsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgY29uc3Qgc3BlY2lhbE5vZGUgPSBzcGVjaWFsTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzcGVjaWFsTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHNwZWNpYWxOb2RlLCAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgIGlmICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBFUVVBTFNfQ0hBUkFDVEVSKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgICAgY29udGV4dCA9IHByb29mQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICByaWdodFRlcm1Ob2RlID0gcmlnaHRUZXJtTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgbGVmdFRlcm1WZXJpZmllZCA9IHZlcmlmeVRlcm0obGVmdFRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCksXG4gICAgICAgICAgICByaWdodFRlcm1WZXJpZmllZCA9IHZlcmlmeVRlcm0ocmlnaHRUZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGVmdFRlcm1WZXJpZmllZCAmJiByaWdodFRlcm1WZXJpZmllZCkge1xuICAgICAgICBjb25zdCBmaXJzdFR5cGUgPSBmaXJzdCh0eXBlcyksXG4gICAgICAgICAgICAgIHNlY29uZFR5cGUgPSBzZWNvbmQodHlwZXMpLFxuICAgICAgICAgICAgICBsZWZ0VHlwZSA9IGZpcnN0VHlwZSwgLy8vXG4gICAgICAgICAgICAgIHJpZ2h0VHlwZSA9IHNlY29uZFR5cGUsIC8vL1xuICAgICAgICAgICAgICBsZWZ0VGVybVN0cmluZyA9IG5vZGVBc1N0cmluZyhsZWZ0VGVybU5vZGUpLFxuICAgICAgICAgICAgICByaWdodFRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcocmlnaHRUZXJtTm9kZSk7XG5cbiAgICAgICAgaWYgKChsZWZ0VHlwZSA9PT0gbnVsbCkgJiYgKHJpZ2h0VHlwZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSB0eXBlcyBvZiB0aGUgJyR7bGVmdFRlcm1TdHJpbmd9JyBhbmQgJyR7cmlnaHRUZXJtU3RyaW5nfScgdGVybXMgYXJlIGJvdGggdW5kZWZpbmVkIGFuZCB0aGVyZWZvcmUgdGhlIHRlcm1zIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBsZWZ0VHlwZSwgIC8vL1xuICAgICAgICAgICAgICAgIHRlcm1Ob2RlID0gcmlnaHRUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgdmFyaWFibGUgPSBhZGRWYXJpYWJsZSh0eXBlLCB0ZXJtTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbGVmdFR5cGVOYW1lID0gbGVmdFR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICBwcm9vZkNvbnRleHQuaW5mbyhgVGhlICcke3JpZ2h0VGVybVN0cmluZ30nIHZhcmlhYmxlIGhhcyBiZWVuIGdpdmVuIHRoZSAnJHtsZWZ0VHlwZU5hbWV9JyB0eXBlLmApO1xuXG4gICAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsZWZ0VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSByaWdodFR5cGUsICAvLy9cbiAgICAgICAgICAgICAgICB0ZXJtTm9kZSA9IGxlZnRUeXBlLCAvLy9cbiAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IGFkZFZhcmlhYmxlKHR5cGUsIHRlcm1Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodFR5cGVOYW1lID0gcmlnaHRUeXBlLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgcHJvb2ZDb250ZXh0LmluZm8oYFRoZSAnJHtyaWdodFRlcm1TdHJpbmd9JyB2YXJpYWJsZSBoYXMgYmVlbiBnaXZlbiB0aGUgJyR7cmlnaHRUeXBlTmFtZX0nIHR5cGUuYCk7XG5cbiAgICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGxlZnRUeXBlTWF0Y2hlc1JpZ2h0VHlwZSA9IGxlZnRUeXBlLm1hdGNoKHJpZ2h0VHlwZSk7XG5cbiAgICAgICAgICBpZiAoIWxlZnRUeXBlTWF0Y2hlc1JpZ2h0VHlwZSkge1xuICAgICAgICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgdHlwZXMgb2YgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zIGRvIG5vdCBtYXRjaCBhbmQgdGhlcmVmb3JlIHRoZSB0ZXJtcyBjYW5ub3QgYmUgZXF1YXRlZC5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgICAgICAgICAgaWYgKCFkZXJpdmVkKSB7XG4gICAgICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21MZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSksXG4gICAgICAgICAgICAgICAgICAgIHByb29mU3RlcHMgPSBwcm9vZkNvbnRleHQuZ2V0UHJvb2ZTdGVwcygpLFxuICAgICAgICAgICAgICAgICAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzKHByb29mU3RlcHMpLFxuICAgICAgICAgICAgICAgICAgICBlcXVhbGl0eUVxdWF0ZXMgPSBlcXVhbGl0eS5lcXVhdGUoZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSBlcXVhbGl0eUVxdWF0ZXM7ICAvLy9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5KSB7XG4gICAgcHJvb2ZDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgfVxuXG4gIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKHN0YXRlbWVudE5vZGUpIDpcbiAgICAgIHByb29mQ29udGV4dC5oYWx0KHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tUHJvb2ZTdGVwcyhwcm9vZlN0ZXBzKSB7XG4gIGNvbnN0IHN0YXJ0ID0gLU1BWElNVU1fSU5ERVhFU19MRU5HVEg7ICAvLy9cblxuICBwcm9vZlN0ZXBzID0gcHJvb2ZTdGVwcy5zbGljZShzdGFydCk7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXRpZXMgPSBwcm9vZlN0ZXBzLnJlZHVjZSgoZXF1YWxpdGllcywgcHJvb2ZTdGVwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVByb29mU3RlcChwcm9vZlN0ZXApO1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBlcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXM7XG59XG5cbmZ1bmN0aW9uIGFkZFZhcmlhYmxlKHR5cGUsIHRlcm1Ob2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIHByb29mQ29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFzVmFyaWFibGUpIHtcbiAgICBjb25zdCBmaXJzdFZhcmlhYmxlID0gZmlyc3QodmFyaWFibGVzKTtcblxuICAgIHZhcmlhYmxlID0gZmlyc3RWYXJpYWJsZTsgIC8vL1xuXG4gICAgY29uc3QgbmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKTtcblxuICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVR5cGVBbmROYW1lKHR5cGUsIG5hbWUpOyAgLy8vXG5cbiAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzcGVjaWFsTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGVmdFRlcm1Ob2RlUXVlcnkiLCJyaWdodFRlcm1Ob2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlIiwicHJvb2ZDb250ZXh0Iiwic3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiYmVnaW4iLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInNwZWNpYWxOb2RlIiwidGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQ29udGVudCIsImdldENvbnRlbnQiLCJFUVVBTFNfQ0hBUkFDVEVSIiwidHlwZXMiLCJjb250ZXh0IiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImxlZnRUZXJtVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtIiwicmlnaHRUZXJtVmVyaWZpZWQiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInNlY29uZFR5cGUiLCJzZWNvbmQiLCJsZWZ0VHlwZSIsInJpZ2h0VHlwZSIsImxlZnRUZXJtU3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwiZXJyb3IiLCJ0eXBlIiwidGVybU5vZGUiLCJ2YXJpYWJsZSIsImFkZFZhcmlhYmxlIiwibGVmdFR5cGVOYW1lIiwiZ2V0TmFtZSIsImluZm8iLCJyaWdodFR5cGVOYW1lIiwibGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlIiwibWF0Y2giLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwiZXF1YWxpdHkiLCJFcXVhbGl0eSIsImZyb21MZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlIiwicHJvb2ZTdGVwcyIsImdldFByb29mU3RlcHMiLCJlcXVhbGl0aWVzIiwiZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzIiwiZXF1YWxpdHlFcXVhdGVzIiwiZXF1YXRlIiwiY29tcGxldGUiLCJoYWx0Iiwic3RhcnQiLCJNQVhJTVVNX0lOREVYRVNfTEVOR1RIIiwic2xpY2UiLCJyZWR1Y2UiLCJwcm9vZlN0ZXAiLCJpbmRleCIsImZyb21Qcm9vZlN0ZXAiLCJwdXNoIiwidmFyaWFibGVzIiwidGVybVZlcmlmaWVkQXNWYXJpYWJsZSIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlIiwiZmlyc3RWYXJpYWJsZSIsIm5hbWUiLCJWYXJpYWJsZSIsImZyb21UeXBlQW5kTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7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
@@ -0,0 +1,82 @@
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, proofContext) {
23
+ var typeAssertionVerified = 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
+ var context = proofContext, termNode = termNodeQuery(typeAssertionNode), variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
34
+ if (termVerifiedAsVariable) {
35
+ var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, proofContext);
36
+ typeAssertionVerified = variableTypeAssertionVerified; ///
37
+ } else {
38
+ var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, proofContext);
39
+ typeAssertionVerified = termTypeAssertionVerified; ///
40
+ }
41
+ }
42
+ }
43
+ if (typeAssertionVerified) {
44
+ proofContext.info("Verified the '".concat(statementString, "' statement type assertion."));
45
+ }
46
+ typeAssertionVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
47
+ return typeAssertionVerified;
48
+ }
49
+ function verifyTermTypeAssertion(typeAssertionNode, proofContext) {
50
+ var termTypeAssertionVerified = false;
51
+ var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
52
+ if (termVerifiedAgainstConstructors) {
53
+ 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);
54
+ if (!assertedTypeEqualToOrSubTypeOfTermType) {
55
+ var termString = (0, _string.nodeAsString)(termNode);
56
+ proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
57
+ } else {
58
+ termTypeAssertionVerified = true;
59
+ }
60
+ }
61
+ return termTypeAssertionVerified;
62
+ }
63
+ function verifyVariableTypeAssertion(typeAssertionNode, proofContext) {
64
+ var variableTypeAssertionVerified = false;
65
+ var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode);
66
+ (0, _term.verifyTermAsVariable)(termNode, variables, context);
67
+ 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();
68
+ var assertedTypeEqualToOrSubTypeOfVariableType = variableType === null ? true : assertedType.isEqualToOrSubTypeOf(variableType);
69
+ if (!assertedTypeEqualToOrSubTypeOfVariableType) {
70
+ proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
71
+ } else {
72
+ var derived = proofContext.isDerived();
73
+ if (!derived) {
74
+ var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
75
+ proofContext.addVariable(variable1);
76
+ }
77
+ variableTypeAssertionVerified = true;
78
+ }
79
+ return variableTypeAssertionVerified;
80
+ }
81
+
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50VHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUsIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIH0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZUFzc2VydGlvbi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGVcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50VHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbihzdGF0ZW1lbnROb2RlKTtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcHJvb2ZDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gcHJvb2ZDb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlICR7dHlwZU5hbWV9IHR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZlcmlmaWVkQXNWYXJpYWJsZSkge1xuICAgICAgICBjb25zdCB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgIHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7ICAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZUFzc2VydGlvblZlcmlmaWVkKSB7XG4gICAgcHJvb2ZDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdHlwZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZXMgPSBbXSxcbiAgICAgICAgY29udGV4dCA9IHByb29mQ29udGV4dCwgLy8vXG4gICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgPSB2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gIGlmICh0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgICBhc3NlcnRlZFR5cGVOYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgICBhc3NlcnRlZFR5cGUgPSBwcm9vZkNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKGFzc2VydGVkVHlwZU5hbWUpLFxuICAgICAgICAgIGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICB0ZXJtVHlwZSA9IGZpcnN0VHlwZSxcbiAgICAgICAgICBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSA9IGFzc2VydGVkVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0ZXJtVHlwZSk7XG5cbiAgICBpZiAoIWFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gbm9kZUFzU3RyaW5nKHRlcm1Ob2RlKTtcblxuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgZXF1YWwgdG8gb3IgYSBzdWItdHlwZSBvZiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgYXNzZXJ0ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgIGZpcnN0VmFyaWFibGUgPSBmaXJzdCh2YXJpYWJsZXMpLFxuICAgICAgICB2YXJpYWJsZSA9IGZpcnN0VmFyaWFibGUsIC8vL1xuICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZS5nZXROYW1lKCksXG4gICAgICAgIHZhcmlhYmxlVHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICBjb25zdCBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUgPSAodmFyaWFibGVUeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ZWRUeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHZhcmlhYmxlVHlwZSk7XG5cbiAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUpIHtcbiAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSBhc3NlcnRlZCB0eXBlIGlzIG5vdCBlcXVhbCB0byBvciBhIHN1Yi10eXBlIG9mIHRoZSAnJHt2YXJpYWJsZU5hbWV9JyB2YXJpYWJsZSB0eXBlLmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBwcm9vZkNvbnRleHQuaXNEZXJpdmVkKCk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBhc3NlcnRlZFR5cGUsICAvLy9cbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVR5cGVBbmROYW1lKHR5cGUsIG5hbWUpO1xuXG4gICAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICAgIH1cblxuICAgIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlTdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZSIsInByb29mQ29udGV4dCIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsImJlZ2luIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJlcnJvciIsImNvbnRleHQiLCJ0ZXJtTm9kZSIsInZhcmlhYmxlcyIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJ2ZXJpZnlUZXJtQXNWYXJpYWJsZSIsInZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uIiwidGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uIiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCIsInR5cGVzIiwidGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyIsInZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIiwiYXNzZXJ0ZWRUeXBlTmFtZSIsImFzc2VydGVkVHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsImZpcnN0VHlwZSIsImZpcnN0IiwidGVybVR5cGUiLCJhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwidGVybVN0cmluZyIsImZpcnN0VmFyaWFibGUiLCJ2YXJpYWJsZSIsInZhcmlhYmxlTmFtZSIsImdldE5hbWUiLCJ2YXJpYWJsZVR5cGUiLCJnZXRUeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVmFyaWFibGVUeXBlIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInR5cGUiLCJuYW1lIiwiVmFyaWFibGUiLCJmcm9tVHlwZUFuZE5hbWUiLCJhZGRWYXJpYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUF3QkE7Ozs2REFYSDtxQkFFQztzQkFDTztxQkFDbUI7b0JBQ29COzs7Ozs7QUFFcEUsSUFBTUMsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLHdCQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLHdCQUMxQkUseUJBQXlCRixJQUFBQSxnQkFBUyxFQUFDO0FBRTFCLFNBQVNGLDZCQUE2QkssYUFBYSxFQUFFQyxZQUFZLEVBQUU7SUFDaEYsSUFBSUMsd0JBQXdCLEtBQUs7SUFFakNELGFBQWFFLEtBQUssQ0FBQ0g7SUFFbkIsSUFBTUksa0JBQWtCQyxJQUFBQSxvQkFBWSxFQUFDTDtJQUVyQ0MsYUFBYUssS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCRixpQkFBZ0I7SUFFckQsSUFBTUcsb0JBQW9CUix1QkFBdUJDO0lBRWpELElBQUlPLHNCQUFzQixJQUFJLEVBQUU7UUFDOUIsSUFBTUMsV0FBV1YsY0FBY1Msb0JBQ3pCRSxXQUFXQyxJQUFBQSwyQkFBb0IsRUFBQ0YsV0FDaENHLGNBQWNW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
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.479",
4
+ "version": "0.0.481",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
package/src/conclusion.js CHANGED
@@ -118,6 +118,8 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
118
118
  childNodes = nonTerminalNode.getChildNodes(),
119
119
  conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
120
120
  conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
121
+ nodes = childNodes, ///
122
+ conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
121
123
  ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
122
124
  conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
123
125
 
@@ -129,16 +131,12 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
129
131
  if (conclusionMetastatementNodeMatches) {
130
132
  conclusionNonTerminalNodeMatches = true; ///
131
133
  } else {
132
- const nodes = childNodes, ///
133
- conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
134
- conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
134
+ const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
135
135
 
136
136
  conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
137
137
  }
138
138
  } else if (ruleName === conclusionNonTerminalNodeRuleName) {
139
- const nodes = childNodes, ///
140
- conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
141
- conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
139
+ const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
142
140
 
143
141
  conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
144
142
  }
@@ -146,7 +144,7 @@ function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNo
146
144
  return conclusionNonTerminalNodeMatches;
147
145
  }
148
146
 
149
- function matchConclusionMetavariableNode(conclusionMetavariableNode, nodes, substitutions) {
147
+ function matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions) {
150
148
  let conclusionMetavariableNodeMatches = true;
151
149
 
152
150
  const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
@@ -159,7 +157,7 @@ function matchConclusionMetavariableNode(conclusionMetavariableNode, nodes, subs
159
157
  }) || null;
160
158
 
161
159
  if (substitution !== null) {
162
- const substitutionNodesMatch = substitution.matchNodes(nodes);
160
+ const substitutionNodesMatch = substitution.matchStatementNode(statementNode);
163
161
 
164
162
  conclusionMetavariableNodeMatches = substitutionNodesMatch; ///
165
163
  }
@@ -186,10 +184,7 @@ function matchConclusionMetastatementNode(conclusionMetastatementNode, statement
186
184
 
187
185
  if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
188
186
  const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
189
- nonTerminalNode = statementNode, ///
190
- childNodes = nonTerminalNode.getChildNodes(),
191
- nodes = childNodes, ///
192
- conclusionMetavariableNodeMatches = matchConclusionMetavariableNode(conclusionMetavariableNode, nodes, substitutions);
187
+ conclusionMetavariableNodeMatches = matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions);
193
188
 
194
189
  conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
195
190
  }
@@ -255,47 +250,49 @@ function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTermin
255
250
  let conclusionNonTerminalNodeMatches = false;
256
251
 
257
252
  const ruleName = nonTerminalNode.getRuleName(),
258
- conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName();
259
-
260
- if (ruleName === conclusionNonTerminalNodeRuleName) {
261
- const childNodes = nonTerminalNode.getChildNodes(),
262
- conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
263
- nodes = childNodes, ///
264
- conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
265
- conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
266
-
267
- conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
253
+ childNodes = nonTerminalNode.getChildNodes(),
254
+ conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
255
+ conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
256
+ nodes = childNodes, ///
257
+ conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
258
+ ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME),
259
+ conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
268
260
 
269
- if (!conclusionNonTerminalNodeMatches) {
270
- const ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME);
261
+ if (ruleNameMetastatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
262
+ const statementNode = nonTerminalNode, ///
263
+ conclusionMetastatementNode = conclusionNonTerminalNode, ///
264
+ conclusionMetastatementNodeMatches = metaMatchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, metaSubstitutions);
271
265
 
272
- if (ruleNameMetastatementRuleName) {
273
- const metastatementNode = nonTerminalNode, ///
274
- conclusionMetastatementNode = conclusionNonTerminalNode, ///
275
- conclusionMetastatementNodeMatches = metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions);
266
+ if (conclusionMetastatementNodeMatches) {
267
+ conclusionNonTerminalNodeMatches = true; ///
268
+ } else {
269
+ const conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
276
270
 
277
- conclusionNonTerminalNodeMatches = conclusionMetastatementNodeMatches; ///
278
- }
271
+ conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
279
272
  }
273
+ } else if (ruleName === conclusionNonTerminalNodeRuleName) {
274
+ const conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
275
+
276
+ conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
280
277
  }
281
278
 
282
279
  return conclusionNonTerminalNodeMatches;
283
280
  }
284
281
 
285
- function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions) {
282
+ function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions) {
286
283
  let conclusionMetavariableNodeMatches = true;
287
284
 
288
285
  const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
289
286
  metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
290
- const metavariableName = metaSubstitution.getMetavariableName();
287
+ const metavariableName = metaSubstitution.getMetavariableName();
291
288
 
292
- if (metavariableName === conclusionMetavariableName) {
293
- return true;
294
- }
295
- }) || null;
289
+ if (metavariableName === conclusionMetavariableName) {
290
+ return true;
291
+ }
292
+ }) || null;
296
293
 
297
294
  if (metaSubstitution !== null) {
298
- const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
295
+ const metaSubstitutionNodesMatch = metaSubstitution.matchMetastatementNode(metastatementNode);
299
296
 
300
297
  conclusionMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
301
298
  }
@@ -322,10 +319,7 @@ function metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metas
322
319
 
323
320
  if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
324
321
  const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
325
- nonTerminalNode = metastatementNode, ///
326
- childNodes = nonTerminalNode.getChildNodes(),
327
- nodes = childNodes, ///
328
- conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions);
322
+ conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions);
329
323
 
330
324
  conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
331
325
  }
package/src/constants.js CHANGED
@@ -7,6 +7,7 @@ export const BOOLEAN = "boolean";
7
7
  export const EMPTY_STRING = "";
8
8
  export const LEFT_BRACKET = "(";
9
9
  export const RIGHT_BRACKET = ")";
10
+ export const EQUALS_CHARACTER = "=";
10
11
  export const MAXIMUM_INDEXES_LENGTH = 10;
11
12
  export const MAXIMUM_PERMUTATION_LENGTH = 5;
12
13
  export const BRACKETED_CHILD_NODES_LENGTH = 3;
package/src/equality.js CHANGED
@@ -2,10 +2,11 @@
2
2
 
3
3
  import { nodeQuery } from "./utilities/query";
4
4
  import { TERM_RULE_NAME } from "./ruleNames";
5
+ import { EQUALS_CHARACTER } from "./constants";
5
6
 
6
- const equalityNodeQuery = nodeQuery("/statement/equality!"),
7
- leftTermNodeQuery = nodeQuery("/equality/term[0]"),
8
- rightTermNodeQuery = nodeQuery("/equality/term[1]");
7
+ const specialNodeQuery = nodeQuery("/statement/@special!"),
8
+ leftTermNodeQuery = nodeQuery("/statement/term[0]"),
9
+ rightTermNodeQuery = nodeQuery("/statement/term[1]");
9
10
 
10
11
  export default class Equality {
11
12
  constructor(leftTermNode, rightTermNode) {
@@ -85,23 +86,20 @@ export default class Equality {
85
86
  const statementNode = proofStep.getStatementNode();
86
87
 
87
88
  if (statementNode !== null) {
88
- const equalityNode = equalityNodeQuery(statementNode);
89
+ const specialNode = specialNodeQuery(statementNode);
89
90
 
90
- if (equalityNode !== null) {
91
- const leftTermNode = leftTermNodeQuery(equalityNode),
92
- rightTermNode = rightTermNodeQuery(equalityNode);
91
+ if (specialNode !== null) {
92
+ const terminalNode = specialNode, ///
93
+ terminalNodeContent = terminalNode.getContent();
93
94
 
94
- equality = new Equality(leftTermNode, rightTermNode);
95
- }
96
- }
95
+ if (terminalNodeContent === EQUALS_CHARACTER) {
96
+ const leftTermNode = leftTermNodeQuery(statementNode),
97
+ rightTermNode = rightTermNodeQuery(statementNode);
97
98
 
98
- return equality;
99
- }
100
-
101
- static fromEqualityNode(equalityNode) {
102
- const leftTermNode = leftTermNodeQuery(equalityNode),
103
- rightTermNode = rightTermNodeQuery(equalityNode),
104
99
  equality = new Equality(leftTermNode, rightTermNode);
100
+ }
101
+ }
102
+ }
105
103
 
106
104
  return equality;
107
105
  }
@@ -1,58 +1,62 @@
1
1
  "use strict";
2
2
 
3
- import { matchNodes, bracketedChildNodeFromChildNodes } from "./utilities/node";
3
+ import { METASTATEMENT_RULE_NAME } from "./ruleNames";
4
+ import { matchNode, bracketedNonTerminalChildNodeFromChildNodes } from "./utilities/node";
4
5
 
5
6
  export default class MetaSubstitution {
6
- constructor(metavariableName, nodes) {
7
+ constructor(metavariableName, metastatementNode) {
7
8
  this.metavariableName = metavariableName;
8
- this.nodes = nodes;
9
+ this.metastatementNode = metastatementNode;
9
10
  }
10
11
 
11
12
  getMetavariableName() {
12
13
  return this.metavariableName;
13
14
  }
14
15
 
15
- getNodes() {
16
- return this.nodes;
16
+ getMetastatementNode() {
17
+ return this.metastatementNode;
17
18
  }
18
19
 
19
- matchNodes(nodes) {
20
- let matches;
20
+ matchMetastatementNode(metastatementNode) {
21
+ let matchesMetastatementNode;
21
22
 
22
- const nodesA = this.nodes, ///
23
- nodesB = nodes,
24
- nodesMatch = matchNodes(nodesA, nodesB);
23
+ const nodeA = this.metastatementNode, ///
24
+ nodeB = metastatementNode,
25
+ nodeMatches = matchNode(nodeA, nodeB);
25
26
 
26
- matches = nodesMatch; ///
27
+ matchesMetastatementNode = nodeMatches; ///
27
28
 
28
- if (!matches) {
29
- const childNodes = nodes, ///
30
- bracketedChildNode = bracketedChildNodeFromChildNodes(childNodes);
29
+ if (!matchesMetastatementNode) {
30
+ const nonTerminalNode = metastatementNode, ///
31
+ childNodes = nonTerminalNode.getChildNodes(), ///
32
+ ruleName = METASTATEMENT_RULE_NAME;
31
33
 
32
- if (bracketedChildNode !== null) {
33
- const nonTerminalNode = bracketedChildNode, ///
34
- childNodes = nonTerminalNode.getChildNodes(),
35
- nodesB = childNodes, ///
36
- nodesMatch = matchNodes(nodesA, nodesB);
34
+ metastatementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
37
35
 
38
- matches = nodesMatch; ///
36
+ if (metastatementNode !== null) {
37
+ const nodeA = this.metastatementNode, ///
38
+ nodeB = metastatementNode,
39
+ nodeMatches = matchNode(nodeA, nodeB);
40
+
41
+ matchesMetastatementNode = nodeMatches; ///
39
42
  }
40
43
  }
41
44
 
42
- return matches;
45
+ return matchesMetastatementNode;
43
46
  }
44
47
 
45
- static fromMetavariableNameAndNodes(metavariableName, nodes) {
46
- const bracketedChildNode = bracketedChildNodeFromChildNodes(nodes);
48
+ static fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode) {
49
+ let metaSubstitution = new MetaSubstitution(metavariableName, metastatementNode);
47
50
 
48
- if (bracketedChildNode !== null) {
49
- const nonTerminalNode = bracketedChildNode, ///
50
- childNodes = nonTerminalNode.getChildNodes();
51
+ const nonTerminalNode = metastatementNode, ///
52
+ childNodes = nonTerminalNode.getChildNodes(),
53
+ ruleName = METASTATEMENT_RULE_NAME;
51
54
 
52
- nodes = childNodes; ///
53
- }
55
+ metastatementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
54
56
 
55
- const metaSubstitution = new MetaSubstitution(metavariableName, nodes);
57
+ if (metastatementNode !== null) {
58
+ metaSubstitution = new MetaSubstitution(metavariableName, metastatementNode);
59
+ }
56
60
 
57
61
  return metaSubstitution;
58
62
  }