occam-verify-cli 0.0.870 → 0.0.872

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 (61) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +13 -13
  2. package/lib/context/file.js +94 -71
  3. package/lib/label.js +5 -6
  4. package/lib/metaLemmaMetatheorem.js +13 -13
  5. package/lib/metaType/context.js +124 -0
  6. package/lib/metaType/label.js +124 -0
  7. package/lib/metaType/statement.js +124 -0
  8. package/lib/metaType.js +1 -112
  9. package/lib/metaTypeNames.js +6 -2
  10. package/lib/metaTypes.js +12 -4
  11. package/lib/metavariable.js +49 -9
  12. package/lib/mixins/context.js +36 -28
  13. package/lib/rule.js +13 -13
  14. package/lib/ruleNames.js +4 -4
  15. package/lib/utilities/name.js +8 -8
  16. package/lib/utilities/node.js +14 -14
  17. package/lib/utilities/query.js +4 -9
  18. package/lib/utilities/tokens.js +6 -6
  19. package/lib/verify/axiom.js +4 -4
  20. package/lib/verify/conjecture.js +4 -4
  21. package/lib/verify/label.js +8 -9
  22. package/lib/verify/labels.js +15 -8
  23. package/lib/verify/lemma.js +4 -4
  24. package/lib/verify/metaLemma.js +4 -4
  25. package/lib/verify/metastatement/qualified.js +3 -3
  26. package/lib/verify/metatheorem.js +4 -4
  27. package/lib/verify/metavariable.js +35 -9
  28. package/lib/verify/rule.js +4 -4
  29. package/lib/verify/statement/qualified.js +29 -29
  30. package/lib/verify/theorem.js +4 -4
  31. package/package.json +1 -1
  32. package/src/axiomLemmaTheoremConjecture.js +13 -13
  33. package/src/context/file.js +98 -72
  34. package/src/label.js +6 -7
  35. package/src/metaLemmaMetatheorem.js +13 -13
  36. package/src/metaType/context.js +18 -0
  37. package/src/metaType/label.js +18 -0
  38. package/src/metaType/statement.js +18 -0
  39. package/src/metaType.js +0 -23
  40. package/src/metaTypeNames.js +2 -1
  41. package/src/metaTypes.js +4 -1
  42. package/src/metavariable.js +60 -10
  43. package/src/mixins/context.js +23 -17
  44. package/src/rule.js +13 -13
  45. package/src/ruleNames.js +1 -1
  46. package/src/utilities/name.js +7 -7
  47. package/src/utilities/node.js +13 -13
  48. package/src/utilities/query.js +3 -9
  49. package/src/utilities/tokens.js +4 -4
  50. package/src/verify/axiom.js +4 -4
  51. package/src/verify/conjecture.js +4 -4
  52. package/src/verify/label.js +8 -9
  53. package/src/verify/labels.js +17 -7
  54. package/src/verify/lemma.js +4 -4
  55. package/src/verify/metaLemma.js +4 -4
  56. package/src/verify/metastatement/qualified.js +5 -4
  57. package/src/verify/metatheorem.js +4 -4
  58. package/src/verify/metavariable.js +59 -11
  59. package/src/verify/rule.js +4 -4
  60. package/src/verify/statement/qualified.js +35 -30
  61. package/src/verify/theorem.js +4 -4
@@ -115,6 +115,12 @@ export default class FileContext {
115
115
  push(labels, conjectureLabels);
116
116
  });
117
117
 
