occam-verify-cli 0.0.502 → 0.0.504
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/axiom.js +4 -4
- package/lib/axiomLemmaTheorem.js +58 -58
- package/lib/consequence.js +157 -0
- package/lib/lemma.js +4 -4
- package/lib/metaSupposition.js +214 -0
- package/lib/supposition.js +214 -0
- package/lib/theorem.js +4 -4
- package/lib/verify/axiom.js +11 -11
- package/lib/verify/consequence.js +35 -0
- package/lib/verify/derivation.js +7 -7
- package/lib/verify/lemma.js +12 -12
- package/lib/verify/metaDerivation.js +7 -7
- package/lib/verify/metaSupposition.js +41 -0
- package/lib/verify/supposition.js +41 -0
- package/lib/verify/theorem.js +12 -12
- package/package.json +3 -3
- package/src/axiom.js +1 -1
- package/src/axiomLemmaTheorem.js +57 -57
- package/src/consequence.js +187 -0
- package/src/lemma.js +1 -1
- package/src/metaSupposition.js +235 -0
- package/src/supposition.js +235 -0
- package/src/theorem.js +1 -1
- package/src/verify/axiom.js +17 -17
- package/src/verify/consequence.js +34 -0
- package/src/verify/derivation.js +8 -8
- package/src/verify/lemma.js +18 -18
- package/src/verify/metaDerivation.js +8 -8
- package/src/verify/metaSupposition.js +44 -0
- package/src/verify/supposition.js +44 -0
- package/src/verify/theorem.js +18 -18
- package/lib/antecedent.js +0 -214
- package/lib/consequent.js +0 -157
- package/lib/metaAntecedent.js +0 -214
- package/lib/verify/antecedent.js +0 -41
- package/lib/verify/consequent.js +0 -35
- package/lib/verify/metaAntecedent.js +0 -41
- package/src/antecedent.js +0 -235
- package/src/consequent.js +0 -187
- package/src/metaAntecedent.js +0 -235
- package/src/verify/antecedent.js +0 -44
- package/src/verify/consequent.js +0 -34
- package/src/verify/metaAntecedent.js +0 -44
package/lib/metaAntecedent.js
DELETED
|
@@ -1,214 +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 MetaAntecedent;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _metaSubstitution = /*#__PURE__*/ _interopRequireDefault(require("./metaSubstitution"));
|
|
12
|
-
var _array = require("./utilities/array");
|
|
13
|
-
var _string = require("./utilities/string");
|
|
14
|
-
var _query = require("./utilities/query");
|
|
15
|
-
var _ruleNames = require("./ruleNames");
|
|
16
|
-
function _arrayLikeToArray(arr, len) {
|
|
17
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
18
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
19
|
-
return arr2;
|
|
20
|
-
}
|
|
21
|
-
function _arrayWithoutHoles(arr) {
|
|
22
|
-
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
23
|
-
}
|
|
24
|
-
function _classCallCheck(instance, Constructor) {
|
|
25
|
-
if (!(instance instanceof Constructor)) {
|
|
26
|
-
throw new TypeError("Cannot call a class as a function");
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function _defineProperties(target, props) {
|
|
30
|
-
for(var i = 0; i < props.length; i++){
|
|
31
|
-
var descriptor = props[i];
|
|
32
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
33
|
-
descriptor.configurable = true;
|
|
34
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
35
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
39
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
40
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
41
|
-
return Constructor;
|
|
42
|
-
}
|
|
43
|
-
function _interopRequireDefault(obj) {
|
|
44
|
-
return obj && obj.__esModule ? obj : {
|
|
45
|
-
default: obj
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function _iterableToArray(iter) {
|
|
49
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
50
|
-
}
|
|
51
|
-
function _nonIterableSpread() {
|
|
52
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
53
|
-
}
|
|
54
|
-
function _toConsumableArray(arr) {
|
|
55
|
-
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
56
|
-
}
|
|
57
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
58
|
-
if (!o) return;
|
|
59
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
60
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
61
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
62
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
63
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
64
|
-
}
|
|
65
|
-
var metastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproofAssertion/metastatement"), metaSubproofAssertionNodeQuery = (0, _query.nodeQuery)("/metastatement/metaSubproofAssertion!"), unqualifiedMetastatementMetastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproof/unqualifiedMetastatement/metastatement!"), qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = (0, _query.nodeQuery)("/metaSubproof/subDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
|
|
66
|
-
var MetaAntecedent = /*#__PURE__*/ function() {
|
|
67
|
-
function MetaAntecedent(metastatementNode) {
|
|
68
|
-
_classCallCheck(this, MetaAntecedent);
|
|
69
|
-
this.metastatementNode = metastatementNode;
|
|
70
|
-
}
|
|
71
|
-
_createClass(MetaAntecedent, [
|
|
72
|
-
{
|
|
73
|
-
key: "getMetastatementNode",
|
|
74
|
-
value: function getMetastatementNode() {
|
|
75
|
-
return this.metastatementNode;
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
key: "matchSubproofNode",
|
|
80
|
-
value: function matchSubproofNode(metaSubproofNode, metaSubstitutions) {
|
|
81
|
-
var metaSubproofNodeMatches = false;
|
|
82
|
-
var metaSubproofAssertionNode = metaSubproofAssertionNodeQuery(this.metastatementNode);
|
|
83
|
-
if (metaSubproofAssertionNode !== null) {
|
|
84
|
-
var metaSubproofAssertionMetastatementNodes = metastatementNodesQuery(metaSubproofAssertionNode), unqualifiedMetastatementMetastatementNodes = unqualifiedMetastatementMetastatementNodesQuery(metaSubproofNode), qualifiedOrUnqualifiedMetastatementMetastatementNode = qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery(metaSubproofNode), metastatementNodes = _toConsumableArray(unqualifiedMetastatementMetastatementNodes).concat([
|
|
85
|
-
qualifiedOrUnqualifiedMetastatementMetastatementNode
|
|
86
|
-
]), metastatementNodesLength = metastatementNodes.length, metaSubproofAssertionMetastatementNodesLength = metaSubproofAssertionMetastatementNodes.length;
|
|
87
|
-
if (metastatementNodesLength === metaSubproofAssertionMetastatementNodesLength) {
|
|
88
|
-
metaSubproofNodeMatches = metaSubproofAssertionMetastatementNodes.every(function(metaSubproofAssertionMetastatementNode, index) {
|
|
89
|
-
var metastatementNode = metastatementNodes[index], nonTerminalNode = metastatementNode, metaAntecedentNonTerminalNode = metaSubproofAssertionMetastatementNode, metaAntecedentNonTerminalNodeMatches = matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
90
|
-
if (metaAntecedentNonTerminalNodeMatches) {
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return metaSubproofNodeMatches;
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
key: "matchMetastatementNode",
|
|
101
|
-
value: function matchMetastatementNode(metastatementNode, metaSubstitutions) {
|
|
102
|
-
var nonTerminalNode = metastatementNode, metaAntecedentNonTerminalNode = this.metastatementNode, metaAntecedentNonTerminalNodeMatches = matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions), metastatementNodeMatches = metaAntecedentNonTerminalNodeMatches; ///
|
|
103
|
-
return metastatementNodeMatches;
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
key: "toJSON",
|
|
108
|
-
value: function toJSON() {
|
|
109
|
-
var metastatementString = (0, _string.nodeAsString)(this.metastatementNode), metastatement = metastatementString, json = {
|
|
110
|
-
metastatement: metastatement
|
|
111
|
-
};
|
|
112
|
-
return json;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
], [
|
|
116
|
-
{
|
|
117
|
-
key: "fromJSON",
|
|
118
|
-
value: function fromJSON(json, releaseContext) {
|
|
119
|
-
var metastatement = json.metastatement, metastatementString = metastatement, metastatementNode = (0, _string.metastatementNodeFromMetastatementString)(metastatementString, releaseContext), metaAntecedent = new MetaAntecedent(metastatementNode);
|
|
120
|
-
return metaAntecedent;
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
key: "fromMetastatementNode",
|
|
125
|
-
value: function fromMetastatementNode(metastatementNode) {
|
|
126
|
-
var metaAntecedent = new MetaAntecedent(metastatementNode);
|
|
127
|
-
return metaAntecedent;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
]);
|
|
131
|
-
return MetaAntecedent;
|
|
132
|
-
}();
|
|
133
|
-
function matchMetaAntecedentNode(metaAntecedentNode, node, metaSubstitutions) {
|
|
134
|
-
var metaAntecedentNodeMatches = false;
|
|
135
|
-
var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = metaAntecedentNode.isTerminalNode();
|
|
136
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
137
|
-
if (nodeTerminalNode) {
|
|
138
|
-
var terminalNode = node, metaAntecedentTerminalNode = metaAntecedentNode, metaAntecedentTerminalNodeMatches = matchMetaAntecedentTerminalNode(metaAntecedentTerminalNode, terminalNode, metaSubstitutions);
|
|
139
|
-
metaAntecedentNodeMatches = metaAntecedentTerminalNodeMatches; ///
|
|
140
|
-
} else {
|
|
141
|
-
var nonTerminalNode = node, metaAntecedentNonTerminalNode = metaAntecedentNode, metaAntecedentNonTerminalNodeMatches = matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
142
|
-
metaAntecedentNodeMatches = metaAntecedentNonTerminalNodeMatches; ///
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return metaAntecedentNodeMatches;
|
|
146
|
-
}
|
|
147
|
-
function matchMetaAntecedentNodes(metaAntecedentNodes, nodes, metaSubstitutions) {
|
|
148
|
-
var metaAntecedentNodesMatches = false;
|
|
149
|
-
var nodesLength = nodes.length, metaAntecedentNodesLength = metaAntecedentNodes.length;
|
|
150
|
-
if (nodesLength === metaAntecedentNodesLength) {
|
|
151
|
-
metaAntecedentNodesMatches = nodes.every(function(node, index) {
|
|
152
|
-
var metaAntecedentNode = metaAntecedentNodes[index], metaAntecedentNodeMatches = matchMetaAntecedentNode(metaAntecedentNode, node, metaSubstitutions);
|
|
153
|
-
if (metaAntecedentNodeMatches) {
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
return metaAntecedentNodesMatches;
|
|
159
|
-
}
|
|
160
|
-
function matchMetaAntecedentMetavariable(metaAntecedentMetavariableNode, nodes, metaSubstitutions) {
|
|
161
|
-
var metaAntecedentMetavariableMatches;
|
|
162
|
-
var metaAntecedentMetavariableName = (0, _query.metavariableNameFromMetavariableNode)(metaAntecedentMetavariableNode), metaSubstitution = metaSubstitutions.find(function(metaSubstitution) {
|
|
163
|
-
var metavariableName = metaSubstitution.getMetavariableName();
|
|
164
|
-
if (metavariableName === metaAntecedentMetavariableName) {
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
|
-
}) || null;
|
|
168
|
-
if (metaSubstitution !== null) {
|
|
169
|
-
var metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
|
|
170
|
-
metaAntecedentMetavariableMatches = metaSubstitutionNodesMatch; ///
|
|
171
|
-
} else {
|
|
172
|
-
var metavariableName = metaAntecedentMetavariableName, metaSubstitution1 = _metaSubstitution.default.fromMetavariableNameAndNodes(metavariableName, nodes);
|
|
173
|
-
metaSubstitutions.push(metaSubstitution1);
|
|
174
|
-
metaAntecedentMetavariableMatches = true;
|
|
175
|
-
}
|
|
176
|
-
return metaAntecedentMetavariableMatches;
|
|
177
|
-
}
|
|
178
|
-
function matchMetaAntecedentTerminalNode(metaAntecedentTerminalNode, terminalNode, metaSubstitutions) {
|
|
179
|
-
var matches = metaAntecedentTerminalNode.match(terminalNode), metaAntecedentTerminalNodeMatches = matches;
|
|
180
|
-
return metaAntecedentTerminalNodeMatches;
|
|
181
|
-
}
|
|
182
|
-
function matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
183
|
-
var metaAntecedentNonTerminalNodeMatches = false;
|
|
184
|
-
var ruleName = nonTerminalNode.getRuleName(), metaAntecedentRuleName = metaAntecedentNonTerminalNode.getRuleName(); ///
|
|
185
|
-
if (ruleName === metaAntecedentRuleName) {
|
|
186
|
-
var childNodes = nonTerminalNode.getChildNodes(), metaAntecedentChildNodes = metaAntecedentNonTerminalNode.getChildNodes(), nodes = childNodes, metaAntecedentNodes = metaAntecedentChildNodes, metaAntecedentChildNodesMatches = matchMetaAntecedentNodes(metaAntecedentNodes, nodes, metaSubstitutions);
|
|
187
|
-
metaAntecedentNonTerminalNodeMatches = metaAntecedentChildNodesMatches; ///
|
|
188
|
-
if (!metaAntecedentNonTerminalNodeMatches) {
|
|
189
|
-
var ruleNameMetastatementRuleName = ruleName === _ruleNames.METASTATEMENT_RULE_NAME;
|
|
190
|
-
if (ruleNameMetastatementRuleName) {
|
|
191
|
-
var metastatementNode = nonTerminalNode, metaAntecedentMetastatementNode = metaAntecedentNonTerminalNode, metaAntecedentMetastatementNodeMatches = matchMetaAntecedentMetastatementNode(metaAntecedentMetastatementNode, metastatementNode, metaSubstitutions);
|
|
192
|
-
metaAntecedentNonTerminalNodeMatches = metaAntecedentMetastatementNodeMatches; ///
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return metaAntecedentNonTerminalNodeMatches;
|
|
197
|
-
}
|
|
198
|
-
function matchMetaAntecedentMetastatementNode(metaAntecedentMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
199
|
-
var metaAntecedentMetastatementNodeMatches = false;
|
|
200
|
-
var metaAntecedentNonTerminalNode = metaAntecedentMetastatementNode, metaAntecedentChildNodes = metaAntecedentNonTerminalNode.getChildNodes(), metaAntecedentChildNodesLength = metaAntecedentChildNodes.length;
|
|
201
|
-
if (metaAntecedentChildNodesLength === 1) {
|
|
202
|
-
var firstMetaAntecedentChildNode = (0, _array.first)(metaAntecedentChildNodes), metaAntecedentChildNode = firstMetaAntecedentChildNode, metaAntecedentChildNodeNonTerminalNode = metaAntecedentChildNode.isNonTerminalNode();
|
|
203
|
-
if (metaAntecedentChildNodeNonTerminalNode) {
|
|
204
|
-
var metaAntecedentNonTerminalChildNode = metaAntecedentChildNode, metaAntecedentNonTerminalChildNodeRuleName = metaAntecedentNonTerminalChildNode.getRuleName(), metaAntecedentNonTerminalChildNodeRuleNameMetavariableRuleName = metaAntecedentNonTerminalChildNodeRuleName === _ruleNames.METAVARIABLE_RULE_NAME;
|
|
205
|
-
if (metaAntecedentNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
206
|
-
var metaAntecedentMetavariableNode = metaAntecedentNonTerminalChildNode, nonTerminalNode = metastatementNode, childNodes = nonTerminalNode.getChildNodes(), nodes = childNodes, metaAntecedentMetavariableMatches = matchMetaAntecedentMetavariable(metaAntecedentMetavariableNode, nodes, metaSubstitutions);
|
|
207
|
-
metaAntecedentMetastatementNodeMatches = metaAntecedentMetavariableMatches; ///
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return metaAntecedentMetastatementNodeMatches;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhQW50ZWNlZGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1ldGFTdWJzdGl0dXRpb24gZnJvbSBcIi4vbWV0YVN1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FLCBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuL3J1bGVOYW1lc1wiO1xuXG5jb25zdCBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvbWV0YVN1YnByb29mQXNzZXJ0aW9uL21ldGFzdGF0ZW1lbnRcIiksXG4gICAgICBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXN0YXRlbWVudC9tZXRhU3VicHJvb2ZBc3NlcnRpb24hXCIpLFxuICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL21ldGFTdWJwcm9vZi91bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQvbWV0YXN0YXRlbWVudCFcIiksXG4gICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YVN1YnByb29mL3N1YkRlcml2YXRpb24vcXVhbGlmaWVkTWV0YXN0YXRlbWVudHx1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRbLTFdL21ldGFzdGF0ZW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhQW50ZWNlZGVudCB7XG4gIGNvbnN0cnVjdG9yKG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgdGhpcy5tZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXN0YXRlbWVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBtYXRjaFN1YnByb29mTm9kZShtZXRhU3VicHJvb2ZOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICAgIGxldCBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMgPSBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeShtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlcyA9IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KG1ldGFTdWJwcm9vZk5vZGUpLFxuICAgICAgICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSA9IHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVRdWVyeShtZXRhU3VicHJvb2ZOb2RlKSxcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlcyA9IFtcbiAgICAgICAgICAgICAgLi4udW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzLFxuICAgICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoID0gbWV0YXN0YXRlbWVudE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChtZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGggPT09IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCkge1xuICAgICAgICBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcyA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5ldmVyeSgobWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YVN1YnByb29mTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGUgPSB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZShtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbWV0YXN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50ID0gbWV0YXN0YXRlbWVudFN0cmluZywgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgcmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IG1ldGFzdGF0ZW1lbnQgfSA9IGpzb24sXG4gICAgICAgICAgbWV0YXN0YXRlbWVudFN0cmluZyA9IG1ldGFzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcobWV0YXN0YXRlbWVudFN0cmluZywgcmVsZWFzZUNvbnRleHQpLFxuICAgICAgICAgIG1ldGFBbnRlY2VkZW50ID0gbmV3IE1ldGFBbnRlY2VkZW50KG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBtZXRhQW50ZWNlZGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBtZXRhQW50ZWNlZGVudCA9IG5ldyBNZXRhQW50ZWNlZGVudChtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YUFudGVjZWRlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQW50ZWNlZGVudE5vZGUobWV0YUFudGVjZWRlbnROb2RlLCBub2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgbWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIHJ1bGVOb2RlVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnROb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgbWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyA9IG1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlTWF0Y2hlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgbWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyA9IG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50Tm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YUFudGVjZWRlbnROb2RlcyhtZXRhQW50ZWNlZGVudE5vZGVzLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFBbnRlY2VkZW50Tm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG1ldGFBbnRlY2VkZW50Tm9kZXNMZW5ndGggPSBtZXRhQW50ZWNlZGVudE5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IG1ldGFBbnRlY2VkZW50Tm9kZXNMZW5ndGgpIHtcbiAgICBtZXRhQW50ZWNlZGVudE5vZGVzTWF0Y2hlcyA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWV0YUFudGVjZWRlbnROb2RlID0gbWV0YUFudGVjZWRlbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhQW50ZWNlZGVudE5vZGUobWV0YUFudGVjZWRlbnROb2RlLCBub2RlLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIGlmIChtZXRhQW50ZWNlZGVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50Tm9kZXNNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlKG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTm9kZSwgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU1hdGNoZXM7XG5cbiAgY29uc3QgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIG1ldGFTdWJzdGl0dXRpb24gPSBtZXRhU3Vic3RpdHV0aW9ucy5maW5kKChtZXRhU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGFTdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5hbWUgPT09IG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChtZXRhU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2ggPSBtZXRhU3Vic3RpdHV0aW9uLm1hdGNoTm9kZXMobm9kZXMpO1xuXG4gICAgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVNYXRjaGVzID0gbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2g7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOYW1lLCAvLy9cbiAgICAgICAgICBtZXRhU3Vic3RpdHV0aW9uID0gTWV0YVN1YnN0aXR1dGlvbi5mcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzKG1ldGF2YXJpYWJsZU5hbWUsIG5vZGVzKTtcblxuICAgIG1ldGFTdWJzdGl0dXRpb25zLnB1c2gobWV0YVN1YnN0aXR1dGlvbik7XG5cbiAgICBtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZShtZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBtYXRjaGVzID0gbWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGUubWF0Y2godGVybWluYWxOb2RlKSxcbiAgICAgICAgbWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hlcztcblxuICByZXR1cm4gbWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBtZXRhQW50ZWNlZGVudFJ1bGVOYW1lID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgaWYgKHJ1bGVOYW1lID09PSBtZXRhQW50ZWNlZGVudFJ1bGVOYW1lKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnRDaGlsZE5vZGVzID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnROb2RlcyA9IG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnRDaGlsZE5vZGVzTWF0Y2hlcyA9IG1hdGNoTWV0YUFudGVjZWRlbnROb2RlcyhtZXRhQW50ZWNlZGVudE5vZGVzLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YUFudGVjZWRlbnRDaGlsZE5vZGVzTWF0Y2hlczsgLy8vXG5cbiAgICBpZiAoIW1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlcykge1xuICAgICAgY29uc3QgcnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZShtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgIG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzOyAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGUobWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBtZXRhQW50ZWNlZGVudENoaWxkTm9kZXMgPSBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIG1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlc0xlbmd0aCA9IG1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGZpcnN0TWV0YUFudGVjZWRlbnRDaGlsZE5vZGUgPSBmaXJzdChtZXRhQW50ZWNlZGVudENoaWxkTm9kZXMpLFxuICAgICAgICAgIG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlID0gZmlyc3RNZXRhQW50ZWNlZGVudENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnRDaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChtZXRhQW50ZWNlZGVudENoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbENoaWxkTm9kZSA9IG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPSBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSA9IChtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPT09IE1FVEFWQVJJQUJMRV9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAobWV0YUFudGVjZWRlbnROb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOb2RlID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVNYXRjaGVzID0gbWF0Y2hNZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZShtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU5vZGUsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgbWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6WyJNZXRhQW50ZWNlZGVudCIsIm1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5IiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5IiwibWV0YXN0YXRlbWVudE5vZGUiLCJnZXRNZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoU3VicHJvb2ZOb2RlIiwibWV0YVN1YnByb29mTm9kZSIsIm1ldGFTdWJzdGl0dXRpb25zIiwibWV0YVN1YnByb29mTm9kZU1hdGNoZXMiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzIiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzIiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlcyIsIm1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImV2ZXJ5IiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJpbmRleCIsIm5vblRlcm1pbmFsTm9kZSIsIm1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlIiwibWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJ0b0pTT04iLCJtZXRhc3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwibWV0YXN0YXRlbWVudCIsImpzb24iLCJmcm9tSlNPTiIsInJlbGVhc2VDb250ZXh0IiwibWV0YXN0YXRlbWVudE5vZGVGcm9tTWV0YXN0YXRlbWVudFN0cmluZyIsIm1ldGFBbnRlY2VkZW50IiwiZnJvbU1ldGFzdGF0ZW1lbnROb2RlIiwibWF0Y2hNZXRhQW50ZWNlZGVudE5vZGUiLCJtZXRhQW50ZWNlZGVudE5vZGUiLCJub2RlIiwibWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyIsIm5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInJ1bGVOb2RlVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwibWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGUiLCJtZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlIiwibWF0Y2hNZXRhQW50ZWNlZGVudE5vZGVzIiwibWV0YUFudGVjZWRlbnROb2RlcyIsIm5vZGVzIiwibWV0YUFudGVjZWRlbnROb2Rlc01hdGNoZXMiLCJub2Rlc0xlbmd0aCIsIm1ldGFBbnRlY2VkZW50Tm9kZXNMZW5ndGgiLCJtYXRjaE1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlIiwibWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOb2RlIiwibWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVNYXRjaGVzIiwibWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YVN1YnN0aXR1dGlvbiIsImZpbmQiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoIiwibWF0Y2hOb2RlcyIsIk1ldGFTdWJzdGl0dXRpb24iLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzIiwicHVzaCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJtZXRhQW50ZWNlZGVudFJ1bGVOYW1lIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJtZXRhQW50ZWNlZGVudENoaWxkTm9kZXMiLCJtZXRhQW50ZWNlZGVudENoaWxkTm9kZXNNYXRjaGVzIiwicnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUiLCJNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSIsIm1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlc0xlbmd0aCIsImZpcnN0TWV0YUFudGVjZWRlbnRDaGlsZE5vZGUiLCJmaXJzdCIsIm1ldGFBbnRlY2VkZW50Q2hpbGROb2RlIiwibWV0YUFudGVjZWRlbnRDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUiLCJpc05vblRlcm1pbmFsTm9kZSIsIm1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxDaGlsZE5vZGUiLCJtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUiLCJtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSIsIk1FVEFWQVJJQUJMRV9SVUxFX05BTUUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBZ0JxQkE7OztxRUFkUTtxQkFFUDtzQkFDTztxQkFDUzt5QkFHMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhFLElBQU1DLDBCQUEwQkMsSUFBQUEsaUJBQVUsRUFBQyx5Q0FDckNDLGlDQUFpQ0MsSUFBQUEsZ0JBQVMsRUFBQywwQ0FDM0NDLGtEQUFrREgsSUFBQUEsaUJBQVUsRUFBQywwREFDN0RJLDREQUE0REYsSUFBQUEsZ0JBQVMsRUFBQztBQUU3RCxJQUFBLEFBQU1KLCtCQTZFbEIsQUE3RVk7YUFBTUEsZUFDUE8saUJBQWlCOzhCQURWUDtRQUVqQixJQUFJLENBQUNPLGlCQUFpQixHQUFHQTs7aUJBRlJQOztZQUtuQlEsS0FBQUE7bUJBQUFBLFNBQUFBLHVCQUF1QjtnQkFDckIsT0FBTyxJQUFJLENBQUNELGlCQUFpQjtZQUMv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
|
package/lib/verify/antecedent.js
DELETED
|
@@ -1,41 +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 verifyAntecedent;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _proof = /*#__PURE__*/ _interopRequireDefault(require("../step/proof"));
|
|
12
|
-
var _antecedent = /*#__PURE__*/ _interopRequireDefault(require("../antecedent"));
|
|
13
|
-
var _statement = /*#__PURE__*/ _interopRequireDefault(require("./statement"));
|
|
14
|
-
var _query = require("../utilities/query");
|
|
15
|
-
var _string = require("../utilities/string");
|
|
16
|
-
function _interopRequireDefault(obj) {
|
|
17
|
-
return obj && obj.__esModule ? obj : {
|
|
18
|
-
default: obj
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var statementNodeQuery = (0, _query.nodeQuery)("/antecedent/unqualifiedStatement!/statement!");
|
|
22
|
-
function verifyAntecedent(antecedentNode, antecedents, proofContext) {
|
|
23
|
-
var antecedentVerified;
|
|
24
|
-
proofContext.begin(antecedentNode);
|
|
25
|
-
var antecedentString = (0, _string.nodeAsString)(antecedentNode);
|
|
26
|
-
proofContext.debug("Verifying the ".concat(antecedentString, " antecedent..."));
|
|
27
|
-
var statementNode = statementNodeQuery(antecedentNode);
|
|
28
|
-
if (statementNode !== null) {
|
|
29
|
-
var qualified = false, statementVerified = (0, _statement.default)(statementNode, qualified, proofContext);
|
|
30
|
-
if (statementVerified) {
|
|
31
|
-
var proofStep = _proof.default.fromStatementNode(statementNode), antecedent = _antecedent.default.fromStatementNode(statementNode);
|
|
32
|
-
antecedents.push(antecedent);
|
|
33
|
-
proofContext.addProofStep(proofStep);
|
|
34
|
-
}
|
|
35
|
-
antecedentVerified = true;
|
|
36
|
-
}
|
|
37
|
-
antecedentVerified ? proofContext.complete(antecedentNode) : proofContext.halt(antecedentNode);
|
|
38
|
-
return antecedentVerified;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvYW50ZWNlZGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFByb29mU3RlcCBmcm9tIFwiLi4vc3RlcC9wcm9vZlwiO1xuaW1wb3J0IEFudGVjZWRlbnQgZnJvbSBcIi4uL2FudGVjZWRlbnRcIjtcbmltcG9ydCB2ZXJpZnlTdGF0ZW1lbnQgZnJvbSBcIi4vc3RhdGVtZW50XCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmNvbnN0IHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hbnRlY2VkZW50L3VucXVhbGlmaWVkU3RhdGVtZW50IS9zdGF0ZW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlBbnRlY2VkZW50KGFudGVjZWRlbnROb2RlLCBhbnRlY2VkZW50cywgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBhbnRlY2VkZW50VmVyaWZpZWQ7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKGFudGVjZWRlbnROb2RlKTtcblxuICBjb25zdCBhbnRlY2VkZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKGFudGVjZWRlbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJHthbnRlY2VkZW50U3RyaW5nfSBhbnRlY2VkZW50Li4uYCk7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShhbnRlY2VkZW50Tm9kZSk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBmYWxzZSxcbiAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IHByb29mU3RlcCA9IFByb29mU3RlcC5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgIGFudGVjZWRlbnQgPSBBbnRlY2VkZW50LmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICBhbnRlY2VkZW50cy5wdXNoKGFudGVjZWRlbnQpO1xuXG4gICAgICBwcm9vZkNvbnRleHQuYWRkUHJvb2ZTdGVwKHByb29mU3RlcCk7XG4gICAgfVxuXG4gICAgYW50ZWNlZGVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFudGVjZWRlbnRWZXJpZmllZCA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKGFudGVjZWRlbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChhbnRlY2VkZW50Tm9kZSk7XG5cbiAgcmV0dXJuIGFudGVjZWRlbnRWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlBbnRlY2VkZW50Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiYW50ZWNlZGVudE5vZGUiLCJhbnRlY2VkZW50cyIsInByb29mQ29udGV4dCIsImFudGVjZWRlbnRWZXJpZmllZCIsImJlZ2luIiwiYW50ZWNlZGVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsImRlYnVnIiwic3RhdGVtZW50Tm9kZSIsInF1YWxpZmllZCIsInN0YXRlbWVudFZlcmlmaWVkIiwidmVyaWZ5U3RhdGVtZW50IiwicHJvb2ZTdGVwIiwiUHJvb2ZTdGVwIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJhbnRlY2VkZW50IiwiQW50ZWNlZGVudCIsInB1c2giLCJhZGRQcm9vZlN0ZXAiLCJjb21wbGV0ZSIsImhhbHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBd0JBOzs7MERBVEY7K0RBQ0M7OERBQ0s7cUJBRUY7c0JBQ0c7Ozs7OztBQUU3QixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUM7QUFFdEIsU0FBU0YsaUJBQWlCRyxjQUFjLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFO0lBQ2xGLElBQUlDO0lBRUpELGFBQWFFLEtBQUssQ0FBQ0o7SUFFbkIsSUFBTUssbUJBQW1CQyxJQUFBQSxvQkFBWSxFQUFDTjtJQUV0Q0UsYUFBYUssS0FBSyxDQUFDLEFBQUMsaUJBQWlDLE9BQWpCRixrQkFBaUI7SUFFckQsSUFBTUcsZ0JBQWdCVixtQkFBbUJFO0lBRXpDLElBQUlRLGtCQUFrQixJQUFJLEVBQUU7UUFDMUIsSUFBTUMsWUFBWSxLQUFLLEVBQ2pCQyxvQkFBb0JDLElBQUFBLGtCQUFlLEVBQUNILGVBQWVDLFdBQVdQO1FBRXBFLElBQUlRLG1CQUFtQjtZQUNyQixJQUFNRSxZQUFZQyxjQUFTLENBQUNDLGlCQUFpQixDQUFDTixnQkFDeENPLGFBQWFDLG1CQUFVLENBQUNGLGlCQUFpQixDQUFDTjtZQUVoRFAsWUFBWWdCLElBQUksQ0FBQ0Y7WUFFakJiLGFBQWFnQixZQUFZLENBQUNOO1FBQzVCLENBQUM7UUFFRFQscUJBQXFCLElBQUk7SUFDM0IsQ0FBQztJQUVEQSxxQkFDRUQsYUFBYWlCLFFBQVEsQ0FBQ25CLGtCQUNwQkUsYUFBYWtCLElBQUksQ0FBQ3BCLGVBQWU7SUFFckMsT0FBT0c7QUFDVCJ9
|
package/lib/verify/consequent.js
DELETED
|
@@ -1,35 +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 verifyConsequent;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _consequent = /*#__PURE__*/ _interopRequireDefault(require("../consequent"));
|
|
12
|
-
var _query = require("../utilities/query");
|
|
13
|
-
var _string = require("../utilities/string");
|
|
14
|
-
function _interopRequireDefault(obj) {
|
|
15
|
-
return obj && obj.__esModule ? obj : {
|
|
16
|
-
default: obj
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
var statementNodeQuery = (0, _query.nodeQuery)("/consequent/unqualifiedStatement!/statement!");
|
|
20
|
-
function verifyConsequent(consequentNode, consequents, proofContext) {
|
|
21
|
-
var consequentVerified = false;
|
|
22
|
-
proofContext.begin(consequentNode);
|
|
23
|
-
var consequentString = (0, _string.nodeAsString)(consequentNode);
|
|
24
|
-
proofContext.debug("Verifying the ".concat(consequentString, " consequent..."));
|
|
25
|
-
var statementNode = statementNodeQuery(consequentNode);
|
|
26
|
-
if (statementNode !== null) {
|
|
27
|
-
var consequent = _consequent.default.fromStatementNode(statementNode);
|
|
28
|
-
consequents.push(consequent);
|
|
29
|
-
consequentVerified = true;
|
|
30
|
-
}
|
|
31
|
-
consequentVerified ? proofContext.complete(consequentNode) : proofContext.halt(consequentNode);
|
|
32
|
-
return consequentVerified;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvY29uc2VxdWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENvbnNlcXVlbnQgZnJvbSBcIi4uL2NvbnNlcXVlbnRcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2NvbnNlcXVlbnQvdW5xdWFsaWZpZWRTdGF0ZW1lbnQhL3N0YXRlbWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeUNvbnNlcXVlbnQoY29uc2VxdWVudE5vZGUsIGNvbnNlcXVlbnRzLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IGNvbnNlcXVlbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbihjb25zZXF1ZW50Tm9kZSk7XG5cbiAgY29uc3QgY29uc2VxdWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhjb25zZXF1ZW50Tm9kZSk7XG5cbiAgcHJvb2ZDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICR7Y29uc2VxdWVudFN0cmluZ30gY29uc2VxdWVudC4uLmApO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkoY29uc2VxdWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgY29uc2VxdWVudCA9IENvbnNlcXVlbnQuZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zZXF1ZW50cy5wdXNoKGNvbnNlcXVlbnQpO1xuXG4gICAgY29uc2VxdWVudFZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbnNlcXVlbnRWZXJpZmllZCA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKGNvbnNlcXVlbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChjb25zZXF1ZW50Tm9kZSk7XG5cbiAgcmV0dXJuIGNvbnNlcXVlbnRWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlDb25zZXF1ZW50Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiY29uc2VxdWVudE5vZGUiLCJjb25zZXF1ZW50cyIsInByb29mQ29udGV4dCIsImNvbnNlcXVlbnRWZXJpZmllZCIsImJlZ2luIiwiY29uc2VxdWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsImRlYnVnIiwic3RhdGVtZW50Tm9kZSIsImNvbnNlcXVlbnQiLCJDb25zZXF1ZW50IiwiZnJvbVN0YXRlbWVudE5vZGUiLCJwdXNoIiwiY29tcGxldGUiLCJoYWx0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFTQTs7O2VBQXdCQTs7OytEQVBEO3FCQUVHO3NCQUNHOzs7Ozs7QUFFN0IsSUFBTUMscUJBQXFCQyxJQUFBQSxnQkFBUyxFQUFDO0FBRXRCLFNBQVNGLGlCQUFpQkcsY0FBYyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRTtJQUNsRixJQUFJQyxxQkFBcUIsS0FBSztJQUU5QkQsYUFBYUUsS0FBSyxDQUFDSjtJQUVuQixJQUFNSyxtQkFBbUJDLElBQUFBLG9CQUFZLEVBQUNOO0lBRXRDRSxhQUFhSyxLQUFLLENBQUMsQUFBQyxpQkFBaUMsT0FBakJGLGtCQUFpQjtJQUVyRCxJQUFNRyxnQkFBZ0JWLG1CQUFtQkU7SUFFekMsSUFBSVEsa0JBQWtCLElBQUksRUFBRTtRQUMxQixJQUFNQyxhQUFhQyxtQkFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0g7UUFFaERQLFlBQVlXLElBQUksQ0FBQ0g7UUFFakJOLHFCQUFxQixJQUFJO0lBQzNCLENBQUM7SUFFREEscUJBQ0VELGFBQWFXLFFBQVEsQ0FBQ2Isa0JBQ3BCRSxhQUFhWSxJQUFJLENBQUNkLGVBQWU7SUFFckMsT0FBT0c7QUFDVCJ9
|
|
@@ -1,41 +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 verifyMetaAntecedent;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _metaproof = /*#__PURE__*/ _interopRequireDefault(require("../step/metaproof"));
|
|
12
|
-
var _metaAntecedent = /*#__PURE__*/ _interopRequireDefault(require("../metaAntecedent"));
|
|
13
|
-
var _metastatement = /*#__PURE__*/ _interopRequireDefault(require("./metastatement"));
|
|
14
|
-
var _query = require("../utilities/query");
|
|
15
|
-
var _string = require("../utilities/string");
|
|
16
|
-
function _interopRequireDefault(obj) {
|
|
17
|
-
return obj && obj.__esModule ? obj : {
|
|
18
|
-
default: obj
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var metastatementNodeQuery = (0, _query.nodeQuery)("/metaAntecedent/unqualifiedMetastatement!/metastatement!");
|
|
22
|
-
function verifyMetaAntecedent(metaAntecedentNode, metaAntecedents, metaproofContext) {
|
|
23
|
-
var metaAntecedentVerified;
|
|
24
|
-
metaproofContext.begin(metaAntecedentNode);
|
|
25
|
-
var metaAntecedentString = (0, _string.nodeAsString)(metaAntecedentNode);
|
|
26
|
-
metaproofContext.debug("Verifying the ".concat(metaAntecedentString, " metaAntecedent..."));
|
|
27
|
-
var metastatementNode = metastatementNodeQuery(metaAntecedentNode);
|
|
28
|
-
if (metastatementNode !== null) {
|
|
29
|
-
var qualified = false, metastatementVerified = (0, _metastatement.default)(metastatementNode, qualified, metaproofContext);
|
|
30
|
-
if (metastatementVerified) {
|
|
31
|
-
var metaproofStep = _metaproof.default.fromMetastatementNode(metastatementNode), metaAntecedent = _metaAntecedent.default.fromMetastatementNode(metastatementNode);
|
|
32
|
-
metaAntecedents.push(metaAntecedent);
|
|
33
|
-
metaproofContext.addMetaproofStep(metaproofStep);
|
|
34
|
-
}
|
|
35
|
-
metaAntecedentVerified = true;
|
|
36
|
-
}
|
|
37
|
-
metaAntecedentVerified ? metaproofContext.complete(metaAntecedentNode) : metaproofContext.halt(metaAntecedentNode);
|
|
38
|
-
return metaAntecedentVerified;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YUFudGVjZWRlbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZXRhcHJvb2ZTdGVwIGZyb20gXCIuLi9zdGVwL21ldGFwcm9vZlwiO1xuaW1wb3J0IE1ldGFBbnRlY2VkZW50IGZyb20gXCIuLi9tZXRhQW50ZWNlZGVudFwiO1xuaW1wb3J0IHZlcmlmeU1ldGFzdGF0ZW1lbnQgZnJvbSBcIi4vbWV0YXN0YXRlbWVudFwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5jb25zdCBtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFBbnRlY2VkZW50L3VucXVhbGlmaWVkTWV0YXN0YXRlbWVudCEvbWV0YXN0YXRlbWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeU1ldGFBbnRlY2VkZW50KG1ldGFBbnRlY2VkZW50Tm9kZSwgbWV0YUFudGVjZWRlbnRzLCBtZXRhcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudFZlcmlmaWVkO1xuXG4gIG1ldGFwcm9vZkNvbnRleHQuYmVnaW4obWV0YUFudGVjZWRlbnROb2RlKTtcblxuICBjb25zdCBtZXRhQW50ZWNlZGVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhtZXRhQW50ZWNlZGVudE5vZGUpO1xuXG4gIG1ldGFwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJHttZXRhQW50ZWNlZGVudFN0cmluZ30gbWV0YUFudGVjZWRlbnQuLi5gKTtcblxuICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlUXVlcnkobWV0YUFudGVjZWRlbnROb2RlKTtcblxuICBpZiAobWV0YXN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBmYWxzZSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlNZXRhc3RhdGVtZW50KG1ldGFzdGF0ZW1lbnROb2RlLCBxdWFsaWZpZWQsIG1ldGFwcm9vZkNvbnRleHQpO1xuXG4gICAgaWYgKG1ldGFzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgY29uc3QgbWV0YXByb29mU3RlcCA9IE1ldGFwcm9vZlN0ZXAuZnJvbU1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50ID0gTWV0YUFudGVjZWRlbnQuZnJvbU1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgbWV0YUFudGVjZWRlbnRzLnB1c2gobWV0YUFudGVjZWRlbnQpO1xuXG4gICAgICBtZXRhcHJvb2ZDb250ZXh0LmFkZE1ldGFwcm9vZlN0ZXAobWV0YXByb29mU3RlcCk7XG4gICAgfVxuXG4gICAgbWV0YUFudGVjZWRlbnRWZXJpZmllZCA9IHRydWU7XG4gIH1cblxuICBtZXRhQW50ZWNlZGVudFZlcmlmaWVkID9cbiAgICBtZXRhcHJvb2ZDb250ZXh0LmNvbXBsZXRlKG1ldGFBbnRlY2VkZW50Tm9kZSkgOlxuICAgICAgbWV0YXByb29mQ29udGV4dC5oYWx0KG1ldGFBbnRlY2VkZW50Tm9kZSk7XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50VmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5TWV0YUFudGVjZWRlbnQiLCJtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibWV0YUFudGVjZWRlbnROb2RlIiwibWV0YUFudGVjZWRlbnRzIiwibWV0YXByb29mQ29udGV4dCIsIm1ldGFBbnRlY2VkZW50VmVyaWZpZWQiLCJiZWdpbiIsIm1ldGFBbnRlY2VkZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJtZXRhc3RhdGVtZW50Tm9kZSIsInF1YWxpZmllZCIsIm1ldGFzdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeU1ldGFzdGF0ZW1lbnQiLCJtZXRhcHJvb2ZTdGVwIiwiTWV0YXByb29mU3RlcCIsImZyb21NZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFBbnRlY2VkZW50IiwiTWV0YUFudGVjZWRlbnQiLCJwdXNoIiwiYWRkTWV0YXByb29mU3RlcCIsImNvbXBsZXRlIiwiaGFsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUF3QkE7Ozs4REFURTttRUFDQztrRUFDSztxQkFFTjtzQkFDRzs7Ozs7O0FBRTdCLElBQU1DLHlCQUF5QkMsSUFBQUEsZ0JBQVMsRUFBQztBQUUxQixTQUFTRixxQkFBcUJHLGtCQUFrQixFQUFFQyxlQUFlLEVBQUVDLGdCQUFnQixFQUFFO0lBQ2xHLElBQUlDO0lBRUpELGlCQUFpQkUsS0FBSyxDQUFDSjtJQUV2QixJQUFNSyx1QkFBdUJDLElBQUFBLG9CQUFZLEVBQUNOO0lBRTFDRSxpQkFBaUJLLEtBQUssQ0FBQyxBQUFDLGlCQUFxQyxPQUFyQkYsc0JBQXFCO0lBRTdELElBQU1HLG9CQUFvQlYsdUJBQXVCRTtJQUVqRCxJQUFJUSxzQkFBc0IsSUFBSSxFQUFFO1FBQzlCLElBQU1DLFlBQVksS0FBSyxFQUNqQkMsd0JBQXdCQyxJQUFBQSxzQkFBbUIsRUFBQ0gsbUJBQW1CQyxXQUFXUDtRQUVoRixJQUFJUSx1QkFBdUI7WUFDekIsSUFBTUUsZ0JBQWdCQyxrQkFBYSxDQUFDQyxxQkFBcUIsQ0FBQ04sb0JBQ3BETyxpQkFBaUJDLHVCQUFjLENBQUNGLHFCQUFxQixDQUFDTjtZQUU1RFAsZ0JBQWdCZ0IsSUFBSSxDQUFDRjtZQUVyQmIsaUJBQWlCZ0IsZ0JBQWdCLENBQUNOO1FBQ3BDLENBQUM7UUFFRFQseUJBQXlCLElBQUk7SUFDL0IsQ0FBQztJQUVEQSx5QkFDRUQsaUJBQWlCaUIsUUFBUSxDQUFDbkIsc0JBQ3hCRSxpQkFBaUJrQixJQUFJLENBQUNwQixtQkFBbUI7SUFFN0MsT0FBT0c7QUFDVCJ9
|
package/src/antecedent.js
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Substitution from "./substitution";
|
|
4
|
-
|
|
5
|
-
import { first } from "./utilities/array";
|
|
6
|
-
import { nodeAsString } from "./utilities/string";
|
|
7
|
-
import { nodeQuery, nodesQuery } from "./utilities/query";
|
|
8
|
-
import { variableNameFromVariableNode } from "./utilities/query";
|
|
9
|
-
import { statementNodeFromStatementString } from "./utilities/string";
|
|
10
|
-
import { VARIABLE_RULE_NAME, STATEMENT_RULE_NAME } from "./ruleNames";
|
|
11
|
-
|
|
12
|
-
const statementNodesQuery = nodesQuery("/subproofAssertion/statement"),
|
|
13
|
-
subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
14
|
-
unqualifiedStatementStatementNodesQuery = nodesQuery("/subproof/unqualifiedStatement/statement!"),
|
|
15
|
-
qualifiedOrUnqualifiedStatementStatementNodeQuery = nodeQuery("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!");
|
|
16
|
-
|
|
17
|
-
export default class Antecedent {
|
|
18
|
-
constructor(statementNode) {
|
|
19
|
-
this.statementNode = statementNode;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
getStatementNode() {
|
|
23
|
-
return this.statementNode;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
matchSubproofNode(subproofNode, substitutions) {
|
|
27
|
-
let subproofNodeMatches = false;
|
|
28
|
-
|
|
29
|
-
const subproofAssertionNode = subproofAssertionNodeQuery(this.statementNode);
|
|
30
|
-
|
|
31
|
-
if (subproofAssertionNode !== null) {
|
|
32
|
-
const subproofAssertionStatementNodes = statementNodesQuery(subproofAssertionNode),
|
|
33
|
-
unqualifiedStatementStatementNodes = unqualifiedStatementStatementNodesQuery(subproofNode),
|
|
34
|
-
qualifiedOrUnqualifiedStatementStatementNode = qualifiedOrUnqualifiedStatementStatementNodeQuery(subproofNode),
|
|
35
|
-
statementNodes = [
|
|
36
|
-
...unqualifiedStatementStatementNodes,
|
|
37
|
-
qualifiedOrUnqualifiedStatementStatementNode
|
|
38
|
-
],
|
|
39
|
-
statementNodesLength = statementNodes.length,
|
|
40
|
-
subproofAssertionStatementNodesLength = subproofAssertionStatementNodes.length;
|
|
41
|
-
|
|
42
|
-
if (statementNodesLength === subproofAssertionStatementNodesLength) {
|
|
43
|
-
subproofNodeMatches = subproofAssertionStatementNodes.every((subproofAssertionStatementNode, index) => {
|
|
44
|
-
const statementNode = statementNodes[index],
|
|
45
|
-
nonTerminalNode = statementNode, ///
|
|
46
|
-
antecedentNonTerminalNode = subproofAssertionStatementNode, ///
|
|
47
|
-
antecedentNonTerminalNodeMatches = matchAntecedentNonTerminalNode(antecedentNonTerminalNode, nonTerminalNode, substitutions);
|
|
48
|
-
|
|
49
|
-
if (antecedentNonTerminalNodeMatches) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return subproofNodeMatches;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
matchStatementNode(statementNode, substitutions) {
|
|
60
|
-
const nonTerminalNode = statementNode, ///
|
|
61
|
-
antecedentNonTerminalNode = this.statementNode, ///
|
|
62
|
-
antecedentNonTerminalNodeMatches = matchAntecedentNonTerminalNode(antecedentNonTerminalNode, nonTerminalNode, substitutions),
|
|
63
|
-
statementNodeMatches = antecedentNonTerminalNodeMatches; ///
|
|
64
|
-
|
|
65
|
-
return statementNodeMatches;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
toJSON() {
|
|
69
|
-
const statementString = nodeAsString(this.statementNode),
|
|
70
|
-
statement = statementString, ///
|
|
71
|
-
json = {
|
|
72
|
-
statement
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
return json;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
static fromJSON(json, releaseContext) {
|
|
79
|
-
const { statement } = json,
|
|
80
|
-
statementString = statement, ///
|
|
81
|
-
statementNode = statementNodeFromStatementString(statementString, releaseContext),
|
|
82
|
-
antecedent = new Antecedent(statementNode);
|
|
83
|
-
|
|
84
|
-
return antecedent;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
static fromStatementNode(statementNode) {
|
|
88
|
-
const antecedent = new Antecedent(statementNode);
|
|
89
|
-
|
|
90
|
-
return antecedent;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function matchAntecedentNode(antecedentNode, node, substitutions) {
|
|
95
|
-
let antecedentNodeMatches = false;
|
|
96
|
-
|
|
97
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
98
|
-
ruleNodeTerminalNode = antecedentNode.isTerminalNode();
|
|
99
|
-
|
|
100
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
101
|
-
if (nodeTerminalNode) {
|
|
102
|
-
const terminalNode = node, ///
|
|
103
|
-
antecedentTerminalNode = antecedentNode, ///
|
|
104
|
-
antecedentTerminalNodeMatches = matchAntecedentTerminalNode(antecedentTerminalNode, terminalNode, substitutions);
|
|
105
|
-
|
|
106
|
-
antecedentNodeMatches = antecedentTerminalNodeMatches; ///
|
|
107
|
-
} else {
|
|
108
|
-
const nonTerminalNode = node, ///
|
|
109
|
-
antecedentNonTerminalNode = antecedentNode, ///
|
|
110
|
-
antecedentNonTerminalNodeMatches = matchAntecedentNonTerminalNode(antecedentNonTerminalNode, nonTerminalNode, substitutions);
|
|
111
|
-
|
|
112
|
-
antecedentNodeMatches = antecedentNonTerminalNodeMatches; ///
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return antecedentNodeMatches;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function matchAntecedentNodes(antecedentNodes, nodes, substitutions) {
|
|
120
|
-
let antecedentNodesMatches = false;
|
|
121
|
-
|
|
122
|
-
const nodesLength = nodes.length,
|
|
123
|
-
antecedentNodesLength = antecedentNodes.length;
|
|
124
|
-
|
|
125
|
-
if (nodesLength === antecedentNodesLength) {
|
|
126
|
-
antecedentNodesMatches = nodes.every((node, index) => {
|
|
127
|
-
const antecedentNode = antecedentNodes[index],
|
|
128
|
-
antecedentNodeMatches = matchAntecedentNode(antecedentNode, node, substitutions);
|
|
129
|
-
|
|
130
|
-
if (antecedentNodeMatches) {
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return antecedentNodesMatches;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function matchAntecedentVariable(antecedentVariableNode, nodes, substitutions) {
|
|
140
|
-
let antecedentVariableMatches;
|
|
141
|
-
|
|
142
|
-
const antecedentVariableName = variableNameFromVariableNode(antecedentVariableNode),
|
|
143
|
-
substitution = substitutions.find((substitution) => {
|
|
144
|
-
const variableName = substitution.getVariableName();
|
|
145
|
-
|
|
146
|
-
if (variableName === antecedentVariableName) {
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
}) || null;
|
|
150
|
-
|
|
151
|
-
if (substitution !== null) {
|
|
152
|
-
const substitutionNodesMatch = substitution.matchNodes(nodes);
|
|
153
|
-
|
|
154
|
-
antecedentVariableMatches = substitutionNodesMatch; ///
|
|
155
|
-
} else {
|
|
156
|
-
const variableName = antecedentVariableName, ///
|
|
157
|
-
substitution = Substitution.fromVariableNameAndNodes(variableName, nodes);
|
|
158
|
-
|
|
159
|
-
substitutions.push(substitution);
|
|
160
|
-
|
|
161
|
-
antecedentVariableMatches = true;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return antecedentVariableMatches;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function matchAntecedentTerminalNode(antecedentTerminalNode, terminalNode, substitutions) {
|
|
168
|
-
const matches = antecedentTerminalNode.match(terminalNode),
|
|
169
|
-
antecedentTerminalNodeMatches = matches;
|
|
170
|
-
|
|
171
|
-
return antecedentTerminalNodeMatches;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function matchAntecedentNonTerminalNode(antecedentNonTerminalNode, nonTerminalNode, substitutions) {
|
|
175
|
-
let antecedentNonTerminalNodeMatches = false;
|
|
176
|
-
|
|
177
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
178
|
-
antecedentRuleName = antecedentNonTerminalNode.getRuleName(); ///
|
|
179
|
-
|
|
180
|
-
if (ruleName === antecedentRuleName) {
|
|
181
|
-
const childNodes = nonTerminalNode.getChildNodes(),
|
|
182
|
-
antecedentChildNodes = antecedentNonTerminalNode.getChildNodes(),
|
|
183
|
-
nodes = childNodes, ///
|
|
184
|
-
antecedentNodes = antecedentChildNodes, ///
|
|
185
|
-
antecedentChildNodesMatches = matchAntecedentNodes(antecedentNodes, nodes, substitutions);
|
|
186
|
-
|
|
187
|
-
antecedentNonTerminalNodeMatches = antecedentChildNodesMatches; ///
|
|
188
|
-
|
|
189
|
-
if (!antecedentNonTerminalNodeMatches) {
|
|
190
|
-
const ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME);
|
|
191
|
-
|
|
192
|
-
if (ruleNameStatementRuleName) {
|
|
193
|
-
const statementNode = nonTerminalNode, ///
|
|
194
|
-
antecedentStatementNode = antecedentNonTerminalNode, ///
|
|
195
|
-
antecedentStatementNodeMatches = matchAntecedentStatementNode(antecedentStatementNode, statementNode, substitutions);
|
|
196
|
-
|
|
197
|
-
antecedentNonTerminalNodeMatches = antecedentStatementNodeMatches; ///
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
return antecedentNonTerminalNodeMatches;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function matchAntecedentStatementNode(antecedentStatementNode, statementNode, substitutions) {
|
|
206
|
-
let antecedentStatementNodeMatches = false;
|
|
207
|
-
|
|
208
|
-
const antecedentNonTerminalNode = antecedentStatementNode, ///
|
|
209
|
-
antecedentChildNodes = antecedentNonTerminalNode.getChildNodes(),
|
|
210
|
-
antecedentChildNodesLength = antecedentChildNodes.length;
|
|
211
|
-
|
|
212
|
-
if (antecedentChildNodesLength === 1) {
|
|
213
|
-
const firstAntecedentChildNode = first(antecedentChildNodes),
|
|
214
|
-
antecedentChildNode = firstAntecedentChildNode, ///
|
|
215
|
-
antecedentChildNodeNonTerminalNode = antecedentChildNode.isNonTerminalNode();
|
|
216
|
-
|
|
217
|
-
if (antecedentChildNodeNonTerminalNode) {
|
|
218
|
-
const antecedentNonTerminalChildNode = antecedentChildNode, ///
|
|
219
|
-
antecedentNonTerminalChildNodeRuleName = antecedentNonTerminalChildNode.getRuleName(),
|
|
220
|
-
antecedentNonTerminalChildNodeRuleNameVariableRuleName = (antecedentNonTerminalChildNodeRuleName === VARIABLE_RULE_NAME);
|
|
221
|
-
|
|
222
|
-
if (antecedentNonTerminalChildNodeRuleNameVariableRuleName) {
|
|
223
|
-
const antecedentVariableNode = antecedentNonTerminalChildNode, ///
|
|
224
|
-
nonTerminalNode = statementNode, ///
|
|
225
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
226
|
-
nodes = childNodes, ///
|
|
227
|
-
antecedentVariableMatches = matchAntecedentVariable(antecedentVariableNode, nodes, substitutions);
|
|
228
|
-
|
|
229
|
-
antecedentStatementNodeMatches = antecedentVariableMatches; ///
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
return antecedentStatementNodeMatches;
|
|
235
|
-
}
|