occam-verify-cli 0.0.449 → 0.0.451
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/constructor.js +8 -6
- package/lib/context/file.js +43 -3
- package/lib/context/release/directory.js +20 -1
- package/lib/context/release/file.js +26 -3
- package/lib/kinds.js +5 -1
- package/lib/lemma.js +146 -0
- package/lib/verify/assertion/type.js +57 -7
- package/lib/verify/declaration/topLevel.js +7 -3
- package/lib/verify/lemma.js +61 -0
- package/lib/verify/release.js +5 -5
- package/lib/verify/term.js +55 -22
- package/package.json +1 -1
- package/src/constructor.js +7 -5
- package/src/context/file.js +48 -2
- package/src/context/release/directory.js +24 -0
- package/src/context/release/file.js +32 -3
- package/src/kinds.js +1 -0
- package/src/lemma.js +130 -0
- package/src/verify/assertion/type.js +26 -9
- package/src/verify/declaration/topLevel.js +7 -0
- package/src/verify/lemma.js +86 -0
- package/src/verify/release.js +5 -5
- package/src/verify/term.js +68 -19
- package/lib/verify/termAsVariable.js +0 -33
- package/src/verify/termAsVariable.js +0 -41
package/lib/verify/term.js
CHANGED
|
@@ -2,46 +2,79 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
default: function() {
|
|
8
13
|
return verifyTerm;
|
|
14
|
+
},
|
|
15
|
+
verifyTermAsVariable: function() {
|
|
16
|
+
return verifyTermAsVariable;
|
|
17
|
+
},
|
|
18
|
+
verifyTermAgainstConstructors: function() {
|
|
19
|
+
return verifyTermAgainstConstructors;
|
|
9
20
|
}
|
|
10
21
|
});
|
|
11
|
-
var _termAsVariable = /*#__PURE__*/ _interopRequireDefault(require("../verify/termAsVariable"));
|
|
12
22
|
var _array = require("../utilities/array");
|
|
13
23
|
var _string = require("../utilities/string");
|
|
14
24
|
var _ruleNames = require("../ruleNames");
|
|
15
25
|
var _query = require("../utilities/query");
|
|
16
|
-
|
|
17
|
-
return obj && obj.__esModule ? obj : {
|
|
18
|
-
default: obj
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!");
|
|
26
|
+
var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!"), variableNodeQuery = (0, _query.nodeQuery)("/term/variable!");
|
|
22
27
|
function verifyTerm(termNode, types, values, context) {
|
|
23
28
|
var termVerified = false;
|
|
24
29
|
context.begin(termNode);
|
|
25
|
-
var
|
|
30
|
+
var termVerifiedAsVariable = verifyTermAsVariable(termNode, types, values, context);
|
|
26
31
|
if (termVerifiedAsVariable) {
|
|
27
32
|
termVerified = true;
|
|
28
33
|
} else {
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
if (termVerifiedAgainstConstructor) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
}) || null;
|
|
35
|
-
if (constructor !== null) {
|
|
36
|
-
var type = constructor.getType(), value = termNode; ///
|
|
37
|
-
types.push(type);
|
|
38
|
-
values.push(value);
|
|
34
|
+
var termVerifiedAgainstConstructors = verifyTermAgainstConstructors(termNode, types, values, context);
|
|
35
|
+
if (termVerifiedAgainstConstructors) {
|
|
39
36
|
termVerified = true;
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
39
|
termVerified ? context.complete(termNode) : context.halt(termNode);
|
|
43
40
|
return termVerified;
|
|
44
41
|
}
|
|
42
|
+
function verifyTermAsVariable(termNode, types, values, context) {
|
|
43
|
+
var termVerifiedAsVariable = false;
|
|
44
|
+
context.begin(termNode);
|
|
45
|
+
var variableNode = variableNodeQuery(termNode);
|
|
46
|
+
if (variableNode !== null) {
|
|
47
|
+
var variableName = (0, _query.variableNameFromVariableNode)(variableNode), variablePresent = context.isVariablePresentByVariableName(variableName);
|
|
48
|
+
if (!variablePresent) {
|
|
49
|
+
context.error("The ".concat(variableName, " variable is not present."));
|
|
50
|
+
} else {
|
|
51
|
+
var variable = context.findVariableByVariableName(variableName), type = variable.getType(), value = variable.getValue();
|
|
52
|
+
types.push(type);
|
|
53
|
+
values.push(value);
|
|
54
|
+
termVerifiedAsVariable = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
termVerifiedAsVariable ? context.complete(termNode) : context.halt(termNode);
|
|
58
|
+
return termVerifiedAsVariable;
|
|
59
|
+
}
|
|
60
|
+
function verifyTermAgainstConstructors(termNode, types, values, context) {
|
|
61
|
+
var termVerifiedAgainstConstructors = false;
|
|
62
|
+
context.begin(termNode);
|
|
63
|
+
var constructors = context.getConstructors(), constructor = constructors.find(function(constructor) {
|
|
64
|
+
var termVerifiedAgainstConstructor = verifyTermAgainstConstructor(termNode, constructor, context);
|
|
65
|
+
if (termVerifiedAgainstConstructor) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}) || null;
|
|
69
|
+
if (constructor !== null) {
|
|
70
|
+
var type = constructor.getType(), value = termNode; ///
|
|
71
|
+
types.push(type);
|
|
72
|
+
values.push(value);
|
|
73
|
+
termVerifiedAgainstConstructors = true;
|
|
74
|
+
}
|
|
75
|
+
termVerifiedAgainstConstructors ? context.complete(termNode) : context.halt(termNode);
|
|
76
|
+
return termVerifiedAgainstConstructors;
|
|
77
|
+
}
|
|
45
78
|
function verifyTermAgainstConstructor(termNode, constructor, context) {
|
|
46
79
|
var constructorTermNode = constructor.getTermNode(), node = termNode, constructorNode = constructorTermNode, nodeVerified = verifyNode(node, constructorNode, context), termVerifiedAgainstConstructor = nodeVerified; ///
|
|
47
80
|
return termVerifiedAgainstConstructor;
|
|
@@ -120,4 +153,4 @@ function verifyArgumentNode(argumentNode, constructorArgumentNode, context) {
|
|
|
120
153
|
return argumentNodeVerified;
|
|
121
154
|
}
|
|
122
155
|
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlIGZyb20gXCIuLi92ZXJpZnkvdGVybUFzVmFyaWFibGVcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCB0eXBlTmFtZUZyb21UeXBlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIilcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIHZhbHVlcywgY29udGV4dCkge1xuICBsZXQgdGVybVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29udGV4dC5iZWdpbih0ZXJtTm9kZSk7XG5cbiAgY29uc3QgbmFtZXMgPSBbXSxcbiAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB0eXBlcywgbmFtZXMsIHZhbHVlcywgY29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFzVmFyaWFibGUpIHtcbiAgICB0ZXJtVmVyaWZpZWQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCksXG4gICAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcnMuZmluZCgoY29uc3RydWN0b3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvciA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3IodGVybU5vZGUsIGNvbnN0cnVjdG9yLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGNvbnN0cnVjdG9yICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gY29uc3RydWN0b3IuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgdmFsdWUgPSB0ZXJtTm9kZTsgLy8vXG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG5cbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcblxuICAgICAgdGVybVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0ZXJtVmVyaWZpZWQgP1xuICAgIGNvbnRleHQuY29tcGxldGUodGVybU5vZGUpIDpcbiAgICAgIGNvbnRleHQuaGFsdCh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3Rvcih0ZXJtTm9kZSwgY29uc3RydWN0b3IsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvclRlcm1Ob2RlLCAvLy9cbiAgICAgICAgbm9kZVZlcmlmaWVkID0gdmVyaWZ5Tm9kZShub2RlLCBjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IgPSBub2RlVmVyaWZpZWQ7ICAvLy9cblxuICByZXR1cm4gdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlOb2RlKG5vZGUsIGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZVZlcmlmaWVkO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yTm9kZVRlcm1pbmFsTm9kZSA9IGNvbnN0cnVjdG9yTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBjb25zdHJ1Y3Rvck5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JUZXJtaW5hbE5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsICAvLy9cbiAgICAgICAgICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdmVyaWZ5VGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZSwgY29uc3RydWN0b3JUZXJtaW5hbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBub2RlVmVyaWZpZWQgPSB0ZXJtaW5hbE5vZGVWZXJpZmllZDsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlID0gY29uc3RydWN0b3JOb2RlLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IHZlcmlmeU5vblRlcm1pbmFsTm9kZShub25UZXJtaW5hbE5vZGUsIGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLCBjb250ZXh0KTtcblxuICAgICAgbm9kZVZlcmlmaWVkID0gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUNoaWxkTm9kZXMoY2hpbGROb2RlcywgY29uc3RydWN0b3JDaGlsZE5vZGVzLCBjb250ZXh0KSB7XG4gIGxldCBjaGlsZE5vZGVzVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgIGNvbnN0cnVjdG9yQ2hpbGROb2Rlc0xlbmd0aCA9IGNvbnN0cnVjdG9yQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPT09IGNvbnN0cnVjdG9yQ2hpbGROb2Rlc0xlbmd0aCkge1xuICAgIGNoaWxkTm9kZXNWZXJpZmllZCA9IGNoaWxkTm9kZXMuZXZlcnkoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yQ2hpbGROb2RlID0gY29uc3RydWN0b3JDaGlsZE5vZGVzW2luZGV4XSxcbiAgICAgICAgICAgIG5vZGUgPSBjaGlsZE5vZGUsIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vZGVWZXJpZmllZCA9IHZlcmlmeU5vZGUobm9kZSwgY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKG5vZGVWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE5vZGVzVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVRlcm1pbmFsTm9kZSh0ZXJtaW5hbE5vZGUsIGNvbnN0cnVjdG9yVGVybWluYWxOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtaW5hbE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGUubWF0Y2goY29uc3RydWN0b3JUZXJtaW5hbE5vZGUpO1xuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgdGVybWluYWxOb2RlVmVyaWZpZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmFsTm9kZVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlOb25UZXJtaW5hbE5vZGUobm9uVGVybWluYWxOb2RlLCBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvclJ1bGVOYW1lID0gY29uc3RydWN0b3JOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICBpZiAocnVsZU5hbWUgPT09IGNvbnN0cnVjdG9yUnVsZU5hbWUpIHtcbiAgICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgICBjYXNlIEFSR1VNRU5UX1JVTEVfTkFNRToge1xuICAgICAgICBjb25zdCBhcmd1bWVudE5vZGUgPSBub25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB2ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBhcmd1bWVudE5vZGVWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIGNvbnN0cnVjdG9yQ2hpbGROb2RlcyA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc1ZlcmlmaWVkID0gdmVyaWZ5Q2hpbGROb2RlcyhjaGlsZE5vZGVzLCBjb25zdHJ1Y3RvckNoaWxkTm9kZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gY2hpbGROb2Rlc1ZlcmlmaWVkOyAvLy9cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFyZ3VtZW50Tm9kZShhcmd1bWVudE5vZGUsIGNvbnN0cnVjdG9yQXJndW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeShhcmd1bWVudE5vZGUpO1xuXG4gIGlmICh0ZXJtTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBjb250ZXh0LmVycm9yKGBUaGUgJHthcmd1bWVudFN0cmluZ30gYXJndW1lbnQgc2hvdWxkIGJlIGEgdGVybSwgbm90IGEgdHlwZWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgICAgdmFsdWVzID0gW10sXG4gICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIHZhbHVlcywgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBmaXJzdFR5cGUgPSBmaXJzdCh0eXBlcyksXG4gICAgICAgICAgICB0ZXJtVHlwZSA9IGZpcnN0VHlwZSwgLy8vXG4gICAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkoY29uc3RydWN0b3JBcmd1bWVudE5vZGUpLFxuICAgICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpLFxuICAgICAgICAgICAgdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUpIHtcbiAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudE5vZGVWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlUZXJtIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0ZXJtTm9kZSIsInR5cGVzIiwidmFsdWVzIiwiY29udGV4dCIsInRlcm1WZXJpZmllZCIsImJlZ2luIiwibmFtZXMiLCJ0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlIiwidmVyaWZ5VGVybUFzVmFyaWFibGUiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvciIsImZpbmQiLCJ0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9yIiwidHlwZSIsImdldFR5cGUiLCJ2YWx1ZSIsInB1c2giLCJjb21wbGV0ZSIsImhhbHQiLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwiZ2V0VGVybU5vZGUiLCJub2RlIiwiY29uc3RydWN0b3JOb2RlIiwibm9kZVZlcmlmaWVkIiwidmVyaWZ5Tm9kZSIsIm5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsImNvbnN0cnVjdG9yTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImNvbnN0cnVjdG9yVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZVZlcmlmaWVkIiwidmVyaWZ5Tm9uVGVybWluYWxOb2RlIiwidmVyaWZ5Q2hpbGROb2RlcyIsImNoaWxkTm9kZXMiLCJjb25zdHJ1Y3RvckNoaWxkTm9kZXMiLCJjaGlsZE5vZGVzVmVyaWZpZWQiLCJjaGlsZE5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiY29uc3RydWN0b3JDaGlsZE5vZGVzTGVuZ3RoIiwiZXZlcnkiLCJjaGlsZE5vZGUiLCJpbmRleCIsImNvbnN0cnVjdG9yQ2hpbGROb2RlIiwibWF0Y2hlcyIsIm1hdGNoIiwicnVsZU5hbWUiLCJnZXRSdWxlTmFtZSIsImNvbnN0cnVjdG9yUnVsZU5hbWUiLCJBUkdVTUVOVF9SVUxFX05BTUUiLCJhcmd1bWVudE5vZGUiLCJjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50Tm9kZVZlcmlmaWVkIiwidmVyaWZ5QXJndW1lbnROb2RlIiwiZ2V0Q2hpbGROb2RlcyIsImFyZ3VtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZXJyb3IiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInRlcm1UeXBlIiwidHlwZU5vZGUiLCJ0eXBlTmFtZSIsInR5cGVOYW1lRnJvbVR5cGVOb2RlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBd0JBOzs7bUVBVlM7cUJBRVg7c0JBQ087eUJBQ007cUJBQ2E7Ozs7OztBQUVoRCxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsb0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVB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
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCB0eXBlTmFtZUZyb21UeXBlTm9kZSwgdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIiksXG4gICAgICB2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIHZhbHVlcywgY29udGV4dCkge1xuICBsZXQgdGVybVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29udGV4dC5iZWdpbih0ZXJtTm9kZSk7XG5cbiAgY29uc3QgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB0eXBlcywgdmFsdWVzLCBjb250ZXh0KTtcblxuICBpZiAodGVybVZlcmlmaWVkQXNWYXJpYWJsZSkge1xuICAgIHRlcm1WZXJpZmllZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgdmFsdWVzLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzKSB7XG4gICAgICB0ZXJtVmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRlcm1WZXJpZmllZCA/XG4gICAgY29udGV4dC5jb21wbGV0ZSh0ZXJtTm9kZSkgOlxuICAgICAgY29udGV4dC5oYWx0KHRlcm1Ob2RlKTtcblxuICByZXR1cm4gdGVybVZlcmlmaWVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VGVybUFzVmFyaWFibGUodGVybU5vZGUsIHR5cGVzLCB2YWx1ZXMsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb250ZXh0LmJlZ2luKHRlcm1Ob2RlKTtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVRdWVyeSh0ZXJtTm9kZSk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSBjb250ZXh0LmlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICAgIGlmICghdmFyaWFibGVQcmVzZW50KSB7XG4gICAgICBjb250ZXh0LmVycm9yKGBUaGUgJHt2YXJpYWJsZU5hbWV9IHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpLFxuICAgICAgICB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhcmlhYmxlLmdldFZhbHVlKCk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG5cbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcblxuICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA/XG4gICAgY29udGV4dC5jb21wbGV0ZSh0ZXJtTm9kZSkgOlxuICAgICAgY29udGV4dC5oYWx0KHRlcm1Ob2RlKTtcblxuICByZXR1cm4gdGVybVZlcmlmaWVkQXNWYXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgdmFsdWVzLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzID0gZmFsc2U7XG5cbiAgY29udGV4dC5iZWdpbih0ZXJtTm9kZSk7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcnMuZmluZCgoY29uc3RydWN0b3IpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3IgPSB2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9yKHRlcm1Ob2RlLCBjb25zdHJ1Y3RvciwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGNvbnN0cnVjdG9yICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZSA9IGNvbnN0cnVjdG9yLmdldFR5cGUoKSxcbiAgICAgICAgICB2YWx1ZSA9IHRlcm1Ob2RlOyAvLy9cblxuICAgIHR5cGVzLnB1c2godHlwZSk7XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG5cbiAgICB0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzID0gdHJ1ZTtcbiAgfVxuXG4gIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMgP1xuICAgIGNvbnRleHQuY29tcGxldGUodGVybU5vZGUpIDpcbiAgICAgIGNvbnRleHQuaGFsdCh0ZXJtTm9kZSk7XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3IodGVybU5vZGUsIGNvbnN0cnVjdG9yLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yVGVybU5vZGUgPSBjb25zdHJ1Y3Rvci5nZXRUZXJtTm9kZSgpLFxuICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JUZXJtTm9kZSwgLy8vXG4gICAgICAgIG5vZGVWZXJpZmllZCA9IHZlcmlmeU5vZGUobm9kZSwgY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yID0gbm9kZVZlcmlmaWVkOyAgLy8vXG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9kZShub2RlLCBjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVWZXJpZmllZDtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3Rvck5vZGVUZXJtaW5hbE5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZVRlcm1pbmFsTm9kZSA9PT0gY29uc3RydWN0b3JOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yVGVybWluYWxOb2RlID0gY29uc3RydWN0b3JOb2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVWZXJpZmllZCA9IHZlcmlmeVRlcm1pbmFsTm9kZSh0ZXJtaW5hbE5vZGUsIGNvbnN0cnVjdG9yVGVybWluYWxOb2RlLCBjb250ZXh0KTtcblxuICAgICAgbm9kZVZlcmlmaWVkID0gdGVybWluYWxOb2RlVmVyaWZpZWQ7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSB2ZXJpZnlOb25UZXJtaW5hbE5vZGUobm9uVGVybWluYWxOb2RlLCBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIG5vZGVWZXJpZmllZCA9IG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkOyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlDaGlsZE5vZGVzKGNoaWxkTm9kZXMsIGNvbnN0cnVjdG9yQ2hpbGROb2RlcywgY29udGV4dCkge1xuICBsZXQgY2hpbGROb2Rlc1ZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICBjb25zdHJ1Y3RvckNoaWxkTm9kZXNMZW5ndGggPSBjb25zdHJ1Y3RvckNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChjaGlsZE5vZGVzTGVuZ3RoID09PSBjb25zdHJ1Y3RvckNoaWxkTm9kZXNMZW5ndGgpIHtcbiAgICBjaGlsZE5vZGVzVmVyaWZpZWQgPSBjaGlsZE5vZGVzLmV2ZXJ5KChjaGlsZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvckNoaWxkTm9kZSA9IGNvbnN0cnVjdG9yQ2hpbGROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBub2RlID0gY2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBub2RlVmVyaWZpZWQgPSB2ZXJpZnlOb2RlKG5vZGUsIGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChub2RlVmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGROb2Rlc1ZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtaW5hbE5vZGUodGVybWluYWxOb2RlLCBjb25zdHJ1Y3RvclRlcm1pbmFsTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlLm1hdGNoKGNvbnN0cnVjdG9yVGVybWluYWxOb2RlKTtcblxuICBpZiAobWF0Y2hlcykge1xuICAgIHRlcm1pbmFsTm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hbE5vZGVWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZSwgY29uc3RydWN0b3JOb25UZXJtaW5hbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgY29uc3RydWN0b3JSdWxlTmFtZSA9IGNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgaWYgKHJ1bGVOYW1lID09PSBjb25zdHJ1Y3RvclJ1bGVOYW1lKSB7XG4gICAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgICAgY2FzZSBBUkdVTUVOVF9SVUxFX05BTUU6IHtcbiAgICAgICAgY29uc3QgYXJndW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgY29uc3RydWN0b3JBcmd1bWVudE5vZGUgPSBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdmVyaWZ5QXJndW1lbnROb2RlKGFyZ3VtZW50Tm9kZSwgY29uc3RydWN0b3JBcmd1bWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gYXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckNoaWxkTm9kZXMgPSBjb25zdHJ1Y3Rvck5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNWZXJpZmllZCA9IHZlcmlmeUNoaWxkTm9kZXMoY2hpbGROb2RlcywgY29uc3RydWN0b3JDaGlsZE5vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9IGNoaWxkTm9kZXNWZXJpZmllZDsgLy8vXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb25zdHJ1Y3RvckFyZ3VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJndW1lbnROb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkoYXJndW1lbnROb2RlKTtcblxuICBpZiAodGVybU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBhcmd1bWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhhcmd1bWVudE5vZGUpO1xuXG4gICAgY29udGV4dC5lcnJvcihgVGhlICR7YXJndW1lbnRTdHJpbmd9IGFyZ3VtZW50IHNob3VsZCBiZSBhIHRlcm0sIG5vdCBhIHR5cGVgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgIHZhbHVlcyA9IFtdLFxuICAgICAgICAgIHRlcm1WZXJpZmllZCA9IHZlcmlmeVRlcm0odGVybU5vZGUsIHR5cGVzLCB2YWx1ZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1WZXJpZmllZCkge1xuICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZVF1ZXJ5KGNvbnN0cnVjdG9yQXJndW1lbnROb2RlKSxcbiAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnROb2RlVmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5VGVybSIsInZlcmlmeVRlcm1Bc1ZhcmlhYmxlIiwidmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsInZhcmlhYmxlTm9kZVF1ZXJ5IiwidGVybU5vZGUiLCJ0eXBlcyIsInZhbHVlcyIsImNvbnRleHQiLCJ0ZXJtVmVyaWZpZWQiLCJiZWdpbiIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJ0ZXJtVmVyaWZpZWRBZ2FpbnN0Q29uc3RydWN0b3JzIiwiY29tcGxldGUiLCJoYWx0IiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlUHJlc2VudCIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJlcnJvciIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUiLCJ0eXBlIiwiZ2V0VHlwZSIsInZhbHVlIiwiZ2V0VmFsdWUiLCJwdXNoIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3IiLCJmaW5kIiwidGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9yIiwidmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybU5vZGUiLCJnZXRUZXJtTm9kZSIsIm5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJub2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlIiwibm9kZVRlcm1pbmFsTm9kZSIsImlzVGVybWluYWxOb2RlIiwiY29uc3RydWN0b3JOb2RlVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwiY29uc3RydWN0b3JUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGVWZXJpZmllZCIsInZlcmlmeVRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsImNvbnN0cnVjdG9yTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlVmVyaWZpZWQiLCJ2ZXJpZnlOb25UZXJtaW5hbE5vZGUiLCJ2ZXJpZnlDaGlsZE5vZGVzIiwiY2hpbGROb2RlcyIsImNvbnN0cnVjdG9yQ2hpbGROb2RlcyIsImNoaWxkTm9kZXNWZXJpZmllZCIsImNoaWxkTm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJjb25zdHJ1Y3RvckNoaWxkTm9kZXNMZW5ndGgiLCJldmVyeSIsImNoaWxkTm9kZSIsImluZGV4IiwiY29uc3RydWN0b3JDaGlsZE5vZGUiLCJtYXRjaGVzIiwibWF0Y2giLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwiY29uc3RydWN0b3JSdWxlTmFtZSIsIkFSR1VNRU5UX1JVTEVfTkFNRSIsImFyZ3VtZW50Tm9kZSIsImNvbnN0cnVjdG9yQXJndW1lbnROb2RlIiwiYXJndW1lbnROb2RlVmVyaWZpZWQiLCJ2ZXJpZnlBcmd1bWVudE5vZGUiLCJnZXRDaGlsZE5vZGVzIiwiYXJndW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJmaXJzdFR5cGUiLCJmaXJzdCIsInRlcm1UeXBlIiwidHlwZU5vZGUiLCJ0eXBlTmFtZSIsInR5cGVOYW1lRnJvbVR5cGVOb2RlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQVdBLE9Bc0JDO2VBdEJ1QkE7O0lBd0JSQyxvQkFBb0I7ZUFBcEJBOztJQWlDQUMsNkJBQTZCO2VBQTdCQTs7O3FCQWxFTTtzQkFDTzt5QkFDTTtxQkFDMkM7QUFFOUUsSUFBTUMsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkUsb0JBQW9CRixJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLFNBQVNKLFdBQVdPLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRTtJQUNuRSxJQUFJQyxlQUFlLEtBQUs7SUFFeEJE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
|
package/package.json
CHANGED
package/src/constructor.js
CHANGED
|
@@ -61,15 +61,17 @@ export default class Constructor {
|
|
|
61
61
|
|
|
62
62
|
let { type } = json;
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
if (type !== null) {
|
|
65
|
+
const typeJSON = type; ///
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
json = typeJSON; ///
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
type = Type.fromJSON(json, releaseContext);
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
const typeName = type.getName();
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
type = releaseContext.findTypeByTypeName(typeName); ///
|
|
74
|
+
}
|
|
73
75
|
|
|
74
76
|
const constructor = new Constructor(termNode, type);
|
|
75
77
|
|
package/src/context/file.js
CHANGED
|
@@ -6,7 +6,7 @@ import { push } from "../utilities/array";
|
|
|
6
6
|
import { leastLineIndexFromNodeAndTokens, greatestLineIndexFromNodeAndTokens } from "../utilities/tokens";
|
|
7
7
|
|
|
8
8
|
export default class FileContext {
|
|
9
|
-
constructor(releaseContext, filePath, tokens, node, types, rules, axioms, variables, combinators, constructors) {
|
|
9
|
+
constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, combinators, constructors) {
|
|
10
10
|
this.releaseContext = releaseContext;
|
|
11
11
|
this.filePath = filePath;
|
|
12
12
|
this.tokens = tokens;
|
|
@@ -14,6 +14,7 @@ export default class FileContext {
|
|
|
14
14
|
this.types = types;
|
|
15
15
|
this.rules = rules;
|
|
16
16
|
this.axioms = axioms;
|
|
17
|
+
this.lemmas = lemmas;
|
|
17
18
|
this.variables = variables;
|
|
18
19
|
this.combinators = combinators;
|
|
19
20
|
this.constructors = constructors;
|
|
@@ -54,6 +55,12 @@ export default class FileContext {
|
|
|
54
55
|
push(labels, axiomLabels);
|
|
55
56
|
});
|
|
56
57
|
|
|
58
|
+
this.lemmas.forEach((lemma) => {
|
|
59
|
+
const lemmaLabels = lemma.getLabels();
|
|
60
|
+
|
|
61
|
+
push(labels, lemmaLabels);
|
|
62
|
+
});
|
|
63
|
+
|
|
57
64
|
if (includeRelease) {
|
|
58
65
|
const releaseContextLabels = this.releaseContext.getLabels();
|
|
59
66
|
|
|
@@ -105,6 +112,20 @@ export default class FileContext {
|
|
|
105
112
|
return axioms;
|
|
106
113
|
}
|
|
107
114
|
|
|
115
|
+
getLemmas(includeRelease = true) {
|
|
116
|
+
const lemmas = [];
|
|
117
|
+
|
|
118
|
+
push(lemmas, this.lemmas);
|
|
119
|
+
|
|
120
|
+
if (includeRelease) {
|
|
121
|
+
const releaseContextLemmas = this.releaseContext.getLemmas();
|
|
122
|
+
|
|
123
|
+
push(lemmas, releaseContextLemmas);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return lemmas;
|
|
127
|
+
}
|
|
128
|
+
|
|
108
129
|
getCombinators(includeRelease = true) {
|
|
109
130
|
const combinators = [];
|
|
110
131
|
|
|
@@ -200,6 +221,20 @@ export default class FileContext {
|
|
|
200
221
|
return axiom;
|
|
201
222
|
}
|
|
202
223
|
|
|
224
|
+
findLemmaByReferenceName(referenceName) {
|
|
225
|
+
const labelName = referenceName, ///
|
|
226
|
+
lemmas = this.getLemmas(),
|
|
227
|
+
lemma = lemmas.find((lemma) => {
|
|
228
|
+
const lemmaMatchesLabelName = lemma.matchLabelName(labelName);
|
|
229
|
+
|
|
230
|
+
if (lemmaMatchesLabelName) {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
}) || null;
|
|
234
|
+
|
|
235
|
+
return lemma;
|
|
236
|
+
}
|
|
237
|
+
|
|
203
238
|
findVariableByVariableName(variableName) {
|
|
204
239
|
const name = variableName, ///
|
|
205
240
|
variables = this.getVariables(),
|
|
@@ -247,6 +282,10 @@ export default class FileContext {
|
|
|
247
282
|
this.axioms.push(axiom);
|
|
248
283
|
}
|
|
249
284
|
|
|
285
|
+
addLemma(lemma) {
|
|
286
|
+
this.lemmas.push(lemma);
|
|
287
|
+
}
|
|
288
|
+
|
|
250
289
|
addVariable(variable) {
|
|
251
290
|
this.variables.push(variable);
|
|
252
291
|
}
|
|
@@ -313,6 +352,12 @@ export default class FileContext {
|
|
|
313
352
|
json.push(axiomJSON);
|
|
314
353
|
});
|
|
315
354
|
|
|
355
|
+
this.lemmas.forEach((lemma) => {
|
|
356
|
+
const lemmaJSON = lemma.toJSON();
|
|
357
|
+
|
|
358
|
+
json.push(lemmaJSON);
|
|
359
|
+
});
|
|
360
|
+
|
|
316
361
|
this.combinators.forEach((combinator) => {
|
|
317
362
|
const combinatorJSON = combinator.toJSON();
|
|
318
363
|
|
|
@@ -339,10 +384,11 @@ export default class FileContext {
|
|
|
339
384
|
const types = [],
|
|
340
385
|
rules = [],
|
|
341
386
|
axioms = [],
|
|
387
|
+
lemmas = [],
|
|
342
388
|
variables = [],
|
|
343
389
|
combinators = [],
|
|
344
390
|
constructors = [],
|
|
345
|
-
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, variables, combinators, constructors);
|
|
391
|
+
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, combinators, constructors);
|
|
346
392
|
|
|
347
393
|
return fileContext;
|
|
348
394
|
}
|
|
@@ -112,6 +112,30 @@ export default class DirectoryReleaseContext extends ReleaseContext {
|
|
|
112
112
|
return axioms;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
getLemmas(includeDependencies = true) {
|
|
116
|
+
const lemmas = [];
|
|
117
|
+
|
|
118
|
+
this.fileContexts.forEach((fileContext) => {
|
|
119
|
+
const includeRelease = false,
|
|
120
|
+
fileContextLemmas = fileContext.getLemmas(includeRelease);
|
|
121
|
+
|
|
122
|
+
push(lemmas, fileContextLemmas);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
if (includeDependencies) {
|
|
126
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
127
|
+
|
|
128
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
129
|
+
const includeDependencies = false,
|
|
130
|
+
releaseContextLemmas = releaseContext.getLemmas(includeDependencies);
|
|
131
|
+
|
|
132
|
+
push(lemmas, releaseContextLemmas);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return lemmas;
|
|
137
|
+
}
|
|
138
|
+
|
|
115
139
|
getCombinators(includeDependencies = true) {
|
|
116
140
|
const combinators = [];
|
|
117
141
|
|
|
@@ -12,15 +12,16 @@ import Constructor from "../../constructor";
|
|
|
12
12
|
|
|
13
13
|
import { push } from "../../utilities/array";
|
|
14
14
|
import { customGrammarFromNameAndEntries } from "../../utilities/customGrammar";
|
|
15
|
-
import { RULE_KIND, TYPE_KIND, AXIOM_KIND, COMBINATOR_KIND, CONSTRUCTOR_KIND } from "../../kinds";
|
|
15
|
+
import { RULE_KIND, TYPE_KIND, AXIOM_KIND, LEMMA_KIND, COMBINATOR_KIND, CONSTRUCTOR_KIND } from "../../kinds";
|
|
16
16
|
|
|
17
17
|
export default class FileReleaseContext extends ReleaseContext {
|
|
18
|
-
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, combinators, constructors) {
|
|
18
|
+
constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, lemmas, combinators, constructors) {
|
|
19
19
|
super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts);
|
|
20
20
|
|
|
21
21
|
this.types = types;
|
|
22
22
|
this.rules = rules;
|
|
23
23
|
this.axioms = axioms;
|
|
24
|
+
this.lemmas = lemmas;
|
|
24
25
|
this.combinators = combinators;
|
|
25
26
|
this.constructors = constructors;
|
|
26
27
|
this.contextJSON = contextJSON;
|
|
@@ -116,6 +117,25 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
116
117
|
return axioms;
|
|
117
118
|
}
|
|
118
119
|
|
|
120
|
+
getLemmas(includeDependencies = true) {
|
|
121
|
+
const lemmas = [];
|
|
122
|
+
|
|
123
|
+
push(lemmas, this.lemmas);
|
|
124
|
+
|
|
125
|
+
if (includeDependencies) {
|
|
126
|
+
const dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
127
|
+
|
|
128
|
+
dependencyReleaseContexts.forEach((releaseContext) => {
|
|
129
|
+
const includeDependencies = false,
|
|
130
|
+
releaseContextLemmas = releaseContext.getLemmas(includeDependencies);
|
|
131
|
+
|
|
132
|
+
push(lemmas, releaseContextLemmas);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return lemmas;
|
|
137
|
+
}
|
|
138
|
+
|
|
119
139
|
getCombinators(includeDependencies = true) {
|
|
120
140
|
const combinators = [];
|
|
121
141
|
|
|
@@ -201,6 +221,14 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
201
221
|
break;
|
|
202
222
|
}
|
|
203
223
|
|
|
224
|
+
case LEMMA_KIND: {
|
|
225
|
+
const lemma = Lemma.fromJSON(json, releaseContext);
|
|
226
|
+
|
|
227
|
+
this.lemmas.push(lemma);
|
|
228
|
+
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
|
|
204
232
|
case COMBINATOR_KIND: {
|
|
205
233
|
const combinator = Combinator.fromJSON(json, releaseContext);
|
|
206
234
|
|
|
@@ -229,9 +257,10 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
229
257
|
types = [],
|
|
230
258
|
rules = [],
|
|
231
259
|
axioms = [],
|
|
260
|
+
lemmas = [],
|
|
232
261
|
combinators = [],
|
|
233
262
|
constructors = [],
|
|
234
|
-
releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, combinators, constructors);
|
|
263
|
+
releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, lemmas, combinators, constructors);
|
|
235
264
|
|
|
236
265
|
return releaseContext;
|
|
237
266
|
}
|
package/src/kinds.js
CHANGED
package/src/lemma.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Label from "./label";
|
|
4
|
+
|
|
5
|
+
import { LEMMA_KIND } from "./kinds";
|
|
6
|
+
import { nodeAsString } from "./utilities/string";
|
|
7
|
+
|
|
8
|
+
import { statementNodeFromStatementJSON } from "./utilities/node";
|
|
9
|
+
|
|
10
|
+
export default class Lemma {
|
|
11
|
+
constructor(labels, statementNode, suppositionStatementNodes, consequentStatementNode) {
|
|
12
|
+
this.labels = labels;
|
|
13
|
+
this.statementNode = statementNode;
|
|
14
|
+
this.suppositionStatementNodes = suppositionStatementNodes;
|
|
15
|
+
this.consequentStatementNode = consequentStatementNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
getLabels() {
|
|
19
|
+
return this.labels;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getStatementNode() {
|
|
23
|
+
return this.statementNode;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
getSuppositionStatementNodes() {
|
|
27
|
+
return this.suppositionStatementNodes;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
getConsequentStatementNode() {
|
|
31
|
+
return this.consequentStatementNode;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
matchLabelName(labelName) {
|
|
35
|
+
const matchesLabelName = 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 matchesLabelName;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
toJSON() {
|
|
48
|
+
const labelsJSON = this.labels.map((label) => {
|
|
49
|
+
const labelJSON = label.toJSON();
|
|
50
|
+
|
|
51
|
+
return labelJSON;
|
|
52
|
+
}),
|
|
53
|
+
statementString = nodeAsString(this.statementNode),
|
|
54
|
+
consequentStatementString = nodeAsString(this.consequentStatementNode),
|
|
55
|
+
suppositionStatementStrings = this.suppositionStatementNodes.map((suppositionStatementNode) => {
|
|
56
|
+
const suppositionStatementString = nodeAsString(suppositionStatementNode);
|
|
57
|
+
|
|
58
|
+
return suppositionStatementString;
|
|
59
|
+
}),
|
|
60
|
+
kind = LEMMA_KIND,
|
|
61
|
+
labels = labelsJSON, ///
|
|
62
|
+
statement = statementString, ///
|
|
63
|
+
consequent = consequentStatementString, ///
|
|
64
|
+
suppositions = suppositionStatementStrings, ///
|
|
65
|
+
json = {
|
|
66
|
+
kind,
|
|
67
|
+
labels,
|
|
68
|
+
statement,
|
|
69
|
+
consequent,
|
|
70
|
+
suppositions
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return json;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
static fromJSON(json, releaseContext) {
|
|
77
|
+
let { labels } = json;
|
|
78
|
+
|
|
79
|
+
const labelsJSON = labels; ///
|
|
80
|
+
|
|
81
|
+
labels = labelsJSON.map((labelJSON) => {
|
|
82
|
+
const json = labelJSON, ///
|
|
83
|
+
label = Label.fromJSON(json, releaseContext);
|
|
84
|
+
|
|
85
|
+
return label;
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const { statement, suppositions, consequent } = json;
|
|
89
|
+
|
|
90
|
+
let lemma;
|
|
91
|
+
|
|
92
|
+
if (statement !== null) {
|
|
93
|
+
const statementJSON = statement, ///
|
|
94
|
+
statementNode = statementNodeFromStatementJSON(statementJSON, releaseContext),
|
|
95
|
+
suppositionStatementNodes = null,
|
|
96
|
+
consequentStatementNode = null;
|
|
97
|
+
|
|
98
|
+
lemma = new Lemma(labels, statementNode, suppositionStatementNodes, consequentStatementNode);
|
|
99
|
+
} else {
|
|
100
|
+
const statementNode = null,
|
|
101
|
+
suppositionStatementsJSON = suppositions, ///
|
|
102
|
+
suppositionStatementNodes = suppositionStatementsJSON.map((suppositionStatementJSON) => {
|
|
103
|
+
const suppositionStatementNode = statementNodeFromStatementJSON(suppositionStatementJSON, releaseContext);
|
|
104
|
+
|
|
105
|
+
return suppositionStatementNode;
|
|
106
|
+
}),
|
|
107
|
+
consequentStatementJSON = consequent, ///
|
|
108
|
+
consequentStatementNode = statementNodeFromStatementJSON(consequentStatementJSON, releaseContext);
|
|
109
|
+
|
|
110
|
+
lemma = new Lemma(labels, statementNode, suppositionStatementNodes, consequentStatementNode);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return lemma;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
static fromLabelsAndStatementNode(labels, statementNode) {
|
|
117
|
+
const suppositionStatementNodes = [],
|
|
118
|
+
consequentStatementNode = null,
|
|
119
|
+
lemma = new Lemma(labels, statementNode, suppositionStatementNodes, consequentStatementNode);
|
|
120
|
+
|
|
121
|
+
return lemma;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
static fromLabelsSuppositionStatementNodesAndConsequentStatementNode(labels, suppositionStatementNodes, consequentStatementNode) {
|
|
125
|
+
const statementNode = null,
|
|
126
|
+
lemma = new Lemma(labels, statementNode, suppositionStatementNodes, consequentStatementNode);
|
|
127
|
+
|
|
128
|
+
return lemma;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Variable from "../../variable";
|
|
4
|
-
import
|
|
4
|
+
import verifyTerm from "../../verify/term";
|
|
5
5
|
|
|
6
6
|
import { first } from "../../utilities/array";
|
|
7
|
+
import { nodeAsString } from "../../utilities/string";
|
|
7
8
|
import { nodeQuery, typeNameFromTypeNode } from "../../utilities/query";
|
|
9
|
+
import { verifyTermAsVariable, verifyTermAgainstConstructors } from "../../verify/term";
|
|
8
10
|
|
|
9
11
|
const termNodeQuery = nodeQuery("/typeAssertion/term"),
|
|
10
12
|
typeNodeQuery = nodeQuery("/typeAssertion/type");
|
|
@@ -27,16 +29,15 @@ export default function verifyTypeAssertion(typeAssertionNode, proofContext) {
|
|
|
27
29
|
debugger
|
|
28
30
|
} else {
|
|
29
31
|
const types = [],
|
|
30
|
-
names = [],
|
|
31
32
|
values = [],
|
|
32
33
|
context = proofContext, ///
|
|
33
34
|
termNode = termNodeQuery(typeAssertionNode),
|
|
34
|
-
|
|
35
|
+
termString = nodeAsString(termNode),
|
|
36
|
+
termVerifiedAsVariable = verifyTermAsVariable(termNode, types, values, context);
|
|
35
37
|
|
|
36
38
|
if (termVerifiedAsVariable) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
variableName = firstName, ///
|
|
39
|
+
const firstValue = first(values),
|
|
40
|
+
variableName = termString, ///
|
|
40
41
|
value = firstValue; ///
|
|
41
42
|
|
|
42
43
|
if (value !== undefined) {
|
|
@@ -45,16 +46,32 @@ export default function verifyTypeAssertion(typeAssertionNode, proofContext) {
|
|
|
45
46
|
const type = proofContext.findTypeByTypeName(typeName),
|
|
46
47
|
firstType = first(types),
|
|
47
48
|
variableType = firstType, ///
|
|
48
|
-
|
|
49
|
+
typeEqualToOrSubTypeOfVariableType = type.isEqualToOrSubTypeOf(variableType);
|
|
49
50
|
|
|
50
|
-
if (!
|
|
51
|
-
proofContext.error(`The asserted type of the ${variableName} variable is not a sub-type of its declared type.`);
|
|
51
|
+
if (!typeEqualToOrSubTypeOfVariableType) {
|
|
52
|
+
proofContext.error(`The asserted type of the ${variableName} variable is not equal to or a sub-type of its declared type.`);
|
|
52
53
|
} else {
|
|
53
54
|
const name = variableName, ///
|
|
54
55
|
variable = Variable.fromTypeAndName(type, name);
|
|
55
56
|
|
|
56
57
|
proofContext.addVariable(variable);
|
|
57
58
|
|
|
59
|
+
typeAssertionVerified = true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} else {
|
|
63
|
+
const termVerifiedAgainstConstructors = verifyTermAgainstConstructors(termNode, types, values, context);
|
|
64
|
+
|
|
65
|
+
if (termVerifiedAgainstConstructors) {
|
|
66
|
+
const type = proofContext.findTypeByTypeName(typeName),
|
|
67
|
+
firstType = first(types),
|
|
68
|
+
termType = firstType, ///
|
|
69
|
+
typeEqualToOrSubTypeOfTermType = type.isEqualToOrSubTypeOf(termType);
|
|
70
|
+
|
|
71
|
+
if (!typeEqualToOrSubTypeOfTermType) {
|
|
72
|
+
proofContext.error(`The asserted type of the '${termString}' term is not equal to or a sub-type of its declared type.`);
|
|
73
|
+
} else {
|
|
74
|
+
|
|
58
75
|
typeAssertionVerified = true;
|
|
59
76
|
}
|
|
60
77
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyRule from "../../verify/rule";
|
|
4
4
|
import verifyAxiom from "../../verify/axiom";
|
|
5
|
+
import verifyLemma from "../../verify/lemma";
|
|
5
6
|
import verifyTypeDeclaration from "../../verify/declaration/type";
|
|
6
7
|
import verifyVariableDeclaration from "../../verify/declaration/variable";
|
|
7
8
|
import verifyCombinatorDeclaration from "../../verify/declaration/combinator";
|
|
@@ -11,6 +12,7 @@ import { nodeQuery } from "../../utilities/query";
|
|
|
11
12
|
|
|
12
13
|
const ruleNodeQuery = nodeQuery("/topLevelDeclaration/rule!"),
|
|
13
14
|
axiomNodeQuery = nodeQuery("/topLevelDeclaration/axiom!"),
|
|
15
|
+
lemmaNodeQuery = nodeQuery("/topLevelDeclaration/lemma!"),
|
|
14
16
|
typeDeclarationNodeQuery = nodeQuery("/topLevelDeclaration/typeDeclaration!"),
|
|
15
17
|
variableDeclarationNodeQuery = nodeQuery("/topLevelDeclaration/variableDeclaration!"),
|
|
16
18
|
combinatorDeclarationNodeQuery = nodeQuery("/topLevelDeclaration/combinatorDeclaration!"),
|
|
@@ -24,6 +26,7 @@ export default function verifyTopLevelDeclaration(topLevelDeclarationNode, fileC
|
|
|
24
26
|
const node = topLevelDeclarationNode, ///
|
|
25
27
|
ruleNode = ruleNodeQuery(node),
|
|
26
28
|
axiomNode = axiomNodeQuery(node),
|
|
29
|
+
lemmaNode = lemmaNodeQuery(node),
|
|
27
30
|
typeDeclarationNode = typeDeclarationNodeQuery(node),
|
|
28
31
|
variableDeclarationNode = variableDeclarationNodeQuery(node),
|
|
29
32
|
combinatorDeclarationNode = combinatorDeclarationNodeQuery(node),
|
|
@@ -39,6 +42,10 @@ export default function verifyTopLevelDeclaration(topLevelDeclarationNode, fileC
|
|
|
39
42
|
const axiomVerified = verifyAxiom(axiomNode, fileContext);
|
|
40
43
|
|
|
41
44
|
topLevelDeclarationVerified = axiomVerified; ///
|
|
45
|
+
} else if (lemmaNode !== null) {
|
|
46
|
+
const lemmaVerified = verifyLemma(lemmaNode, fileContext);
|
|
47
|
+
|
|
48
|
+
topLevelDeclarationVerified = lemmaVerified; ///
|
|
42
49
|
} else if (typeDeclarationNode !== null) {
|
|
43
50
|
const typeDeclarationVerified = verifyTypeDeclaration(typeDeclarationNode, fileContext);
|
|
44
51
|
|