occam-verify-cli 1.0.448 → 1.0.472

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 (222) hide show
  1. package/lib/constants.js +13 -5
  2. package/lib/context/ephemeral.js +270 -0
  3. package/lib/context/file.js +136 -128
  4. package/lib/context/liminal.js +120 -0
  5. package/lib/context/literal.js +92 -0
  6. package/lib/context/nominal.js +15 -1
  7. package/lib/context/release.js +68 -9
  8. package/lib/context/scoped.js +322 -0
  9. package/lib/context/synthetic.js +133 -0
  10. package/lib/element/assertion/contained.js +66 -66
  11. package/lib/element/assertion/defined.js +32 -32
  12. package/lib/element/assertion/property.js +39 -39
  13. package/lib/element/assertion/satisfies.js +22 -22
  14. package/lib/element/assumption.js +71 -87
  15. package/lib/element/combinator/bracketed.js +1 -10
  16. package/lib/element/conclusion.js +19 -15
  17. package/lib/element/constructor/bracketed.js +1 -10
  18. package/lib/element/constructor.js +2 -2
  19. package/lib/element/declaration/combinator.js +1 -2
  20. package/lib/element/declaration/metavariable.js +3 -3
  21. package/lib/element/declaration/variable.js +3 -3
  22. package/lib/element/deduction.js +26 -20
  23. package/lib/element/derivation.js +3 -3
  24. package/lib/element/equality.js +5 -5
  25. package/lib/element/equivalence.js +112 -107
  26. package/lib/element/equivalences.js +24 -10
  27. package/lib/element/error.js +3 -3
  28. package/lib/element/frame.js +73 -62
  29. package/lib/element/hypothesis.js +2 -2
  30. package/lib/element/judgement.js +40 -60
  31. package/lib/element/metaType.js +4 -4
  32. package/lib/element/metavariable.js +49 -38
  33. package/lib/element/parameter.js +13 -5
  34. package/lib/element/procedureCall.js +16 -16
  35. package/lib/element/proof.js +14 -13
  36. package/lib/element/proofAssertion/premise.js +319 -0
  37. package/lib/element/proofAssertion/step.js +309 -0
  38. package/lib/element/proofAssertion/supposition.js +333 -0
  39. package/lib/element/proofAssertion.js +20 -10
  40. package/lib/element/propertyRelation.js +2 -2
  41. package/lib/element/reference.js +72 -30
  42. package/lib/element/rule.js +26 -28
  43. package/lib/element/section.js +5 -5
  44. package/lib/element/signature.js +9 -6
  45. package/lib/element/statement.js +44 -36
  46. package/lib/element/subproof.js +18 -17
  47. package/lib/element/substitution/frame.js +86 -49
  48. package/lib/element/substitution/reference.js +101 -19
  49. package/lib/element/substitution/statement.js +128 -105
  50. package/lib/element/substitution/term.js +93 -57
  51. package/lib/element/substitution.js +20 -69
  52. package/lib/element/substitutions.js +49 -34
  53. package/lib/element/term.js +41 -30
  54. package/lib/element/topLevelAssertion/axiom.js +331 -0
  55. package/lib/element/{conjecture.js → topLevelAssertion/conjecture.js} +10 -10
  56. package/lib/element/{lemma.js → topLevelAssertion/lemma.js} +9 -9
  57. package/lib/element/{theorem.js → topLevelAssertion/theorem.js} +8 -8
  58. package/lib/element/topLevelAssertion.js +434 -0
  59. package/lib/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +8 -8
  60. package/lib/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +8 -8
  61. package/lib/element/topLevelMetaAssertion.js +293 -0
  62. package/lib/element/type.js +4 -4
  63. package/lib/element/variable.js +48 -40
  64. package/lib/index.js +3 -3
  65. package/lib/main.js +3 -3
  66. package/lib/metaTypes.js +18 -15
  67. package/lib/node/frame.js +2 -2
  68. package/lib/node/metavariable.js +4 -4
  69. package/lib/node/parameter.js +28 -7
  70. package/lib/node/proofAssertion/premise.js +116 -0
  71. package/lib/node/proofAssertion/step.js +152 -0
  72. package/lib/node/proofAssertion/supposition.js +116 -0
  73. package/lib/node/{premise.js → proofAssertion.js} +11 -18
  74. package/lib/node/statement.js +2 -2
  75. package/lib/node/substitution/frame.js +9 -31
  76. package/lib/node/substitution/reference.js +137 -0
  77. package/lib/node/substitution/statement.js +9 -31
  78. package/lib/node/substitution/term.js +9 -23
  79. package/lib/node/{axiom.js → topLevelAssertion/axiom.js} +7 -7
  80. package/lib/node/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
  81. package/lib/node/{lemma.js → topLevelAssertion/lemma.js} +7 -7
  82. package/lib/node/{theorem.js → topLevelAssertion/theorem.js} +7 -7
  83. package/lib/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +9 -9
  84. package/lib/node/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
  85. package/lib/node/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
  86. package/lib/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +9 -9
  87. package/lib/nonTerminalNodeMap.js +15 -14
  88. package/lib/preamble.js +10 -10
  89. package/lib/process/instantiate.js +6 -21
  90. package/lib/process/unify.js +11 -10
  91. package/lib/tokenTypes.js +22 -0
  92. package/lib/types.js +3 -3
  93. package/lib/utilities/bnf.js +5 -5
  94. package/lib/utilities/context.js +63 -0
  95. package/lib/utilities/element.js +235 -408
  96. package/lib/utilities/instance.js +12 -34
  97. package/lib/utilities/json.js +3 -2
  98. package/lib/utilities/string.js +56 -21
  99. package/lib/utilities/unification.js +38 -32
  100. package/lib/utilities/validation.js +47 -50
  101. package/package.json +2 -2
  102. package/src/constants.js +12 -1
  103. package/src/context/ephemeral.js +257 -0
  104. package/src/context/file.js +108 -116
  105. package/src/context/liminal.js +67 -0
  106. package/src/context/literal.js +51 -0
  107. package/src/context/nominal.js +12 -0
  108. package/src/context/release.js +48 -8
  109. package/src/context/{local.js → scoped.js} +43 -125
  110. package/src/context/synthetic.js +60 -0
  111. package/src/element/assertion/contained.js +49 -47
  112. package/src/element/assertion/defined.js +29 -27
  113. package/src/element/assertion/property.js +35 -35
  114. package/src/element/assertion/satisfies.js +19 -18
  115. package/src/element/assumption.js +71 -93
  116. package/src/element/combinator/bracketed.js +0 -7
  117. package/src/element/conclusion.js +25 -24
  118. package/src/element/constructor/bracketed.js +0 -7
  119. package/src/element/constructor.js +1 -1
  120. package/src/element/declaration/combinator.js +0 -1
  121. package/src/element/declaration/metavariable.js +2 -2
  122. package/src/element/declaration/variable.js +5 -5
  123. package/src/element/deduction.js +33 -31
  124. package/src/element/derivation.js +2 -2
  125. package/src/element/equality.js +4 -4
  126. package/src/element/equivalence.js +115 -135
  127. package/src/element/equivalences.js +9 -7
  128. package/src/element/error.js +4 -2
  129. package/src/element/frame.js +80 -65
  130. package/src/element/hypothesis.js +1 -1
  131. package/src/element/judgement.js +42 -62
  132. package/src/element/metaType.js +3 -4
  133. package/src/element/metavariable.js +59 -56
  134. package/src/element/parameter.js +10 -5
  135. package/src/element/procedureCall.js +20 -18
  136. package/src/element/proof.js +14 -16
  137. package/src/element/{premise.js → proofAssertion/premise.js} +57 -53
  138. package/src/element/{step.js → proofAssertion/step.js} +59 -62
  139. package/src/element/{supposition.js → proofAssertion/supposition.js} +67 -56
  140. package/src/element/proofAssertion.js +24 -13
  141. package/src/element/propertyRelation.js +1 -1
  142. package/src/element/reference.js +87 -37
  143. package/src/element/rule.js +31 -37
  144. package/src/element/section.js +5 -5
  145. package/src/element/signature.js +8 -8
  146. package/src/element/statement.js +52 -48
  147. package/src/element/subproof.js +16 -18
  148. package/src/element/substitution/frame.js +104 -50
  149. package/src/element/substitution/reference.js +120 -20
  150. package/src/element/substitution/statement.js +169 -130
  151. package/src/element/substitution/term.js +104 -63
  152. package/src/element/substitution.js +16 -58
  153. package/src/element/substitutions.js +43 -41
  154. package/src/element/term.js +47 -41
  155. package/src/element/{axiom.js → topLevelAssertion/axiom.js} +22 -20
  156. package/src/element/{conjecture.js → topLevelAssertion/conjecture.js} +5 -6
  157. package/src/element/{lemma.js → topLevelAssertion/lemma.js} +5 -6
  158. package/src/element/{theorem.js → topLevelAssertion/theorem.js} +5 -5
  159. package/src/element/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +37 -33
  160. package/src/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +5 -6
  161. package/src/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +5 -6
  162. package/src/element/{metaLemmaMetatheorem.js → topLevelMetaAssertion.js} +19 -17
  163. package/src/element/type.js +2 -4
  164. package/src/element/variable.js +47 -48
  165. package/src/index.js +2 -1
  166. package/src/main.js +2 -1
  167. package/src/metaTypes.js +25 -9
  168. package/src/node/frame.js +1 -1
  169. package/src/node/metavariable.js +3 -3
  170. package/src/node/parameter.js +32 -5
  171. package/src/node/proofAssertion/premise.js +16 -0
  172. package/src/node/{step.js → proofAssertion/step.js} +4 -18
  173. package/src/node/proofAssertion/supposition.js +16 -0
  174. package/src/node/proofAssertion.js +23 -0
  175. package/src/node/statement.js +1 -1
  176. package/src/node/substitution/frame.js +6 -32
  177. package/src/node/substitution/reference.js +38 -0
  178. package/src/node/substitution/statement.js +6 -32
  179. package/src/node/substitution/term.js +6 -22
  180. package/src/node/topLevelAssertion/axiom.js +13 -0
  181. package/src/node/topLevelAssertion/conjecture.js +13 -0
  182. package/src/node/topLevelAssertion/lemma.js +13 -0
  183. package/src/node/topLevelAssertion/theorem.js +13 -0
  184. package/src/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +1 -1
  185. package/src/node/topLevelMetaAssertion/metaLemma.js +13 -0
  186. package/src/node/topLevelMetaAssertion/metatheorem.js +13 -0
  187. package/src/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +1 -1
  188. package/src/nonTerminalNodeMap.js +15 -12
  189. package/src/preamble.js +9 -9
  190. package/src/process/instantiate.js +27 -36
  191. package/src/process/unify.js +10 -9
  192. package/src/tokenTypes.js +4 -0
  193. package/src/types.js +4 -2
  194. package/src/utilities/bnf.js +3 -2
  195. package/src/utilities/context.js +46 -0
  196. package/src/utilities/element.js +302 -509
  197. package/src/utilities/instance.js +19 -42
  198. package/src/utilities/json.js +3 -1
  199. package/src/utilities/string.js +69 -28
  200. package/src/utilities/unification.js +41 -38
  201. package/src/utilities/validation.js +66 -75
  202. package/lib/context/local.js +0 -605
  203. package/lib/context/temporary.js +0 -752
  204. package/lib/element/axiom.js +0 -329
  205. package/lib/element/axiomLemmaTheoremConjecture.js +0 -427
  206. package/lib/element/metaLemmaMetatheorem.js +0 -289
  207. package/lib/element/premise.js +0 -307
  208. package/lib/element/step.js +0 -311
  209. package/lib/element/supposition.js +0 -320
  210. package/lib/log.js +0 -150
  211. package/lib/node/step.js +0 -166
  212. package/lib/node/supposition.js +0 -130
  213. package/src/context/temporary.js +0 -476
  214. package/src/log.js +0 -118
  215. package/src/node/axiom.js +0 -13
  216. package/src/node/conjecture.js +0 -13
  217. package/src/node/lemma.js +0 -13
  218. package/src/node/metaLemma.js +0 -13
  219. package/src/node/metatheorem.js +0 -13
  220. package/src/node/premise.js +0 -30
  221. package/src/node/supposition.js +0 -30
  222. package/src/node/theorem.js +0 -13
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
+ import { contextUtilities } from "occam-furtle";
4
5
 
