occam-verify-cli 0.0.527 → 0.0.529

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 (197) hide show
  1. package/README.md +4 -0
  2. package/bin/abbreviations.js +5 -1
  3. package/bin/action/help.js +4 -0
  4. package/bin/action/verify.js +35 -13
  5. package/bin/actions.js +11 -6
  6. package/bin/defaults.js +4 -0
  7. package/bin/options.js +4 -0
  8. package/bin/utilities/releaseContext.js +5 -7
  9. package/lib/axiom.js +3 -3
  10. package/lib/axiomLemmaTheoremConjecture.js +5 -5
  11. package/lib/combinator.js +4 -3
  12. package/lib/conclusion.js +8 -7
  13. package/lib/conjecture.js +3 -3
  14. package/lib/consequence.js +6 -5
  15. package/lib/constants.js +8 -12
  16. package/lib/constructor.js +5 -4
  17. package/lib/context/file.js +13 -35
  18. package/lib/context/metaproof.js +12 -11
  19. package/lib/context/proof.js +11 -10
  20. package/lib/context/release/directory.js +6 -6
  21. package/lib/context/release/file.js +15 -26
  22. package/lib/context/release.js +32 -51
  23. package/lib/equality.js +5 -4
  24. package/lib/index.js +4 -4
  25. package/lib/label.js +4 -3
  26. package/lib/lemma.js +3 -3
  27. package/lib/log.js +146 -0
  28. package/lib/matcher.js +14 -23
  29. package/lib/metaTypeNames.js +13 -0
  30. package/lib/mixins/logging.js +13 -13
  31. package/lib/node/metastatement/bracketed.js +16 -0
  32. package/lib/node/statement/bracketed.js +16 -0
  33. package/lib/node/statement/combinator/bracketed.js +17 -0
  34. package/lib/node/statement/combinator/equality.js +17 -0
  35. package/lib/node/statement/equality.js +16 -0
  36. package/lib/ocmbinator/bracketed.js +3 -4
  37. package/lib/ocmbinator/equality.js +3 -4
  38. package/lib/premise.js +10 -9
  39. package/lib/rule.js +5 -5
  40. package/lib/step/metaproof.js +28 -25
  41. package/lib/step/proof.js +15 -14
  42. package/lib/substitution/metastatementForMetavariable.js +16 -13
  43. package/lib/substitution/statementForMetavariable.js +17 -18
  44. package/lib/substitution/termForVariable.js +8 -18
  45. package/lib/supposition.js +7 -6
  46. package/lib/theorem.js +3 -3
  47. package/lib/type.js +5 -5
  48. package/lib/utilities/metaproof.js +60 -0
  49. package/lib/utilities/node.js +56 -0
  50. package/lib/utilities/proof.js +60 -0
  51. package/lib/utilities/releaseContext.js +24 -12
  52. package/lib/utilities/string.js +1 -32
  53. package/lib/{matcher → verifier}/metastatementForMetavariable/conclusion.js +12 -12
  54. package/lib/{matcher → verifier}/metastatementForMetavariable/premise.js +12 -12
  55. package/lib/verifier/metastatementForMetavariable.js +198 -0
  56. package/lib/{matcher → verifier}/statementForMetavariable/conclusion.js +12 -12
  57. package/lib/{matcher → verifier}/statementForMetavariable/premise.js +12 -12
  58. package/lib/verifier/statementForMetavariable.js +203 -0
  59. package/lib/{matcher → verifier}/termForVariable/consequence.js +12 -12
  60. package/lib/{matcher → verifier}/termForVariable/supposition.js +12 -12
  61. package/lib/verifier/termForVariable.js +198 -0
  62. package/lib/verifier.js +92 -0
  63. package/lib/verify/assertion/type.js +6 -8
  64. package/lib/verify/axiom.js +3 -5
  65. package/lib/verify/conclusion.js +2 -4
  66. package/lib/verify/conjecture.js +3 -5
  67. package/lib/verify/consequence.js +2 -4
  68. package/lib/verify/declaration/combinator.js +1 -3
  69. package/lib/verify/declaration/constructor.js +1 -3
  70. package/lib/verify/declaration/topLevel.js +1 -3
  71. package/lib/verify/declaration/type.js +1 -3
  72. package/lib/verify/declaration/variable.js +1 -3
  73. package/lib/verify/derivation.js +1 -5
  74. package/lib/verify/label.js +1 -3
  75. package/lib/verify/lemma.js +3 -5
  76. package/lib/verify/metastatement/qualified.js +2 -4
  77. package/lib/verify/metastatement/unqualified.js +2 -4
  78. package/lib/verify/metastatement.js +1 -3
  79. package/lib/verify/premise.js +2 -4
  80. package/lib/verify/proof.js +3 -5
  81. package/lib/verify/rule.js +3 -5
  82. package/lib/verify/ruleDerivation.js +1 -5
  83. package/lib/verify/ruleProof.js +3 -5
  84. package/lib/verify/statement/qualified.js +2 -4
  85. package/lib/verify/statement/unqualified.js +2 -4
  86. package/lib/verify/statement.js +14 -17
  87. package/lib/verify/statementAsCombinator.js +4 -6
  88. package/lib/verify/supposition.js +2 -4
  89. package/lib/verify/term.js +4 -10
  90. package/lib/verify/termAsConstructor.js +6 -9
  91. package/lib/verify/theorem.js +3 -5
  92. package/lib/verify/type.js +5 -9
  93. package/lib/verify/variable.js +5 -9
  94. package/package.json +1 -1
  95. package/src/axiom.js +1 -1
  96. package/src/axiomLemmaTheoremConjecture.js +4 -4
  97. package/src/combinator.js +3 -3
  98. package/src/conclusion.js +7 -7
  99. package/src/conjecture.js +1 -1
  100. package/src/consequence.js +5 -5
  101. package/src/constants.js +2 -3
  102. package/src/constructor.js +4 -4
  103. package/src/context/file.js +6 -30
  104. package/src/context/metaproof.js +13 -10
  105. package/src/context/proof.js +11 -9
  106. package/src/context/release/directory.js +7 -7
  107. package/src/context/release/file.js +17 -32
  108. package/src/context/release.js +23 -32
  109. package/src/equality.js +6 -8
  110. package/src/index.js +2 -1
  111. package/src/label.js +3 -3
  112. package/src/lemma.js +1 -1
  113. package/src/log.js +116 -0
  114. package/src/matcher.js +11 -9
  115. package/src/metaTypeNames.js +3 -0
  116. package/src/mixins/logging.js +6 -6
  117. package/src/node/metastatement/bracketed.js +9 -0
  118. package/src/node/statement/bracketed.js +9 -0
  119. package/src/node/statement/combinator/bracketed.js +10 -0
  120. package/src/node/statement/combinator/equality.js +11 -0
  121. package/src/node/statement/equality.js +10 -0
  122. package/src/ocmbinator/bracketed.js +2 -5
  123. package/src/ocmbinator/equality.js +2 -5
  124. package/src/premise.js +9 -9
  125. package/src/rule.js +4 -4
  126. package/src/step/metaproof.js +32 -29
  127. package/src/step/proof.js +15 -14
  128. package/src/substitution/metastatementForMetavariable.js +10 -15
  129. package/src/substitution/statementForMetavariable.js +12 -24
  130. package/src/substitution/termForVariable.js +2 -30
  131. package/src/supposition.js +6 -6
  132. package/src/theorem.js +1 -1
  133. package/src/type.js +4 -4
  134. package/src/utilities/metaproof.js +62 -0
  135. package/src/utilities/node.js +73 -0
  136. package/src/utilities/proof.js +62 -0
  137. package/src/utilities/releaseContext.js +30 -12
  138. package/src/utilities/string.js +0 -47
  139. package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
  140. package/src/verifier/metastatementForMetavariable/premise.js +9 -0
  141. package/src/{matcher → verifier}/metastatementForMetavariable.js +2 -2
  142. package/src/verifier/statementForMetavariable/conclusion.js +9 -0
  143. package/src/verifier/statementForMetavariable/premise.js +9 -0
  144. package/src/{matcher → verifier}/statementForMetavariable.js +2 -2
  145. package/src/verifier/termForVariable/consequence.js +9 -0
  146. package/src/verifier/termForVariable/supposition.js +9 -0
  147. package/src/{matcher → verifier}/termForVariable.js +2 -2
  148. package/src/verifier.js +74 -0
  149. package/src/verify/assertion/type.js +5 -11
  150. package/src/verify/axiom.js +2 -8
  151. package/src/verify/conclusion.js +1 -7
  152. package/src/verify/conjecture.js +2 -8
  153. package/src/verify/consequence.js +1 -7
  154. package/src/verify/declaration/combinator.js +0 -6
  155. package/src/verify/declaration/constructor.js +0 -6
  156. package/src/verify/declaration/topLevel.js +0 -6
  157. package/src/verify/declaration/type.js +0 -6
  158. package/src/verify/declaration/variable.js +0 -6
  159. package/src/verify/derivation.js +0 -12
  160. package/src/verify/label.js +0 -6
  161. package/src/verify/lemma.js +4 -10
  162. package/src/verify/metastatement/qualified.js +1 -7
  163. package/src/verify/metastatement/unqualified.js +1 -7
  164. package/src/verify/metastatement.js +0 -6
  165. package/src/verify/premise.js +1 -7
  166. package/src/verify/proof.js +1 -7
  167. package/src/verify/rule.js +2 -8
  168. package/src/verify/ruleDerivation.js +0 -12
  169. package/src/verify/ruleProof.js +1 -7
  170. package/src/verify/statement/qualified.js +1 -7
  171. package/src/verify/statement/unqualified.js +1 -7
  172. package/src/verify/statement.js +24 -34
  173. package/src/verify/statementAsCombinator.js +3 -9
  174. package/src/verify/supposition.js +1 -7
  175. package/src/verify/term.js +3 -21
  176. package/src/verify/termAsConstructor.js +5 -13
  177. package/src/verify/theorem.js +2 -8
  178. package/src/verify/type.js +4 -13
  179. package/src/verify/variable.js +4 -13
  180. package/bin/callbacks.js +0 -48
  181. package/lib/callbacks.js +0 -75
  182. package/lib/context/release/combinator.js +0 -64
  183. package/lib/matcher/metastatementForMetavariable.js +0 -198
  184. package/lib/matcher/statementForMetavariable.js +0 -203
  185. package/lib/matcher/termForVariable.js +0 -198
  186. package/lib/mixins/callbacks.js +0 -27
  187. package/lib/utilities/substitution.js +0 -60
  188. package/src/callbacks.js +0 -39
  189. package/src/context/release/combinator.js +0 -39
  190. package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
  191. package/src/matcher/metastatementForMetavariable/premise.js +0 -9
  192. package/src/matcher/statementForMetavariable/conclusion.js +0 -9
  193. package/src/matcher/statementForMetavariable/premise.js +0 -9
  194. package/src/matcher/termForVariable/consequence.js +0 -9
  195. package/src/matcher/termForVariable/supposition.js +0 -9
  196. package/src/mixins/callbacks.js +0 -15
  197. package/src/utilities/substitution.js +0 -81
