occam-verify-cli 0.0.491 → 0.0.494
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/metaAntecedent.js +214 -0
- package/lib/premise.js +2 -2
- package/lib/verify/antecedent.js +2 -2
- package/lib/verify/assertion/type.js +81 -0
- package/lib/verify/derivation.js +11 -14
- package/lib/verify/metaAntecedent.js +41 -0
- package/lib/verify/metaDerivation.js +11 -14
- package/lib/verify/metaproof.js +5 -18
- package/lib/verify/metastatement.js +19 -0
- package/lib/verify/proof.js +5 -18
- package/lib/verify/statement.js +9 -9
- package/package.json +3 -3
- package/src/metaAntecedent.js +235 -0
- package/src/premise.js +2 -2
- package/src/verify/antecedent.js +1 -1
- package/src/verify/{statementTypeAssertion.js → assertion/type.js} +29 -34
- package/src/verify/derivation.js +14 -19
- package/src/verify/metaAntecedent.js +44 -0
- package/src/verify/metaDerivation.js +14 -19
- package/src/verify/metaproof.js +3 -25
- package/src/verify/metastatement.js +15 -0
- package/src/verify/proof.js +3 -25
- package/src/verify/statement.js +10 -9
- package/lib/equality.js +0 -190
- package/lib/verify/statementAsEquality.js +0 -76
- package/lib/verify/statementTypeAssertion.js +0 -84
- package/src/equality.js +0 -231
- package/src/verify/statementAsEquality.js +0 -101
package/src/verify/proof.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import ProofStep from "../step/proof";
|
|
4
3
|
import verifyDerivation from "../verify/derivation";
|
|
5
|
-
import verifyQualifiedStatement from "./statement/qualified";
|
|
6
4
|
|
|
7
5
|
import { matchNode } from "../utilities/node";
|
|
8
6
|
import { nodeQuery } from "../utilities/query";
|
|
9
7
|
|
|
10
|
-
const
|
|
11
|
-
derivationNodeQuery = nodeQuery("/proof/derivation!"),
|
|
12
|
-
qualifiedStatementNodeQuery = nodeQuery("/proof/qualifiedStatement!");
|
|
8
|
+
const derivationNodeQuery = nodeQuery("/proof/derivation!");
|
|
13
9
|
|
|
14
10
|
export default function verifyProof(proofNode, conclusion, proofContext) {
|
|
15
11
|
let proofVerified = false;
|
|
@@ -17,27 +13,9 @@ export default function verifyProof(proofNode, conclusion, proofContext) {
|
|
|
17
13
|
proofContext.begin(proofNode);
|
|
18
14
|
|
|
19
15
|
const derivationNode = derivationNodeQuery(proofNode),
|
|
20
|
-
|
|
16
|
+
derivationVerified = verifyDerivation(derivationNode, proofContext);
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
qualifiedStatementVerified = false;
|
|
24
|
-
|
|
25
|
-
if (derivationNode !== null) {
|
|
26
|
-
derivationVerified = verifyDerivation(derivationNode, proofContext);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (qualifiedStatementNode !== null) {
|
|
30
|
-
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, proofContext);
|
|
31
|
-
|
|
32
|
-
if (qualifiedStatementVerified) {
|
|
33
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
34
|
-
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
35
|
-
|
|
36
|
-
proofContext.addProofStep(proofStep);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (derivationVerified || qualifiedStatementVerified) {
|
|
18
|
+
if (derivationVerified) {
|
|
41
19
|
const lastProofStep = proofContext.getLastProofStep(),
|
|
42
20
|
proofStep = lastProofStep, ///
|
|
43
21
|
statementNode = proofStep.getStatementNode(),
|
package/src/verify/statement.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import verifyTypeAssertion from "../verify/assertion/type";
|
|
4
|
+
|
|
5
|
+
import { nodeQuery } from "../utilities/query";
|
|
6
|
+
|
|
7
|
+
const typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
5
8
|
|
|
6
9
|
export default function verifyStatement(statementNode, qualified, proofContext) {
|
|
7
10
|
let statementVerified = false;
|
|
@@ -9,15 +12,13 @@ export default function verifyStatement(statementNode, qualified, proofContext)
|
|
|
9
12
|
proofContext.begin(statementNode);
|
|
10
13
|
|
|
11
14
|
if (!statementVerified) {
|
|
12
|
-
const
|
|
15
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (!statementVerified) {
|
|
18
|
-
const statementTypeAssertionVerified = verifyStatementTypeAssertion(statementNode, qualified, proofContext);
|
|
17
|
+
if (typeAssertionNode !== null) {
|
|
18
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, qualified, proofContext);
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
statementVerified = typeAssertionVerified; ///
|
|
21
|
+
}
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
statementVerified ?
|
package/lib/equality.js
DELETED
|
@@ -1,190 +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 Equality;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _query = require("./utilities/query");
|
|
12
|
-
var _ruleNames = require("./ruleNames");
|
|
13
|
-
var _constants = require("./constants");
|
|
14
|
-
function _classCallCheck(instance, Constructor) {
|
|
15
|
-
if (!(instance instanceof Constructor)) {
|
|
16
|
-
throw new TypeError("Cannot call a class as a function");
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
function _defineProperties(target, props) {
|
|
20
|
-
for(var i = 0; i < props.length; i++){
|
|
21
|
-
var descriptor = props[i];
|
|
22
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
23
|
-
descriptor.configurable = true;
|
|
24
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
25
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
29
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
30
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
31
|
-
return Constructor;
|
|
32
|
-
}
|
|
33
|
-
var specialNodeQuery = (0, _query.nodeQuery)("/statement/@special!"), leftTermNodeQuery = (0, _query.nodeQuery)("/statement/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/statement/term[1]");
|
|
34
|
-
var Equality = /*#__PURE__*/ function() {
|
|
35
|
-
function Equality(leftTermNode, rightTermNode) {
|
|
36
|
-
_classCallCheck(this, Equality);
|
|
37
|
-
this.leftTermNode = leftTermNode;
|
|
38
|
-
this.rightTermNode = rightTermNode;
|
|
39
|
-
}
|
|
40
|
-
_createClass(Equality, [
|
|
41
|
-
{
|
|
42
|
-
key: "getLeftTermNode",
|
|
43
|
-
value: function getLeftTermNode() {
|
|
44
|
-
return this.leftTermNode;
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
key: "getRightTermNode",
|
|
49
|
-
value: function getRightTermNode() {
|
|
50
|
-
return this.rightTermNode;
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
key: "match",
|
|
55
|
-
value: function match(equality, equalities, proofContext) {
|
|
56
|
-
var matches = false;
|
|
57
|
-
var leftTermNode = equality.getLeftTermNode(), rightTermNode = equality.getRightTermNode();
|
|
58
|
-
if (!matches) {
|
|
59
|
-
var reversed = false, leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext);
|
|
60
|
-
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
61
|
-
}
|
|
62
|
-
if (!matches) {
|
|
63
|
-
var reversed1 = true, leftTermNodeAndRightTermNodeMatch1 = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed1, equalities, proofContext);
|
|
64
|
-
matches = leftTermNodeAndRightTermNodeMatch1; ///
|
|
65
|
-
}
|
|
66
|
-
return matches;
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
key: "matchLeftTermNodeAndRightTermNode",
|
|
71
|
-
value: function matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext) {
|
|
72
|
-
var leftTermNodeAndRightTermNodeMatch = true;
|
|
73
|
-
if (leftTermNodeAndRightTermNodeMatch) {
|
|
74
|
-
var leftNonTerminalNode = reversed ? this.rightTermNode : this.leftTermNode, rightNonTerminalNode = leftTermNode, nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext);
|
|
75
|
-
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
|
|
76
|
-
}
|
|
77
|
-
if (leftTermNodeAndRightTermNodeMatch) {
|
|
78
|
-
var leftNonTerminalNode1 = reversed ? this.leftTermNode : this.rightTermNode, rightNonTerminalNode1 = rightTermNode, nonTerminalNodeEquates1 = equateNonTerminalNode(leftNonTerminalNode1, rightNonTerminalNode1, equalities, proofContext);
|
|
79
|
-
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates1; ///
|
|
80
|
-
}
|
|
81
|
-
return leftTermNodeAndRightTermNodeMatch;
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
key: "equate",
|
|
86
|
-
value: function equate(equalities, proofContext) {
|
|
87
|
-
var leftNonTerminalNode = this.leftTermNode, rightNonTerminalNode = this.rightTermNode, nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext), equates = nonTerminalNodeEquates; ///
|
|
88
|
-
return equates;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
], [
|
|
92
|
-
{
|
|
93
|
-
key: "fromProofStep",
|
|
94
|
-
value: function fromProofStep(proofStep) {
|
|
95
|
-
var equality = null;
|
|
96
|
-
var statementNode = proofStep.getStatementNode();
|
|
97
|
-
if (statementNode !== null) {
|
|
98
|
-
var specialNode = specialNodeQuery(statementNode);
|
|
99
|
-
if (specialNode !== null) {
|
|
100
|
-
var terminalNode = specialNode, terminalNodeContent = terminalNode.getContent();
|
|
101
|
-
if (terminalNodeContent === _constants.EQUALS_CHARACTER) {
|
|
102
|
-
var leftTermNode = leftTermNodeQuery(statementNode), rightTermNode = rightTermNodeQuery(statementNode);
|
|
103
|
-
equality = new Equality(leftTermNode, rightTermNode);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return equality;
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
key: "fromLeftTermNodeAndRightTermNode",
|
|
112
|
-
value: function fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
|
|
113
|
-
var equality = new Equality(leftTermNode, rightTermNode);
|
|
114
|
-
return equality;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
]);
|
|
118
|
-
return Equality;
|
|
119
|
-
}();
|
|
120
|
-
function equateNode(nodeA, nodeB, equalities, proofContext) {
|
|
121
|
-
var nodeEquates = false;
|
|
122
|
-
var nodeATerminalNode = nodeA.isTerminalNode(), nodeBTerminalNode = nodeB.isTerminalNode();
|
|
123
|
-
if (nodeATerminalNode === nodeBTerminalNode) {
|
|
124
|
-
if (nodeATerminalNode) {
|
|
125
|
-
var terminalNodeA = nodeA, terminalNodeB = nodeB, terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, equalities, proofContext);
|
|
126
|
-
nodeEquates = terminalNodeEquates; ///
|
|
127
|
-
} else {
|
|
128
|
-
var nonTerminalNodeA = nodeA, nonTerminalNodeB = nodeB, nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equalities, proofContext);
|
|
129
|
-
nodeEquates = nonTerminalNodeEquates; ///
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return nodeEquates;
|
|
133
|
-
}
|
|
134
|
-
function equateNodes(leftNodes, rightNodes, equalities, proofContext) {
|
|
135
|
-
var nodesEquate = false;
|
|
136
|
-
var leftNodesLength = leftNodes.length, rightNodesLength = rightNodes.length;
|
|
137
|
-
if (leftNodesLength === rightNodesLength) {
|
|
138
|
-
nodesEquate = leftNodes.every(function(LeftNode, index) {
|
|
139
|
-
var rightNode = rightNodes[index], nodeEquates = equateNode(LeftNode, rightNode, equalities, proofContext);
|
|
140
|
-
if (nodeEquates) {
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
return nodesEquate;
|
|
146
|
-
}
|
|
147
|
-
function equateTerminalNode(terminalNodeA, terminalNodeB, equalities, proofContext) {
|
|
148
|
-
var matches = terminalNodeA.match(terminalNodeB), terminalNodeEquates = matches; ///
|
|
149
|
-
return terminalNodeEquates;
|
|
150
|
-
}
|
|
151
|
-
function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext) {
|
|
152
|
-
var nonTerminalNodeEquates = false;
|
|
153
|
-
var leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(), rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
|
|
154
|
-
if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
|
|
155
|
-
var ruleName = leftNonTerminalNodeRuleName, ruleNameTermRuleName = ruleName === _ruleNames.TERM_RULE_NAME;
|
|
156
|
-
if (ruleNameTermRuleName) {
|
|
157
|
-
var leftTermNode = leftNonTerminalNode, rightTermNode = rightNonTerminalNode, termNodeEquates = equateTermNode(leftTermNode, rightTermNode, equalities, proofContext);
|
|
158
|
-
nonTerminalNodeEquates = termNodeEquates; ///
|
|
159
|
-
}
|
|
160
|
-
if (!nonTerminalNodeEquates) {
|
|
161
|
-
var leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftNodes = leftNonTerminalNodeChildNodes, rightNodes = rightNonTerminalNodeChildNodes, nodesEquate = equateNodes(leftNodes, rightNodes, equalities, proofContext);
|
|
162
|
-
nonTerminalNodeEquates = nodesEquate; ///
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return nonTerminalNodeEquates;
|
|
166
|
-
}
|
|
167
|
-
function equateTermNode(leftTermNode, rightTermNode, equalities, proofContext) {
|
|
168
|
-
var equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode), equalityA = equality, equalityMatches = equalities.some(function(equality) {
|
|
169
|
-
var equalitiesB = equalities; ///
|
|
170
|
-
var equalityB = equality; ///
|
|
171
|
-
equalitiesB = pruneEqualities(equalitiesB, equalityB); ///
|
|
172
|
-
var equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, proofContext);
|
|
173
|
-
if (equalityAMatchesEqualityB) {
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
}), termNodeEquates = equalityMatches; ///
|
|
177
|
-
return termNodeEquates;
|
|
178
|
-
}
|
|
179
|
-
function pruneEqualities(equalities, equality) {
|
|
180
|
-
var equalityA = equality; ///
|
|
181
|
-
equalities = equalities.filter(function(equality) {
|
|
182
|
-
var equalityB = equality; ///
|
|
183
|
-
if (equalityA !== equalityB) {
|
|
184
|
-
return true;
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
return equalities;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lcXVhbGl0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBURVJNX1JVTEVfTkFNRSB9IGZyb20gXCIuL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgRVFVQUxTX0NIQVJBQ1RFUiB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCBzcGVjaWFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9Ac3BlY2lhbCFcIiksXG4gICAgICBsZWZ0VGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdGVybVswXVwiKSxcbiAgICAgIHJpZ2h0VGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdGVybVsxXVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXF1YWxpdHkge1xuICBjb25zdHJ1Y3RvcihsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUpIHtcbiAgICB0aGlzLmxlZnRUZXJtTm9kZSA9IGxlZnRUZXJtTm9kZTtcbiAgICB0aGlzLnJpZ2h0VGVybU5vZGUgPSByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtTm9kZTtcbiAgfVxuXG4gIG1hdGNoKGVxdWFsaXR5LCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHkuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5LmdldFJpZ2h0VGVybU5vZGUoKTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgY29uc3QgcmV2ZXJzZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGVNYXRjaCA9IHRoaXMubWF0Y2hMZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgcmV2ZXJzZWQsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG1hdGNoZXMgPSBsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2g7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IHJldmVyc2VkID0gdHJ1ZSxcbiAgICAgICAgICAgIGxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGVNYXRjaCA9IHRoaXMubWF0Y2hMZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgcmV2ZXJzZWQsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG1hdGNoZXMgPSBsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2g7ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZShsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIHJldmVyc2VkLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgICBsZXQgbGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZU1hdGNoID0gdHJ1ZTtcblxuICAgIGlmIChsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSByZXZlcnNlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0VGVybU5vZGUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRUZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGUgPSBsZWZ0VGVybU5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUVxdWF0ZXMgPSBlcXVhdGVOb25UZXJtaW5hbE5vZGUobGVmdE5vblRlcm1pbmFsTm9kZSwgcmlnaHROb25UZXJtaW5hbE5vZGUsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIGxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGVNYXRjaCA9IG5vblRlcm1pbmFsTm9kZUVxdWF0ZXM7IC8vL1xuICAgIH1cblxuICAgIGlmIChsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSByZXZlcnNlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRUZXJtTm9kZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRUZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGUgPSByaWdodFRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVFcXVhdGVzID0gZXF1YXRlTm9uVGVybWluYWxOb2RlKGxlZnROb25UZXJtaW5hbE5vZGUsIHJpZ2h0Tm9uVGVybWluYWxOb2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICBsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2ggPSBub25UZXJtaW5hbE5vZGVFcXVhdGVzOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZU1hdGNoO1xuICB9XG5cbiAgZXF1YXRlKGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCkge1xuICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSB0aGlzLmxlZnRUZXJtTm9kZSwgIC8vL1xuICAgICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlID0gdGhpcy5yaWdodFRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlRXF1YXRlcyA9IGVxdWF0ZU5vblRlcm1pbmFsTm9kZShsZWZ0Tm9uVGVybWluYWxOb2RlLCByaWdodE5vblRlcm1pbmFsTm9kZSwgZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KSxcbiAgICAgICAgICBlcXVhdGVzID0gbm9uVGVybWluYWxOb2RlRXF1YXRlczsgLy8vXG5cbiAgICByZXR1cm4gZXF1YXRlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUHJvb2ZTdGVwKHByb29mU3RlcCkge1xuICAgIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJvb2ZTdGVwLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcGVjaWFsTm9kZSA9IHNwZWNpYWxOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzcGVjaWFsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBzcGVjaWFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIGlmICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBFUVVBTFNfQ0hBUkFDVEVSKSB7XG4gICAgICAgICAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlcXVhdGVOb2RlKG5vZGVBLCBub2RlQiwgZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBub2RlRXF1YXRlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVBVGVybWluYWxOb2RlID0gbm9kZUEuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZUJUZXJtaW5hbE5vZGUgPSBub2RlQi5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlQVRlcm1pbmFsTm9kZSA9PT0gbm9kZUJUZXJtaW5hbE5vZGUpIHtcbiAgICBpZiAobm9kZUFUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZUEgPSBub2RlQSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlQiA9IG5vZGVCLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcXVhdGVzID0gZXF1YXRlVGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZUEsIHRlcm1pbmFsTm9kZUIsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG5vZGVFcXVhdGVzID0gdGVybWluYWxOb2RlRXF1YXRlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVBID0gbm9kZUEsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUIgPSBub2RlQiwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVFcXVhdGVzID0gZXF1YXRlTm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG5vZGVFcXVhdGVzID0gbm9uVGVybWluYWxOb2RlRXF1YXRlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGVFcXVhdGVzO1xufVxuXG5mdW5jdGlvbiBlcXVhdGVOb2RlcyhsZWZ0Tm9kZXMsIHJpZ2h0Tm9kZXMsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCkge1xuICBsZXQgbm9kZXNFcXVhdGUgPSBmYWxzZTtcblxuICBjb25zdCBsZWZ0Tm9kZXNMZW5ndGggPSBsZWZ0Tm9kZXMubGVuZ3RoLFxuICAgICAgICByaWdodE5vZGVzTGVuZ3RoID0gcmlnaHROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKGxlZnROb2Rlc0xlbmd0aCA9PT0gcmlnaHROb2Rlc0xlbmd0aCkge1xuICAgIG5vZGVzRXF1YXRlID0gbGVmdE5vZGVzLmV2ZXJ5KChMZWZ0Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJpZ2h0Tm9kZSA9IHJpZ2h0Tm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgbm9kZUVxdWF0ZXMgPSBlcXVhdGVOb2RlKExlZnROb2RlLCByaWdodE5vZGUsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIGlmIChub2RlRXF1YXRlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc0VxdWF0ZTtcbn1cblxuZnVuY3Rpb24gZXF1YXRlVGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZUEsIHRlcm1pbmFsTm9kZUIsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCkge1xuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlQS5tYXRjaCh0ZXJtaW5hbE5vZGVCKSxcbiAgICAgICAgdGVybWluYWxOb2RlRXF1YXRlcyA9IG1hdGNoZXM7ICAvLy9cblxuICByZXR1cm4gdGVybWluYWxOb2RlRXF1YXRlcztcbn1cblxuZnVuY3Rpb24gZXF1YXRlTm9uVGVybWluYWxOb2RlKGxlZnROb25UZXJtaW5hbE5vZGUsIHJpZ2h0Tm9uVGVybWluYWxOb2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZUVxdWF0ZXMgPSBmYWxzZTtcblxuICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBsZWZ0Tm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSByaWdodE5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIGlmIChsZWZ0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJpZ2h0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IGxlZnROb25UZXJtaW5hbE5vZGVSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVUZXJtUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFRFUk1fUlVMRV9OQU1FKTtcblxuICAgIGlmIChydWxlTmFtZVRlcm1SdWxlTmFtZSkge1xuICAgICAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbGVmdE5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICByaWdodFRlcm1Ob2RlID0gcmlnaHROb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgdGVybU5vZGVFcXVhdGVzID0gZXF1YXRlVGVybU5vZGUobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVFcXVhdGVzID0gdGVybU5vZGVFcXVhdGVzOyAgLy8vXG4gICAgfVxuXG4gICAgaWYgKCFub25UZXJtaW5hbE5vZGVFcXVhdGVzKSB7XG4gICAgICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgbGVmdE5vZGVzID0gbGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgcmlnaHROb2RlcyA9IHJpZ2h0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICBub2Rlc0VxdWF0ZSA9IGVxdWF0ZU5vZGVzKGxlZnROb2RlcywgcmlnaHROb2RlcywgZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgbm9uVGVybWluYWxOb2RlRXF1YXRlcyA9IG5vZGVzRXF1YXRlOyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9uVGVybWluYWxOb2RlRXF1YXRlcztcbn1cblxuZnVuY3Rpb24gZXF1YXRlVGVybU5vZGUobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgY29uc3QgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tTGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZShsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUpLFxuICAgICAgICBlcXVhbGl0eUEgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgIGVxdWFsaXR5TWF0Y2hlcyA9IGVxdWFsaXRpZXMuc29tZSgoZXF1YWxpdHkpID0+IHsgLy8vXG4gICAgICAgICAgbGV0IGVxdWFsaXRpZXNCID0gZXF1YWxpdGllczsgLy8vXG5cbiAgICAgICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICAgICAgICBlcXVhbGl0aWVzQiA9IHBydW5lRXF1YWxpdGllcyhlcXVhbGl0aWVzQiwgZXF1YWxpdHlCKTsgIC8vL1xuXG4gICAgICAgICAgY29uc3QgZXF1YWxpdHlBTWF0Y2hlc0VxdWFsaXR5QiA9IGVxdWFsaXR5QS5tYXRjaChlcXVhbGl0eUIsIGVxdWFsaXRpZXNCLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGVxdWFsaXR5QU1hdGNoZXNFcXVhbGl0eUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRlcm1Ob2RlRXF1YXRlcyA9IGVxdWFsaXR5TWF0Y2hlczsgIC8vL1xuXG4gIHJldHVybiB0ZXJtTm9kZUVxdWF0ZXM7XG59XG5cbmZ1bmN0aW9uIHBydW5lRXF1YWxpdGllcyhlcXVhbGl0aWVzLCBlcXVhbGl0eSkge1xuICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXMuZmlsdGVyKChlcXVhbGl0eSkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5OyAvLy9cblxuICAgIGlmIChlcXVhbGl0eUEgIT09IGVxdWFsaXR5Qikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllcztcbn1cbiJdLCJuYW1lcyI6WyJFcXVhbGl0eSIsInNwZWNpYWxOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJsZWZ0VGVybU5vZGVRdWVyeSIsInJpZ2h0VGVybU5vZGVRdWVyeSIsImxlZnRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJlcXVhbGl0eSIsImVxdWFsaXRpZXMiLCJwcm9vZkNvbnRleHQiLCJtYXRjaGVzIiwicmV2ZXJzZWQiLCJsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2giLCJtYXRjaExlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUiLCJsZWZ0Tm9uVGVybWluYWxOb2RlIiwicmlnaHROb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGVFcXVhdGVzIiwiZXF1YXRlTm9uVGVybWluYWxOb2RlIiwiZXF1YXRlIiwiZXF1YXRlcyIsImZyb21Qcm9vZlN0ZXAiLCJwcm9vZlN0ZXAiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNwZWNpYWxOb2RlIiwidGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQ29udGVudCIsImdldENvbnRlbnQiLCJFUVVBTFNfQ0hBUkFDVEVSIiwiZnJvbUxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUiLCJlcXVhdGVOb2RlIiwibm9kZUEiLCJub2RlQiIsIm5vZGVFcXVhdGVzIiwibm9kZUFUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsIm5vZGVCVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQSIsInRlcm1pbmFsTm9kZUIiLCJ0ZXJtaW5hbE5vZGVFcXVhdGVzIiwiZXF1YXRlVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlQSIsIm5vblRlcm1pbmFsTm9kZUIiLCJlcXVhdGVOb2RlcyIsImxlZnROb2RlcyIsInJpZ2h0Tm9kZXMiLCJub2Rlc0VxdWF0ZSIsImxlZnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsInJpZ2h0Tm9kZXNMZW5ndGgiLCJldmVyeSIsIkxlZnROb2RlIiwiaW5kZXgiLCJyaWdodE5vZGUiLCJsZWZ0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJnZXRSdWxlTmFtZSIsInJpZ2h0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJydWxlTmFtZSIsInJ1bGVOYW1lVGVybVJ1bGVOYW1lIiwiVEVSTV9SVUxFX05BTUUiLCJ0ZXJtTm9kZUVxdWF0ZXMiLCJlcXVhdGVUZXJtTm9kZSIsImxlZnROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsInJpZ2h0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsImVxdWFsaXR5QSIsImVxdWFsaXR5TWF0Y2hlcyIsInNvbWUiLCJlcXVhbGl0aWVzQiIsImVxdWFsaXR5QiIsInBydW5lRXF1YWxpdGllcyIsImVxdWFsaXR5QU1hdGNoZXNFcXVhbGl0eUIiLCJmaWx0ZXIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBVXFCQTs7O3FCQVJLO3lCQUNLO3lCQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqQyxJQUFNQyxtQkFBbUJDLElBQUFBLGdCQUFTLEVBQUMseUJBQzdCQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMsdUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUM7QUFFdEIsSUFBQSxBQUFNRix5QkF1R2xCLEFBdkdZO2FBQU1BLFNBQ1BLLFlBQVksRUFBRUMsYUFBYTs4QkFEcEJOO1FBRWpCLElBQUksQ0FBQ0ssWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7O2lCQUhKTjs7WUFNbkJPLEtBQUFBO21CQUFBQSxTQUFBQSxrQkFBa0I7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDRixZQUFZO1lBQzFCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLG1CQUFtQjtnQkFDakIsT0FBTyxJQUFJLENBQUNGLGFBQWE7WUFDM0I7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsTUFBTUMsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFlBQVksRUFBRTtnQkFDeEMsSUFBSUMsVUFBVSxLQUFLO2dCQUVuQixJQUFNUixlQUFlSyxTQUFTSCxlQUFlLElBQ3ZDRCxnQkFBZ0JJLFNBQVNGLGdCQUFnQjtnQkFFL0MsSUFBSSxDQUFDSyxTQUFTO29CQUNaLElBQU1DLFdBQVcsS0FBSyxFQUNoQkMsb0NBQW9DLElBQUksQ0FBQ0MsaUNBQWlDLENBQUNYLGNBQWNDLGVBQWVRLFVBQVVILFlBQVlDO29CQUVwSUMsVUFBVUUsbUNBQW9DLEdBQUc7Z0JBQ25ELENBQUM7Z0JBRUQsSUFBSSxDQUFDRixTQUFTO29CQUNaLElBQU1DLFlBQVcsSUFBSSxFQUNmQyxxQ0FBb0MsSUFBSSxDQUFDQyxpQ0FBaUMsQ0FBQ1gsY0FBY0Ms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
|
|
@@ -1,76 +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 verifyStatementAsEquality;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _equality = /*#__PURE__*/ _interopRequireDefault(require("../equality"));
|
|
12
|
-
var _term = /*#__PURE__*/ _interopRequireDefault(require("../verify/term"));
|
|
13
|
-
var _query = require("../utilities/query");
|
|
14
|
-
var _string = require("../utilities/string");
|
|
15
|
-
var _array = require("../utilities/array");
|
|
16
|
-
var _constants = require("../constants");
|
|
17
|
-
function _interopRequireDefault(obj) {
|
|
18
|
-
return obj && obj.__esModule ? obj : {
|
|
19
|
-
default: obj
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
var specialNodeQuery = (0, _query.nodeQuery)("/statement/@special!"), leftTermNodeQuery = (0, _query.nodeQuery)("/statement/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/statement/term[1]");
|
|
23
|
-
function verifyStatementAsEquality(statementNode, qualified, proofContext) {
|
|
24
|
-
var statementVerifiedAsEquality = false;
|
|
25
|
-
proofContext.begin(statementNode);
|
|
26
|
-
var statementString = (0, _string.nodeAsString)(statementNode);
|
|
27
|
-
proofContext.debug("Verifying the '".concat(statementString, "' statement as an equality..."));
|
|
28
|
-
var specialNode = specialNodeQuery(statementNode);
|
|
29
|
-
if (specialNode !== null) {
|
|
30
|
-
var terminalNode = specialNode, terminalNodeContent = terminalNode.getContent();
|
|
31
|
-
if (terminalNodeContent === _constants.EQUALS_CHARACTER) {
|
|
32
|
-
var types = [], context = proofContext, leftTermNode = leftTermNodeQuery(statementNode), rightTermNode = rightTermNodeQuery(statementNode), leftTermVerified = (0, _term.default)(leftTermNode, types, context), rightTermVerified = (0, _term.default)(rightTermNode, types, context);
|
|
33
|
-
if (leftTermVerified && rightTermVerified) {
|
|
34
|
-
var firstType = (0, _array.first)(types), secondType = (0, _array.second)(types), leftType = firstType, rightType = secondType, leftTermString = (0, _string.nodeAsString)(leftTermNode), rightTermString = (0, _string.nodeAsString)(rightTermNode);
|
|
35
|
-
if (leftType === null && rightType === null) {
|
|
36
|
-
proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms are both undefined and therefore the terms cannot be equated."));
|
|
37
|
-
} else if (rightType === null) {
|
|
38
|
-
proofContext.info("The type of the right '".concat(rightTermString, "' term is undefined and therefore the types cannot be equated."));
|
|
39
|
-
} else if (leftType === null) {
|
|
40
|
-
proofContext.info("The type of the left '".concat(leftTermString, "' term is undefined and therefore the types cannot be equated."));
|
|
41
|
-
} else {
|
|
42
|
-
var leftTypeMatchesRightType = leftType.match(rightType);
|
|
43
|
-
if (!leftTypeMatchesRightType) {
|
|
44
|
-
proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms do not match and therefore the terms cannot be equated."));
|
|
45
|
-
} else {
|
|
46
|
-
if (!qualified) {
|
|
47
|
-
statementVerifiedAsEquality = true;
|
|
48
|
-
} else {
|
|
49
|
-
var equality = _equality.default.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode), proofSteps = proofContext.getProofSteps(), equalities = equalitiesFromProofSteps(proofSteps), equalityEquates = equality.equate(equalities, proofContext);
|
|
50
|
-
statementVerifiedAsEquality = equalityEquates; ///
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (statementVerifiedAsEquality) {
|
|
58
|
-
proofContext.info("Verified the '".concat(statementString, "' equality."));
|
|
59
|
-
}
|
|
60
|
-
statementVerifiedAsEquality ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
|
|
61
|
-
return statementVerifiedAsEquality;
|
|
62
|
-
}
|
|
63
|
-
function equalitiesFromProofSteps(proofSteps) {
|
|
64
|
-
var start = -_constants.MAXIMUM_INDEXES_LENGTH; ///
|
|
65
|
-
proofSteps = proofSteps.slice(start); ///
|
|
66
|
-
var equalities = proofSteps.reduce(function(equalities, proofStep, index) {
|
|
67
|
-
var equality = _equality.default.fromProofStep(proofStep);
|
|
68
|
-
if (equality !== null) {
|
|
69
|
-
equalities.push(equality);
|
|
70
|
-
}
|
|
71
|
-
return equalities;
|
|
72
|
-
}, []);
|
|
73
|
-
return equalities;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50QXNFcXVhbGl0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeVRlcm0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgRVFVQUxTX0NIQVJBQ1RFUiwgTUFYSU1VTV9JTkRFWEVTX0xFTkdUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3Qgc3BlY2lhbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvQHNwZWNpYWwhXCIpLFxuICAgICAgbGVmdFRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3Rlcm1bMF1cIiksXG4gICAgICByaWdodFRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3Rlcm1bMV1cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgcXVhbGlmaWVkLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbihzdGF0ZW1lbnROb2RlKTtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcHJvb2ZDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gIGNvbnN0IHNwZWNpYWxOb2RlID0gc3BlY2lhbE5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoc3BlY2lhbE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBzcGVjaWFsTm9kZSwgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBpZiAodGVybWluYWxOb2RlQ29udGVudCA9PT0gRVFVQUxTX0NIQVJBQ1RFUikge1xuICAgICAgY29uc3QgdHlwZXMgPSBbXSxcbiAgICAgICAgICAgIGNvbnRleHQgPSBwcm9vZkNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIGxlZnRUZXJtTm9kZSA9IGxlZnRUZXJtTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgIGxlZnRUZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKGxlZnRUZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpLFxuICAgICAgICAgICAgcmlnaHRUZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKHJpZ2h0VGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGxlZnRUZXJtVmVyaWZpZWQgJiYgcmlnaHRUZXJtVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgICBzZWNvbmRUeXBlID0gc2Vjb25kKHR5cGVzKSxcbiAgICAgICAgICAgICAgbGVmdFR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgICByaWdodFR5cGUgPSBzZWNvbmRUeXBlLCAvLy9cbiAgICAgICAgICAgICAgbGVmdFRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcobGVmdFRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gbm9kZUFzU3RyaW5nKHJpZ2h0VGVybU5vZGUpO1xuXG4gICAgICAgIGlmICgobGVmdFR5cGUgPT09IG51bGwpICYmIChyaWdodFR5cGUgPT09IG51bGwpKSB7XG4gICAgICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgdHlwZXMgb2YgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zIGFyZSBib3RoIHVuZGVmaW5lZCBhbmQgdGhlcmVmb3JlIHRoZSB0ZXJtcyBjYW5ub3QgYmUgZXF1YXRlZC5gKTtcbiAgICAgICAgfSBlbHNlIGlmIChyaWdodFR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICBwcm9vZkNvbnRleHQuaW5mbyhgVGhlIHR5cGUgb2YgdGhlIHJpZ2h0ICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm0gaXMgdW5kZWZpbmVkIGFuZCB0aGVyZWZvcmUgdGhlIHR5cGVzIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKGxlZnRUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgcHJvb2ZDb250ZXh0LmluZm8oYFRoZSB0eXBlIG9mIHRoZSBsZWZ0ICcke2xlZnRUZXJtU3RyaW5nfScgdGVybSBpcyB1bmRlZmluZWQgYW5kIHRoZXJlZm9yZSB0aGUgdHlwZXMgY2Fubm90IGJlIGVxdWF0ZWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlID0gbGVmdFR5cGUubWF0Y2gocmlnaHRUeXBlKTtcblxuICAgICAgICAgIGlmICghbGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlKSB7XG4gICAgICAgICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSB0eXBlcyBvZiB0aGUgJyR7bGVmdFRlcm1TdHJpbmd9JyBhbmQgJyR7cmlnaHRUZXJtU3RyaW5nfScgdGVybXMgZG8gbm90IG1hdGNoIGFuZCB0aGVyZWZvcmUgdGhlIHRlcm1zIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXF1YWxpZmllZCkge1xuICAgICAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tTGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZShsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICBwcm9vZlN0ZXBzID0gcHJvb2ZDb250ZXh0LmdldFByb29mU3RlcHMoKSxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tUHJvb2ZTdGVwcyhwcm9vZlN0ZXBzKSxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxpdHlFcXVhdGVzID0gZXF1YWxpdHkuZXF1YXRlKGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgICAgICAgc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZXF1YWxpdHlFcXVhdGVzOyAgLy8vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgIHByb29mQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gIH1cblxuICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiBlcXVhbGl0aWVzRnJvbVByb29mU3RlcHMocHJvb2ZTdGVwcykge1xuICBjb25zdCBzdGFydCA9IC1NQVhJTVVNX0lOREVYRVNfTEVOR1RIOyAgLy8vXG5cbiAgcHJvb2ZTdGVwcyA9IHByb29mU3RlcHMuc2xpY2Uoc3RhcnQpOyAvLy9cblxuICBjb25zdCBlcXVhbGl0aWVzID0gcHJvb2ZTdGVwcy5yZWR1Y2UoKGVxdWFsaXRpZXMsIHByb29mU3RlcCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21Qcm9vZlN0ZXAocHJvb2ZTdGVwKTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlcXVhbGl0aWVzO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzcGVjaWFsTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGVmdFRlcm1Ob2RlUXVlcnkiLCJyaWdodFRlcm1Ob2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlIiwicXVhbGlmaWVkIiwicHJvb2ZDb250ZXh0Iiwic3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiYmVnaW4iLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInNwZWNpYWxOb2RlIiwidGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQ29udGVudCIsImdldENvbnRlbnQiLCJFUVVBTFNfQ0hBUkFDVEVSIiwidHlwZXMiLCJjb250ZXh0IiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImxlZnRUZXJtVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtIiwicmlnaHRUZXJtVmVyaWZpZWQiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInNlY29uZFR5cGUiLCJzZWNvbmQiLCJsZWZ0VHlwZSIsInJpZ2h0VHlwZSIsImxlZnRUZXJtU3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwiZXJyb3IiLCJpbmZvIiwibGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlIiwibWF0Y2giLCJlcXVhbGl0eSIsIkVxdWFsaXR5IiwiZnJvbUxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUiLCJwcm9vZlN0ZXBzIiwiZ2V0UHJvb2ZTdGVwcyIsImVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzRnJvbVByb29mU3RlcHMiLCJlcXVhbGl0eUVxdWF0ZXMiLCJlcXVhdGUiLCJjb21wbGV0ZSIsImhhbHQiLCJzdGFydCIsIk1BWElNVU1fSU5ERVhFU19MRU5HVEgiLCJzbGljZSIsInJlZHVjZSIsInByb29mU3RlcCIsImluZGV4IiwiZnJvbVByb29mU3RlcCIsInB1c2giXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBd0JBOzs7NkRBWkg7eURBQ0U7cUJBRUc7c0JBQ0c7cUJBQ0M7eUJBQzJCOzs7Ozs7QUFFekQsSUFBTUMsbUJBQW1CQyxJQUFBQSxnQkFBUyxFQUFDLHlCQUM3QkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDLHVCQUM5QkUscUJBQXFCRixJQUFBQSxnQkFBUyxFQUFDO0FBRXRCLFNBQVNGLDBCQUEwQkssYUFBYSxFQUFFQyxTQUFTLEVBQUVDLFlBQVksRUFBRTtJQUN4RixJQUFJQyw4QkFBOEIsS0FBSztJQUV2Q0QsYUFBYUUsS0FBSyxDQUFDSjtJQUVuQixJQUFNSyxrQkFBa0JDLElBQUFBLG9CQUFZLEVBQUNOO0lBRXJDRSxhQUFhSyxLQUFLLENBQUMsQUFBQyxrQkFBaUMsT0FBaEJGLGlCQUFnQjtJQUVyRCxJQUFNRyxjQUFjWixpQkFBaUJJO0lBRXJDLElBQUlRLGdCQUFnQixJQUFJLEVBQUU7UUFDeEIsSUFBTUMsZUFBZUQsYUFDZkUsc0JBQXNCRCxhQUFhRSxVQUFVO1FBRW5ELElBQUlELHdCQUF3QkUsMkJBQWdCLEVBQUU7WUFDNUMsSUFBTUMsUUFBUSxFQUFFLEVBQ1ZDLFVBQVVaLGNBQ1Zh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
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return verifyStatementTypeAssertion;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
|
|
12
|
-
var _array = require("../utilities/array");
|
|
13
|
-
var _string = require("../utilities/string");
|
|
14
|
-
var _query = require("../utilities/query");
|
|
15
|
-
var _term = require("../verify/term");
|
|
16
|
-
function _interopRequireDefault(obj) {
|
|
17
|
-
return obj && obj.__esModule ? obj : {
|
|
18
|
-
default: obj
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var termNodeQuery = (0, _query.nodeQuery)("/typeAssertion/term"), typeNodeQuery = (0, _query.nodeQuery)("/typeAssertion/type"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
|
|
22
|
-
function verifyStatementTypeAssertion(statementNode, qualified, proofContext) {
|
|
23
|
-
var statementTypeAssertionVerified = false;
|
|
24
|
-
proofContext.begin(statementNode);
|
|
25
|
-
var statementString = (0, _string.nodeAsString)(statementNode);
|
|
26
|
-
proofContext.debug("Verifying the '".concat(statementString, "' statement type assertion..."));
|
|
27
|
-
var typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
28
|
-
if (typeAssertionNode !== null) {
|
|
29
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
30
|
-
if (!typePresent) {
|
|
31
|
-
proofContext.error("The ".concat(typeName, " type is not present."));
|
|
32
|
-
} else {
|
|
33
|
-
if (!statementTypeAssertionVerified) {
|
|
34
|
-
var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, qualified, proofContext);
|
|
35
|
-
statementTypeAssertionVerified = variableTypeAssertionVerified; ///
|
|
36
|
-
}
|
|
37
|
-
if (!statementTypeAssertionVerified) {
|
|
38
|
-
var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, qualified, proofContext);
|
|
39
|
-
statementTypeAssertionVerified = termTypeAssertionVerified; ///
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (statementTypeAssertionVerified) {
|
|
44
|
-
proofContext.info("Verified the '".concat(statementString, "' statement type assertion."));
|
|
45
|
-
}
|
|
46
|
-
statementTypeAssertionVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
|
|
47
|
-
return statementTypeAssertionVerified;
|
|
48
|
-
}
|
|
49
|
-
function verifyVariableTypeAssertion(typeAssertionNode, qualified, proofContext) {
|
|
50
|
-
var variableTypeAssertionVerified = false;
|
|
51
|
-
var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode), termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
52
|
-
if (termVerifiedAsVariable) {
|
|
53
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstVariable = (0, _array.first)(variables), variable = firstVariable, variableName = variable.getName(), variableType = variable.getType();
|
|
54
|
-
var assertedTypeEqualToOrSubTypeOfVariableType = variableType === null ? true : assertedType.isEqualToOrSubTypeOf(variableType);
|
|
55
|
-
if (!assertedTypeEqualToOrSubTypeOfVariableType) {
|
|
56
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
|
|
57
|
-
} else {
|
|
58
|
-
if (!qualified) {
|
|
59
|
-
var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
|
|
60
|
-
proofContext.addVariable(variable1);
|
|
61
|
-
}
|
|
62
|
-
variableTypeAssertionVerified = true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return variableTypeAssertionVerified;
|
|
66
|
-
}
|
|
67
|
-
function verifyTermTypeAssertion(typeAssertionNode, qualified, proofContext) {
|
|
68
|
-
var termTypeAssertionVerified = false;
|
|
69
|
-
var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
|
|
70
|
-
if (termVerifiedAgainstConstructors) {
|
|
71
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstType = (0, _array.first)(types), termType = firstType, termString = (0, _string.nodeAsString)(termNode), assertedTypeEqualToOrSubTypeOfTermType = termType === null ? true : assertedType.isEqualToOrSubTypeOf(termType);
|
|
72
|
-
if (!assertedTypeEqualToOrSubTypeOfTermType) {
|
|
73
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
|
|
74
|
-
} else {
|
|
75
|
-
if (!qualified) {
|
|
76
|
-
debugger;
|
|
77
|
-
}
|
|
78
|
-
termTypeAssertionVerified = true;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return termTypeAssertionVerified;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50VHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUsIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIH0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZUFzc2VydGlvbi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGVcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50VHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSBwcm9vZkNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgJHt0eXBlTmFtZX0gdHlwZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlWYXJpYWJsZVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHF1YWxpZmllZCwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgICAgICBjb25zdCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VGVybVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHF1YWxpZmllZCwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkOyAgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgIHByb29mQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHR5cGUgYXNzZXJ0aW9uLmApO1xuICB9XG5cbiAgc3RhdGVtZW50VHlwZUFzc2VydGlvblZlcmlmaWVkID9cbiAgICBwcm9vZkNvbnRleHQuY29tcGxldGUoc3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCkge1xuICBsZXQgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBpZiAodGVybVZlcmlmaWVkQXNWYXJpYWJsZSkge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgYXNzZXJ0ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgYXNzZXJ0ZWRUeXBlID0gcHJvb2ZDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShhc3NlcnRlZFR5cGVOYW1lKSxcbiAgICAgICAgICBmaXJzdFZhcmlhYmxlID0gZmlyc3QodmFyaWFibGVzKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGZpcnN0VmFyaWFibGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCk7XG5cbiAgICBjb25zdCBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUgPSAodmFyaWFibGVUeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGVkVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih2YXJpYWJsZVR5cGUpO1xuXG4gICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUpIHtcbiAgICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlIGFzc2VydGVkIHR5cGUgaXMgbm90IGVxdWFsIHRvIG9yIGEgc3ViLXR5cGUgb2YgdGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlIHR5cGUuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcXVhbGlmaWVkKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhc3NlcnRlZFR5cGUsICAvLy9cbiAgICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UeXBlQW5kTmFtZSh0eXBlLCBuYW1lKTtcblxuICAgICAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICAgICAgfVxuXG4gICAgICB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcXVhbGlmaWVkLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgICAgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgIHRlcm1UeXBlID0gZmlyc3RUeXBlLFxuICAgICAgICAgIHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlID0gKHRlcm1UeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRlZFR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodGVybVR5cGUpO1xuXG4gICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgZXF1YWwgdG8gb3IgYSBzdWItdHlwZSBvZiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFxdWFsaWZpZWQpIHtcbiAgICAgICAgZGVidWdnZXJcbiAgICAgIH1cblxuICAgICAgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlTdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZSIsInF1YWxpZmllZCIsInByb29mQ29udGV4dCIsInN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCIsImJlZ2luIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJlcnJvciIsInZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uIiwidGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uIiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCIsImNvbnRleHQiLCJ2YXJpYWJsZXMiLCJ0ZXJtTm9kZSIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJ2ZXJpZnlUZXJtQXNWYXJpYWJsZSIsImFzc2VydGVkVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJmaXJzdFZhcmlhYmxlIiwiZmlyc3QiLCJ2YXJpYWJsZSIsInZhcmlhYmxlTmFtZSIsImdldE5hbWUiLCJ2YXJpYWJsZVR5cGUiLCJnZXRUeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVmFyaWFibGVUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJ0eXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiYWRkVmFyaWFibGUiLCJ0eXBlcyIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyIsImZpcnN0VHlwZSIsInRlcm1UeXBlIiwidGVybVN0cmluZyIsImFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQXdCQTs7OzZEQVhIO3FCQUVDO3NCQUNPO3FCQUNtQjtvQkFDb0I7Ozs7OztBQUVwRSxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCRSx5QkFBeUJGLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsNkJBQTZCSyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsWUFBWSxFQUFFO0lBQzNGLElBQUlDLGlDQUFpQyxLQUFLO0lBRTFDRCxhQUFhRSxLQUFLLENBQUNKO0lBRW5CLElB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
|