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.
@@ -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 { first } from "../../utilities/array";
4
- import { nodeAsString } from "../../utilities/string";
5
- import { nodeQuery, typeNameFromTypeNode } from "../../utilities/query";
6
- import { verifyTermAsVariable, verifyTermAgainstConstructors } from "../../verify/term";
7
- import Variable from "../../variable";
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 verifyTypeAssertion(typeAssertionNode, proofContext) {
14
+ export default function verifyStatementTypeAssertion(statementNode, proofContext) {
13
15
  let typeAssertionVerified = false;
14
16
 
15
- proofContext.begin(typeAssertionNode);
17
+ proofContext.begin(statementNode);
16
18
 
17
- const typeAssertionString = nodeAsString(typeAssertionNode);
19
+ const statementString = nodeAsString(statementNode);
18
20
 
19
- proofContext.debug(`Verifying the '${typeAssertionString}' type assertion...`);
21
+ proofContext.debug(`Verifying the '${statementString}' statement type assertion...`);
20
22
 
21
- const typeNode = typeNodeQuery(typeAssertionNode),
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
- if (termVerifiedAsVariable) {
34
- const variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, proofContext);
25
+ if (typeAssertionNode !== null) {
26
+ const typeNode = typeNodeQuery(typeAssertionNode),
27
+ typeName = typeNameFromTypeNode(typeNode),
28
+ typePresent = proofContext.isTypePresentByTypeName(typeName);
35
29
 
36
- typeAssertionVerified = variableTypeAssertionVerified; ///
30
+ if (!typePresent) {
31
+ proofContext.error(`The ${typeName} type is not present.`);
37
32
  } else {
38
- const termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, proofContext);
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
- typeAssertionVerified = termTypeAssertionVerified; ///
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 '${typeAssertionString}' type assertion.`);
51
+ proofContext.info(`Verified the '${statementString}' statement type assertion.`);
46
52
  }
47
53
 
48
54
  typeAssertionVerified ?
49
- proofContext.complete(typeAssertionNode) :
50
- proofContext.halt(typeAssertionNode);
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
- assertedTypeEqualToOrSubTypeOfVariableType = assertedType.isEqualToOrSubTypeOf(variableType);
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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
@@ -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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
@@ -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
- }