occam-verify-cli 0.0.921 → 0.0.923
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 +3 -4
- package/lib/conclusion.js +13 -43
- package/lib/constants.js +1 -5
- package/lib/context/local.js +386 -0
- package/lib/declaration.js +15 -15
- package/lib/metaLemmaMetatheorem.js +59 -59
- package/lib/mixins/context.js +17 -13
- package/lib/mixins/nodesVerifier/metaLevel.js +6 -6
- package/lib/premise.js +16 -94
- package/lib/{step/proof.js → proofStep.js} +1 -1
- package/lib/rule.js +1 -45
- package/lib/ruleNames.js +1 -9
- package/lib/substitution/statementForMetavariable.js +9 -1
- package/lib/substitution.js +1 -8
- package/lib/supposition.js +55 -1
- package/lib/utilities/customGrammar.js +2 -2
- package/lib/utilities/match.js +13 -50
- package/lib/utilities/node.js +2 -27
- package/lib/utilities/tokens.js +1 -8
- package/lib/utilities/verify.js +8 -24
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +29 -29
- package/lib/verifier/nodes/metaLevel.js +13 -13
- package/lib/verify/axiom.js +3 -3
- package/lib/verify/conclusion.js +10 -11
- package/lib/verify/conjecture.js +3 -3
- package/lib/verify/declaration.js +6 -6
- package/lib/verify/lemma.js +3 -3
- package/lib/verify/metaLemma.js +13 -13
- package/lib/verify/metastatement.js +64 -64
- package/lib/verify/metatheorem.js +13 -13
- package/lib/verify/premise.js +11 -30
- package/lib/verify/proof.js +3 -4
- package/lib/verify/proofStep.js +5 -5
- package/lib/verify/rule.js +11 -11
- package/lib/verify/statement/qualified.js +35 -9
- package/lib/verify/statement/unqualified.js +1 -1
- package/lib/verify/subproof.js +3 -4
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/termAsConstructor.js +3 -3
- package/lib/verify/theorem.js +3 -3
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +2 -4
- package/src/conclusion.js +15 -54
- package/src/constants.js +0 -1
- package/src/context/{local/intrinsicLevel.js → local.js} +182 -97
- package/src/declaration.js +19 -19
- package/src/metaLemmaMetatheorem.js +58 -58
- package/src/mixins/context.js +12 -9
- package/src/mixins/nodesVerifier/metaLevel.js +8 -8
- package/src/premise.js +25 -143
- package/src/rule.js +0 -67
- package/src/ruleNames.js +0 -2
- package/src/substitution/statementForMetavariable.js +14 -0
- package/src/substitution.js +0 -6
- package/src/supposition.js +46 -0
- package/src/utilities/customGrammar.js +1 -2
- package/src/utilities/match.js +13 -60
- package/src/utilities/node.js +3 -32
- package/src/utilities/tokens.js +0 -8
- package/src/utilities/verify.js +4 -20
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +36 -37
- package/src/verifier/nodes/metaLevel.js +17 -17
- package/src/verify/axiom.js +3 -4
- package/src/verify/conclusion.js +9 -13
- package/src/verify/conjecture.js +3 -4
- package/src/verify/declaration.js +7 -7
- package/src/verify/lemma.js +3 -4
- package/src/verify/metaLemma.js +24 -25
- package/src/verify/metastatement.js +64 -64
- package/src/verify/metatheorem.js +23 -24
- package/src/verify/premise.js +14 -46
- package/src/verify/proof.js +2 -4
- package/src/verify/proofStep.js +1 -1
- package/src/verify/rule.js +11 -12
- package/src/verify/statement/qualified.js +43 -9
- package/src/verify/statement/unqualified.js +1 -1
- package/src/verify/subproof.js +2 -4
- package/src/verify/supposition.js +1 -1
- package/src/verify/termAsConstructor.js +3 -4
- package/src/verify/theorem.js +3 -4
- package/lib/context/local/intrinsicLevel.js +0 -326
- package/lib/context/local/metaLevel.js +0 -282
- package/lib/metaConsequent.js +0 -108
- package/lib/metaSupposition.js +0 -160
- package/lib/node/metastatement/bracketed.js +0 -16
- package/lib/step/metaproof.js +0 -106
- package/lib/substitution/metastatementForMetavariable.js +0 -173
- package/lib/verify/metaConsequent.js +0 -50
- package/lib/verify/metaDerivation.js +0 -31
- package/lib/verify/metaSubDerivation.js +0 -25
- package/lib/verify/metaSubproof.js +0 -35
- package/lib/verify/metaSupposition.js +0 -61
- package/lib/verify/metaSuppositions.js +0 -28
- package/lib/verify/metaproof.js +0 -32
- package/lib/verify/metaproofStep.js +0 -98
- package/lib/verify/metastatement/qualified.js +0 -95
- package/lib/verify/metastatement/unqualified.js +0 -37
- package/lib/verify/metastatementAsContainedAssertion.js +0 -109
- package/lib/verify/metastatementAsDefinedAssertion.js +0 -132
- package/lib/verify/metavariableAgainstMetastatement.js +0 -44
- package/src/context/local/metaLevel.js +0 -191
- package/src/metaConsequent.js +0 -83
- package/src/metaSupposition.js +0 -127
- package/src/node/metastatement/bracketed.js +0 -9
- package/src/step/metaproof.js +0 -73
- package/src/substitution/metastatementForMetavariable.js +0 -90
- package/src/verify/metaConsequent.js +0 -61
- package/src/verify/metaDerivation.js +0 -23
- package/src/verify/metaSubDerivation.js +0 -22
- package/src/verify/metaSubproof.js +0 -34
- package/src/verify/metaSupposition.js +0 -78
- package/src/verify/metaSuppositions.js +0 -17
- package/src/verify/metaproof.js +0 -30
- package/src/verify/metaproofStep.js +0 -137
- package/src/verify/metastatement/qualified.js +0 -130
- package/src/verify/metastatement/unqualified.js +0 -34
- package/src/verify/metastatementAsContainedAssertion.js +0 -127
- package/src/verify/metastatementAsDefinedAssertion.js +0 -156
- package/src/verify/metavariableAgainstMetastatement.js +0 -42
- /package/src/{step/proof.js → proofStep.js} +0 -0
package/src/conclusion.js
CHANGED
|
@@ -1,54 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import LocalContext from "./context/local";
|
|
4
4
|
import metaLevelNodesVerifier from "./verifier/nodes/metaLevel";
|
|
5
|
-
import intrinsicLevelAgainstMetaLevelNodesVerifier from "./verifier/nodes/intrinsicLevelAgainstMetaLevel";
|
|
6
5
|
|
|
7
6
|
import { nodeAsString } from "./utilities/string";
|
|
8
|
-
import { statementNodeFromStatementString
|
|
7
|
+
import { statementNodeFromStatementString } from "./utilities/node";
|
|
9
8
|
|
|
10
9
|
export default class Conclusion {
|
|
11
|
-
constructor(
|
|
12
|
-
this.metastatementNode = metastatementNode;
|
|
10
|
+
constructor(statementNode) {
|
|
13
11
|
this.statementNode = statementNode;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
|
-
getMetastatementNode() {
|
|
17
|
-
return this.metastatementNode;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
14
|
getStatementNode() {
|
|
21
15
|
return this.statementNode;
|
|
22
16
|
}
|
|
23
17
|
|
|
24
|
-
matchStatementNode(statementNode, substitutions,
|
|
25
|
-
let
|
|
18
|
+
matchStatementNode(statementNode, substitutions, fileContext, localContext) {
|
|
19
|
+
let matchesStatementNode = false;
|
|
26
20
|
|
|
27
|
-
if (this.
|
|
28
|
-
const
|
|
21
|
+
if (this.statementNode !== null) {
|
|
22
|
+
const fileContextA = fileContext, ///
|
|
23
|
+
nonTerminalNodeA = this.statementNode, ///
|
|
29
24
|
nonTerminalNodeB = statementNode, ///
|
|
30
|
-
localContextA =
|
|
31
|
-
localContextB = statementLocalContext, ///
|
|
32
|
-
nonTerminalNodeVerified = intrinsicLevelAgainstMetaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
|
|
33
|
-
const verifiedAhead = true;
|
|
34
|
-
|
|
35
|
-
return verifiedAhead;
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
matchesStatementNose = nonTerminalNodeVerified; ///
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return matchesStatementNose;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
matchMetastatementNode(metastatementNode, substitutions, fileContext, localContext) {
|
|
45
|
-
let matchesMetastatementNode = false;
|
|
46
|
-
|
|
47
|
-
if (this.metastatementNode !== null) {
|
|
48
|
-
const metaLevelLocalContext = MetaLevelLocalContext.fromFileContext(fileContext),
|
|
49
|
-
nonTerminalNodeA = this.metastatementNode, ///
|
|
50
|
-
nonTerminalNodeB = metastatementNode, ///
|
|
51
|
-
localContextA = metaLevelLocalContext, ///
|
|
25
|
+
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
52
26
|
localContextB = localContext, ///
|
|
53
27
|
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
|
|
54
28
|
const verifiedAhead = true;
|
|
@@ -56,19 +30,16 @@ export default class Conclusion {
|
|
|
56
30
|
return verifiedAhead;
|
|
57
31
|
});
|
|
58
32
|
|
|
59
|
-
|
|
33
|
+
matchesStatementNode = nonTerminalNodeVerified; ///
|
|
60
34
|
}
|
|
61
35
|
|
|
62
|
-
return
|
|
36
|
+
return matchesStatementNode;
|
|
63
37
|
}
|
|
64
38
|
|
|
65
39
|
toJSON(tokens) {
|
|
66
|
-
const
|
|
67
|
-
statementString = nodeAsString(this.statementNode, tokens),
|
|
68
|
-
metastatement = metastatementString, ///
|
|
40
|
+
const statementString = nodeAsString(this.statementNode, tokens),
|
|
69
41
|
statement = statementString, ///
|
|
70
42
|
json = {
|
|
71
|
-
metastatement,
|
|
72
43
|
statement
|
|
73
44
|
};
|
|
74
45
|
|
|
@@ -76,28 +47,18 @@ export default class Conclusion {
|
|
|
76
47
|
}
|
|
77
48
|
|
|
78
49
|
static fromStatementNode(statementNode) {
|
|
79
|
-
const
|
|
80
|
-
conclusion = new Conclusion(metastatementNode, statementNode);
|
|
81
|
-
|
|
82
|
-
return conclusion;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
static fromMetastatementNode(metastatementNode) {
|
|
86
|
-
const statementNode = null,
|
|
87
|
-
conclusion = new Conclusion(metastatementNode, statementNode);
|
|
50
|
+
const conclusion = new Conclusion(statementNode);
|
|
88
51
|
|
|
89
52
|
return conclusion;
|
|
90
53
|
}
|
|
91
54
|
|
|
92
55
|
static fromJSONAndFileContext(json, fileContext) {
|
|
93
|
-
const {
|
|
94
|
-
metastatementString = metastatement, ///
|
|
56
|
+
const { statement } = json,
|
|
95
57
|
statementString = statement, ///
|
|
96
58
|
lexer = fileContext.getLexer(),
|
|
97
59
|
parser = fileContext.getParser(),
|
|
98
|
-
metastatementNode = metastatementNodeFromMetastatementString(metastatementString, lexer, parser),
|
|
99
60
|
statementNode = statementNodeFromStatementString(statementString, lexer, parser),
|
|
100
|
-
conclusion = new Conclusion(
|
|
61
|
+
conclusion = new Conclusion(statementNode, statementNode);
|
|
101
62
|
|
|
102
63
|
return conclusion;
|
|
103
64
|
}
|
package/src/constants.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import Variable from "
|
|
4
|
-
import Equivalence from "
|
|
5
|
-
import contextMixins from "
|
|
3
|
+
import Variable from "../variable";
|
|
4
|
+
import Equivalence from "../equivalence";
|
|
5
|
+
import contextMixins from "../mixins/context";
|
|
6
6
|
|
|
7
|
-
import { last, reverse } from "
|
|
8
|
-
import { mergeEquivalences, findEquivalenceByTerm, groundedTermsAndDefinedVariablesFromFromEquivalences } from "
|
|
7
|
+
import { last, reverse } from "../utilities/array";
|
|
8
|
+
import { mergeEquivalences, findEquivalenceByTerm, groundedTermsAndDefinedVariablesFromFromEquivalences } from "../utilities/equivalences";
|
|
9
9
|
|
|
10
|
-
class
|
|
11
|
-
constructor(context, variables, proofSteps, equivalences) {
|
|
10
|
+
class LocalContext {
|
|
11
|
+
constructor(context, variables, proofSteps, judgements, equivalences, metavariables) {
|
|
12
12
|
this.context = context;
|
|
13
13
|
this.variables = variables;
|
|
14
14
|
this.proofSteps = proofSteps;
|
|
15
|
+
this.judgements = judgements;
|
|
15
16
|
this.equivalences = equivalences;
|
|
17
|
+
this.metavariables = metavariables;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
getContext() {
|
|
@@ -41,22 +43,38 @@ class IntrinsicLevelLocalContext {
|
|
|
41
43
|
return proofSteps;
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
getJudgements() {
|
|
47
|
+
let judgements = this.context.getJudgements();
|
|
48
|
+
|
|
49
|
+
judgements = [ ///
|
|
50
|
+
...this.judgements,
|
|
51
|
+
...judgements
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
return judgements;
|
|
55
|
+
}
|
|
56
|
+
|
|
44
57
|
getEquivalences() {
|
|
45
58
|
let equivalences = this.context.getEquivalences();
|
|
46
59
|
|
|
47
60
|
const equivalencesA = this.equivalences, ///
|
|
48
61
|
equivalencesB = equivalences,
|
|
49
|
-
|
|
62
|
+
LocalContext = this; ///
|
|
50
63
|
|
|
51
|
-
equivalences = mergeEquivalences(equivalencesA, equivalencesB,
|
|
64
|
+
equivalences = mergeEquivalences(equivalencesA, equivalencesB, LocalContext); ///
|
|
52
65
|
|
|
53
66
|
return equivalences;
|
|
54
67
|
}
|
|
55
68
|
|
|
56
|
-
|
|
57
|
-
|
|
69
|
+
getMetavariables() {
|
|
70
|
+
let metavariables = this.context.getMetavariables();
|
|
71
|
+
|
|
72
|
+
metavariables = [ ///
|
|
73
|
+
...this.metavariables,
|
|
74
|
+
...metavariables
|
|
75
|
+
]
|
|
58
76
|
|
|
59
|
-
return
|
|
77
|
+
return metavariables;
|
|
60
78
|
}
|
|
61
79
|
|
|
62
80
|
getLastProofStep() {
|
|
@@ -71,64 +89,6 @@ class IntrinsicLevelLocalContext {
|
|
|
71
89
|
return lastProofStep;
|
|
72
90
|
}
|
|
73
91
|
|
|
74
|
-
getTermType(term) {
|
|
75
|
-
let termType;
|
|
76
|
-
|
|
77
|
-
const equivalences = this.getEquivalences(),
|
|
78
|
-
equivalence = findEquivalenceByTerm(equivalences, term);
|
|
79
|
-
|
|
80
|
-
if (equivalence !== null) {
|
|
81
|
-
const intrinsicLevelLocalContext = this, ///
|
|
82
|
-
equivalenceType = equivalence.getType(intrinsicLevelLocalContext);
|
|
83
|
-
|
|
84
|
-
termType = equivalenceType; ///
|
|
85
|
-
} else {
|
|
86
|
-
termType = term.getType();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return termType;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
isTermGrounded(term) {
|
|
93
|
-
const context = this,
|
|
94
|
-
equivalences = this.getEquivalences(),
|
|
95
|
-
groundedTerms = [],
|
|
96
|
-
definedVariables = [];
|
|
97
|
-
|
|
98
|
-
groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables, context);
|
|
99
|
-
|
|
100
|
-
const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
|
|
101
|
-
const termMatchesGroundedTerm = term.match(groundedTerm);
|
|
102
|
-
|
|
103
|
-
if (termMatchesGroundedTerm) {
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
}),
|
|
107
|
-
termGrounded = termMatchesGroundedTerm; ///
|
|
108
|
-
|
|
109
|
-
return termGrounded;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
isVariableDefined(variable) {
|
|
113
|
-
const context = this,
|
|
114
|
-
equivalences = this.getEquivalences(),
|
|
115
|
-
groundedTerms = [],
|
|
116
|
-
definedVariables = [];
|
|
117
|
-
|
|
118
|
-
groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables, context);
|
|
119
|
-
|
|
120
|
-
const variableMatchesDefinedVariable = definedVariables.some((definedVariable) => {
|
|
121
|
-
const variableMatchesDefinedVariable = variable.match(definedVariable);
|
|
122
|
-
|
|
123
|
-
if (variableMatchesDefinedVariable) {
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
}),
|
|
127
|
-
variableDefined = variableMatchesDefinedVariable; ///
|
|
128
|
-
|
|
129
|
-
return variableDefined;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
92
|
addEquality(equality) {
|
|
133
93
|
let equalityAdded;
|
|
134
94
|
|
|
@@ -221,6 +181,42 @@ class IntrinsicLevelLocalContext {
|
|
|
221
181
|
this.equivalences.splice(start, deleteCount);
|
|
222
182
|
}
|
|
223
183
|
|
|
184
|
+
addJudgement(judgement) {
|
|
185
|
+
let judgementAdded = false;
|
|
186
|
+
|
|
187
|
+
const metavariableNode = judgement.getMetavariableNode(),
|
|
188
|
+
judgementPresent = this.isJudgementPresentByMetavariableNode(metavariableNode);
|
|
189
|
+
|
|
190
|
+
if (!judgementPresent) {
|
|
191
|
+
this.judgements.push(judgement);
|
|
192
|
+
|
|
193
|
+
judgementAdded = true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return judgementAdded;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
addMetavariable(metavariable) {
|
|
200
|
+
let metavariableAdded = false;
|
|
201
|
+
|
|
202
|
+
const node = metavariable.getName(),
|
|
203
|
+
metavariablePresent = this.metavariables.some((metavariable) => {
|
|
204
|
+
const metavariableMatchesNode = metavariable.matchNode(node);
|
|
205
|
+
|
|
206
|
+
if (metavariableMatchesNode) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
if (!metavariablePresent) {
|
|
212
|
+
this.metavariables.push(metavariable);
|
|
213
|
+
|
|
214
|
+
metavariableAdded = true;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return metavariableAdded;
|
|
218
|
+
}
|
|
219
|
+
|
|
224
220
|
matchStatementNode(statementNode) {
|
|
225
221
|
let proofSteps = this.getProofSteps();
|
|
226
222
|
|
|
@@ -237,21 +233,63 @@ class IntrinsicLevelLocalContext {
|
|
|
237
233
|
return matchesStatementNode;
|
|
238
234
|
}
|
|
239
235
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
variables = this.getVariables(),
|
|
243
|
-
variable = variables.find((variable) => {
|
|
244
|
-
const matches = variable.matchNode(node);
|
|
236
|
+
getTermType(term) {
|
|
237
|
+
let termType;
|
|
245
238
|
|
|
246
|
-
|
|
239
|
+
const equivalences = this.getEquivalences(),
|
|
240
|
+
equivalence = findEquivalenceByTerm(equivalences, term);
|
|
241
|
+
|
|
242
|
+
if (equivalence !== null) {
|
|
243
|
+
const LocalContext = this, ///
|
|
244
|
+
equivalenceType = equivalence.getType(LocalContext);
|
|
245
|
+
|
|
246
|
+
termType = equivalenceType; ///
|
|
247
|
+
} else {
|
|
248
|
+
termType = term.getType();
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return termType;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
isTermGrounded(term) {
|
|
255
|
+
const context = this,
|
|
256
|
+
equivalences = this.getEquivalences(),
|
|
257
|
+
groundedTerms = [],
|
|
258
|
+
definedVariables = [];
|
|
259
|
+
|
|
260
|
+
groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables, context);
|
|
261
|
+
|
|
262
|
+
const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
|
|
263
|
+
const termMatchesGroundedTerm = term.match(groundedTerm);
|
|
264
|
+
|
|
265
|
+
if (termMatchesGroundedTerm) {
|
|
247
266
|
return true;
|
|
248
267
|
}
|
|
249
|
-
})
|
|
268
|
+
}),
|
|
269
|
+
termGrounded = termMatchesGroundedTerm; ///
|
|
250
270
|
|
|
251
|
-
return
|
|
271
|
+
return termGrounded;
|
|
252
272
|
}
|
|
253
273
|
|
|
254
|
-
|
|
274
|
+
isVariableDefined(variable) {
|
|
275
|
+
const context = this,
|
|
276
|
+
equivalences = this.getEquivalences(),
|
|
277
|
+
groundedTerms = [],
|
|
278
|
+
definedVariables = [];
|
|
279
|
+
|
|
280
|
+
groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables, context);
|
|
281
|
+
|
|
282
|
+
const variableMatchesDefinedVariable = definedVariables.some((definedVariable) => {
|
|
283
|
+
const variableMatchesDefinedVariable = variable.match(definedVariable);
|
|
284
|
+
|
|
285
|
+
if (variableMatchesDefinedVariable) {
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
}),
|
|
289
|
+
variableDefined = variableMatchesDefinedVariable; ///
|
|
290
|
+
|
|
291
|
+
return variableDefined;
|
|
292
|
+
}
|
|
255
293
|
|
|
256
294
|
isVariablePresentByVariableNode(variableNode) {
|
|
257
295
|
const variable = this.findVariableByVariableNode(variableNode),
|
|
@@ -260,19 +298,59 @@ class IntrinsicLevelLocalContext {
|
|
|
260
298
|
return variablePresent;
|
|
261
299
|
}
|
|
262
300
|
|
|
263
|
-
|
|
264
|
-
const
|
|
265
|
-
|
|
301
|
+
isJudgementPresentByMetavariableNode(metavariableNode) {
|
|
302
|
+
const judgement = this.findJudgementByMetavariableNode(metavariableNode),
|
|
303
|
+
judgementPresent = (judgement !== null);
|
|
266
304
|
|
|
267
|
-
|
|
305
|
+
return judgementPresent;
|
|
306
|
+
}
|
|
268
307
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
variables
|
|
273
|
-
};
|
|
308
|
+
isMetavariablePresentByMetavariableNode(metavariableNode, localContext) {
|
|
309
|
+
const metavariable = this.findMetavariableByMetavariableNode(metavariableNode, localContext),
|
|
310
|
+
metavariablePresent = (metavariable !== null);
|
|
274
311
|
|
|
275
|
-
return
|
|
312
|
+
return metavariablePresent;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
findVariableByVariableNode(variableNode) {
|
|
316
|
+
const node = variableNode, ///
|
|
317
|
+
variables = this.getVariables(),
|
|
318
|
+
variable = variables.find((variable) => {
|
|
319
|
+
const matches = variable.matchNode(node);
|
|
320
|
+
|
|
321
|
+
if (matches) {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
}) || null;
|
|
325
|
+
|
|
326
|
+
return variable;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
findJudgementByMetavariableNode(metavariableNode) {
|
|
330
|
+
const judgements = this.getJudgements(),
|
|
331
|
+
judgement = judgements.find((judgement) => {
|
|
332
|
+
const judgementMatchesMetavariableNode = judgement.matchMetavariableNode(metavariableNode);
|
|
333
|
+
|
|
334
|
+
if (judgementMatchesMetavariableNode) {
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
}) || null;
|
|
338
|
+
|
|
339
|
+
return judgement;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
findMetavariableByMetavariableNode(metavariableNode, localContext) {
|
|
343
|
+
const node = metavariableNode, ///
|
|
344
|
+
metavariables = this.getMetavariables(),
|
|
345
|
+
metavariable = metavariables.find((metavariable) => {
|
|
346
|
+
const matches = metavariable.matchNode(node, localContext);
|
|
347
|
+
|
|
348
|
+
if (matches) {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
}) || null;
|
|
352
|
+
|
|
353
|
+
return metavariable;
|
|
276
354
|
}
|
|
277
355
|
|
|
278
356
|
static fromFileContext(fileContext) {
|
|
@@ -280,9 +358,11 @@ class IntrinsicLevelLocalContext {
|
|
|
280
358
|
variables = [],
|
|
281
359
|
proofSteps = [],
|
|
282
360
|
equivalences = [],
|
|
283
|
-
|
|
361
|
+
judgements = [],
|
|
362
|
+
metavariables = [],
|
|
363
|
+
localContext = new LocalContext(context, variables, proofSteps, judgements, equivalences, metavariables);
|
|
284
364
|
|
|
285
|
-
return
|
|
365
|
+
return localContext;
|
|
286
366
|
}
|
|
287
367
|
|
|
288
368
|
static fromLocalContext(localContext) {
|
|
@@ -290,9 +370,12 @@ class IntrinsicLevelLocalContext {
|
|
|
290
370
|
variables = [],
|
|
291
371
|
proofSteps = [],
|
|
292
372
|
equivalences = [],
|
|
293
|
-
|
|
373
|
+
judgements = [],
|
|
374
|
+
metavariables = [];
|
|
375
|
+
|
|
376
|
+
localContext = new LocalContext(context, variables, proofSteps, judgements, equivalences, metavariables); ///
|
|
294
377
|
|
|
295
|
-
return
|
|
378
|
+
return localContext;
|
|
296
379
|
}
|
|
297
380
|
|
|
298
381
|
static fromJSONAndFileContext(json, fileContext) {
|
|
@@ -310,12 +393,14 @@ class IntrinsicLevelLocalContext {
|
|
|
310
393
|
const context = fileContext, ///
|
|
311
394
|
proofSteps = [],
|
|
312
395
|
equivalences = [],
|
|
313
|
-
|
|
396
|
+
judgements = [],
|
|
397
|
+
metavariables = [],
|
|
398
|
+
localContext = new LocalContext(context, variables, proofSteps, judgements, equivalences, metavariables); ///
|
|
314
399
|
|
|
315
|
-
return
|
|
400
|
+
return localContext;
|
|
316
401
|
}
|
|
317
402
|
}
|
|
318
403
|
|
|
319
|
-
Object.assign(
|
|
404
|
+
Object.assign(LocalContext.prototype, contextMixins);
|
|
320
405
|
|
|
321
|
-
export default
|
|
406
|
+
export default LocalContext;
|
package/src/declaration.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { matchStatementModuloBrackets } from "./utilities/match";
|
|
4
4
|
|
|
5
5
|
export default class Declaration {
|
|
6
|
-
constructor(metavariableNode,
|
|
6
|
+
constructor(metavariableNode, statementNode) {
|
|
7
7
|
this.metavariableNode = metavariableNode;
|
|
8
|
-
this.
|
|
8
|
+
this.statementNode = statementNode;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
getMetavariableNode() {
|
|
12
12
|
return this.metavariableNode;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
return this.
|
|
15
|
+
getStatementNode() {
|
|
16
|
+
return this.statementNode;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
matchSubstitution(substitution) {
|
|
20
|
-
const
|
|
21
|
-
|
|
20
|
+
const statementNode = substitution.getStatementNode(),
|
|
21
|
+
metavariableNode = substitution.getMetavariableNode(),
|
|
22
|
+
matchesStatementNode = this.matchStatementNode(statementNode),
|
|
22
23
|
matchesMetavariableNode = this.matchMetavariableNode(metavariableNode),
|
|
23
|
-
|
|
24
|
-
matchesSubstitution = (matchesMetavariableNode && matchesMetastatementNode);
|
|
24
|
+
matchesSubstitution = (matchesMetavariableNode && matchesStatementNode);
|
|
25
25
|
|
|
26
26
|
return matchesSubstitution;
|
|
27
27
|
}
|
|
@@ -32,26 +32,26 @@ export default class Declaration {
|
|
|
32
32
|
return matchesMetavariableNode;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
matchStatementNode(statementNode) {
|
|
36
|
+
const statementNodeA = statementNode, ///
|
|
37
|
+
statementNodeB = this.statementNode, ///
|
|
38
|
+
statementMatches = matchStatementModuloBrackets(statementNodeA, statementNodeB),
|
|
39
|
+
matchesStatementNode = statementMatches; ///
|
|
40
40
|
|
|
41
|
-
return
|
|
41
|
+
return matchesStatementNode;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
matchMetaLemmaOrMetaTheorem(metaLemmaMetatheorem) {
|
|
45
45
|
const metaConsequent = metaLemmaMetatheorem.getMetaConsequent(),
|
|
46
|
-
|
|
47
|
-
matches = this.
|
|
46
|
+
statementNode = metaConsequent.getStatementNode(),
|
|
47
|
+
matches = this.statementNode.match(statementNode),
|
|
48
48
|
matchesMetaLemmaOrMetaTheorem = matches; ///
|
|
49
49
|
|
|
50
50
|
return matchesMetaLemmaOrMetaTheorem;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
static
|
|
54
|
-
const declaration = new Declaration(metavariableNode,
|
|
53
|
+
static fromMetavariableNodeAndStatementNode(metavariableNode, statementNode) {
|
|
54
|
+
const declaration = new Declaration(metavariableNode, statementNode);
|
|
55
55
|
|
|
56
56
|
return declaration;
|
|
57
57
|
}
|