occam-verify-cli 0.0.865 → 0.0.866
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/axiomLemmaTheoremConjecture.js +7 -7
- package/lib/context/file.js +128 -68
- package/lib/context/local.js +4 -4
- package/lib/context/release.js +13 -1
- package/lib/label.js +6 -6
- package/lib/metaConsequent.js +88 -0
- package/lib/metaLemma.js +126 -0
- package/lib/metaLemmaMetatheorem.js +196 -0
- package/lib/metaSupposition.js +140 -0
- package/lib/metaType.js +33 -3
- package/lib/metaTypeNames.js +13 -4
- package/lib/metaTypes.js +9 -4
- package/lib/metatheorem.js +9 -9
- package/lib/mixins/context.js +30 -22
- package/lib/rule.js +7 -7
- package/lib/ruleNames.js +5 -1
- package/lib/step/metaproof.js +18 -4
- package/lib/type.js +9 -1
- package/lib/utilities/name.js +52 -0
- package/lib/utilities/query.js +1 -38
- package/lib/verifier/node/metastatement.js +3 -3
- package/lib/verifier/nodes/statementAgainstCombinator.js +4 -4
- package/lib/verifier/nodes/termAgainstConstructor.js +3 -3
- package/lib/verify/declaration/topLevel.js +11 -3
- package/lib/verify/givenMetavariable.js +31 -0
- package/lib/verify/givenType.js +2 -3
- package/lib/verify/label.js +3 -4
- package/lib/verify/metaConsequent.js +36 -0
- package/lib/verify/metaDerivation.js +111 -0
- package/lib/verify/metaLemma.js +51 -0
- package/lib/verify/metaSupposition.js +40 -0
- package/lib/verify/metaSuppositions.js +28 -0
- package/lib/verify/metaproof.js +34 -0
- package/lib/verify/metastatement/qualified.js +2 -2
- package/lib/verify/metatheorem.js +50 -0
- package/lib/verify/metavariable.js +30 -10
- package/lib/verify/proof.js +3 -3
- package/lib/verify/statement/qualified.js +28 -28
- package/lib/verify/termAsConstructor.js +4 -5
- package/lib/verify/type.js +18 -20
- package/lib/verify/variable.js +13 -16
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +6 -6
- package/src/context/file.js +132 -61
- package/src/context/local.js +1 -1
- package/src/context/release.js +13 -0
- package/src/label.js +4 -6
- package/src/metaConsequent.js +58 -0
- package/src/metaLemma.js +9 -0
- package/src/metaLemmaMetatheorem.js +194 -0
- package/src/metaSupposition.js +103 -0
- package/src/metaType.js +23 -3
- package/src/metaTypeNames.js +1 -0
- package/src/metaTypes.js +8 -1
- package/src/metatheorem.js +4 -4
- package/src/mixins/context.js +20 -14
- package/src/rule.js +6 -6
- package/src/ruleNames.js +1 -0
- package/src/step/metaproof.js +20 -4
- package/src/type.js +10 -0
- package/src/utilities/name.js +50 -0
- package/src/utilities/query.js +0 -47
- package/src/verifier/node/metastatement.js +2 -1
- package/src/verifier/nodes/statementAgainstCombinator.js +3 -3
- package/src/verifier/nodes/termAgainstConstructor.js +3 -4
- package/src/verify/declaration/topLevel.js +14 -0
- package/src/verify/givenMetavariable.js +31 -0
- package/src/verify/givenType.js +1 -4
- package/src/verify/label.js +2 -5
- package/src/verify/metaConsequent.js +36 -0
- package/src/verify/metaDerivation.js +151 -0
- package/src/verify/metaLemma.js +67 -0
- package/src/verify/metaSupposition.js +44 -0
- package/src/verify/metaSuppositions.js +17 -0
- package/src/verify/metaproof.js +32 -0
- package/src/verify/metastatement/qualified.js +2 -3
- package/src/verify/metatheorem.js +62 -0
- package/src/verify/metavariable.js +46 -16
- package/src/verify/proof.js +2 -2
- package/src/verify/statement/qualified.js +27 -23
- package/src/verify/termAsConstructor.js +4 -6
- package/src/verify/type.js +20 -22
- package/src/verify/variable.js +14 -17
- package/lib/ruleMetatheorem.js +0 -253
- package/src/ruleMetatheorem.js +0 -274
package/lib/ruleMetatheorem.js
DELETED
|
@@ -1,253 +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 RuleMetatheorem;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _label = /*#__PURE__*/ _interop_require_default(require("./label"));
|
|
12
|
-
var _premise = /*#__PURE__*/ _interop_require_default(require("./premise"));
|
|
13
|
-
var _conclusion = /*#__PURE__*/ _interop_require_default(require("./conclusion"));
|
|
14
|
-
var _array = require("./utilities/array");
|
|
15
|
-
function _class_call_check(instance, Constructor) {
|
|
16
|
-
if (!(instance instanceof Constructor)) {
|
|
17
|
-
throw new TypeError("Cannot call a class as a function");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function _defineProperties(target, props) {
|
|
21
|
-
for(var i = 0; i < props.length; i++){
|
|
22
|
-
var descriptor = props[i];
|
|
23
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
24
|
-
descriptor.configurable = true;
|
|
25
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
26
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
30
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
31
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
32
|
-
return Constructor;
|
|
33
|
-
}
|
|
34
|
-
function _interop_require_default(obj) {
|
|
35
|
-
return obj && obj.__esModule ? obj : {
|
|
36
|
-
default: obj
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
var RuleMetatheorem = /*#__PURE__*/ function() {
|
|
40
|
-
function RuleMetatheorem(labels, premises, conclusion, fileContext) {
|
|
41
|
-
_class_call_check(this, RuleMetatheorem);
|
|
42
|
-
this.labels = labels;
|
|
43
|
-
this.premises = premises;
|
|
44
|
-
this.conclusion = conclusion;
|
|
45
|
-
this.fileContext = fileContext;
|
|
46
|
-
}
|
|
47
|
-
_create_class(RuleMetatheorem, [
|
|
48
|
-
{
|
|
49
|
-
key: "getLabels",
|
|
50
|
-
value: function getLabels() {
|
|
51
|
-
return this.labels;
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
key: "getPremises",
|
|
56
|
-
value: function getPremises() {
|
|
57
|
-
return this.premises;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
key: "getConclusion",
|
|
62
|
-
value: function getConclusion() {
|
|
63
|
-
return this.conclusion;
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
key: "getFileContext",
|
|
68
|
-
value: function getFileContext() {
|
|
69
|
-
return this.fileContext;
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
key: "matchLabelName",
|
|
74
|
-
value: function matchLabelName(labelName) {
|
|
75
|
-
var labelNameMatches = this.labels.some(function(label) {
|
|
76
|
-
var name = labelName, labelMatchesName = label.matchName(name);
|
|
77
|
-
if (labelMatchesName) {
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
return labelNameMatches;
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
key: "matchStatement",
|
|
86
|
-
value: function matchStatement(statementNode, statementLocalContext) {
|
|
87
|
-
var _this = this;
|
|
88
|
-
var statementNatches;
|
|
89
|
-
var premisesLength = this.premises.length;
|
|
90
|
-
if (premisesLength === 0) {
|
|
91
|
-
var substitutions = [], conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions, this.fileContext, statementLocalContext);
|
|
92
|
-
statementNatches = conclusionMatches; ///
|
|
93
|
-
} else {
|
|
94
|
-
var proofSteps = statementLocalContext.getProofSteps();
|
|
95
|
-
statementNatches = (0, _array.someSubArray)(proofSteps, premisesLength, function(proofSteps) {
|
|
96
|
-
var premisesMatchConclusion = false;
|
|
97
|
-
var substitutions = [], premisesMatch = matchPremises(_this.premises, proofSteps, substitutions, _this.fileContext, statementLocalContext);
|
|
98
|
-
if (premisesMatch) {
|
|
99
|
-
var conclusionMatches = matchConclusion(_this.conclusion, statementNode, substitutions, _this.fileContext, statementLocalContext);
|
|
100
|
-
premisesMatchConclusion = conclusionMatches; ///
|
|
101
|
-
}
|
|
102
|
-
if (premisesMatchConclusion) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
return statementNatches;
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
key: "matchMetastatement",
|
|
112
|
-
value: function matchMetastatement(metastatementNode, metastatementLocalMetaContext) {
|
|
113
|
-
var _this = this;
|
|
114
|
-
var metastatementNatches;
|
|
115
|
-
var premisesLength = this.premises.length;
|
|
116
|
-
if (premisesLength === 0) {
|
|
117
|
-
var substitutions = [], conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions, this.fileContext, metastatementLocalMetaContext);
|
|
118
|
-
metastatementNatches = conclusionMatches; ///
|
|
119
|
-
} else {
|
|
120
|
-
var metaproofSteps = metastatementLocalMetaContext.getMetaproofSteps();
|
|
121
|
-
metastatementNatches = (0, _array.someSubArray)(metaproofSteps, premisesLength, function(metaproofSteps) {
|
|
122
|
-
var premisesMatchConclusion = false;
|
|
123
|
-
var substitutions = [], premisesMatch = metaMatchPremises(_this.premises, metaproofSteps, substitutions, _this.fileContext, metastatementLocalMetaContext);
|
|
124
|
-
if (premisesMatch) {
|
|
125
|
-
var conclusionMatches = metaMatchConclusion(_this.conclusion, metastatementNode, substitutions, _this.fileContext, metastatementLocalMetaContext);
|
|
126
|
-
premisesMatchConclusion = conclusionMatches; ///
|
|
127
|
-
}
|
|
128
|
-
if (premisesMatchConclusion) {
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
return metastatementNatches;
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
key: "toJSON",
|
|
138
|
-
value: function toJSON(tokens) {
|
|
139
|
-
var labelsJSON = this.labels.map(function(label) {
|
|
140
|
-
var labelJSON = label.toJSON(tokens);
|
|
141
|
-
return labelJSON;
|
|
142
|
-
}), premisesJSON = this.premises.map(function(premise) {
|
|
143
|
-
var premiseJSON = premise.toJSON(tokens);
|
|
144
|
-
return premiseJSON;
|
|
145
|
-
}), conclusionJSON = this.conclusion.toJSON(tokens), labels = labelsJSON, premises = premisesJSON, conclusion = conclusionJSON, json = {
|
|
146
|
-
labels: labels,
|
|
147
|
-
premises: premises,
|
|
148
|
-
conclusion: conclusion
|
|
149
|
-
};
|
|
150
|
-
return json;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
], [
|
|
154
|
-
{
|
|
155
|
-
key: "fromJSONAndFileContext",
|
|
156
|
-
value: function fromJSONAndFileContext(json, fileContext) {
|
|
157
|
-
var rule;
|
|
158
|
-
var labels = json.labels;
|
|
159
|
-
var labelsJSON = labels; ///
|
|
160
|
-
labels = labelsJSON.map(function(labelJSON) {
|
|
161
|
-
var _$json = labelJSON, label = _label.default.fromJSONAndFileContext(_$json, fileContext);
|
|
162
|
-
return label;
|
|
163
|
-
});
|
|
164
|
-
var premises = json.premises;
|
|
165
|
-
var premisesJSON = premises; ///
|
|
166
|
-
premises = premisesJSON.map(function(premiseJSON) {
|
|
167
|
-
var _$json = premiseJSON, premise = _premise.default.fromJSONAndFileContext(_$json, fileContext);
|
|
168
|
-
return premise;
|
|
169
|
-
});
|
|
170
|
-
var conclusion = json.conclusion;
|
|
171
|
-
var conclusionJSON = conclusion; ///
|
|
172
|
-
json = conclusionJSON; ///
|
|
173
|
-
conclusion = _conclusion.default.fromJSONAndFileContext(json, fileContext);
|
|
174
|
-
rule = new Rule(labels, premises, conclusion, fileContext);
|
|
175
|
-
return rule;
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
key: "fromLabelsPremisesConclusionAndFileContext",
|
|
180
|
-
value: function fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext) {
|
|
181
|
-
var rule = new Rule(labels, premises, conclusion, fileContext);
|
|
182
|
-
return rule;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
]);
|
|
186
|
-
return RuleMetatheorem;
|
|
187
|
-
}();
|
|
188
|
-
function matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
|
|
189
|
-
var proofStep = (0, _array.prune)(proofSteps, function(proofStep) {
|
|
190
|
-
var subproofNode = proofStep.getSubproofNode(), statementNode = proofStep.getStatementNode();
|
|
191
|
-
if (subproofNode !== null) {
|
|
192
|
-
var subProofNodeMatches = premise.matchSubproofNode(subproofNode, substitutions, fileContext, statementLocalContext);
|
|
193
|
-
if (!subProofNodeMatches) {
|
|
194
|
-
return true;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
if (statementNode !== null) {
|
|
198
|
-
var statementNodeMatches = premise.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext);
|
|
199
|
-
if (!statementNodeMatches) {
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}) || null;
|
|
204
|
-
var premiseMatches = proofStep !== null;
|
|
205
|
-
return premiseMatches;
|
|
206
|
-
}
|
|
207
|
-
function matchPremises(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
|
|
208
|
-
var premisesMatch = premise.every(function(premise) {
|
|
209
|
-
var premiseMatches = matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext);
|
|
210
|
-
if (premiseMatches) {
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
return premisesMatch;
|
|
215
|
-
}
|
|
216
|
-
function matchConclusion(conclusion, statementNode, substitutions, fileContext, statementLocalContext) {
|
|
217
|
-
var statementNodeMatches = conclusion.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext), conclusionMatches = statementNodeMatches; ///
|
|
218
|
-
return conclusionMatches;
|
|
219
|
-
}
|
|
220
|
-
function metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
|
|
221
|
-
var metaproofStep = (0, _array.prune)(metaproofSteps, function(metaproofStep) {
|
|
222
|
-
var ruleSubproofNode = metaproofStep.getRuleSubproofNode(), metastatementNode = metaproofStep.getMetastatementNode();
|
|
223
|
-
if (ruleSubproofNode !== null) {
|
|
224
|
-
var ruleSubProofNodeMatches = premise.matchRuleSubproofNode(ruleSubproofNode, substitutions, fileContext, metastatementLocalMetaContext);
|
|
225
|
-
if (!ruleSubProofNodeMatches) {
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
if (metastatementNode !== null) {
|
|
230
|
-
var metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext);
|
|
231
|
-
if (!metastatementNodeMatches) {
|
|
232
|
-
return true;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}) || null;
|
|
236
|
-
var premiseMatches = metaproofStep !== null;
|
|
237
|
-
return premiseMatches;
|
|
238
|
-
}
|
|
239
|
-
function metaMatchPremises(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
|
|
240
|
-
var premisesMatch = premise.every(function(premise) {
|
|
241
|
-
var premiseMatches = metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext);
|
|
242
|
-
if (premiseMatches) {
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
return premisesMatch;
|
|
247
|
-
}
|
|
248
|
-
function metaMatchConclusion(conclusion, metastatementNode, substitutions, fileContext, metastatementLocalMetaContext) {
|
|
249
|
-
var metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext), conclusionMatches = metastatementNodeMatches; ///
|
|
250
|
-
return conclusionMatches;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ydWxlTWV0YXRoZW9yZW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBMYWJlbCBmcm9tIFwiLi9sYWJlbFwiO1xuaW1wb3J0IFByZW1pc2UgZnJvbSBcIi4vcHJlbWlzZVwiO1xuaW1wb3J0IENvbmNsdXNpb24gZnJvbSBcIi4vY29uY2x1c2lvblwiO1xuXG5pbXBvcnQgeyBwcnVuZSB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgc29tZVN1YkFycmF5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVNZXRhdGhlb3JlbSB7XG4gIGNvbnN0cnVjdG9yKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24sIGZpbGVDb250ZXh0KSB7XG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5wcmVtaXNlcyA9IHByZW1pc2VzO1xuICAgIHRoaXMuY29uY2x1c2lvbiA9IGNvbmNsdXNpb247XG4gICAgdGhpcy5maWxlQ29udGV4dCA9IGZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0Q29uY2x1c2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0RmlsZUNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZUNvbnRleHQ7XG4gIH1cblxuICBtYXRjaExhYmVsTmFtZShsYWJlbE5hbWUpIHtcbiAgICBjb25zdCBsYWJlbE5hbWVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBsYWJlbE5hbWUsIC8vL1xuICAgICAgICAgICAgbGFiZWxNYXRjaGVzTmFtZSA9IGxhYmVsLm1hdGNoTmFtZShuYW1lKTtcblxuICAgICAgaWYgKGxhYmVsTWF0Y2hlc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIHN0YXRlbWVudExvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnROYXRjaGVzO1xuXG4gICAgY29uc3QgcHJlbWlzZXNMZW5ndGggPSB0aGlzLnByZW1pc2VzLmxlbmd0aDtcblxuICAgIGlmIChwcmVtaXNlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgICAgY29uY2x1c2lvbk1hdGNoZXMgPSBtYXRjaENvbmNsdXNpb24odGhpcy5jb25jbHVzaW9uLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgICBzdGF0ZW1lbnROYXRjaGVzID0gY29uY2x1c2lvbk1hdGNoZXM7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcm9vZlN0ZXBzID0gc3RhdGVtZW50TG9jYWxDb250ZXh0LmdldFByb29mU3RlcHMoKTtcblxuICAgICAgc3RhdGVtZW50TmF0Y2hlcyA9IHNvbWVTdWJBcnJheShwcm9vZlN0ZXBzLCBwcmVtaXNlc0xlbmd0aCwgKHByb29mU3RlcHMpID0+IHtcbiAgICAgICAgbGV0IHByZW1pc2VzTWF0Y2hDb25jbHVzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgICAgICBwcmVtaXNlc01hdGNoID0gbWF0Y2hQcmVtaXNlcyh0aGlzLnByZW1pc2VzLCBwcm9vZlN0ZXBzLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgICAgIGlmIChwcmVtaXNlc01hdGNoKSB7XG4gICAgICAgICAgY29uc3QgY29uY2x1c2lvbk1hdGNoZXMgPSBtYXRjaENvbmNsdXNpb24odGhpcy5jb25jbHVzaW9uLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgICAgICAgcHJlbWlzZXNNYXRjaENvbmNsdXNpb24gPSBjb25jbHVzaW9uTWF0Y2hlczsgIC8vL1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZW1pc2VzTWF0Y2hDb25jbHVzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnROYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhc3RhdGVtZW50KG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCkge1xuICAgIGxldCBtZXRhc3RhdGVtZW50TmF0Y2hlcztcblxuICAgIGNvbnN0IHByZW1pc2VzTGVuZ3RoID0gdGhpcy5wcmVtaXNlcy5sZW5ndGg7XG5cbiAgICBpZiAocHJlbWlzZXNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgIGNvbmNsdXNpb25NYXRjaGVzID0gbWV0YU1hdGNoQ29uY2x1c2lvbih0aGlzLmNvbmNsdXNpb24sIG1ldGFzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCk7XG5cbiAgICAgIG1ldGFzdGF0ZW1lbnROYXRjaGVzID0gY29uY2x1c2lvbk1hdGNoZXM7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXRhcHJvb2ZTdGVwcyA9IG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0LmdldE1ldGFwcm9vZlN0ZXBzKCk7XG5cbiAgICAgIG1ldGFzdGF0ZW1lbnROYXRjaGVzID0gc29tZVN1YkFycmF5KG1ldGFwcm9vZlN0ZXBzLCBwcmVtaXNlc0xlbmd0aCwgKG1ldGFwcm9vZlN0ZXBzKSA9PiB7XG4gICAgICAgIGxldCBwcmVtaXNlc01hdGNoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgcHJlbWlzZXNNYXRjaCA9IG1ldGFNYXRjaFByZW1pc2VzKHRoaXMucHJlbWlzZXMsIG1ldGFwcm9vZlN0ZXBzLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHByZW1pc2VzTWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBjb25jbHVzaW9uTWF0Y2hlcyA9IG1ldGFNYXRjaENvbmNsdXNpb24odGhpcy5jb25jbHVzaW9uLCBtZXRhc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgdGhpcy5maWxlQ29udGV4dCwgbWV0YXN0YXRlbWVudExvY2FsTWV0YUNvbnRleHQpO1xuXG4gICAgICAgICAgcHJlbWlzZXNNYXRjaENvbmNsdXNpb24gPSBjb25jbHVzaW9uTWF0Y2hlczsgIC8vL1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZW1pc2VzTWF0Y2hDb25jbHVzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhc3RhdGVtZW50TmF0Y2hlcztcbiAgfVxuXG4gIHRvSlNPTih0b2tlbnMpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gdGhpcy5sYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbEpTT047XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJlbWlzZXNKU09OID0gdGhpcy5wcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZW1pc2VKU09OID0gcHJlbWlzZS50b0pTT04odG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHByZW1pc2VKU09OO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmNsdXNpb25KU09OID0gdGhpcy5jb25jbHVzaW9uLnRvSlNPTih0b2tlbnMpLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBwcmVtaXNlcyxcbiAgICAgICAgICAgIGNvbmNsdXNpb25cbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT05BbmRGaWxlQ29udGV4dChqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGxldCBydWxlO1xuXG4gICAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsczsgIC8vL1xuXG4gICAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgICAgY29uc3QganNvbiA9IGxhYmVsSlNPTiwgLy8vXG4gICAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21KU09OQW5kRmlsZUNvbnRleHQoanNvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfSk7XG5cbiAgICBsZXQgeyBwcmVtaXNlcyB9ID0ganNvbjtcblxuICAgIGNvbnN0IHByZW1pc2VzSlNPTiA9IHByZW1pc2VzOyAgLy8vXG5cbiAgICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTi5tYXAoKHByZW1pc2VKU09OKSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gcHJlbWlzZUpTT04sIC8vL1xuICAgICAgICAgICAgcHJlbWlzZSA9IFByZW1pc2UuZnJvbUpTT05BbmRGaWxlQ29udGV4dChqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICAgIHJldHVybiBwcmVtaXNlO1xuICAgIH0pO1xuXG4gICAgbGV0IHsgY29uY2x1c2lvbiB9ID0ganNvbjtcblxuICAgIGNvbnN0IGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbjsgIC8vL1xuXG4gICAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tSlNPTkFuZEZpbGVDb250ZXh0KGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHJ1bGUgPSBuZXcgUnVsZShsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uLCBmaWxlQ29udGV4dCk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTGFiZWxzUHJlbWlzZXNDb25jbHVzaW9uQW5kRmlsZUNvbnRleHQobGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUobGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hQcmVtaXNlKHByZW1pc2UsIHByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpIHtcbiAgY29uc3QgcHJvb2ZTdGVwID0gcHJ1bmUocHJvb2ZTdGVwcywgKHByb29mU3RlcCkgPT4ge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHByb29mU3RlcC5nZXRTdWJwcm9vZk5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gcHJvb2ZTdGVwLmdldFN0YXRlbWVudE5vZGUoKVxuXG4gICAgaWYgKHN1YnByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3ViUHJvb2ZOb2RlTWF0Y2hlcyA9IHByZW1pc2UubWF0Y2hTdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBzdWJzdGl0dXRpb25zLCBmaWxlQ29udGV4dCwgc3RhdGVtZW50TG9jYWxDb250ZXh0KTtcblxuICAgICAgaWYgKCFzdWJQcm9vZk5vZGVNYXRjaGVzKSB7ICAvLy9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gcHJlbWlzZS5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIHN0YXRlbWVudExvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmICghc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHsgIC8vL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pIHx8IG51bGw7XG5cbiAgY29uc3QgcHJlbWlzZU1hdGNoZXMgPSAocHJvb2ZTdGVwICE9PSBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUHJlbWlzZXMocHJlbWlzZSwgcHJvb2ZTdGVwcywgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIHN0YXRlbWVudExvY2FsQ29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlc01hdGNoID0gcHJlbWlzZS5ldmVyeSgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VNYXRjaGVzID0gbWF0Y2hQcmVtaXNlKHByZW1pc2UsIHByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHByZW1pc2VNYXRjaGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc01hdGNoO1xufVxuXG5mdW5jdGlvbiBtYXRjaENvbmNsdXNpb24oY29uY2x1c2lvbiwgc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIHN0YXRlbWVudExvY2FsQ29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGNvbmNsdXNpb24ubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uTWF0Y2hlcyA9IHN0YXRlbWVudE5vZGVNYXRjaGVzOyAvLy9cblxuICByZXR1cm4gY29uY2x1c2lvbk1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2UocHJlbWlzZSwgbWV0YXByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCkge1xuICBjb25zdCBtZXRhcHJvb2ZTdGVwID0gcHJ1bmUobWV0YXByb29mU3RlcHMsIChtZXRhcHJvb2ZTdGVwKSA9PiB7XG4gICAgY29uc3QgcnVsZVN1YnByb29mTm9kZSA9IG1ldGFwcm9vZlN0ZXAuZ2V0UnVsZVN1YnByb29mTm9kZSgpLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXByb29mU3RlcC5nZXRNZXRhc3RhdGVtZW50Tm9kZSgpXG5cbiAgICBpZiAocnVsZVN1YnByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN1YlByb29mTm9kZU1hdGNoZXMgPSBwcmVtaXNlLm1hdGNoUnVsZVN1YnByb29mTm9kZShydWxlU3VicHJvb2ZOb2RlLCBzdWJzdGl0dXRpb25zLCBmaWxlQ29udGV4dCwgbWV0YXN0YXRlbWVudExvY2FsTWV0YUNvbnRleHQpO1xuXG4gICAgICBpZiAoIXJ1bGVTdWJQcm9vZk5vZGVNYXRjaGVzKSB7ICAvLy9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGFzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBwcmVtaXNlLm1hdGNoTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCk7XG5cbiAgICAgIGlmICghbWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzKSB7ICAvLy9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KSB8fCBudWxsO1xuXG4gIGNvbnN0IHByZW1pc2VNYXRjaGVzID0gKG1ldGFwcm9vZlN0ZXAgIT09IG51bGwpO1xuXG4gIHJldHVybiBwcmVtaXNlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZXMocHJlbWlzZSwgbWV0YXByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlc01hdGNoID0gcHJlbWlzZS5ldmVyeSgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZShwcmVtaXNlLCBtZXRhcHJvb2ZTdGVwcywgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0KTtcblxuICAgIGlmIChwcmVtaXNlTWF0Y2hlcykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXNNYXRjaDtcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoQ29uY2x1c2lvbihjb25jbHVzaW9uLCBtZXRhc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGNvbmNsdXNpb24ubWF0Y2hNZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbk1hdGNoZXMgPSBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7IC8vL1xuXG4gIHJldHVybiBjb25jbHVzaW9uTWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6WyJSdWxlTWV0YXRoZW9yZW0iLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJmaWxlQ29udGV4dCIsImdldExhYmVscyIsImdldFByZW1pc2VzIiwiZ2V0Q29uY2x1c2lvbiIsImdldEZpbGVDb250ZXh0IiwibWF0Y2hMYWJlbE5hbWUiLCJsYWJlbE5hbWUiLCJsYWJlbE5hbWVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwibmFtZSIsImxhYmVsTWF0Y2hlc05hbWUiLCJtYXRjaE5hbWUiLCJtYXRjaFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRMb2NhbENvbnRleHQiLCJzdGF0ZW1lbnROYXRjaGVzIiwicHJlbWlzZXNMZW5ndGgiLCJsZW5ndGgiLCJzdWJzdGl0dXRpb25zIiwiY29uY2x1c2lvbk1hdGNoZXMiLCJtYXRjaENvbmNsdXNpb24iLCJwcm9vZlN0ZXBzIiwiZ2V0UHJvb2ZTdGVwcyIsInNvbWVTdWJBcnJheSIsInByZW1pc2VzTWF0Y2hDb25jbHVzaW9uIiwicHJlbWlzZXNNYXRjaCIsIm1hdGNoUHJlbWlzZXMiLCJtYXRjaE1ldGFzdGF0ZW1lbnQiLCJtZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0IiwibWV0YXN0YXRlbWVudE5hdGNoZXMiLCJtZXRhTWF0Y2hDb25jbHVzaW9uIiwibWV0YXByb29mU3RlcHMiLCJnZXRNZXRhcHJvb2ZTdGVwcyIsIm1ldGFNYXRjaFByZW1pc2VzIiwidG9KU09OIiwidG9rZW5zIiwibGFiZWxzSlNPTiIsIm1hcCIsImxhYmVsSlNPTiIsInByZW1pc2VzSlNPTiIsInByZW1pc2UiLCJwcmVtaXNlSlNPTiIsImNvbmNsdXNpb25KU09OIiwianNvbiIsImZyb21KU09OQW5kRmlsZUNvbnRleHQiLCJydWxlIiwiTGFiZWwiLCJQcmVtaXNlIiwiQ29uY2x1c2lvbiIsIlJ1bGUiLCJmcm9tTGFiZWxzUHJlbWlzZXNDb25jbHVzaW9uQW5kRmlsZUNvbnRleHQiLCJtYXRjaFByZW1pc2UiLCJwcm9vZlN0ZXAiLCJwcnVuZSIsInN1YnByb29mTm9kZSIsImdldFN1YnByb29mTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzdWJQcm9vZk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJwcm9vZk5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsInByZW1pc2VNYXRjaGVzIiwiZXZlcnkiLCJtZXRhTWF0Y2hQcmVtaXNlIiwibWV0YXByb29mU3RlcCIsInJ1bGVTdWJwcm9vZk5vZGUiLCJnZXRSdWxlU3VicHJvb2ZOb2RlIiwiZ2V0TWV0YXN0YXRlbWVudE5vZGUiLCJydWxlU3ViUHJvb2ZOb2RlTWF0Y2hlcyIsIm1hdGNoUnVsZVN1YnByb29mTm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBU3FCQTs7OzREQVBIOzhEQUNFO2lFQUNHO3FCQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR1AsSUFBQSxBQUFNQSxnQ0FBRCxBQUFMO2FBQU1BLGdCQUNQQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFB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
|
package/src/ruleMetatheorem.js
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Label from "./label";
|
|
4
|
-
import Premise from "./premise";
|
|
5
|
-
import Conclusion from "./conclusion";
|
|
6
|
-
|
|
7
|
-
import { prune } from "./utilities/array";
|
|
8
|
-
import { someSubArray } from "./utilities/array";
|
|
9
|
-
|
|
10
|
-
export default class RuleMetatheorem {
|
|
11
|
-
constructor(labels, premises, conclusion, fileContext) {
|
|
12
|
-
this.labels = labels;
|
|
13
|
-
this.premises = premises;
|
|
14
|
-
this.conclusion = conclusion;
|
|
15
|
-
this.fileContext = fileContext;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
getLabels() {
|
|
19
|
-
return this.labels;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
getPremises() {
|
|
23
|
-
return this.premises;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
getConclusion() {
|
|
27
|
-
return this.conclusion;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
getFileContext() {
|
|
31
|
-
return this.fileContext;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
matchLabelName(labelName) {
|
|
35
|
-
const labelNameMatches = this.labels.some((label) => {
|
|
36
|
-
const name = labelName, ///
|
|
37
|
-
labelMatchesName = label.matchName(name);
|
|
38
|
-
|
|
39
|
-
if (labelMatchesName) {
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
return labelNameMatches;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
matchStatement(statementNode, statementLocalContext) {
|
|
48
|
-
let statementNatches;
|
|
49
|
-
|
|
50
|
-
const premisesLength = this.premises.length;
|
|
51
|
-
|
|
52
|
-
if (premisesLength === 0) {
|
|
53
|
-
const substitutions = [],
|
|
54
|
-
conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions, this.fileContext, statementLocalContext);
|
|
55
|
-
|
|
56
|
-
statementNatches = conclusionMatches; ///
|
|
57
|
-
} else {
|
|
58
|
-
const proofSteps = statementLocalContext.getProofSteps();
|
|
59
|
-
|
|
60
|
-
statementNatches = someSubArray(proofSteps, premisesLength, (proofSteps) => {
|
|
61
|
-
let premisesMatchConclusion = false;
|
|
62
|
-
|
|
63
|
-
const substitutions = [],
|
|
64
|
-
premisesMatch = matchPremises(this.premises, proofSteps, substitutions, this.fileContext, statementLocalContext);
|
|
65
|
-
|
|
66
|
-
if (premisesMatch) {
|
|
67
|
-
const conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions, this.fileContext, statementLocalContext);
|
|
68
|
-
|
|
69
|
-
premisesMatchConclusion = conclusionMatches; ///
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (premisesMatchConclusion) {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return statementNatches;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
matchMetastatement(metastatementNode, metastatementLocalMetaContext) {
|
|
82
|
-
let metastatementNatches;
|
|
83
|
-
|
|
84
|
-
const premisesLength = this.premises.length;
|
|
85
|
-
|
|
86
|
-
if (premisesLength === 0) {
|
|
87
|
-
const substitutions = [],
|
|
88
|
-
conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions, this.fileContext, metastatementLocalMetaContext);
|
|
89
|
-
|
|
90
|
-
metastatementNatches = conclusionMatches; ///
|
|
91
|
-
} else {
|
|
92
|
-
const metaproofSteps = metastatementLocalMetaContext.getMetaproofSteps();
|
|
93
|
-
|
|
94
|
-
metastatementNatches = someSubArray(metaproofSteps, premisesLength, (metaproofSteps) => {
|
|
95
|
-
let premisesMatchConclusion = false;
|
|
96
|
-
|
|
97
|
-
const substitutions = [],
|
|
98
|
-
premisesMatch = metaMatchPremises(this.premises, metaproofSteps, substitutions, this.fileContext, metastatementLocalMetaContext);
|
|
99
|
-
|
|
100
|
-
if (premisesMatch) {
|
|
101
|
-
const conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions, this.fileContext, metastatementLocalMetaContext);
|
|
102
|
-
|
|
103
|
-
premisesMatchConclusion = conclusionMatches; ///
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (premisesMatchConclusion) {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return metastatementNatches;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
toJSON(tokens) {
|
|
116
|
-
const labelsJSON = this.labels.map((label) => {
|
|
117
|
-
const labelJSON = label.toJSON(tokens);
|
|
118
|
-
|
|
119
|
-
return labelJSON;
|
|
120
|
-
}),
|
|
121
|
-
premisesJSON = this.premises.map((premise) => {
|
|
122
|
-
const premiseJSON = premise.toJSON(tokens);
|
|
123
|
-
|
|
124
|
-
return premiseJSON;
|
|
125
|
-
}),
|
|
126
|
-
conclusionJSON = this.conclusion.toJSON(tokens),
|
|
127
|
-
labels = labelsJSON, ///
|
|
128
|
-
premises = premisesJSON, ///
|
|
129
|
-
conclusion = conclusionJSON, ///
|
|
130
|
-
json = {
|
|
131
|
-
labels,
|
|
132
|
-
premises,
|
|
133
|
-
conclusion
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
return json;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
static fromJSONAndFileContext(json, fileContext) {
|
|
140
|
-
let rule;
|
|
141
|
-
|
|
142
|
-
let { labels } = json;
|
|
143
|
-
|
|
144
|
-
const labelsJSON = labels; ///
|
|
145
|
-
|
|
146
|
-
labels = labelsJSON.map((labelJSON) => {
|
|
147
|
-
const json = labelJSON, ///
|
|
148
|
-
label = Label.fromJSONAndFileContext(json, fileContext);
|
|
149
|
-
|
|
150
|
-
return label;
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
let { premises } = json;
|
|
154
|
-
|
|
155
|
-
const premisesJSON = premises; ///
|
|
156
|
-
|
|
157
|
-
premises = premisesJSON.map((premiseJSON) => {
|
|
158
|
-
const json = premiseJSON, ///
|
|
159
|
-
premise = Premise.fromJSONAndFileContext(json, fileContext);
|
|
160
|
-
|
|
161
|
-
return premise;
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
let { conclusion } = json;
|
|
165
|
-
|
|
166
|
-
const conclusionJSON = conclusion; ///
|
|
167
|
-
|
|
168
|
-
json = conclusionJSON; ///
|
|
169
|
-
|
|
170
|
-
conclusion = Conclusion.fromJSONAndFileContext(json, fileContext);
|
|
171
|
-
|
|
172
|
-
rule = new Rule(labels, premises, conclusion, fileContext);
|
|
173
|
-
|
|
174
|
-
return rule;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
static fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext) {
|
|
178
|
-
const rule = new Rule(labels, premises, conclusion, fileContext);
|
|
179
|
-
|
|
180
|
-
return rule;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
|
|
185
|
-
const proofStep = prune(proofSteps, (proofStep) => {
|
|
186
|
-
const subproofNode = proofStep.getSubproofNode(),
|
|
187
|
-
statementNode = proofStep.getStatementNode()
|
|
188
|
-
|
|
189
|
-
if (subproofNode !== null) {
|
|
190
|
-
const subProofNodeMatches = premise.matchSubproofNode(subproofNode, substitutions, fileContext, statementLocalContext);
|
|
191
|
-
|
|
192
|
-
if (!subProofNodeMatches) { ///
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (statementNode !== null) {
|
|
198
|
-
const statementNodeMatches = premise.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext);
|
|
199
|
-
|
|
200
|
-
if (!statementNodeMatches) { ///
|
|
201
|
-
return true;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}) || null;
|
|
205
|
-
|
|
206
|
-
const premiseMatches = (proofStep !== null);
|
|
207
|
-
|
|
208
|
-
return premiseMatches;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function matchPremises(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
|
|
212
|
-
const premisesMatch = premise.every((premise) => {
|
|
213
|
-
const premiseMatches = matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext);
|
|
214
|
-
|
|
215
|
-
if (premiseMatches) {
|
|
216
|
-
return true;
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
return premisesMatch;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function matchConclusion(conclusion, statementNode, substitutions, fileContext, statementLocalContext) {
|
|
224
|
-
const statementNodeMatches = conclusion.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext),
|
|
225
|
-
conclusionMatches = statementNodeMatches; ///
|
|
226
|
-
|
|
227
|
-
return conclusionMatches;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
function metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
|
|
231
|
-
const metaproofStep = prune(metaproofSteps, (metaproofStep) => {
|
|
232
|
-
const ruleSubproofNode = metaproofStep.getRuleSubproofNode(),
|
|
233
|
-
metastatementNode = metaproofStep.getMetastatementNode()
|
|
234
|
-
|
|
235
|
-
if (ruleSubproofNode !== null) {
|
|
236
|
-
const ruleSubProofNodeMatches = premise.matchRuleSubproofNode(ruleSubproofNode, substitutions, fileContext, metastatementLocalMetaContext);
|
|
237
|
-
|
|
238
|
-
if (!ruleSubProofNodeMatches) { ///
|
|
239
|
-
return true;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (metastatementNode !== null) {
|
|
244
|
-
const metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext);
|
|
245
|
-
|
|
246
|
-
if (!metastatementNodeMatches) { ///
|
|
247
|
-
return true;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}) || null;
|
|
251
|
-
|
|
252
|
-
const premiseMatches = (metaproofStep !== null);
|
|
253
|
-
|
|
254
|
-
return premiseMatches;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
function metaMatchPremises(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
|
|
258
|
-
const premisesMatch = premise.every((premise) => {
|
|
259
|
-
const premiseMatches = metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext);
|
|
260
|
-
|
|
261
|
-
if (premiseMatches) {
|
|
262
|
-
return true;
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
return premisesMatch;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function metaMatchConclusion(conclusion, metastatementNode, substitutions, fileContext, metastatementLocalMetaContext) {
|
|
270
|
-
const metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext),
|
|
271
|
-
conclusionMatches = metastatementNodeMatches; ///
|
|
272
|
-
|
|
273
|
-
return conclusionMatches;
|
|
274
|
-
}
|