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.
Files changed (108) hide show
  1. package/lib/context/file/nominal.js +11 -11
  2. package/lib/context/illative.js +28 -0
  3. package/lib/context/nested.js +31 -0
  4. package/lib/context/proof.js +242 -0
  5. package/lib/context/thetic.js +28 -0
  6. package/lib/context.js +19 -21
  7. package/lib/element/assertion/contained.js +32 -24
  8. package/lib/element/assertion/defined.js +47 -40
  9. package/lib/element/assertion/property.js +18 -13
  10. package/lib/element/assertion/satisfies.js +12 -9
  11. package/lib/element/assertion/subproof.js +28 -26
  12. package/lib/element/assertion/type.js +14 -12
  13. package/lib/element/assumption.js +40 -50
  14. package/lib/element/combinator/bracketed.js +3 -3
  15. package/lib/element/combinator.js +20 -20
  16. package/lib/element/conclusion.js +33 -29
  17. package/lib/element/constructor.js +19 -18
  18. package/lib/element/deduction.js +33 -29
  19. package/lib/element/equality.js +13 -15
  20. package/lib/element/equivalence.js +59 -52
  21. package/lib/element/equivalences.js +4 -2
  22. package/lib/element/frame.js +74 -53
  23. package/lib/element/hypothesis.js +7 -5
  24. package/lib/element/judgement.js +41 -74
  25. package/lib/element/label.js +22 -22
  26. package/lib/element/metavariable.js +31 -11
  27. package/lib/element/proofAssertion/premise.js +48 -35
  28. package/lib/element/proofAssertion/step.js +77 -22
  29. package/lib/element/proofAssertion/supposition.js +48 -34
  30. package/lib/element/proofAssertion.js +1 -14
  31. package/lib/element/reference.js +80 -53
  32. package/lib/element/signature.js +44 -3
  33. package/lib/element/statement.js +28 -29
  34. package/lib/element/subproof.js +2 -2
  35. package/lib/element/substitution/frame.js +24 -19
  36. package/lib/element/substitution/metaLevel.js +31 -27
  37. package/lib/element/substitution/reference.js +11 -10
  38. package/lib/element/substitution/statement.js +30 -23
  39. package/lib/element/substitution/term.js +11 -10
  40. package/lib/element/term.js +24 -20
  41. package/lib/element/topLevelMetaAssertion.js +2 -2
  42. package/lib/element/variable.js +6 -2
  43. package/lib/process/assign.js +10 -4
  44. package/lib/process/unify.js +8 -8
  45. package/lib/process/validate.js +10 -8
  46. package/lib/utilities/context.js +68 -23
  47. package/lib/utilities/element.js +55 -27
  48. package/lib/utilities/json.js +8 -8
  49. package/lib/utilities/string.js +12 -1
  50. package/lib/utilities/unification.js +14 -12
  51. package/lib/utilities/validation.js +55 -40
  52. package/package.json +4 -4
  53. package/src/context/file/nominal.js +14 -16
  54. package/src/context/illative.js +17 -0
  55. package/src/context/nested.js +21 -0
  56. package/src/context/{scoped.js → proof.js} +65 -51
  57. package/src/context/thetic.js +17 -0
  58. package/src/context.js +30 -36
  59. package/src/element/assertion/contained.js +44 -31
  60. package/src/element/assertion/defined.js +55 -46
  61. package/src/element/assertion/property.js +23 -15
  62. package/src/element/assertion/satisfies.js +15 -10
  63. package/src/element/assertion/subproof.js +34 -31
  64. package/src/element/assertion/type.js +18 -13
  65. package/src/element/assumption.js +40 -69
  66. package/src/element/combinator/bracketed.js +2 -2
  67. package/src/element/combinator.js +23 -29
  68. package/src/element/conclusion.js +37 -40
  69. package/src/element/constructor.js +29 -34
  70. package/src/element/deduction.js +36 -39
  71. package/src/element/equality.js +16 -18
  72. package/src/element/equivalence.js +76 -67
  73. package/src/element/equivalences.js +5 -2
  74. package/src/element/frame.js +96 -65
  75. package/src/element/hypothesis.js +7 -6
  76. package/src/element/judgement.js +45 -45
  77. package/src/element/label.js +25 -31
  78. package/src/element/metavariable.js +48 -21
  79. package/src/element/proofAssertion/premise.js +63 -49
  80. package/src/element/proofAssertion/step.js +47 -26
  81. package/src/element/proofAssertion/supposition.js +64 -50
  82. package/src/element/proofAssertion.js +0 -22
  83. package/src/element/reference.js +119 -80
  84. package/src/element/signature.js +5 -2
  85. package/src/element/statement.js +30 -35
  86. package/src/element/subproof.js +1 -1
  87. package/src/element/substitution/frame.js +27 -26
  88. package/src/element/substitution/metaLevel.js +38 -42
  89. package/src/element/substitution/reference.js +13 -14
  90. package/src/element/substitution/statement.js +35 -33
  91. package/src/element/substitution/term.js +13 -14
  92. package/src/element/term.js +42 -34
  93. package/src/element/topLevelMetaAssertion.js +1 -1
  94. package/src/element/variable.js +8 -1
  95. package/src/process/assign.js +9 -3
  96. package/src/process/unify.js +7 -7
  97. package/src/process/validate.js +9 -8
  98. package/src/utilities/context.js +82 -31
  99. package/src/utilities/element.js +68 -31
  100. package/src/utilities/json.js +13 -13
  101. package/src/utilities/string.js +16 -2
  102. package/src/utilities/unification.js +18 -16
  103. package/src/utilities/validation.js +73 -53
  104. package/lib/context/scoped.js +0 -232
  105. package/lib/utilities/statement.js +0 -78
  106. package/lib/utilities/term.js +0 -17
  107. package/src/utilities/statement.js +0 -74
  108. package/src/utilities/term.js +0 -10
