occam-verify-cli 1.0.444 → 1.0.457

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 (173) hide show
  1. package/lib/constants.js +1 -5
  2. package/lib/context/file.js +54 -82
  3. package/lib/context/fragment.js +77 -0
  4. package/lib/context/release.js +5 -9
  5. package/lib/context/scoped.js +314 -0
  6. package/lib/context/transient.js +371 -0
  7. package/lib/element/assumption.js +71 -84
  8. package/lib/element/combinator/bracketed.js +1 -10
  9. package/lib/element/conclusion.js +11 -8
  10. package/lib/element/constructor/bracketed.js +1 -10
  11. package/lib/element/declaration/combinator.js +1 -2
  12. package/lib/element/declaration/metavariable.js +3 -3
  13. package/lib/element/declaration/variable.js +3 -3
  14. package/lib/element/deduction.js +18 -13
  15. package/lib/element/derivation.js +14 -14
  16. package/lib/element/frame.js +40 -46
  17. package/lib/element/hypothesis.js +14 -55
  18. package/lib/element/judgement.js +35 -56
  19. package/lib/element/metaType.js +5 -4
  20. package/lib/element/metavariable.js +14 -10
  21. package/lib/element/proof.js +10 -10
  22. package/lib/element/proofAssertion/premise.js +308 -0
  23. package/lib/element/proofAssertion/step.js +305 -0
  24. package/lib/element/proofAssertion/supposition.js +322 -0
  25. package/lib/element/proofAssertion.js +199 -0
  26. package/lib/element/reference.js +28 -25
  27. package/lib/element/rule.js +29 -29
  28. package/lib/element/section.js +4 -4
  29. package/lib/element/statement.js +9 -14
  30. package/lib/element/subDerivation.js +14 -14
  31. package/lib/element/subproof.js +14 -14
  32. package/lib/element/substitution/frame.js +7 -7
  33. package/lib/element/substitution/statement.js +15 -39
  34. package/lib/element/substitution.js +5 -5
  35. package/lib/element/term.js +12 -10
  36. package/lib/element/topLevelAssertion/axiom.js +329 -0
  37. package/lib/element/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
  38. package/lib/element/{lemma.js → topLevelAssertion/lemma.js} +6 -6
  39. package/lib/element/{theorem.js → topLevelAssertion/theorem.js} +7 -7
  40. package/lib/element/topLevelAssertion.js +427 -0
  41. package/lib/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
  42. package/lib/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
  43. package/lib/element/topLevelMetaAssertion.js +289 -0
  44. package/lib/element/type.js +4 -4
  45. package/lib/element/variable.js +20 -20
  46. package/lib/metaTypes.js +33 -19
  47. package/lib/node/proofAssertion/premise.js +116 -0
  48. package/lib/node/proofAssertion/step.js +152 -0
  49. package/lib/node/proofAssertion/supposition.js +116 -0
  50. package/lib/node/{premise.js → proofAssertion.js} +11 -18
  51. package/lib/node/statement.js +2 -2
  52. package/lib/node/subDerivation.js +1 -8
  53. package/lib/node/subproof.js +1 -8
  54. package/lib/node/substitution/statement.js +2 -2
  55. package/lib/node/{axiom.js → topLevelAssertion/axiom.js} +7 -7
  56. package/lib/node/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
  57. package/lib/node/{lemma.js → topLevelAssertion/lemma.js} +7 -7
  58. package/lib/node/{theorem.js → topLevelAssertion/theorem.js} +7 -7
  59. package/lib/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +9 -9
  60. package/lib/node/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
  61. package/lib/node/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
  62. package/lib/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +9 -9
  63. package/lib/nonTerminalNodeMap.js +13 -13
  64. package/lib/preamble.js +10 -10
  65. package/lib/process/instantiate.js +6 -9
  66. package/lib/process/unify.js +7 -6
  67. package/lib/types.js +3 -3
  68. package/lib/utilities/bnf.js +5 -5
  69. package/lib/utilities/brackets.js +6 -11
  70. package/lib/utilities/context.js +28 -0
  71. package/lib/utilities/element.js +101 -99
  72. package/lib/utilities/fragment.js +23 -0
  73. package/lib/utilities/instance.js +12 -21
  74. package/lib/utilities/json.js +3 -2
  75. package/lib/utilities/string.js +44 -23
  76. package/lib/utilities/unification.js +36 -36
  77. package/lib/utilities/validation.js +22 -25
  78. package/package.json +6 -6
  79. package/src/constants.js +0 -1
  80. package/src/context/file.js +51 -58
  81. package/src/context/fragment.js +38 -0
  82. package/src/context/release.js +6 -11
  83. package/src/context/{local.js → scoped.js} +35 -127
  84. package/src/context/{temporary.js → transient.js} +9 -131
  85. package/src/element/assumption.js +69 -85
  86. package/src/element/combinator/bracketed.js +0 -7
  87. package/src/element/conclusion.js +14 -10
  88. package/src/element/constructor/bracketed.js +0 -7
  89. package/src/element/declaration/combinator.js +0 -1
  90. package/src/element/declaration/metavariable.js +2 -2
  91. package/src/element/declaration/variable.js +5 -5
  92. package/src/element/deduction.js +22 -15
  93. package/src/element/derivation.js +12 -12
  94. package/src/element/frame.js +36 -48
  95. package/src/element/hypothesis.js +14 -16
  96. package/src/element/judgement.js +33 -58
  97. package/src/element/metaType.js +4 -4
  98. package/src/element/metavariable.js +17 -10
  99. package/src/element/proof.js +9 -9
  100. package/src/element/{premise.js → proofAssertion/premise.js} +107 -75
  101. package/src/element/{step.js → proofAssertion/step.js} +43 -89
  102. package/src/element/{supposition.js → proofAssertion/supposition.js} +89 -88
  103. package/src/element/proofAssertion.js +69 -0
  104. package/src/element/reference.js +27 -23
  105. package/src/element/rule.js +25 -25
  106. package/src/element/section.js +4 -4
  107. package/src/element/statement.js +8 -15
  108. package/src/element/subDerivation.js +12 -12
  109. package/src/element/subproof.js +10 -10
  110. package/src/element/substitution/frame.js +10 -13
  111. package/src/element/substitution/statement.js +20 -52
  112. package/src/element/substitution.js +3 -3
  113. package/src/element/term.js +10 -9
  114. package/src/element/{axiom.js → topLevelAssertion/axiom.js} +41 -41
  115. package/src/element/{conjecture.js → topLevelAssertion/conjecture.js} +4 -4
  116. package/src/element/{lemma.js → topLevelAssertion/lemma.js} +3 -3
  117. package/src/element/{theorem.js → topLevelAssertion/theorem.js} +4 -4
  118. package/src/element/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +30 -49
  119. package/src/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +4 -4
  120. package/src/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +4 -4
  121. package/src/element/{metaLemmaMetatheorem.js → topLevelMetaAssertion.js} +7 -72
  122. package/src/element/type.js +2 -4
  123. package/src/element/variable.js +17 -17
  124. package/src/metaTypes.js +42 -13
  125. package/src/node/proofAssertion/premise.js +16 -0
  126. package/src/node/{step.js → proofAssertion/step.js} +4 -18
  127. package/src/node/proofAssertion/supposition.js +16 -0
  128. package/src/node/proofAssertion.js +23 -0
  129. package/src/node/statement.js +1 -1
  130. package/src/node/subDerivation.js +0 -7
  131. package/src/node/subproof.js +0 -7
  132. package/src/node/substitution/statement.js +1 -1
  133. package/src/node/topLevelAssertion/axiom.js +13 -0
  134. package/src/node/topLevelAssertion/conjecture.js +13 -0
  135. package/src/node/topLevelAssertion/lemma.js +13 -0
  136. package/src/node/topLevelAssertion/theorem.js +13 -0
  137. package/src/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +1 -1
  138. package/src/node/topLevelMetaAssertion/metaLemma.js +13 -0
  139. package/src/node/topLevelMetaAssertion/metatheorem.js +13 -0
  140. package/src/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +1 -1
  141. package/src/nonTerminalNodeMap.js +12 -12
  142. package/src/preamble.js +9 -9
  143. package/src/process/instantiate.js +31 -32
  144. package/src/process/unify.js +6 -5
  145. package/src/types.js +4 -2
  146. package/src/utilities/bnf.js +3 -2
  147. package/src/utilities/brackets.js +5 -8
  148. package/src/utilities/context.js +20 -0
  149. package/src/utilities/element.js +169 -162
  150. package/src/utilities/fragment.js +11 -0
  151. package/src/utilities/instance.js +19 -24
  152. package/src/utilities/json.js +3 -1
  153. package/src/utilities/string.js +57 -32
  154. package/src/utilities/unification.js +39 -39
  155. package/src/utilities/validation.js +26 -35
  156. package/lib/context/local.js +0 -605
  157. package/lib/context/temporary.js +0 -752
  158. package/lib/element/axiom.js +0 -329
  159. package/lib/element/axiomLemmaTheoremConjecture.js +0 -434
  160. package/lib/element/metaLemmaMetatheorem.js +0 -322
  161. package/lib/element/premise.js +0 -380
  162. package/lib/element/step.js +0 -390
  163. package/lib/element/supposition.js +0 -410
  164. package/lib/node/step.js +0 -166
  165. package/lib/node/supposition.js +0 -130
  166. package/src/node/axiom.js +0 -13
  167. package/src/node/conjecture.js +0 -13
  168. package/src/node/lemma.js +0 -13
  169. package/src/node/metaLemma.js +0 -13
  170. package/src/node/metatheorem.js +0 -13
  171. package/src/node/premise.js +0 -30
  172. package/src/node/supposition.js +0 -30
  173. package/src/node/theorem.js +0 -13
