occam-verify-cli 0.0.697 → 0.0.698
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/assignment/equality.js +6 -4
- package/lib/assignment/metavariable.js +62 -0
- package/lib/assignment/variable.js +6 -4
- package/lib/context/file.js +34 -26
- package/lib/context/local.js +24 -16
- package/lib/context/localMeta.js +17 -13
- package/lib/equality.js +13 -5
- package/lib/metavariable.js +25 -22
- package/lib/substitution/metastatementForMetavariable.js +17 -10
- package/lib/substitution/statementForMetavariable.js +17 -10
- package/lib/substitution/termForVariable.js +17 -11
- package/lib/utilities/query.js +2 -16
- package/lib/variable.js +33 -27
- package/lib/verifier/node/metastatement.js +2 -3
- package/lib/verifier/node.js +2 -2
- package/lib/verifier/nodes/metastatementForMetavariable.js +5 -5
- package/lib/verifier/nodes/statementForMetavariable.js +5 -5
- package/lib/verifier/nodes/termForVariable.js +6 -6
- package/lib/verifier/nodes.js +2 -2
- package/lib/verify/derivation.js +2 -2
- package/lib/verify/equality.js +3 -3
- package/lib/verify/file.js +2 -2
- package/lib/verify/metavariable.js +8 -6
- package/lib/verify/standaloneType.js +32 -0
- package/lib/verify/statement/unqualified.js +2 -2
- package/lib/verify/supposition.js +7 -4
- package/lib/verify/term.js +3 -3
- package/lib/verify/termAndStandaloneType.js +39 -0
- package/lib/verify/termAsVariableAndStandaloneType.js +39 -0
- package/lib/verify/theorem.js +3 -3
- package/lib/verify/type.js +2 -2
- package/lib/verify/typeAssertion.js +57 -91
- package/lib/verify/variable.js +12 -10
- package/package.json +1 -1
- package/src/assignment/equality.js +12 -3
- package/src/assignment/metavariable.js +30 -0
- package/src/assignment/variable.js +12 -3
- package/src/context/file.js +41 -29
- package/src/context/local.js +34 -19
- package/src/context/localMeta.js +21 -15
- package/src/equality.js +10 -3
- package/src/metavariable.js +25 -18
- package/src/substitution/metastatementForMetavariable.js +13 -7
- package/src/substitution/statementForMetavariable.js +13 -7
- package/src/substitution/termForVariable.js +13 -9
- package/src/utilities/query.js +1 -19
- package/src/variable.js +41 -26
- package/src/verifier/node/metastatement.js +1 -3
- package/src/verifier/nodes/metastatementForMetavariable.js +5 -7
- package/src/verifier/nodes/statementForMetavariable.js +5 -7
- package/src/verifier/nodes/termForVariable.js +6 -8
- package/src/verify/derivation.js +1 -1
- package/src/verify/equality.js +2 -2
- package/src/verify/file.js +1 -1
- package/src/verify/metavariable.js +10 -9
- package/src/verify/standaloneType.js +34 -0
- package/src/verify/statement/unqualified.js +1 -1
- package/src/verify/supposition.js +7 -3
- package/src/verify/term.js +3 -4
- package/src/verify/termAndStandaloneType.js +37 -0
- package/src/verify/termAsVariableAndStandaloneType.js +38 -0
- package/src/verify/theorem.js +2 -2
- package/src/verify/type.js +1 -1
- package/src/verify/typeAssertion.js +76 -112
- package/src/verify/variable.js +13 -13
package/src/context/file.js
CHANGED
|
@@ -331,13 +331,13 @@ export default class FileContext {
|
|
|
331
331
|
return theorem;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
-
|
|
335
|
-
const
|
|
334
|
+
findVariableByVariableNode(variableNode) {
|
|
335
|
+
const node = variableNode, ///
|
|
336
336
|
variables = this.getVariables(),
|
|
337
337
|
variable = variables.find((variable) => {
|
|
338
|
-
const
|
|
338
|
+
const nodeMatches = variable.matchNode(node);
|
|
339
339
|
|
|
340
|
-
if (
|
|
340
|
+
if (nodeMatches) {
|
|
341
341
|
return true;
|
|
342
342
|
}
|
|
343
343
|
}) || null;
|
|
@@ -372,11 +372,11 @@ export default class FileContext {
|
|
|
372
372
|
return conjecture;
|
|
373
373
|
}
|
|
374
374
|
|
|
375
|
-
|
|
376
|
-
const
|
|
375
|
+
findMetavariableByMetavariableNode(metavariableNode) {
|
|
376
|
+
const node = metavariableNode, ///
|
|
377
377
|
metavariables = this.getMetavariables(),
|
|
378
378
|
metavariable = metavariables.find((metavariable) => {
|
|
379
|
-
const matches = metavariable.
|
|
379
|
+
const matches = metavariable.matchNode(node);
|
|
380
380
|
|
|
381
381
|
if (matches) {
|
|
382
382
|
return true;
|
|
@@ -400,15 +400,15 @@ export default class FileContext {
|
|
|
400
400
|
return typePresent;
|
|
401
401
|
}
|
|
402
402
|
|
|
403
|
-
|
|
404
|
-
const variable = this.
|
|
403
|
+
isVariablePresentByVariableNode(variableNode) {
|
|
404
|
+
const variable = this.findVariableByVariableNode(variableNode),
|
|
405
405
|
variablePresent = (variable !== null);
|
|
406
406
|
|
|
407
407
|
return variablePresent;
|
|
408
408
|
}
|
|
409
409
|
|
|
410
|
-
|
|
411
|
-
const metavariable = this.
|
|
410
|
+
isMetavariablePresentByMetavariableNode(metavariableNode) {
|
|
411
|
+
const metavariable = this.findMetavariableByMetavariableNode(metavariableNode),
|
|
412
412
|
metavariablePresent = (metavariable !== null);
|
|
413
413
|
|
|
414
414
|
return metavariablePresent;
|
|
@@ -453,18 +453,24 @@ export default class FileContext {
|
|
|
453
453
|
}
|
|
454
454
|
|
|
455
455
|
addVariable(variable) {
|
|
456
|
-
|
|
456
|
+
let variableAdded = false;
|
|
457
457
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
458
|
+
const node = variable.getNode(),
|
|
459
|
+
variablePresent = this.variables.some((variable) => {
|
|
460
|
+
const nodeMatches = variable.matchNode(node);
|
|
461
461
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
462
|
+
if (nodeMatches) {
|
|
463
|
+
return true;
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
if (!variablePresent) {
|
|
468
|
+
this.variables.push(variable);
|
|
469
|
+
|
|
470
|
+
variableAdded = true;
|
|
471
|
+
}
|
|
466
472
|
|
|
467
|
-
|
|
473
|
+
return variableAdded;
|
|
468
474
|
}
|
|
469
475
|
|
|
470
476
|
addConjecture(conjecture) {
|
|
@@ -480,18 +486,24 @@ export default class FileContext {
|
|
|
480
486
|
}
|
|
481
487
|
|
|
482
488
|
addMetavariable(metavariable) {
|
|
483
|
-
|
|
489
|
+
let metavariableAdded = false;
|
|
484
490
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
491
|
+
const node = metavariable.getNode(),
|
|
492
|
+
metavariablePresent = this.metavariables.some((metavariable) => {
|
|
493
|
+
const nodeMatches = metavariable.matchNode(node);
|
|
488
494
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
495
|
+
if (nodeMatches) {
|
|
496
|
+
return true;
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
if (!metavariablePresent) {
|
|
501
|
+
this.metavariables.push(metavariable);
|
|
502
|
+
|
|
503
|
+
metavariableAdded = true;
|
|
504
|
+
}
|
|
493
505
|
|
|
494
|
-
|
|
506
|
+
return metavariableAdded;
|
|
495
507
|
}
|
|
496
508
|
|
|
497
509
|
trace(message, node) { this.releaseContext.trace(message, node, this.tokens, this.filePath); }
|
package/src/context/local.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Variable from "../variable";
|
|
4
|
-
import Equality from "../equality";
|
|
5
4
|
import Collection from "../collection";
|
|
6
5
|
import fileMixins from "../mixins/file";
|
|
7
6
|
import loggingMixins from "../mixins/logging";
|
|
8
7
|
|
|
9
|
-
import { last
|
|
8
|
+
import { last } from "../utilities/array";
|
|
10
9
|
import { mergeCollections, findCollectionByType, findCollectionByTerm, findCollectionByTerms } from "../utilities/collection";
|
|
11
10
|
|
|
12
11
|
class LocalContext {
|
|
@@ -69,15 +68,17 @@ class LocalContext {
|
|
|
69
68
|
getMetavariables() { return this.context.getMetavariables(); }
|
|
70
69
|
|
|
71
70
|
addEquality(equality) {
|
|
71
|
+
let equalityAdded;
|
|
72
|
+
|
|
72
73
|
const equalityReflexive = equality.isReflexive();
|
|
73
74
|
|
|
74
75
|
if (equalityReflexive) {
|
|
75
|
-
///
|
|
76
|
+
equalityAdded = true; ///
|
|
76
77
|
} else {
|
|
77
78
|
const leftTerm = equality.getLeftTerm(),
|
|
78
79
|
rightTerm = equality.getRightTerm(),
|
|
79
|
-
leftCollection = this.
|
|
80
|
-
rightCollection = this.
|
|
80
|
+
leftCollection = findCollectionByTerm(this.collections, leftTerm),
|
|
81
|
+
rightCollection = findCollectionByTerm(this.collections, rightTerm);
|
|
81
82
|
|
|
82
83
|
if (false) {
|
|
83
84
|
///
|
|
@@ -85,37 +86,51 @@ class LocalContext {
|
|
|
85
86
|
const collection = Collection.fromEquality(equality);
|
|
86
87
|
|
|
87
88
|
this.addCollection(collection);
|
|
89
|
+
|
|
90
|
+
equalityAdded = true;
|
|
88
91
|
} else if ((leftCollection !== null) && (rightCollection === null)) {
|
|
89
92
|
const term = rightTerm, ///
|
|
90
93
|
collection = leftCollection; ///
|
|
91
94
|
|
|
92
95
|
collection.addTerm(term);
|
|
96
|
+
|
|
97
|
+
equalityAdded = true;
|
|
93
98
|
} else if ((leftCollection === null) && (rightCollection !== null)) {
|
|
94
99
|
const term = leftTerm, ///
|
|
95
100
|
collection = rightCollection; ///
|
|
96
101
|
|
|
97
102
|
collection.addTerm(term);
|
|
103
|
+
|
|
104
|
+
equalityAdded = true;
|
|
98
105
|
} else if ((leftCollection !== null) && (rightCollection !== null)) {
|
|
99
106
|
|
|
100
107
|
debugger
|
|
101
108
|
|
|
102
109
|
}
|
|
103
110
|
}
|
|
111
|
+
|
|
112
|
+
return equalityAdded;
|
|
104
113
|
}
|
|
105
114
|
|
|
106
115
|
addVariable(variable) {
|
|
107
|
-
|
|
116
|
+
let variableAdded = false;
|
|
108
117
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
118
|
+
const node = variable.getNode(),
|
|
119
|
+
variablePresent = this.variables.some((variable) => {
|
|
120
|
+
const nodeMatches = variable.matchNode(node);
|
|
112
121
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
if (nodeMatches) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
if (!variablePresent) {
|
|
128
|
+
this.variables.push(variable);
|
|
129
|
+
|
|
130
|
+
variableAdded = true;
|
|
131
|
+
}
|
|
117
132
|
|
|
118
|
-
|
|
133
|
+
return variableAdded;
|
|
119
134
|
}
|
|
120
135
|
|
|
121
136
|
addProofStep(proofStep) {
|
|
@@ -169,11 +184,11 @@ class LocalContext {
|
|
|
169
184
|
return collection;
|
|
170
185
|
}
|
|
171
186
|
|
|
172
|
-
|
|
173
|
-
const
|
|
187
|
+
findVariableByVariableNode(variableNode) {
|
|
188
|
+
const node = variableNode, ///
|
|
174
189
|
variables = this.getVariables(),
|
|
175
190
|
variable = variables.find((variable) => {
|
|
176
|
-
const matches = variable.
|
|
191
|
+
const matches = variable.matchNode(node);
|
|
177
192
|
|
|
178
193
|
if (matches) {
|
|
179
194
|
return true;
|
|
@@ -183,8 +198,8 @@ class LocalContext {
|
|
|
183
198
|
return variable;
|
|
184
199
|
}
|
|
185
200
|
|
|
186
|
-
|
|
187
|
-
const variable = this.
|
|
201
|
+
isVariablePresentByVariableNode(variableNode) {
|
|
202
|
+
const variable = this.findVariableByVariableNode(variableNode),
|
|
188
203
|
variablePresent = (variable !== null);
|
|
189
204
|
|
|
190
205
|
return variablePresent;
|
package/src/context/localMeta.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import fileMixins from "../mixins/file";
|
|
4
4
|
import loggingMixins from "../mixins/logging";
|
|
5
5
|
|
|
6
|
-
import { last
|
|
6
|
+
import { last } from "../utilities/array";
|
|
7
7
|
|
|
8
8
|
class LocalMetaContext {
|
|
9
9
|
constructor(context, metavariables, metaproofSteps) {
|
|
@@ -53,18 +53,24 @@ class LocalMetaContext {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
addMetavariable(metavariable) {
|
|
56
|
-
|
|
56
|
+
let metavariableAdded = false;
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
const node = metavariable.getName(),
|
|
59
|
+
metavariablePresent = this.metavariables.some((metavariable) => {
|
|
60
|
+
const nodeMatches = metavariable.matchNode(node);
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
if (nodeMatches) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
if (!metavariablePresent) {
|
|
68
|
+
this.metavariables.push(metavariable);
|
|
69
|
+
|
|
70
|
+
metavariableAdded = true;
|
|
71
|
+
}
|
|
66
72
|
|
|
67
|
-
|
|
73
|
+
return metavariableAdded;
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
addMetaproofStep(metaproofStep) {
|
|
@@ -93,11 +99,11 @@ class LocalMetaContext {
|
|
|
93
99
|
return metastatementMatches;
|
|
94
100
|
}
|
|
95
101
|
|
|
96
|
-
|
|
97
|
-
const
|
|
102
|
+
findMetavariableByMetavariableNode(metavariableNode) {
|
|
103
|
+
const node = metavariableNode, ///
|
|
98
104
|
metavariables = this.getMetavariables(),
|
|
99
105
|
metavariable = metavariables.find((metavariable) => {
|
|
100
|
-
const matches = metavariable.
|
|
106
|
+
const matches = metavariable.matchNode(node);
|
|
101
107
|
|
|
102
108
|
if (matches) {
|
|
103
109
|
return true;
|
|
@@ -107,8 +113,8 @@ class LocalMetaContext {
|
|
|
107
113
|
return metavariable;
|
|
108
114
|
}
|
|
109
115
|
|
|
110
|
-
|
|
111
|
-
const metavariable = this.
|
|
116
|
+
isMetavariablePresentByMetavariableNode(metavariableNode) {
|
|
117
|
+
const metavariable = this.findMetavariableByMetavariableNode(metavariableNode),
|
|
112
118
|
metavariablePresent = (metavariable !== null);
|
|
113
119
|
|
|
114
120
|
return metavariablePresent;
|
package/src/equality.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export default class Equality {
|
|
4
|
-
constructor(leftTerm, rightTerm) {
|
|
4
|
+
constructor(node, leftTerm, rightTerm) {
|
|
5
|
+
this.node = node;
|
|
5
6
|
this.leftTerm = leftTerm;
|
|
6
7
|
this.rightTerm = rightTerm;
|
|
7
8
|
}
|
|
8
9
|
|
|
10
|
+
getNode() {
|
|
11
|
+
return this.node;
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
getLeftTerm() {
|
|
10
15
|
return this.leftTerm;
|
|
11
16
|
}
|
|
@@ -21,7 +26,7 @@ export default class Equality {
|
|
|
21
26
|
return reflexive;
|
|
22
27
|
}
|
|
23
28
|
|
|
24
|
-
static
|
|
29
|
+
static fromEqualityNodeLeftTermAndRightTerm(equalityNode, leftTerm, rightTerm) {
|
|
25
30
|
let equality = null;
|
|
26
31
|
|
|
27
32
|
const leftTermType = leftTerm.getType(),
|
|
@@ -29,7 +34,9 @@ export default class Equality {
|
|
|
29
34
|
leftTermTypeEqualToSubTypeOfOrSuperTypeOfRightTermType = leftTermType.isEqualToSubTypeOfOrSuperTypeOf(rightTermType);
|
|
30
35
|
|
|
31
36
|
if (leftTermTypeEqualToSubTypeOfOrSuperTypeOfRightTermType) {
|
|
32
|
-
|
|
37
|
+
const node = equalityNode; ///
|
|
38
|
+
|
|
39
|
+
equality = new Equality(node, leftTerm, rightTerm);
|
|
33
40
|
}
|
|
34
41
|
|
|
35
42
|
return equality;
|
package/src/metavariable.js
CHANGED
|
@@ -2,32 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
import MetaType from "./metaType";
|
|
4
4
|
|
|
5
|
+
import { nodeAsString } from "./utilities/string";
|
|
6
|
+
|
|
5
7
|
export default class Metavariable {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
8
|
+
constructor(node, metaType) {
|
|
9
|
+
this.node = node;
|
|
8
10
|
this.metaType = metaType;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
return this.
|
|
13
|
+
getNode() {
|
|
14
|
+
return this.node;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
getMetaType() {
|
|
16
18
|
return this.metaType;
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
+
matchNode(node) {
|
|
22
|
+
const nodeMatches = this.node.match(node);
|
|
21
23
|
|
|
22
|
-
return
|
|
24
|
+
return nodeMatches;
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
toJSON(tokens) {
|
|
26
28
|
const metaTypeJSON = this.metaType.toJSON(tokens),
|
|
27
|
-
name = this.name, ///
|
|
28
29
|
metaType = metaTypeJSON, ///
|
|
30
|
+
string = nodeAsString(this.node, tokens),
|
|
31
|
+
node = string, ///
|
|
29
32
|
json = {
|
|
30
|
-
|
|
33
|
+
node,
|
|
31
34
|
metaType
|
|
32
35
|
};
|
|
33
36
|
|
|
@@ -35,20 +38,17 @@ export default class Metavariable {
|
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
asString(tokens) {
|
|
38
|
-
const metaTypeName = this.metaType.getName()
|
|
39
|
-
string = `${this.name}:${metaTypeName}`;
|
|
41
|
+
const metaTypeName = this.metaType.getName();
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
+
let string = nodeAsString(this.node, tokens);
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
const metavariable = new Metavariable(name, metaType);
|
|
45
|
+
string = `${string}:${metaTypeName}`;
|
|
46
46
|
|
|
47
|
-
return
|
|
47
|
+
return string;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
static fromJSONAndFileContext(json, fileContext) {
|
|
51
|
-
const {
|
|
51
|
+
const { node } = json;
|
|
52
52
|
|
|
53
53
|
let { metaType } = json;
|
|
54
54
|
|
|
@@ -60,7 +60,14 @@ export default class Metavariable {
|
|
|
60
60
|
|
|
61
61
|
metaType = fileContext.findMetaTypeByMetaTypeName(metaTypeName); ///
|
|
62
62
|
|
|
63
|
-
const metavariable = new Metavariable(
|
|
63
|
+
const metavariable = new Metavariable(node, metaType);
|
|
64
|
+
|
|
65
|
+
return metavariable;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
static fromMetavariableNodeAndMetaType(metavariableNode, metaType) {
|
|
69
|
+
const node = metavariableNode, ///
|
|
70
|
+
metavariable = new Metavariable(node, metaType);
|
|
64
71
|
|
|
65
72
|
return metavariable;
|
|
66
73
|
}
|
|
@@ -3,19 +3,25 @@
|
|
|
3
3
|
import { bracketedMetastatementChildNodeFromMetastatementNode } from "../utilities/metaproof";
|
|
4
4
|
|
|
5
5
|
export default class MetastatementForMetavariableSubstitution {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
6
|
+
constructor(metavariableNode, metastatementNode) {
|
|
7
|
+
this.metavariableNode = metavariableNode;
|
|
8
8
|
this.metastatementNode = metastatementNode;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
return this.
|
|
11
|
+
getMetavariableNode() {
|
|
12
|
+
return this.metavariableNode;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
getMetastatementNode() {
|
|
16
16
|
return this.metastatementNode;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
matchMetavariableNode(metavariableNode) {
|
|
20
|
+
const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
|
|
21
|
+
|
|
22
|
+
return metavariableNodeMatches;
|
|
23
|
+
}
|
|
24
|
+
|
|
19
25
|
matchMetastatementNode(metastatementNode) {
|
|
20
26
|
let metastatementNodeMatches;
|
|
21
27
|
|
|
@@ -34,15 +40,15 @@ export default class MetastatementForMetavariableSubstitution {
|
|
|
34
40
|
return metastatementNodeMatches;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
|
-
static
|
|
38
|
-
let metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(
|
|
43
|
+
static fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode) {
|
|
44
|
+
let metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableNode, metastatementNode);
|
|
39
45
|
|
|
40
46
|
const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode);
|
|
41
47
|
|
|
42
48
|
if (bracketedMetastatementChildNode !== null) {
|
|
43
49
|
const metastatementNode = bracketedMetastatementChildNode; ///
|
|
44
50
|
|
|
45
|
-
metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(
|
|
51
|
+
metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableNode, metastatementNode);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
return metastatementForMetavariableSubstitution;
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
|
|
4
4
|
|
|
5
5
|
export default class StatementForMetavariableSubstitution {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
6
|
+
constructor(metavariableNode, statementNode) {
|
|
7
|
+
this.metavariableNode = metavariableNode;
|
|
8
8
|
this.statementNode = statementNode;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
return this.
|
|
11
|
+
getMetavariableNode() {
|
|
12
|
+
return this.metavariableNode;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
getStatementNode() {
|
|
@@ -34,15 +34,21 @@ export default class StatementForMetavariableSubstitution {
|
|
|
34
34
|
return statementNodeMatches;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
matchMetavariableNode(metavariableNode) {
|
|
38
|
+
const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
|
|
39
|
+
|
|
40
|
+
return metavariableNodeMatches;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static fromMetavariableNodeAndStatementNode(metavariableNode, statementNode) {
|
|
44
|
+
let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableNode, statementNode);
|
|
39
45
|
|
|
40
46
|
const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
|
|
41
47
|
|
|
42
48
|
if (bracketedStatementChildNode !== null) {
|
|
43
49
|
const statementNode = bracketedStatementChildNode; ///
|
|
44
50
|
|
|
45
|
-
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(
|
|
51
|
+
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableNode, statementNode);
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
return statementForMetavariableSubstitution;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export default class TermForVariableSubstitution {
|
|
4
|
-
constructor(
|
|
5
|
-
this.
|
|
4
|
+
constructor(variableNode, termNode) {
|
|
5
|
+
this.variableNode = variableNode;
|
|
6
6
|
this.termNode = termNode;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
return this.
|
|
9
|
+
getVariableNode() {
|
|
10
|
+
return this.variableNode;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
getTermNode() {
|
|
@@ -15,15 +15,19 @@ export default class TermForVariableSubstitution {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
matchTermNode(termNode) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
termNodeMatches = this.termNode.match(termNode);
|
|
18
|
+
const termNodeMatches = this.termNode.match(termNode);
|
|
21
19
|
|
|
22
20
|
return termNodeMatches;
|
|
23
21
|
}
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
const
|
|
23
|
+
matchVariableNode(variableNode) {
|
|
24
|
+
const variableNodeMatches = this.variableNode.match(variableNode);
|
|
25
|
+
|
|
26
|
+
return variableNodeMatches;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static fromVariableNodeAndTermNode(variableNode, termNode) {
|
|
30
|
+
const termForVariableSubstitution = new TermForVariableSubstitution(variableNode, termNode);
|
|
27
31
|
|
|
28
32
|
return termForVariableSubstitution;
|
|
29
33
|
}
|
package/src/utilities/query.js
CHANGED
|
@@ -5,9 +5,7 @@ import { Query } from "occam-dom";
|
|
|
5
5
|
const typeTerminalNodeQuery = nodeQuery("/type/@type"),
|
|
6
6
|
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type"),
|
|
7
7
|
labelNameTerminalNodeQuery = nodeQuery("/label/@name"),
|
|
8
|
-
|
|
9
|
-
referenceNameTerminalNodeQuery = nodeQuery("/reference/@name"),
|
|
10
|
-
metavariableNameTerminalNodeQuery = nodeQuery("/metavariable/@name");
|
|
8
|
+
referenceNameTerminalNodeQuery = nodeQuery("/reference/@name");
|
|
11
9
|
|
|
12
10
|
export function nodeQuery(expression) {
|
|
13
11
|
const query = Query.fromExpression(expression);
|
|
@@ -71,14 +69,6 @@ export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
|
|
|
71
69
|
return metaTypeName;
|
|
72
70
|
}
|
|
73
71
|
|
|
74
|
-
export function variableNameFromVariableNode(variableNode) {
|
|
75
|
-
const variableNameTerminalNode = variableNameTerminalNodeQuery(variableNode),
|
|
76
|
-
variableNameTerminalNodeContent = variableNameTerminalNode.getContent(),
|
|
77
|
-
variableName = variableNameTerminalNodeContent; ///
|
|
78
|
-
|
|
79
|
-
return variableName;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
72
|
export function referenceNameFromReferenceNode(referenceNode) {
|
|
83
73
|
const referenceNameTerminalNode = referenceNameTerminalNodeQuery(referenceNode),
|
|
84
74
|
referenceNameTerminalNodeContent = referenceNameTerminalNode.getContent(),
|
|
@@ -86,11 +76,3 @@ export function referenceNameFromReferenceNode(referenceNode) {
|
|
|
86
76
|
|
|
87
77
|
return referenceName;
|
|
88
78
|
}
|
|
89
|
-
|
|
90
|
-
export function metavariableNameFromMetavariableNode(metavariableNode) {
|
|
91
|
-
const metavariableNameTerminalNode = metavariableNameTerminalNodeQuery(metavariableNode),
|
|
92
|
-
metavariableNameTerminalNodeContent = metavariableNameTerminalNode.getContent(),
|
|
93
|
-
metavariableName = metavariableNameTerminalNodeContent; ///
|
|
94
|
-
|
|
95
|
-
return metavariableName;
|
|
96
|
-
}
|