5
6
  import elements from "../elements";
6
7
 
8
+ import { LEVELS } from "../constants";
7
9
  import { verifyFile } from "../process/verify";
8
10
  import { baseTypeFromNothing } from "../types";
9
11
  import { nodeAsString, nodesAsString } from "../utilities/node";
@@ -32,11 +34,13 @@ import { typesFromJSON,
32
34
  metatheoremsToMetatheoremsJSON,
33
35
  metavariablesToMetavariablesJSON } from "../utilities/json";
34
36
 
35
- const { push, filter } = arrayUtilities;
37
+ const { push, filter } = arrayUtilities,
38
+ { chainContext, lineIndexFromNodeAndTokens } = contextUtilities,
39
+ [ TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL ] = LEVELS;
36
40
 
37
41
  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;
42
+ constructor(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
43
+ this.context = context;
40
44
  this.filePath = filePath;
41
45
  this.lineIndex = lineIndex;
42
46
  this.tokens = tokens;
@@ -54,10 +58,12 @@ export default class FileContext {
54
58
  this.constructors = constructors;
55
59
  this.metatheorems = metatheorems;
56
60
  this.metavariables = metavariables;
61
+
62
+ return chainContext(this);
57
63
  }
58
64
 
59
- getReleaseContext() {
60
- return this.releaseContext;
65
+ getContext() {
66
+ return this.context;
61
67
  }
62
68
 
63
69
  getFilePath() {
@@ -76,14 +82,6 @@ export default class FileContext {
76
82
  return this.node;
77
83
  }
78
84
 
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
85
  getJudgements() {
88
86
  const judgements = [];
89
87
 
@@ -92,7 +90,7 @@ export default class FileContext {
92
90
 
93
91
  getEquivalences() {
94
92
  const { Equivalences } = elements,
95
- equivalences = Equivalences.fromNothing();
93
+ equivalences = Equivalences.fromNothing(context);
96
94
 
97
95
  return equivalences;
98
96
  }
@@ -107,7 +105,7 @@ export default class FileContext {
107
105
  const labels = [];
108
106
 
109
107
  if (includeRelease) {
110
- const releaseContextLabels = this.releaseContext.getLabels();
108
+ const releaseContextLabels = this.context.getLabels();
111
109
 
112
110
  push(labels, releaseContextLabels);
113
111
  } else {
@@ -153,7 +151,7 @@ export default class FileContext {
153
151
 
154
152
  getTypes(includeRelease = true, includeDependencies = true) {
155
153
  const types = includeRelease ?
156
- this.releaseContext.getTypes(includeDependencies) :
154
+ this.context.getTypes(includeDependencies) :
157
155
  this.types;
158
156
 
159
157
  return types;
@@ -161,7 +159,7 @@ export default class FileContext {
161
159
 
162
160
  getRules(includeRelease = true) {
163
161
  const rules = includeRelease ?
164
- this.releaseContext.getRules() :
162
+ this.context.getRules() :
165
163
  this.rules;
166
164
 
167
165
  return rules;
@@ -169,7 +167,7 @@ export default class FileContext {
169
167
 
170
168
  getAxioms(includeRelease = true) {
171
169
  const axioms = includeRelease ?
172
- this.releaseContext.getAxioms() :
170
+ this.context.getAxioms() :
173
171
  this.axioms;
174
172
 
175
173
  return axioms;
@@ -177,7 +175,7 @@ export default class FileContext {
177
175
 
178
176
  getLemmas(includeRelease = true) {
179
177
  const lemmas = includeRelease ?
180
- this.releaseContext.getLemmas() :
178
+ this.context.getLemmas() :
181
179
  this.lemmas;
182
180
 
183
181
  return lemmas;
@@ -185,7 +183,7 @@ export default class FileContext {
185
183
 
186
184
  getTheorems(includeRelease = true) {
187
185
  const theorems = includeRelease ?
188
- this.releaseContext.getTheorems() :
186
+ this.context.getTheorems() :
189
187
  this.theorems;
190
188
 
191
189
  return theorems;
@@ -197,7 +195,7 @@ export default class FileContext {
197
195
 
198
196
  getProcedures(includeRelease = true) {
199
197
  const procedures = includeRelease ?
200
- this.releaseContext.getProcedures() :
198
+ this.context.getProcedures() :
201
199
  null; ///
202
200
 
203
201
  return procedures;
@@ -205,7 +203,7 @@ export default class FileContext {
205
203
 
206
204
  getMetaLemmas(includeRelease = true) {
207
205
  const metaLemmas = includeRelease ?
208
- this.releaseContext.getMetaLemmas() :
206
+ this.context.getMetaLemmas() :
209
207
  this.metaLemmas;
210
208
 
211
209
  return metaLemmas;
@@ -213,7 +211,7 @@ export default class FileContext {
213
211
 
214
212
  getConjectures(includeRelease = true) {
215
213
  const conjectures = includeRelease ?
216
- this.releaseContext.getConjectures() :
214
+ this.context.getConjectures() :
217
215
  this.conjectures;
218
216
 
219
217
  return conjectures;
@@ -221,7 +219,7 @@ export default class FileContext {
221
219
 
222
220
  getCombinators(includeRelease = true) {
223
221
  const combinators = includeRelease ?
224
- this.releaseContext.getCombinators() :
222
+ this.context.getCombinators() :
225
223
  this.combinators;
226
224
 
227
225
  return combinators;
@@ -229,7 +227,7 @@ export default class FileContext {
229
227
 
230
228
  getTypePrefixes(includeRelease = true) {
231
229
  const typePrefixes = includeRelease ?
232
- this.releaseContext.getTypePrefixes() :
230
+ this.context.getTypePrefixes() :
233
231
  this.typePrefixes;
234
232
 
235
233
  return typePrefixes;
@@ -237,7 +235,7 @@ export default class FileContext {
237
235
 
238
236
  getConstructors(includeRelease = true) {
239
237
  const constructors = includeRelease ?
240
- this.releaseContext.getConstructors() :
238
+ this.context.getConstructors() :
241
239
  this.constructors;
242
240
 
243
241
  return constructors;
@@ -245,7 +243,7 @@ export default class FileContext {
245
243
 
246
244
  getMetatheorems(includeRelease = true) {
247
245
  const metatheorems = includeRelease ?
248
- this.releaseContext.getMetatheorems() :
246
+ this.context.getMetatheorems() :
249
247
  this.metatheorems;
250
248
 
251
249
  return metatheorems;
@@ -255,12 +253,6 @@ export default class FileContext {
255
253
  return this.metavariables;
256
254
  }
257
255
 
258
- getFileContext() {
259
- const fileContext = this; ///
260
-
261
- return fileContext;
262
- }
263
-
264
256
  addType(type) {
265
257
  this.types.push(type);
266
258
  }
@@ -440,10 +432,10 @@ export default class FileContext {
440
432
 
441
433
  filter(metaLemmas, (metaLemma) => {
442
434
  const context = this, ///
443
- metaLemmaMetaTheorem = metaLemma, ///
444
- metaLemmaMetatheoremUnifies = reference.unifyMetaLemmaMetatheorem(metaLemmaMetaTheorem, context);
435
+ topLevelMetaAssertion = metaLemma, ///
436
+ topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
445
437
 
446
- if (metaLemmaMetatheoremUnifies) {
438
+ if (topLevelMetaAssertionUnifies) {
447
439
  return true;
448
440
  }
449
441
  });
@@ -456,10 +448,10 @@ export default class FileContext {
456
448
 
457
449
  filter(metatheorems, (metatheorem) => {
458
450
  const context = this, ///
459
- metaLemmaMetaTheorem = metatheorem, ///
460
- metaLemmaMetatheoremUnifies = reference.unifyMetaLemmaMetatheorem(metaLemmaMetaTheorem, context);
451
+ topLevelMetaAssertion = metatheorem, ///
452
+ topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
461
453
 
462
- if (metaLemmaMetatheoremUnifies) {
454
+ if (topLevelMetaAssertionUnifies) {
463
455
  return true;
464
456
  }
465
457
  });
@@ -467,33 +459,33 @@ export default class FileContext {
467
459
  return metatheorems;
468
460
  }
469
461
 
470
- findMetaLemmaMetatheoremByReference(reference) {
462
+ findTopLevelMetaAssertionByReference(reference) {
471
463
  const metaLemma = this.findMetaLemmaByReference(reference),
472
464
  metatheorem = this.findMetatheoremByReference(reference),
473
- metaLemmaMetatheorem = (metaLemma || metatheorem); ///
465
+ topLevelMetaAssertion = (metaLemma || metatheorem); ///
474
466
 
475
- return metaLemmaMetatheorem;
467
+ return topLevelMetaAssertion;
476
468
  }
477
469
 
478
- findMetaLemmaMetatheoremsByReference(reference) {
470
+ findTopLevelMetaAssertionsByReference(reference) {
479
471
  const metaLemmas = this.findMetaLemmasByReference(reference),
480
472
  metatheorems = this.findMetatheoremsByReference(reference),
481
- metaLemmaMetatheorems = [
473
+ topLevelMetaAssertions = [
482
474
  ...metaLemmas,
483
475
  ...metatheorems
484
476
  ];
485
477
 
486
- return metaLemmaMetatheorems;
478
+ return topLevelMetaAssertions;
487
479
  }
488
480
 
489
- findAxiomLemmaTheoremOrConjectureByReference(reference) {
481
+ findTopLevelAssertionByReference(reference) {
490
482
  const axiom = this.findAxiomByReference(reference),
491
483
  lemma = this.findLemmaByReference(reference),
492
484
  theorem = this.findTheoremByReference(reference),
493
485
  conjecture = this.findConjectureByReference(reference),
494
- axiomLemmaTheoremOrConjecture = (axiom || lemma || theorem || conjecture);
486
+ topLevelAssertion = (axiom || lemma || theorem || conjecture);
495
487
 
496
- return axiomLemmaTheoremOrConjecture;
488
+ return topLevelAssertion;
497
489
  }
498
490
 
499
491
  findMetavariable(metavariable) {
@@ -501,12 +493,9 @@ export default class FileContext {
501
493
  specificMetavariable = metavariable; ///
502
494
 
503
495
  metavariable = metavariables.find((metavariable) => {
504
- const generalMetavariable = metavariable; ///
505
-
506
- metavariable = specificMetavariable; ///
507
-
508
496
  const context = this, ///
509
- metavariableUnifies = generalMetavariable.unifyMetavariable(metavariable, context);
497
+ generalMetavariable = metavariable, ///
498
+ metavariableUnifies = generalMetavariable.unifyMetavariable(specificMetavariable, context);
510
499
 
511
500
  if (metavariableUnifies) {
512
501
  return true;
@@ -742,10 +731,8 @@ export default class FileContext {
742
731
  isLabelPresentByReference(reference) {
743
732
  const labels = this.getLabels(),
744
733
  labelPresent = labels.some((label) => {
745
- const { Substitutions } = elements,
746
- context = this, ///
747
- substitutions = Substitutions.fromNothing(),
748
- labelUnifies = reference.unifyLabel(label, substitutions, context);
734
+ const context = this, ///
735
+ labelUnifies = reference.unifyLabel(label, context);
749
736
 
750
737
  if (labelUnifies) {
751
738
  return true;
@@ -776,11 +763,25 @@ export default class FileContext {
776
763
  return metavariablePresent;
777
764
  }
778
765
 
779
- isMetaLemmaMetatheoremPresentByReference(reference) {
780
- const metaLemmaMetatheorem = this.findMetaLemmaMetatheoremByReference(reference),
781
- metaLemmaMetatheoremPresent = (metaLemmaMetatheorem !== null);
766
+ isTopLevelMetaAssertionPresentByReference(reference) {
767
+ const topLevelMetaAssertion = this.findTopLevelMetaAssertionByReference(reference),
768
+ topLevelMetaAssertionPresent = (topLevelMetaAssertion !== null);
782
769
 
783
- return metaLemmaMetatheoremPresent;
770
+ return topLevelMetaAssertionPresent;
771
+ }
772
+
773
+ getFileContext() {
774
+ const fileContext = this; ///
775
+
776
+ return fileContext;
777
+ }
778
+
779
+ getDepth() {
780
+ let depth = this.context.getDepth();
781
+
782
+ depth++;
783
+
784
+ return depth;
784
785
  }
785
786
 
786
787
  nodeAsString(node) {
@@ -795,36 +796,45 @@ export default class FileContext {
795
796
  return string;
796
797
  }
797
798
 
798
- findFile(filePath) { return this.releaseContext.findFile(filePath); }
799
-
800
799
  trace(message, node = null) {
801
- this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
800
+ const level = TRACE_LEVEL;
802
801
 
803
- this.releaseContext.trace(message, this.filePath, this.lineIndex);
802
+ this.writeToLog(level, message, node);
804
803
  }
805
804
 
806
805
  debug(message, node = null) {
807
- this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
806
+ const level = DEBUG_LEVEL;
808
807
 
809
- this.releaseContext.debug(message, this.filePath, this.lineIndex);
808
+ this.writeToLog(level, message, node);
810
809
  }
811
810
 
812
811
  info(message, node = null) {
813
- this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
812
+ const level = INFO_LEVEL;
814
813
 
815
- this.releaseContext.info(message, this.filePath, this.lineIndex);
814
+ this.writeToLog(level, message, node);
816
815
  }
817
816
 
818
817
  warning(message, node = null) {
819
- this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
818
+ const level = WARNING_LEVEL;
820
819
 
821
- this.releaseContext.warning(message, this.filePath, this.lineIndex);
820
+ this.writeToLog(level, message, node);
822
821
  }
823
822
 
824
823
  error(message, node = null) {
825
- this.lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex);
824
+ const level = ERROR_LEVEL;
825
+
826
+ this.writeToLog(level, message, node);
827
+ }
828
+
829
+ writeToLog(level, message, node) {
830
+ const lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex),
831
+ filePath = (lineIndex === null) ?
832
+ this.filePath :
833
+ null;
826
834
 
827
- this.releaseContext.error(message, this.filePath, this.lineIndex);
835
+ this.context.writeToLog(level, message, filePath, lineIndex);
836
+
837
+ this.lineIndex = lineIndex;
828
838
  }
829
839
 
830
840
  verify() {
@@ -842,9 +852,9 @@ export default class FileContext {
842
852
 
843
853
  verifies = verifyFile(fileNode, context);
844
854
 
845
- if (!verifies) {
846
- this.clear();
847
- }
855
+ verifies ?
856
+ this.complete() :
857
+ this.clear();
848
858
 
849
859
  if (verifies) {
850
860
  this.info(`...verified the '${this.filePath}' file.`);
@@ -854,7 +864,24 @@ export default class FileContext {
854
864
  return verifies;
855
865
  }
856
866
 
867
+ prepare() {
868
+ if (this.tokens !== null) {
869
+ return;
870
+ }
871
+
872
+ const file = this.findFile(this.filePath),
873
+ lexer = this.getLexer(),
874
+ parser = this.getParser(),
875
+ content = file.getContent();
876
+
877
+ this.tokens = lexer.tokenise(content);
878
+
879
+ this.node = parser.parse(this.tokens);
880
+ }
881
+
857
882
  clear() {
883
+ this.lineIndex = null;
884
+
858
885
  this.types = [];
859
886
  this.rules = [];
860
887
  this.axioms = [];
@@ -870,21 +897,8 @@ export default class FileContext {
870
897
  this.metavariables = [];
871
898
  }
872
899
 
873
- prepare() {
900
+ complete() {
874
901
  this.lineIndex = null;
875
-
876
- if (this.tokens !== null) {
877
- return;
878
- }
879
-
880
- const file = this.findFile(this.filePath),
881
- lexer = this.getLexer(),
882
- parser = this.getParser(),
883
- content = file.getContent();
884
-
885
- this.tokens = lexer.tokenise(content);
886
-
887
- this.node = parser.parse(this.tokens);
888
902
  }
889
903
 
890
904
  initialise(json) {
@@ -961,7 +975,7 @@ export default class FileContext {
961
975
  return json;
962
976
  }
963
977
 
964
- static fromFile(file, releaseContext) {
978
+ static fromFile(file, context) {
965
979
  const filePath = file.getPath(),
966
980
  lineIndex = null,
967
981
  tokens = null,
@@ -979,12 +993,12 @@ export default class FileContext {
979
993
  constructors = [],
980
994
  metatheorems = [],
981
995
  metavariables = [],
982
- fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
996
+ fileContext = new FileContext(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
983
997
 
984
998
  return fileContext;
985
999
  }
986
1000
 
987
- static fromFilePath(filePath, releaseContext) {
1001
+ static fromFilePath(filePath, context) {
988
1002
  const lineIndex = null,
989
1003
  tokens = null,
990
1004
  node = null,
@@ -1001,30 +1015,8 @@ export default class FileContext {
1001
1015
  constructors = null,
1002
1016
  metatheorems = null,
1003
1017
  metavariables = null,
1004
- fileContext = new FileContext(releaseContext, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
1018
+ fileContext = new FileContext(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
1005
1019
 
1006
1020
  return fileContext;
1007
1021
  }
1008
1022
  }
1009
-
1010
- function lineIndexFromNodeAndTokens(node, tokens, lineIndex) {
1011
- if (node !== null) {
1012
- lineIndex = 0;
1013
-
1014
- const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens);
1015
-
1016
- tokens.some((token, tokenIndex) => {
1017
- const tokenEndOfLineToken = token.isEndOfLineToken();
1018
-
1019
- if (tokenEndOfLineToken) {
1020
- lineIndex += 1;
1021
- }
1022
-
1023
- if (tokenIndex === firstSignificantTokenIndex) {
1024
- return true;
1025
- }
1026
- });
1027
- }
1028
-
1029
- return lineIndex;
1030
- }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+ import { contextUtilities } from "occam-furtle";
5
+
6
+ const { extract } = arrayUtilities,
7
+ { chainContext } = contextUtilities;
8
+
9
+ export default class LiminalContext {
10
+ constructor(context, substitutions) {
11
+ this.context = context;
12
+ this.substitutions = substitutions;
13
+
14
+ return chainContext(this);
15
+ }
16
+
17
+ getContext() {
18
+ return this.context;
19
+ }
20
+
21
+ getSubstitutions() {
22
+ let substitutions = this.context.getSubstitutions();
23
+
24
+ substitutions = [ ///
25
+ ...this.substitutions,
26
+ ...substitutions
27
+ ]
28
+
29
+ return substitutions;
30
+ }
31
+
32
+ addSubstitution(substitution) {
33
+ const context = this, ///
34
+ substitutionA = substitution, ///
35
+ substitutionString = substitution.getString();
36
+
37
+ extract(this.substitutions, (substitution) => {
38
+ const substitutionB = substitution, ///
39
+ substitutionAEqualToAssertionB = substitutionA.isEqualTo(substitutionB);
40
+
41
+ if (substitutionAEqualToAssertionB) {
42
+ return true;
43
+ }
44
+ });
45
+
46
+ context.trace(`Added the '${substitutionString}' substitution to the context.`);
47
+
48
+ this.substitutions.push(substitution);
49
+ }
50
+
51
+ getFileContext() { return this.context.getFileContext(); }
52
+
53
+ getDepth() {
54
+ let depth = this.context.getDepth();
55
+
56
+ depth++;
57
+
58
+ return depth;
59
+ }
60
+
61
+ static fromNothing(context) {
62
+ const substitutions = [],
63
+ emphemeralContext = new LiminalContext(context, substitutions);
64
+
65
+ return emphemeralContext;
66
+ }
67
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import { contextUtilities } from "occam-furtle";
4
+
5
+ import { nodeAsString } from "../utilities/node";
6
+
7
+ const { chainContext } = contextUtilities;
8
+
9
+ export default class LiteralContext {
10
+ constructor(context, tokens) {
11
+ this.context = context;
12
+ this.tokens = tokens;
13
+
14
+ return chainContext(this);
15
+ }
16
+
17
+ getContext() {
18
+ return this.context;
19
+ }
20
+
21
+ getTokens() {
22
+ return this.tokens;
23
+ }
24
+
25
+ setTokens(tokens) {
26
+ this.tokens = tokens;
27
+ }
28
+
29
+ nodeAsString(node) {
30
+ const string = nodeAsString(node, this.tokens);
31
+
32
+ return string;
33
+ }
34
+
35
+ getFileContext() { return this.context.getFileContext(); }
36
+
37
+ getDepth() {
38
+ let depth = this.context.getDepth();
39
+
40
+ depth++;
41
+
42
+ return depth;
43
+ }
44
+
45
+ static fromNothing(context) {
46
+ const tokens = null,
47
+ literalContext = new LiteralContext(context, tokens);
48
+
49
+ return literalContext;
50
+ }
51
+ }
@@ -16,6 +16,18 @@ class NominalContext {
16
16
  return this.parser;
17
17
  }
18
18
 
19
+ getFileContext() {
20
+ const fileContext = null;
21
+
22
+ return fileContext;
23
+ }
24
+
25
+ getDepth() {
26
+ const depth = -1;
27
+
28
+ return depth;
29
+ }
30
+
19
31
  static fromNothing() {
20
32
  const lexer = nominalLexer, ///
21
33
  parser = nominalParser, ///