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.
Files changed (69) hide show
  1. package/lib/context/ephemeral.js +41 -11
  2. package/lib/context/file/nominal.js +5 -1
  3. package/lib/context/liminal.js +39 -16
  4. package/lib/context/proof.js +35 -40
  5. package/lib/context.js +23 -3
  6. package/lib/element/assertion/contained.js +10 -14
  7. package/lib/element/assertion/defined.js +6 -8
  8. package/lib/element/assumption/metaLevel.js +181 -0
  9. package/lib/element/assumption.js +24 -44
  10. package/lib/element/frame.js +12 -18
  11. package/lib/element/hypothesis.js +1 -1
  12. package/lib/element/judgement.js +19 -15
  13. package/lib/element/metavariable.js +73 -48
  14. package/lib/element/proofAssertion/step.js +5 -7
  15. package/lib/element/reference.js +21 -19
  16. package/lib/element/substitution/frame.js +12 -16
  17. package/lib/element/substitution/reference.js +20 -1
  18. package/lib/element/substitution/statement.js +22 -2
  19. package/lib/element/topLevelMetaAssertion.js +9 -9
  20. package/lib/node/assumption/metaLevel.js +27 -0
  21. package/lib/node/assumption.js +5 -5
  22. package/lib/node/declaration/metavariable.js +4 -4
  23. package/lib/node/frame.js +5 -2
  24. package/lib/nonTerminalNodeMap.js +3 -1
  25. package/lib/preamble.js +2 -1
  26. package/lib/process/instantiate.js +8 -2
  27. package/lib/process/unify.js +22 -35
  28. package/lib/ruleNames.js +5 -1
  29. package/lib/utilities/context.js +5 -5
  30. package/lib/utilities/element.js +34 -26
  31. package/lib/utilities/json.js +23 -1
  32. package/lib/utilities/string.js +25 -14
  33. package/lib/utilities/unification.js +3 -3
  34. package/lib/utilities/validation.js +9 -14
  35. package/package.json +4 -4
  36. package/src/context/ephemeral.js +63 -12
  37. package/src/context/file/nominal.js +6 -0
  38. package/src/context/liminal.js +54 -16
  39. package/src/context/proof.js +41 -47
  40. package/src/context.js +35 -2
  41. package/src/element/assertion/contained.js +10 -14
  42. package/src/element/assertion/defined.js +6 -8
  43. package/src/element/assumption/metaLevel.js +263 -0
  44. package/src/element/assumption.js +35 -63
  45. package/src/element/frame.js +11 -17
  46. package/src/element/hypothesis.js +1 -1
  47. package/src/element/judgement.js +18 -19
  48. package/src/element/metavariable.js +98 -58
  49. package/src/element/proofAssertion/step.js +5 -7
  50. package/src/element/reference.js +30 -23
  51. package/src/element/substitution/frame.js +11 -15
  52. package/src/element/substitution/reference.js +33 -0
  53. package/src/element/substitution/statement.js +33 -1
  54. package/src/element/topLevelMetaAssertion.js +15 -15
  55. package/src/node/assumption/metaLevel.js +23 -0
  56. package/src/node/assumption.js +8 -8
  57. package/src/node/declaration/metavariable.js +4 -4
  58. package/src/node/frame.js +6 -1
  59. package/src/nonTerminalNodeMap.js +3 -0
  60. package/src/preamble.js +1 -0
  61. package/src/process/instantiate.js +4 -0
  62. package/src/process/unify.js +25 -50
  63. package/src/ruleNames.js +1 -0
  64. package/src/utilities/context.js +4 -4
  65. package/src/utilities/element.js +47 -35
  66. package/src/utilities/json.js +27 -1
  67. package/src/utilities/string.js +34 -19
  68. package/src/utilities/unification.js +3 -3
  69. package/src/utilities/validation.js +10 -16
@@ -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, assumptions, variables, judgements, assignments, equivalences, subproofOrProofAssertions) {
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.assumptions !== null) {
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
- addAssumption(assumption, metaLevel = true) {
188
- if (!metaLevel) {
189
- return;
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
- assumptionA = assumption, ///
200
- assumptionString = assumption.getString();
195
+ metaLevelAssumptionA = metaLevelAssumption, ///
196
+ metaLevelAssumptionString = metaLevelAssumption.getString();
201
197
 
202
- context.trace(`Adding the '${assumptionString}' assumption to the proof context...`);
198
+ context.trace(`Adding the '${metaLevelAssumptionString}' meta-level assumption to the proof context...`);
203
199
 
204
- const assumptionB = this.assumptions.find((assumption) => {
205
- const assumptionB = assumption, ///
206
- assumptionAEqualToAssumptionB = assumptionA.isEqualTo(assumptionB);
200
+ const metaLevelAssumptionB = this.metaLevelAssumptions.find((metaLevelAssumption) => {
201
+ const metaLevelAssumptionB = metaLevelAssumption, ///
202
+ metaLevelAssumptionAEqualToAssumptionB = metaLevelAssumptionA.isEqualTo(metaLevelAssumptionB);
207
203
 
208
- if (assumptionAEqualToAssumptionB) {
204
+ if (metaLevelAssumptionAEqualToAssumptionB) {
209
205
  return true;
210
206
  }
211
207
  }) || null;
212
208
 
213
- if (assumptionB !== null) {
214
- context.debug(`The '${assumptionString}' assumption has already been added to the proof context.`);
209
+ if (metaLevelAssumptionB !== null) {
210
+ context.debug(`The '${metaLevelAssumptionString}' metaLevelAssumption has already been added to the proof context.`);
215
211
  } else {
216
- this.assumptions.push(assumption);
212
+ this.metaLevelAssumptions.push(metaLevelAssumption);
217
213
 
218
- context.debug(`...added the '${assumptionString}' assumption to the proof context.`);
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 fromAssumptions(assumptions, context) {
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, assumptions, variables, judgements, assignments, equivalences, subproofOrProofAssertions);
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, metaLevel = false) {
533
+ addAssumption(assumption) {
513
534
  const context = this.getContext();
514
535
 
515
- context.addAssumption(assumption, metaLevel);
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 { descend, instantiate } from "../../utilities/context";
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
- descend((context) => {
147
- const frame = this.frame.validate(context);
146
+ const frame = this.frame.validate(context);
148
147
 
149
- if (frame !== null) {
150
- this.frame = frame;
148
+ if (frame !== null) {
149
+ this.frame = frame;
151
150
 
152
- frameValidates = true;
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
- descend((context) => {
176
- const statement = this.statement.validate(context);
173
+ const statement = this.statement.validate(context);
177
174
 
178
- if (statement !== null) {
179
- statementValidates = true;
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 { descend, instantiate } from "../../utilities/context";
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
- descend((context) => {
137
- const frame = this.frame.validate(context);
136
+ const frame = this.frame.validate(context);
138
137
 
139
- if (frame !== null) {
140
- this.frame = frame;
138
+ if (frame !== null) {
139
+ this.frame = frame;
141
140
 
142
- frameValidates = true;
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
+ }