occam-verify-cli 1.0.612 → 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 +210 -77
- package/lib/context/file/nominal.js +157 -135
- package/lib/context/liminal.js +34 -59
- package/lib/context/scoped.js +37 -58
- 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/assertion.js +5 -9
- package/lib/element/assumption.js +50 -19
- package/lib/element/combinator.js +8 -1
- package/lib/element/conclusion.js +8 -1
- package/lib/element/constructor.js +8 -1
- package/lib/element/declaration.js +3 -7
- package/lib/element/deduction.js +8 -1
- package/lib/element/derivation.js +15 -10
- package/lib/element/equality.js +109 -62
- package/lib/element/equivalence.js +13 -6
- package/lib/element/equivalences.js +11 -4
- package/lib/element/error.js +10 -7
- package/lib/element/frame.js +21 -21
- package/lib/element/hypothesis.js +12 -7
- package/lib/element/judgement.js +55 -26
- package/lib/element/label.js +8 -1
- package/lib/element/metaType.js +9 -2
- package/lib/element/metavariable.js +16 -10
- package/lib/element/parameter.js +8 -1
- package/lib/element/procedureCall.js +21 -29
- package/lib/element/procedureReference.js +15 -1
- package/lib/element/proof.js +8 -1
- package/lib/element/proofAssertion.js +8 -1
- package/lib/element/property.js +8 -1
- package/lib/element/propertyRelation.js +8 -1
- package/lib/element/reference.js +16 -28
- package/lib/element/rule.js +22 -21
- package/lib/element/section.js +8 -1
- package/lib/element/signature.js +8 -1
- package/lib/element/statement.js +34 -40
- package/lib/element/subDerivation.js +11 -6
- package/lib/element/subproof.js +8 -1
- package/lib/element/substitution/frame.js +6 -6
- package/lib/element/substitution/reference.js +6 -6
- package/lib/element/substitution/statement.js +6 -6
- package/lib/element/substitution/term.js +9 -3
- package/lib/element/substitution.js +73 -49
- package/lib/element/term.js +15 -1
- package/lib/element/topLevelAssertion/axiom.js +8 -1
- package/lib/element/topLevelAssertion/conjecture.js +8 -1
- package/lib/element/topLevelAssertion/lemma.js +8 -1
- package/lib/element/topLevelAssertion/theorem.js +8 -1
- package/lib/element/topLevelAssertion.js +11 -17
- package/lib/element/topLevelMetaAssertion/metaLemma.js +8 -1
- package/lib/element/topLevelMetaAssertion/metatheorem.js +8 -1
- package/lib/element/topLevelMetaAssertion.js +9 -11
- package/lib/element/type.js +8 -1
- package/lib/element/typePrefix.js +8 -1
- package/lib/element/variable.js +51 -5
- package/lib/preamble.js +1 -2
- package/lib/process/assign.js +96 -27
- 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 +15 -23
- package/package.json +2 -2
- package/src/context/ephemeral.js +234 -82
- package/src/context/file/nominal.js +195 -135
- package/src/context/liminal.js +43 -80
- package/src/context/scoped.js +56 -81
- 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/assertion.js +4 -8
- package/src/element/assumption.js +57 -18
- package/src/element/combinator.js +7 -0
- package/src/element/conclusion.js +7 -0
- package/src/element/constructor.js +7 -0
- package/src/element/declaration.js +1 -3
- package/src/element/deduction.js +7 -0
- package/src/element/derivation.js +10 -5
- package/src/element/equality.js +116 -74
- package/src/element/equivalence.js +15 -7
- package/src/element/equivalences.js +14 -5
- package/src/element/error.js +5 -2
- package/src/element/frame.js +25 -25
- package/src/element/hypothesis.js +11 -6
- package/src/element/judgement.js +62 -26
- package/src/element/label.js +7 -0
- package/src/element/metaType.js +8 -1
- package/src/element/metavariable.js +20 -14
- package/src/element/parameter.js +7 -0
- package/src/element/procedureCall.js +21 -14
- package/src/element/procedureReference.js +13 -0
- package/src/element/proof.js +7 -0
- package/src/element/proofAssertion.js +7 -0
- package/src/element/property.js +7 -0
- package/src/element/propertyRelation.js +7 -0
- package/src/element/reference.js +20 -33
- package/src/element/rule.js +16 -19
- package/src/element/section.js +7 -0
- package/src/element/signature.js +7 -0
- package/src/element/statement.js +36 -44
- package/src/element/subDerivation.js +10 -5
- package/src/element/subproof.js +7 -0
- package/src/element/substitution/frame.js +3 -3
- package/src/element/substitution/reference.js +3 -3
- package/src/element/substitution/statement.js +3 -3
- package/src/element/substitution/term.js +4 -2
- package/src/element/substitution.js +60 -40
- package/src/element/term.js +20 -2
- package/src/element/topLevelAssertion/axiom.js +7 -0
- package/src/element/topLevelAssertion/conjecture.js +7 -0
- package/src/element/topLevelAssertion/lemma.js +7 -0
- package/src/element/topLevelAssertion/theorem.js +7 -0
- package/src/element/topLevelAssertion.js +5 -15
- package/src/element/topLevelMetaAssertion/metaLemma.js +7 -0
- package/src/element/topLevelMetaAssertion/metatheorem.js +7 -0
- package/src/element/topLevelMetaAssertion.js +4 -6
- package/src/element/type.js +7 -0
- package/src/element/typePrefix.js +7 -0
- package/src/element/variable.js +9 -4
- package/src/preamble.js +0 -1
- package/src/process/assign.js +113 -38
- 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 +19 -30
- package/lib/element/substitutions.js +0 -225
- package/src/element/substitutions.js +0 -84
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) {
|
|
@@ -22,6 +22,25 @@ export default define(class Equality extends Element {
|
|
|
22
22
|
return this.rightTerm;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
getEqualityNode() {
|
|
26
|
+
const node = this.getNode(),
|
|
27
|
+
equalityNde = node; ///
|
|
28
|
+
|
|
29
|
+
return equalityNde;
|
|
30
|
+
}
|
|
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
|
+
|
|
25
44
|
getType() {
|
|
26
45
|
let type;
|
|
27
46
|
|
|
@@ -50,6 +69,18 @@ export default define(class Equality extends Element {
|
|
|
50
69
|
return terms;
|
|
51
70
|
}
|
|
52
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
|
+
|
|
53
84
|
isReflexive() {
|
|
54
85
|
const leftTermString = this.leftTerm.getString(),
|
|
55
86
|
rightTermString = this.rightTerm.getString(),
|
|
@@ -58,6 +89,14 @@ export default define(class Equality extends Element {
|
|
|
58
89
|
return reflexive;
|
|
59
90
|
}
|
|
60
91
|
|
|
92
|
+
isEqualTo(equality) {
|
|
93
|
+
const equalityNode = equality.getNode(),
|
|
94
|
+
equalityNodeMatches = this.matchEqualityNode(equalityNode),
|
|
95
|
+
equalTo = equalityNodeMatches; ///
|
|
96
|
+
|
|
97
|
+
return equalTo;
|
|
98
|
+
}
|
|
99
|
+
|
|
61
100
|
isEqual(context) {
|
|
62
101
|
let equal = false;
|
|
63
102
|
|
|
@@ -72,151 +111,154 @@ export default define(class Equality extends Element {
|
|
|
72
111
|
return equal;
|
|
73
112
|
}
|
|
74
113
|
|
|
75
|
-
|
|
76
|
-
|
|
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;
|
|
77
124
|
|
|
78
125
|
const equalityString = this.getString(); ///
|
|
79
126
|
|
|
80
|
-
context.trace(`
|
|
127
|
+
context.trace(`Validating the '${equalityString}' equality...`);
|
|
81
128
|
|
|
82
|
-
const
|
|
129
|
+
const valid = this.isValid(context);
|
|
83
130
|
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
verifiesWhenDerived = false;
|
|
131
|
+
if (valid) {
|
|
132
|
+
validates = true;
|
|
87
133
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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;
|
|
141
|
+
|
|
142
|
+
if (stated) {
|
|
143
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
144
|
+
} else {
|
|
145
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
146
|
+
}
|
|
93
147
|
|
|
94
|
-
|
|
95
|
-
|
|
148
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
149
|
+
validates = true;
|
|
150
|
+
}
|
|
96
151
|
}
|
|
97
|
-
}
|
|
98
152
|
|
|
99
|
-
|
|
153
|
+
if (validates) {
|
|
154
|
+
const equality = this; ///
|
|
100
155
|
|
|
101
|
-
|
|
156
|
+
context.addEquality(equality);
|
|
102
157
|
|
|
103
|
-
|
|
158
|
+
this.assign(assignments, stated, context);
|
|
104
159
|
|
|
105
|
-
|
|
106
|
-
|
|
160
|
+
context.debug(`...validated the '${equalityString}' equality.`);
|
|
161
|
+
}
|
|
107
162
|
}
|
|
108
163
|
|
|
109
|
-
return
|
|
164
|
+
return validates;
|
|
110
165
|
}
|
|
111
166
|
|
|
112
|
-
|
|
113
|
-
let
|
|
167
|
+
validateTerms(context) {
|
|
168
|
+
let termsValidate;
|
|
114
169
|
|
|
115
170
|
const equalityString = this.getString(); ///
|
|
116
171
|
|
|
117
|
-
context.trace(`
|
|
172
|
+
context.trace(`Validating the '${equalityString}' equality's terms...`);
|
|
118
173
|
|
|
119
|
-
const
|
|
120
|
-
let
|
|
174
|
+
const leftTermValidates = this.leftTerm.validate(context, () => {
|
|
175
|
+
let validatesForwards;
|
|
121
176
|
|
|
122
|
-
const
|
|
123
|
-
let
|
|
177
|
+
const rightTermValidates = this.rightTerm.validate(context, () => {
|
|
178
|
+
let validatesForwards;
|
|
124
179
|
|
|
125
180
|
const leftTermType = this.leftTerm.getType(),
|
|
126
181
|
rightTermType = this.rightTerm.getType(),
|
|
127
182
|
leftTermTypeComparableToRightTermType = leftTermType.isComparableTo(rightTermType);
|
|
128
183
|
|
|
129
|
-
|
|
184
|
+
validatesForwards = leftTermTypeComparableToRightTermType; ///
|
|
130
185
|
|
|
131
|
-
return
|
|
186
|
+
return validatesForwards;
|
|
132
187
|
});
|
|
133
188
|
|
|
134
|
-
|
|
189
|
+
validatesForwards = rightTermValidates; ///
|
|
135
190
|
|
|
136
|
-
return
|
|
191
|
+
return validatesForwards;
|
|
137
192
|
});
|
|
138
193
|
|
|
139
|
-
|
|
194
|
+
termsValidate = leftTermValidates; ///
|
|
140
195
|
|
|
141
|
-
if (
|
|
142
|
-
context.debug(`...
|
|
196
|
+
if (termsValidate) {
|
|
197
|
+
context.debug(`...validated the '${equalityString}' equality's terms.`);
|
|
143
198
|
}
|
|
144
199
|
|
|
145
|
-
return
|
|
200
|
+
return termsValidate;
|
|
146
201
|
}
|
|
147
202
|
|
|
148
|
-
|
|
149
|
-
let
|
|
203
|
+
validateWhenStated(assignments, context) {
|
|
204
|
+
let validatesWhenStated;
|
|
150
205
|
|
|
151
206
|
const equalityString = this.getString(); ///
|
|
152
207
|
|
|
153
|
-
context.trace(`
|
|
208
|
+
context.trace(`Validating the '${equalityString}' stated equality...`);
|
|
154
209
|
|
|
155
|
-
|
|
210
|
+
validatesWhenStated = true;
|
|
156
211
|
|
|
157
|
-
if (
|
|
158
|
-
context.debug(`...
|
|
212
|
+
if (validatesWhenStated) {
|
|
213
|
+
context.debug(`...validated the '${equalityString}' stated equality.`);
|
|
159
214
|
}
|
|
160
215
|
|
|
161
|
-
return
|
|
216
|
+
return validatesWhenStated;
|
|
162
217
|
}
|
|
163
218
|
|
|
164
|
-
|
|
165
|
-
let
|
|
219
|
+
validateWhenDerived(context) {
|
|
220
|
+
let validatesWhenDerived;
|
|
166
221
|
|
|
167
222
|
const equalityString = this.getString(); ///
|
|
168
223
|
|
|
169
|
-
context.trace(`
|
|
224
|
+
context.trace(`Validating the '${equalityString}' derived equality...`);
|
|
170
225
|
|
|
171
|
-
|
|
226
|
+
validatesWhenDerived = true; ///
|
|
172
227
|
|
|
173
|
-
if (
|
|
174
|
-
context.debug(`...
|
|
228
|
+
if (validatesWhenDerived) {
|
|
229
|
+
context.debug(`...validated the '${equalityString}' derived equality.`);
|
|
175
230
|
}
|
|
176
231
|
|
|
177
|
-
return
|
|
232
|
+
return validatesWhenDerived;
|
|
178
233
|
}
|
|
179
234
|
|
|
180
|
-
assign(assignments, context) {
|
|
235
|
+
assign(assignments, stated, context) {
|
|
181
236
|
if (assignments === null) {
|
|
182
237
|
return;
|
|
183
238
|
}
|
|
184
239
|
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
leftTermNodeSingularVariableNode = leftTermNode.getSingularVariableNode(),
|
|
190
|
-
rightTermNodeSingularVariableNode = rightTermNode.getSingularVariableNode(),
|
|
191
|
-
leftVariableNode = leftTermNodeSingularVariableNode, ///
|
|
192
|
-
rightVariableNode = rightTermNodeSingularVariableNode; ///
|
|
240
|
+
const equality = this, ///
|
|
241
|
+
equalityAssignment = equalityAssignmentFromEquality(equality, context),
|
|
242
|
+
leftVariableAssignment = leftVariableAssignmentFromEquality(equality, context),
|
|
243
|
+
rightVariableAssignment = rightVariableAssignmentFromEquality(equality, context);
|
|
193
244
|
|
|
194
245
|
let assignment;
|
|
195
246
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
247
|
+
assignment = equalityAssignment; ///
|
|
248
|
+
|
|
249
|
+
assignments.push(assignment);
|
|
199
250
|
|
|
251
|
+
if (leftVariableAssignment !== null) {
|
|
200
252
|
assignment = leftVariableAssignment; ///
|
|
201
253
|
|
|
202
254
|
assignments.push(assignment);
|
|
203
255
|
}
|
|
204
256
|
|
|
205
|
-
if (
|
|
206
|
-
const rightVariable = Variable.fromVariableNodeAndType(rightVariableNode, type, context),
|
|
207
|
-
rightVariableAssignment = variableAssignmentFromVariable(rightVariable);
|
|
208
|
-
|
|
257
|
+
if (rightVariableAssignment !== null) {
|
|
209
258
|
assignment = rightVariableAssignment; ///
|
|
210
259
|
|
|
211
260
|
assignments.push(assignment);
|
|
212
261
|
}
|
|
213
|
-
|
|
214
|
-
const equality = this, //
|
|
215
|
-
equalityAssignment = equalityAssignmentFromEquality(equality);
|
|
216
|
-
|
|
217
|
-
assignment = equalityAssignment; ///
|
|
218
|
-
|
|
219
|
-
assignments.push(assignment);
|
|
220
262
|
}
|
|
221
263
|
|
|
222
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;
|
|
@@ -15,6 +15,7 @@ const { compress } = arrayUtilities;
|
|
|
15
15
|
export default define(class Equivalence extends Element {
|
|
16
16
|
constructor(context, string, node, terms) {
|
|
17
17
|
super(context, string, node);
|
|
18
|
+
|
|
18
19
|
this.terms = terms;
|
|
19
20
|
}
|
|
20
21
|
|
|
@@ -22,6 +23,13 @@ export default define(class Equivalence extends Element {
|
|
|
22
23
|
return this.terms;
|
|
23
24
|
}
|
|
24
25
|
|
|
26
|
+
getEquivalenceNode() {
|
|
27
|
+
const node = this.getNode(),
|
|
28
|
+
equivalenceNode = node; ///
|
|
29
|
+
|
|
30
|
+
return equivalenceNode;
|
|
31
|
+
}
|
|
32
|
+
|
|
25
33
|
getType() {
|
|
26
34
|
const type = this.terms.reduce((type, term) => {
|
|
27
35
|
const termType = term.getType();
|
|
@@ -49,7 +57,7 @@ export default define(class Equivalence extends Element {
|
|
|
49
57
|
if (termGrounded) {
|
|
50
58
|
const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
|
|
51
59
|
const groundedTermNode = groundedTerm.getNode(),
|
|
52
|
-
groundedTermNodeMatches = term.
|
|
60
|
+
groundedTermNodeMatches = term.matchTermNode(groundedTermNode);
|
|
53
61
|
|
|
54
62
|
if (groundedTermNodeMatches) {
|
|
55
63
|
return true;
|
|
@@ -143,7 +151,7 @@ export default define(class Equivalence extends Element {
|
|
|
143
151
|
termNode = stripBracketsFromTermNode(termNode); ///
|
|
144
152
|
|
|
145
153
|
const termNodeMatches = this.someTerm((term) => {
|
|
146
|
-
const termNodeMatches = term.
|
|
154
|
+
const termNodeMatches = term.matchTermNode(termNode);
|
|
147
155
|
|
|
148
156
|
if (termNodeMatches) {
|
|
149
157
|
return true;
|
|
@@ -226,8 +234,8 @@ export default define(class Equivalence extends Element {
|
|
|
226
234
|
|
|
227
235
|
return literally((context) => {
|
|
228
236
|
const terms = combinedTerms, ///
|
|
229
|
-
|
|
230
|
-
string =
|
|
237
|
+
equivalenceString = equivalenceStringFromTerms(terms),
|
|
238
|
+
string = equivalenceString, ///
|
|
231
239
|
equivalenceNode = instantiateEquivalence(string, context),
|
|
232
240
|
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
233
241
|
|
|
@@ -240,8 +248,8 @@ export default define(class Equivalence extends Element {
|
|
|
240
248
|
static fromEquality(equality, context) {
|
|
241
249
|
return literally((context) => {
|
|
242
250
|
const terms = equality.getTerms(),
|
|
243
|
-
|
|
244
|
-
string =
|
|
251
|
+
equivalenceString = equivalenceStringFromTerms(terms),
|
|
252
|
+
string = equivalenceString, ///
|
|
245
253
|
equivalenceNode = instantiateEquivalence(string, context),
|
|
246
254
|
equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
|
|
247
255
|
|
|
@@ -20,6 +20,13 @@ export default define(class Equivalences extends Element {
|
|
|
20
20
|
return this.array;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
getEquivalencesNode() {
|
|
24
|
+
const node = this.getNode(),
|
|
25
|
+
equivalencesNode = node; ///
|
|
26
|
+
|
|
27
|
+
return equivalencesNode;
|
|
28
|
+
}
|
|
29
|
+
|
|
23
30
|
getLength() { return this.array.length; }
|
|
24
31
|
|
|
25
32
|
getTypes() {
|
|
@@ -73,7 +80,7 @@ export default define(class Equivalences extends Element {
|
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
mergedWith(equivalences, context) {
|
|
76
|
-
let mergedEquivalences = this.clone(); ///
|
|
83
|
+
let mergedEquivalences = this.clone(context); ///
|
|
77
84
|
|
|
78
85
|
equivalences.forEachEquivalence((equivalence) => {
|
|
79
86
|
mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
|
|
@@ -132,7 +139,7 @@ export default define(class Equivalences extends Element {
|
|
|
132
139
|
}
|
|
133
140
|
|
|
134
141
|
separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
|
|
135
|
-
let equivalences = this,
|
|
142
|
+
let equivalences = this, ///
|
|
136
143
|
groundedEquivalences,
|
|
137
144
|
remainingEquivalences,
|
|
138
145
|
initiallyGroundedEquivalences,
|
|
@@ -180,11 +187,13 @@ export default define(class Equivalences extends Element {
|
|
|
180
187
|
}
|
|
181
188
|
}
|
|
182
189
|
|
|
183
|
-
clone() {
|
|
184
|
-
const
|
|
190
|
+
clone(context) {
|
|
191
|
+
const string = EMPTY_STRING,
|
|
192
|
+
node = null,
|
|
193
|
+
array = [
|
|
185
194
|
...this.array
|
|
186
195
|
],
|
|
187
|
-
equivalences = new Equivalences(array);
|
|
196
|
+
equivalences = new Equivalences(context, string, node, array);
|
|
188
197
|
|
|
189
198
|
return equivalences;
|
|
190
199
|
}
|
package/src/element/error.js
CHANGED
|
@@ -5,8 +5,11 @@ import { Element } from "occam-languages";
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
|
|
7
7
|
export default define(class Error extends Element {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
getErrorNode() {
|
|
9
|
+
const node = this.getNode(),
|
|
10
|
+
errorNode = node; ///
|
|
11
|
+
|
|
12
|
+
return errorNode;
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
async verify() {
|
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;
|
|
@@ -18,6 +18,13 @@ export default define(class Hypothesis extends Element {
|
|
|
18
18
|
return this.statement;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
getHypothesisNode() {
|
|
22
|
+
const node = this.getNode(),
|
|
23
|
+
hypothesisNode = node; ///
|
|
24
|
+
|
|
25
|
+
return hypothesisNode;
|
|
26
|
+
}
|
|
27
|
+
|
|
21
28
|
verify(context) {
|
|
22
29
|
let verifies = false;
|
|
23
30
|
|
|
@@ -33,15 +40,13 @@ export default define(class Hypothesis extends Element {
|
|
|
33
40
|
statementValidates = this.statement.validate(assignments, stated, context);
|
|
34
41
|
|
|
35
42
|
if (statementValidates) {
|
|
36
|
-
|
|
43
|
+
assignAssignments(assignments, context);
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
const subproofOrProofAssertion = this; ///
|
|
45
|
+
const subproofOrProofAssertion = this; ///
|
|
40
46
|
|
|
41
|
-
|
|
47
|
+
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
42
48
|
|
|
43
|
-
|
|
44
|
-
}
|
|
49
|
+
verifies = true;
|
|
45
50
|
}
|
|
46
51
|
} else {
|
|
47
52
|
context.debug(`Unable to verify the '${hypothesisString}' hypothesis because it is nonsense.`);
|
package/src/element/judgement.js
CHANGED
|
@@ -21,9 +21,15 @@ export default define(class Judgement extends Element {
|
|
|
21
21
|
return this.assumption;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
getJudgementNode() {
|
|
25
25
|
const node = this.getNode(),
|
|
26
|
-
judgementNode = node
|
|
26
|
+
judgementNode = node; ///
|
|
27
|
+
|
|
28
|
+
return judgementNode;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
isSingular() {
|
|
32
|
+
const judgementNode = this.getJudgementNode(),
|
|
27
33
|
singular = judgementNode.isSingular();
|
|
28
34
|
|
|
29
35
|
return singular;
|
|
@@ -31,7 +37,27 @@ export default define(class Judgement extends Element {
|
|
|
31
37
|
|
|
32
38
|
getMetavariable() { return this.frame.getMetavariable(); }
|
|
33
39
|
|
|
34
|
-
|
|
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
|
+
}
|
|
35
61
|
|
|
36
62
|
validate(assignments, stated, context) {
|
|
37
63
|
let validates = false;
|
|
@@ -40,35 +66,41 @@ export default define(class Judgement extends Element {
|
|
|
40
66
|
|
|
41
67
|
context.trace(`Validating the '${judgementString}' judgement...`);
|
|
42
68
|
|
|
43
|
-
const
|
|
69
|
+
const valid = this.isValid(context);
|
|
44
70
|
|
|
45
|
-
if (
|
|
46
|
-
|
|
71
|
+
if (valid) {
|
|
72
|
+
validates = true;
|
|
47
73
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
context.debug(`...the '${judgementString}' judgement is already valid.`);
|
|
75
|
+
} else {
|
|
76
|
+
const frameValidates = this.frame.validate(assignments, stated, context);
|
|
51
77
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
78
|
+
if (frameValidates) {
|
|
79
|
+
const assumptionValidates = this.assumption.validate(assignments, stated, context);
|
|
80
|
+
|
|
81
|
+
if (assumptionValidates) {
|
|
82
|
+
let validatesWhenStated = false,
|
|
83
|
+
validatesWhenDerived = false;
|
|
57
84
|
|
|
58
|
-
|
|
59
|
-
|
|
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
|
+
}
|
|
60
94
|
}
|
|
61
95
|
}
|
|
62
|
-
}
|
|
63
96
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
97
|
+
if (validates) {
|
|
98
|
+
const judgement = this; ///
|
|
99
|
+
|
|
100
|
+
context.addJudgement(judgement)
|
|
69
101
|
|
|
70
|
-
|
|
71
|
-
|
|
102
|
+
context.debug(`...validated the '${judgementString}' judgement.`);
|
|
103
|
+
}
|
|
72
104
|
}
|
|
73
105
|
|
|
74
106
|
return validates;
|
|
@@ -114,13 +146,17 @@ export default define(class Judgement extends Element {
|
|
|
114
146
|
return validatesWhenDerived;
|
|
115
147
|
}
|
|
116
148
|
|
|
117
|
-
assign(assignments, context) {
|
|
149
|
+
assign(assignments, stated, context) {
|
|
118
150
|
if (assignments === null) {
|
|
119
151
|
return;
|
|
120
152
|
}
|
|
121
153
|
|
|
154
|
+
if (!stated) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
122
158
|
const judgement = this, ///
|
|
123
|
-
judgementAssignment = judgementAssignmentFromJudgement(judgement),
|
|
159
|
+
judgementAssignment = judgementAssignmentFromJudgement(judgement, context),
|
|
124
160
|
assignment = judgementAssignment; ///
|
|
125
161
|
|
|
126
162
|
assignments.push(assignment);
|