occam-verify-cli 1.0.617 → 1.0.632
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 +5 -3
- 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 +65 -109
- package/lib/element/assumption.js +40 -16
- package/lib/element/constructor/bracketed.js +13 -53
- package/lib/element/constructor.js +5 -5
- package/lib/element/declaration/constructor.js +5 -2
- 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/propertyRelation.js +3 -3
- package/lib/element/reference.js +9 -21
- package/lib/element/rule.js +13 -15
- package/lib/element/signature.js +5 -5
- 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 +9 -3
- package/lib/element/substitution.js +71 -43
- package/lib/element/term.js +20 -6
- 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 +7 -7
- package/lib/process/verify.js +2 -2
- package/lib/ruleNames.js +5 -1
- 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/lib/utilities/validation.js +3 -3
- package/package.json +4 -4
- 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 +6 -2
- 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 +69 -77
- package/src/element/assumption.js +48 -16
- package/src/element/constructor/bracketed.js +11 -12
- package/src/element/constructor.js +4 -4
- package/src/element/declaration/constructor.js +5 -1
- 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/propertyRelation.js +2 -2
- package/src/element/reference.js +12 -26
- package/src/element/rule.js +8 -10
- package/src/element/signature.js +4 -4
- 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 +4 -2
- package/src/element/substitution.js +60 -36
- package/src/element/term.js +24 -5
- 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 +5 -5
- package/src/process/verify.js +1 -1
- package/src/ruleNames.js +1 -0
- 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
- package/src/utilities/validation.js +2 -2
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";
|
|
@@ -5,9 +5,9 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
|
|
6
6
|
import { define } from "../elements";
|
|
7
7
|
import { literally } from "../utilities/context";
|
|
8
|
-
import { termsStringFromTerms } from "../utilities/string";
|
|
9
8
|
import { instantiateEquivalence } from "../process/instantiate";
|
|
10
9
|
import { stripBracketsFromTermNode } from "../utilities/brackets";
|
|
10
|
+
import { equivalenceStringFromTerms } from "../utilities/string";
|
|
11
11
|
import { equivalenceFromEquivalenceNode } from "../utilities/element";
|
|
12
12
|
|
|
13
13
|
const { compress } = arrayUtilities;
|
|
@@ -57,7 +57,7 @@ export default define(class Equivalence extends Element {
|
|
|
57
57
|
if (termGrounded) {
|
|
58
58
|
const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
|
|
59
59
|
const groundedTermNode = groundedTerm.getNode(),
|
|
60
|
-
groundedTermNodeMatches = term.
|
|
60
|
+
groundedTermNodeMatches = term.matchTermNode(groundedTermNode);
|
|
61
61
|
|
|
62
62
|
if (groundedTermNodeMatches) {
|
|
63
63
|
return true;
|
|
@@ -151,7 +151,7 @@ export default define(class Equivalence extends Element {
|
|
|
151
151
|
termNode = stripBracketsFromTermNode(termNode); ///
|
|
152
152
|
|
|
153
153
|
const termNodeMatches = this.someTerm((term) => {
|
|
154
|
-
const termNodeMatches = term.
|
|
154
|
+
const termNodeMatches = term.matchTermNode(termNode);
|
|
155
155
|
|
|
156
156
|
if (termNodeMatches) {
|
|
157
157
|
return true;
|
|
@@ -234,8 +234,8 @@ export default define(class Equivalence extends Element {
|
|
|
234
234
|
|
|
235
235
|
return literally((context) => {
|
|
236
236
|
const terms = combinedTerms, ///
|
|
237
|
-
|
|
238
|
-
string =
|
|
237
|
+
equivalenceString = equivalenceStringFromTerms(terms),
|
|
238
|
+
string = equivalenceString, ///
|
|
239
239
|
equivalenceNode = instantiateEquivalence(string, context),
|
|
240
240
|
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
241
241
|
|
|
@@ -248,8 +248,8 @@ export default define(class Equivalence extends Element {
|
|
|
248
248
|
static fromEquality(equality, context) {
|
|
249
249
|
return literally((context) => {
|
|
250
250
|
const terms = equality.getTerms(),
|
|
251
|
-
|
|
252
|
-
string =
|
|
251
|
+
equivalenceString = equivalenceStringFromTerms(terms),
|
|
252
|
+
string = equivalenceString, ///
|
|
253
253
|
equivalenceNode = instantiateEquivalence(string, context),
|
|
254
254
|
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
255
255
|
|
|
@@ -80,7 +80,7 @@ export default define(class Equivalences extends Element {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
mergedWith(equivalences, context) {
|
|
83
|
-
let mergedEquivalences = this.clone(); ///
|
|
83
|
+
let mergedEquivalences = this.clone(context); ///
|
|
84
84
|
|
|
85
85
|
equivalences.forEachEquivalence((equivalence) => {
|
|
86
86
|
mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
|
|
@@ -139,7 +139,7 @@ export default define(class Equivalences extends Element {
|
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
|
|
142
|
-
let equivalences = this,
|
|
142
|
+
let equivalences = this, ///
|
|
143
143
|
groundedEquivalences,
|
|
144
144
|
remainingEquivalences,
|
|
145
145
|
initiallyGroundedEquivalences,
|
|
@@ -187,11 +187,13 @@ export default define(class Equivalences extends Element {
|
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
clone() {
|
|
191
|
-
const
|
|
190
|
+
clone(context) {
|
|
191
|
+
const string = EMPTY_STRING,
|
|
192
|
+
node = null,
|
|
193
|
+
array = [
|
|
192
194
|
...this.array
|
|
193
195
|
],
|
|
194
|
-
equivalences = new Equivalences(array);
|
|
196
|
+
equivalences = new Equivalences(context, string, node, array);
|
|
195
197
|
|
|
196
198
|
return equivalences;
|
|
197
199
|
}
|
package/src/element/frame.js
CHANGED
|
@@ -51,9 +51,9 @@ export default define(class Frame extends Element {
|
|
|
51
51
|
|
|
52
52
|
const frameNodeB = frameNode, ///
|
|
53
53
|
frameNodeAAMatchesFrameBNodeB = frameNodeA.match(frameNodeB),
|
|
54
|
-
|
|
54
|
+
frameNodeMatches = frameNodeAAMatchesFrameBNodeB; ///
|
|
55
55
|
|
|
56
|
-
return
|
|
56
|
+
return frameNodeMatches;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
isValid(context) {
|
|
@@ -79,24 +79,6 @@ export default define(class Frame extends Element {
|
|
|
79
79
|
return singular;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
matchMetavariableName(metavariableName) {
|
|
83
|
-
let metavariableNameMatches = false;
|
|
84
|
-
|
|
85
|
-
const singular = this.isSingular();
|
|
86
|
-
|
|
87
|
-
if (singular) {
|
|
88
|
-
const metavariableNameA = metavariableName ///
|
|
89
|
-
|
|
90
|
-
metavariableName = this.getMetavariableName();
|
|
91
|
-
|
|
92
|
-
const metavariableNameB = metavariableName; ///
|
|
93
|
-
|
|
94
|
-
metavariableNameMatches = (metavariableNameA === metavariableNameB);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return metavariableNameMatches;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
82
|
compareParameter(parameter) {
|
|
101
83
|
let comparesToParamter = false;
|
|
102
84
|
|
|
@@ -165,6 +147,24 @@ export default define(class Frame extends Element {
|
|
|
165
147
|
return comparesToSubstitutions;
|
|
166
148
|
}
|
|
167
149
|
|
|
150
|
+
compareMetavariableName(metavariableName) {
|
|
151
|
+
let comparesToMetavariableName = false;
|
|
152
|
+
|
|
153
|
+
const singular = this.isSingular();
|
|
154
|
+
|
|
155
|
+
if (singular) {
|
|
156
|
+
const metavariableNameA = metavariableName ///
|
|
157
|
+
|
|
158
|
+
metavariableName = this.getMetavariableName();
|
|
159
|
+
|
|
160
|
+
const metavariableNameB = metavariableName; ///
|
|
161
|
+
|
|
162
|
+
comparesToMetavariableName = (metavariableNameA === metavariableNameB);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return comparesToMetavariableName;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
168
|
validate(assignments, stated, context) {
|
|
169
169
|
let validates = false;
|
|
170
170
|
|
|
@@ -184,7 +184,7 @@ export default define(class Frame extends Element {
|
|
|
184
184
|
|
|
185
185
|
if (assumptionsValidate && metavariablevalidates) {
|
|
186
186
|
let validatesWhenStated = false,
|
|
187
|
-
|
|
187
|
+
validatesWhenDerived = false;
|
|
188
188
|
|
|
189
189
|
if (stated) {
|
|
190
190
|
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
@@ -289,12 +289,12 @@ export default define(class Frame extends Element {
|
|
|
289
289
|
|
|
290
290
|
context.trace(`Validating the '${frameString}' frame's '${metavraibleString}' metavariable...`);
|
|
291
291
|
|
|
292
|
-
const
|
|
292
|
+
const metavariablePresent = context.isMetavariablePresent(this.metavariable);
|
|
293
293
|
|
|
294
|
-
if (
|
|
294
|
+
if (metavariablePresent) {
|
|
295
295
|
const metaTypeName = FRAME_META_TYPE_NAME,
|
|
296
|
-
frameMetaType = findMetaTypeByMetaTypeName(metaTypeName),
|
|
297
|
-
metavariableValidateGivenMetaType = metavariable.validateGivenMetaType(frameMetaType, context);
|
|
296
|
+
frameMetaType = context.findMetaTypeByMetaTypeName(metaTypeName),
|
|
297
|
+
metavariableValidateGivenMetaType = this.metavariable.validateGivenMetaType(frameMetaType, context);
|
|
298
298
|
|
|
299
299
|
if (metavariableValidateGivenMetaType) {
|
|
300
300
|
metavariableValidates = true;
|
|
@@ -40,15 +40,13 @@ export default define(class Hypothesis extends Element {
|
|
|
40
40
|
statementValidates = this.statement.validate(assignments, stated, context);
|
|
41
41
|
|
|
42
42
|
if (statementValidates) {
|
|
43
|
-
|
|
43
|
+
assignAssignments(assignments, context);
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
const subproofOrProofAssertion = this; ///
|
|
45
|
+
const subproofOrProofAssertion = this; ///
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
}
|
|
49
|
+
verifies = true;
|
|
52
50
|
}
|
|
53
51
|
} else {
|
|
54
52
|
context.debug(`Unable to verify the '${hypothesisString}' hypothesis because it is nonsense.`);
|
package/src/element/judgement.js
CHANGED
|
@@ -37,7 +37,27 @@ export default define(class Judgement extends Element {
|
|
|
37
37
|
|
|
38
38
|
getMetavariable() { return this.frame.getMetavariable(); }
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
compareMetavariableName(metavariableName) { return this.frame.compareMetavariableName(metavariableName); }
|
|
41
|
+
|
|
42
|
+
matchJudgementNode(judgementNode) {
|
|
43
|
+
const judgementNodeA = judgementNode; ///
|
|
44
|
+
|
|
45
|
+
judgementNode = this.getJudgementNode();
|
|
46
|
+
|
|
47
|
+
const judgementNodeB = judgementNode, ///
|
|
48
|
+
judgementNodeAAMatchesJudgementBNodeB = judgementNodeA.match(judgementNodeB),
|
|
49
|
+
judgementNodeMatches = judgementNodeAAMatchesJudgementBNodeB; ///
|
|
50
|
+
|
|
51
|
+
return judgementNodeMatches;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
isValid(context) {
|
|
55
|
+
const judgementNode = this.getJudgementNode(),
|
|
56
|
+
judgementPresent = context.isJudgementPresentByJudgementNode(judgementNode),
|
|
57
|
+
valid = judgementPresent; ///
|
|
58
|
+
|
|
59
|
+
return valid;
|
|
60
|
+
}
|
|
41
61
|
|
|
42
62
|
validate(assignments, stated, context) {
|
|
43
63
|
let validates = false;
|
|
@@ -46,35 +66,41 @@ export default define(class Judgement extends Element {
|
|
|
46
66
|
|
|
47
67
|
context.trace(`Validating the '${judgementString}' judgement...`);
|
|
48
68
|
|
|
49
|
-
const
|
|
69
|
+
const valid = this.isValid(context);
|
|
50
70
|
|
|
51
|
-
if (
|
|
52
|
-
|
|
71
|
+
if (valid) {
|
|
72
|
+
validates = true;
|
|
53
73
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
74
|
+
context.debug(`...the '${judgementString}' judgement is already valid.`);
|
|
75
|
+
} else {
|
|
76
|
+
const frameValidates = this.frame.validate(assignments, stated, context);
|
|
57
77
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
} else {
|
|
61
|
-
validatesWhenDerived = this.validateWhenDerived(context);
|
|
62
|
-
}
|
|
78
|
+
if (frameValidates) {
|
|
79
|
+
const assumptionValidates = this.assumption.validate(assignments, stated, context);
|
|
63
80
|
|
|
64
|
-
if (
|
|
65
|
-
|
|
81
|
+
if (assumptionValidates) {
|
|
82
|
+
let validatesWhenStated = false,
|
|
83
|
+
validatesWhenDerived = false;
|
|
84
|
+
|
|
85
|
+
if (stated) {
|
|
86
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
87
|
+
} else {
|
|
88
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
92
|
+
validates = true;
|
|
93
|
+
}
|
|
66
94
|
}
|
|
67
95
|
}
|
|
68
|
-
}
|
|
69
96
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
this.assign(assignments, context);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
97
|
+
if (validates) {
|
|
98
|
+
const judgement = this; ///
|
|
75
99
|
|
|
76
|
-
|
|
77
|
-
|
|
100
|
+
context.addJudgement(judgement)
|
|
101
|
+
|
|
102
|
+
context.debug(`...validated the '${judgementString}' judgement.`);
|
|
103
|
+
}
|
|
78
104
|
}
|
|
79
105
|
|
|
80
106
|
return validates;
|
|
@@ -120,13 +146,17 @@ export default define(class Judgement extends Element {
|
|
|
120
146
|
return validatesWhenDerived;
|
|
121
147
|
}
|
|
122
148
|
|
|
123
|
-
assign(assignments, context) {
|
|
149
|
+
assign(assignments, stated, context) {
|
|
124
150
|
if (assignments === null) {
|
|
125
151
|
return;
|
|
126
152
|
}
|
|
127
153
|
|
|
154
|
+
if (!stated) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
128
158
|
const judgement = this, ///
|
|
129
|
-
judgementAssignment = judgementAssignmentFromJudgement(judgement),
|
|
159
|
+
judgementAssignment = judgementAssignmentFromJudgement(judgement, context),
|
|
130
160
|
assignment = judgementAssignment; ///
|
|
131
161
|
|
|
132
162
|
assignments.push(assignment);
|
package/src/element/metaType.js
CHANGED
|
@@ -48,7 +48,7 @@ export default define(class MetaType extends Element {
|
|
|
48
48
|
static fromJSON(json, context) {
|
|
49
49
|
const { name } = json,
|
|
50
50
|
metaTypeName = name, ///
|
|
51
|
-
metaType = findMetaTypeByMetaTypeName(metaTypeName);
|
|
51
|
+
metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
|
|
52
52
|
|
|
53
53
|
return metaType;
|
|
54
54
|
}
|
|
@@ -54,8 +54,9 @@ export default define(class Metavariable extends Element {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
compare(metavariable) {
|
|
57
|
-
const
|
|
58
|
-
|
|
57
|
+
const metavariableName = metavariable.getName(),
|
|
58
|
+
comparesToMetavariableName = this.compareMetavariableName(metavariableName),
|
|
59
|
+
comparesToMetavariable = comparesToMetavariableName; ///
|
|
59
60
|
|
|
60
61
|
return comparesToMetavariable;
|
|
61
62
|
}
|
|
@@ -69,6 +70,18 @@ export default define(class Metavariable extends Element {
|
|
|
69
70
|
return comparesToMetavariableName;
|
|
70
71
|
}
|
|
71
72
|
|
|
73
|
+
matchMetavariableNode(metavariableNode) {
|
|
74
|
+
const metavariableNodeA = metavariableNode; ///
|
|
75
|
+
|
|
76
|
+
metavariableNode = this.getMetavariableNode(); ///
|
|
77
|
+
|
|
78
|
+
const metavariableNodeB = metavariableNode, ///
|
|
79
|
+
metavariableNodeAMatchesMetavariableNodeB = metavariableNodeA.match(metavariableNodeB),
|
|
80
|
+
metavariableNodeMatches = metavariableNodeAMatchesMetavariableNodeB; ///
|
|
81
|
+
|
|
82
|
+
return metavariableNodeMatches;
|
|
83
|
+
}
|
|
84
|
+
|
|
72
85
|
validate(context) {
|
|
73
86
|
let validates = false;
|
|
74
87
|
|
|
@@ -306,7 +319,7 @@ export default define(class Metavariable extends Element {
|
|
|
306
319
|
|
|
307
320
|
if (generalContextFilePath === specificContextFilePath) {
|
|
308
321
|
const metavariableName = this.getMetavariableName(), ///
|
|
309
|
-
frameMetavariableComparesToMetvariable = frame.
|
|
322
|
+
frameMetavariableComparesToMetvariable = frame.compareMetavariableName(metavariableName);
|
|
310
323
|
|
|
311
324
|
if (frameMetavariableComparesToMetvariable) {
|
|
312
325
|
frameMetavariableUnifies = true;
|
|
@@ -57,9 +57,9 @@ export default define(class PropertyRelation extends Element {
|
|
|
57
57
|
context.trace(`Validating the '${termString}' term...`);
|
|
58
58
|
|
|
59
59
|
termValidates = this.term.validate(context, () => {
|
|
60
|
-
const
|
|
60
|
+
const validatesForwards = true;
|
|
61
61
|
|
|
62
|
-
return
|
|
62
|
+
return validatesForwards;
|
|
63
63
|
});
|
|
64
64
|
|
|
65
65
|
if (termValidates) {
|