occam-verify-cli 1.0.617 → 1.0.631
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/context/ephemeral.js +152 -47
- package/lib/context/file/nominal.js +136 -140
- package/lib/context/liminal.js +16 -26
- package/lib/context/scoped.js +26 -55
- package/lib/context.js +103 -53
- package/lib/element/assertion/contained.js +3 -1
- package/lib/element/assertion/defined.js +3 -1
- package/lib/element/assertion/property.js +10 -58
- package/lib/element/assertion/satisfies.js +3 -1
- package/lib/element/assertion/subproof.js +3 -1
- package/lib/element/assertion/type.js +63 -109
- package/lib/element/assumption.js +40 -16
- package/lib/element/derivation.js +8 -10
- package/lib/element/equality.js +102 -62
- package/lib/element/equivalence.js +6 -6
- package/lib/element/equivalences.js +4 -4
- package/lib/element/frame.js +21 -21
- package/lib/element/hypothesis.js +5 -7
- package/lib/element/judgement.js +47 -25
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +12 -3
- package/lib/element/reference.js +9 -21
- package/lib/element/rule.js +13 -15
- package/lib/element/statement.js +23 -25
- package/lib/element/subDerivation.js +4 -6
- package/lib/element/substitution/frame.js +4 -4
- package/lib/element/substitution/reference.js +4 -4
- package/lib/element/substitution/statement.js +4 -4
- package/lib/element/substitution/term.js +7 -1
- package/lib/element/substitution.js +71 -43
- package/lib/element/term.js +15 -1
- package/lib/element/topLevelAssertion.js +9 -11
- package/lib/element/topLevelMetaAssertion.js +9 -11
- package/lib/element/variable.js +44 -3
- package/lib/process/assign.js +96 -26
- package/lib/process/unify.js +3 -4
- package/lib/process/validate.js +2 -2
- package/lib/process/verify.js +2 -2
- package/lib/utilities/element.js +74 -12
- package/lib/utilities/json.js +2 -2
- package/lib/utilities/string.js +9 -24
- package/lib/utilities/substitutions.js +14 -22
- package/package.json +1 -1
- package/src/context/ephemeral.js +170 -50
- package/src/context/file/nominal.js +136 -141
- package/src/context/liminal.js +22 -34
- package/src/context/scoped.js +33 -74
- package/src/context.js +97 -46
- package/src/element/assertion/contained.js +4 -0
- package/src/element/assertion/defined.js +4 -0
- package/src/element/assertion/property.js +15 -26
- package/src/element/assertion/satisfies.js +4 -0
- package/src/element/assertion/subproof.js +4 -0
- package/src/element/assertion/type.js +67 -77
- package/src/element/assumption.js +48 -16
- package/src/element/derivation.js +3 -5
- package/src/element/equality.js +109 -74
- package/src/element/equivalence.js +7 -7
- package/src/element/equivalences.js +7 -5
- package/src/element/frame.js +25 -25
- package/src/element/hypothesis.js +4 -6
- package/src/element/judgement.js +54 -24
- package/src/element/metaType.js +1 -1
- package/src/element/metavariable.js +16 -3
- package/src/element/reference.js +12 -26
- package/src/element/rule.js +8 -10
- package/src/element/statement.js +27 -30
- package/src/element/subDerivation.js +3 -5
- package/src/element/substitution/frame.js +1 -1
- package/src/element/substitution/reference.js +1 -1
- package/src/element/substitution/statement.js +1 -1
- package/src/element/substitution/term.js +2 -0
- package/src/element/substitution.js +60 -36
- package/src/element/term.js +20 -2
- package/src/element/topLevelAssertion.js +4 -6
- package/src/element/topLevelMetaAssertion.js +4 -6
- package/src/element/variable.js +2 -0
- package/src/process/assign.js +114 -37
- package/src/process/unify.js +2 -3
- package/src/process/validate.js +1 -1
- package/src/process/verify.js +1 -1
- package/src/utilities/element.js +83 -26
- package/src/utilities/json.js +1 -1
- package/src/utilities/string.js +7 -29
- package/src/utilities/substitutions.js +18 -29
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import elements from "../../elements";
|
|
4
3
|
import Assertion from "../assertion";
|
|
5
4
|
|
|
6
5
|
import { define } from "../../elements";
|
|
7
|
-
import {
|
|
6
|
+
import { variableAssignmentFromTypeAssertion } from "../../process/assign";
|
|
8
7
|
|
|
9
8
|
export default define(class TypeAssertion extends Assertion {
|
|
10
9
|
constructor(context, string, node, term, type) {
|
|
@@ -29,49 +28,57 @@ export default define(class TypeAssertion extends Assertion {
|
|
|
29
28
|
return typeAssertionNode;
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
let
|
|
31
|
+
validate(assignments, stated, context) {
|
|
32
|
+
let validates = false;
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
const typeAssertionString = this.getString(); ///
|
|
36
35
|
|
|
37
|
-
context.trace(`
|
|
36
|
+
context.trace(`Validating the '${typeAssertionString}' type assertion...`);
|
|
38
37
|
|
|
39
|
-
const
|
|
38
|
+
const valid = this.isValid();
|
|
40
39
|
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
verifiesWhenDerived = false;
|
|
40
|
+
if (valid) {
|
|
41
|
+
validates = true;
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
verifiesWhenDerived = this.verifyWhenDerived(context);
|
|
49
|
-
}
|
|
43
|
+
context.debug(`...the '${typeAssertionString}' type assertion is already valid.`);
|
|
44
|
+
} else {
|
|
45
|
+
const typeValidates = this.validateType(context);
|
|
50
46
|
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
if (typeValidates) {
|
|
48
|
+
let validatesWhenStated = false,
|
|
49
|
+
validatesWhenDerived = false;
|
|
50
|
+
|
|
51
|
+
if (stated) {
|
|
52
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
53
|
+
} else {
|
|
54
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
55
|
+
}
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
58
|
+
validates = true;
|
|
59
|
+
}
|
|
59
60
|
}
|
|
60
|
-
}
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
if (validates) {
|
|
63
|
+
const assertion = this; ///
|
|
64
|
+
|
|
65
|
+
context.addAssertion(assertion);
|
|
66
|
+
|
|
67
|
+
this.assign(assignments, stated, context);
|
|
68
|
+
|
|
69
|
+
context.debug(`...verified the '${typeAssertionString}' type assertion.`);
|
|
70
|
+
}
|
|
64
71
|
}
|
|
65
72
|
|
|
66
|
-
return
|
|
73
|
+
return validates;
|
|
67
74
|
}
|
|
68
75
|
|
|
69
|
-
|
|
70
|
-
let
|
|
76
|
+
validateType(context) {
|
|
77
|
+
let typeValidates;
|
|
71
78
|
|
|
72
79
|
const typeString = this.type.getString();
|
|
73
80
|
|
|
74
|
-
context.trace(`
|
|
81
|
+
context.trace(`Validating the '${typeString}' type...`);
|
|
75
82
|
|
|
76
83
|
const nominalTypeName = this.type.getNominalTypeName(),
|
|
77
84
|
type = context.findTypeByNominalTypeName(nominalTypeName);
|
|
@@ -79,58 +86,58 @@ export default define(class TypeAssertion extends Assertion {
|
|
|
79
86
|
if (type !== null) {
|
|
80
87
|
this.type = type;
|
|
81
88
|
|
|
82
|
-
|
|
89
|
+
typeValidates = true;
|
|
83
90
|
} else {
|
|
84
91
|
context.debug(`The '${typeString}' type is not present.`);
|
|
85
92
|
}
|
|
86
93
|
|
|
87
|
-
if (
|
|
94
|
+
if (typeValidates) {
|
|
88
95
|
context.debug(`...verified the '${typeString}' type.`);
|
|
89
96
|
}
|
|
90
97
|
|
|
91
|
-
return
|
|
98
|
+
return typeValidates;
|
|
92
99
|
}
|
|
93
100
|
|
|
94
|
-
|
|
95
|
-
let
|
|
101
|
+
validateWhenStated(assignments, context) {
|
|
102
|
+
let validatesWhenStated = false;
|
|
96
103
|
|
|
97
104
|
const typeAssertionString = this.getString(); ///
|
|
98
105
|
|
|
99
|
-
context.trace(`
|
|
106
|
+
context.trace(`Validating the '${typeAssertionString}' stated type assertion...`);
|
|
100
107
|
|
|
101
|
-
const
|
|
102
|
-
let
|
|
108
|
+
const termValidates = this.term.validate(context, () => {
|
|
109
|
+
let validatesForwards;
|
|
103
110
|
|
|
104
111
|
const termType = this.term.getType(),
|
|
105
112
|
typeEqualToOrSubTypeOfTermType = this.type.isEqualToOrSubTypeOf(termType);
|
|
106
113
|
|
|
107
114
|
if (typeEqualToOrSubTypeOfTermType) {
|
|
108
|
-
|
|
115
|
+
validatesForwards = true;
|
|
109
116
|
}
|
|
110
117
|
|
|
111
|
-
return
|
|
118
|
+
return validatesForwards;
|
|
112
119
|
});
|
|
113
120
|
|
|
114
|
-
if (
|
|
115
|
-
|
|
121
|
+
if (termValidates) {
|
|
122
|
+
validatesWhenStated = true;
|
|
116
123
|
}
|
|
117
124
|
|
|
118
|
-
if (
|
|
125
|
+
if (validatesWhenStated) {
|
|
119
126
|
context.debug(`...verified the '${typeAssertionString}' stated type assertion.`);
|
|
120
127
|
}
|
|
121
128
|
|
|
122
|
-
return
|
|
129
|
+
return validatesWhenStated;
|
|
123
130
|
}
|
|
124
131
|
|
|
125
|
-
|
|
126
|
-
let
|
|
132
|
+
validateWhenDerived(context) {
|
|
133
|
+
let validatesWhenDerived;
|
|
127
134
|
|
|
128
135
|
const typeAssertionString = this.getString(); ///
|
|
129
136
|
|
|
130
|
-
context.trace(`
|
|
137
|
+
context.trace(`Validating the '${typeAssertionString}' derived type assertion...`);
|
|
131
138
|
|
|
132
|
-
const
|
|
133
|
-
let
|
|
139
|
+
const termValidates = this.term.validate(context, () => {
|
|
140
|
+
let validatesForwards = false;
|
|
134
141
|
|
|
135
142
|
const termType = this.term.getType(),
|
|
136
143
|
termTypeProvisional = termType.isProvisional();
|
|
@@ -138,52 +145,35 @@ export default define(class TypeAssertion extends Assertion {
|
|
|
138
145
|
if (!termTypeProvisional) {
|
|
139
146
|
const typeEqualToOrSuperTypeOfTermType = this.type.isEqualToOrSuperTypeOf(termType);
|
|
140
147
|
|
|
141
|
-
|
|
148
|
+
validatesForwards = typeEqualToOrSuperTypeOfTermType; ///
|
|
142
149
|
}
|
|
143
150
|
|
|
144
|
-
return
|
|
151
|
+
return validatesForwards;
|
|
145
152
|
});
|
|
146
153
|
|
|
147
|
-
|
|
154
|
+
validatesWhenDerived = termValidates; ///
|
|
148
155
|
|
|
149
|
-
if (
|
|
156
|
+
if (validatesWhenDerived) {
|
|
150
157
|
context.debug(`...verified the '${typeAssertionString}' derived type assertion.`);
|
|
151
158
|
}
|
|
152
159
|
|
|
153
|
-
return
|
|
160
|
+
return validatesWhenDerived;
|
|
154
161
|
}
|
|
155
162
|
|
|
156
|
-
assign(assignments, context) {
|
|
163
|
+
assign(assignments, stated, context) {
|
|
157
164
|
if (assignments === null) {
|
|
158
165
|
return;
|
|
159
166
|
}
|
|
160
167
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
let type,
|
|
165
|
-
provisional;
|
|
166
|
-
|
|
167
|
-
provisional = this.type.isProvisional();
|
|
168
|
-
|
|
169
|
-
if (!provisional) {
|
|
170
|
-
type = this.type;
|
|
171
|
-
} else {
|
|
172
|
-
provisional = false;
|
|
173
|
-
|
|
174
|
-
type = Type.fromTypeAndProvisional(this.type, provisional);
|
|
168
|
+
if (!stated) {
|
|
169
|
+
return;
|
|
175
170
|
}
|
|
176
171
|
|
|
177
|
-
const
|
|
172
|
+
const typeAssertion = this, ///
|
|
173
|
+
variableAssigment = variableAssignmentFromTypeAssertion(typeAssertion, context),
|
|
174
|
+
assignment = variableAssigment; ///
|
|
178
175
|
|
|
179
|
-
|
|
180
|
-
const variableNode = singularVariableNode, ///
|
|
181
|
-
variable = Variable.fromVariableNodeAndType(variableNode, type, context),
|
|
182
|
-
variableAssignment = variableAssignmentFromVariable(variable),
|
|
183
|
-
assignment = variableAssignment; ///
|
|
184
|
-
|
|
185
|
-
assignments.push(assignment);
|
|
186
|
-
}
|
|
176
|
+
assignments.push(assignment);
|
|
187
177
|
}
|
|
188
178
|
|
|
189
179
|
static name = "TypeAssertion";
|
|
@@ -31,6 +31,18 @@ export default define(class Assumption extends Element {
|
|
|
31
31
|
|
|
32
32
|
getMetavariable() { return this.reference.getMetavariable(); }
|
|
33
33
|
|
|
34
|
+
matchAssumptionNode(assumptionode) {
|
|
35
|
+
const assumptionodeA = assumptionode; ///
|
|
36
|
+
|
|
37
|
+
assumptionode = this.getAssumptionNode();
|
|
38
|
+
|
|
39
|
+
const assumptionodeB = assumptionode, ///
|
|
40
|
+
assumptionodeAAMatchesAssumptionBNodeB = assumptionodeA.match(assumptionodeB),
|
|
41
|
+
assumptionodeMatches = assumptionodeAAMatchesAssumptionBNodeB; ///
|
|
42
|
+
|
|
43
|
+
return assumptionodeMatches;
|
|
44
|
+
}
|
|
45
|
+
|
|
34
46
|
compareSubstitution(substitution, context) {
|
|
35
47
|
let comparesToSubstituion = false;
|
|
36
48
|
|
|
@@ -55,6 +67,14 @@ export default define(class Assumption extends Element {
|
|
|
55
67
|
return comparesToSubstituion;
|
|
56
68
|
}
|
|
57
69
|
|
|
70
|
+
isValid(context) {
|
|
71
|
+
const assumptionNode = this.getAssumptionNode(),
|
|
72
|
+
assumptionPresent = context.isAssumptionPresentByAssumptionNode(assumptionNode),
|
|
73
|
+
valid = assumptionPresent; ///
|
|
74
|
+
|
|
75
|
+
return valid;
|
|
76
|
+
}
|
|
77
|
+
|
|
58
78
|
validate(assignments, stated, context) {
|
|
59
79
|
let validates = false;
|
|
60
80
|
|
|
@@ -62,29 +82,41 @@ export default define(class Assumption extends Element {
|
|
|
62
82
|
|
|
63
83
|
context.trace(`Validating the '${assumptionString}' assumption...`);
|
|
64
84
|
|
|
65
|
-
const
|
|
85
|
+
const valid = this.isValid(context);
|
|
66
86
|
|
|
67
|
-
if (
|
|
68
|
-
|
|
87
|
+
if (valid) {
|
|
88
|
+
validates = true;
|
|
69
89
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
90
|
+
context.debug(`...the '${assumptionString}' assumption is already valid.`);
|
|
91
|
+
} else {
|
|
92
|
+
const referenceValidates = this.validateReference(assignments, stated, context);
|
|
73
93
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
94
|
+
if (referenceValidates) {
|
|
95
|
+
const statementValidates = this.validateStatement(assignments, stated, context);
|
|
96
|
+
|
|
97
|
+
if (statementValidates) {
|
|
98
|
+
let validatesWhenStated = false,
|
|
99
|
+
validatesWhenDerived = false;
|
|
100
|
+
|
|
101
|
+
if (stated) {
|
|
102
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
103
|
+
} else {
|
|
104
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
105
|
+
}
|
|
79
106
|
|
|
80
|
-
|
|
81
|
-
|
|
107
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
108
|
+
validates = true;
|
|
109
|
+
}
|
|
82
110
|
}
|
|
83
111
|
}
|
|
84
|
-
}
|
|
85
112
|
|
|
86
|
-
|
|
87
|
-
|
|
113
|
+
if (validates) {
|
|
114
|
+
const assumption = this; ///
|
|
115
|
+
|
|
116
|
+
context.addAssumption(assumption);
|
|
117
|
+
|
|
118
|
+
context.debug(`...validated the '${assumptionString}' assumption.`);
|
|
119
|
+
}
|
|
88
120
|
}
|
|
89
121
|
|
|
90
122
|
return validates;
|
|
@@ -43,13 +43,11 @@ export default define(class Derivation extends Element {
|
|
|
43
43
|
subproofOrProofAssertionVerifies = await subproofOrProofAssertion.verify(assignments, context);
|
|
44
44
|
|
|
45
45
|
if (subproofOrProofAssertionVerifies) {
|
|
46
|
-
|
|
46
|
+
assignAssignments(assignments, context);
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
48
|
+
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
}
|
|
50
|
+
return true;
|
|
53
51
|
}
|
|
54
52
|
});
|
|
55
53
|
|
package/src/element/equality.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Element } from "occam-languages";
|
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
import { equateTerms } from "../process/equate";
|
|
7
|
-
import { equalityAssignmentFromEquality,
|
|
7
|
+
import { equalityAssignmentFromEquality, leftVariableAssignmentFromEquality, rightVariableAssignmentFromEquality } from "../process/assign";
|
|
8
8
|
|
|
9
9
|
export default define(class Equality extends Element {
|
|
10
10
|
constructor(context, string, node, leftTerm, rightTerm) {
|
|
@@ -29,6 +29,18 @@ export default define(class Equality extends Element {
|
|
|
29
29
|
return equalityNde;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
getLeftTermNode() {
|
|
33
|
+
const leftTermNode = this.leftTerm.getNode();
|
|
34
|
+
|
|
35
|
+
return leftTermNode;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getRightTermNode() {
|
|
39
|
+
const rightTermNode = this.rightTerm.getNode();
|
|
40
|
+
|
|
41
|
+
return rightTermNode;
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
getType() {
|
|
33
45
|
let type;
|
|
34
46
|
|
|
@@ -57,6 +69,18 @@ export default define(class Equality extends Element {
|
|
|
57
69
|
return terms;
|
|
58
70
|
}
|
|
59
71
|
|
|
72
|
+
matchEqualityNode(equalityNode) {
|
|
73
|
+
const equalityNodeA = equalityNode; ///
|
|
74
|
+
|
|
75
|
+
equalityNode = this.getEqualityNode();
|
|
76
|
+
|
|
77
|
+
const equalityNodeB = equalityNode, ///
|
|
78
|
+
equalityNodeAAMatchesEqualityBNodeB = equalityNodeA.match(equalityNodeB),
|
|
79
|
+
equalityNodeMatches = equalityNodeAAMatchesEqualityBNodeB; ///
|
|
80
|
+
|
|
81
|
+
return equalityNodeMatches;
|
|
82
|
+
}
|
|
83
|
+
|
|
60
84
|
isReflexive() {
|
|
61
85
|
const leftTermString = this.leftTerm.getString(),
|
|
62
86
|
rightTermString = this.rightTerm.getString(),
|
|
@@ -65,6 +89,14 @@ export default define(class Equality extends Element {
|
|
|
65
89
|
return reflexive;
|
|
66
90
|
}
|
|
67
91
|
|
|
92
|
+
isEqualTo(equality) {
|
|
93
|
+
const equalityNode = equality.getNode(),
|
|
94
|
+
equalityNodeMatches = this.matchEqualityNode(equalityNode),
|
|
95
|
+
equalTo = equalityNodeMatches; ///
|
|
96
|
+
|
|
97
|
+
return equalTo;
|
|
98
|
+
}
|
|
99
|
+
|
|
68
100
|
isEqual(context) {
|
|
69
101
|
let equal = false;
|
|
70
102
|
|
|
@@ -79,151 +111,154 @@ export default define(class Equality extends Element {
|
|
|
79
111
|
return equal;
|
|
80
112
|
}
|
|
81
113
|
|
|
82
|
-
|
|
83
|
-
|
|
114
|
+
isValid(context) {
|
|
115
|
+
const equalityNode = this.getEqualityNode(),
|
|
116
|
+
equalityPresent = context.isEqualityPresentByEqualityNode(equalityNode),
|
|
117
|
+
valid = equalityPresent; ///
|
|
118
|
+
|
|
119
|
+
return valid;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
validate(assignments, stated, context) {
|
|
123
|
+
let validates = false;
|
|
84
124
|
|
|
85
125
|
const equalityString = this.getString(); ///
|
|
86
126
|
|
|
87
|
-
context.trace(`
|
|
127
|
+
context.trace(`Validating the '${equalityString}' equality...`);
|
|
88
128
|
|
|
89
|
-
const
|
|
129
|
+
const valid = this.isValid(context);
|
|
90
130
|
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
verifiesWhenDerived = false;
|
|
131
|
+
if (valid) {
|
|
132
|
+
validates = true;
|
|
94
133
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
134
|
+
context.debug(`...the '${equalityString}' equality is already valid.`);
|
|
135
|
+
} else {
|
|
136
|
+
const termsValidate = this.validateTerms(context);
|
|
137
|
+
|
|
138
|
+
if (termsValidate) {
|
|
139
|
+
let validatesWhenStated = false,
|
|
140
|
+
validatesWhenDerived = false;
|
|
100
141
|
|
|
101
|
-
|
|
102
|
-
|
|
142
|
+
if (stated) {
|
|
143
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
144
|
+
} else {
|
|
145
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
149
|
+
validates = true;
|
|
150
|
+
}
|
|
103
151
|
}
|
|
104
|
-
}
|
|
105
152
|
|
|
106
|
-
|
|
153
|
+
if (validates) {
|
|
154
|
+
const equality = this; ///
|
|
107
155
|
|
|
108
|
-
|
|
156
|
+
context.addEquality(equality);
|
|
109
157
|
|
|
110
|
-
|
|
158
|
+
this.assign(assignments, stated, context);
|
|
111
159
|
|
|
112
|
-
|
|
113
|
-
|
|
160
|
+
context.debug(`...validated the '${equalityString}' equality.`);
|
|
161
|
+
}
|
|
114
162
|
}
|
|
115
163
|
|
|
116
|
-
return
|
|
164
|
+
return validates;
|
|
117
165
|
}
|
|
118
166
|
|
|
119
|
-
|
|
120
|
-
let
|
|
167
|
+
validateTerms(context) {
|
|
168
|
+
let termsValidate;
|
|
121
169
|
|
|
122
170
|
const equalityString = this.getString(); ///
|
|
123
171
|
|
|
124
|
-
context.trace(`
|
|
172
|
+
context.trace(`Validating the '${equalityString}' equality's terms...`);
|
|
125
173
|
|
|
126
|
-
const
|
|
127
|
-
let
|
|
174
|
+
const leftTermValidates = this.leftTerm.validate(context, () => {
|
|
175
|
+
let validatesForwards;
|
|
128
176
|
|
|
129
|
-
const
|
|
130
|
-
let
|
|
177
|
+
const rightTermValidates = this.rightTerm.validate(context, () => {
|
|
178
|
+
let validatesForwards;
|
|
131
179
|
|
|
132
180
|
const leftTermType = this.leftTerm.getType(),
|
|
133
181
|
rightTermType = this.rightTerm.getType(),
|
|
134
182
|
leftTermTypeComparableToRightTermType = leftTermType.isComparableTo(rightTermType);
|
|
135
183
|
|
|
136
|
-
|
|
184
|
+
validatesForwards = leftTermTypeComparableToRightTermType; ///
|
|
137
185
|
|
|
138
|
-
return
|
|
186
|
+
return validatesForwards;
|
|
139
187
|
});
|
|
140
188
|
|
|
141
|
-
|
|
189
|
+
validatesForwards = rightTermValidates; ///
|
|
142
190
|
|
|
143
|
-
return
|
|
191
|
+
return validatesForwards;
|
|
144
192
|
});
|
|
145
193
|
|
|
146
|
-
|
|
194
|
+
termsValidate = leftTermValidates; ///
|
|
147
195
|
|
|
148
|
-
if (
|
|
149
|
-
context.debug(`...
|
|
196
|
+
if (termsValidate) {
|
|
197
|
+
context.debug(`...validated the '${equalityString}' equality's terms.`);
|
|
150
198
|
}
|
|
151
199
|
|
|
152
|
-
return
|
|
200
|
+
return termsValidate;
|
|
153
201
|
}
|
|
154
202
|
|
|
155
|
-
|
|
156
|
-
let
|
|
203
|
+
validateWhenStated(assignments, context) {
|
|
204
|
+
let validatesWhenStated;
|
|
157
205
|
|
|
158
206
|
const equalityString = this.getString(); ///
|
|
159
207
|
|
|
160
|
-
context.trace(`
|
|
208
|
+
context.trace(`Validating the '${equalityString}' stated equality...`);
|
|
161
209
|
|
|
162
|
-
|
|
210
|
+
validatesWhenStated = true;
|
|
163
211
|
|
|
164
|
-
if (
|
|
165
|
-
context.debug(`...
|
|
212
|
+
if (validatesWhenStated) {
|
|
213
|
+
context.debug(`...validated the '${equalityString}' stated equality.`);
|
|
166
214
|
}
|
|
167
215
|
|
|
168
|
-
return
|
|
216
|
+
return validatesWhenStated;
|
|
169
217
|
}
|
|
170
218
|
|
|
171
|
-
|
|
172
|
-
let
|
|
219
|
+
validateWhenDerived(context) {
|
|
220
|
+
let validatesWhenDerived;
|
|
173
221
|
|
|
174
222
|
const equalityString = this.getString(); ///
|
|
175
223
|
|
|
176
|
-
context.trace(`
|
|
224
|
+
context.trace(`Validating the '${equalityString}' derived equality...`);
|
|
177
225
|
|
|
178
|
-
|
|
226
|
+
validatesWhenDerived = true; ///
|
|
179
227
|
|
|
180
|
-
if (
|
|
181
|
-
context.debug(`...
|
|
228
|
+
if (validatesWhenDerived) {
|
|
229
|
+
context.debug(`...validated the '${equalityString}' derived equality.`);
|
|
182
230
|
}
|
|
183
231
|
|
|
184
|
-
return
|
|
232
|
+
return validatesWhenDerived;
|
|
185
233
|
}
|
|
186
234
|
|
|
187
|
-
assign(assignments, context) {
|
|
235
|
+
assign(assignments, stated, context) {
|
|
188
236
|
if (assignments === null) {
|
|
189
237
|
return;
|
|
190
238
|
}
|
|
191
239
|
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
leftTermNodeSingularVariableNode = leftTermNode.getSingularVariableNode(),
|
|
197
|
-
rightTermNodeSingularVariableNode = rightTermNode.getSingularVariableNode(),
|
|
198
|
-
leftVariableNode = leftTermNodeSingularVariableNode, ///
|
|
199
|
-
rightVariableNode = rightTermNodeSingularVariableNode; ///
|
|
240
|
+
const equality = this, ///
|
|
241
|
+
equalityAssignment = equalityAssignmentFromEquality(equality, context),
|
|
242
|
+
leftVariableAssignment = leftVariableAssignmentFromEquality(equality, context),
|
|
243
|
+
rightVariableAssignment = rightVariableAssignmentFromEquality(equality, context);
|
|
200
244
|
|
|
201
245
|
let assignment;
|
|
202
246
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
247
|
+
assignment = equalityAssignment; ///
|
|
248
|
+
|
|
249
|
+
assignments.push(assignment);
|
|
206
250
|
|
|
251
|
+
if (leftVariableAssignment !== null) {
|
|
207
252
|
assignment = leftVariableAssignment; ///
|
|
208
253
|
|
|
209
254
|
assignments.push(assignment);
|
|
210
255
|
}
|
|
211
256
|
|
|
212
|
-
if (
|
|
213
|
-
const rightVariable = Variable.fromVariableNodeAndType(rightVariableNode, type, context),
|
|
214
|
-
rightVariableAssignment = variableAssignmentFromVariable(rightVariable);
|
|
215
|
-
|
|
257
|
+
if (rightVariableAssignment !== null) {
|
|
216
258
|
assignment = rightVariableAssignment; ///
|
|
217
259
|
|
|
218
260
|
assignments.push(assignment);
|
|
219
261
|
}
|
|
220
|
-
|
|
221
|
-
const equality = this, //
|
|
222
|
-
equalityAssignment = equalityAssignmentFromEquality(equality);
|
|
223
|
-
|
|
224
|
-
assignment = equalityAssignment; ///
|
|
225
|
-
|
|
226
|
-
assignments.push(assignment);
|
|
227
262
|
}
|
|
228
263
|
|
|
229
264
|
static name = "Equality";
|