occam-verify-cli 0.0.864 → 0.0.866

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 (87) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +7 -7
  2. package/lib/context/file.js +162 -60
  3. package/lib/context/local.js +4 -4
  4. package/lib/context/release.js +32 -1
  5. package/lib/label.js +6 -6
  6. package/lib/metaConsequent.js +88 -0
  7. package/lib/metaLemma.js +126 -0
  8. package/lib/metaLemmaMetatheorem.js +196 -0
  9. package/lib/metaSupposition.js +140 -0
  10. package/lib/metaType.js +33 -3
  11. package/lib/metaTypeNames.js +13 -4
  12. package/lib/metaTypes.js +9 -4
  13. package/lib/metatheorem.js +126 -0
  14. package/lib/mixins/context.js +30 -22
  15. package/lib/rule.js +7 -7
  16. package/lib/ruleNames.js +5 -1
  17. package/lib/step/metaproof.js +18 -4
  18. package/lib/type.js +9 -1
  19. package/lib/utilities/name.js +52 -0
  20. package/lib/utilities/query.js +1 -38
  21. package/lib/verifier/node/metastatement.js +3 -3
  22. package/lib/verifier/nodes/statementAgainstCombinator.js +4 -4
  23. package/lib/verifier/nodes/termAgainstConstructor.js +3 -3
  24. package/lib/verifier/nodes.js +10 -10
  25. package/lib/verify/declaration/metavariable.js +4 -4
  26. package/lib/verify/declaration/topLevel.js +11 -3
  27. package/lib/verify/givenMetavariable.js +31 -0
  28. package/lib/verify/givenType.js +2 -3
  29. package/lib/verify/label.js +3 -4
  30. package/lib/verify/metaConsequent.js +36 -0
  31. package/lib/verify/metaDerivation.js +111 -0
  32. package/lib/verify/metaLemma.js +51 -0
  33. package/lib/verify/metaSupposition.js +40 -0
  34. package/lib/verify/metaSuppositions.js +28 -0
  35. package/lib/verify/metaproof.js +34 -0
  36. package/lib/verify/metastatement/qualified.js +2 -2
  37. package/lib/verify/metatheorem.js +50 -0
  38. package/lib/verify/metavariable.js +30 -10
  39. package/lib/verify/proof.js +3 -3
  40. package/lib/verify/statement/qualified.js +28 -28
  41. package/lib/verify/termAsConstructor.js +4 -5
  42. package/lib/verify/type.js +18 -20
  43. package/lib/verify/variable.js +13 -16
  44. package/package.json +4 -4
  45. package/src/axiomLemmaTheoremConjecture.js +6 -6
  46. package/src/context/file.js +187 -73
  47. package/src/context/local.js +1 -1
  48. package/src/context/release.js +37 -0
  49. package/src/label.js +4 -6
  50. package/src/metaConsequent.js +58 -0
  51. package/src/metaLemma.js +9 -0
  52. package/src/metaLemmaMetatheorem.js +194 -0
  53. package/src/metaSupposition.js +103 -0
  54. package/src/metaType.js +23 -3
  55. package/src/metaTypeNames.js +1 -0
  56. package/src/metaTypes.js +8 -1
  57. package/src/metatheorem.js +9 -0
  58. package/src/mixins/context.js +20 -14
  59. package/src/rule.js +6 -6
  60. package/src/ruleNames.js +1 -0
  61. package/src/step/metaproof.js +20 -4
  62. package/src/type.js +10 -0
  63. package/src/utilities/name.js +50 -0
  64. package/src/utilities/query.js +0 -47
  65. package/src/verifier/node/metastatement.js +2 -1
  66. package/src/verifier/nodes/statementAgainstCombinator.js +3 -3
  67. package/src/verifier/nodes/termAgainstConstructor.js +3 -4
  68. package/src/verifier/nodes.js +9 -9
  69. package/src/verify/declaration/metavariable.js +4 -3
  70. package/src/verify/declaration/topLevel.js +14 -0
  71. package/src/verify/givenMetavariable.js +31 -0
  72. package/src/verify/givenType.js +1 -4
  73. package/src/verify/label.js +2 -5
  74. package/src/verify/metaConsequent.js +36 -0
  75. package/src/verify/metaDerivation.js +151 -0
  76. package/src/verify/metaLemma.js +67 -0
  77. package/src/verify/metaSupposition.js +44 -0
  78. package/src/verify/metaSuppositions.js +17 -0
  79. package/src/verify/metaproof.js +32 -0
  80. package/src/verify/metastatement/qualified.js +2 -3
  81. package/src/verify/metatheorem.js +62 -0
  82. package/src/verify/metavariable.js +46 -16
  83. package/src/verify/proof.js +2 -2
  84. package/src/verify/statement/qualified.js +27 -23
  85. package/src/verify/termAsConstructor.js +4 -6
  86. package/src/verify/type.js +20 -22
  87. package/src/verify/variable.js +14 -17
