occam-verify-cli 0.0.865 → 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.
- package/lib/axiomLemmaTheoremConjecture.js +7 -7
- package/lib/context/file.js +128 -68
- package/lib/context/local.js +4 -4
- package/lib/context/release.js +13 -1
- package/lib/label.js +6 -6
- package/lib/metaConsequent.js +88 -0
- package/lib/metaLemma.js +126 -0
- package/lib/metaLemmaMetatheorem.js +196 -0
- package/lib/metaSupposition.js +140 -0
- package/lib/metaType.js +33 -3
- package/lib/metaTypeNames.js +13 -4
- package/lib/metaTypes.js +9 -4
- package/lib/metatheorem.js +9 -9
- package/lib/mixins/context.js +30 -22
- package/lib/rule.js +7 -7
- package/lib/ruleNames.js +5 -1
- package/lib/step/metaproof.js +18 -4
- package/lib/type.js +9 -1
- package/lib/utilities/name.js +52 -0
- package/lib/utilities/query.js +1 -38
- package/lib/verifier/node/metastatement.js +3 -3
- package/lib/verifier/nodes/statementAgainstCombinator.js +4 -4
- package/lib/verifier/nodes/termAgainstConstructor.js +3 -3
- package/lib/verify/declaration/topLevel.js +11 -3
- package/lib/verify/givenMetavariable.js +31 -0
- package/lib/verify/givenType.js +2 -3
- package/lib/verify/label.js +3 -4
- package/lib/verify/metaConsequent.js +36 -0
- package/lib/verify/metaDerivation.js +111 -0
- package/lib/verify/metaLemma.js +51 -0
- package/lib/verify/metaSupposition.js +40 -0
- package/lib/verify/metaSuppositions.js +28 -0
- package/lib/verify/metaproof.js +34 -0
- package/lib/verify/metastatement/qualified.js +2 -2
- package/lib/verify/metatheorem.js +50 -0
- package/lib/verify/metavariable.js +30 -10
- package/lib/verify/proof.js +3 -3
- package/lib/verify/statement/qualified.js +28 -28
- package/lib/verify/termAsConstructor.js +4 -5
- package/lib/verify/type.js +18 -20
- package/lib/verify/variable.js +13 -16
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +6 -6
- package/src/context/file.js +132 -61
- package/src/context/local.js +1 -1
- package/src/context/release.js +13 -0
- package/src/label.js +4 -6
- package/src/metaConsequent.js +58 -0
- package/src/metaLemma.js +9 -0
- package/src/metaLemmaMetatheorem.js +194 -0
- package/src/metaSupposition.js +103 -0
- package/src/metaType.js +23 -3
- package/src/metaTypeNames.js +1 -0
- package/src/metaTypes.js +8 -1
- package/src/metatheorem.js +4 -4
- package/src/mixins/context.js +20 -14
- package/src/rule.js +6 -6
- package/src/ruleNames.js +1 -0
- package/src/step/metaproof.js +20 -4
- package/src/type.js +10 -0
- package/src/utilities/name.js +50 -0
- package/src/utilities/query.js +0 -47
- package/src/verifier/node/metastatement.js +2 -1
- package/src/verifier/nodes/statementAgainstCombinator.js +3 -3
- package/src/verifier/nodes/termAgainstConstructor.js +3 -4
- package/src/verify/declaration/topLevel.js +14 -0
- package/src/verify/givenMetavariable.js +31 -0
- package/src/verify/givenType.js +1 -4
- package/src/verify/label.js +2 -5
- package/src/verify/metaConsequent.js +36 -0
- package/src/verify/metaDerivation.js +151 -0
- package/src/verify/metaLemma.js +67 -0
- package/src/verify/metaSupposition.js +44 -0
- package/src/verify/metaSuppositions.js +17 -0
- package/src/verify/metaproof.js +32 -0
- package/src/verify/metastatement/qualified.js +2 -3
- package/src/verify/metatheorem.js +62 -0
- package/src/verify/metavariable.js +46 -16
- package/src/verify/proof.js +2 -2
- package/src/verify/statement/qualified.js +27 -23
- package/src/verify/termAsConstructor.js +4 -6
- package/src/verify/type.js +20 -22
- package/src/verify/variable.js +14 -17
- package/lib/ruleMetatheorem.js +0 -253
- package/src/ruleMetatheorem.js +0 -274
package/src/context/file.js
CHANGED
|
@@ -5,6 +5,8 @@ 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,16 +15,11 @@ import Metavariable from "../metavariable";
|
|
|
13
15
|
|
|
14
16
|
import { push } from "../utilities/array";
|
|
15
17
|
import { objectType } from "../type";
|
|
16
|
-
import { statementMetaType } from "../metaType";
|
|
17
18
|
import { typeFromJSONAndFileContext } from "../type";
|
|
18
19
|
import { nodeAsString, nodesAsString } from "../utilities/string";
|
|
19
20
|
|
|
20
|
-
const metaTypes = [
|
|
21
|
-
statementMetaType
|
|
22
|
-
];
|
|
23
|
-
|
|
24
21
|
export default class FileContext {
|
|
25
|
-
constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, conjectures, combinators, constructors, metatheorems, metavariables) {
|
|
22
|
+
constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, constructors, metatheorems, metavariables) {
|
|
26
23
|
this.releaseContext = releaseContext;
|
|
27
24
|
this.filePath = filePath;
|
|
28
25
|
this.tokens = tokens;
|
|
@@ -33,6 +30,7 @@ export default class FileContext {
|
|
|
33
30
|
this.lemmas = lemmas;
|
|
34
31
|
this.theorems = theorems;
|
|
35
32
|
this.variables = variables;
|
|
33
|
+
this.metaLemmas = metaLemmas;
|
|
36
34
|
this.conjectures = conjectures;
|
|
37
35
|
this.combinators = combinators;
|
|
38
36
|
this.constructors = constructors;
|
|
@@ -200,6 +198,20 @@ export default class FileContext {
|
|
|
200
198
|
return this.variables;
|
|
201
199
|
}
|
|
202
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
|
+
|
|
203
215
|
getMetaTypes(includeRelease = true) {
|
|
204
216
|
return metaTypes;
|
|
205
217
|
}
|
|
@@ -264,27 +276,29 @@ export default class FileContext {
|
|
|
264
276
|
return this.metavariables;
|
|
265
277
|
}
|
|
266
278
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
labels = this.getLabels(),
|
|
270
|
-
label = labels.find((label) => {
|
|
271
|
-
const matches = label.matchName(name);
|
|
279
|
+
findTypeByTypeName(typeName) {
|
|
280
|
+
let types = this.getTypes();
|
|
272
281
|
|
|
273
|
-
|
|
274
|
-
return true;
|
|
275
|
-
}
|
|
276
|
-
}) || null;
|
|
282
|
+
types.push(objectType);
|
|
277
283
|
|
|
278
|
-
|
|
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;
|
|
279
293
|
}
|
|
280
294
|
|
|
281
|
-
|
|
295
|
+
findTypeByTypeNode(typeNode) {
|
|
282
296
|
let types = this.getTypes();
|
|
283
297
|
|
|
284
298
|
types.push(objectType);
|
|
285
299
|
|
|
286
300
|
const type = types.find((type) => {
|
|
287
|
-
const matches = type.
|
|
301
|
+
const matches = type.matchTypeNode(typeNode);
|
|
288
302
|
|
|
289
303
|
if (matches) {
|
|
290
304
|
return true;
|
|
@@ -294,13 +308,27 @@ export default class FileContext {
|
|
|
294
308
|
return type;
|
|
295
309
|
}
|
|
296
310
|
|
|
297
|
-
|
|
298
|
-
const
|
|
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, ///
|
|
299
327
|
rules = this.getRules(),
|
|
300
328
|
rule = rules.find((rule) => {
|
|
301
|
-
const
|
|
329
|
+
const ruleMatchesLabelNode = rule.matchLabelNode(labelNode);
|
|
302
330
|
|
|
303
|
-
if (
|
|
331
|
+
if (ruleMatchesLabelNode) {
|
|
304
332
|
return true;
|
|
305
333
|
}
|
|
306
334
|
}) || null;
|
|
@@ -308,13 +336,13 @@ export default class FileContext {
|
|
|
308
336
|
return rule;
|
|
309
337
|
}
|
|
310
338
|
|
|
311
|
-
|
|
312
|
-
const
|
|
339
|
+
findAxiomByReferenceNode(referenceNode) {
|
|
340
|
+
const labelNode = referenceNode, ///
|
|
313
341
|
axioms = this.getAxioms(),
|
|
314
342
|
axiom = axioms.find((axiom) => {
|
|
315
|
-
const
|
|
343
|
+
const axiomMatchesLabelNode = axiom.matchLabelNode(labelNode);
|
|
316
344
|
|
|
317
|
-
if (
|
|
345
|
+
if (axiomMatchesLabelNode) {
|
|
318
346
|
return true;
|
|
319
347
|
}
|
|
320
348
|
}) || null;
|
|
@@ -322,13 +350,13 @@ export default class FileContext {
|
|
|
322
350
|
return axiom;
|
|
323
351
|
}
|
|
324
352
|
|
|
325
|
-
|
|
326
|
-
const
|
|
353
|
+
findLemmaByReferenceNode(referenceNode) {
|
|
354
|
+
const labelNode = referenceNode, ///
|
|
327
355
|
lemmas = this.getLemmas(),
|
|
328
356
|
lemma = lemmas.find((lemma) => {
|
|
329
|
-
const
|
|
357
|
+
const lemmaMatchesLabelNode = lemma.matchLabelNode(labelNode);
|
|
330
358
|
|
|
331
|
-
if (
|
|
359
|
+
if (lemmaMatchesLabelNode) {
|
|
332
360
|
return true;
|
|
333
361
|
}
|
|
334
362
|
}) || null;
|
|
@@ -336,13 +364,13 @@ export default class FileContext {
|
|
|
336
364
|
return lemma;
|
|
337
365
|
}
|
|
338
366
|
|
|
339
|
-
|
|
340
|
-
const
|
|
367
|
+
findTheoremByReferenceNode(referenceNode) {
|
|
368
|
+
const labelNode = referenceNode, ///
|
|
341
369
|
theorems = this.getTheorems(),
|
|
342
370
|
theorem = theorems.find((theorem) => {
|
|
343
|
-
const
|
|
371
|
+
const theoremMatchesLabelNode = theorem.matchLabelNode(labelNode);
|
|
344
372
|
|
|
345
|
-
if (
|
|
373
|
+
if (theoremMatchesLabelNode) {
|
|
346
374
|
return true;
|
|
347
375
|
}
|
|
348
376
|
}) || null;
|
|
@@ -350,6 +378,20 @@ export default class FileContext {
|
|
|
350
378
|
return theorem;
|
|
351
379
|
}
|
|
352
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
|
+
|
|
353
395
|
findVariableByVariableNode(variableNode) {
|
|
354
396
|
const node = variableNode, ///
|
|
355
397
|
variables = this.getVariables(),
|
|
@@ -364,10 +406,10 @@ export default class FileContext {
|
|
|
364
406
|
return variable;
|
|
365
407
|
}
|
|
366
408
|
|
|
367
|
-
|
|
409
|
+
findMetaTypeByMetaTypeNode(metaTypeNode) {
|
|
368
410
|
const metaTypes = this.getMetaTypes(),
|
|
369
411
|
metaType = metaTypes.find((metaType) => {
|
|
370
|
-
const matches = metaType.
|
|
412
|
+
const matches = metaType.matchMetaTypeNode(metaTypeNode);
|
|
371
413
|
|
|
372
414
|
if (matches) {
|
|
373
415
|
return true;
|
|
@@ -377,13 +419,13 @@ export default class FileContext {
|
|
|
377
419
|
return metaType;
|
|
378
420
|
}
|
|
379
421
|
|
|
380
|
-
|
|
381
|
-
const
|
|
422
|
+
findConjectureByReferenceNode(referenceNode) {
|
|
423
|
+
const labelNode = referenceNode, ///
|
|
382
424
|
conjectures = this.getConjectures(),
|
|
383
425
|
conjecture = conjectures.find((conjecture) => {
|
|
384
|
-
const
|
|
426
|
+
const conjectureMatchesLabelNode = conjecture.matchLabelNode(labelNode);
|
|
385
427
|
|
|
386
|
-
if (
|
|
428
|
+
if (conjectureMatchesLabelNode) {
|
|
387
429
|
return true;
|
|
388
430
|
}
|
|
389
431
|
}) || null;
|
|
@@ -405,13 +447,13 @@ export default class FileContext {
|
|
|
405
447
|
return metavariable;
|
|
406
448
|
}
|
|
407
449
|
|
|
408
|
-
|
|
409
|
-
const
|
|
450
|
+
findMetatheoremByReferenceNode(referenceNode) {
|
|
451
|
+
const labelNode = referenceNode, ///
|
|
410
452
|
metatheorems = this.getMetatheorems(),
|
|
411
453
|
metatheorem = metatheorems.find((metatheorem) => {
|
|
412
|
-
const
|
|
454
|
+
const metatheoremMatchesLabelNode = metatheorem.matchLabelNode(labelNode);
|
|
413
455
|
|
|
414
|
-
if (
|
|
456
|
+
if (metatheoremMatchesLabelNode) {
|
|
415
457
|
return true;
|
|
416
458
|
}
|
|
417
459
|
}) || null;
|
|
@@ -419,27 +461,22 @@ export default class FileContext {
|
|
|
419
461
|
return metatheorem;
|
|
420
462
|
}
|
|
421
463
|
|
|
422
|
-
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
return termGrounded;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
isVariableDefined(variable) {
|
|
429
|
-
const variableDefined = false; ///
|
|
464
|
+
isTypePresentByTypeName(typeName) {
|
|
465
|
+
const type = this.findTypeByTypeName(typeName),
|
|
466
|
+
typePresent = (type !== null);
|
|
430
467
|
|
|
431
|
-
return
|
|
468
|
+
return typePresent;
|
|
432
469
|
}
|
|
433
470
|
|
|
434
|
-
|
|
435
|
-
const type = this.
|
|
471
|
+
isTypePresentByTypeNode(typeNode) {
|
|
472
|
+
const type = this.findTypeByTypeNode(typeNode),
|
|
436
473
|
typePresent = (type !== null);
|
|
437
474
|
|
|
438
475
|
return typePresent;
|
|
439
476
|
}
|
|
440
477
|
|
|
441
|
-
|
|
442
|
-
const label = this.
|
|
478
|
+
isLabelPresentByLabelNode(labelNode) {
|
|
479
|
+
const label = this.findLabelByLabelNode(labelNode),
|
|
443
480
|
labelPresent = (label !== null);
|
|
444
481
|
|
|
445
482
|
return labelPresent;
|
|
@@ -459,6 +496,18 @@ export default class FileContext {
|
|
|
459
496
|
return metavariablePresent;
|
|
460
497
|
}
|
|
461
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
|
+
|
|
462
511
|
matchStatement(statementNode) {
|
|
463
512
|
const statementMatches = false;
|
|
464
513
|
|
|
@@ -518,6 +567,10 @@ export default class FileContext {
|
|
|
518
567
|
return variableAdded;
|
|
519
568
|
}
|
|
520
569
|
|
|
570
|
+
addMetaLemma(metaLemma) {
|
|
571
|
+
this.metaLemmas.push(metaLemma);
|
|
572
|
+
}
|
|
573
|
+
|
|
521
574
|
addConjecture(conjecture) {
|
|
522
575
|
this.conjectures.push(conjecture);
|
|
523
576
|
}
|
|
@@ -611,6 +664,13 @@ export default class FileContext {
|
|
|
611
664
|
|
|
612
665
|
return variable;
|
|
613
666
|
}),
|
|
667
|
+
metaLemmas = this.metaLemmas.map((metaLemma) => {
|
|
668
|
+
const metaLemmaJSON = metaLemma.toJSON(this.tokens);
|
|
669
|
+
|
|
670
|
+
metaLemma = metaLemmaJSON; ///
|
|
671
|
+
|
|
672
|
+
return metaLemma;
|
|
673
|
+
}),
|
|
614
674
|
conjectures = this.conjectures.map((conjecture) => {
|
|
615
675
|
const conjectureJSON = conjecture.toJSON(this.tokens);
|
|
616
676
|
|
|
@@ -654,6 +714,7 @@ export default class FileContext {
|
|
|
654
714
|
lemmas,
|
|
655
715
|
theorems,
|
|
656
716
|
variables,
|
|
717
|
+
metaLemmas,
|
|
657
718
|
conjectures,
|
|
658
719
|
combinators,
|
|
659
720
|
constructors,
|
|
@@ -665,7 +726,7 @@ export default class FileContext {
|
|
|
665
726
|
}
|
|
666
727
|
|
|
667
728
|
initialise(json) {
|
|
668
|
-
const { types, rules, axioms, lemmas, theorems, variables, conjectures, combinators, constructors, metatheorems, metavariables } = json,
|
|
729
|
+
const { types, rules, axioms, lemmas, theorems, metaLemmas, variables, conjectures, combinators, constructors, metatheorems, metavariables } = json,
|
|
669
730
|
fileContext = this, ///
|
|
670
731
|
typesJSON = types, ///
|
|
671
732
|
rulesJSON = rules, ///
|
|
@@ -673,10 +734,11 @@ export default class FileContext {
|
|
|
673
734
|
lemmasJSON = lemmas, ///
|
|
674
735
|
theoremsJSON = theorems, ///
|
|
675
736
|
variablesJSON = variables, ///
|
|
737
|
+
metaLemmasJSON = metaLemmas || [], ///
|
|
676
738
|
conjecturesJSON = conjectures, ///
|
|
677
739
|
combinatorsJSON = combinators, ///
|
|
678
740
|
constructorsJSON = constructors, ///
|
|
679
|
-
metatheoremsJSON = metatheorems, ///
|
|
741
|
+
metatheoremsJSON = metatheorems || [], ///
|
|
680
742
|
metavariablesJSON = metavariables; ///
|
|
681
743
|
|
|
682
744
|
typesJSON.forEach((typeJSON) => {
|
|
@@ -721,6 +783,13 @@ export default class FileContext {
|
|
|
721
783
|
this.variables.push(variable);
|
|
722
784
|
});
|
|
723
785
|
|
|
786
|
+
metaLemmasJSON.forEach((metaLemmaJSON) => {
|
|
787
|
+
const json = metaLemmaJSON, ///
|
|
788
|
+
metaLemma = MetaLemma.fromJSONAndFileContext(json, fileContext);
|
|
789
|
+
|
|
790
|
+
this.metaLemmas.push(metaLemma);
|
|
791
|
+
});
|
|
792
|
+
|
|
724
793
|
conjecturesJSON.forEach((conjectureJSON) => {
|
|
725
794
|
const json = conjectureJSON, ///
|
|
726
795
|
conjecture = Conjecture.fromJSONAndFileContext(json, fileContext);
|
|
@@ -767,12 +836,13 @@ export default class FileContext {
|
|
|
767
836
|
lemmas = [],
|
|
768
837
|
theorems = [],
|
|
769
838
|
variables = [],
|
|
839
|
+
metaLemmas = [],
|
|
770
840
|
conjectures = [],
|
|
771
841
|
combinators = [],
|
|
772
842
|
constructors = [],
|
|
773
843
|
metatheorems = [],
|
|
774
844
|
metavariables = [],
|
|
775
|
-
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
|
|
845
|
+
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, metaLemmas, variables, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
|
|
776
846
|
|
|
777
847
|
fileContext.initialise(json);
|
|
778
848
|
|
|
@@ -790,12 +860,13 @@ export default class FileContext {
|
|
|
790
860
|
lemmas = [],
|
|
791
861
|
theorems = [],
|
|
792
862
|
variables = [],
|
|
863
|
+
metaLemmas = [],
|
|
793
864
|
conjectures = [],
|
|
794
865
|
combinators = [],
|
|
795
866
|
constructors = [],
|
|
796
867
|
metatheorems = [],
|
|
797
868
|
metavariables = [],
|
|
798
|
-
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
|
|
869
|
+
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, metaLemmas, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
|
|
799
870
|
|
|
800
871
|
return fileContext;
|
|
801
872
|
}
|
package/src/context/local.js
CHANGED
|
@@ -253,7 +253,7 @@ class LocalContext {
|
|
|
253
253
|
return variable;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
|
|
256
|
+
findMetaTypeByMetaTypeNode(metaTypeNode) { return this.context.findMetaTypeByMetaTypeNode(metaTypeNode); }
|
|
257
257
|
|
|
258
258
|
isVariablePresentByVariableNode(variableNode) {
|
|
259
259
|
const variable = this.findVariableByVariableNode(variableNode),
|
package/src/context/release.js
CHANGED
|
@@ -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
|
|
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/
|
|
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
|
-
|
|
17
|
-
const
|
|
18
|
-
labelName = labelNameFromLabelNode(labelNode),
|
|
19
|
-
matchesName = (labelName === name);
|
|
16
|
+
matchNode(node) {
|
|
17
|
+
const matches = this.node.match(node);
|
|
20
18
|
|
|
21
|
-
return
|
|
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
|
+
}
|
package/src/metaLemma.js
ADDED
|
@@ -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
|
+
}
|