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.
- package/lib/axiomLemmaTheoremConjecture.js +7 -7
- package/lib/context/file.js +162 -60
- package/lib/context/local.js +4 -4
- package/lib/context/release.js +32 -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 +126 -0
- 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/verifier/nodes.js +10 -10
- package/lib/verify/declaration/metavariable.js +4 -4
- 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 +187 -73
- package/src/context/local.js +1 -1
- package/src/context/release.js +37 -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 +9 -0
- 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/verifier/nodes.js +9 -9
- package/src/verify/declaration/metavariable.js +4 -3
- 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/src/context/file.js
CHANGED
|
@@ -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
|
-
|
|
252
|
-
|
|
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
|
-
|
|
258
|
-
return true;
|
|
259
|
-
}
|
|
260
|
-
}) || null;
|
|
282
|
+
types.push(objectType);
|
|
261
283
|
|
|
262
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
282
|
-
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, ///
|
|
283
327
|
rules = this.getRules(),
|
|
284
328
|
rule = rules.find((rule) => {
|
|
285
|
-
const
|
|
329
|
+
const ruleMatchesLabelNode = rule.matchLabelNode(labelNode);
|
|
286
330
|
|
|
287
|
-
if (
|
|
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
|
-
|
|
296
|
-
const
|
|
339
|
+
findAxiomByReferenceNode(referenceNode) {
|
|
340
|
+
const labelNode = referenceNode, ///
|
|
297
341
|
axioms = this.getAxioms(),
|
|
298
342
|
axiom = axioms.find((axiom) => {
|
|
299
|
-
const
|
|
343
|
+
const axiomMatchesLabelNode = axiom.matchLabelNode(labelNode);
|
|
300
344
|
|
|
301
|
-
if (
|
|
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
|
-
|
|
310
|
-
const
|
|
353
|
+
findLemmaByReferenceNode(referenceNode) {
|
|
354
|
+
const labelNode = referenceNode, ///
|
|
311
355
|
lemmas = this.getLemmas(),
|
|
312
356
|
lemma = lemmas.find((lemma) => {
|
|
313
|
-
const
|
|
357
|
+
const lemmaMatchesLabelNode = lemma.matchLabelNode(labelNode);
|
|
314
358
|
|
|
315
|
-
if (
|
|
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
|
-
|
|
324
|
-
const
|
|
367
|
+
findTheoremByReferenceNode(referenceNode) {
|
|
368
|
+
const labelNode = referenceNode, ///
|
|
325
369
|
theorems = this.getTheorems(),
|
|
326
370
|
theorem = theorems.find((theorem) => {
|
|
327
|
-
const
|
|
371
|
+
const theoremMatchesLabelNode = theorem.matchLabelNode(labelNode);
|
|
328
372
|
|
|
329
|
-
if (
|
|
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
|
-
|
|
409
|
+
findMetaTypeByMetaTypeNode(metaTypeNode) {
|
|
352
410
|
const metaTypes = this.getMetaTypes(),
|
|
353
411
|
metaType = metaTypes.find((metaType) => {
|
|
354
|
-
const matches = metaType.
|
|
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
|
-
|
|
365
|
-
const
|
|
422
|
+
findConjectureByReferenceNode(referenceNode) {
|
|
423
|
+
const labelNode = referenceNode, ///
|
|
366
424
|
conjectures = this.getConjectures(),
|
|
367
425
|
conjecture = conjectures.find((conjecture) => {
|
|
368
|
-
const
|
|
426
|
+
const conjectureMatchesLabelNode = conjecture.matchLabelNode(labelNode);
|
|
369
427
|
|
|
370
|
-
if (
|
|
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
|
-
|
|
393
|
-
const
|
|
394
|
-
|
|
395
|
-
|
|
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
|
-
|
|
399
|
-
|
|
456
|
+
if (metatheoremMatchesLabelNode) {
|
|
457
|
+
return true;
|
|
458
|
+
}
|
|
459
|
+
}) || null;
|
|
400
460
|
|
|
401
|
-
return
|
|
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
|
-
|
|
412
|
-
const
|
|
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
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
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
|
}
|
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
|
|
|
@@ -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/
|
|
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
|
+
}
|