@@ -2,8 +2,6 @@
2
2
 
3
3
  import ReleaseContext from "../../context/release";
4
4
 
5
- import { rewriteNodes } from "occam-grammar-utilities";
6
-
7
5
  import Rule from "../../rule";
8
6
  import Type from "../../type";
9
7
  import Axiom from "../../axiom";
@@ -18,8 +16,8 @@ import { customGrammarFromNameAndEntries } from "../../utilities/customGrammar";
18
16
  import { RULE_KIND, TYPE_KIND, AXIOM_KIND, LEMMA_KIND, THEOREM_KIND, CONJECTURE_KIND, COMBINATOR_KIND, CONSTRUCTOR_KIND } from "../../kinds";
19
17
 
20
18
  export default class FileReleaseContext extends ReleaseContext {
21
- constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors) {
22
- super(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts);
19
+ constructor(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors, contextJSON) {
20
+ super(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts);
23
21
 
24
22
  this.types = types;
25
23
  this.rules = rules;
@@ -29,7 +27,6 @@ export default class FileReleaseContext extends ReleaseContext {
29
27
  this.conjectures = conjectures;
30
28
  this.combinators = combinators;
31
29
  this.constructors = constructors;
32
-
33
30
  this.contextJSON = contextJSON;
34
31
  }
35
32
 
@@ -213,29 +210,17 @@ export default class FileReleaseContext extends ReleaseContext {
213
210
  return constructors;
214
211
  }
215
212
 
216
- nodeFromContentAndRuleName(content, ruleName) {
217
- const ruleMap = this.florenceParser.getRuleMap(),
218
- rule = ruleMap[ruleName],
219
- tokens = this.florenceLexer.tokenise(content),
220
- node = this.florenceParser.parse(tokens, rule);
221
-
222
- if (node !== null) {
223
- rewriteNodes(node);
224
- }
225
-
226
- return node;
227
- }
228
-
229
213
  fromJSON() {
230
214
  const jsonArray = this.contextJSON,
231
- releaseContext = this; ///
215
+ lexer = this.getLexer(),
216
+ parser = this.getParser();
232
217
 
233
218
  jsonArray.forEach((json) => {
234
219
  const { kind } = json;
235
220
 
236
221
  switch (kind) {
237
222
  case TYPE_KIND: {
238
- const type = Type.fromJSON(json, releaseContext);
223
+ const type = Type.fromJSON(json, lexer, parser);
239
224
 
240
225
  this.types.push(type);
241
226
 
@@ -243,7 +228,7 @@ export default class FileReleaseContext extends ReleaseContext {
243
228
  }
244
229
 
245
230
  case RULE_KIND: {
246
- const rule = Rule.fromJSON(json, releaseContext);
231
+ const rule = Rule.fromJSON(json, lexer, parser);
247
232
 
248
233
  this.rules.push(rule);
249
234
 
@@ -251,7 +236,7 @@ export default class FileReleaseContext extends ReleaseContext {
251
236
  }
252
237
 
253
238
  case AXIOM_KIND: {
254
- const axiom = Axiom.fromJSON(json, releaseContext);
239
+ const axiom = Axiom.fromJSON(json, lexer, parser);
255
240
 
256
241
  this.axioms.push(axiom);
257
242
 
@@ -259,7 +244,7 @@ export default class FileReleaseContext extends ReleaseContext {
259
244
  }
260
245
 
261
246
  case LEMMA_KIND: {
262
- const lemma = Lemma.fromJSON(json, releaseContext);
247
+ const lemma = Lemma.fromJSON(json, lexer, parser);
263
248
 
264
249
  this.lemmas.push(lemma);
265
250
 
@@ -267,7 +252,7 @@ export default class FileReleaseContext extends ReleaseContext {
267
252
  }
268
253
 
269
254
  case THEOREM_KIND: {
270
- const theorem = Theorem.fromJSON(json, releaseContext);
255
+ const theorem = Theorem.fromJSON(json, lexer, parser);
271
256
 
272
257
  this.theorems.push(theorem);
273
258
 
@@ -275,7 +260,7 @@ export default class FileReleaseContext extends ReleaseContext {
275
260
  }
276
261
 
277
262
  case CONJECTURE_KIND: {
278
- const conjecture = Conjecture.fromJSON(json, releaseContext);
263
+ const conjecture = Conjecture.fromJSON(json, lexer, parser);
279
264
 
280
265
  this.conjectures.push(conjecture);
281
266
 
@@ -283,7 +268,7 @@ export default class FileReleaseContext extends ReleaseContext {
283
268
  }
284
269
 
285
270
  case COMBINATOR_KIND: {
286
- const combinator = Combinator.fromJSON(json, releaseContext);
271
+ const combinator = Combinator.fromJSON(json, lexer, parser);
287
272
 
288
273
  this.combinators.push(combinator);
289
274
 
@@ -291,7 +276,7 @@ export default class FileReleaseContext extends ReleaseContext {
291
276
  }
292
277
 
293
278
  case CONSTRUCTOR_KIND: {
294
- const constructor = Constructor.fromJSON(json, releaseContext);
279
+ const constructor = Constructor.fromJSON(json, lexer, parser);
295
280
 
296
281
  this.constructors.push(constructor);
297
282
 
@@ -307,11 +292,11 @@ export default class FileReleaseContext extends ReleaseContext {
307
292
  this.fromJSON();
308
293
  }
309
294
 
310
- static fromLogNameEntriesCallbacksAndContextJSON(log, name, entries, callbacks, contextJSON) {
311
- const verified = true,
295
+ static fromLogNameEntriesAndContextJSON(log, name, entries, contextJSON) {
296
+ const lexer = null,
297
+ parser = null,
298
+ verified = true,
312
299
  customGrammar = customGrammarFromNameAndEntries(name, entries),
313
- florenceLexer = null,
314
- florenceParser = null,
315
300
  dependencyReleaseContexts = null,
316
301
  types = [],
317
302
  rules = [],
@@ -321,7 +306,7 @@ export default class FileReleaseContext extends ReleaseContext {
321
306
  conjectures = [],
322
307
  combinators = [],
323
308
  constructors = [],
324
- releaseContext = new FileReleaseContext(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts, contextJSON, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors);
309
+ releaseContext = new FileReleaseContext(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors, contextJSON);
325
310
 
326
311
  return releaseContext;
327
312
  }
@@ -8,20 +8,19 @@ const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
8
8
  { florenceParserFromCombinedCustomGrammar } = parsersUtilities;
9
9
 
10
10
  export default class ReleaseContext {
11
- constructor(log, name, entries, callbacks, verified, customGrammar, florenceLexer, florenceParser, dependencyReleaseContexts) {
11
+ constructor(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts) {
12
12
  this.log = log;
13
13
  this.name = name;
14
14
  this.entries = entries;
15
- this.callbacks = callbacks;
15
+ this.lexer = lexer;
16
+ this.parser = parser;
16
17
  this.verified = verified;
17
18
  this.customGrammar = customGrammar;
18
- this.florenceLexer = florenceLexer;
19
- this.florenceParser = florenceParser;
20
19
  this.dependencyReleaseContexts = dependencyReleaseContexts;
21
20
  }
22
21
 
23
22
  getLog() {
24
- return this.log;
23
+ return log;
25
24
  }
26
25
 
27
26
  getName() {
@@ -32,8 +31,12 @@ export default class ReleaseContext {
32
31
  return this.entries;
33
32
  }
34
33
 
35
- getCallbacks() {
36
- return this.callbacks;
34
+ getLexer() {
35
+ return this.lexer;
36
+ }
37
+
38
+ getParser() {
39
+ return this.parser;
37
40
  }
38
41
 
39
42
  isVerified() {
@@ -44,14 +47,6 @@ export default class ReleaseContext {
44
47
  return this.customGrammar;
45
48
  }
46
49
 
47
- getFlorenceLexer() {
48
- return this.florenceLexer;
49
- }
50
-
51
- getFlorenceParser() {
52
- return this.florenceParser;
53
- }
54
-
55
50
  getDependencyReleaseContexts() {
56
51
  return this.dependencyReleaseContexts;
57
52
  }
@@ -96,27 +91,21 @@ export default class ReleaseContext {
96
91
  this.verified = verified;
97
92
  }
98
93
 
99
- tokenise(content) { return this.florenceLexer.tokenise(content); }
100
-
101
- parse(tokens) { return this.florenceParser.parse(tokens); }
102
-
103
- trace(message) { this.log.trace(message); }
104
-
105
- debug(message) { this.log.debug(message); }
94
+ tokenise(content) { return this.lexer.tokenise(content); }
106
95
 
107
- info(message) { this.log.info(message); }
96
+ parse(tokens) { return this.parser.parse(tokens); }
108
97
 
109
- warning(message) { this.log.warning(message); }
98
+ trace(message, node = null, tokens = null, filePath = null) { this.log.trace(message, node, tokens, filePath); }
110
99
 
111
- error(message) { this.log.error(message); }
100
+ debug(message, node = null, tokens = null, filePath = null) { this.log.debug(message, node, tokens, filePath); }
112
101
 
113
- fatal(message) { this.log.fatal(message); }
102
+ info(message, node = null, tokens = null, filePath = null) { this.log.info(message, node, tokens, filePath); }
114
103
 
115
- halt(filePath, leastLineIndex, greatestLineIndex) { this.callbacks.halt(filePath, leastLineIndex, greatestLineIndex); }
104
+ warning(message, node = null, tokens = null, filePath = null) { this.log.warning(message, node, tokens, filePath); }
116
105
 
117
- begin(filePath, leastLineIndex, greatestLineIndex) { this.callbacks.begin(filePath, leastLineIndex, greatestLineIndex); }
106
+ error(message, node = null, tokens = null, filePath = null) { this.log.error(message, node, tokens, filePath); }
118
107
 
119
- complete(filePath, leastLineIndex, greatestLineIndex) { this.callbacks.complete(filePath, leastLineIndex, greatestLineIndex); }
108
+ fatal(message, node = null, tokens = null, filePath = null) { this.log.fatal(message, node, tokens, filePath); }
120
109
 
121
110
  initialise(dependencyReleaseContexts) {
122
111
  const releaseContext = this, ///
@@ -124,11 +113,13 @@ export default class ReleaseContext {
124
113
  releaseContext,
125
114
  ...dependencyReleaseContexts
126
115
  ],
127
- combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts);
116
+ combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts),
117
+ florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar),
118
+ florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
128
119
 
129
- this.florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar);
120
+ this.lexer = florenceLexer; ///
130
121
 
131
- this.florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
122
+ this.parser = florenceParser; ///
132
123
 
133
124
  this.dependencyReleaseContexts = dependencyReleaseContexts;
134
125
  }
package/src/equality.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ import matcher from "./matcher";
3
4
  import verifyTerm from "./verify/term";
4
5
  import equalityCombinator from "./ocmbinator/equality";
6
+ import equalityStatementNode from "./node/statement/equality";
5
7
 
6
- import { matcher } from "./matcher";
7
8
  import { nodeQuery } from "./utilities/query";
8
9
  import { first, second } from "./utilities/array";
9
10
  import { EQUALITY_DEPTH } from "./constants";
@@ -93,13 +94,10 @@ export default class Equality {
93
94
  const statementNode = proofStep.getStatementNode();
94
95
 
95
96
  if (statementNode !== null) {
96
- const combinator = equalityCombinator, ///
97
- combinatorStatementNode = combinator.getStatementNode(), ///
98
- substitutions = null,
97
+ const nodeA = statementNode, ///
98
+ nodeB = equalityStatementNode, ///
99
99
  depth = EQUALITY_DEPTH,
100
- nodeA = statementNode, ///
101
- nodeB = combinatorStatementNode, ///
102
- nodeMatches = matcher.matchNode(nodeA, nodeB, substitutions, depth);
100
+ nodeMatches = matcher.matchNode(nodeA, nodeB, depth);
103
101
 
104
102
  if (nodeMatches) {
105
103
  const leftTermNode = leftTermNodeQuery(statementNode),
@@ -271,7 +269,7 @@ function equalityFromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, c
271
269
  leftTermTypeName = leftTermType.getName(),
272
270
  rightTermTypeName = rightTermType.getName();
273
271
 
274
- context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to the right '${rightTermString}' term's '${rightTermTypeName}' type.'`);
272
+ context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to the right '${rightTermString}' term's '${rightTermTypeName}' type.'`, leftTermNode);
275
273
  }
276
274
  }
277
275
 
package/src/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
- export { default as Callbacks } from "./callbacks";
3
+ export { default as Log } from "./log";
4
+
4
5
  export { default as verifyRelease } from "./verify/release";
5
6
  export { default as ReleaseContext } from "./context/release";
6
7
  export { default as FileReleaseContext } from "./context/release/file";
package/src/label.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { nodeAsString } from "./utilities/string";
4
4
  import { labelNameFromLabelNode } from "./utilities/query";
5
- import { labelNodeFromLabelString } from "./utilities/string";
5
+ import { labelNodeFromLabelString } from "./utilities/node";
6
6
 
7
7
  export default class Label {
8
8
  constructor(node) {
@@ -34,9 +34,9 @@ export default class Label {
34
34
  return json;
35
35
  }
36
36
 
37
- static fromJSON(json, releaseContext) {
37
+ static fromJSON(json, lexer, parser) {
38
38
  const labelString = json, ///
39
- labelNode = labelNodeFromLabelString(labelString, releaseContext),
39
+ labelNode = labelNodeFromLabelString(labelString, lexer, parser),
40
40
  node = labelNode, ///
41
41
  label = new Label(node);
42
42
 
package/src/lemma.js CHANGED
@@ -7,7 +7,7 @@ import { LEMMA_KIND } from "./kinds";
7
7
  export default class Lemma extends AxiomLemmaTheoremConjecture {
8
8
  static kind = LEMMA_KIND;
9
9
 
10
- static fromJSON(json, releaseContext) { return AxiomLemmaTheoremConjecture.fromJSON(Lemma, json, releaseContext); }
10
+ static fromJSON(json, lexer, parser) { return AxiomLemmaTheoremConjecture.fromJSON(Lemma, json, lexer, parser); }
11
11
 
12
12
  static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Lemma, labels, suppositions, consequence); }
13
13
  }
package/src/log.js ADDED
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ import { levels } from "necessary";
4
+
5
+ import { leastLineIndexFromNodeAndTokens, greatestLineIndexFromNodeAndTokens } from "./utilities/tokens";
6
+
7
+ const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL, FATAL_LEVEL } = levels;
8
+
9
+ export default class Log {
10
+ constructor(messages, logLevel, follow) {
11
+ this.messages = messages;
12
+ this.logLevel = logLevel;
13
+ this.follow = follow;
14
+ }
15
+
16
+ getMessages() {
17
+ return this.messages;
18
+ }
19
+
20
+ getLogLevel() {
21
+ return this.logLevel;
22
+ }
23
+
24
+ getFollow() {
25
+ return this.follow;
26
+ }
27
+
28
+ trace(message, node, tokens, filePath) {
29
+ const level = TRACE_LEVEL;
30
+
31
+ this.write(level, message, node, tokens, filePath);
32
+ }
33
+
34
+ debug(message, node, tokens, filePath) {
35
+ const level = DEBUG_LEVEL;
36
+
37
+ this.write(level, message, node, tokens, filePath);
38
+ }
39
+
40
+ info(message, node, tokens, filePath) {
41
+ const level = INFO_LEVEL;
42
+
43
+ this.write(level, message, node, tokens, filePath);
44
+ }
45
+
46
+ warning(message, node, tokens, filePath) {
47
+ const level = WARNING_LEVEL;
48
+
49
+ this.write(level, message, node, tokens, filePath);
50
+ }
51
+
52
+ error(message, node, tokens, filePath) {
53
+ const level = ERROR_LEVEL;
54
+
55
+ this.write(level, message, node, tokens, filePath);
56
+ }
57
+
58
+ fatal(message, node, tokens, filePath) {
59
+ const level = FATAL_LEVEL;
60
+
61
+ this.write(level, message, node, tokens, filePath);
62
+ }
63
+
64
+ write(level, message, node, tokens, filePath) {
65
+ const levels = [
66
+ TRACE_LEVEL,
67
+ DEBUG_LEVEL,
68
+ INFO_LEVEL,
69
+ WARNING_LEVEL,
70
+ ERROR_LEVEL,
71
+ FATAL_LEVEL,
72
+ ],
73
+ levelIndex = levels.indexOf(level),
74
+ logLevelIndex = levels.indexOf(this.logLevel);
75
+
76
+ if (levelIndex < logLevelIndex) {
77
+ return;
78
+ }
79
+
80
+ message = formatMessage(level, message, node, tokens, filePath); ///
81
+
82
+ this.follow ?
83
+ console.log(message) :
84
+ this.messages.push(message);
85
+ }
86
+
87
+ static followAndLogLevel(follow, logLevel) {
88
+ const messages = follow ?
89
+ null :
90
+ [],
91
+ log = new Log(messages, logLevel, follow);
92
+
93
+ return log;
94
+ }
95
+ }
96
+
97
+ function formatMessage(level, message, node, tokens, filePath) {
98
+ const upperCaseLevel = level.toUpperCase();
99
+
100
+ if (node === null) {
101
+ message = `${upperCaseLevel}: ${message}`;
102
+ } else {
103
+ const leastLineIndex = leastLineIndexFromNodeAndTokens(node, tokens),
104
+ greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens);
105
+
106
+ if (leastLineIndex === greatestLineIndex) {
107
+ const lineIndex = leastLineIndex; ///
108
+
109
+ message = `${upperCaseLevel}: ${filePath} (${lineIndex}) - ${message}`;
110
+ } else {
111
+ message = `${upperCaseLevel}: ${filePath} (${leastLineIndex}-${greatestLineIndex}) - ${message}`;
112
+ }
113
+ }
114
+
115
+ return message;
116
+ }
package/src/matcher.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- export default class Matcher {
4
- matchNode(nodeA, nodeB, substitutions, depth = Infinity) {
3
+ class Matcher {
4
+ matchNode(nodeA, nodeB, depth = Infinity) {
5
5
  let nodeMatches = false;
6
6
 
7
7
  if (depth === 0) {
@@ -20,7 +20,7 @@ export default class Matcher {
20
20
  } else {
21
21
  const nonTerminalNodeA = nodeA, ///
22
22
  nonTerminalNodeB = nodeB, ///
23
- nonTerminalNodeMatches = this.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, depth);
23
+ nonTerminalNodeMatches = this.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, depth);
24
24
 
25
25
  nodeMatches = nonTerminalNodeMatches; ///
26
26
  }
@@ -30,7 +30,7 @@ export default class Matcher {
30
30
  return nodeMatches;
31
31
  }
32
32
 
33
- matchNodes(nodesA, nodesB, substitutions, depth = Infinity) {
33
+ matchNodes(nodesA, nodesB, depth) {
34
34
  let nodesMatch = false;
35
35
 
36
36
  const nodesALength = nodesA.length,
@@ -41,7 +41,7 @@ export default class Matcher {
41
41
 
42
42
  nodesMatch = nodesA.every((nodeA, index) => {
43
43
  const nodeB = nodesB[index],
44
- nodeMatches = this.matchNode(nodeA, nodeB, substitutions, depth);
44
+ nodeMatches = this.matchNode(nodeA, nodeB, depth);
45
45
 
46
46
  if (nodeMatches) {
47
47
  return true;
@@ -52,14 +52,14 @@ export default class Matcher {
52
52
  return nodesMatch;
53
53
  }
54
54
 
55
- matchTerminalNode(terminalNodeA, terminalNodeB, substitutions, depth) {
55
+ matchTerminalNode(terminalNodeA, terminalNodeB, depth) {
56
56
  const matches = terminalNodeA.match(terminalNodeB),
57
57
  terminalNodeMatches = matches; ///
58
58
 
59
59
  return terminalNodeMatches;
60
60
  }
61
61
 
62
- matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, depth = Infinity) {
62
+ matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, depth) {
63
63
  let nonTerminalNodeMatches = false;
64
64
 
65
65
  const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
@@ -70,7 +70,7 @@ export default class Matcher {
70
70
  nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
71
71
  nodesA = nonTerminalNodeAChildNodes, ///
72
72
  nodesB = nonTerminalNodeBChildNodes, ///
73
- nodesMatch = this.matchNodes(nodesA, nodesB, substitutions, depth);
73
+ nodesMatch = this.matchNodes(nodesA, nodesB, depth);
74
74
 
75
75
  nonTerminalNodeMatches = nodesMatch; ///
76
76
  }
@@ -79,4 +79,6 @@ export default class Matcher {
79
79
  }
80
80
  }
81
81
 
82
- export const matcher = new Matcher();
82
+ const matcher = new Matcher();
83
+
84
+ export default matcher;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ export const STATEMENT_META_TYPE_NAME = "Statement";
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
 
3
- function trace(message) { this.context.trace(message); }
3
+ function trace(node, message) { this.context.trace(node, message); }
4
4
 
5
- function debug(message) { this.context.debug(message); }
5
+ function debug(node, message) { this.context.debug(node, message); }
6
6
 
7
- function info(message) { this.context.info(message); }
7
+ function info(node, message) { this.context.info(node, message); }
8
8
 
9
- function warning(message) { this.context.warning(message); }
9
+ function warning(node, message) { this.context.warning(node, message); }
10
10
 
11
- function error(message) { this.context.error(message); }
11
+ function error(node, message) { this.context.error(node, message); }
12
12
 
13
- function fatal(message) { this.context.fatal(message); }
13
+ function fatal(node, message) { this.context.fatal(node, message); }
14
14
 
15
15
  const loggingMixins = {
16
16
  trace,
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import { metastatementNodeFromMetastatementString } from "../../utilities/node";
4
+
5
+ const bracketedMetastatementString = "(A)";
6
+
7
+ const bracketedMetastatementNode = metastatementNodeFromMetastatementString(bracketedMetastatementString);
8
+
9
+ export default bracketedMetastatementNode;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import { statementNodeFromStatementString } from "../../utilities/node";
4
+
5
+ const bracketedStatementString = "(n=m)";
6
+
7
+ const bracketedStatementNode = statementNodeFromStatementString(bracketedStatementString);
8
+
9
+ export default bracketedStatementNode;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ import { STATEMENT_META_TYPE_NAME } from "../../../metaTypeNames";
4
+ import { statementNodeFromStatementString } from "../../../utilities/node";
5
+
6
+ const bracketedCombinatorStatementString = `(${STATEMENT_META_TYPE_NAME})`;
7
+
8
+ const bracketedCombinatorStatementNode = statementNodeFromStatementString(bracketedCombinatorStatementString);
9
+
10
+ export default bracketedCombinatorStatementNode;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import { OBJECT_TYPE_NAME } from "../../../typeNames";
4
+ import { statementNodeFromStatementString } from "../../../utilities/node";
5
+
6
+ const equalityCombinatorStatementString = `${OBJECT_TYPE_NAME} = ${OBJECT_TYPE_NAME}`;
7
+
8
+ const equalityCombinatorStatementNode = statementNodeFromStatementString(equalityCombinatorStatementString);
9
+
10
+ export default equalityCombinatorStatementNode;
11
+
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ import { statementNodeFromStatementString } from "../../utilities/node";
4
+
5
+ const equalityStatementString = "n=m";
6
+
7
+ const equalityStatementNode = statementNodeFromStatementString(equalityStatementString);
8
+
9
+ export default equalityStatementNode;
10
+
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  import Combinator from "../combinator";
4
- import combinatorReleaseContext from "../context/release/combinator";
5
4
 
6
- import { statementNodeFromStatementString } from "../utilities/string";
5
+ import bracketedCombinatorStatementNode from "../node/statement/combinator/bracketed";
7
6
 
8
7
  class BracketedCombinator extends Combinator {
9
8
  static fromNothing() {
10
- const statementString = "(Statement)",
11
- releaseContext = combinatorReleaseContext, ///
12
- statementNode = statementNodeFromStatementString(statementString, releaseContext),
9
+ const statementNode = bracketedCombinatorStatementNode, ///
13
10
  bracketedCombinator = new BracketedCombinator(statementNode);
14
11
 
15
12
  return bracketedCombinator;
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  import Combinator from "../combinator";
4
- import CombinatorReleaseContext from "../context/release/combinator";
5
4
 
6
- import { statementNodeFromStatementString } from "../utilities/string";
5
+ import equalityCombinatorStatementNode from "../node/statement/combinator/equality";
7
6
 
8
7
  class EqualityCombinator extends Combinator {
9
8
  static fromNothing() {
10
- const statementString = "Object = Object",
11
- releaseContext = CombinatorReleaseContext, ///
12
- statementNode = statementNodeFromStatementString(statementString, releaseContext),
9
+ const statementNode = equalityCombinatorStatementNode, ///
13
10
  equalityCombinator = new EqualityCombinator(statementNode);
14
11
 
15
12
  return equalityCombinator;