occam-verify-cli 1.0.768 → 1.0.781
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 +31 -0
- package/lib/context/proof.js +242 -0
- package/lib/context/thetic.js +28 -0
- package/lib/context.js +19 -21
- package/lib/element/assertion/contained.js +32 -24
- package/lib/element/assertion/defined.js +47 -40
- package/lib/element/assertion/property.js +18 -13
- package/lib/element/assertion/satisfies.js +12 -9
- package/lib/element/assertion/subproof.js +28 -26
- package/lib/element/assertion/type.js +14 -12
- package/lib/element/assumption.js +40 -50
- 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/equivalences.js +4 -2
- package/lib/element/frame.js +74 -53
- package/lib/element/hypothesis.js +7 -5
- package/lib/element/judgement.js +41 -74
- package/lib/element/label.js +22 -22
- package/lib/element/metavariable.js +31 -11
- package/lib/element/proofAssertion/premise.js +48 -35
- package/lib/element/proofAssertion/step.js +77 -22
- 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/string.js +12 -1
- package/lib/utilities/unification.js +14 -12
- package/lib/utilities/validation.js +55 -40
- package/package.json +4 -4
- package/src/context/file/nominal.js +14 -16
- package/src/context/illative.js +17 -0
- package/src/context/nested.js +21 -0
- package/src/context/{scoped.js → proof.js} +65 -51
- package/src/context/thetic.js +17 -0
- package/src/context.js +30 -36
- package/src/element/assertion/contained.js +44 -31
- package/src/element/assertion/defined.js +55 -46
- package/src/element/assertion/property.js +23 -15
- package/src/element/assertion/satisfies.js +15 -10
- package/src/element/assertion/subproof.js +34 -31
- package/src/element/assertion/type.js +18 -13
- package/src/element/assumption.js +40 -69
- 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/equivalences.js +5 -2
- package/src/element/frame.js +96 -65
- package/src/element/hypothesis.js +7 -6
- package/src/element/judgement.js +45 -45
- package/src/element/label.js +25 -31
- package/src/element/metavariable.js +48 -21
- package/src/element/proofAssertion/premise.js +63 -49
- package/src/element/proofAssertion/step.js +47 -26
- 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/string.js +16 -2
- package/src/utilities/unification.js +18 -16
- package/src/utilities/validation.js +73 -53
- package/lib/context/scoped.js +0 -232
- package/lib/utilities/statement.js +0 -78
- package/lib/utilities/term.js +0 -17
- package/src/utilities/statement.js +0 -74
- package/src/utilities/term.js +0 -10
package/src/element/judgement.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import { Element } from "occam-languages";
|
|
4
4
|
|
|
5
|
-
import elements from "../elements";
|
|
6
|
-
|
|
7
5
|
import { define } from "../elements";
|
|
8
6
|
import { instantiateJudgement } from "../process/instantiate";
|
|
9
7
|
import { reconcile, instantiate } from "../utilities/context";
|
|
8
|
+
import { judgementFromStatementNode } from "../utilities/element";
|
|
10
9
|
import { judgementAssignmentFromJudgement } from "../process/assign";
|
|
11
10
|
|
|
12
11
|
export default define(class Judgement extends Element {
|
|
@@ -21,7 +20,7 @@ export default define(class Judgement extends Element {
|
|
|
21
20
|
return this.frame;
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
getAssumption() {
|
|
25
24
|
return this.assumption;
|
|
26
25
|
}
|
|
27
26
|
|
|
@@ -41,8 +40,6 @@ export default define(class Judgement extends Element {
|
|
|
41
40
|
|
|
42
41
|
getMetavariable() { return this.frame.getMetavariable(); }
|
|
43
42
|
|
|
44
|
-
compareMetavariableName(metavariableName) { return this.frame.compareMetavariableName(metavariableName); }
|
|
45
|
-
|
|
46
43
|
matchJudgementNode(judgementNode) {
|
|
47
44
|
const node = judgementNode, ///
|
|
48
45
|
nodeMatches = this.matchNode(node),
|
|
@@ -51,6 +48,10 @@ export default define(class Judgement extends Element {
|
|
|
51
48
|
return judgementNodeMatches;
|
|
52
49
|
}
|
|
53
50
|
|
|
51
|
+
matchMetavariableNode(metavariableNode) { return this.frame.matchMetavariableNode(metavariableNode); }
|
|
52
|
+
|
|
53
|
+
compareMetavariableName(metavariableName) { return this.frame.compareMetavariableName(metavariableName); }
|
|
54
|
+
|
|
54
55
|
findValidJudgement(context) {
|
|
55
56
|
const judgementNode = this.getJudgementNode(),
|
|
56
57
|
judgement = context.findJudgementByJudgementNode(judgementNode),
|
|
@@ -59,7 +60,7 @@ export default define(class Judgement extends Element {
|
|
|
59
60
|
return validJudgemenet;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
validate(
|
|
63
|
+
validate(context) {
|
|
63
64
|
let judgement = null;
|
|
64
65
|
|
|
65
66
|
const judgementString = this.getString(); ///
|
|
@@ -76,34 +77,36 @@ export default define(class Judgement extends Element {
|
|
|
76
77
|
let validates = false;
|
|
77
78
|
|
|
78
79
|
reconcile((context) => {
|
|
80
|
+
const frameValidates = this.validateFrame(context);
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const frameValidates = this.validateFrame(stated, context);
|
|
82
|
+
if (frameValidates) {
|
|
83
|
+
const assumptionValidates = this.validateAssumption(context);
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
if (assumptionValidates) {
|
|
86
|
+
const stated = context.isStated();
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
validatesWhenDerived = false;
|
|
88
|
+
let validatesWhenStated = false,
|
|
89
|
+
validatesWhenDerived = false;
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
if (stated) {
|
|
92
|
+
validatesWhenStated = this.validateWhenStated(context);
|
|
93
|
+
} else {
|
|
94
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
95
|
+
}
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
98
|
+
validates = true;
|
|
99
|
+
}
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
|
-
}
|
|
102
|
+
}, context);
|
|
102
103
|
|
|
103
104
|
if (validates) {
|
|
104
105
|
judgement = this; ///
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
this.assign(context);
|
|
108
|
+
|
|
109
|
+
context.addJudgement(judgement);
|
|
107
110
|
|
|
108
111
|
context.debug(`...validated the '${judgementString}' judgement.`);
|
|
109
112
|
}
|
|
@@ -112,7 +115,7 @@ export default define(class Judgement extends Element {
|
|
|
112
115
|
return judgement;
|
|
113
116
|
}
|
|
114
117
|
|
|
115
|
-
validateFrame(
|
|
118
|
+
validateFrame(context) {
|
|
116
119
|
let frameValidates = false;
|
|
117
120
|
|
|
118
121
|
const frameString = this.frame.getString(),
|
|
@@ -120,7 +123,7 @@ export default define(class Judgement extends Element {
|
|
|
120
123
|
|
|
121
124
|
context.trace(`Validating the '${judgementString}' judgement's '${frameString}' frame...`);
|
|
122
125
|
|
|
123
|
-
const frame = this.frame.validate(
|
|
126
|
+
const frame = this.frame.validate(context);
|
|
124
127
|
|
|
125
128
|
if (frame !== null) {
|
|
126
129
|
this.frame = frame;
|
|
@@ -135,7 +138,7 @@ export default define(class Judgement extends Element {
|
|
|
135
138
|
return frameValidates;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
|
-
validateAssumption(
|
|
141
|
+
validateAssumption(context) {
|
|
139
142
|
let assumptionValidates = false;
|
|
140
143
|
|
|
141
144
|
const assumptionString = this.assumption.getString(),
|
|
@@ -143,7 +146,7 @@ export default define(class Judgement extends Element {
|
|
|
143
146
|
|
|
144
147
|
context.trace(`Validating the '${judgementString}' judgement's '${assumptionString}' assumption...`);
|
|
145
148
|
|
|
146
|
-
const assumption = this.assumption.validate(
|
|
149
|
+
const assumption = this.assumption.validate(context);
|
|
147
150
|
|
|
148
151
|
if (assumption !== null) {
|
|
149
152
|
this.assumption = assumption;
|
|
@@ -181,11 +184,9 @@ export default define(class Judgement extends Element {
|
|
|
181
184
|
|
|
182
185
|
context.trace(`Validating the '${judgementString}' derived judgement...`);
|
|
183
186
|
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
substitutions = topLevelMetaAssertion.getSubstitutions(),
|
|
188
|
-
frameComparesToSubstitutions = this.frame.compareSubstitutions(substitutions, context);
|
|
187
|
+
const topLevelMetaAssertion = this.assumption.getTopLevelMetaAssertion(),
|
|
188
|
+
metaLevelSubstitutions = topLevelMetaAssertion.getMetaLevelSubstitutions(),
|
|
189
|
+
frameComparesToSubstitutions = this.frame.compareMetaLevelSubstitutions(metaLevelSubstitutions, context);
|
|
189
190
|
|
|
190
191
|
if (frameComparesToSubstitutions) {
|
|
191
192
|
validatesWhenDerived = true;
|
|
@@ -198,16 +199,17 @@ export default define(class Judgement extends Element {
|
|
|
198
199
|
return validatesWhenDerived;
|
|
199
200
|
}
|
|
200
201
|
|
|
201
|
-
assign(
|
|
202
|
+
assign(context) {
|
|
203
|
+
const stated = context.isStated();
|
|
204
|
+
|
|
202
205
|
if (!stated) {
|
|
203
206
|
return;
|
|
204
207
|
}
|
|
205
208
|
|
|
206
209
|
const judgement = this, ///
|
|
207
|
-
judgementAssignment = judgementAssignmentFromJudgement(judgement, context)
|
|
208
|
-
assignment = judgementAssignment; ///
|
|
210
|
+
judgementAssignment = judgementAssignmentFromJudgement(judgement, context);
|
|
209
211
|
|
|
210
|
-
context.addAssignment(
|
|
212
|
+
context.addAssignment(judgementAssignment);
|
|
211
213
|
}
|
|
212
214
|
|
|
213
215
|
toJSON() {
|
|
@@ -236,6 +238,13 @@ export default define(class Judgement extends Element {
|
|
|
236
238
|
return judgement;
|
|
237
239
|
}, context);
|
|
238
240
|
}
|
|
241
|
+
|
|
242
|
+
static fromStatement(statement, context) {
|
|
243
|
+
const statementNode = statement.getNode(),
|
|
244
|
+
judgement = judgementFromStatementNode(statementNode, context);
|
|
245
|
+
|
|
246
|
+
return judgement;
|
|
247
|
+
}
|
|
239
248
|
});
|
|
240
249
|
|
|
241
250
|
function frameFromJudgementNode(judgementNode, context) {
|
|
@@ -251,12 +260,3 @@ function assumptionFromJudgementNode(judgementNode, context) {
|
|
|
251
260
|
|
|
252
261
|
return assumption;
|
|
253
262
|
}
|
|
254
|
-
|
|
255
|
-
function referenceFromMetavariable(metavariable, context) {
|
|
256
|
-
const { Reference } = elements,
|
|
257
|
-
metavariableNode = metavariable.getNode(),
|
|
258
|
-
reference = Reference.fromMetavariableNode(metavariableNode, context);
|
|
259
|
-
|
|
260
|
-
return reference;
|
|
261
|
-
}
|
|
262
|
-
|
package/src/element/label.js
CHANGED
|
@@ -4,9 +4,8 @@ import { Element } from "occam-languages";
|
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
import { instantiateLabel } from "../process/instantiate";
|
|
7
|
-
import { attempt, instantiate } from "../utilities/context";
|
|
8
7
|
import { metavariableFromLabelNode } from "../utilities/element";
|
|
9
|
-
import {
|
|
8
|
+
import { attempt, serialise, unserialise, instantiate } from "../utilities/context";
|
|
10
9
|
|
|
11
10
|
export default define(class Label extends Element {
|
|
12
11
|
constructor(context, string, node, metavariable) {
|
|
@@ -38,10 +37,6 @@ export default define(class Label extends Element {
|
|
|
38
37
|
return labelNodeMatches;
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
compareMetavariable(metavariable) { return this.metavariable.compare(metavariable); }
|
|
42
|
-
|
|
43
|
-
compareMetavariableName(metavariableName) { return this.metavariable.compareMetavariableName(metavariableName); }
|
|
44
|
-
|
|
45
40
|
compareReference(reference) {
|
|
46
41
|
const metavariable = reference.getMetavariable(),
|
|
47
42
|
metavariableComparesToMetavariable = this.compareMetavariable(metavariable),
|
|
@@ -50,6 +45,10 @@ export default define(class Label extends Element {
|
|
|
50
45
|
return comparesToReference;
|
|
51
46
|
}
|
|
52
47
|
|
|
48
|
+
compareMetavariable(metavariable) { return this.metavariable.compare(metavariable); }
|
|
49
|
+
|
|
50
|
+
compareMetavariableName(metavariableName) { return this.metavariable.compareMetavariableName(metavariableName); }
|
|
51
|
+
|
|
53
52
|
verify() {
|
|
54
53
|
let verifies = false;
|
|
55
54
|
|
|
@@ -127,40 +126,35 @@ export default define(class Label extends Element {
|
|
|
127
126
|
}
|
|
128
127
|
|
|
129
128
|
toJSON() {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
context = this.getContext();
|
|
133
|
-
|
|
134
|
-
const ephemeralContext = context, ///
|
|
135
|
-
ephemeralContextJSON = ephemeralContextToEphemeralContextJSON(ephemeralContext),
|
|
136
|
-
contextJSON = ephemeralContextJSON; ///
|
|
129
|
+
const context = this.getContext();
|
|
137
130
|
|
|
138
|
-
context
|
|
131
|
+
return serialise((context) => {
|
|
132
|
+
const string = this.getString(),
|
|
133
|
+
json = {
|
|
134
|
+
context,
|
|
135
|
+
string
|
|
136
|
+
};
|
|
139
137
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
context,
|
|
143
|
-
string
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
return json;
|
|
138
|
+
return json;
|
|
139
|
+
}, context);
|
|
147
140
|
}
|
|
148
141
|
|
|
149
142
|
static name = "Label";
|
|
150
143
|
|
|
151
144
|
static fromJSON(json, context) {
|
|
152
|
-
|
|
145
|
+
let label;
|
|
153
146
|
|
|
154
|
-
context
|
|
147
|
+
unserialise((json, context) => {
|
|
148
|
+
instantiate((context) => {
|
|
149
|
+
const { string } = json,
|
|
150
|
+
labelNode = instantiateLabel(string, context),
|
|
151
|
+
node = labelNode, ///
|
|
152
|
+
metavariable = metavariableFromLabelNode(labelNode, context);
|
|
155
153
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
node = labelNode, ///
|
|
160
|
-
metavariable = metavariableFromLabelNode(labelNode, context),
|
|
161
|
-
label = new Label(context, string, node, metavariable);
|
|
154
|
+
label = new Label(context, string, node, metavariable);
|
|
155
|
+
}, context);
|
|
156
|
+
}, json, context);
|
|
162
157
|
|
|
163
|
-
|
|
164
|
-
}, context);
|
|
158
|
+
return label;
|
|
165
159
|
}
|
|
166
160
|
});
|
|
@@ -10,7 +10,7 @@ import { EMPTY_STRING } from "../constants";
|
|
|
10
10
|
import { instantiateMetavariable } from "../process/instantiate";
|
|
11
11
|
import { metaTypeFromJSON, metaTypeToMetaTypeJSON } from "../utilities/json";
|
|
12
12
|
import { unifyMetavariable, unifyMetavariableIntrinsically } from "../process/unify";
|
|
13
|
-
import { nameFromMetavariableNode, termFromMetavariableNode, typeFromMetavariableNode } from "../utilities/element";
|
|
13
|
+
import { nameFromMetavariableNode, termFromMetavariableNode, typeFromMetavariableNode, metavariableFromStatementNode } from "../utilities/element";
|
|
14
14
|
|
|
15
15
|
export default define(class Metavariable extends Element {
|
|
16
16
|
constructor(context, string, node, name, term, type, metaType) {
|
|
@@ -58,6 +58,14 @@ export default define(class Metavariable extends Element {
|
|
|
58
58
|
|
|
59
59
|
isMetaTypeEqualTo(metaType) { return this.metaType.isEqualTo(metaType); }
|
|
60
60
|
|
|
61
|
+
matchMetavariableNode(metavariableNode) {
|
|
62
|
+
const node = metavariableNode, ///
|
|
63
|
+
nodeMatches = this.matchNode(node),
|
|
64
|
+
metavariableNodeMatches = nodeMatches; ///
|
|
65
|
+
|
|
66
|
+
return metavariableNodeMatches;
|
|
67
|
+
}
|
|
68
|
+
|
|
61
69
|
compare(metavariable) {
|
|
62
70
|
const metavariableName = metavariable.getName(),
|
|
63
71
|
comparesToMetavariableName = this.compareMetavariableName(metavariableName),
|
|
@@ -73,14 +81,6 @@ export default define(class Metavariable extends Element {
|
|
|
73
81
|
return comparesToMetavariableName;
|
|
74
82
|
}
|
|
75
83
|
|
|
76
|
-
matchMetavariableNode(metavariableNode) {
|
|
77
|
-
const node = metavariableNode, ///
|
|
78
|
-
nodeMatches = this.matchNode(node),
|
|
79
|
-
metavariableNodeMatches = nodeMatches; ///
|
|
80
|
-
|
|
81
|
-
return metavariableNodeMatches;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
84
|
verify(context) {
|
|
85
85
|
let verifies = false;
|
|
86
86
|
|
|
@@ -486,11 +486,11 @@ export default define(class Metavariable extends Element {
|
|
|
486
486
|
if (frameSingular) {
|
|
487
487
|
const frameMetavariableName = frame.getMetavariableName(),
|
|
488
488
|
frameMetavariable = context.findMetavariableByMetavariableName(frameMetavariableName),
|
|
489
|
-
|
|
490
|
-
specificMetavariable = frameMetavariable, ///
|
|
491
|
-
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
489
|
+
frameMetavariableUnifiesIntrinsically = this.unifyMetavariableIntrinsically(frameMetavariable, generalContext, specificContext);
|
|
492
490
|
|
|
493
|
-
|
|
491
|
+
if (frameMetavariableUnifiesIntrinsically) {
|
|
492
|
+
frameMetavariableUnifies = true;
|
|
493
|
+
}
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
}
|
|
@@ -522,11 +522,11 @@ export default define(class Metavariable extends Element {
|
|
|
522
522
|
referenceMetavariableUnifies = true;
|
|
523
523
|
} else {
|
|
524
524
|
const referenceMetavariable = reference.getMetavariable(),
|
|
525
|
-
|
|
526
|
-
specificMetavariable = referenceMetavariable, ///
|
|
527
|
-
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
525
|
+
referenceMetavariableUnifiesIntrinsically = this.unifyMetavariableIntrinsically(referenceMetavariable, generalContext, specificContext);
|
|
528
526
|
|
|
529
|
-
|
|
527
|
+
if (referenceMetavariableUnifiesIntrinsically) {
|
|
528
|
+
referenceMetavariableUnifies = true;
|
|
529
|
+
}
|
|
530
530
|
}
|
|
531
531
|
}
|
|
532
532
|
|
|
@@ -561,11 +561,11 @@ export default define(class Metavariable extends Element {
|
|
|
561
561
|
if (statementSingular) {
|
|
562
562
|
const statementMetavariableName = statement.getMetavariableName(),
|
|
563
563
|
statementMetavariable = context.findMetavariableByMetavariableName(statementMetavariableName),
|
|
564
|
-
|
|
565
|
-
specificMetavariable = statementMetavariable, ///
|
|
566
|
-
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
564
|
+
statementMetavariableUnifiesIntrinsically = this.unifyMetavariableIntrinsically(statementMetavariable, generalContext, specificContext);
|
|
567
565
|
|
|
568
|
-
|
|
566
|
+
if (statementMetavariableUnifiesIntrinsically) {
|
|
567
|
+
statementMetavariableUnifies = true;
|
|
568
|
+
}
|
|
569
569
|
}
|
|
570
570
|
}
|
|
571
571
|
}
|
|
@@ -577,6 +577,26 @@ export default define(class Metavariable extends Element {
|
|
|
577
577
|
return statementMetavariableUnifies;
|
|
578
578
|
}
|
|
579
579
|
|
|
580
|
+
unifyMetavariableIntrinsically(metavariable, generalContext, specificContext) {
|
|
581
|
+
let metavariableUnifiesIntrinsically;
|
|
582
|
+
|
|
583
|
+
const context = specificContext, ///
|
|
584
|
+
generalMetavariable = this, ///
|
|
585
|
+
specificMetavariable = metavariable,
|
|
586
|
+
generalMetavariableString = generalMetavariable.getString(), ///
|
|
587
|
+
specificMetavariableString = specificMetavariable.getString();
|
|
588
|
+
|
|
589
|
+
context.trace(`Unifying the '${specificMetavariableString}' metavariable with the '${generalMetavariableString}' metavariable intrinsically...`);
|
|
590
|
+
|
|
591
|
+
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
592
|
+
|
|
593
|
+
if (metavariableUnifiesIntrinsically) {
|
|
594
|
+
context.debug(`...unified the '${specificMetavariableString}' metavariable with the '${generalMetavariableString}' metavariable intrinsically.`);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
return metavariableUnifiesIntrinsically;
|
|
598
|
+
}
|
|
599
|
+
|
|
580
600
|
toJSON() {
|
|
581
601
|
const metaTypeJSON = metaTypeToMetaTypeJSON(this.metaType),
|
|
582
602
|
metaType = metaTypeJSON, ///
|
|
@@ -605,4 +625,11 @@ export default define(class Metavariable extends Element {
|
|
|
605
625
|
return metavariable;
|
|
606
626
|
}, context);
|
|
607
627
|
}
|
|
628
|
+
|
|
629
|
+
static fromStatement(statement, context) {
|
|
630
|
+
const statementNode = statement.getNode(),
|
|
631
|
+
metavariable = metavariableFromStatementNode(statementNode, context);
|
|
632
|
+
|
|
633
|
+
return metavariable;
|
|
634
|
+
}
|
|
608
635
|
});
|
|
@@ -5,8 +5,7 @@ import ProofAssertion from "../proofAssertion";
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
6
|
import { instantiatePremise } from "../../process/instantiate";
|
|
7
7
|
import { procedureCallFromPremiseNode } from "../../utilities/element";
|
|
8
|
-
import { join, attempt, reconcile, instantiate } from "../../utilities/context";
|
|
9
|
-
import { ephemeralContextFromJSON, ephemeralContextToEphemeralContextJSON } from "../../utilities/json";
|
|
8
|
+
import { join, declare, attempt, reconcile, serialise, unserialise, instantiate } from "../../utilities/context";
|
|
10
9
|
|
|
11
10
|
export default define(class Premise extends ProofAssertion {
|
|
12
11
|
constructor(context, string, node, statement, procedureCall) {
|
|
@@ -26,12 +25,6 @@ export default define(class Premise extends ProofAssertion {
|
|
|
26
25
|
return premiseNode;
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
isStated() {
|
|
30
|
-
const stated = true; ///
|
|
31
|
-
|
|
32
|
-
return stated;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
28
|
async verify(context) {
|
|
36
29
|
let verifies = false;
|
|
37
30
|
|
|
@@ -64,29 +57,31 @@ export default define(class Premise extends ProofAssertion {
|
|
|
64
57
|
|
|
65
58
|
context.trace(`Validatting the '${premiseString}' premise...`);
|
|
66
59
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
60
|
+
declare((context) => {
|
|
61
|
+
attempt((context) => {
|
|
62
|
+
const statement = this.getStatement(),
|
|
63
|
+
procedureCall = this.getProcedureCall();
|
|
70
64
|
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
if (statement !== null) {
|
|
66
|
+
const statementValidates = this.validateStatement(context);
|
|
73
67
|
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
if (statementValidates) {
|
|
69
|
+
context.commit(this);
|
|
76
70
|
|
|
77
|
-
|
|
71
|
+
validates = true;
|
|
72
|
+
}
|
|
78
73
|
}
|
|
79
|
-
}
|
|
80
74
|
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
if (procedureCall !== null) {
|
|
76
|
+
const procedureCallValidates = this.validateProcedureCall(context);
|
|
83
77
|
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
if (procedureCallValidates) {
|
|
79
|
+
context.commit(this);
|
|
86
80
|
|
|
87
|
-
|
|
81
|
+
validates = true;
|
|
82
|
+
}
|
|
88
83
|
}
|
|
89
|
-
}
|
|
84
|
+
}, context);
|
|
90
85
|
}, context);
|
|
91
86
|
|
|
92
87
|
if (validates) {
|
|
@@ -96,6 +91,30 @@ export default define(class Premise extends ProofAssertion {
|
|
|
96
91
|
return validates;
|
|
97
92
|
}
|
|
98
93
|
|
|
94
|
+
validateStatement(context) {
|
|
95
|
+
let statementValidates = false;
|
|
96
|
+
|
|
97
|
+
const premiseString = this.getString();
|
|
98
|
+
|
|
99
|
+
context.trace(`Validating the '${premiseString}' premise's statsement... `);
|
|
100
|
+
|
|
101
|
+
let statement;
|
|
102
|
+
|
|
103
|
+
statement = this.getStatement();
|
|
104
|
+
|
|
105
|
+
statement = statement.validate(context); ///
|
|
106
|
+
|
|
107
|
+
if (statement !== null) {
|
|
108
|
+
statementValidates = true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (statementValidates) {
|
|
112
|
+
context.debug(`...validated the '${premiseString}' premise's statement. `);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return statementValidates;
|
|
116
|
+
}
|
|
117
|
+
|
|
99
118
|
validateProcedureCall(context) {
|
|
100
119
|
let procedureCallValidates = false;
|
|
101
120
|
|
|
@@ -266,42 +285,37 @@ export default define(class Premise extends ProofAssertion {
|
|
|
266
285
|
}
|
|
267
286
|
|
|
268
287
|
toJSON() {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
context = this.getContext();
|
|
272
|
-
|
|
273
|
-
const ephemeralContext = context, ///
|
|
274
|
-
ephemeralContextJSON = ephemeralContextToEphemeralContextJSON(ephemeralContext),
|
|
275
|
-
contextJSON = ephemeralContextJSON; ///
|
|
288
|
+
const context = this.getContext();
|
|
276
289
|
|
|
277
|
-
context
|
|
290
|
+
return serialise((context) => {
|
|
291
|
+
const string = this.getString(),
|
|
292
|
+
json = {
|
|
293
|
+
context,
|
|
294
|
+
string
|
|
295
|
+
};
|
|
278
296
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
context,
|
|
282
|
-
string
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
return json;
|
|
297
|
+
return json;
|
|
298
|
+
}, context);
|
|
286
299
|
}
|
|
287
300
|
|
|
288
301
|
static name = "Premise";
|
|
289
302
|
|
|
290
303
|
static fromJSON(json, context) {
|
|
291
|
-
|
|
304
|
+
let premise;
|
|
292
305
|
|
|
293
|
-
context
|
|
306
|
+
unserialise((json, context) => {
|
|
307
|
+
instantiate((context) => {
|
|
308
|
+
const { string } = json,
|
|
309
|
+
premiseNode = instantiatePremise(string, context),
|
|
310
|
+
node = premiseNode, ///
|
|
311
|
+
statement = statementFromPremiseNode(premiseNode, context),
|
|
312
|
+
procedureCall = procedureCallFromPremiseNode(premiseNode, context);
|
|
294
313
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
node = premiseNode, ///
|
|
299
|
-
statement = statementFromPremiseNode(premiseNode, context),
|
|
300
|
-
procedureCall = procedureCallFromPremiseNode(premiseNode, context),
|
|
301
|
-
premise = new Premise(context, string, node, statement, procedureCall);
|
|
314
|
+
premise = new Premise(context, string, node, statement, procedureCall);
|
|
315
|
+
}, context);
|
|
316
|
+
}, json, context);
|
|
302
317
|
|
|
303
|
-
|
|
304
|
-
}, context);
|
|
318
|
+
return premise;
|
|
305
319
|
}
|
|
306
320
|
});
|
|
307
321
|
|