@@ -5,23 +5,21 @@ import Axiom from "../axiom";
5
5
  import Lemma from "../lemma";
6
6
  import Theorem from "../theorem";
7
7
  import Variable from "../variable";
8
+ import metaTypes from "../metaTypes";
9
+ import MetaLemma from "../metaLemma";
8
10
  import Conjecture from "../conjecture";
9
11
  import Combinator from "../combinator";
10
12
  import Constructor from "../constructor";
13
+ import Metatheorem from "../metatheorem";
11
14
  import Metavariable from "../metavariable";
12
15
 
13
16
  import { push } from "../utilities/array";
14
17
  import { objectType } from "../type";
15
- import { statementMetaType } from "../metaType";
16
18
  import { typeFromJSONAndFileContext } from "../type";
17
19
  import { nodeAsString, nodesAsString } from "../utilities/string";
18
20
 
19
- const metaTypes = [
20
- statementMetaType
21
- ];
22
-
23
21
  export default class FileContext {
24
- constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, conjectures, combinators, constructors, metavariables) {
22
+ constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, constructors, metatheorems, metavariables) {
25
23
  this.releaseContext = releaseContext;
26
24
  this.filePath = filePath;
27
25
  this.tokens = tokens;
@@ -32,9 +30,11 @@ export default class FileContext {
32
30
  this.lemmas = lemmas;
33
31
  this.theorems = theorems;
34
32
  this.variables = variables;
33
+ this.metaLemmas = metaLemmas;
35
34
  this.conjectures = conjectures;
36
35
  this.combinators = combinators;
37
36
  this.constructors = constructors;
37
+ this.metatheorems = metatheorems;
38
38
  this.metavariables = metavariables;
39
39
  }
40
40
 
@@ -198,6 +198,20 @@ export default class FileContext {
198
198
  return this.variables;
199
199
  }
200
200
 
201
+ getMetaLemmas(includeRelease = true) {
202
+ const metaLemmas = [];
203
+
204
+ push(metaLemmas, this.metaLemmas);
205
+
206
+ if (includeRelease) {
207
+ const releaseContextMetaLemmas = this.releaseContext.getMetaLemmas();
208
+
209
+ push(metaLemmas, releaseContextMetaLemmas);
210
+ }
211
+
212
+ return metaLemmas;
213
+ }
214
+
201
215
  getMetaTypes(includeRelease = true) {
202
216
  return metaTypes;
203
217
  }
@@ -244,31 +258,47 @@ export default class FileContext {
244
258
  return constructors;
245
259
  }
246
260
 
261
+ getMetatheorems(includeRelease = true) {
262
+ const metatheorems = [];
263
+
264
+ push(metatheorems, this.metatheorems);
265
+
266
+ if (includeRelease) {
267
+ const releaseContextMetatheorems = this.releaseContext.getMetatheorems();
268
+
269
+ push(metatheorems, releaseContextMetatheorems);
270
+ }
271
+
272
+ return metatheorems;
273
+ }
274
+
247
275
  getMetavariables(includeRelease = true) {
248
276
  return this.metavariables;
249
277
  }
250
278
 
251
- findLabelByLabelName(labelName) {
252
- const name = labelName, ///
253
- labels = this.getLabels(),
254
- label = labels.find((label) => {
255
- const matches = label.matchName(name);
279
+ findTypeByTypeName(typeName) {
280
+ let types = this.getTypes();
256
281
 
257
- if (matches) {
258
- return true;
259
- }
260
- }) || null;
282
+ types.push(objectType);
261
283
 
262
- return label;
284
+ const type = types.find((type) => {
285
+ const matches = type.matchTypeName(typeName);
286
+
287
+ if (matches) {
288
+ return true;
289
+ }
290
+ }) || null;
291
+
292
+ return type;
263
293
  }
264
294
 
265
- findTypeByTypeName(typeName) {
295
+ findTypeByTypeNode(typeNode) {
266
296
  let types = this.getTypes();
267
297
 
268
298
  types.push(objectType);
269
299
 
270
300
  const type = types.find((type) => {
271
- const matches = type.matchTypeName(typeName);
301
+ const matches = type.matchTypeNode(typeNode);
272
302
 
273
303
  if (matches) {
274
304
  return true;
@@ -278,13 +308,27 @@ export default class FileContext {
278
308
  return type;
279
309
  }
280
310
 
281
- findRuleByReferenceName(referenceName) {
282
- const labelName = referenceName, ///
311
+ findLabelByLabelNode(labelNode) {
312
+ const name = labelNode, ///
313
+ labels = this.getLabels(),
314
+ label = labels.find((label) => {
315
+ const matches = label.matchNode(name);
316
+
317
+ if (matches) {
318
+ return true;
319
+ }
320
+ }) || null;
321
+
322
+ return label;
323
+ }
324
+
325
+ findRuleByReferenceNode(referenceNode) {
326
+ const labelNode = referenceNode, ///
283
327
  rules = this.getRules(),
284
328
  rule = rules.find((rule) => {
285
- const ruleMatchesLabelName = rule.matchLabelName(labelName);
329
+ const ruleMatchesLabelNode = rule.matchLabelNode(labelNode);
286
330
 
287
- if (ruleMatchesLabelName) {
331
+ if (ruleMatchesLabelNode) {
288
332
  return true;
289
333
  }
290
334
  }) || null;
@@ -292,13 +336,13 @@ export default class FileContext {
292
336
  return rule;
293
337
  }
294
338
 
295
- findAxiomByReferenceName(referenceName) {
296
- const labelName = referenceName, ///
339
+ findAxiomByReferenceNode(referenceNode) {
340
+ const labelNode = referenceNode, ///
297
341
  axioms = this.getAxioms(),
298
342
  axiom = axioms.find((axiom) => {
299
- const axiomMatchesLabelName = axiom.matchLabelName(labelName);
343
+ const axiomMatchesLabelNode = axiom.matchLabelNode(labelNode);
300
344
 
301
- if (axiomMatchesLabelName) {
345
+ if (axiomMatchesLabelNode) {
302
346
  return true;
303
347
  }
304
348
  }) || null;
@@ -306,13 +350,13 @@ export default class FileContext {
306
350
  return axiom;
307
351
  }
308
352
 
309
- findLemmaByReferenceName(referenceName) {
310
- const labelName = referenceName, ///
353
+ findLemmaByReferenceNode(referenceNode) {
354
+ const labelNode = referenceNode, ///
311
355
  lemmas = this.getLemmas(),
312
356
  lemma = lemmas.find((lemma) => {
313
- const lemmaMatchesLabelName = lemma.matchLabelName(labelName);
357
+ const lemmaMatchesLabelNode = lemma.matchLabelNode(labelNode);
314
358
 
315
- if (lemmaMatchesLabelName) {
359
+ if (lemmaMatchesLabelNode) {
316
360
  return true;
317
361
  }
318
362
  }) || null;
@@ -320,13 +364,13 @@ export default class FileContext {
320
364
  return lemma;
321
365
  }
322
366
 
323
- findTheoremByReferenceName(referenceName) {
324
- const labelName = referenceName, ///
367
+ findTheoremByReferenceNode(referenceNode) {
368
+ const labelNode = referenceNode, ///
325
369
  theorems = this.getTheorems(),
326
370
  theorem = theorems.find((theorem) => {
327
- const theoremMatchesLabelName = theorem.matchLabelName(labelName);
371
+ const theoremMatchesLabelNode = theorem.matchLabelNode(labelNode);
328
372
 
329
- if (theoremMatchesLabelName) {
373
+ if (theoremMatchesLabelNode) {
330
374
  return true;
331
375
  }
332
376
  }) || null;
@@ -334,6 +378,20 @@ export default class FileContext {
334
378
  return theorem;
335
379
  }
336
380
 
381
+ findMetaLemmaByReferenceNode(referenceNode) {
382
+ const labelNode = referenceNode, ///
383
+ metaLemmas = this.getMetaLemmas(),
384
+ metaLemma = metaLemmas.find((metaLemma) => {
385
+ const metaLemmaMatchesLabelNode = metaLemma.matchLabelNode(labelNode);
386
+
387
+ if (metaLemmaMatchesLabelNode) {
388
+ return true;
389
+ }
390
+ }) || null;
391
+
392
+ return metaLemma;
393
+ }
394
+
337
395
  findVariableByVariableNode(variableNode) {
338
396
  const node = variableNode, ///
339
397
  variables = this.getVariables(),
@@ -348,10 +406,10 @@ export default class FileContext {
348
406
  return variable;
349
407
  }
350
408
 
351
- findMetaTypeByMetaTypeName(metaTypeName) {
409
+ findMetaTypeByMetaTypeNode(metaTypeNode) {
352
410
  const metaTypes = this.getMetaTypes(),
353
411
  metaType = metaTypes.find((metaType) => {
354
- const matches = metaType.matchMetaTypeName(metaTypeName);
412
+ const matches = metaType.matchMetaTypeNode(metaTypeNode);
355
413
 
356
414
  if (matches) {
357
415
  return true;
@@ -361,13 +419,13 @@ export default class FileContext {
361
419
  return metaType;
362
420
  }
363
421
 
364
- findConjectureByReferenceName(referenceName) {
365
- const labelName = referenceName, ///
422
+ findConjectureByReferenceNode(referenceNode) {
423
+ const labelNode = referenceNode, ///
366
424
  conjectures = this.getConjectures(),
367
425
  conjecture = conjectures.find((conjecture) => {
368
- const conjectureMatchesLabelName = conjecture.matchLabelName(labelName);
426
+ const conjectureMatchesLabelNode = conjecture.matchLabelNode(labelNode);
369
427
 
370
- if (conjectureMatchesLabelName) {
428
+ if (conjectureMatchesLabelNode) {
371
429
  return true;
372
430
  }
373
431
  }) || null;
@@ -389,16 +447,18 @@ export default class FileContext {
389
447
  return metavariable;
390
448
  }
391
449
 
392
- isTermGrounded(term) {
393
- const termGrounded = false; ///
394
-
395
- return termGrounded;
396
- }
450
+ findMetatheoremByReferenceNode(referenceNode) {
451
+ const labelNode = referenceNode, ///
452
+ metatheorems = this.getMetatheorems(),
453
+ metatheorem = metatheorems.find((metatheorem) => {
454
+ const metatheoremMatchesLabelNode = metatheorem.matchLabelNode(labelNode);
397
455
 
398
- isVariableDefined(variable) {
399
- const variableDefined = false; ///
456
+ if (metatheoremMatchesLabelNode) {
457
+ return true;
458
+ }
459
+ }) || null;
400
460
 
401
- return variableDefined;
461
+ return metatheorem;
402
462
  }
403
463
 
404
464
  isTypePresentByTypeName(typeName) {
@@ -408,8 +468,15 @@ export default class FileContext {
408
468
  return typePresent;
409
469
  }
410
470
 
411
- isLabelPresentByLabelName(labelName) {
412
- const label = this.findLabelByLabelName(labelName),
471
+ isTypePresentByTypeNode(typeNode) {
472
+ const type = this.findTypeByTypeNode(typeNode),
473
+ typePresent = (type !== null);
474
+
475
+ return typePresent;
476
+ }
477
+
478
+ isLabelPresentByLabelNode(labelNode) {
479
+ const label = this.findLabelByLabelNode(labelNode),
413
480
  labelPresent = (label !== null);
414
481
 
415
482
  return labelPresent;
@@ -429,6 +496,18 @@ export default class FileContext {
429
496
  return metavariablePresent;
430
497
  }
431
498
 
499
+ isTermGrounded(term) {
500
+ const termGrounded = false; ///
501
+
502
+ return termGrounded;
503
+ }
504
+
505
+ isVariableDefined(variable) {
506
+ const variableDefined = false; ///
507
+
508
+ return variableDefined;
509
+ }
510
+
432
511
  matchStatement(statementNode) {
433
512
  const statementMatches = false;
434
513
 
@@ -488,6 +567,10 @@ export default class FileContext {
488
567
  return variableAdded;
489
568
  }
490
569
 
570
+ addMetaLemma(metaLemma) {
571
+ this.metaLemmas.push(metaLemma);
572
+ }
573
+
491
574
  addConjecture(conjecture) {
492
575
  this.conjectures.push(conjecture);
493
576
  }
@@ -500,6 +583,10 @@ export default class FileContext {
500
583
  this.constructors.push(constructor);
501
584
  }
502
585
 
586
+ addMetatheorem(metatheorem) {
587
+ this.metatheorems.push(metatheorem);
588
+ }
589
+
503
590
  addMetavariable(metavariable) {
504
591
  let metavariableAdded = false;
505
592
 
@@ -577,6 +664,13 @@ export default class FileContext {
577
664
 
578
665
  return variable;
579
666
  }),
667
+ metaLemmas = this.metaLemmas.map((metaLemma) => {
668
+ const metaLemmaJSON = metaLemma.toJSON(this.tokens);
669
+
670
+ metaLemma = metaLemmaJSON; ///
671
+
672
+ return metaLemma;
673
+ }),
580
674
  conjectures = this.conjectures.map((conjecture) => {
581
675
  const conjectureJSON = conjecture.toJSON(this.tokens);
582
676
 
@@ -598,6 +692,13 @@ export default class FileContext {
598
692
 
599
693
  return constructor;
600
694
  }),
695
+ metatheorems = this.metatheorems.map((metatheorem) => {
696
+ const metatheoremJSON = metatheorem.toJSON(this.tokens);
697
+
698
+ metatheorem = metatheoremJSON; ///
699
+
700
+ return metatheorem;
701
+ }),
601
702
  metavariables = this.metavariables.map((metavariable) => {
602
703
  const metavariableJSON = metavariable.toJSON(this.tokens);
603
704
 
@@ -613,9 +714,11 @@ export default class FileContext {
613
714
  lemmas,
614
715
  theorems,
615
716
  variables,
717
+ metaLemmas,
616
718
  conjectures,
617
719
  combinators,
618
720
  constructors,
721
+ metatheorems,
619
722
  metavariables
620
723
  };
621
724
 
@@ -623,27 +726,20 @@ export default class FileContext {
623
726
  }
624
727
 
625
728
  initialise(json) {
626
- const fileContext = this, ///
627
- { types,
628
- rules,
629
- axioms,
630
- lemmas,
631
- theorems,
632
- variables,
633
- conjectures,
634
- combinators,
635
- constructors,
636
- metavariables } = json,
637
- typesJSON = types,
638
- rulesJSON = rules,
639
- axiomsJSON = axioms,
640
- lemmasJSON = lemmas,
641
- theoremsJSON = theorems,
642
- variablesJSON = variables,
643
- conjecturesJSON = conjectures,
644
- combinatorsJSON = combinators,
645
- constructorsJSON = constructors,
646
- metavariablesJSON = metavariables;
729
+ const { types, rules, axioms, lemmas, theorems, metaLemmas, variables, conjectures, combinators, constructors, metatheorems, metavariables } = json,
730
+ fileContext = this, ///
731
+ typesJSON = types, ///
732
+ rulesJSON = rules, ///
733
+ axiomsJSON = axioms, ///
734
+ lemmasJSON = lemmas, ///
735
+ theoremsJSON = theorems, ///
736
+ variablesJSON = variables, ///
737
+ metaLemmasJSON = metaLemmas || [], ///
738
+ conjecturesJSON = conjectures, ///
739
+ combinatorsJSON = combinators, ///
740
+ constructorsJSON = constructors, ///
741
+ metatheoremsJSON = metatheorems || [], ///
742
+ metavariablesJSON = metavariables; ///
647
743
 
648
744
  typesJSON.forEach((typeJSON) => {
649
745
  const json = typeJSON, ///
@@ -687,6 +783,13 @@ export default class FileContext {
687
783
  this.variables.push(variable);
688
784
  });
689
785
 
786
+ metaLemmasJSON.forEach((metaLemmaJSON) => {
787
+ const json = metaLemmaJSON, ///
788
+ metaLemma = MetaLemma.fromJSONAndFileContext(json, fileContext);
789
+
790
+ this.metaLemmas.push(metaLemma);
791
+ });
792
+
690
793
  conjecturesJSON.forEach((conjectureJSON) => {
691
794
  const json = conjectureJSON, ///
692
795
  conjecture = Conjecture.fromJSONAndFileContext(json, fileContext);
@@ -708,6 +811,13 @@ export default class FileContext {
708
811
  this.constructors.push(constructor);
709
812
  });
710
813
 
814
+ metatheoremsJSON.forEach((metatheoremJSON) => {
815
+ const json = metatheoremJSON, ///
816
+ metatheorem = Metatheorem.fromJSONAndFileContext(json, fileContext);
817
+
818
+ this.metatheorems.push(metatheorem);
819
+ });
820
+
711
821
  metavariablesJSON.forEach((metavariableJSON) => {
712
822
  const json = metavariableJSON, ///
713
823
  metavariable = Metavariable.fromJSONAndFileContext(json, fileContext);
@@ -726,11 +836,13 @@ export default class FileContext {
726
836
  lemmas = [],
727
837
  theorems = [],
728
838
  variables = [],
839
+ metaLemmas = [],
729
840
  conjectures = [],
730
841
  combinators = [],
731
842
  constructors = [],
843
+ metatheorems = [],
732
844
  metavariables = [],
733
- fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, theorems, conjectures, combinators, constructors, metavariables);
845
+ fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, metaLemmas, variables, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
734
846
 
735
847
  fileContext.initialise(json);
736
848
 
@@ -748,11 +860,13 @@ export default class FileContext {
748
860
  lemmas = [],
749
861
  theorems = [],
750
862
  variables = [],
863
+ metaLemmas = [],
751
864
  conjectures = [],
752
865
  combinators = [],
753
866
  constructors = [],
867
+ metatheorems = [],
754
868
  metavariables = [],
755
- fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, theorems, conjectures, combinators, constructors, metavariables);
869
+ fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, metaLemmas, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
756
870
 
757
871
  return fileContext;
758
872
  }
@@ -253,7 +253,7 @@ class LocalContext {
253
253
  return variable;
254
254
  }
255
255
 
256
- findMetaTypeByMetaTypeName(metaTypeName) { return this.context.findMetaTypeByMetaTypeName(metaTypeName); }
256
+ findMetaTypeByMetaTypeNode(metaTypeNode) { return this.context.findMetaTypeByMetaTypeNode(metaTypeNode); }
257
257
 
258
258
  isVariablePresentByVariableNode(variableNode) {
259
259
  const variable = this.findVariableByVariableNode(variableNode),
@@ -198,6 +198,19 @@ export default class ReleaseContext {
198
198
  return theorems;
199
199
  }
200
200
 
201
+ getMetaLemmas(includeDependencies = true) {
202
+ const metaLemmas = [];
203
+
204
+ this.fileContexts.forEach((fileContext) => {
205
+ const includeRelease = false,
206
+ fileContextMetaLemmas = fileContext.getMetaLemmas(includeRelease);
207
+
208
+ push(metaLemmas, fileContextMetaLemmas);
209
+ });
210
+
211
+ return metaLemmas;
212
+ }
213
+
201
214
  getConjectures(includeDependencies = true) {
202
215
  const conjectures = [];
203
216
 
@@ -270,6 +283,30 @@ export default class ReleaseContext {
270
283
  return constructors;
271
284
  }
272
285
 
286
+ getMetatheorems(includeDependencies = true) {
287
+ const metatheorems = [];
288
+
289
+ this.fileContexts.forEach((fileContext) => {
290
+ const includeRelease = false,
291
+ fileContextMetatheorems = fileContext.getMetatheorems(includeRelease);
292
+
293
+ push(metatheorems, fileContextMetatheorems);
294
+ });
295
+
296
+ if (includeDependencies) {
297
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
298
+
299
+ dependencyReleaseContexts.forEach((releaseContext) => {
300
+ const includeDependencies = false,
301
+ releaseContextMetatheorems = releaseContext.getMetatheorems(includeDependencies);
302
+
303
+ push(metatheorems, releaseContextMetatheorems);
304
+ });
305
+ }
306
+
307
+ return metatheorems;
308
+ }
309
+
273
310
  addFileContext(fileContext) {
274
311
  this.fileContexts.push(fileContext);
275
312
  }
package/src/label.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { nodeAsString } from "./utilities/string";
4
- import { labelNameFromLabelNode } from "./utilities/query";
4
+ import { labelNameFromLabelNode } from "./utilities/name";
5
5
  import { labelNodeFromLabelString } from "./utilities/node";
6
6
 
7
7
  export default class Label {
@@ -13,12 +13,10 @@ export default class Label {
13
13
  return this.node;
14
14
  }
15
15
 
16
- matchName(name) {
17
- const labelNode = this.node,
18
- labelName = labelNameFromLabelNode(labelNode),
19
- matchesName = (labelName === name);
16
+ matchNode(node) {
17
+ const matches = this.node.match(node);
20
18
 
21
- return matchesName;
19
+ return matches;
22
20
  }
23
21
 
24
22
  asString(tokens) {
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import metaLevelNodesVerifier from "./verifier/nodes/metaLevel";
4
+
5
+ import { nodeAsString } from "./utilities/string";
6
+ import { metastatementNodeFromMetastatementString } from "./utilities/node";
7
+
8
+ export default class MetaConsequent {
9
+ constructor(metastatementNode) {
10
+ this.metastatementNode = metastatementNode;
11
+ }
12
+
13
+ getMetastatementNode() {
14
+ return this.metastatementNode;
15
+ }
16
+
17
+ matchMetastatementNode(metastatementNode, substitutions, localContext, metastatementLocalContext) {
18
+ const nonTerminalNodeA = this.metastatementNode, ///
19
+ nonTerminalNodeB = metastatementNode, ///
20
+ localContextA = localContext, ///
21
+ localContextB = metastatementLocalContext, ///
22
+ nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
23
+ const verifiedAhead = true;
24
+
25
+ return verifiedAhead;
26
+ }),
27
+ metastatementNodeMatches = nonTerminalNodeVerified; ///
28
+
29
+ return metastatementNodeMatches;
30
+ }
31
+
32
+ toJSON(tokens) {
33
+ const metastatementString = nodeAsString(this.metastatementNode, tokens),
34
+ metastatement = metastatementString, ///
35
+ json = {
36
+ metastatement
37
+ };
38
+
39
+ return json;
40
+ }
41
+
42
+ static fromMetastatementNode(metastatementNode) {
43
+ const metaConsequent = new MetaConsequent(metastatementNode);
44
+
45
+ return metaConsequent;
46
+ }
47
+
48
+ static fromJSONAndFileContext(json, fileContext) {
49
+ const { metastatement } = json,
50
+ metastatementString = metastatement, ///
51
+ lexer = fileContext.getLexer(),
52
+ parser = fileContext.getParser(),
53
+ metastatementNode = metastatementNodeFromMetastatementString(metastatementString, lexer, parser),
54
+ metaConsequent = new MetaConsequent(metastatementNode);
55
+
56
+ return metaConsequent;
57
+ }
58
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import MetalemmaMetatheorem from "./metalemmaMetatheorem";
4
+
5
+ export default class MetaLemma extends MetalemmaMetatheorem {
6
+ static fromJSONAndFileContext(json, fileContext) { return MetalemmaMetatheorem.fromJSONAndFileContext(MetaLemma, json, fileContext); }
7
+
8
+ static fromLabelsMetaSuppositionsMetaConsequentAndLocalMetaContext(labels, suppositions, consequent, localMetaContext) { return MetalemmaMetatheorem.fromLabelsMetaSuppositionsMetaConsequentAndLocalMetaContext(MetaLemma, labels, suppositions, consequent, localMetaContext); }
9
+ }