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.
- package/lib/axiomLemmaTheoremConjecture.js +13 -13
- package/lib/context/file.js +94 -71
- package/lib/label.js +5 -6
- package/lib/metaLemmaMetatheorem.js +13 -13
- package/lib/metaType/context.js +124 -0
- package/lib/metaType/label.js +124 -0
- package/lib/metaType/statement.js +124 -0
- package/lib/metaType.js +1 -112
- package/lib/metaTypeNames.js +6 -2
- package/lib/metaTypes.js +12 -4
- package/lib/metavariable.js +49 -9
- package/lib/mixins/context.js +36 -28
- package/lib/rule.js +13 -13
- package/lib/ruleNames.js +4 -4
- package/lib/utilities/name.js +8 -8
- package/lib/utilities/node.js +14 -14
- package/lib/utilities/query.js +4 -9
- package/lib/utilities/tokens.js +6 -6
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/label.js +8 -9
- package/lib/verify/labels.js +15 -8
- package/lib/verify/lemma.js +4 -4
- package/lib/verify/metaLemma.js +4 -4
- package/lib/verify/metastatement/qualified.js +3 -3
- package/lib/verify/metatheorem.js +4 -4
- package/lib/verify/metavariable.js +35 -9
- package/lib/verify/rule.js +4 -4
- package/lib/verify/statement/qualified.js +29 -29
- package/lib/verify/theorem.js +4 -4
- package/package.json +1 -1
- package/src/axiomLemmaTheoremConjecture.js +13 -13
- package/src/context/file.js +98 -72
- package/src/label.js +6 -7
- package/src/metaLemmaMetatheorem.js +13 -13
- package/src/metaType/context.js +18 -0
- package/src/metaType/label.js +18 -0
- package/src/metaType/statement.js +18 -0
- package/src/metaType.js +0 -23
- package/src/metaTypeNames.js +2 -1
- package/src/metaTypes.js +4 -1
- package/src/metavariable.js +60 -10
- package/src/mixins/context.js +23 -17
- package/src/rule.js +13 -13
- package/src/ruleNames.js +1 -1
- package/src/utilities/name.js +7 -7
- package/src/utilities/node.js +13 -13
- package/src/utilities/query.js +3 -9
- package/src/utilities/tokens.js +4 -4
- package/src/verify/axiom.js +4 -4
- package/src/verify/conjecture.js +4 -4
- package/src/verify/label.js +8 -9
- package/src/verify/labels.js +17 -7
- package/src/verify/lemma.js +4 -4
- package/src/verify/metaLemma.js +4 -4
- package/src/verify/metastatement/qualified.js +5 -4
- package/src/verify/metatheorem.js +4 -4
- package/src/verify/metavariable.js +59 -11
- package/src/verify/rule.js +4 -4
- package/src/verify/statement/qualified.js +35 -30
- package/src/verify/theorem.js +4 -4
package/src/context/file.js
CHANGED
|
@@ -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
|
-
|
|
312
|
-
const
|
|
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
|
-
|
|
385
|
+
findRuleByLabelMetavariableNode(labelMetavariableNode) {
|
|
326
386
|
const rules = this.getRules(),
|
|
327
387
|
rule = rules.find((rule) => {
|
|
328
|
-
const
|
|
388
|
+
const ruleMatchesLabelMetavariableNode = rule.matchLabelMetavariableNode(labelMetavariableNode);
|
|
329
389
|
|
|
330
|
-
if (
|
|
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
|
-
|
|
398
|
+
findAxiomByLabelMetavariableNode(labelMetavariableNode) {
|
|
339
399
|
const axioms = this.getAxioms(),
|
|
340
400
|
axiom = axioms.find((axiom) => {
|
|
341
|
-
const
|
|
401
|
+
const axiomMatchesLabelMetavariableNode = axiom.matchLabelMetavariableNode(labelMetavariableNode);
|
|
342
402
|
|
|
343
|
-
if (
|
|
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
|
-
|
|
411
|
+
findLemmaByLabelMetavariableNode(labelMetavariableNode) {
|
|
352
412
|
const lemmas = this.getLemmas(),
|
|
353
413
|
lemma = lemmas.find((lemma) => {
|
|
354
|
-
const
|
|
414
|
+
const lemmaMatchesLabelMetavariableNode = lemma.matchLabelMetavariableNode(labelMetavariableNode);
|
|
355
415
|
|
|
356
|
-
if (
|
|
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
|
-
|
|
424
|
+
findTheoremByLabelMetavariableNode(labelMetavariableNode) {
|
|
365
425
|
const theorems = this.getTheorems(),
|
|
366
426
|
theorem = theorems.find((theorem) => {
|
|
367
|
-
const
|
|
427
|
+
const theoremMatchesLabelMetavariableNode = theorem.matchLabelMetavariableNode(labelMetavariableNode);
|
|
368
428
|
|
|
369
|
-
if (
|
|
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
|
-
|
|
437
|
+
findMetaLemmaByLabelMetavariableNode(labelMetavariableNode) {
|
|
378
438
|
const metaLemmas = this.getMetaLemmas(),
|
|
379
439
|
metaLemma = metaLemmas.find((metaLemma) => {
|
|
380
|
-
const
|
|
440
|
+
const metaLemmaMatchesLabelMetavariableNode = metaLemma.matchLabelMetavariableNode(labelMetavariableNode);
|
|
381
441
|
|
|
382
|
-
if (
|
|
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
|
-
|
|
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
|
|
453
|
+
const conjectureMatchesLabelMetavariableNode = conjecture.matchLabelMetavariableNode(labelMetavariableNode);
|
|
421
454
|
|
|
422
|
-
if (
|
|
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
|
-
|
|
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
|
|
466
|
+
const metatheoremMatchesLabelMetavariableNode = metatheorem.matchLabelMetavariableNode(labelMetavariableNode);
|
|
448
467
|
|
|
449
|
-
if (
|
|
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
|
-
|
|
472
|
-
const
|
|
473
|
-
|
|
490
|
+
isMetavariablePresentByName(name) {
|
|
491
|
+
const metavariable = this.findMetavariableByName(name),
|
|
492
|
+
metavariablePresent = (metavariable !== null);
|
|
474
493
|
|
|
475
|
-
return
|
|
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
|
|
612
|
+
const name = metavariable.getName(),
|
|
587
613
|
metavariablePresent = this.metavariables.some((metavariable) => {
|
|
588
|
-
const nodeMatches = metavariable.
|
|
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 {
|
|
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
|
|
36
|
-
const node =
|
|
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
|
|
42
|
+
const metavariableString = json, ///
|
|
44
43
|
lexer = fileContext.getLexer(),
|
|
45
44
|
parser = fileContext.getParser(),
|
|
46
|
-
|
|
47
|
-
node =
|
|
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
|
|
package/src/metaTypeNames.js
CHANGED
package/src/metaTypes.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
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
|
];
|
package/src/metavariable.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
64
|
-
const
|
|
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
|
+
}
|
package/src/mixins/context.js
CHANGED
|
@@ -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(
|
|
29
|
+
function findTypeByTypeNode(labelMetavariableNode) { return this.context.findTypeByTypeNode(labelMetavariableNode); }
|
|
30
30
|
|
|
31
|
-
function
|
|
31
|
+
function findMetavariableByName(name) { return this.context.findMetavariableByName(name); }
|
|
32
32
|
|
|
33
|
-
function
|
|
33
|
+
function isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
|
|
34
34
|
|
|
35
|
-
function
|
|
35
|
+
function isTypePresentByTypeNode(typeNode) { return this.context.isTypePresentByTypeNode(typeNode); }
|
|
36
36
|
|
|
37
|
-
function
|
|
37
|
+
function isMetavariablePresentByName(name) { return this.context.isMetavariablePresentByName(name); }
|
|
38
38
|
|
|
39
|
-
function
|
|
39
|
+
function findLabelByLabelMetavariableNode(labelMetavariableNode) { return this.context.findLabelByLabelMetavariableNode(labelMetavariableNode); }
|
|
40
40
|
|
|
41
|
-
function
|
|
41
|
+
function findRuleByLabelMetavariableNode(labelMetavariableNode) { return this.context.findRuleByLabelMetavariableNode(labelMetavariableNode); }
|
|
42
42
|
|
|
43
|
-
function
|
|
43
|
+
function findAxiomByLabelMetavariableNode(labelMetavariableNode) { return this.context.findAxiomByLabelMetavariableNode(labelMetavariableNode); }
|
|
44
44
|
|
|
45
|
-
function
|
|
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
|
|
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
|
-
|
|
69
|
-
findRuleByLabelNode,
|
|
70
|
-
findAxiomByLabelNode,
|
|
71
|
-
findLemmaByLabelNode,
|
|
72
|
-
findTheoremByLabelNode,
|
|
73
|
-
findConjectureByLabelNode,
|
|
72
|
+
findMetavariableByName,
|
|
74
73
|
isTypePresentByTypeName,
|
|
75
74
|
isTypePresentByTypeNode,
|
|
76
|
-
|
|
75
|
+
isMetavariablePresentByName,
|
|
76
|
+
findLabelByLabelMetavariableNode,
|
|
77
|
+
findRuleByLabelMetavariableNode,
|
|
78
|
+
findAxiomByLabelMetavariableNode,
|
|
79
|
+
findLemmaByLabelMetavariableNode,
|
|
80
|
+
findTheoremByLabelMetavariableNode,
|
|
81
|
+
findConjectureByLabelMetavariableNode,
|
|
82
|
+
isLabelPresentByLabelMetavariableNode,
|
|
77
83
|
nodeAsString,
|
|
78
84
|
nodesAsString
|
|
79
85
|
};
|