occam-verify-cli 1.0.792 → 1.0.799
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 +41 -11
- package/lib/context/file/nominal.js +5 -1
- package/lib/context/liminal.js +39 -16
- package/lib/context/proof.js +35 -40
- package/lib/context.js +23 -3
- package/lib/element/assertion/contained.js +10 -14
- package/lib/element/assertion/defined.js +6 -8
- package/lib/element/assumption/metaLevel.js +181 -0
- package/lib/element/assumption.js +24 -44
- package/lib/element/frame.js +12 -18
- package/lib/element/hypothesis.js +1 -1
- package/lib/element/judgement.js +19 -15
- package/lib/element/metavariable.js +73 -48
- package/lib/element/proofAssertion/step.js +5 -7
- package/lib/element/reference.js +21 -19
- package/lib/element/substitution/frame.js +12 -16
- package/lib/element/substitution/reference.js +20 -1
- package/lib/element/substitution/statement.js +22 -2
- package/lib/element/topLevelMetaAssertion.js +9 -9
- package/lib/node/assumption/metaLevel.js +27 -0
- package/lib/node/assumption.js +5 -5
- package/lib/node/declaration/metavariable.js +4 -4
- package/lib/node/frame.js +5 -2
- package/lib/nonTerminalNodeMap.js +3 -1
- package/lib/preamble.js +2 -1
- package/lib/process/instantiate.js +8 -2
- package/lib/process/unify.js +22 -35
- package/lib/ruleNames.js +5 -1
- package/lib/utilities/context.js +5 -5
- package/lib/utilities/element.js +34 -26
- package/lib/utilities/json.js +23 -1
- package/lib/utilities/string.js +25 -14
- package/lib/utilities/unification.js +3 -3
- package/lib/utilities/validation.js +9 -14
- package/package.json +4 -4
- package/src/context/ephemeral.js +63 -12
- package/src/context/file/nominal.js +6 -0
- package/src/context/liminal.js +54 -16
- package/src/context/proof.js +41 -47
- package/src/context.js +35 -2
- package/src/element/assertion/contained.js +10 -14
- package/src/element/assertion/defined.js +6 -8
- package/src/element/assumption/metaLevel.js +263 -0
- package/src/element/assumption.js +35 -63
- package/src/element/frame.js +11 -17
- package/src/element/hypothesis.js +1 -1
- package/src/element/judgement.js +18 -19
- package/src/element/metavariable.js +98 -58
- package/src/element/proofAssertion/step.js +5 -7
- package/src/element/reference.js +30 -23
- package/src/element/substitution/frame.js +11 -15
- package/src/element/substitution/reference.js +33 -0
- package/src/element/substitution/statement.js +33 -1
- package/src/element/topLevelMetaAssertion.js +15 -15
- package/src/node/assumption/metaLevel.js +23 -0
- package/src/node/assumption.js +8 -8
- package/src/node/declaration/metavariable.js +4 -4
- package/src/node/frame.js +6 -1
- package/src/nonTerminalNodeMap.js +3 -0
- package/src/preamble.js +1 -0
- package/src/process/instantiate.js +4 -0
- package/src/process/unify.js +25 -50
- package/src/ruleNames.js +1 -0
- package/src/utilities/context.js +4 -4
- package/src/utilities/element.js +47 -35
- package/src/utilities/json.js +27 -1
- package/src/utilities/string.js +34 -19
- package/src/utilities/unification.js +3 -3
- package/src/utilities/validation.js +10 -16
package/src/context/proof.js
CHANGED
|
@@ -8,21 +8,17 @@ import elements from "../elements";
|
|
|
8
8
|
const { last, filter } = arrayUtilities;
|
|
9
9
|
|
|
10
10
|
class ProofContext extends Context {
|
|
11
|
-
constructor(context,
|
|
11
|
+
constructor(context, variables, judgements, assignments, equivalences, metaLevelAssumptions, subproofOrProofAssertions) {
|
|
12
12
|
super(context);
|
|
13
13
|
|
|
14
|
-
this.assumptions = assumptions;
|
|
15
14
|
this.variables = variables;
|
|
16
15
|
this.judgements = judgements;
|
|
17
16
|
this.assignments = assignments;
|
|
18
17
|
this.equivalences = equivalences;
|
|
18
|
+
this.metaLevelAssumptions = metaLevelAssumptions;
|
|
19
19
|
this.subproofOrProofAssertions = subproofOrProofAssertions;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
getAssumptions() {
|
|
23
|
-
return this.assumptions;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
22
|
getVariables() {
|
|
27
23
|
let variables;
|
|
28
24
|
|
|
@@ -73,6 +69,10 @@ class ProofContext extends Context {
|
|
|
73
69
|
return equivalences;
|
|
74
70
|
}
|
|
75
71
|
|
|
72
|
+
getMetaLevelAssumptions() {
|
|
73
|
+
return this.metaLevelAssumptions;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
76
|
getSubproofOrProofAssertions() {
|
|
77
77
|
let subproofOrProofAssertions;
|
|
78
78
|
|
|
@@ -119,7 +119,7 @@ class ProofContext extends Context {
|
|
|
119
119
|
isMetaLevel() {
|
|
120
120
|
let metaLevel = false;
|
|
121
121
|
|
|
122
|
-
if (this.
|
|
122
|
+
if (this.metaLevelAssumptiona !== null) {
|
|
123
123
|
metaLevel = true;
|
|
124
124
|
} else {
|
|
125
125
|
const context = this.getContext();
|
|
@@ -184,38 +184,34 @@ class ProofContext extends Context {
|
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
if (
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (this.assumptions === null) {
|
|
193
|
-
super.addAssumption(assumption, metaLevel);
|
|
187
|
+
addMetaLevelAssumption(metaLevelAssumption) {
|
|
188
|
+
if (this.metaLevelAssumptions === null) {
|
|
189
|
+
super.addMetaLevelAssumption(metaLevelAssumption);
|
|
194
190
|
|
|
195
191
|
return;
|
|
196
192
|
}
|
|
197
193
|
|
|
198
194
|
const context = this, ///
|
|
199
|
-
|
|
200
|
-
|
|
195
|
+
metaLevelAssumptionA = metaLevelAssumption, ///
|
|
196
|
+
metaLevelAssumptionString = metaLevelAssumption.getString();
|
|
201
197
|
|
|
202
|
-
context.trace(`Adding the '${
|
|
198
|
+
context.trace(`Adding the '${metaLevelAssumptionString}' meta-level assumption to the proof context...`);
|
|
203
199
|
|
|
204
|
-
const
|
|
205
|
-
const
|
|
206
|
-
|
|
200
|
+
const metaLevelAssumptionB = this.metaLevelAssumptions.find((metaLevelAssumption) => {
|
|
201
|
+
const metaLevelAssumptionB = metaLevelAssumption, ///
|
|
202
|
+
metaLevelAssumptionAEqualToAssumptionB = metaLevelAssumptionA.isEqualTo(metaLevelAssumptionB);
|
|
207
203
|
|
|
208
|
-
if (
|
|
204
|
+
if (metaLevelAssumptionAEqualToAssumptionB) {
|
|
209
205
|
return true;
|
|
210
206
|
}
|
|
211
207
|
}) || null;
|
|
212
208
|
|
|
213
|
-
if (
|
|
214
|
-
context.debug(`The '${
|
|
209
|
+
if (metaLevelAssumptionB !== null) {
|
|
210
|
+
context.debug(`The '${metaLevelAssumptionString}' metaLevelAssumption has already been added to the proof context.`);
|
|
215
211
|
} else {
|
|
216
|
-
this.
|
|
212
|
+
this.metaLevelAssumptions.push(metaLevelAssumption);
|
|
217
213
|
|
|
218
|
-
context.debug(`...added the '${
|
|
214
|
+
context.debug(`...added the '${metaLevelAssumptionString}' meta-level assumption to the proof context.`);
|
|
219
215
|
}
|
|
220
216
|
}
|
|
221
217
|
|
|
@@ -246,26 +242,6 @@ class ProofContext extends Context {
|
|
|
246
242
|
|
|
247
243
|
findEquivalenceByTerm(term) { return this.equivalences.findEquivalenceByTerm(term); }
|
|
248
244
|
|
|
249
|
-
findAssumptionByAssumptionNode(assumptionNode, metaLevel = true) {
|
|
250
|
-
let assumption = null;
|
|
251
|
-
|
|
252
|
-
if (metaLevel) {
|
|
253
|
-
if (this.assumptions === null) {
|
|
254
|
-
assumption = super.findAssumptionByAssumptionNode(assumptionNode, metaLevel);
|
|
255
|
-
} else {
|
|
256
|
-
assumption = this.assumptions.find((assumption) => {
|
|
257
|
-
const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
|
|
258
|
-
|
|
259
|
-
if (assumptionNodeMatches) {
|
|
260
|
-
return true;
|
|
261
|
-
}
|
|
262
|
-
}) || null;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
return assumption;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
245
|
findJudgementByMetavariableName(metavariableName) {
|
|
270
246
|
const judgements = this.getJudgements(),
|
|
271
247
|
judgement = judgements.find((judgement) => {
|
|
@@ -306,6 +282,24 @@ class ProofContext extends Context {
|
|
|
306
282
|
return judgements;
|
|
307
283
|
}
|
|
308
284
|
|
|
285
|
+
findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode) {
|
|
286
|
+
let metaLevelAssumption;
|
|
287
|
+
|
|
288
|
+
if (this.metaLevelAssumptions === null) {
|
|
289
|
+
metaLevelAssumption = super.findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode);
|
|
290
|
+
} else {
|
|
291
|
+
metaLevelAssumption = this.metaLevelAssumptions.find((metaLevelAssumption) => {
|
|
292
|
+
const metaLevelAssumptionNodeMatches = metaLevelAssumption.matchMetaLevelAssumptionNode(metaLevelAssumptionNode);
|
|
293
|
+
|
|
294
|
+
if (metaLevelAssumptionNodeMatches) {
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
}) || null;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return metaLevelAssumption;
|
|
301
|
+
}
|
|
302
|
+
|
|
309
303
|
isJudgementPresentByMetavariableName(metavariableName) {
|
|
310
304
|
const judgement = this.findJudgementByMetavariableName(metavariableName),
|
|
311
305
|
judgementPresent = (judgement !== null);
|
|
@@ -341,14 +335,14 @@ class ProofContext extends Context {
|
|
|
341
335
|
return termGrounded;
|
|
342
336
|
}
|
|
343
337
|
|
|
344
|
-
static
|
|
338
|
+
static fromMetaLevelAssumptions(metaLevelAssumptions, context) {
|
|
345
339
|
const { Equivalences } = elements,
|
|
346
340
|
variables = [],
|
|
347
341
|
judgements = [],
|
|
348
342
|
assignments = [],
|
|
349
343
|
equivalences = Equivalences.fromNothing(context),
|
|
350
344
|
subproofOrProofAssertions = [],
|
|
351
|
-
proofContext = new ProofContext(context,
|
|
345
|
+
proofContext = new ProofContext(context, variables, judgements, assignments, equivalences, metaLevelAssumptions, subproofOrProofAssertions);
|
|
352
346
|
|
|
353
347
|
return proofContext;
|
|
354
348
|
}
|
package/src/context.js
CHANGED
|
@@ -246,6 +246,13 @@ export default class Context extends ContextBase {
|
|
|
246
246
|
return judgement;
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
+
findMetavariableByMetavariableNode(metavariableNode) {
|
|
250
|
+
const context = this.getContext(),
|
|
251
|
+
metavariable = context.findMetavariableByMetavariableNode(metavariableNode);
|
|
252
|
+
|
|
253
|
+
return metavariable;
|
|
254
|
+
}
|
|
255
|
+
|
|
249
256
|
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
250
257
|
const context = this.getContext(),
|
|
251
258
|
substitution = context.findSubstitutionBySubstitutionNode(substitutionNode);
|
|
@@ -253,6 +260,13 @@ export default class Context extends ContextBase {
|
|
|
253
260
|
return substitution;
|
|
254
261
|
}
|
|
255
262
|
|
|
263
|
+
findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode) {
|
|
264
|
+
const context = this.getContext(),
|
|
265
|
+
metaLevelAssumption = context.findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode);
|
|
266
|
+
|
|
267
|
+
return metaLevelAssumption;
|
|
268
|
+
}
|
|
269
|
+
|
|
256
270
|
findTypeByNominalTypeName(nominalTypeName) {
|
|
257
271
|
const context = this.getContext(),
|
|
258
272
|
type = context.findTypeByNominalTypeName(nominalTypeName);
|
|
@@ -419,6 +433,13 @@ export default class Context extends ContextBase {
|
|
|
419
433
|
return metavariablePresent;
|
|
420
434
|
}
|
|
421
435
|
|
|
436
|
+
isMetavariablePresentByMetavariableNode(metavariableNode) {
|
|
437
|
+
const context = this.getContext(),
|
|
438
|
+
metavariablePresent = context.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
439
|
+
|
|
440
|
+
return metavariablePresent;
|
|
441
|
+
}
|
|
442
|
+
|
|
422
443
|
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
423
444
|
const context = this.getContext(),
|
|
424
445
|
substitutionPresent = context.isSubstitutionPresentBySubstitutionNode(substitutionNode);
|
|
@@ -509,10 +530,10 @@ export default class Context extends ContextBase {
|
|
|
509
530
|
context.addReference(reference);
|
|
510
531
|
}
|
|
511
532
|
|
|
512
|
-
addAssumption(assumption
|
|
533
|
+
addAssumption(assumption) {
|
|
513
534
|
const context = this.getContext();
|
|
514
535
|
|
|
515
|
-
context.addAssumption(assumption
|
|
536
|
+
context.addAssumption(assumption);
|
|
516
537
|
}
|
|
517
538
|
|
|
518
539
|
addAssignment(assignment) {
|
|
@@ -521,12 +542,24 @@ export default class Context extends ContextBase {
|
|
|
521
542
|
context.addAssignment(assignment);
|
|
522
543
|
}
|
|
523
544
|
|
|
545
|
+
addMetavariable(metavariable) {
|
|
546
|
+
const context = this.getContext();
|
|
547
|
+
|
|
548
|
+
context.addMetavariable(metavariable);
|
|
549
|
+
}
|
|
550
|
+
|
|
524
551
|
addSubstitution(substitution) {
|
|
525
552
|
const context = this.getContext();
|
|
526
553
|
|
|
527
554
|
context.addSubstitution(substitution);
|
|
528
555
|
}
|
|
529
556
|
|
|
557
|
+
addMetaLevelAssumption(metaLevelAssumption) {
|
|
558
|
+
const context = this.getContext();
|
|
559
|
+
|
|
560
|
+
context.addMetaLevelAssumption(metaLevelAssumption);
|
|
561
|
+
}
|
|
562
|
+
|
|
530
563
|
addSubproofOrProofAssertion(subproofOrProofAssertion) {
|
|
531
564
|
const context = this.getContext();
|
|
532
565
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiateContainedAssertion } from "../../process/instantiate";
|
|
8
8
|
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions, statementFromStatementAndSubstitutions } from "../../utilities/substitutions";
|
|
9
9
|
import { termFromContainedAssertionNode,
|
|
@@ -143,15 +143,13 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
143
143
|
const frameSingular = this.frame.isSingular();
|
|
144
144
|
|
|
145
145
|
if (frameSingular) {
|
|
146
|
-
|
|
147
|
-
const frame = this.frame.validate(context);
|
|
146
|
+
const frame = this.frame.validate(context);
|
|
148
147
|
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
if (frame !== null) {
|
|
149
|
+
this.frame = frame;
|
|
151
150
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}, context);
|
|
151
|
+
frameValidates = true;
|
|
152
|
+
}
|
|
155
153
|
} else {
|
|
156
154
|
context.debug(`The '${frameString}' frame is not singular.`);
|
|
157
155
|
}
|
|
@@ -172,13 +170,11 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
172
170
|
|
|
173
171
|
context.trace(`Validating the '${statementString}' statement...`);
|
|
174
172
|
|
|
175
|
-
|
|
176
|
-
const statement = this.statement.validate(context);
|
|
173
|
+
const statement = this.statement.validate(context);
|
|
177
174
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}, context);
|
|
175
|
+
if (statement !== null) {
|
|
176
|
+
statementValidates = true;
|
|
177
|
+
}
|
|
182
178
|
|
|
183
179
|
if (statementValidates) {
|
|
184
180
|
context.debug(`...validated the '${statementString}' statement.`);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiateDefinedAssertion } from "../../process/instantiate";
|
|
8
8
|
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions } from "../../utilities/substitutions";
|
|
9
9
|
import { termFromJDefinedAssertionNode, frameFromJDefinedAssertionNode, negatedFromJDefinedAssertionNode, definedAssertionFromStatementNode } from "../../utilities/element";
|
|
@@ -133,15 +133,13 @@ export default define(class DefinedAssertion extends Assertion {
|
|
|
133
133
|
const frameSingular = this.frame.isSingular();
|
|
134
134
|
|
|
135
135
|
if (frameSingular) {
|
|
136
|
-
|
|
137
|
-
const frame = this.frame.validate(context);
|
|
136
|
+
const frame = this.frame.validate(context);
|
|
138
137
|
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
if (frame !== null) {
|
|
139
|
+
this.frame = frame;
|
|
141
140
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}, context);
|
|
141
|
+
frameValidates = true;
|
|
142
|
+
}
|
|
145
143
|
} else {
|
|
146
144
|
context.debug(`The '${frameString}' frame is not singular.`);
|
|
147
145
|
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Element } from "occam-languages";
|
|
4
|
+
|
|
5
|
+
import { define } from "../../elements";
|
|
6
|
+
import { instantiateMetaLevelAssumption } from "../../process/instantiate";
|
|
7
|
+
import { metaLevelAssumptionFromMetaLevelAssumptionNode } from "../../utilities/element";
|
|
8
|
+
import { metaLevelAssumptionStringFromStatementAndReference } from "../../utilities/string";
|
|
9
|
+
import { attempt, descend, serialise, unserialise, instantiate } from "../../utilities/context";
|
|
10
|
+
|
|
11
|
+
export default define(class MetaLevelAssumption extends Element {
|
|
12
|
+
constructor(context, string, node, reference, statement) {
|
|
13
|
+
super(context, string, node);
|
|
14
|
+
|
|
15
|
+
this.reference = reference;
|
|
16
|
+
this.statement = statement;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
getReference() {
|
|
20
|
+
return this.reference;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
getStatement() {
|
|
24
|
+
return this.statement;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
getMetaLevelAssumptionNode() {
|
|
28
|
+
const node = this.getNode(),
|
|
29
|
+
metaLevelAssumptionNode = node; ///
|
|
30
|
+
|
|
31
|
+
return metaLevelAssumptionNode;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
getMetavariable() { return this.reference.getMetavariable(); }
|
|
35
|
+
|
|
36
|
+
getTopLevelMetaAssertion() { return this.reference.getTopLevelMetaAssertion(); }
|
|
37
|
+
|
|
38
|
+
isEqualTo(metaLevelAssumption) {
|
|
39
|
+
const metaLevelAssumptionNode = metaLevelAssumption.getNode(),
|
|
40
|
+
metaLevelAssumptionNodeMatches = this.matchMetaLevelAssumptionNode(metaLevelAssumptionNode),
|
|
41
|
+
equalTo = metaLevelAssumptionNodeMatches; ///
|
|
42
|
+
|
|
43
|
+
return equalTo;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
matchMetaLevelAssumptionNode(metaLevelAssumptionNode) {
|
|
47
|
+
const node = metaLevelAssumptionNode, ///
|
|
48
|
+
nodeMatches = this.matchNode(node),
|
|
49
|
+
metaLevelAssumptionNodeMatches = nodeMatches; ///
|
|
50
|
+
|
|
51
|
+
return metaLevelAssumptionNodeMatches;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
findValidMetaLevelAssumption(context) {
|
|
55
|
+
const metaLevelAssumptionNode = this.getMetaLevelAssumptionNode(),
|
|
56
|
+
metaLevelAssumption = context.findMetaLevelAssumptionByMetaLevelAssumptionNode(metaLevelAssumptionNode),
|
|
57
|
+
validMetaLevelAssumption = metaLevelAssumption; ///
|
|
58
|
+
|
|
59
|
+
return validMetaLevelAssumption;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
validate(context) {
|
|
63
|
+
let metaLevelAssumption = null;
|
|
64
|
+
|
|
65
|
+
const metaLevelAssumptionString = this.getString(); ///
|
|
66
|
+
|
|
67
|
+
context.trace(`Validating the '${metaLevelAssumptionString}' meta-lLevel assumption...`);
|
|
68
|
+
|
|
69
|
+
let validates = false;
|
|
70
|
+
|
|
71
|
+
const validMetaLevelAssumption = this.findValidMetaLevelAssumption(context);
|
|
72
|
+
|
|
73
|
+
if (validMetaLevelAssumption) {
|
|
74
|
+
metaLevelAssumption = validMetaLevelAssumption; ///
|
|
75
|
+
|
|
76
|
+
context.debug(`...the '${metaLevelAssumptionString}' meta-level assumption is already valid.`);
|
|
77
|
+
} else {
|
|
78
|
+
const context = this.getContext();
|
|
79
|
+
|
|
80
|
+
attempt((context) => {
|
|
81
|
+
const statementValidates = this.validateStatement(context);
|
|
82
|
+
|
|
83
|
+
if (statementValidates) {
|
|
84
|
+
const referenceValidates = this.validateReference(context);
|
|
85
|
+
|
|
86
|
+
if (referenceValidates) {
|
|
87
|
+
const stated = context.isStated();
|
|
88
|
+
|
|
89
|
+
let validatesWhenStated = false,
|
|
90
|
+
validatesWhenDerived = false;
|
|
91
|
+
|
|
92
|
+
if (stated) {
|
|
93
|
+
validatesWhenStated = this.validateWhenStated(context);
|
|
94
|
+
} else {
|
|
95
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
99
|
+
validates = true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (validates) {
|
|
105
|
+
context.commit(this);
|
|
106
|
+
}
|
|
107
|
+
}, context);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (validates) {
|
|
111
|
+
metaLevelAssumption = this; ///
|
|
112
|
+
|
|
113
|
+
context.addMetaLevelAssumption(metaLevelAssumption);
|
|
114
|
+
|
|
115
|
+
context.debug(`...validated the '${metaLevelAssumptionString}' meta-level assumption.`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return metaLevelAssumption;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
validateReference(context) {
|
|
122
|
+
let referenceValidates = false;
|
|
123
|
+
|
|
124
|
+
const referenceString = this.reference.getString(),
|
|
125
|
+
metaLevelAssumptionString = this.getString(); ///
|
|
126
|
+
|
|
127
|
+
context.trace(`Validating the '${metaLevelAssumptionString}' metaLevelAssumption's '${referenceString}' reference...`);
|
|
128
|
+
|
|
129
|
+
const reference = this.reference.validate(context);
|
|
130
|
+
|
|
131
|
+
if (reference !== null) {
|
|
132
|
+
const metavariable = this.reference.getMetavariable(),
|
|
133
|
+
metavariablePresent = context.isMetavariablePresent(metavariable, context);
|
|
134
|
+
|
|
135
|
+
if (metavariablePresent) {
|
|
136
|
+
referenceValidates = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (referenceValidates) {
|
|
141
|
+
context.debug(`...validated the '${metaLevelAssumptionString}' metaLevelAssumption's '${referenceString}' reference.`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return referenceValidates;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
validateStatement(context) {
|
|
148
|
+
let statementValidates = false;
|
|
149
|
+
|
|
150
|
+
const metaLevelAssumptionString = this.getString(), ///
|
|
151
|
+
statementString = this.statement.getString();
|
|
152
|
+
|
|
153
|
+
context.trace(`Validating the '${metaLevelAssumptionString}' metaLevelAssumption's '${statementString}' statement...`);
|
|
154
|
+
|
|
155
|
+
descend((context) => {
|
|
156
|
+
const statement = this.statement.validate(context);
|
|
157
|
+
|
|
158
|
+
if (statement !== null) {
|
|
159
|
+
statementValidates = true;
|
|
160
|
+
}
|
|
161
|
+
}, context);
|
|
162
|
+
|
|
163
|
+
if (statementValidates) {
|
|
164
|
+
context.debug(`...validated the '${metaLevelAssumptionString}' metaLevelAssumption's '${statementString}' statement.`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return statementValidates;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
validateWhenStated(context) {
|
|
171
|
+
let validatesWhenStated;
|
|
172
|
+
|
|
173
|
+
const metaLevelAssumptionString = this.getString(); ///
|
|
174
|
+
|
|
175
|
+
context.trace(`Validating the '${metaLevelAssumptionString}' stated meta-level assumption...`);
|
|
176
|
+
|
|
177
|
+
validatesWhenStated = true
|
|
178
|
+
|
|
179
|
+
if (validatesWhenStated) {
|
|
180
|
+
context.debug(`...validated the '${metaLevelAssumptionString}' stated meta-level assumption.`);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return validatesWhenStated;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
validateWhenDerived(context) {
|
|
187
|
+
let validatesWhenDerived;
|
|
188
|
+
|
|
189
|
+
const metaLevelAssumptionString = this.getString(); ///
|
|
190
|
+
|
|
191
|
+
context.trace(`Validating the '${metaLevelAssumptionString}' derived meta-level assumption...`);
|
|
192
|
+
|
|
193
|
+
validatesWhenDerived = true;
|
|
194
|
+
|
|
195
|
+
if (validatesWhenDerived) {
|
|
196
|
+
context.debug(`...validated the '${metaLevelAssumptionString}' derived meta-level assumption.`);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return validatesWhenDerived;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
toJSON() {
|
|
203
|
+
const context = this.getContext();
|
|
204
|
+
|
|
205
|
+
return serialise((context) => {
|
|
206
|
+
const string = this.getString(),
|
|
207
|
+
json = {
|
|
208
|
+
context,
|
|
209
|
+
string
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
return json;
|
|
213
|
+
}, context);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
static name = "MetaLevelAssumption";
|
|
217
|
+
|
|
218
|
+
static fromJSON(json, context) {
|
|
219
|
+
let metaLevelAssumption;
|
|
220
|
+
|
|
221
|
+
unserialise((json, context) => {
|
|
222
|
+
instantiate((context) => {
|
|
223
|
+
const { string } = json,
|
|
224
|
+
metaLevelAssumptionNode = instantiateMetaLevelAssumption(string, context),
|
|
225
|
+
node = metaLevelAssumptionNode, ///
|
|
226
|
+
reference = referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context),
|
|
227
|
+
statement = statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context);
|
|
228
|
+
|
|
229
|
+
metaLevelAssumption = new MetaLevelAssumption(context, string, node, reference, statement);
|
|
230
|
+
}, context);
|
|
231
|
+
}, json, context);
|
|
232
|
+
|
|
233
|
+
return metaLevelAssumption;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
static fromStatementAndReference(statement, reference, context) {
|
|
237
|
+
let metaLevelAssumption;
|
|
238
|
+
|
|
239
|
+
instantiate((context) => {
|
|
240
|
+
const metaLevelAssumptionString = metaLevelAssumptionStringFromStatementAndReference(statement, reference),
|
|
241
|
+
string = metaLevelAssumptionString, ///
|
|
242
|
+
metaLevelAssumptionNode = instantiateMetaLevelAssumption(string, context);
|
|
243
|
+
|
|
244
|
+
metaLevelAssumption = metaLevelAssumptionFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context);
|
|
245
|
+
}, context);
|
|
246
|
+
|
|
247
|
+
return metaLevelAssumption;
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
function referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
|
|
252
|
+
const referenceNode = metaLevelAssumptionNode.getReferenceNode(),
|
|
253
|
+
refernece = context.findReferenceByReferenceNode(referenceNode);
|
|
254
|
+
|
|
255
|
+
return refernece;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
|
|
259
|
+
const statementNode = metaLevelAssumptionNode.getStatementNode(),
|
|
260
|
+
statement = context.findStatementByStatementNode(statementNode);
|
|
261
|
+
|
|
262
|
+
return statement;
|
|
263
|
+
}
|