occam-verify-cli 0.0.479 → 0.0.480

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.480",
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
  }
@@ -282,7 +277,7 @@ function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTermin
282
277
  return conclusionNonTerminalNodeMatches;
283
278
  }
284
279
 
285
- function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions) {
280
+ function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions) {
286
281
  let conclusionMetavariableNodeMatches = true;
287
282
 
288
283
  const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
@@ -295,7 +290,7 @@ function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes,
295
290
  }) || null;
296
291
 
297
292
  if (metaSubstitution !== null) {
298
- const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
293
+ const metaSubstitutionNodesMatch = metaSubstitution.matchMetastatementNode(metastatementNode);
299
294
 
300
295
  conclusionMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
301
296
  }
@@ -322,10 +317,7 @@ function metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metas
322
317
 
323
318
  if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
324
319
  const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
325
- nonTerminalNode = metastatementNode, ///
326
- childNodes = nonTerminalNode.getChildNodes(),
327
- nodes = childNodes, ///
328
- conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, nodes, metaSubstitutions);
320
+ conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions);
329
321
 
330
322
  conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
331
323
  }
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
  }