occam-verify-cli 1.0.768 → 1.0.776
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/file/nominal.js +11 -11
- package/lib/context/illative.js +28 -0
- package/lib/context/nested.js +27 -0
- package/lib/context/proof.js +232 -0
- package/lib/context/thetic.js +28 -0
- package/lib/context.js +15 -21
- package/lib/element/assertion/contained.js +24 -22
- package/lib/element/assertion/defined.js +20 -19
- package/lib/element/assertion/property.js +14 -13
- package/lib/element/assertion/satisfies.js +8 -9
- package/lib/element/assertion/subproof.js +23 -26
- package/lib/element/assertion/type.js +9 -11
- package/lib/element/assumption.js +32 -39
- package/lib/element/combinator/bracketed.js +3 -3
- package/lib/element/combinator.js +20 -20
- package/lib/element/conclusion.js +33 -29
- package/lib/element/constructor.js +19 -18
- package/lib/element/deduction.js +33 -29
- package/lib/element/equality.js +13 -15
- package/lib/element/equivalence.js +59 -52
- package/lib/element/frame.js +41 -34
- package/lib/element/hypothesis.js +7 -5
- package/lib/element/judgement.js +32 -73
- package/lib/element/label.js +22 -22
- package/lib/element/metavariable.js +23 -7
- package/lib/element/proofAssertion/premise.js +48 -35
- package/lib/element/proofAssertion/step.js +35 -20
- package/lib/element/proofAssertion/supposition.js +48 -34
- package/lib/element/proofAssertion.js +1 -14
- package/lib/element/reference.js +80 -53
- package/lib/element/signature.js +44 -3
- package/lib/element/statement.js +28 -29
- package/lib/element/subproof.js +2 -2
- package/lib/element/substitution/frame.js +24 -19
- package/lib/element/substitution/metaLevel.js +31 -27
- package/lib/element/substitution/reference.js +11 -10
- package/lib/element/substitution/statement.js +30 -23
- package/lib/element/substitution/term.js +11 -10
- package/lib/element/term.js +24 -20
- package/lib/element/topLevelMetaAssertion.js +2 -2
- package/lib/element/variable.js +6 -2
- package/lib/process/assign.js +10 -4
- package/lib/process/unify.js +8 -8
- package/lib/process/validate.js +10 -8
- package/lib/utilities/context.js +68 -23
- package/lib/utilities/element.js +55 -27
- package/lib/utilities/json.js +8 -8
- package/lib/utilities/statement.js +1 -8
- package/lib/utilities/string.js +12 -1
- package/lib/utilities/unification.js +9 -7
- package/lib/utilities/validation.js +39 -31
- package/package.json +1 -1
- package/src/context/file/nominal.js +14 -16
- package/src/context/illative.js +17 -0
- package/src/context/nested.js +15 -0
- package/src/context/{scoped.js → proof.js} +73 -73
- package/src/context/thetic.js +17 -0
- package/src/context.js +23 -36
- package/src/element/assertion/contained.js +28 -28
- package/src/element/assertion/defined.js +23 -23
- package/src/element/assertion/property.js +15 -14
- package/src/element/assertion/satisfies.js +7 -9
- package/src/element/assertion/subproof.js +26 -31
- package/src/element/assertion/type.js +10 -12
- package/src/element/assumption.js +33 -54
- package/src/element/combinator/bracketed.js +2 -2
- package/src/element/combinator.js +23 -29
- package/src/element/conclusion.js +37 -40
- package/src/element/constructor.js +29 -34
- package/src/element/deduction.js +36 -39
- package/src/element/equality.js +16 -18
- package/src/element/equivalence.js +76 -67
- package/src/element/frame.js +42 -34
- package/src/element/hypothesis.js +7 -6
- package/src/element/judgement.js +34 -44
- package/src/element/label.js +25 -31
- package/src/element/metavariable.js +32 -12
- package/src/element/proofAssertion/premise.js +63 -49
- package/src/element/proofAssertion/step.js +43 -23
- package/src/element/proofAssertion/supposition.js +64 -50
- package/src/element/proofAssertion.js +0 -22
- package/src/element/reference.js +119 -80
- package/src/element/signature.js +5 -2
- package/src/element/statement.js +30 -35
- package/src/element/subproof.js +1 -1
- package/src/element/substitution/frame.js +27 -26
- package/src/element/substitution/metaLevel.js +38 -42
- package/src/element/substitution/reference.js +13 -14
- package/src/element/substitution/statement.js +35 -33
- package/src/element/substitution/term.js +13 -14
- package/src/element/term.js +42 -34
- package/src/element/topLevelMetaAssertion.js +1 -1
- package/src/element/variable.js +8 -1
- package/src/process/assign.js +9 -3
- package/src/process/unify.js +7 -7
- package/src/process/validate.js +9 -8
- package/src/utilities/context.js +82 -31
- package/src/utilities/element.js +68 -31
- package/src/utilities/json.js +13 -13
- package/src/utilities/statement.js +1 -9
- package/src/utilities/string.js +16 -2
- package/src/utilities/unification.js +10 -9
- package/src/utilities/validation.js +50 -38
- package/lib/context/scoped.js +0 -232
- package/lib/utilities/term.js +0 -17
- package/src/utilities/term.js +0 -10
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
import { Element } from "occam-languages";
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
|
-
import { attempt, instantiate } from "../utilities/context";
|
|
7
6
|
import { instantiateConclusion } from "../process/instantiate";
|
|
8
|
-
import {
|
|
7
|
+
import { declare, attempt, descend, serialise, unserialise, instantiate } from "../utilities/context";
|
|
9
8
|
|
|
10
|
-
export
|
|
9
|
+
export default define(class Conclusion extends Element {
|
|
11
10
|
constructor(context, string, node, statement) {
|
|
12
11
|
super(context, string, node);
|
|
13
12
|
|
|
@@ -58,14 +57,16 @@ export default define(class Conclusion extends Element {
|
|
|
58
57
|
|
|
59
58
|
context.trace(`Validating the '${conclusionString}' conclusion...`);
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
declare((context) => {
|
|
61
|
+
attempt((context) => {
|
|
62
|
+
const statementValidates = this.validateStatement(context);
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
if (statementValidates) {
|
|
65
|
+
context.commit(this);
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
validates = true;
|
|
68
|
+
}
|
|
69
|
+
}, context);
|
|
69
70
|
}, context);
|
|
70
71
|
|
|
71
72
|
if (validates) {
|
|
@@ -76,19 +77,20 @@ export default define(class Conclusion extends Element {
|
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
validateStatement(context) {
|
|
79
|
-
let statementValidates;
|
|
80
|
+
let statementValidates = false;
|
|
80
81
|
|
|
81
82
|
const statementString = this.statement.getString(),
|
|
82
83
|
conclusionString = this.getString(); ///
|
|
83
84
|
|
|
84
85
|
context.trace(`Validating the '${conclusionString}' conclusion's '${statementString}' statement...`);
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
descend((context) => {
|
|
88
|
+
const statement = this.statement.validate(context);
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
if (statement !== null) {
|
|
91
|
+
statementValidates = true;
|
|
92
|
+
}
|
|
93
|
+
}, context);
|
|
92
94
|
|
|
93
95
|
if (statementValidates) {
|
|
94
96
|
context.trace(`...validated the '${conclusionString}' conclusion's '${statementString}' statement.`);
|
|
@@ -123,41 +125,36 @@ export default define(class Conclusion extends Element {
|
|
|
123
125
|
}
|
|
124
126
|
|
|
125
127
|
toJSON() {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
context = this.getContext();
|
|
129
|
-
|
|
130
|
-
const ephemeralContext = context, ///
|
|
131
|
-
ephemeralContextJSON = ephemeralContextToEphemeralContextJSON(ephemeralContext),
|
|
132
|
-
contextJSON = ephemeralContextJSON; ///
|
|
133
|
-
|
|
134
|
-
context = contextJSON; ///
|
|
128
|
+
const context = this.getContext();
|
|
135
129
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
130
|
+
return serialise((context) => {
|
|
131
|
+
const string = this.getString(),
|
|
132
|
+
json = {
|
|
133
|
+
context,
|
|
134
|
+
string
|
|
135
|
+
};
|
|
141
136
|
|
|
142
|
-
|
|
137
|
+
return json;
|
|
138
|
+
}, context);
|
|
143
139
|
}
|
|
144
140
|
|
|
145
141
|
static name = "Conclusion";
|
|
146
142
|
|
|
147
143
|
static fromJSON(json, context) {
|
|
148
|
-
|
|
144
|
+
let conclusion;
|
|
149
145
|
|
|
150
|
-
context
|
|
146
|
+
unserialise((json, context) => {
|
|
147
|
+
instantiate((context) => {
|
|
148
|
+
const { string } = json,
|
|
149
|
+
conclusionNode = instantiateConclusion(string, context),
|
|
150
|
+
node = conclusionNode, ///
|
|
151
|
+
statement = statementFromConclusionNode(conclusionNode, context);
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
node = conclusionNode, ///
|
|
156
|
-
statement = statementFromConclusionNode(conclusionNode, context),
|
|
157
|
-
conclusion = new Conclusion(context, string, node, statement);
|
|
153
|
+
conclusion = new Conclusion(context, string, node, statement);
|
|
154
|
+
}, context);
|
|
155
|
+
}, json, context);
|
|
158
156
|
|
|
159
|
-
|
|
160
|
-
}, context);
|
|
157
|
+
return conclusion;
|
|
161
158
|
}
|
|
162
159
|
});
|
|
163
160
|
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import { Element } from "occam-languages";
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
|
-
import { attempt, instantiate } from "../utilities/context";
|
|
7
6
|
import { instantiateConstructor } from "../process/instantiate";
|
|
8
7
|
import { termFromConstructorNode } from "../utilities/element";
|
|
9
8
|
import { unifyTermWithConstructor } from "../process/unify";
|
|
10
9
|
import { validateTermAsConstructor } from "../process/validate";
|
|
11
|
-
import { typeFromJSON, typeToTypeJSON
|
|
10
|
+
import { typeFromJSON, typeToTypeJSON } from "../utilities/json";
|
|
11
|
+
import { attempt, serialise, unserialise, instantiate } from "../utilities/context";
|
|
12
12
|
|
|
13
13
|
export default define(class Constructor extends Element {
|
|
14
14
|
constructor(context, string, node, term, type) {
|
|
@@ -143,45 +143,40 @@ export default define(class Constructor extends Element {
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
toJSON() {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
context
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
context,
|
|
162
|
-
string,
|
|
163
|
-
type
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
return json;
|
|
146
|
+
const context = this.getContext();
|
|
147
|
+
|
|
148
|
+
return serialise((context) => {
|
|
149
|
+
const includeType = false,
|
|
150
|
+
typeJSON = typeToTypeJSON(this.type),
|
|
151
|
+
string = this.getString(includeType),
|
|
152
|
+
type = typeJSON, ///
|
|
153
|
+
json = {
|
|
154
|
+
context,
|
|
155
|
+
string,
|
|
156
|
+
type
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
return json;
|
|
160
|
+
}, context);
|
|
167
161
|
}
|
|
168
162
|
|
|
169
163
|
static name = "Constructor";
|
|
170
164
|
|
|
171
165
|
static fromJSON(json, context) {
|
|
172
|
-
|
|
166
|
+
let constructor;
|
|
173
167
|
|
|
174
|
-
context
|
|
168
|
+
unserialise((json, context) => {
|
|
169
|
+
instantiate((context) => {
|
|
170
|
+
const { string } = json,
|
|
171
|
+
constructorNode = instantiateConstructor(string, context),
|
|
172
|
+
node = constructorNode, ///
|
|
173
|
+
term = termFromConstructorNode(constructorNode, context),
|
|
174
|
+
type = typeFromJSON(json, context);
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
node = constructorNode, ///
|
|
180
|
-
term = termFromConstructorNode(constructorNode, context),
|
|
181
|
-
type = typeFromJSON(json, context),
|
|
182
|
-
constructor = new Constructor(context, string, node, term, type);
|
|
176
|
+
constructor = new Constructor(context, string, node, term, type);
|
|
177
|
+
}, context);
|
|
178
|
+
}, json, context);
|
|
183
179
|
|
|
184
|
-
|
|
185
|
-
}, context);
|
|
180
|
+
return constructor;
|
|
186
181
|
}
|
|
187
182
|
});
|
package/src/element/deduction.js
CHANGED
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
import { Element } from "occam-languages";
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
|
-
import { attempt, instantiate } from "../utilities/context";
|
|
7
6
|
import { instantiateDeduction } from "../process/instantiate";
|
|
8
|
-
import {
|
|
7
|
+
import { declare, attempt, descend, serialise, unserialise, instantiate } from "../utilities/context";
|
|
9
8
|
|
|
10
9
|
export default define(class Deduction extends Element {
|
|
11
10
|
constructor(context, string, node, statement) {
|
|
@@ -58,14 +57,16 @@ export default define(class Deduction extends Element {
|
|
|
58
57
|
|
|
59
58
|
context.trace(`Validating the '${deductionString}' deduction...`);
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
declare((context) => {
|
|
61
|
+
attempt((context) => {
|
|
62
|
+
const statementValidates = this.validateStatement(context);
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
if (statementValidates) {
|
|
65
|
+
context.commit(this);
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
validates = true;
|
|
68
|
+
}
|
|
69
|
+
}, context);
|
|
69
70
|
}, context);
|
|
70
71
|
|
|
71
72
|
if (validates) {
|
|
@@ -76,19 +77,20 @@ export default define(class Deduction extends Element {
|
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
validateStatement(context) {
|
|
79
|
-
let statementValidates;
|
|
80
|
+
let statementValidates = false;
|
|
80
81
|
|
|
81
82
|
const statementString = this.statement.getString(),
|
|
82
83
|
deductionnString = this.getString(); ///
|
|
83
84
|
|
|
84
85
|
context.trace(`Validating the '${deductionnString}' deductionn's '${statementString}' statement...`);
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
descend((context) => {
|
|
88
|
+
const statement = this.statement.validate(context);
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
if (statement !== null) {
|
|
91
|
+
statementValidates = true;
|
|
92
|
+
}
|
|
93
|
+
}, context);
|
|
92
94
|
|
|
93
95
|
if (statementValidates) {
|
|
94
96
|
context.trace(`...validated the '${deductionnString}' deductionn's '${statementString}' statement.`);
|
|
@@ -148,41 +150,36 @@ export default define(class Deduction extends Element {
|
|
|
148
150
|
}
|
|
149
151
|
|
|
150
152
|
toJSON() {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
context = this.getContext();
|
|
154
|
-
|
|
155
|
-
const ephemeralContext = context, ///
|
|
156
|
-
ephemeralContextJSON = ephemeralContextToEphemeralContextJSON(ephemeralContext),
|
|
157
|
-
contextJSON = ephemeralContextJSON; ///
|
|
158
|
-
|
|
159
|
-
context = contextJSON; ///
|
|
153
|
+
const context = this.getContext();
|
|
160
154
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
155
|
+
return serialise((context) => {
|
|
156
|
+
const string = this.getString(),
|
|
157
|
+
json = {
|
|
158
|
+
context,
|
|
159
|
+
string
|
|
160
|
+
};
|
|
166
161
|
|
|
167
|
-
|
|
162
|
+
return json;
|
|
163
|
+
}, context);
|
|
168
164
|
}
|
|
169
165
|
|
|
170
166
|
static name = "Deduction";
|
|
171
167
|
|
|
172
168
|
static fromJSON(json, context) {
|
|
173
|
-
|
|
169
|
+
let deduction;
|
|
174
170
|
|
|
175
|
-
context
|
|
171
|
+
unserialise((json, context) => {
|
|
172
|
+
instantiate((context) => {
|
|
173
|
+
const { string } = json,
|
|
174
|
+
deductionNode = instantiateDeduction(string, context),
|
|
175
|
+
node = deductionNode, ///
|
|
176
|
+
statement = statementFromDeductionNode(deductionNode, context);
|
|
176
177
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
node = deductionNode, ///
|
|
181
|
-
statement = statementFromDeductionNode(deductionNode, context),
|
|
182
|
-
deduction = new Deduction(context, string, node, statement);
|
|
178
|
+
deduction = new Deduction(context, string, node, statement);
|
|
179
|
+
}, context);
|
|
180
|
+
}, json, context);
|
|
183
181
|
|
|
184
|
-
|
|
185
|
-
}, context);
|
|
182
|
+
return deduction;
|
|
186
183
|
}
|
|
187
184
|
});
|
|
188
185
|
|
package/src/element/equality.js
CHANGED
|
@@ -6,6 +6,7 @@ import { define } from "../elements";
|
|
|
6
6
|
import { instantiate } from "../utilities/context";
|
|
7
7
|
import { equateTerms } from "../process/equate";
|
|
8
8
|
import { instantiateEquality } from "../process/instantiate";
|
|
9
|
+
import { equalityFromStatementNode } from "../utilities/element";
|
|
9
10
|
import { equalityAssignmentFromEquality, leftVariableAssignmentFromEquality, rightVariableAssignmentFromEquality } from "../process/assign";
|
|
10
11
|
|
|
11
12
|
export default define(class Equality extends Element {
|
|
@@ -115,7 +116,7 @@ export default define(class Equality extends Element {
|
|
|
115
116
|
return validEquality;
|
|
116
117
|
}
|
|
117
118
|
|
|
118
|
-
validate(
|
|
119
|
+
validate(context) {
|
|
119
120
|
let equality = null;
|
|
120
121
|
|
|
121
122
|
const equalityString = this.getString(); ///
|
|
@@ -134,6 +135,8 @@ export default define(class Equality extends Element {
|
|
|
134
135
|
const termsValidate = this.validateTerms(context);
|
|
135
136
|
|
|
136
137
|
if (termsValidate) {
|
|
138
|
+
const stated = context.isStated();
|
|
139
|
+
|
|
137
140
|
let validatesWhenStated = false,
|
|
138
141
|
validatesWhenDerived = false;
|
|
139
142
|
|
|
@@ -151,7 +154,7 @@ export default define(class Equality extends Element {
|
|
|
151
154
|
if (validates) {
|
|
152
155
|
equality = this; ///
|
|
153
156
|
|
|
154
|
-
this.assign(
|
|
157
|
+
this.assign(context);
|
|
155
158
|
|
|
156
159
|
context.addEquality(equality);
|
|
157
160
|
|
|
@@ -243,29 +246,17 @@ export default define(class Equality extends Element {
|
|
|
243
246
|
return validatesWhenDerived;
|
|
244
247
|
}
|
|
245
248
|
|
|
246
|
-
assign(
|
|
249
|
+
assign(context) {
|
|
247
250
|
const equality = this, ///
|
|
248
251
|
equalityAssignment = equalityAssignmentFromEquality(equality, context),
|
|
249
252
|
leftVariableAssignment = leftVariableAssignmentFromEquality(equality, context),
|
|
250
253
|
rightVariableAssignment = rightVariableAssignmentFromEquality(equality, context);
|
|
251
254
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
assignment = equalityAssignment; ///
|
|
255
|
-
|
|
256
|
-
context.addAssignment(assignment);
|
|
257
|
-
|
|
258
|
-
if (leftVariableAssignment !== null) {
|
|
259
|
-
assignment = leftVariableAssignment; ///
|
|
260
|
-
|
|
261
|
-
context.addAssignment(assignment);
|
|
262
|
-
}
|
|
255
|
+
context.addAssignment(equalityAssignment);
|
|
263
256
|
|
|
264
|
-
|
|
265
|
-
assignment = rightVariableAssignment; ///
|
|
257
|
+
context.addAssignment(leftVariableAssignment);
|
|
266
258
|
|
|
267
|
-
|
|
268
|
-
}
|
|
259
|
+
context.addAssignment(rightVariableAssignment);
|
|
269
260
|
}
|
|
270
261
|
|
|
271
262
|
static name = "Equality";
|
|
@@ -294,6 +285,13 @@ export default define(class Equality extends Element {
|
|
|
294
285
|
return equality;
|
|
295
286
|
}, context);
|
|
296
287
|
}
|
|
288
|
+
|
|
289
|
+
static fromStatement(statement, context) {
|
|
290
|
+
const statementNode = statement.getNode(),
|
|
291
|
+
equality = equalityFromStatementNode(statementNode, context);
|
|
292
|
+
|
|
293
|
+
return equality;
|
|
294
|
+
}
|
|
297
295
|
});
|
|
298
296
|
|
|
299
297
|
function leftTermFromEqualityNode(equalityNode, context) {
|
|
@@ -4,25 +4,38 @@ import { Element } from "occam-languages";
|
|
|
4
4
|
import { arrayUtilities } from "necessary";
|
|
5
5
|
|
|
6
6
|
import { define } from "../elements";
|
|
7
|
+
import { instantiate } from "../utilities/context";
|
|
7
8
|
import { instantiateEquivalence } from "../process/instantiate";
|
|
8
9
|
import { stripBracketsFromTermNode } from "../utilities/brackets";
|
|
9
10
|
import { equivalenceStringFromTerms } from "../utilities/string";
|
|
10
11
|
import { equivalenceFromEquivalenceNode } from "../utilities/element";
|
|
11
|
-
import { instantiate, sanitisedContextFromContext } from "../utilities/context";
|
|
12
12
|
|
|
13
13
|
const { compress } = arrayUtilities;
|
|
14
14
|
|
|
15
15
|
export default define(class Equivalence extends Element {
|
|
16
|
-
constructor(context, string, node, terms) {
|
|
16
|
+
constructor(context, string, node, type, terms) {
|
|
17
17
|
super(context, string, node);
|
|
18
18
|
|
|
19
|
+
this.type = type;
|
|
19
20
|
this.terms = terms;
|
|
20
21
|
}
|
|
21
22
|
|
|
23
|
+
getType() {
|
|
24
|
+
return this.type;
|
|
25
|
+
}
|
|
26
|
+
|
|
22
27
|
getTerms() {
|
|
23
28
|
return this.terms;
|
|
24
29
|
}
|
|
25
30
|
|
|
31
|
+
setType(type) {
|
|
32
|
+
this.type = type;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
setTerms(terms) {
|
|
36
|
+
this.terms = terms;
|
|
37
|
+
}
|
|
38
|
+
|
|
26
39
|
getEquivalenceNode() {
|
|
27
40
|
const node = this.getNode(),
|
|
28
41
|
equivalenceNode = node; ///
|
|
@@ -30,26 +43,6 @@ export default define(class Equivalence extends Element {
|
|
|
30
43
|
return equivalenceNode;
|
|
31
44
|
}
|
|
32
45
|
|
|
33
|
-
getType() {
|
|
34
|
-
const type = this.terms.reduce((type, term) => {
|
|
35
|
-
const termType = term.getType();
|
|
36
|
-
|
|
37
|
-
if (type === null) {
|
|
38
|
-
type = termType; ///
|
|
39
|
-
} else {
|
|
40
|
-
const termTypeSubTypeOfType = termType.isSubTypeOf(type);
|
|
41
|
-
|
|
42
|
-
if (termTypeSubTypeOfType) {
|
|
43
|
-
type = termType; ///
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return type;
|
|
48
|
-
}, null);
|
|
49
|
-
|
|
50
|
-
return type;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
46
|
getGroundedTerms(definedVariables, groundedTerms, context) {
|
|
54
47
|
this.terms.forEach((term) => {
|
|
55
48
|
const termGrounded = term.isGrounded(definedVariables, context);
|
|
@@ -133,20 +126,6 @@ export default define(class Equivalence extends Element {
|
|
|
133
126
|
return implicitlyGrounded;
|
|
134
127
|
}
|
|
135
128
|
|
|
136
|
-
compareTerm(term) {
|
|
137
|
-
const termA = term, ///
|
|
138
|
-
comparesToTerm = this.someTerm((term) => {
|
|
139
|
-
const termB = term, ///
|
|
140
|
-
termAEqualToTermB = termA.isEqualTo(termB);
|
|
141
|
-
|
|
142
|
-
if (termAEqualToTermB) {
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
return comparesToTerm;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
129
|
matchTermNode(termNode) {
|
|
151
130
|
termNode = stripBracketsFromTermNode(termNode); ///
|
|
152
131
|
|
|
@@ -173,36 +152,31 @@ export default define(class Equivalence extends Element {
|
|
|
173
152
|
return termNodesMatch;
|
|
174
153
|
}
|
|
175
154
|
|
|
176
|
-
|
|
177
|
-
const variableNodeA = variableNode, ///
|
|
178
|
-
variableNodeMatches = this.someTerm((term) => {
|
|
179
|
-
const termNode = term.getNode(),
|
|
180
|
-
singularVariableNode = termNode.getSingularVariableNode();
|
|
155
|
+
someTerm(callback) { return this.terms.some(callback); }
|
|
181
156
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
157
|
+
everyTerm(callback) { return this.terms.every(callback); }
|
|
158
|
+
|
|
159
|
+
compareTerm(term) {
|
|
160
|
+
const termA = term, ///
|
|
161
|
+
comparesToTerm = this.someTerm((term) => {
|
|
162
|
+
const termB = term, ///
|
|
163
|
+
termAComparesToTermB = termA.compareTerm(termB);
|
|
185
164
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
165
|
+
if (termAComparesToTermB) {
|
|
166
|
+
return true;
|
|
189
167
|
}
|
|
190
168
|
});
|
|
191
169
|
|
|
192
|
-
return
|
|
170
|
+
return comparesToTerm;
|
|
193
171
|
}
|
|
194
172
|
|
|
195
|
-
someTerm(callback) { return this.terms.some(callback); }
|
|
196
|
-
|
|
197
|
-
everyTerm(callback) { return this.terms.every(callback); }
|
|
198
|
-
|
|
199
173
|
someOtherTerm(term, callback) {
|
|
200
174
|
const termA = term, ///
|
|
201
175
|
terms = this.terms.filter((term) => {
|
|
202
176
|
const termB = term, ///
|
|
203
|
-
|
|
177
|
+
termAComparesToTermB = termA.compareTerm(termB);
|
|
204
178
|
|
|
205
|
-
if (!
|
|
179
|
+
if (!termAComparesToTermB) {
|
|
206
180
|
return true;
|
|
207
181
|
}
|
|
208
182
|
}),
|
|
@@ -218,9 +192,9 @@ export default define(class Equivalence extends Element {
|
|
|
218
192
|
];
|
|
219
193
|
|
|
220
194
|
compress(combinedTerms, (combinedTermA, combinedTermB) => {
|
|
221
|
-
const
|
|
195
|
+
const combinedTermAComparesToCombinedTermB = combinedTermA.compareTerm(combinedTermB);
|
|
222
196
|
|
|
223
|
-
if (!
|
|
197
|
+
if (!combinedTermAComparesToCombinedTermB) {
|
|
224
198
|
return true;
|
|
225
199
|
}
|
|
226
200
|
});
|
|
@@ -229,35 +203,70 @@ export default define(class Equivalence extends Element {
|
|
|
229
203
|
}
|
|
230
204
|
|
|
231
205
|
mergedWith(equivalence, context) {
|
|
232
|
-
|
|
206
|
+
let type;
|
|
207
|
+
|
|
208
|
+
type = equivalence.getType();
|
|
209
|
+
|
|
210
|
+
const types = [
|
|
211
|
+
this.type,
|
|
212
|
+
type
|
|
213
|
+
],
|
|
214
|
+
terms = equivalence.getTerms(),
|
|
215
|
+
combinedType = combinedTypeFromTypes(types),
|
|
233
216
|
combinedTerms = this.combineTerms(terms);
|
|
234
217
|
|
|
235
|
-
|
|
218
|
+
type = combinedType; ///
|
|
219
|
+
|
|
220
|
+
instantiate((context) => {
|
|
236
221
|
const terms = combinedTerms, ///
|
|
237
222
|
equivalenceString = equivalenceStringFromTerms(terms),
|
|
238
223
|
string = equivalenceString, ///
|
|
239
|
-
equivalenceNode = instantiateEquivalence(string, context)
|
|
240
|
-
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
224
|
+
equivalenceNode = instantiateEquivalence(string, context);
|
|
241
225
|
|
|
242
|
-
|
|
226
|
+
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
243
227
|
}, context);
|
|
228
|
+
|
|
229
|
+
equivalence.setType(type);
|
|
230
|
+
|
|
231
|
+
return equivalence;
|
|
244
232
|
}
|
|
245
233
|
|
|
246
234
|
static name = "Equivalence";
|
|
247
235
|
|
|
248
236
|
static fromEquality(equality, context) {
|
|
249
|
-
|
|
237
|
+
let equivalence;
|
|
250
238
|
|
|
251
|
-
|
|
239
|
+
const type = equality.getType();
|
|
252
240
|
|
|
253
|
-
|
|
241
|
+
instantiate((context) => {
|
|
254
242
|
const terms = equality.getTerms(),
|
|
255
243
|
equivalenceString = equivalenceStringFromTerms(terms),
|
|
256
244
|
string = equivalenceString, ///
|
|
257
|
-
equivalenceNode = instantiateEquivalence(string, context)
|
|
258
|
-
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
245
|
+
equivalenceNode = instantiateEquivalence(string, context);
|
|
259
246
|
|
|
260
|
-
|
|
247
|
+
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
261
248
|
}, context);
|
|
249
|
+
|
|
250
|
+
equivalence.setType(type);
|
|
251
|
+
|
|
252
|
+
return equivalence;
|
|
262
253
|
}
|
|
263
254
|
});
|
|
255
|
+
|
|
256
|
+
function combinedTypeFromTypes(types) {
|
|
257
|
+
const combinedType = types.reduce((combinedType, type) => {
|
|
258
|
+
if (combinedType === null) {
|
|
259
|
+
combinedType = type; ///
|
|
260
|
+
} else {
|
|
261
|
+
const typeSubTypeOfCombinedType = type.isSubTypeOf(combinedType);
|
|
262
|
+
|
|
263
|
+
if (typeSubTypeOfCombinedType) {
|
|
264
|
+
combinedType = type; ///
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return combinedType;
|
|
269
|
+
}, null);
|
|
270
|
+
|
|
271
|
+
return combinedType;
|
|
272
|
+
}
|