@@ -5,6 +5,7 @@ import { arrayUtilities } from "necessary";
5
5
  import elements from "../elements";
6
6
 
7
7
  import { verifyFile } from "../process/verify";
8
+ import { chainContext } from "../utilities/context";
8
9
  import { baseTypeFromNothing } from "../types";
9
10
  import { nodeAsString, nodesAsString } from "../utilities/node";
10
11
  import { typesFromJSON,
@@ -35,8 +36,8 @@ import { typesFromJSON,
35
36
  const { push, filter } = arrayUtilities;
36
37
 
37
38
  export default class FileContext {
38
- constructor(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
39
- this.releaseContext = releaseContext;
39
+ constructor(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
40
+ this.context = context;
40
41
  this.filePath = filePath;
41
42
  this.lineIndex = lineIndex;
42
43
  this.tokens = tokens;
@@ -54,10 +55,12 @@ export default class FileContext {
54
55
  this.constructors = constructors;
55
56
  this.metatheorems = metatheorems;
56
57
  this.metavariables = metavariables;
58
+
59
+ return chainContext(this);
57
60
  }
58
61
 
59
- getReleaseContext() {
60
- return this.releaseContext;
62
+ getContext() {
63
+ return this.context;
61
64
  }
62
65
 
63
66
  getFilePath() {
@@ -76,14 +79,6 @@ export default class FileContext {
76
79
  return this.node;
77
80
  }
78
81
 
79
- getLexer() { return this.releaseContext.getLexer(); }
80
-
81
- getParser() { return this.releaseContext.getParser(); }
82
-
83
- getMetaTypes() { return this.releaseContext.getMetaTypes(); }
84
-
85
- getTypePrefix() { return this.releaseContext.getTypePrefix(); }
86
-
87
82
  getJudgements() {
88
83
  const judgements = [];
89
84
 
@@ -97,17 +92,17 @@ export default class FileContext {
97
92
  return equivalences;
98
93
  }
99
94
 
100
- getStepsOrSubproofs() {
101
- const stepsOrSubproofs = [];
95
+ getSubproofOrProofAssertions() {
96
+ const subproofOrProofAssertions = [];
102
97
 
103
- return stepsOrSubproofs;
98
+ return subproofOrProofAssertions;
104
99
  }
105
100
 
106
101
  getLabels(includeRelease = true) {
107
102
  const labels = [];
108
103
 
109
104
  if (includeRelease) {
110
- const releaseContextLabels = this.releaseContext.getLabels();
105
+ const releaseContextLabels = this.context.getLabels();
111
106
 
112
107
  push(labels, releaseContextLabels);
113
108
  } else {
@@ -153,7 +148,7 @@ export default class FileContext {
153
148
 
154
149
  getTypes(includeRelease = true, includeDependencies = true) {
155
150
  const types = includeRelease ?
156
- this.releaseContext.getTypes(includeDependencies) :
151
+ this.context.getTypes(includeDependencies) :
157
152
  this.types;
158
153
 
159
154
  return types;
@@ -161,7 +156,7 @@ export default class FileContext {
161
156
 
162
157
  getRules(includeRelease = true) {
163
158
  const rules = includeRelease ?
164
- this.releaseContext.getRules() :
159
+ this.context.getRules() :
165
160
  this.rules;
166
161
 
167
162
  return rules;
@@ -169,7 +164,7 @@ export default class FileContext {
169
164
 
170
165
  getAxioms(includeRelease = true) {
171
166
  const axioms = includeRelease ?
172
- this.releaseContext.getAxioms() :
167
+ this.context.getAxioms() :
173
168
  this.axioms;
174
169
 
175
170
  return axioms;
@@ -177,7 +172,7 @@ export default class FileContext {
177
172
 
178
173
  getLemmas(includeRelease = true) {
179
174
  const lemmas = includeRelease ?
180
- this.releaseContext.getLemmas() :
175
+ this.context.getLemmas() :
181
176
  this.lemmas;
182
177
 
183
178
  return lemmas;
@@ -185,7 +180,7 @@ export default class FileContext {
185
180
 
186
181
  getTheorems(includeRelease = true) {
187
182
  const theorems = includeRelease ?
188
- this.releaseContext.getTheorems() :
183
+ this.context.getTheorems() :
189
184
  this.theorems;
190
185
 
191
186
  return theorems;
@@ -197,7 +192,7 @@ export default class FileContext {
197
192
 
198
193
  getProcedures(includeRelease = true) {
199
194
  const procedures = includeRelease ?
200
- this.releaseContext.getProcedures() :
195
+ this.context.getProcedures() :
201
196
  null; ///
202
197
 
203
198
  return procedures;
@@ -205,7 +200,7 @@ export default class FileContext {
205
200
 
206
201
  getMetaLemmas(includeRelease = true) {
207
202
  const metaLemmas = includeRelease ?
208
- this.releaseContext.getMetaLemmas() :
203
+ this.context.getMetaLemmas() :
209
204
  this.metaLemmas;
210
205
 
211
206
  return metaLemmas;
@@ -213,7 +208,7 @@ export default class FileContext {
213
208
 
214
209
  getConjectures(includeRelease = true) {
215
210
  const conjectures = includeRelease ?
216
- this.releaseContext.getConjectures() :
211
+ this.context.getConjectures() :
217
212
  this.conjectures;
218
213
 
219
214
  return conjectures;
@@ -221,7 +216,7 @@ export default class FileContext {
221
216
 
222
217
  getCombinators(includeRelease = true) {
223
218
  const combinators = includeRelease ?
224
- this.releaseContext.getCombinators() :
219
+ this.context.getCombinators() :
225
220
  this.combinators;
226
221
 
227
222
  return combinators;
@@ -229,7 +224,7 @@ export default class FileContext {
229
224
 
230
225
  getTypePrefixes(includeRelease = true) {
231
226
  const typePrefixes = includeRelease ?
232
- this.releaseContext.getTypePrefixes() :
227
+ this.context.getTypePrefixes() :
233
228
  this.typePrefixes;
234
229
 
235
230
  return typePrefixes;
@@ -237,7 +232,7 @@ export default class FileContext {
237
232
 
238
233
  getConstructors(includeRelease = true) {
239
234
  const constructors = includeRelease ?
240
- this.releaseContext.getConstructors() :
235
+ this.context.getConstructors() :
241
236
  this.constructors;
242
237
 
243
238
  return constructors;
@@ -245,7 +240,7 @@ export default class FileContext {
245
240
 
246
241
  getMetatheorems(includeRelease = true) {
247
242
  const metatheorems = includeRelease ?
248
- this.releaseContext.getMetatheorems() :
243
+ this.context.getMetatheorems() :
249
244
  this.metatheorems;
250
245
 
251
246
  return metatheorems;
@@ -440,10 +435,10 @@ export default class FileContext {
440
435
 
441
436
  filter(metaLemmas, (metaLemma) => {
442
437
  const context = this, ///
443
- metaLemmaMetaTheorem = metaLemma, ///
444
- metaLemmaMetatheoremUnifies = reference.unifyMetaLemmaMetatheorem(metaLemmaMetaTheorem, context);
438
+ topLevelMetaAssertion = metaLemma, ///
439
+ topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
445
440
 
446
- if (metaLemmaMetatheoremUnifies) {
441
+ if (topLevelMetaAssertionUnifies) {
447
442
  return true;
448
443
  }
449
444
  });
@@ -456,10 +451,10 @@ export default class FileContext {
456
451
 
457
452
  filter(metatheorems, (metatheorem) => {
458
453
  const context = this, ///
459
- metaLemmaMetaTheorem = metatheorem, ///
460
- metaLemmaMetatheoremUnifies = reference.unifyMetaLemmaMetatheorem(metaLemmaMetaTheorem, context);
454
+ topLevelMetaAssertion = metatheorem, ///
455
+ topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
461
456
 
462
- if (metaLemmaMetatheoremUnifies) {
457
+ if (topLevelMetaAssertionUnifies) {
463
458
  return true;
464
459
  }
465
460
  });
@@ -467,33 +462,33 @@ export default class FileContext {
467
462
  return metatheorems;
468
463
  }
469
464
 
470
- findMetaLemmaMetatheoremByReference(reference) {
465
+ findTopLevelMetaAssertionByReference(reference) {
471
466
  const metaLemma = this.findMetaLemmaByReference(reference),
472
467
  metatheorem = this.findMetatheoremByReference(reference),
473
- metaLemmaMetatheorem = (metaLemma || metatheorem); ///
468
+ topLevelMetaAssertion = (metaLemma || metatheorem); ///
474
469
 
475
- return metaLemmaMetatheorem;
470
+ return topLevelMetaAssertion;
476
471
  }
477
472
 
478
- findMetaLemmaMetatheoremsByReference(reference) {
473
+ findTopLevelMetaAssertionsByReference(reference) {
479
474
  const metaLemmas = this.findMetaLemmasByReference(reference),
480
475
  metatheorems = this.findMetatheoremsByReference(reference),
481
- metaLemmaMetatheorems = [
476
+ topLevelMetaAssertions = [
482
477
  ...metaLemmas,
483
478
  ...metatheorems
484
479
  ];
485
480
 
486
- return metaLemmaMetatheorems;
481
+ return topLevelMetaAssertions;
487
482
  }
488
483
 
489
- findAxiomLemmaTheoremOrConjectureByReference(reference) {
484
+ findTopLevelAssertionByReference(reference) {
490
485
  const axiom = this.findAxiomByReference(reference),
491
486
  lemma = this.findLemmaByReference(reference),
492
487
  theorem = this.findTheoremByReference(reference),
493
488
  conjecture = this.findConjectureByReference(reference),
494
- axiomLemmaTheoremOrConjecture = (axiom || lemma || theorem || conjecture);
489
+ topLevelAssertion = (axiom || lemma || theorem || conjecture);
495
490
 
496
- return axiomLemmaTheoremOrConjecture;
491
+ return topLevelAssertion;
497
492
  }
498
493
 
499
494
  findMetavariable(metavariable) {
@@ -776,11 +771,11 @@ export default class FileContext {
776
771
  return metavariablePresent;
777
772
  }
778
773
 
779
- isMetaLemmaMetatheoremPresentByReference(reference) {
780
- const metaLemmaMetatheorem = this.findMetaLemmaMetatheoremByReference(reference),
781
- metaLemmaMetatheoremPresent = (metaLemmaMetatheorem !== null);
774
+ isTopLevelMetaAssertionPresentByReference(reference) {
775
+ const topLevelMetaAssertion = this.findTopLevelMetaAssertionByReference(reference),
776
+ topLevelMetaAssertionPresent = (topLevelMetaAssertion !== null);
782
777
 
783
- return metaLemmaMetatheoremPresent;
778
+ return topLevelMetaAssertionPresent;
784
779
  }
785
780
 
786
781
  nodeAsString(node) {
@@ -795,36 +790,34 @@ export default class FileContext {
795
790
  return string;
796
791
  }
797
792
 
798
- findFile(filePath) { return this.releaseContext.findFile(filePath); }
799
-
800
793
  trace(message, node = null) {
801
794
  this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
802
795
 
803
- this.releaseContext.trace(message, this.filePath, this.lineIndex);
796
+ this.context.trace(message, this.filePath, this.lineIndex);
804
797
  }
805
798
 
806
799
  debug(message, node = null) {
807
800
  this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
808
801
 
809
- this.releaseContext.debug(message, this.filePath, this.lineIndex);
802
+ this.context.debug(message, this.filePath, this.lineIndex);
810
803
  }
811
804
 
812
805
  info(message, node = null) {
813
806
  this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
814
807
 
815
- this.releaseContext.info(message, this.filePath, this.lineIndex);
808
+ this.context.info(message, this.filePath, this.lineIndex);
816
809
  }
817
810
 
818
811
  warning(message, node = null) {
819
812
  this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
820
813
 
821
- this.releaseContext.warning(message, this.filePath, this.lineIndex);
814
+ this.context.warning(message, this.filePath, this.lineIndex);
822
815
  }
823
816
 
824
817
  error(message, node = null) {
825
818
  this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
826
819
 
827
- this.releaseContext.error(message, this.filePath, this.lineIndex);
820
+ this.context.error(message, this.filePath, this.lineIndex);
828
821
  }
829
822
 
830
823
  verify() {
@@ -961,7 +954,7 @@ export default class FileContext {
961
954
  return json;
962
955
  }
963
956
 
964
- static fromFile(file, releaseContext) {
957
+ static fromFile(file, context) {
965
958
  const filePath = file.getPath(),
966
959
  lineIndex = null,
967
960
  tokens = null,
@@ -979,12 +972,12 @@ export default class FileContext {
979
972
  constructors = [],
980
973
  metatheorems = [],
981
974
  metavariables = [],
982
- fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
975
+ fileContext = new FileContext(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
983
976
 
984
977
  return fileContext;
985
978
  }
986
979
 
987
- static fromFilePath(filePath, releaseContext) {
980
+ static fromFilePath(filePath, context) {
988
981
  const lineIndex = null,
989
982
  tokens = null,
990
983
  node = null,
@@ -1001,7 +994,7 @@ export default class FileContext {
1001
994
  constructors = null,
1002
995
  metatheorems = null,
1003
996
  metavariables = null,
1004
- fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
997
+ fileContext = new FileContext(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
1005
998
 
1006
999
  return fileContext;
1007
1000
  }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ import { nodeAsString } from "../utilities/node";
4
+ import { chainContext } from "../utilities/context";
5
+
6
+ export default class FragmentContext {
7
+ constructor(context, tokens) {
8
+ this.context = context;
9
+ this.tokens = tokens;
10
+
11
+ return chainContext(this);
12
+ }
13
+
14
+ getContext() {
15
+ return this.context;
16
+ }
17
+
18
+ getTokens() {
19
+ return this.tokens;
20
+ }
21
+
22
+ setTokens(tokens) {
23
+ this.tokens = tokens;
24
+ }
25
+
26
+ nodeAsString(node) {
27
+ const string = nodeAsString(node, this.tokens);
28
+
29
+ return string;
30
+ }
31
+
32
+ static fromNothing(context) {
33
+ const tokens = null,
34
+ fragmentContext = new FragmentContext(context, tokens);
35
+
36
+ return fragmentContext;
37
+ }
38
+ }
@@ -10,8 +10,8 @@ import FileContext from "../context/file";
10
10
  import NominalLexer from "../nominal/lexer";
11
11
  import NominalParser from "../nominal/parser";
12
12
 
13
+ import { getMetaTypes } from "../metaTypes";
13
14
  import { customGrammarFromNameAndEntries, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
14
- import { frameMetaTypeFromNothing, referenceMetaTypeFromNothing, statementMetaTypeFromNothing } from "../metaTypes";
15
15
 
16
16
  const { nominalLexerFromCombinedCustomGrammar } = lexersUtilities,
17
17
  { nominalParserFromCombinedCustomGrammar } = parsersUtilities,
@@ -58,14 +58,7 @@ export default class ReleaseContext {
58
58
  }
59
59
 
60
60
  getMetaTypes() {
61
- const frameMetaType = frameMetaTypeFromNothing(),
62
- referenceMetaType = referenceMetaTypeFromNothing(),
63
- statementMetaType = statementMetaTypeFromNothing(),
64
- metaTypes = [
65
- frameMetaType,
66
- referenceMetaType,
67
- statementMetaType
68
- ];
61
+ const metaTypes = getMetaTypes();
69
62
 
70
63
  return metaTypes;
71
64
  }
@@ -589,7 +582,8 @@ function fileContextsFromJSON(json,fileContexts, releaseContext) {
589
582
  }
590
583
 
591
584
  if (filePathNominalFilePath) {
592
- const fileContext = FileContext.fromFilePath(filePath, releaseContext);
585
+ const context = releaseContext, ///
586
+ fileContext = FileContext.fromFilePath(filePath, context);
593
587
 
594
588
  fileContexts.push(fileContext);
595
589
 
@@ -612,7 +606,8 @@ function fileContextsFromEntries(entries, fileContexts, releaseContext) {
612
606
  }
613
607
 
614
608
  if (filePathNominalFilePath) {
615
- const fileContext = FileContext.fromFile(file, releaseContext);
609
+ const context = releaseContext, ///
610
+ fileContext = FileContext.fromFile(file, context);
616
611
 
617
612
  fileContexts.push(fileContext);
618
613
  }
@@ -4,15 +4,19 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  import elements from "../elements";
6
6
 
7
+ import { chainContext } from "../utilities/context";
8
+
7
9
  const { last } = arrayUtilities;
8
10
 
9
- class LocalContext {
10
- constructor(context, variables, judgements, equivalences, stepsOrSubproofs) {
11
+ class ScopedContext {
12
+ constructor(context, variables, judgements, equivalences, subproofOrProofAssertions) {
11
13
  this.context = context;
12
14
  this.variables = variables;
13
15
  this.judgements = judgements;
14
16
  this.equivalences = equivalences;
15
- this.stepsOrSubproofs = stepsOrSubproofs;
17
+ this.subproofOrProofAssertions = subproofOrProofAssertions;
18
+
19
+ return chainContext(this);
16
20
  }
17
21
 
18
22
  getContext() {
@@ -55,69 +59,43 @@ class LocalContext {
55
59
  return equivalences;
56
60
  }
57
61
 
58
- getSteps() {
59
- const stepsOrSubproofs = this.getStepsOrSubproofs(),
60
- steps = stepsOrSubproofs.filter((stepOrSubproof) => {
61
- const stepOrSubproofStep = stepOrSubproof.isStep();
62
+ getProofAssertions() {
63
+ const subproofOrProofAssertions = this.getSubproofOrProofAssertions(),
64
+ proofAssertions = subproofOrProofAssertions.filter((subproofOrProofAssertion) => {
65
+ const subproofOrProofAssertionproofAssertion = subproofOrProofAssertion.isProofAssertion();
62
66
 
63
- if (stepOrSubproofStep) {
67
+ if (subproofOrProofAssertionproofAssertion) {
64
68
  return true;
65
69
  }
66
70
  });
67
71
 
68
- return steps;
72
+ return proofAssertions;
69
73
  }
70
74
 
71
- getLastStep() {
72
- let lastStep = null;
75
+ getLastProofAssertion() {
76
+ let lastProofAssertion = null;
73
77
 
74
- const steps = this.getSteps(),
75
- stepsLength = steps.length;
78
+ const proofAssertions = this.getProofAssertions(),
79
+ proofAssertionsLength = proofAssertions.length;
76
80
 
77
- if (stepsLength > 0) {
78
- lastStep = last(steps);
81
+ if (proofAssertionsLength > 0) {
82
+ lastProofAssertion = last(proofAssertions);
79
83
  }
80
84
 
81
- return lastStep;
85
+ return lastProofAssertion;
82
86
  }
83
87
 
84
- getStepsOrSubproofs() {
85
- let stepsOrSubproofs = this.context.getStepsOrSubproofs();
88
+ getSubproofOrProofAssertions() {
89
+ let subproofOrProofAssertions = this.context.getSubproofOrProofAssertions();
86
90
 
87
- stepsOrSubproofs = [ ///
88
- ...stepsOrSubproofs,
89
- ...this.stepsOrSubproofs
91
+ subproofOrProofAssertions = [ ///
92
+ ...subproofOrProofAssertions,
93
+ ...this.subproofOrProofAssertions
90
94
  ];
91
95
 
92
- return stepsOrSubproofs;
96
+ return subproofOrProofAssertions;
93
97
  }
94
98
 
95
- getFilePath() { return this.context.getFilePath(); }
96
-
97
- getLexer() { return this.context.getLexer(); }
98
-
99
- getParser() { return this.context.getParser(); }
100
-
101
- getAxioms() { return this.context.getAxioms(); }
102
-
103
- getLemmas() { return this.context.getLemmas(); }
104
-
105
- getTheorems() { return this.context.getTheorems(); }
106
-
107
- getConjectures() { return this.context.getConjectures(); }
108
-
109
- getCombinators() { return this.context.getCombinators(); }
110
-
111
- getConstructors() { return this.context.getConstructors(); }
112
-
113
- getTypePrefix() { return this.context.getTypePrefix(); }
114
-
115
- addAxiom(axiom) { this.context.addAxiom(axiom); }
116
-
117
- addLemma(lemma) { this.context.addLemma(lemma); }
118
-
119
- addTheorem(theorem) { this.context.addTheorem(theorem); }
120
-
121
99
  addEquality(equality) {
122
100
  let equalityAdded;
123
101
 
@@ -187,32 +165,10 @@ class LocalContext {
187
165
  return judgementAdded;
188
166
  }
189
167
 
190
- addStepOrSubproof(stepOrSubproof) {
191
- this.stepsOrSubproofs.push(stepOrSubproof);
168
+ addSubproofOrProofAssertion(subproofOrProofAssertion) {
169
+ this.subproofOrProofAssertions.push(subproofOrProofAssertion);
192
170
  }
193
171
 
194
- findProcedureByName(name) { return this.context.findProcedureByName(name); }
195
-
196
- findLabelByReference(reference, context) { return this.context.findLabelByReference(reference, context); }
197
-
198
- findRuleByReference(reference) { return this.context.findRuleByReference(reference); }
199
-
200
- findAxiomByReference(reference) { return this.context.findAxiomByReference(reference); }
201
-
202
- findLemmaByReference(reference) { return this.context.findLemmaByReference(reference); }
203
-
204
- findTheoremByReference(reference) { return this.context.findTheoremByReference(reference); }
205
-
206
- findConjectureByReference(reference) { return this.context.findConjectureByReference(reference); }
207
-
208
- findMetaLemmasByReference(reference) { return this.context.findMetaLemmasByReference(reference); }
209
-
210
- findMetatheoremsByReference(reference) { return this.context.findMetatheoremsByReference(reference); }
211
-
212
- findMetaLemmaMetatheoremByReference(reference) { return this.context.findMetaLemmaMetatheoremByReference(reference); }
213
-
214
- findMetaLemmaMetatheoremsByReference(reference) { return this.context.findMetaLemmaMetatheoremsByReference(reference); }
215
-
216
172
  findVariableByVariableIdentifier(variableIdentifier, nested = true) {
217
173
  const variables = this.getVariables(nested),
218
174
  variable = variables.find((variable) => {
@@ -246,36 +202,8 @@ class LocalContext {
246
202
 
247
203
  findEquivalenceByTerm(term) { return this.equivalences.findEquivalenceByTerm(term); }
248
204
 
249
- findMetavariable(metavariable) { return this.context.findMetavariable(metavariable); }
250
-
251
- findLabelByMetavariable(metavariable) { return this.context.findLabelByMetavariable(metavariable); }
252
-
253
- findTypeByNominalTypeName(nominalTypeName) { return this.context.findTypeByNominalTypeName(nominalTypeName); }
254
-
255
- findMetaTypeByMetaTypeName(metaTypeName) { return this.context.findMetaTypeByMetaTypeName(metaTypeName); }
256
-
257
- findMetavariableByMetavariableName(metavariableName) { return this.context.findMetavariableByMetavariableName(metavariableName); }
258
-
259
- isProcedurePresentByName(name) { return this.context.isProcedurePresentByName(name); }
260
-
261
- isLabelPresentByReference(reference) { return this.context.isLabelPresentByReference(reference); }
262
-
263
- isMetavariablePresentByReference(reference) { return this.context.isMetavariablePresentByReference(reference); }
264
-
265
- isMetaLemmaMetatheoremPresentByReference(reference) { return this.context.isMetaLemmaMetatheoremPresentByReference(reference); }
266
-
267
- findAxiomLemmaTheoremOrConjectureByReference(reference) { return this.context.findAxiomLemmaTheoremOrConjectureByReference(reference); }
268
-
269
- isMetavariablePresent(metavariable) { return this.context.isMetavariablePresent(metavariable); }
270
-
271
205
  isTypePresentByTypeName(typeName, includeRelease = true, includeDependencies = true) { return this.context.isTypePresentByTypeName(typeName, includeRelease, includeDependencies); }
272
206
 
273
- isTypePresentByNominalTypeName(nominalTypeName) { return this.context.isTypePresentByNominalTypeName(nominalTypeName); }
274
-
275
- isTypePresentByPrefixedTypeName(prefixedTypeName) { return this.context.isTypePresentByPrefixedTypeName(prefixedTypeName); }
276
-
277
- isTypePrefixPresentByTypePrefixName(typePrefixName) { return this.context.isTypePrefixPresentByTypePrefixName(typePrefixName); }
278
-
279
207
  isVariablePresentByVariableIdentifier(variableIdentifier, nested = true) {
280
208
  const variable = this.findVariableByVariableIdentifier(variableIdentifier, nested),
281
209
  variablePresent = (variable !== null);
@@ -283,12 +211,6 @@ class LocalContext {
283
211
  return variablePresent;
284
212
  }
285
213
 
286
- isLabelPresentByMetavariableName(metavariableName) { return this.context.isLabelPresentByMetavariableName(metavariableName); }
287
-
288
- isLabelPresentByMetavariable(metavariable) { return this.context.isLabelPresentByMetavariable(metavariable); }
289
-
290
- isMetavariablePresentByMetavariableName(metavariableNode) { return this.context.isMetavariablePresentByMetavariableName(metavariableNode); }
291
-
292
214
  isJudgementPresentByMetavariable(metavariable) {
293
215
  const judgement = this.findJudgementByMetavariable(metavariable),
294
216
  judgementPresent = (judgement !== null);
@@ -346,9 +268,9 @@ class LocalContext {
346
268
 
347
269
  compareTermAndPropertyRelation(term, propertyRelation) {
348
270
  const context = this, ///
349
- steps = this.getSteps(),
350
- comparesToTermAndPropertyRelation = steps.some((step) => {
351
- const comparesToTermAndPropertyRelation = step.compareTermAndPropertyRelation(term, propertyRelation, context);
271
+ proofAssertions = this.getProofAssertions(),
272
+ comparesToTermAndPropertyRelation = proofAssertions.some((proofAssertion) => {
273
+ const comparesToTermAndPropertyRelation = proofAssertion.compareTermAndPropertyRelation(term, propertyRelation, context);
352
274
 
353
275
  if (comparesToTermAndPropertyRelation) {
354
276
  return true;
@@ -358,30 +280,16 @@ class LocalContext {
358
280
  return comparesToTermAndPropertyRelation;
359
281
  }
360
282
 
361
- nodeAsString(node) { return this.context.nodeAsString(node); }
362
-
363
- nodesAsString(node) { return this.context.nodesAsString(node); }
364
-
365
- trace(message, node = null) { this.context.trace(message, node); }
366
-
367
- debug(message, node = null) { this.context.debug(message, node); }
368
-
369
- info(message, node = null) { this.context.info(message, node); }
370
-
371
- warning(message, node = null) { this.context.warning(message, node); }
372
-
373
- error(message, node = null) { this.context.error(message, node); }
374
-
375
283
  static fromNothing(context) {
376
284
  const { Equivalences } = elements,
377
285
  variables = [],
378
286
  judgements = [],
379
287
  equivalences = Equivalences.fromNothing(),
380
- stepsOrSubproofs = [],
381
- localContext = new LocalContext(context, variables, judgements, equivalences, stepsOrSubproofs);
288
+ subproofOrProofAssertions = [],
289
+ scopedContext = new ScopedContext(context, variables, judgements, equivalences, subproofOrProofAssertions);
382
290
 
383
- return localContext;
291
+ return scopedContext;
384
292
  }
385
293
  }
386
294
 
387
- export default LocalContext;
295
+ export default ScopedContext;