occam-verify-cli 0.0.478 → 0.0.480
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/conclusion.js +113 -29
- package/lib/constants.js +5 -1
- package/lib/equality.js +10 -13
- package/lib/metaSubstitution.js +26 -24
- package/lib/premise.js +149 -38
- package/lib/rule.js +74 -16
- package/lib/ruleNames.js +13 -9
- package/lib/substitution.js +31 -29
- package/lib/type.js +22 -21
- package/lib/utilities/node.js +16 -15
- package/lib/variable.js +12 -19
- package/lib/verify/statement/qualified.js +6 -3
- package/lib/verify/statement.js +13 -12
- package/lib/verify/statementAsEquality.js +139 -0
- package/lib/verify/statementTypeAssertion.js +82 -0
- package/package.json +3 -3
- package/src/conclusion.js +176 -35
- package/src/constants.js +1 -0
- package/src/equality.js +14 -16
- package/src/metaSubstitution.js +33 -29
- package/src/premise.js +236 -50
- package/src/rule.js +96 -16
- package/src/ruleNames.js +3 -2
- package/src/substitution.js +37 -33
- package/src/type.js +26 -20
- package/src/utilities/node.js +13 -13
- package/src/variable.js +10 -16
- package/src/verify/statement/qualified.js +7 -2
- package/src/verify/statement.js +13 -15
- package/src/verify/statementAsEquality.js +146 -0
- package/src/verify/{assertion/type.js → statementTypeAssertion.js} +40 -31
- package/lib/verify/assertion/type.js +0 -78
- package/lib/verify/equality.js +0 -68
- package/src/verify/equality.js +0 -92
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Equality from "../equality";
|
|
4
|
+
import Variable from "../variable";
|
|
5
|
+
import verifyTerm from "../verify/term";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery } from "../utilities/query";
|
|
8
|
+
import { nodeAsString } from "../utilities/string";
|
|
9
|
+
import { first, second } from "../utilities/array";
|
|
10
|
+
import { verifyTermAsVariable } from "../verify/term";
|
|
11
|
+
import { EQUALS_CHARACTER, MAXIMUM_INDEXES_LENGTH } from "../constants";
|
|
12
|
+
|
|
13
|
+
const specialNodeQuery = nodeQuery("/statement/@special!"),
|
|
14
|
+
leftTermNodeQuery = nodeQuery("/statement/term[0]"),
|
|
15
|
+
rightTermNodeQuery = nodeQuery("/statement/term[1]");
|
|
16
|
+
|
|
17
|
+
export default function verifyStatementAsEquality(statementNode, proofContext) {
|
|
18
|
+
let statementVerifiedAsEquality = false;
|
|
19
|
+
|
|
20
|
+
proofContext.begin(statementNode);
|
|
21
|
+
|
|
22
|
+
const statementString = nodeAsString(statementNode);
|
|
23
|
+
|
|
24
|
+
proofContext.debug(`Verifying the '${statementString}' statement as an equality...`);
|
|
25
|
+
|
|
26
|
+
const specialNode = specialNodeQuery(statementNode);
|
|
27
|
+
|
|
28
|
+
if (specialNode !== null) {
|
|
29
|
+
const terminalNode = specialNode, ///
|
|
30
|
+
terminalNodeContent = terminalNode.getContent();
|
|
31
|
+
|
|
32
|
+
if (terminalNodeContent === EQUALS_CHARACTER) {
|
|
33
|
+
const types = [],
|
|
34
|
+
context = proofContext, ///
|
|
35
|
+
leftTermNode = leftTermNodeQuery(statementNode),
|
|
36
|
+
rightTermNode = rightTermNodeQuery(statementNode),
|
|
37
|
+
leftTermVerified = verifyTerm(leftTermNode, types, context),
|
|
38
|
+
rightTermVerified = verifyTerm(rightTermNode, types, context);
|
|
39
|
+
|
|
40
|
+
if (leftTermVerified && rightTermVerified) {
|
|
41
|
+
const firstType = first(types),
|
|
42
|
+
secondType = second(types),
|
|
43
|
+
leftType = firstType, ///
|
|
44
|
+
rightType = secondType, ///
|
|
45
|
+
leftTermString = nodeAsString(leftTermNode),
|
|
46
|
+
rightTermString = nodeAsString(rightTermNode);
|
|
47
|
+
|
|
48
|
+
if ((leftType === null) && (rightType === null)) {
|
|
49
|
+
proofContext.error(`The types of the '${leftTermString}' and '${rightTermString}' terms are both undefined and therefore the terms cannot be equated.`);
|
|
50
|
+
} else if (rightType === null) {
|
|
51
|
+
const type = leftType, ///
|
|
52
|
+
termNode = rightTermNode, ///
|
|
53
|
+
variable = addVariable(type, termNode, proofContext);
|
|
54
|
+
|
|
55
|
+
if (variable !== null) {
|
|
56
|
+
const leftTypeName = leftType.getName();
|
|
57
|
+
|
|
58
|
+
proofContext.info(`The '${rightTermString}' variable has been given the '${leftTypeName}' type.`);
|
|
59
|
+
|
|
60
|
+
statementVerifiedAsEquality = true;
|
|
61
|
+
}
|
|
62
|
+
} else if (leftType === null) {
|
|
63
|
+
const type = rightType, ///
|
|
64
|
+
termNode = leftType, ///
|
|
65
|
+
variable = addVariable(type, termNode, proofContext);
|
|
66
|
+
|
|
67
|
+
if (variable !== null) {
|
|
68
|
+
const rightTypeName = rightType.getName();
|
|
69
|
+
|
|
70
|
+
proofContext.info(`The '${rightTermString}' variable has been given the '${rightTypeName}' type.`);
|
|
71
|
+
|
|
72
|
+
statementVerifiedAsEquality = true;
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
const leftTypeMatchesRightType = leftType.match(rightType);
|
|
76
|
+
|
|
77
|
+
if (!leftTypeMatchesRightType) {
|
|
78
|
+
proofContext.error(`The types of the '${leftTermString}' and '${rightTermString}' terms do not match and therefore the terms cannot be equated.`);
|
|
79
|
+
} else {
|
|
80
|
+
const derived = proofContext.isDerived();
|
|
81
|
+
|
|
82
|
+
if (!derived) {
|
|
83
|
+
statementVerifiedAsEquality = true;
|
|
84
|
+
} else {
|
|
85
|
+
const equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode),
|
|
86
|
+
proofSteps = proofContext.getProofSteps(),
|
|
87
|
+
equalities = equalitiesFromProofSteps(proofSteps),
|
|
88
|
+
equalityEquates = equality.equate(equalities, proofContext);
|
|
89
|
+
|
|
90
|
+
statementVerifiedAsEquality = equalityEquates; ///
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (statementVerifiedAsEquality) {
|
|
99
|
+
proofContext.info(`Verified the '${statementString}' equality.`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
statementVerifiedAsEquality ?
|
|
103
|
+
proofContext.complete(statementNode) :
|
|
104
|
+
proofContext.halt(statementNode);
|
|
105
|
+
|
|
106
|
+
return statementVerifiedAsEquality;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function equalitiesFromProofSteps(proofSteps) {
|
|
110
|
+
const start = -MAXIMUM_INDEXES_LENGTH; ///
|
|
111
|
+
|
|
112
|
+
proofSteps = proofSteps.slice(start); ///
|
|
113
|
+
|
|
114
|
+
const equalities = proofSteps.reduce((equalities, proofStep, index) => {
|
|
115
|
+
const equality = Equality.fromProofStep(proofStep);
|
|
116
|
+
|
|
117
|
+
if (equality !== null) {
|
|
118
|
+
equalities.push(equality);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return equalities;
|
|
122
|
+
}, []);
|
|
123
|
+
|
|
124
|
+
return equalities;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function addVariable(type, termNode, proofContext) {
|
|
128
|
+
let variable = null;
|
|
129
|
+
|
|
130
|
+
const variables = [],
|
|
131
|
+
termVerifiedAsVariable = verifyTermAsVariable(termNode, variables, proofContext);
|
|
132
|
+
|
|
133
|
+
if (termVerifiedAsVariable) {
|
|
134
|
+
const firstVariable = first(variables);
|
|
135
|
+
|
|
136
|
+
variable = firstVariable; ///
|
|
137
|
+
|
|
138
|
+
const name = variable.getName();
|
|
139
|
+
|
|
140
|
+
variable = Variable.fromTypeAndName(type, name); ///
|
|
141
|
+
|
|
142
|
+
proofContext.addVariable(variable);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return variable;
|
|
146
|
+
}
|
|
@@ -1,53 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
3
|
+
import Variable from "../variable";
|
|
4
|
+
|
|
5
|
+
import { first } from "../utilities/array";
|
|
6
|
+
import { nodeAsString } from "../utilities/string";
|
|
7
|
+
import { nodeQuery, typeNameFromTypeNode } from "../utilities/query";
|
|
8
|
+
import { verifyTermAsVariable, verifyTermAgainstConstructors } from "../verify/term";
|
|
8
9
|
|
|
9
10
|
const termNodeQuery = nodeQuery("/typeAssertion/term"),
|
|
10
|
-
typeNodeQuery = nodeQuery("/typeAssertion/type")
|
|
11
|
+
typeNodeQuery = nodeQuery("/typeAssertion/type"),
|
|
12
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
11
13
|
|
|
12
|
-
export default function
|
|
14
|
+
export default function verifyStatementTypeAssertion(statementNode, proofContext) {
|
|
13
15
|
let typeAssertionVerified = false;
|
|
14
16
|
|
|
15
|
-
proofContext.begin(
|
|
17
|
+
proofContext.begin(statementNode);
|
|
16
18
|
|
|
17
|
-
const
|
|
19
|
+
const statementString = nodeAsString(statementNode);
|
|
18
20
|
|
|
19
|
-
proofContext.debug(`Verifying the '${
|
|
21
|
+
proofContext.debug(`Verifying the '${statementString}' statement type assertion...`);
|
|
20
22
|
|
|
21
|
-
const
|
|
22
|
-
typeName = typeNameFromTypeNode(typeNode),
|
|
23
|
-
typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
24
|
-
|
|
25
|
-
if (!typePresent) {
|
|
26
|
-
proofContext.error(`The ${typeName} type is not present.`);
|
|
27
|
-
} else {
|
|
28
|
-
const context = proofContext, ///
|
|
29
|
-
termNode = termNodeQuery(typeAssertionNode),
|
|
30
|
-
variables = [],
|
|
31
|
-
termVerifiedAsVariable = verifyTermAsVariable(termNode, variables, context);
|
|
23
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
if (typeAssertionNode !== null) {
|
|
26
|
+
const typeNode = typeNodeQuery(typeAssertionNode),
|
|
27
|
+
typeName = typeNameFromTypeNode(typeNode),
|
|
28
|
+
typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
35
29
|
|
|
36
|
-
|
|
30
|
+
if (!typePresent) {
|
|
31
|
+
proofContext.error(`The ${typeName} type is not present.`);
|
|
37
32
|
} else {
|
|
38
|
-
const
|
|
33
|
+
const context = proofContext, ///
|
|
34
|
+
termNode = termNodeQuery(typeAssertionNode),
|
|
35
|
+
variables = [],
|
|
36
|
+
termVerifiedAsVariable = verifyTermAsVariable(termNode, variables, context);
|
|
37
|
+
|
|
38
|
+
if (termVerifiedAsVariable) {
|
|
39
|
+
const variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, proofContext);
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
typeAssertionVerified = variableTypeAssertionVerified; ///
|
|
42
|
+
} else {
|
|
43
|
+
const termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, proofContext);
|
|
44
|
+
|
|
45
|
+
typeAssertionVerified = termTypeAssertionVerified; ///
|
|
46
|
+
}
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
|
|
44
50
|
if (typeAssertionVerified) {
|
|
45
|
-
proofContext.info(`Verified the '${
|
|
51
|
+
proofContext.info(`Verified the '${statementString}' statement type assertion.`);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
typeAssertionVerified ?
|
|
49
|
-
proofContext.complete(
|
|
50
|
-
proofContext.halt(
|
|
55
|
+
proofContext.complete(statementNode) :
|
|
56
|
+
proofContext.halt(statementNode);
|
|
51
57
|
|
|
52
58
|
return typeAssertionVerified;
|
|
53
59
|
}
|
|
@@ -97,8 +103,11 @@ function verifyVariableTypeAssertion(typeAssertionNode, proofContext) {
|
|
|
97
103
|
firstVariable = first(variables),
|
|
98
104
|
variable = firstVariable, ///
|
|
99
105
|
variableName = variable.getName(),
|
|
100
|
-
variableType = variable.getType()
|
|
101
|
-
|
|
106
|
+
variableType = variable.getType();
|
|
107
|
+
|
|
108
|
+
const assertedTypeEqualToOrSubTypeOfVariableType = (variableType === null) ?
|
|
109
|
+
true : ///
|
|
110
|
+
assertedType.isEqualToOrSubTypeOf(variableType);
|
|
102
111
|
|
|
103
112
|
if (!assertedTypeEqualToOrSubTypeOfVariableType) {
|
|
104
113
|
proofContext.error(`The asserted type is not equal to or a sub-type of the '${variableName}' variable type.`);
|
|
@@ -1,78 +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 verifyTypeAssertion;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _array = require("../../utilities/array");
|
|
12
|
-
var _string = require("../../utilities/string");
|
|
13
|
-
var _query = require("../../utilities/query");
|
|
14
|
-
var _term = require("../../verify/term");
|
|
15
|
-
var _variable = /*#__PURE__*/ _interopRequireDefault(require("../../variable"));
|
|
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");
|
|
22
|
-
function verifyTypeAssertion(typeAssertionNode, proofContext) {
|
|
23
|
-
var typeAssertionVerified = false;
|
|
24
|
-
proofContext.begin(typeAssertionNode);
|
|
25
|
-
var typeAssertionString = (0, _string.nodeAsString)(typeAssertionNode);
|
|
26
|
-
proofContext.debug("Verifying the '".concat(typeAssertionString, "' type assertion..."));
|
|
27
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), typePresent = proofContext.isTypePresentByTypeName(typeName);
|
|
28
|
-
if (!typePresent) {
|
|
29
|
-
proofContext.error("The ".concat(typeName, " type is not present."));
|
|
30
|
-
} else {
|
|
31
|
-
var context = proofContext, termNode = termNodeQuery(typeAssertionNode), variables = [], termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
32
|
-
if (termVerifiedAsVariable) {
|
|
33
|
-
var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, proofContext);
|
|
34
|
-
typeAssertionVerified = variableTypeAssertionVerified; ///
|
|
35
|
-
} else {
|
|
36
|
-
var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, proofContext);
|
|
37
|
-
typeAssertionVerified = termTypeAssertionVerified; ///
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
if (typeAssertionVerified) {
|
|
41
|
-
proofContext.info("Verified the '".concat(typeAssertionString, "' type assertion."));
|
|
42
|
-
}
|
|
43
|
-
typeAssertionVerified ? proofContext.complete(typeAssertionNode) : proofContext.halt(typeAssertionNode);
|
|
44
|
-
return typeAssertionVerified;
|
|
45
|
-
}
|
|
46
|
-
function verifyTermTypeAssertion(typeAssertionNode, proofContext) {
|
|
47
|
-
var termTypeAssertionVerified = false;
|
|
48
|
-
var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
|
|
49
|
-
if (termVerifiedAgainstConstructors) {
|
|
50
|
-
var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstType = (0, _array.first)(types), termType = firstType, assertedTypeEqualToOrSubTypeOfTermType = assertedType.isEqualToOrSubTypeOf(termType);
|
|
51
|
-
if (!assertedTypeEqualToOrSubTypeOfTermType) {
|
|
52
|
-
var termString = (0, _string.nodeAsString)(termNode);
|
|
53
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
|
|
54
|
-
} else {
|
|
55
|
-
termTypeAssertionVerified = true;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return termTypeAssertionVerified;
|
|
59
|
-
}
|
|
60
|
-
function verifyVariableTypeAssertion(typeAssertionNode, proofContext) {
|
|
61
|
-
var variableTypeAssertionVerified = false;
|
|
62
|
-
var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode);
|
|
63
|
-
(0, _term.verifyTermAsVariable)(termNode, variables, context);
|
|
64
|
-
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(), assertedTypeEqualToOrSubTypeOfVariableType = assertedType.isEqualToOrSubTypeOf(variableType);
|
|
65
|
-
if (!assertedTypeEqualToOrSubTypeOfVariableType) {
|
|
66
|
-
proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
|
|
67
|
-
} else {
|
|
68
|
-
var derived = proofContext.isDerived();
|
|
69
|
-
if (!derived) {
|
|
70
|
-
var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
|
|
71
|
-
proofContext.addVariable(variable1);
|
|
72
|
-
}
|
|
73
|
-
variableTypeAssertionVerified = true;
|
|
74
|
-
}
|
|
75
|
-
return variableTypeAssertionVerified;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvYXNzZXJ0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgdHlwZU5hbWVGcm9tVHlwZU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyB2ZXJpZnlUZXJtQXNWYXJpYWJsZSwgdmVyaWZ5VGVybUFnYWluc3RDb25zdHJ1Y3RvcnMgfSBmcm9tIFwiLi4vLi4vdmVyaWZ5L3Rlcm1cIjtcbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vLi4vdmFyaWFibGVcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3Rlcm1cIiksXG4gICAgICB0eXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVBc3NlcnRpb24vdHlwZVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBwcm9vZkNvbnRleHQuYmVnaW4odHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSBub2RlQXNTdHJpbmcodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIHByb29mQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgdHlwZVByZXNlbnQgPSBwcm9vZkNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSAke3R5cGVOYW1lfSB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwcm9vZkNvbnRleHQsIC8vL1xuICAgICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgdGVybVZlcmlmaWVkQXNWYXJpYWJsZSA9IHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1WZXJpZmllZEFzVmFyaWFibGUpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VGVybVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7ICAvLy9cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZUFzc2VydGlvblZlcmlmaWVkKSB7XG4gICAgcHJvb2ZDb250ZXh0LmluZm8oYFZlcmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uYCk7XG4gIH1cblxuICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZSh0eXBlQXNzZXJ0aW9uTm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgICAgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgIHRlcm1UeXBlID0gZmlyc3RUeXBlLFxuICAgICAgICAgIGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlID0gYXNzZXJ0ZWRUeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHRlcm1UeXBlKTtcblxuICAgIGlmICghYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVGVybVR5cGUpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpO1xuXG4gICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSBhc3NlcnRlZCB0eXBlIGlzIG5vdCBlcXVhbCB0byBvciBhIHN1Yi10eXBlIG9mIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0eXBlLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGV4dCA9IHByb29mQ29udGV4dCwgLy8vXG4gICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gIHZlcmlmeVRlcm1Bc1ZhcmlhYmxlKHRlcm1Ob2RlLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICBhc3NlcnRlZFR5cGVOYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgYXNzZXJ0ZWRUeXBlID0gcHJvb2ZDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShhc3NlcnRlZFR5cGVOYW1lKSxcbiAgICAgICAgZmlyc3RWYXJpYWJsZSA9IGZpcnN0KHZhcmlhYmxlcyksXG4gICAgICAgIHZhcmlhYmxlID0gZmlyc3RWYXJpYWJsZSwgLy8vXG4gICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgdmFyaWFibGVUeXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpLFxuICAgICAgICBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUgPSBhc3NlcnRlZFR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodmFyaWFibGVUeXBlKTtcblxuICBpZiAoIWFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSkge1xuICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlIGFzc2VydGVkIHR5cGUgaXMgbm90IGVxdWFsIHRvIG9yIGEgc3ViLXR5cGUgb2YgdGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlIHR5cGUuYCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgY29uc3QgdHlwZSA9IGFzc2VydGVkVHlwZSwgIC8vL1xuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVHlwZUFuZE5hbWUodHlwZSwgbmFtZSk7XG5cbiAgICAgIHByb29mQ29udGV4dC5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7XG4gICAgfVxuXG4gICAgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVR5cGVBc3NlcnRpb24iLCJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidHlwZU5vZGVRdWVyeSIsInR5cGVBc3NlcnRpb25Ob2RlIiwicHJvb2ZDb250ZXh0IiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwiYmVnaW4iLCJ0eXBlQXNzZXJ0aW9uU3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwiZXJyb3IiLCJjb250ZXh0IiwidGVybU5vZGUiLCJ2YXJpYWJsZXMiLCJ0ZXJtVmVyaWZpZWRBc1ZhcmlhYmxlIiwidmVyaWZ5VGVybUFzVmFyaWFibGUiLCJ2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVZhcmlhYmxlVHlwZUFzc2VydGlvbiIsInRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbiIsImluZm8iLCJjb21wbGV0ZSIsImhhbHQiLCJ0eXBlcyIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyIsImFzc2VydGVkVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInRlcm1UeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVGVybVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsInRlcm1TdHJpbmciLCJmaXJzdFZhcmlhYmxlIiwidmFyaWFibGUiLCJ2YXJpYWJsZU5hbWUiLCJnZXROYW1lIiwidmFyaWFibGVUeXBlIiwiZ2V0VHlwZSIsImFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlZhcmlhYmxlVHlwZSIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ0eXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiYWRkVmFy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
|
package/lib/verify/equality.js
DELETED
|
@@ -1,68 +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 verifyEquality;
|
|
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 leftTermNodeQuery = (0, _query.nodeQuery)("/equality/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/equality/term[1]");
|
|
23
|
-
function verifyEquality(equalityNode, proofContext) {
|
|
24
|
-
var equalityVerified = false;
|
|
25
|
-
proofContext.begin(equalityNode);
|
|
26
|
-
var equalityString = (0, _string.nodeAsString)(equalityNode);
|
|
27
|
-
proofContext.debug("Verifying the '".concat(equalityString, "' equality..."));
|
|
28
|
-
var equalityTypesVerified = verifyEqualityTypes(equalityNode, proofContext);
|
|
29
|
-
if (equalityTypesVerified) {
|
|
30
|
-
var derived = proofContext.isDerived();
|
|
31
|
-
if (derived) {
|
|
32
|
-
var equality = _equality.default.fromEqualityNode(equalityNode), proofSteps = proofContext.getProofSteps(), equalities = equalitiesFromProofSteps(proofSteps), equalityEquates = equality.equate(equalities, proofContext);
|
|
33
|
-
equalityVerified = equalityEquates; ///
|
|
34
|
-
} else {
|
|
35
|
-
equalityVerified = true;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (equalityVerified) {
|
|
39
|
-
proofContext.info("Verified the '".concat(equalityString, "' equality."));
|
|
40
|
-
}
|
|
41
|
-
equalityVerified ? proofContext.complete(equalityNode) : proofContext.halt(equalityNode);
|
|
42
|
-
return equalityVerified;
|
|
43
|
-
}
|
|
44
|
-
function verifyEqualityTypes(equalityNode, proofContext) {
|
|
45
|
-
var equalityTypesVerified = false;
|
|
46
|
-
var types = [], context = proofContext, leftTermNode = leftTermNodeQuery(equalityNode), rightTermNode = rightTermNodeQuery(equalityNode), leftTermVerified = (0, _term.default)(leftTermNode, types, context), rightTermVerified = (0, _term.default)(rightTermNode, types, context);
|
|
47
|
-
if (leftTermVerified && rightTermVerified) {
|
|
48
|
-
var firstType = (0, _array.first)(types), secondType = (0, _array.second)(types), leftType = firstType, rightType = secondType, leftTypeEqualToSubTypeOfOrSuperTypeOfRightType = leftType.isEqualToSubTypeOfOrSuperTypeOf(rightType);
|
|
49
|
-
if (leftTypeEqualToSubTypeOfOrSuperTypeOfRightType) {
|
|
50
|
-
equalityTypesVerified = true;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return equalityTypesVerified;
|
|
54
|
-
}
|
|
55
|
-
function equalitiesFromProofSteps(proofSteps) {
|
|
56
|
-
var start = -_constants.MAXIMUM_INDEXES_LENGTH; ///
|
|
57
|
-
proofSteps = proofSteps.slice(start); ///
|
|
58
|
-
var equalities = proofSteps.reduce(function(equalities, proofStep, index) {
|
|
59
|
-
var equality = _equality.default.fromProofStep(proofStep);
|
|
60
|
-
if (equality !== null) {
|
|
61
|
-
equalities.push(equality);
|
|
62
|
-
}
|
|
63
|
-
return equalities;
|
|
64
|
-
}, []);
|
|
65
|
-
return equalities;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvZXF1YWxpdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcXVhbGl0eSBmcm9tIFwiLi4vZXF1YWxpdHlcIjtcbmltcG9ydCB2ZXJpZnlUZXJtIGZyb20gXCIuLi92ZXJpZnkvdGVybVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IE1BWElNVU1fSU5ERVhFU19MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGxlZnRUZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2VxdWFsaXR5L3Rlcm1bMF1cIiksXG4gICAgICByaWdodFRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXF1YWxpdHkvdGVybVsxXVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5RXF1YWxpdHkoZXF1YWxpdHlOb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5VmVyaWZpZWQgPSBmYWxzZTtcblxuICBwcm9vZkNvbnRleHQuYmVnaW4oZXF1YWxpdHlOb2RlKTtcblxuICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IG5vZGVBc1N0cmluZyhlcXVhbGl0eU5vZGUpO1xuXG4gIHByb29mQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5Li4uYCk7XG5cbiAgY29uc3QgZXF1YWxpdHlUeXBlc1ZlcmlmaWVkID0gdmVyaWZ5RXF1YWxpdHlUeXBlcyhlcXVhbGl0eU5vZGUsIHByb29mQ29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5VHlwZXNWZXJpZmllZCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBwcm9vZkNvbnRleHQuaXNEZXJpdmVkKCk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgICBwcm9vZlN0ZXBzID0gcHJvb2ZDb250ZXh0LmdldFByb29mU3RlcHMoKSxcbiAgICAgICAgICAgIGVxdWFsaXRpZXMgPSBlcXVhbGl0aWVzRnJvbVByb29mU3RlcHMocHJvb2ZTdGVwcyksXG4gICAgICAgICAgICBlcXVhbGl0eUVxdWF0ZXMgPSBlcXVhbGl0eS5lcXVhdGUoZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgZXF1YWxpdHlWZXJpZmllZCA9IGVxdWFsaXR5RXF1YXRlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBlcXVhbGl0eVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXF1YWxpdHlWZXJpZmllZCkge1xuICAgIHByb29mQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgfVxuXG4gIGVxdWFsaXR5VmVyaWZpZWQgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShlcXVhbGl0eU5vZGUpIDpcbiAgICAgIHByb29mQ29udGV4dC5oYWx0KGVxdWFsaXR5Tm9kZSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUVxdWFsaXR5VHlwZXMoZXF1YWxpdHlOb2RlLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5VHlwZXNWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHR5cGVzID0gW10sXG4gICAgICAgIGNvbnRleHQgPSBwcm9vZkNvbnRleHQsICAvLy9cbiAgICAgICAgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlUXVlcnkoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGVRdWVyeShlcXVhbGl0eU5vZGUpLFxuICAgICAgICBsZWZ0VGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybShsZWZ0VGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKHJpZ2h0VGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KTtcblxuICBpZiAobGVmdFRlcm1WZXJpZmllZCAmJiByaWdodFRlcm1WZXJpZmllZCkge1xuICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICBzZWNvbmRUeXBlID0gc2Vjb25kKHR5cGVzKSxcbiAgICAgICAgICBsZWZ0VHlwZSA9IGZpcnN0VHlwZSwgLy8vXG4gICAgICAgICAgcmlnaHRUeXBlID0gc2Vjb25kVHlwZSwgLy8vXG4gICAgICAgICAgbGVmdFR5cGVFcXVhbFRvU3ViVHlwZU9mT3JTdXBlclR5cGVPZlJpZ2h0VHlwZSA9IGxlZnRUeXBlLmlzRXF1YWxUb1N1YlR5cGVPZk9yU3VwZXJUeXBlT2YocmlnaHRUeXBlKTtcblxuICAgIGlmIChsZWZ0VHlwZUVxdWFsVG9TdWJUeXBlT2ZPclN1cGVyVHlwZU9mUmlnaHRUeXBlKSB7XG4gICAgICBlcXVhbGl0eVR5cGVzVmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eVR5cGVzVmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIGVxdWFsaXRpZXNGcm9tUHJvb2ZTdGVwcyhwcm9vZlN0ZXBzKSB7XG4gIGNvbnN0IHN0YXJ0ID0gLU1BWElNVU1fSU5ERVhFU19MRU5HVEg7ICAvLy9cblxuICBwcm9vZlN0ZXBzID0gcHJvb2ZTdGVwcy5zbGljZShzdGFydCk7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXRpZXMgPSBwcm9vZlN0ZXBzLnJlZHVjZSgoZXF1YWxpdGllcywgcHJvb2ZTdGVwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVByb29mU3RlcChwcm9vZlN0ZXApO1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBlcXVhbGl0aWVzLnB1c2goZXF1YWxpdHkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVxdWFsaXRpZXM7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5RXF1YWxpdHkiLCJsZWZ0VGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInJpZ2h0VGVybU5vZGVRdWVyeSIsImVxdWFsaXR5Tm9kZSIsInByb29mQ29udGV4dCIsImVxdWFsaXR5VmVyaWZpZWQiLCJiZWdpbiIsImVxdWFsaXR5U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJlcXVhbGl0eVR5cGVzVmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eVR5cGVzIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsImVxdWFsaXR5IiwiRXF1YWxpdHkiLCJmcm9tRXF1YWxpdHlOb2RlIiwicHJvb2ZTdGVwcyIsImdldFByb29mU3RlcHMiLCJlcXVhbGl0aWVzIiwiZXF1YWxpdGllc0Zyb21Qcm9vZlN0ZXBzIiwiZXF1YWxpdHlFcXVhdGVzIiwiZXF1YXRlIiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCIsInR5cGVzIiwiY29udGV4dCIsImxlZnRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJsZWZ0VGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsInJpZ2h0VGVybVZlcmlmaWVkIiwiZmlyc3RUeXBlIiwiZmlyc3QiLCJzZWNvbmRUeXBlIiwic2Vjb25kIiwibGVmdFR5cGUiLCJyaWdodFR5cGUiLCJsZWZ0VHlwZUVxdWFsVG9TdWJUeXBlT2ZPclN1cGVyVHlwZU9mUmlnaHRUeXBlIiwiaXNFcXVhbFRvU3ViVHlwZU9mT3JTdXBlclR5cGVPZiIsInN0YXJ0IiwiTUFYSU1VTV9JTkRFWEVTX0xFTkdUSCIsInNsaWNlIiwicmVkdWNl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
|
package/src/verify/equality.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Equality from "../equality";
|
|
4
|
-
import verifyTerm from "../verify/term";
|
|
5
|
-
|
|
6
|
-
import { nodeQuery } from "../utilities/query";
|
|
7
|
-
import { nodeAsString } from "../utilities/string";
|
|
8
|
-
import { first, second } from "../utilities/array";
|
|
9
|
-
import { MAXIMUM_INDEXES_LENGTH } from "../constants";
|
|
10
|
-
|
|
11
|
-
const leftTermNodeQuery = nodeQuery("/equality/term[0]"),
|
|
12
|
-
rightTermNodeQuery = nodeQuery("/equality/term[1]");
|
|
13
|
-
|
|
14
|
-
export default function verifyEquality(equalityNode, proofContext) {
|
|
15
|
-
let equalityVerified = false;
|
|
16
|
-
|
|
17
|
-
proofContext.begin(equalityNode);
|
|
18
|
-
|
|
19
|
-
const equalityString = nodeAsString(equalityNode);
|
|
20
|
-
|
|
21
|
-
proofContext.debug(`Verifying the '${equalityString}' equality...`);
|
|
22
|
-
|
|
23
|
-
const equalityTypesVerified = verifyEqualityTypes(equalityNode, proofContext);
|
|
24
|
-
|
|
25
|
-
if (equalityTypesVerified) {
|
|
26
|
-
const derived = proofContext.isDerived();
|
|
27
|
-
|
|
28
|
-
if (derived) {
|
|
29
|
-
const equality = Equality.fromEqualityNode(equalityNode),
|
|
30
|
-
proofSteps = proofContext.getProofSteps(),
|
|
31
|
-
equalities = equalitiesFromProofSteps(proofSteps),
|
|
32
|
-
equalityEquates = equality.equate(equalities, proofContext);
|
|
33
|
-
|
|
34
|
-
equalityVerified = equalityEquates; ///
|
|
35
|
-
} else {
|
|
36
|
-
equalityVerified = true;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (equalityVerified) {
|
|
41
|
-
proofContext.info(`Verified the '${equalityString}' equality.`);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
equalityVerified ?
|
|
45
|
-
proofContext.complete(equalityNode) :
|
|
46
|
-
proofContext.halt(equalityNode);
|
|
47
|
-
|
|
48
|
-
return equalityVerified;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function verifyEqualityTypes(equalityNode, proofContext) {
|
|
52
|
-
let equalityTypesVerified = false;
|
|
53
|
-
|
|
54
|
-
const types = [],
|
|
55
|
-
context = proofContext, ///
|
|
56
|
-
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
57
|
-
rightTermNode = rightTermNodeQuery(equalityNode),
|
|
58
|
-
leftTermVerified = verifyTerm(leftTermNode, types, context),
|
|
59
|
-
rightTermVerified = verifyTerm(rightTermNode, types, context);
|
|
60
|
-
|
|
61
|
-
if (leftTermVerified && rightTermVerified) {
|
|
62
|
-
const firstType = first(types),
|
|
63
|
-
secondType = second(types),
|
|
64
|
-
leftType = firstType, ///
|
|
65
|
-
rightType = secondType, ///
|
|
66
|
-
leftTypeEqualToSubTypeOfOrSuperTypeOfRightType = leftType.isEqualToSubTypeOfOrSuperTypeOf(rightType);
|
|
67
|
-
|
|
68
|
-
if (leftTypeEqualToSubTypeOfOrSuperTypeOfRightType) {
|
|
69
|
-
equalityTypesVerified = true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return equalityTypesVerified;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function equalitiesFromProofSteps(proofSteps) {
|
|
77
|
-
const start = -MAXIMUM_INDEXES_LENGTH; ///
|
|
78
|
-
|
|
79
|
-
proofSteps = proofSteps.slice(start); ///
|
|
80
|
-
|
|
81
|
-
const equalities = proofSteps.reduce((equalities, proofStep, index) => {
|
|
82
|
-
const equality = Equality.fromProofStep(proofStep);
|
|
83
|
-
|
|
84
|
-
if (equality !== null) {
|
|
85
|
-
equalities.push(equality);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return equalities;
|
|
89
|
-
}, []);
|
|
90
|
-
|
|
91
|
-
return equalities;
|
|
92
|
-
}
|