occam-verify-cli 0.0.845 → 0.0.847
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 +4 -4
- package/lib/assignment/variable.js +4 -4
- package/lib/conclusion.js +5 -5
- package/lib/context/local.js +14 -1
- package/lib/equality.js +5 -3
- package/lib/equivalence.js +17 -17
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
- package/lib/premise.js +6 -5
- package/lib/term.js +9 -9
- package/lib/utilities/equivalences.js +14 -14
- package/lib/verifier/node/metastatement.js +5 -4
- package/lib/verifier/node/statementAsCombinator.js +6 -6
- package/lib/verifier/node/termAsConstructor.js +5 -5
- package/lib/verifier/nodes/metaLevel.js +7 -7
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +18 -19
- package/lib/verifier/nodes/statementAgainstCombinator.js +11 -11
- package/lib/verifier/nodes/substitution.js +13 -11
- package/lib/verifier/nodes/termAgainstConstructor.js +10 -10
- package/lib/verify/containment.js +2 -2
- package/lib/verify/defining.js +6 -6
- package/lib/verify/equality.js +17 -17
- package/lib/verify/givenType.js +6 -6
- package/lib/verify/givenVariable.js +6 -6
- package/lib/verify/metavariable.js +6 -6
- package/lib/verify/statement/qualified.js +13 -13
- package/lib/verify/statement/unqualified.js +2 -2
- package/lib/verify/statement.js +40 -40
- package/lib/verify/statementAsCombinator.js +2 -1
- package/lib/verify/term.js +30 -30
- package/lib/verify/termAndGivenType.js +7 -7
- package/lib/verify/termAsConstructor.js +3 -2
- package/lib/verify/terms.js +7 -7
- package/lib/verify/type.js +7 -7
- package/lib/verify/typeAssertion.js +19 -19
- package/lib/verify/variable.js +6 -6
- package/package.json +2 -2
- package/src/assignment/equality.js +5 -5
- package/src/assignment/variable.js +5 -5
- package/src/conclusion.js +6 -6
- package/src/context/local.js +12 -0
- package/src/equality.js +6 -4
- package/src/equivalence.js +16 -16
- package/src/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/src/mixins/nodesVerifier/metaLevel.js +1 -1
- package/src/premise.js +9 -4
- package/src/term.js +8 -8
- package/src/utilities/equivalences.js +13 -13
- package/src/verifier/node/metastatement.js +8 -9
- package/src/verifier/node/statementAsCombinator.js +8 -11
- package/src/verifier/node/termAsConstructor.js +6 -8
- package/src/verifier/nodes/metaLevel.js +6 -6
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +15 -19
- package/src/verifier/nodes/statementAgainstCombinator.js +10 -10
- package/src/verifier/nodes/substitution.js +18 -15
- package/src/verifier/nodes/termAgainstConstructor.js +9 -9
- package/src/verify/containment.js +1 -1
- package/src/verify/defining.js +5 -5
- package/src/verify/equality.js +16 -16
- package/src/verify/givenType.js +5 -5
- package/src/verify/givenVariable.js +5 -5
- package/src/verify/metavariable.js +5 -5
- package/src/verify/statement/qualified.js +12 -13
- package/src/verify/statement/unqualified.js +1 -2
- package/src/verify/statement.js +39 -39
- package/src/verify/statementAsCombinator.js +1 -0
- package/src/verify/term.js +29 -29
- package/src/verify/termAndGivenType.js +7 -7
- package/src/verify/termAsConstructor.js +3 -1
- package/src/verify/terms.js +7 -7
- package/src/verify/type.js +6 -6
- package/src/verify/typeAssertion.js +18 -18
- package/src/verify/variable.js +5 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.847",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"argumentative": "^2.0.28",
|
|
14
14
|
"necessary": "^14.0.1",
|
|
15
|
-
"occam-custom-grammars": "^5.0.
|
|
15
|
+
"occam-custom-grammars": "^5.0.744",
|
|
16
16
|
"occam-entities": "^1.0.125",
|
|
17
17
|
"occam-file-system": "^6.0.167",
|
|
18
18
|
"occam-grammar-utilities": "^8.0.201",
|
|
@@ -9,15 +9,15 @@ export default class EqualityAssignment {
|
|
|
9
9
|
return this.equality;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
assign(
|
|
13
|
-
const equalityAdded =
|
|
12
|
+
assign(localContext) {
|
|
13
|
+
const equalityAdded = localContext.addEquality(this.equality),
|
|
14
14
|
equalityNode = this.equality.getNode(),
|
|
15
|
-
equalityString =
|
|
15
|
+
equalityString = localContext.nodeAsString(equalityNode),
|
|
16
16
|
equalityAssigned = equalityAdded; ///
|
|
17
17
|
|
|
18
18
|
equalityAssigned ?
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
localContext.trace(`Assigned the '${equalityString}' equality.`, equalityNode) :
|
|
20
|
+
localContext.debug(`Unable to assign the '${equalityString}' equality.`, equalityNode);
|
|
21
21
|
|
|
22
22
|
return equalityAssigned;
|
|
23
23
|
}
|
|
@@ -9,17 +9,17 @@ export default class VariableAssignment {
|
|
|
9
9
|
return this.variable;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
assign(
|
|
13
|
-
const variableAdded =
|
|
12
|
+
assign(localContext) {
|
|
13
|
+
const variableAdded = localContext.addVariable(this.variable),
|
|
14
14
|
variableNode = this.variable.getNode(),
|
|
15
15
|
variableType = this.variable.getType(),
|
|
16
|
-
variableString =
|
|
16
|
+
variableString = localContext.nodeAsString(variableNode),
|
|
17
17
|
variableTypeName = variableType.getName(),
|
|
18
18
|
variableAssigned = variableAdded; ///
|
|
19
19
|
|
|
20
20
|
variableAssigned ?
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
localContext.trace(`Assigned the '${variableString}' variable with type '${variableTypeName}'.`, variableNode) :
|
|
22
|
+
localContext.debug(`Unable to assign the '${variableString}' variable with type '${variableTypeName}'.`, variableNode);
|
|
23
23
|
|
|
24
24
|
return variableAssigned;
|
|
25
25
|
}
|
package/src/conclusion.js
CHANGED
|
@@ -15,12 +15,12 @@ export default class Conclusion {
|
|
|
15
15
|
return this.metastatementNode;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
matchStatementNode(statementNode, substitutions,
|
|
18
|
+
matchStatementNode(statementNode, substitutions, localContext, statementLocalContext) {
|
|
19
19
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
20
20
|
nonTerminalNodeB = statementNode, ///
|
|
21
|
-
|
|
21
|
+
localContextA = localContext, ///
|
|
22
22
|
localContextB = statementLocalContext, ///
|
|
23
|
-
nonTerminalNodeVerified = metaLevelToIntrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
23
|
+
nonTerminalNodeVerified = metaLevelToIntrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
|
|
24
24
|
const verifyAhead = true;
|
|
25
25
|
|
|
26
26
|
return verifyAhead;
|
|
@@ -30,12 +30,12 @@ export default class Conclusion {
|
|
|
30
30
|
return statementNodeMatches;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
matchMetastatementNode(metastatementNode, substitutions,
|
|
33
|
+
matchMetastatementNode(metastatementNode, substitutions, localContext, metastatementLocalMetaContext) {
|
|
34
34
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
35
35
|
nonTerminalNodeB = metastatementNode, ///
|
|
36
|
-
|
|
36
|
+
localContextA = localContext, ///
|
|
37
37
|
localMetaContextB = metastatementLocalMetaContext, ///
|
|
38
|
-
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
38
|
+
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, () => {
|
|
39
39
|
const verifiedAhead = true;
|
|
40
40
|
|
|
41
41
|
return verifiedAhead;
|
package/src/context/local.js
CHANGED
|
@@ -253,6 +253,8 @@ class LocalContext {
|
|
|
253
253
|
return variable;
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
findMetaTypeByMetaTypeName(metaTypeName) { return this.context.findMetaTypeByMetaTypeName(metaTypeName); }
|
|
257
|
+
|
|
256
258
|
isVariablePresentByVariableNode(variableNode) {
|
|
257
259
|
const variable = this.findVariableByVariableNode(variableNode),
|
|
258
260
|
variablePresent = (variable !== null);
|
|
@@ -296,6 +298,16 @@ class LocalContext {
|
|
|
296
298
|
return localContext;
|
|
297
299
|
}
|
|
298
300
|
|
|
301
|
+
static fromLocalMetaContext(localMetaContext) {
|
|
302
|
+
const context = localMetaContext, ///
|
|
303
|
+
variables = [],
|
|
304
|
+
proofSteps = [],
|
|
305
|
+
equivalences = [],
|
|
306
|
+
localContext = new LocalContext(context, variables, proofSteps, equivalences);
|
|
307
|
+
|
|
308
|
+
return localContext;
|
|
309
|
+
}
|
|
310
|
+
|
|
299
311
|
static fromJSONAndFileContext(json, fileContext) {
|
|
300
312
|
let { variables } = json;
|
|
301
313
|
|
package/src/equality.js
CHANGED
|
@@ -28,16 +28,18 @@ export default class Equality {
|
|
|
28
28
|
return reflexive;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
isEqual(
|
|
31
|
+
isEqual(localContext) {
|
|
32
32
|
const leftTerm = this.getLeftTerm(),
|
|
33
33
|
rightTerm = this.getRightTerm(),
|
|
34
34
|
leftTermNode = leftTerm.getNode(),
|
|
35
35
|
rightTermNode = rightTerm.getNode(),
|
|
36
36
|
nonTerminalNodeA = leftTermNode, ///
|
|
37
37
|
nonTerminalNodeB = rightTermNode, ///
|
|
38
|
-
equivalences =
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
equivalences = localContext.getEquivalences();
|
|
39
|
+
|
|
40
|
+
localContext = this; ///
|
|
41
|
+
|
|
42
|
+
const nonTerminalNodeVerified = equalityNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equivalences, localContext, () => {
|
|
41
43
|
const verifiedAhead = true;
|
|
42
44
|
|
|
43
45
|
return verifiedAhead;
|
package/src/equivalence.js
CHANGED
|
@@ -21,9 +21,9 @@ export default class Equivalence {
|
|
|
21
21
|
this.terms.push(term);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
getType(
|
|
24
|
+
getType(localContext) {
|
|
25
25
|
const type = this.terms.reduce((type, term) => {
|
|
26
|
-
const termType = termTypeFromTerm(term,
|
|
26
|
+
const termType = termTypeFromTerm(term, localContext);
|
|
27
27
|
|
|
28
28
|
if (type === null) {
|
|
29
29
|
type = termType; ///
|
|
@@ -41,10 +41,10 @@ export default class Equivalence {
|
|
|
41
41
|
return type;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
matchType(type,
|
|
44
|
+
matchType(type, localContext) {
|
|
45
45
|
const typeA = type; ///
|
|
46
46
|
|
|
47
|
-
type = this.getType(
|
|
47
|
+
type = this.getType(localContext);
|
|
48
48
|
|
|
49
49
|
const typeB = type; ///
|
|
50
50
|
|
|
@@ -107,9 +107,9 @@ export default class Equivalence {
|
|
|
107
107
|
return termNodesMatch;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
getGroundedTerms(definedVariables, groundedTerms,
|
|
110
|
+
getGroundedTerms(definedVariables, groundedTerms, localContext) {
|
|
111
111
|
this.terms.forEach((term) => {
|
|
112
|
-
const termGrounded = term.isGrounded(definedVariables,
|
|
112
|
+
const termGrounded = term.isGrounded(definedVariables, localContext);
|
|
113
113
|
|
|
114
114
|
if (termGrounded) {
|
|
115
115
|
const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
|
|
@@ -129,25 +129,25 @@ export default class Equivalence {
|
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
isInitiallyGrounded(
|
|
133
|
-
const initiallyGroundedTerms = this.getInitiallyGroundedTerms(
|
|
132
|
+
isInitiallyGrounded(localContext) {
|
|
133
|
+
const initiallyGroundedTerms = this.getInitiallyGroundedTerms(localContext),
|
|
134
134
|
initiallyGroundedTermsLength = initiallyGroundedTerms.length,
|
|
135
135
|
initiallyGrounded = (initiallyGroundedTermsLength > 0);
|
|
136
136
|
|
|
137
137
|
return initiallyGrounded;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
isImplicitlyGrounded(definedVariables,
|
|
141
|
-
const implicitlyGroundedTerms = this.getImplicitlyGroundedTerms(definedVariables,
|
|
140
|
+
isImplicitlyGrounded(definedVariables, localContext) {
|
|
141
|
+
const implicitlyGroundedTerms = this.getImplicitlyGroundedTerms(definedVariables, localContext),
|
|
142
142
|
implicitlyGroundedTermsLength = implicitlyGroundedTerms.length,
|
|
143
143
|
implicitlyGrounded = (implicitlyGroundedTermsLength > 0);
|
|
144
144
|
|
|
145
145
|
return implicitlyGrounded;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
getInitiallyGroundedTerms(
|
|
148
|
+
getInitiallyGroundedTerms(localContext) {
|
|
149
149
|
const initiallyGroundedTerms = this.terms.reduce((initiallyGroundedTerms, term) => {
|
|
150
|
-
const termInitiallyGrounded = term.isInitiallyGrounded(
|
|
150
|
+
const termInitiallyGrounded = term.isInitiallyGrounded(localContext);
|
|
151
151
|
|
|
152
152
|
if (termInitiallyGrounded) {
|
|
153
153
|
const initiallyGroundedTerm = term; ///
|
|
@@ -161,9 +161,9 @@ export default class Equivalence {
|
|
|
161
161
|
return initiallyGroundedTerms;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
getImplicitlyGroundedTerms(definedVariables,
|
|
164
|
+
getImplicitlyGroundedTerms(definedVariables, localContext) {
|
|
165
165
|
const implicitlyGroundedTerms = this.terms.reduce((implicitlyGroundedTerms, term) => {
|
|
166
|
-
const termImplicitlyGrounded = term.isImplicitlyGrounded(definedVariables,
|
|
166
|
+
const termImplicitlyGrounded = term.isImplicitlyGrounded(definedVariables, localContext);
|
|
167
167
|
|
|
168
168
|
if (termImplicitlyGrounded) {
|
|
169
169
|
const implicitlyGroundedTerm = term; ///
|
|
@@ -200,14 +200,14 @@ export default class Equivalence {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
function termTypeFromTerm(term,
|
|
203
|
+
function termTypeFromTerm(term, localContext) {
|
|
204
204
|
let termType;
|
|
205
205
|
|
|
206
206
|
const termNode = term.getNode(),
|
|
207
207
|
variableNode = variableNodeQuery(termNode);
|
|
208
208
|
|
|
209
209
|
if (variableNode !== null) {
|
|
210
|
-
const variable =
|
|
210
|
+
const variable = localContext.findVariableByVariableNode(variableNode),
|
|
211
211
|
variableType = variable.getType();
|
|
212
212
|
|
|
213
213
|
termType = variableType; ///
|
|
@@ -32,9 +32,9 @@ function verifyVariableNode(variableNodeA, termNodeB, substitutions, localContex
|
|
|
32
32
|
|
|
33
33
|
if (variable !== null) {
|
|
34
34
|
const terms = [],
|
|
35
|
-
context = localContextB, ///
|
|
36
35
|
termNode = termNodeB, ///
|
|
37
|
-
|
|
36
|
+
localContext = localContextB, ///
|
|
37
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
38
38
|
let verifiedAhead = false;
|
|
39
39
|
|
|
40
40
|
const firstTerm = first(terms),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import MetastatementForMetavariableSubstitution from "../../substitution/metastatementForMetavariable";
|
|
4
4
|
|
|
5
|
-
function verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions,
|
|
5
|
+
function verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
6
6
|
let metavariableNodeVerified;
|
|
7
7
|
|
|
8
8
|
const substitution = substitutions.find((substitution) => {
|
package/src/premise.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import LocalContext from "./context/local";
|
|
3
4
|
import metaLevelNodesVerifier from "./verifier/nodes/metaLevel";
|
|
4
5
|
import metaLevelToIntrinsicLevelNodesVerifier from "./verifier/nodes/metaLevelToIntrinsicLevel";
|
|
5
6
|
|
|
@@ -45,8 +46,9 @@ export default class Premise {
|
|
|
45
46
|
const nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
46
47
|
nonTerminalNodeB = subproofStatementNode, ///
|
|
47
48
|
fileContextA = fileContext, ///
|
|
49
|
+
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
48
50
|
localContextB = statementLocalContext, ///
|
|
49
|
-
nonTerminalNodeVerified = metaLevelToIntrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
51
|
+
nonTerminalNodeVerified = metaLevelToIntrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
|
|
50
52
|
const verifiedAhead = true;
|
|
51
53
|
|
|
52
54
|
return verifiedAhead;
|
|
@@ -66,8 +68,9 @@ export default class Premise {
|
|
|
66
68
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
67
69
|
nonTerminalNodeB = statementNode, ///
|
|
68
70
|
fileContextA = fileContext, ///
|
|
71
|
+
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
69
72
|
localContextB = statementLocalContext, ///
|
|
70
|
-
nonTerminalNodeVerified = metaLevelToIntrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
73
|
+
nonTerminalNodeVerified = metaLevelToIntrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
|
|
71
74
|
const verifiedAhead = true;
|
|
72
75
|
|
|
73
76
|
return verifiedAhead;
|
|
@@ -98,8 +101,9 @@ export default class Premise {
|
|
|
98
101
|
const nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
99
102
|
nonTerminalNodeB = ruleSubproofMetastatementNode, ///
|
|
100
103
|
fileContextA = fileContext, ///
|
|
104
|
+
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
101
105
|
localMetaContextB = metastatementLocalMetaContext, ///
|
|
102
|
-
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
106
|
+
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, () => {
|
|
103
107
|
const verifiedAhead = true;
|
|
104
108
|
|
|
105
109
|
return verifiedAhead;
|
|
@@ -119,8 +123,9 @@ export default class Premise {
|
|
|
119
123
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
120
124
|
nonTerminalNodeB = metastatementNode, ///
|
|
121
125
|
fileContextA = fileContext, ///
|
|
126
|
+
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
122
127
|
localMetaContextB = metastatementLocalMetaContext, ///
|
|
123
|
-
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
128
|
+
nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, () => {
|
|
124
129
|
const verifiedAhead = true;
|
|
125
130
|
|
|
126
131
|
return verifiedAhead;
|
package/src/term.js
CHANGED
|
@@ -26,12 +26,12 @@ export default class Term {
|
|
|
26
26
|
return matches;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
getVariables(
|
|
29
|
+
getVariables(localContext) {
|
|
30
30
|
const variables = [],
|
|
31
31
|
variableNodes = variableNodesQuery(this.node);
|
|
32
32
|
|
|
33
33
|
variableNodes.forEach((variableNode) => {
|
|
34
|
-
const variable =
|
|
34
|
+
const variable = localContext.findVariableByVariableNode(variableNode),
|
|
35
35
|
variablesIncludesVariable = variables.includes(variable);
|
|
36
36
|
|
|
37
37
|
if (!variablesIncludesVariable) {
|
|
@@ -42,8 +42,8 @@ export default class Term {
|
|
|
42
42
|
return variables;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
isGrounded(definedVariables,
|
|
46
|
-
const variables = this.getVariables(
|
|
45
|
+
isGrounded(definedVariables, localContext) {
|
|
46
|
+
const variables = this.getVariables(localContext);
|
|
47
47
|
|
|
48
48
|
filter(variables, (variable) => {
|
|
49
49
|
const definedVariablesIncludesVariable = definedVariables.includes(variable);
|
|
@@ -60,16 +60,16 @@ export default class Term {
|
|
|
60
60
|
return grounded;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
isInitiallyGrounded(
|
|
64
|
-
const variables = this.getVariables(
|
|
63
|
+
isInitiallyGrounded(localContext) {
|
|
64
|
+
const variables = this.getVariables(localContext),
|
|
65
65
|
variablesLength = variables.length,
|
|
66
66
|
initiallyGrounded = (variablesLength === 0);
|
|
67
67
|
|
|
68
68
|
return initiallyGrounded;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
isImplicitlyGrounded(definedVariables,
|
|
72
|
-
const grounded = this.isGrounded(definedVariables,
|
|
71
|
+
isImplicitlyGrounded(definedVariables, localContext) {
|
|
72
|
+
const grounded = this.isGrounded(definedVariables, localContext),
|
|
73
73
|
implicitlyGrounded = grounded; ///
|
|
74
74
|
|
|
75
75
|
return implicitlyGrounded;
|
|
@@ -83,7 +83,7 @@ export function findEquivalenceByTerm(equivalences, term) {
|
|
|
83
83
|
return equivalence;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables,
|
|
86
|
+
export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalences, groundedTerms, definedVariables, localContext) {
|
|
87
87
|
let groundedEquivalences,
|
|
88
88
|
remainingEquivalences,
|
|
89
89
|
initiallyGroundedEquivalences,
|
|
@@ -93,7 +93,7 @@ export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalence
|
|
|
93
93
|
|
|
94
94
|
initiallyGroundedEquivalences = [];
|
|
95
95
|
|
|
96
|
-
separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences,
|
|
96
|
+
separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences, localContext);
|
|
97
97
|
|
|
98
98
|
const initiallyGroundedEquivalencesLength = initiallyGroundedEquivalences.length;
|
|
99
99
|
|
|
@@ -109,9 +109,9 @@ export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalence
|
|
|
109
109
|
while (definedVariablesLength > previousDefinedVariablesLength) {
|
|
110
110
|
previousDefinedVariablesLength = definedVariablesLength; ///
|
|
111
111
|
|
|
112
|
-
groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms,
|
|
112
|
+
groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, localContext);
|
|
113
113
|
|
|
114
|
-
definedVariablesFromGroundedTerms(groundedTerms, definedVariables,
|
|
114
|
+
definedVariablesFromGroundedTerms(groundedTerms, definedVariables, localContext);
|
|
115
115
|
|
|
116
116
|
definedVariablesLength = definedVariables.length;
|
|
117
117
|
}
|
|
@@ -122,7 +122,7 @@ export function groundedTermsAndDefinedVariablesFromFromEquivalences(equivalence
|
|
|
122
122
|
|
|
123
123
|
implicitlyGroundedEquivalences = [];
|
|
124
124
|
|
|
125
|
-
separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables,
|
|
125
|
+
separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, localContext);
|
|
126
126
|
|
|
127
127
|
push(groundedEquivalences, implicitlyGroundedEquivalences);
|
|
128
128
|
|
|
@@ -153,12 +153,12 @@ function findEquivalenceByTermNodes(equivalences, termNodes) {
|
|
|
153
153
|
return equivalence;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
function definedVariablesFromGroundedTerms(groundedTerms, definedVariables,
|
|
156
|
+
function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, localContext) {
|
|
157
157
|
const terms = groundedTerms, ///
|
|
158
158
|
variables = definedVariables; ///
|
|
159
159
|
|
|
160
160
|
terms.forEach((term) => {
|
|
161
|
-
const termVariables = term.getVariables(
|
|
161
|
+
const termVariables = term.getVariables(localContext);
|
|
162
162
|
|
|
163
163
|
termVariables.forEach((termVariable) => {
|
|
164
164
|
const variablesIncludesTermVariable = variables.includes(termVariable);
|
|
@@ -172,9 +172,9 @@ function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, cont
|
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences,
|
|
175
|
+
function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalences, initiallyGroundedEquivalences, localContext) {
|
|
176
176
|
separate(equivalences, remainingEquivalences, initiallyGroundedEquivalences, (equivalence) => {
|
|
177
|
-
const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(
|
|
177
|
+
const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(localContext);
|
|
178
178
|
|
|
179
179
|
if (!equivalenceInitiallyGrounded) {
|
|
180
180
|
return true;
|
|
@@ -182,9 +182,9 @@ function separateInitiallyGroundedEquivalences(equivalences, remainingEquivalenc
|
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables,
|
|
185
|
+
function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, localContext) {
|
|
186
186
|
separate(equivalences, remainingEquivalences, implicitlyGroundedEquivalences, (equivalence) => {
|
|
187
|
-
const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables,
|
|
187
|
+
const equivalenceImplicitlyGrounded = equivalence.isImplicitlyGrounded(definedVariables, localContext);
|
|
188
188
|
|
|
189
189
|
if (!equivalenceImplicitlyGrounded) {
|
|
190
190
|
return true;
|
|
@@ -192,8 +192,8 @@ function separateImplicitlyGroundedEquivalences(equivalences, remainingEquivalen
|
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms,
|
|
195
|
+
function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquivalences, definedVariables, groundedTerms, localContext) {
|
|
196
196
|
groundedEquivalences.forEach((groundedEquivalence) => {
|
|
197
|
-
groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms,
|
|
197
|
+
groundedEquivalence.getGroundedTerms(definedVariables, groundedTerms, localContext);
|
|
198
198
|
});
|
|
199
199
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import LocalContext from "../../context/local";
|
|
3
4
|
import NodeVerifier from "../../verifier/node";
|
|
4
5
|
|
|
5
6
|
import { verifyStandaloneTerm } from "../../verify/term";
|
|
@@ -15,9 +16,8 @@ class MetastatementNodeVerifier extends NodeVerifier {
|
|
|
15
16
|
|
|
16
17
|
switch (ruleName) {
|
|
17
18
|
case METAVARIABLE_RULE_NAME: {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, context, verifyAhead),
|
|
19
|
+
const metavariableNode = nonTerminalNode, ///
|
|
20
|
+
standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead),
|
|
21
21
|
metavariableNodeVerified = standaloneMetavariableVerified; ///
|
|
22
22
|
|
|
23
23
|
nonTerminalNodeVerified = metavariableNodeVerified; ///
|
|
@@ -26,9 +26,8 @@ class MetastatementNodeVerifier extends NodeVerifier {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
case VARIABLE_RULE_NAME: {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
standaloneVariableVerified = verifyStandaloneVariable(variableNode, context, verifyAhead),
|
|
29
|
+
const variableNode = nonTerminalNode, ///
|
|
30
|
+
standaloneVariableVerified = verifyStandaloneVariable(variableNode, localMetaContext, verifyAhead),
|
|
32
31
|
variableNodeVerified = standaloneVariableVerified; ///
|
|
33
32
|
|
|
34
33
|
nonTerminalNodeVerified = variableNodeVerified; ///
|
|
@@ -37,9 +36,9 @@ class MetastatementNodeVerifier extends NodeVerifier {
|
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
case TERM_RULE_NAME: {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
standaloneTermVerified = verifyStandaloneTerm(termNode,
|
|
39
|
+
const termNode = nonTerminalNode, ///
|
|
40
|
+
localContext = LocalContext.fromLocalMetaContext(localMetaContext),
|
|
41
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
43
42
|
termNodeVerified = standaloneTermVerified; ///
|
|
44
43
|
|
|
45
44
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -8,16 +8,15 @@ import { verifyStandaloneStatement } from "../../verify/statement";
|
|
|
8
8
|
import { TYPE_RULE_NAME, TERM_RULE_NAME, STATEMENT_RULE_NAME } from "../../ruleNames";
|
|
9
9
|
|
|
10
10
|
class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
11
|
-
verifyNonTerminalNode(nonTerminalNode,
|
|
11
|
+
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
12
12
|
let nonTerminalNodeVerified;
|
|
13
13
|
|
|
14
14
|
const ruleName = nonTerminalNode.getRuleName();
|
|
15
15
|
|
|
16
16
|
switch (ruleName) {
|
|
17
17
|
case STATEMENT_RULE_NAME: {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
standaloneStatementVerified = verifyStandaloneStatement(statementNode, context, verifyAhead),
|
|
18
|
+
const statementNode = nonTerminalNode, ///
|
|
19
|
+
standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
|
|
21
20
|
statementNodeVerified = standaloneStatementVerified; ///
|
|
22
21
|
|
|
23
22
|
nonTerminalNodeVerified = statementNodeVerified; ///
|
|
@@ -26,9 +25,8 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
case TERM_RULE_NAME: {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
standaloneTermVerified = verifyStandaloneTerm(termNode, context, verifyAhead),
|
|
28
|
+
const termNode = nonTerminalNode, ///
|
|
29
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
32
30
|
termNodeVerified = standaloneTermVerified; ///
|
|
33
31
|
|
|
34
32
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -37,9 +35,8 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
case TYPE_RULE_NAME: {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
standaloneTypeVerified = verifyStandaloneType(typeNode, context, verifyAhead),
|
|
38
|
+
const typeNode = nonTerminalNode, ///
|
|
39
|
+
standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
|
|
43
40
|
typeNodeVerified = standaloneTypeVerified; ///
|
|
44
41
|
|
|
45
42
|
nonTerminalNodeVerified = typeNodeVerified; ///
|
|
@@ -48,7 +45,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
48
45
|
}
|
|
49
46
|
|
|
50
47
|
default: {
|
|
51
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode,
|
|
48
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead); ///
|
|
52
49
|
|
|
53
50
|
break;
|
|
54
51
|
}
|
|
@@ -7,16 +7,15 @@ import { verifyStandaloneTerm } from "../../verify/term";
|
|
|
7
7
|
import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../../ruleNames";
|
|
8
8
|
|
|
9
9
|
class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
10
|
-
verifyNonTerminalNode(nonTerminalNode,
|
|
10
|
+
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
11
11
|
let nonTerminalNodeVerified;
|
|
12
12
|
|
|
13
13
|
const ruleName = nonTerminalNode.getRuleName();
|
|
14
14
|
|
|
15
15
|
switch (ruleName) {
|
|
16
16
|
case TERM_RULE_NAME: {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
standaloneTermVerified = verifyStandaloneTerm(termNode, context, verifyAhead),
|
|
17
|
+
const termNode = nonTerminalNode, ///
|
|
18
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
20
19
|
termNodeVerified = standaloneTermVerified; ///
|
|
21
20
|
|
|
22
21
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -25,9 +24,8 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
case TYPE_RULE_NAME: {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
standaloneTypeVerified = verifyStandaloneType(typeNode, context, verifyAhead),
|
|
27
|
+
const typeNode = nonTerminalNode, ///
|
|
28
|
+
standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
|
|
31
29
|
typeNodeVerified = standaloneTypeVerified; ///
|
|
32
30
|
|
|
33
31
|
nonTerminalNodeVerified = typeNodeVerified; ///
|
|
@@ -36,7 +34,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
default: {
|
|
39
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode,
|
|
37
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
|
|
40
38
|
|
|
41
39
|
break;
|
|
42
40
|
}
|
|
@@ -9,7 +9,7 @@ import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
|
|
|
9
9
|
const metavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
|
|
10
10
|
|
|
11
11
|
class MetaLevelNodesVerifier extends NodesVerifier {
|
|
12
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
12
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
13
13
|
let nonTerminalNodeVerified = false;
|
|
14
14
|
|
|
15
15
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
@@ -22,7 +22,7 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
22
22
|
case METASTATEMENT_RULE_NAME: {
|
|
23
23
|
const metastatementNodeA = nonTerminalNodeA, ///
|
|
24
24
|
metastatementNodeB = nonTerminalNodeB, ///
|
|
25
|
-
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions,
|
|
25
|
+
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
26
26
|
|
|
27
27
|
nonTerminalNodeVerified = metastatementNodeVerified; ///
|
|
28
28
|
|
|
@@ -30,7 +30,7 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
default: {
|
|
33
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
33
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
34
34
|
|
|
35
35
|
break;
|
|
36
36
|
}
|
|
@@ -40,19 +40,19 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
40
40
|
return nonTerminalNodeVerified;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions,
|
|
43
|
+
verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
44
44
|
let metastatementNodeVerified;
|
|
45
45
|
|
|
46
46
|
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
47
47
|
|
|
48
48
|
if (metavariableNodeA !== null) {
|
|
49
|
-
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions,
|
|
49
|
+
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
50
50
|
|
|
51
51
|
metastatementNodeVerified = metaVariableNodeVerified; ///
|
|
52
52
|
} else {
|
|
53
53
|
const nonTerminalNodeA = metastatementNodeA, ///
|
|
54
54
|
nonTerminalNodeB = metastatementNodeB, ///
|
|
55
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
55
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
56
56
|
|
|
57
57
|
metastatementNodeVerified = nonTerminalNodeVerified; ///
|
|
58
58
|
}
|