@@ -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
- getDeclaration() {
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(stated, context) {
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
- }, context);
81
-
82
- const frameValidates = this.validateFrame(stated, context);
82
+ if (frameValidates) {
83
+ const assumptionValidates = this.validateAssumption(context);
83
84
 
84
- if (frameValidates) {
85
- const assumptionValidates = this.validateAssumption(stated, context);
85
+ if (assumptionValidates) {
86
+ const stated = context.isStated();
86
87
 
87
- if (assumptionValidates) {
88
- let validatesWhenStated = false,
89
- validatesWhenDerived = false;
88
+ let validatesWhenStated = false,
89
+ validatesWhenDerived = false;
90
90
 
91
- if (stated) {
92
- validatesWhenStated = this.validateWhenStated(context);
93
- } else {
94
- validatesWhenDerived = this.validateWhenDerived(context);
95
- }
91
+ if (stated) {
92
+ validatesWhenStated = this.validateWhenStated(context);
93
+ } else {
94
+ validatesWhenDerived = this.validateWhenDerived(context);
95
+ }
96
96
 
97
- if (validatesWhenStated || validatesWhenDerived) {
98
- validates = true;
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
- context.addJudgement(judgement)
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(stated, context) {
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(stated, context);
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(stated, context) {
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(stated, context);
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 metavariable = this.assumption.getMetavariable(),
185
- reference = referenceFromMetavariable(metavariable, context),
186
- topLevelMetaAssertion = context.findTopLevelMetaAssertionByReference(reference, context),
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(stated, context) {
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(assignment);
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
-
@@ -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 { ephemeralContextFromJSON, ephemeralContextToEphemeralContextJSON } from "../utilities/json";
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
- let context;
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 = contextJSON; ///
131
+ return serialise((context) => {
132
+ const string = this.getString(),
133
+ json = {
134
+ context,
135
+ string
136
+ };
139
137
 
140
- const string = this.getString(),
141
- json = {
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
- const ephemeralContext = ephemeralContextFromJSON(json, context);
145
+ let label;
153
146
 
154
- context = ephemeralContext; ///
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
- return instantiate((context) => {
157
- const { string } = json,
158
- labelNode = instantiateLabel(string, context),
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
- return label;
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
- generalMetavariable = this, ///
490
- specificMetavariable = frameMetavariable, ///
491
- metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
489
+ frameMetavariableUnifiesIntrinsically = this.unifyMetavariableIntrinsically(frameMetavariable, generalContext, specificContext);
492
490
 
493
- frameMetavariableUnifies = metavariableUnifiesIntrinsically; ///
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
- generalMetavariable = this, ///
526
- specificMetavariable = referenceMetavariable, ///
527
- metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
525
+ referenceMetavariableUnifiesIntrinsically = this.unifyMetavariableIntrinsically(referenceMetavariable, generalContext, specificContext);
528
526
 
529
- referenceMetavariableUnifies = metavariableUnifiesIntrinsically; ///
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
- generalMetavariable = this, ///
565
- specificMetavariable = statementMetavariable, ///
566
- metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
564
+ statementMetavariableUnifiesIntrinsically = this.unifyMetavariableIntrinsically(statementMetavariable, generalContext, specificContext);
567
565
 
568
- statementMetavariableUnifies = metavariableUnifiesIntrinsically; ///
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
- attempt((context) => {
68
- const statement = this.getStatement(),
69
- procedureCall = this.getProcedureCall();
60
+ declare((context) => {
61
+ attempt((context) => {
62
+ const statement = this.getStatement(),
63
+ procedureCall = this.getProcedureCall();
70
64
 
71
- if (statement !== null) {
72
- const statementValidates = this.validateStatement(context);
65
+ if (statement !== null) {
66
+ const statementValidates = this.validateStatement(context);
73
67
 
74
- if (statementValidates) {
75
- context.commit(this);
68
+ if (statementValidates) {
69
+ context.commit(this);
76
70
 
77
- validates = true;
71
+ validates = true;
72
+ }
78
73
  }
79
- }
80
74
 
81
- if (procedureCall !== null) {
82
- const procedureCallValidates = this.validateProcedureCall(context);
75
+ if (procedureCall !== null) {
76
+ const procedureCallValidates = this.validateProcedureCall(context);
83
77
 
84
- if (procedureCallValidates) {
85
- context.commit(this);
78
+ if (procedureCallValidates) {
79
+ context.commit(this);
86
80
 
87
- validates = true;
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
- let context;
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 = contextJSON; ///
290
+ return serialise((context) => {
291
+ const string = this.getString(),
292
+ json = {
293
+ context,
294
+ string
295
+ };
278
296
 
279
- const string = this.getString(),
280
- json = {
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
- const ephemeralContext = ephemeralContextFromJSON(json, context);
304
+ let premise;
292
305
 
293
- context = ephemeralContext; ///
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
- return instantiate((context) => {
296
- const { string } = json,
297
- premiseNode = instantiatePremise(string, context),
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
- return premise;
304
- }, context);
318
+ return premise;
305
319
  }
306
320
  });
307
321