118
+ this.metatheorems.forEach((metatheorem) => {
119
+ const metatheoremLabels = metatheorem.getLabels();
120
+
121
+ push(labels, metatheoremLabels);
122
+ });
123
+
118
124
  if (includeRelease) {
119
125
  const releaseContextLabels = this.releaseContext.getLabels();
120
126
 
@@ -308,8 +314,62 @@ export default class FileContext {
308
314
  return type;
309
315
  }
310
316
 
311
- findLabelByLabelNode(labelNode) {
312
- const name = labelNode, ///
317
+ findMetavariableByName(name) {
318
+ const metavariables = this.getMetavariables(),
319
+ metavariable = metavariables.find((metavariable) => {
320
+ const matches = metavariable.matchName(name);
321
+
322
+ if (matches) {
323
+ return true;
324
+ }
325
+ }) || null;
326
+
327
+ return metavariable;
328
+ }
329
+
330
+ findVariableByVariableNode(variableNode) {
331
+ const node = variableNode, ///
332
+ variables = this.getVariables(),
333
+ variable = variables.find((variable) => {
334
+ const nodeMatches = variable.matchNode(node);
335
+
336
+ if (nodeMatches) {
337
+ return true;
338
+ }
339
+ }) || null;
340
+
341
+ return variable;
342
+ }
343
+
344
+ findMetaTypeByMetaTypeNode(metaTypeNode) {
345
+ const metaTypes = this.getMetaTypes(),
346
+ metaType = metaTypes.find((metaType) => {
347
+ const matches = metaType.matchMetaTypeNode(metaTypeNode);
348
+
349
+ if (matches) {
350
+ return true;
351
+ }
352
+ }) || null;
353
+
354
+ return metaType;
355
+ }
356
+
357
+ findMetavariableByMetavariableNode(metavariableNode) {
358
+ const node = metavariableNode, ///
359
+ metavariables = this.getMetavariables(),
360
+ metavariable = metavariables.find((metavariable) => {
361
+ const matches = metavariable.matchNode(node);
362
+
363
+ if (matches) {
364
+ return true;
365
+ }
366
+ }) || null;
367
+
368
+ return metavariable;
369
+ }
370
+
371
+ findLabelByLabelMetavariableNode(labelMetavariableNode) {
372
+ const name = labelMetavariableNode, ///
313
373
  labels = this.getLabels(),
314
374
  label = labels.find((label) => {
315
375
  const matches = label.matchNode(name);
@@ -322,12 +382,12 @@ export default class FileContext {
322
382
  return label;
323
383
  }
324
384
 
325
- findRuleByLabelNode(labelNode) {
385
+ findRuleByLabelMetavariableNode(labelMetavariableNode) {
326
386
  const rules = this.getRules(),
327
387
  rule = rules.find((rule) => {
328
- const ruleMatchesLabelNode = rule.matchLabelNode(labelNode);
388
+ const ruleMatchesLabelMetavariableNode = rule.matchLabelMetavariableNode(labelMetavariableNode);
329
389
 
330
- if (ruleMatchesLabelNode) {
390
+ if (ruleMatchesLabelMetavariableNode) {
331
391
  return true;
332
392
  }
333
393
  }) || null;
@@ -335,12 +395,12 @@ export default class FileContext {
335
395
  return rule;
336
396
  }
337
397
 
338
- findAxiomByLabelNode(labelNode) {
398
+ findAxiomByLabelMetavariableNode(labelMetavariableNode) {
339
399
  const axioms = this.getAxioms(),
340
400
  axiom = axioms.find((axiom) => {
341
- const axiomMatchesLabelNode = axiom.matchLabelNode(labelNode);
401
+ const axiomMatchesLabelMetavariableNode = axiom.matchLabelMetavariableNode(labelMetavariableNode);
342
402
 
343
- if (axiomMatchesLabelNode) {
403
+ if (axiomMatchesLabelMetavariableNode) {
344
404
  return true;
345
405
  }
346
406
  }) || null;
@@ -348,12 +408,12 @@ export default class FileContext {
348
408
  return axiom;
349
409
  }
350
410
 
351
- findLemmaByLabelNode(labelNode) {
411
+ findLemmaByLabelMetavariableNode(labelMetavariableNode) {
352
412
  const lemmas = this.getLemmas(),
353
413
  lemma = lemmas.find((lemma) => {
354
- const lemmaMatchesLabelNode = lemma.matchLabelNode(labelNode);
414
+ const lemmaMatchesLabelMetavariableNode = lemma.matchLabelMetavariableNode(labelMetavariableNode);
355
415
 
356
- if (lemmaMatchesLabelNode) {
416
+ if (lemmaMatchesLabelMetavariableNode) {
357
417
  return true;
358
418
  }
359
419
  }) || null;
@@ -361,12 +421,12 @@ export default class FileContext {
361
421
  return lemma;
362
422
  }
363
423
 
364
- findTheoremByLabelNode(labelNode) {
424
+ findTheoremByLabelMetavariableNode(labelMetavariableNode) {
365
425
  const theorems = this.getTheorems(),
366
426
  theorem = theorems.find((theorem) => {
367
- const theoremMatchesLabelNode = theorem.matchLabelNode(labelNode);
427
+ const theoremMatchesLabelMetavariableNode = theorem.matchLabelMetavariableNode(labelMetavariableNode);
368
428
 
369
- if (theoremMatchesLabelNode) {
429
+ if (theoremMatchesLabelMetavariableNode) {
370
430
  return true;
371
431
  }
372
432
  }) || null;
@@ -374,12 +434,12 @@ export default class FileContext {
374
434
  return theorem;
375
435
  }
376
436
 
377
- findMetaLemmaByLabelNode(labelNode) {
437
+ findMetaLemmaByLabelMetavariableNode(labelMetavariableNode) {
378
438
  const metaLemmas = this.getMetaLemmas(),
379
439
  metaLemma = metaLemmas.find((metaLemma) => {
380
- const metaLemmaMatchesLabelNode = metaLemma.matchLabelNode(labelNode);
440
+ const metaLemmaMatchesLabelMetavariableNode = metaLemma.matchLabelMetavariableNode(labelMetavariableNode);
381
441
 
382
- if (metaLemmaMatchesLabelNode) {
442
+ if (metaLemmaMatchesLabelMetavariableNode) {
383
443
  return true;
384
444
  }
385
445
  }) || null;
@@ -387,39 +447,12 @@ export default class FileContext {
387
447
  return metaLemma;
388
448
  }
389
449
 
390
- findVariableByVariableNode(variableNode) {
391
- const node = variableNode, ///
392
- variables = this.getVariables(),
393
- variable = variables.find((variable) => {
394
- const nodeMatches = variable.matchNode(node);
395
-
396
- if (nodeMatches) {
397
- return true;
398
- }
399
- }) || null;
400
-
401
- return variable;
402
- }
403
-
404
- findMetaTypeByMetaTypeNode(metaTypeNode) {
405
- const metaTypes = this.getMetaTypes(),
406
- metaType = metaTypes.find((metaType) => {
407
- const matches = metaType.matchMetaTypeNode(metaTypeNode);
408
-
409
- if (matches) {
410
- return true;
411
- }
412
- }) || null;
413
-
414
- return metaType;
415
- }
416
-
417
- findConjectureByLabelNode(labelNode) {
450
+ findConjectureByLabelMetavariableNode(labelMetavariableNode) {
418
451
  const conjectures = this.getConjectures(),
419
452
  conjecture = conjectures.find((conjecture) => {
420
- const conjectureMatchesLabelNode = conjecture.matchLabelNode(labelNode);
453
+ const conjectureMatchesLabelMetavariableNode = conjecture.matchLabelMetavariableNode(labelMetavariableNode);
421
454
 
422
- if (conjectureMatchesLabelNode) {
455
+ if (conjectureMatchesLabelMetavariableNode) {
423
456
  return true;
424
457
  }
425
458
  }) || null;
@@ -427,26 +460,12 @@ export default class FileContext {
427
460
  return conjecture;
428
461
  }
429
462
 
430
- findMetavariableByMetavariableNode(metavariableNode) {
431
- const node = metavariableNode, ///
432
- metavariables = this.getMetavariables(),
433
- metavariable = metavariables.find((metavariable) => {
434
- const matches = metavariable.matchNode(node);
435
-
436
- if (matches) {
437
- return true;
438
- }
439
- }) || null;
440
-
441
- return metavariable;
442
- }
443
-
444
- findMetatheoremByLabelNode(labelNode) {
463
+ findMetatheoremByLabelMetavariableNode(labelMetavariableNode) {
445
464
  const metatheorems = this.getMetatheorems(),
446
465
  metatheorem = metatheorems.find((metatheorem) => {
447
- const metatheoremMatchesLabelNode = metatheorem.matchLabelNode(labelNode);
466
+ const metatheoremMatchesLabelMetavariableNode = metatheorem.matchLabelMetavariableNode(labelMetavariableNode);
448
467
 
449
- if (metatheoremMatchesLabelNode) {
468
+ if (metatheoremMatchesLabelMetavariableNode) {
450
469
  return true;
451
470
  }
452
471
  }) || null;
@@ -468,11 +487,11 @@ export default class FileContext {
468
487
  return typePresent;
469
488
  }
470
489
 
471
- isLabelPresentByLabelNode(labelNode) {
472
- const label = this.findLabelByLabelNode(labelNode),
473
- labelPresent = (label !== null);
490
+ isMetavariablePresentByName(name) {
491
+ const metavariable = this.findMetavariableByName(name),
492
+ metavariablePresent = (metavariable !== null);
474
493
 
475
- return labelPresent;
494
+ return metavariablePresent;
476
495
  }
477
496
 
478
497
  isVariablePresentByVariableNode(variableNode) {
@@ -482,6 +501,13 @@ export default class FileContext {
482
501
  return variablePresent;
483
502
  }
484
503
 
504
+ isLabelPresentByLabelMetavariableNode(labelMetavariableNode) {
505
+ const label = this.findLabelByLabelMetavariableNode(labelMetavariableNode),
506
+ labelPresent = (label !== null);
507
+
508
+ return labelPresent;
509
+ }
510
+
485
511
  isMetavariablePresentByMetavariableNode(metavariableNode) {
486
512
  const metavariable = this.findMetavariableByMetavariableNode(metavariableNode),
487
513
  metavariablePresent = (metavariable !== null);
@@ -583,9 +609,9 @@ export default class FileContext {
583
609
  addMetavariable(metavariable) {
584
610
  let metavariableAdded = false;
585
611
 
586
- const node = metavariable.getNode(),
612
+ const name = metavariable.getName(),
587
613
  metavariablePresent = this.metavariables.some((metavariable) => {
588
- const nodeMatches = metavariable.matchNode(node);
614
+ const nodeMatches = metavariable.matchName(name);
589
615
 
590
616
  if (nodeMatches) {
591
617
  return true;
@@ -727,11 +753,11 @@ export default class FileContext {
727
753
  lemmasJSON = lemmas, ///
728
754
  theoremsJSON = theorems, ///
729
755
  variablesJSON = variables, ///
730
- metaLemmasJSON = metaLemmas || [], ///
756
+ metaLemmasJSON = metaLemmas, ///
731
757
  conjecturesJSON = conjectures, ///
732
758
  combinatorsJSON = combinators, ///
733
759
  constructorsJSON = constructors, ///
734
- metatheoremsJSON = metatheorems || [], ///
760
+ metatheoremsJSON = metatheorems, ///
735
761
  metavariablesJSON = metavariables; ///
736
762
 
737
763
  typesJSON.forEach((typeJSON) => {
package/src/label.js CHANGED
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { nodeAsString } from "./utilities/string";
4
- import { labelNameFromLabelNode } from "./utilities/name";
5
- import { labelNodeFromLabelString } from "./utilities/node";
4
+ import { metavariableNodeFromMetavariableString } from "./utilities/node";
6
5
 
7
6
  export default class Label {
8
7
  constructor(node) {
@@ -32,19 +31,19 @@ export default class Label {
32
31
  return json;
33
32
  }
34
33
 
35
- static fromLabelNode(labelNode) {
36
- const node = labelNode, ///
34
+ static fromMetavariableNode(metavariableNode) {
35
+ const node = metavariableNode, ///
37
36
  variable = new Label(node);
38
37
 
39
38
  return variable;
40
39
  }
41
40
 
42
41
  static fromJSONAndFileContext(json, fileContext) {
43
- const labelString = json, ///
42
+ const metavariableString = json, ///
44
43
  lexer = fileContext.getLexer(),
45
44
  parser = fileContext.getParser(),
46
- labelNode = labelNodeFromLabelString(labelString, lexer, parser),
47
- node = labelNode, ///
45
+ metavariableNode = metavariableNodeFromMetavariableString(metavariableString, lexer, parser),
46
+ node = metavariableNode, ///
48
47
  label = new Label(node);
49
48
 
50
49
  return label;
@@ -32,19 +32,6 @@ export default class MetaLemmaMetatheorem {
32
32
  return this.localContext;
33
33
  }
34
34
 
35
- matchLabelNode(labelNode) {
36
- const labelNodeMatches = this.labels.some((label) => {
37
- const node = labelNode, ///
38
- labelMatchesNode = label.matchNode(node);
39
-
40
- if (labelMatchesNode) {
41
- return true;
42
- }
43
- });
44
-
45
- return labelNodeMatches;
46
- }
47
-
48
35
  matchMetastatement(metastatementNode, metastatementLocalContext) {
49
36
  let metastatementNatches;
50
37
 
@@ -79,6 +66,19 @@ export default class MetaLemmaMetatheorem {
79
66
  return metastatementNatches;
80
67
  }
81
68
 
69
+ matchLabelMetavariableNode(labelMetavariableNode) {
70
+ const labelMetavariableNodeMatches = this.labels.some((label) => {
71
+ const node = labelMetavariableNode, ///
72
+ labelMatchesNode = label.matchNode(node);
73
+
74
+ if (labelMatchesNode) {
75
+ return true;
76
+ }
77
+ });
78
+
79
+ return labelMetavariableNodeMatches;
80
+ }
81
+
82
82
  toJSON(tokens) {
83
83
  const labelsJSON = this.labels.map((label) => {
84
84
  const labelJSON = label.toJSON(tokens);
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import MetaType from "../metaType";
4
+
5
+ import { CONTEXT_META_TYPE_NAME } from "../metaTypeNames";
6
+
7
+ class ContextMetaType extends MetaType {
8
+ static fromNothing() {
9
+ const name = CONTEXT_META_TYPE_NAME,
10
+ contextMetaType = new ContextMetaType(name);
11
+
12
+ return contextMetaType;
13
+ }
14
+ }
15
+
16
+ const contextMetaType = ContextMetaType.fromNothing();
17
+
18
+ export default contextMetaType;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import MetaType from "../metaType";
4
+
5
+ import { LABEL_META_TYPE_NAME } from "../metaTypeNames";
6
+
7
+ class LabelMetaType extends MetaType {
8
+ static fromNothing() {
9
+ const name = LABEL_META_TYPE_NAME,
10
+ labelMetaType = new LabelMetaType(name);
11
+
12
+ return labelMetaType;
13
+ }
14
+ }
15
+
16
+ const labelMetaType = LabelMetaType.fromNothing();
17
+
18
+ export default labelMetaType;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import MetaType from "../metaType";
4
+
5
+ import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
6
+
7
+ class StatementMetaType extends MetaType {
8
+ static fromNothing() {
9
+ const name = STATEMENT_META_TYPE_NAME,
10
+ statementMetaType = new StatementMetaType(name);
11
+
12
+ return statementMetaType;
13
+ }
14
+ }
15
+
16
+ const statementMetaType = StatementMetaType.fromNothing();
17
+
18
+ export default statementMetaType;
package/src/metaType.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  import { metaTypeNameFromMetaTypeNode } from "./utilities/name";
4
- import { CONTEXT_META_TYPE_NAME, STATEMENT_META_TYPE_NAME } from "./metaTypeNames";
5
4
 
6
5
  export default class MetaType {
7
6
  constructor(name) {
@@ -68,28 +67,6 @@ export default class MetaType {
68
67
  }
69
68
  }
70
69
 
71
- class ContextMetaType extends MetaType {
72
- static fromNothing() {
73
- const name = CONTEXT_META_TYPE_NAME,
74
- contextMetaType = new ContextMetaType(name);
75
-
76
- return contextMetaType;
77
- }
78
- }
79
-
80
- class StatementMetaType extends MetaType {
81
- static fromNothing() {
82
- const name = STATEMENT_META_TYPE_NAME,
83
- statementMetaType = new StatementMetaType(name);
84
-
85
- return statementMetaType;
86
- }
87
- }
88
-
89
- export const contextMetaType = ContextMetaType.fromNothing();
90
-
91
- export const statementMetaType = StatementMetaType.fromNothing();
92
-
93
70
  export function metaTypeFromJSONAndFileContext(json, fileContext) {
94
71
  let metaType;
95
72
 
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
- export const CONTEXT_META_TYPE_NAME = "Context";
4
3
  export const STATEMENT_META_TYPE_NAME = "Statement";
4
+ export const CONTEXT_META_TYPE_NAME = "Context";
5
+ export const LABEL_META_TYPE_NAME = "Label";
package/src/metaTypes.js CHANGED
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import { contextMetaType, statementMetaType } from "./metaType";
3
+ import labelMetaType from "./metaType/label";
4
+ import contextMetaType from "./metaType/context";
5
+ import statementMetaType from "./metaType/statement";
4
6
 
5
7
  const metaTypes = [
8
+ labelMetaType,
6
9
  contextMetaType,
7
10
  statementMetaType
8
11
  ];
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
 
3
+ import { nodeQuery } from "./utilities/query";
3
4
  import { nodeAsString } from "./utilities/string";
5
+ import { nameFromMetavariableNode } from "./utilities/name";
4
6
  import { metaTypeFromJSONAndFileContext } from "./metaType";
7
+ import { metavariableNodeFromMetavariableString } from "./utilities/node";
8
+
9
+ const typeNodeQuery = nodeQuery("/metavariable/argument!/type!");
5
10
 
6
11
  export default class Metavariable {
7
- constructor(node, metaType) {
12
+ constructor(node, name, termType, metaType) {
8
13
  this.node = node;
14
+ this.name = name;
15
+ this.termType = termType;
9
16
  this.metaType = metaType;
10
17
  }
11
18
 
@@ -13,21 +20,42 @@ export default class Metavariable {
13
20
  return this.node;
14
21
  }
15
22
 
23
+ getName() {
24
+ return this.name;
25
+ }
26
+
27
+ getTermType() {
28
+ return this.termType;
29
+ }
30
+
16
31
  getMetaType() {
17
32
  return this.metaType;
18
33
  }
19
34
 
35
+ matchName(name) {
36
+ const nameMatches = (this.name === name);
37
+
38
+ return nameMatches;
39
+ }
40
+
20
41
  matchNode(node) {
21
- const nodeMatches = this.node.match(node);
42
+ let nodeMatches;
43
+
44
+ const metavariableNode = node, ///
45
+ name = nameFromMetavariableNode(metavariableNode);
46
+
47
+ if (this.name === name) {
48
+ nodeMatches = true;
49
+ }
22
50
 
23
51
  return nodeMatches;
24
52
  }
25
53
 
26
54
  toJSON(tokens) {
27
55
  const metaTypeJSON = this.metaType.toJSON(tokens),
28
- metaType = metaTypeJSON, ///
29
56
  string = nodeAsString(this.node, tokens),
30
- node = string, ///
57
+ node = string, //
58
+ metaType = metaTypeJSON, ///
31
59
  json = {
32
60
  node,
33
61
  metaType
@@ -41,13 +69,20 @@ export default class Metavariable {
41
69
 
42
70
  let string = nodeAsString(this.node, tokens);
43
71
 
44
- string = `${string}:${metaTypeName}`;
72
+ string = `${string}:${metaTypeName}`; ///
45
73
 
46
74
  return string;
47
75
  }
48
76
 
49
77
  static fromJSONAndFileContext(json, fileContext) {
50
- const { node } = json;
78
+ let { node } = json;
79
+
80
+ const lexer = fileContext.getLexer(),
81
+ parser = fileContext.getParser(),
82
+ variableString = node, ///
83
+ metavariableNode = metavariableNodeFromMetavariableString(variableString, lexer, parser);
84
+
85
+ node = metavariableNode; ///
51
86
 
52
87
  let { metaType } = json;
53
88
 
@@ -55,15 +90,30 @@ export default class Metavariable {
55
90
 
56
91
  metaType = metaTypeFromJSONAndFileContext(json, fileContext);
57
92
 
58
- const metavariable = new Metavariable(node, metaType);
93
+ const name = nameFromMetavariableNode(metavariableNode),
94
+ termType = termTypeFromMetavariableNode(metavariableNode, fileContext),
95
+ metavariable = new Metavariable(node, name, termType, metaType);
59
96
 
60
97
  return metavariable;
61
98
  }
62
99
 
63
- static fromMetavariableNodeAndMetaType(metavariableNode, metaType) {
64
- const node = metavariableNode, ///
65
- metavariable = new Metavariable(node, metaType);
100
+ static fromNodeNameTermTypeAndMetaType(node, name, termType, metaType) {
101
+ const metavariable = new Metavariable(node, name, termType, metaType);
66
102
 
67
103
  return metavariable;
68
104
  }
69
105
  }
106
+
107
+ function termTypeFromMetavariableNode(metavariableNode, fileContext) {
108
+ let termType = null;
109
+
110
+ const typeNode = typeNodeQuery(metavariableNode);
111
+
112
+ if (typeNode !== null) {
113
+ const type = fileContext.findTypeByTypeNode(typeNode);
114
+
115
+ termType = type; ///
116
+ }
117
+
118
+ return termType;
119
+ }
@@ -26,25 +26,29 @@ function getConstructors() { return this.context.getConstructors(); }
26
26
 
27
27
  function findTypeByTypeName(typeName) { return this.context.findTypeByTypeName(typeName); }
28
28
 
29
- function findTypeByTypeNode(labelNode) { return this.context.findTypeByTypeNode(labelNode); }
29
+ function findTypeByTypeNode(labelMetavariableNode) { return this.context.findTypeByTypeNode(labelMetavariableNode); }
30
30
 
31
- function findLabelByLabelNode(labelNode) { return this.context.findLabelByLabelNode(labelNode); }
31
+ function findMetavariableByName(name) { return this.context.findMetavariableByName(name); }
32
32
 
33
- function findRuleByLabelNode(labelNode) { return this.context.findRuleByLabelNode(labelNode); }
33
+ function isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
34
34
 
35
- function findAxiomByLabelNode(labelNode) { return this.context.findAxiomByLabelNode(labelNode); }
35
+ function isTypePresentByTypeNode(typeNode) { return this.context.isTypePresentByTypeNode(typeNode); }
36
36
 
37
- function findLemmaByLabelNode(labelNode) { return this.context.findLemmaByLabelNode(labelNode); }
37
+ function isMetavariablePresentByName(name) { return this.context.isMetavariablePresentByName(name); }
38
38
 
39
- function findTheoremByLabelNode(labelNode) { return this.context.findTheoremByLabelNode(labelNode); }
39
+ function findLabelByLabelMetavariableNode(labelMetavariableNode) { return this.context.findLabelByLabelMetavariableNode(labelMetavariableNode); }
40
40
 
41
- function findConjectureByLabelNode(labelNode) { return this.context.findConjectureByLabelNode(labelNode); }
41
+ function findRuleByLabelMetavariableNode(labelMetavariableNode) { return this.context.findRuleByLabelMetavariableNode(labelMetavariableNode); }
42
42
 
43
- function isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
43
+ function findAxiomByLabelMetavariableNode(labelMetavariableNode) { return this.context.findAxiomByLabelMetavariableNode(labelMetavariableNode); }
44
44
 
45
- function isTypePresentByTypeNode(typeNode) { return this.context.isTypePresentByTypeNode(typeNode); }
45
+ function findLemmaByLabelMetavariableNode(labelMetavariableNode) { return this.context.findLemmaByLabelMetavariableNode(labelMetavariableNode); }
46
+
47
+ function findTheoremByLabelMetavariableNode(labelMetavariableNode) { return this.context.findTheoremByLabelMetavariableNode(labelMetavariableNode); }
48
+
49
+ function findConjectureByLabelMetavariableNode(labelMetavariableNode) { return this.context.findConjectureByLabelMetavariableNode(labelMetavariableNode); }
46
50
 
47
- function isLabelPresentByLabelNode(labelNode) { return this.context.isLabelPresentByLabelNode(labelNode); }
51
+ function isLabelPresentByLabelMetavariableNode(labelMetavariableNode) { return this.context.isLabelPresentByLabelMetavariableNode(labelMetavariableNode); }
48
52
 
49
53
  function nodeAsString(node) { return this.context.nodeAsString(node); }
50
54
 
@@ -65,15 +69,17 @@ const contextMixins = {
65
69
  getConstructors,
66
70
  findTypeByTypeName,
67
71
  findTypeByTypeNode,
68
- findLabelByLabelNode,
69
- findRuleByLabelNode,
70
- findAxiomByLabelNode,
71
- findLemmaByLabelNode,
72
- findTheoremByLabelNode,
73
- findConjectureByLabelNode,
72
+ findMetavariableByName,
74
73
  isTypePresentByTypeName,
75
74
  isTypePresentByTypeNode,
76
- isLabelPresentByLabelNode,
75
+ isMetavariablePresentByName,
76
+ findLabelByLabelMetavariableNode,
77
+ findRuleByLabelMetavariableNode,
78
+ findAxiomByLabelMetavariableNode,
79
+ findLemmaByLabelMetavariableNode,
80
+ findTheoremByLabelMetavariableNode,
81
+ findConjectureByLabelMetavariableNode,
82
+ isLabelPresentByLabelMetavariableNode,
77
83
  nodeAsString,
78
84
  nodesAsString
79
85
  };