occam-verify-cli 0.0.918 → 0.0.920
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/constants.js +5 -5
- package/lib/utilities/verify.js +22 -6
- package/lib/verifier/nodes/metaLevel.js +22 -2
- package/lib/verify/metaSupposition.js +2 -2
- package/lib/verify/metastatement.js +5 -1
- package/lib/verify/metastatementAsContainedAssertion.js +109 -0
- package/lib/verify/metastatementAsDefinedAssertion.js +132 -0
- package/lib/verify/premise.js +2 -2
- package/lib/verify/statement.js +47 -25
- package/lib/verify/statementAsContainedAssertion.js +51 -35
- package/lib/verify/statementAsDefinedAssertion.js +40 -19
- package/package.json +4 -4
- package/src/constants.js +4 -4
- package/src/utilities/verify.js +20 -4
- package/src/verifier/nodes/metaLevel.js +32 -1
- package/src/verify/metaSupposition.js +1 -2
- package/src/verify/metastatement.js +4 -0
- package/src/verify/metastatementAsContainedAssertion.js +127 -0
- package/src/verify/metastatementAsDefinedAssertion.js +156 -0
- package/src/verify/premise.js +1 -2
- package/src/verify/statement.js +5 -33
- package/src/verify/statementAsContainedAssertion.js +55 -40
- package/src/verify/statementAsDefinedAssertion.js +36 -16
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyJudgement from "../verify/judgement";
|
|
4
4
|
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
5
|
+
import verifyMetastatementAsDefinedAssertion from "./metastatementAsDefinedAssertion";
|
|
6
|
+
import verifyMetastatementAsContainedAssertion from "./metastatementAsContainedAssertion";
|
|
5
7
|
|
|
6
8
|
import { nodeQuery } from "../utilities/query";
|
|
7
9
|
|
|
@@ -16,6 +18,8 @@ function verifyMetastatement(metastatementNode, assignments, derived, localConte
|
|
|
16
18
|
|
|
17
19
|
const verifyMetaStatementFunctions = [
|
|
18
20
|
verifyMetastatementAsJudgement,
|
|
21
|
+
verifyMetastatementAsDefinedAssertion,
|
|
22
|
+
verifyMetastatementAsContainedAssertion,
|
|
19
23
|
verifyMetastatementAsIs
|
|
20
24
|
];
|
|
21
25
|
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
4
|
+
|
|
5
|
+
import { CONTAINED } from "../constants";
|
|
6
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
7
|
+
import { isMetastatementNegated } from "../utilities/verify";
|
|
8
|
+
|
|
9
|
+
const termNodeQuery = nodeQuery("/metastatement/term!"),
|
|
10
|
+
operatorTerminalNodesQuery = nodesQuery("/metastatement/@operator"),
|
|
11
|
+
metastatementTermNodesQuery = nodesQuery("/metastatement/metastatement//term");
|
|
12
|
+
|
|
13
|
+
export default function verifyMetastatementAsContainedAssertion(metastatementNode, assignments, derived, localContext) {
|
|
14
|
+
let metastatementVerifiedAsContainedAssertion;
|
|
15
|
+
|
|
16
|
+
const metastatementContainedAssertion = isMetastatementContainedAssertion(metastatementNode);
|
|
17
|
+
|
|
18
|
+
if (metastatementContainedAssertion) {
|
|
19
|
+
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
20
|
+
|
|
21
|
+
localContext.trace(`Verifying the '${metastatementString}' metastatement as a contained assertion...`, metastatementNode);
|
|
22
|
+
|
|
23
|
+
const metastatementFunctions = [
|
|
24
|
+
verifyMetastatementAsDerivedContainedAssertion,
|
|
25
|
+
verifyMetastatementAsStatedContainedAssertion
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
metastatementVerifiedAsContainedAssertion = metastatementFunctions.some((metastatementFunction) => {
|
|
29
|
+
const metastatementVerifiedAsContainedAssertion = metastatementFunction(metastatementNode, assignments, derived, localContext);
|
|
30
|
+
|
|
31
|
+
if (metastatementVerifiedAsContainedAssertion) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
if (metastatementVerifiedAsContainedAssertion) {
|
|
37
|
+
localContext.debug(`...verified the '${metastatementString}' metastatement as a contained assertion.`, metastatementNode);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return metastatementVerifiedAsContainedAssertion;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function verifyMetastatementAsDerivedContainedAssertion(metastatementNode, assignments, derived, localContext) {
|
|
45
|
+
let metastatementVerifiedAsDefinedContainedAssertion = false;
|
|
46
|
+
|
|
47
|
+
if (derived) {
|
|
48
|
+
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
49
|
+
|
|
50
|
+
localContext.trace(`Verifying the derived '${metastatementString}' metastatement as a contained assertion...`, metastatementNode);
|
|
51
|
+
|
|
52
|
+
const metastatementNegated = isMetastatementNegated(metastatementNode),
|
|
53
|
+
negated = metastatementNegated,
|
|
54
|
+
termNode = termNodeQuery(metastatementNode),
|
|
55
|
+
metastatementTermNodes = metastatementTermNodesQuery(metastatementNode),
|
|
56
|
+
termNodeMatchesMetaArgumentTermNode = metastatementTermNodes.some((metastatementTermNode) => {
|
|
57
|
+
const termNodeMatchesMetaArgumentTermNode = termNode.match(metastatementTermNode);
|
|
58
|
+
|
|
59
|
+
if (termNodeMatchesMetaArgumentTermNode) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
if (!negated) {
|
|
65
|
+
if (termNodeMatchesMetaArgumentTermNode) {
|
|
66
|
+
metastatementVerifiedAsDefinedContainedAssertion = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (negated) {
|
|
71
|
+
if (!termNodeMatchesMetaArgumentTermNode) {
|
|
72
|
+
metastatementVerifiedAsDefinedContainedAssertion = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (metastatementVerifiedAsDefinedContainedAssertion) {
|
|
77
|
+
localContext.debug(`...verified the derived '${metastatementString}' metastatement as a contained assertion.`, metastatementNode);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return metastatementVerifiedAsDefinedContainedAssertion;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function verifyMetastatementAsStatedContainedAssertion(metastatementNode, assignments, derived, localContext) {
|
|
85
|
+
let metastatementVerifiedAsStatedContainedAssertion = false;
|
|
86
|
+
|
|
87
|
+
if (!derived) {
|
|
88
|
+
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
89
|
+
|
|
90
|
+
localContext.trace(`Verifying the stated '${metastatementString}' metastatement as a contained assertion...`, metastatementNode);
|
|
91
|
+
|
|
92
|
+
const intrinsicLevel = localContext.isIntrinsicLevel();
|
|
93
|
+
|
|
94
|
+
if (intrinsicLevel) {
|
|
95
|
+
localContext.debug(`The stated '${metastatementString}' metastatement as a contained assertion cannot be verified at intrinsic level.`, metastatementNode);
|
|
96
|
+
} else {
|
|
97
|
+
const nonTerminalNode = metastatementNode, ///
|
|
98
|
+
nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
99
|
+
const verifiedAhead = true;
|
|
100
|
+
|
|
101
|
+
return verifiedAhead;
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
metastatementVerifiedAsStatedContainedAssertion = nonTerminalNodeVerified; ///
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (metastatementVerifiedAsStatedContainedAssertion) {
|
|
108
|
+
localContext.debug(`...verified the stated '${metastatementString}' metastatement as a contained assertion.`, metastatementNode);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return metastatementVerifiedAsStatedContainedAssertion;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function isMetastatementContainedAssertion(metastatementNode) {
|
|
116
|
+
const operatorTerminalNodes = operatorTerminalNodesQuery(metastatementNode),
|
|
117
|
+
metastatementContainedAssertion = operatorTerminalNodes.some((operatorTerminalNode) => {
|
|
118
|
+
const content = operatorTerminalNode.getContent(),
|
|
119
|
+
contentContained = (content === CONTAINED);
|
|
120
|
+
|
|
121
|
+
if (contentContained) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
return metastatementContainedAssertion;
|
|
127
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import verifyTerm from "./term";
|
|
4
|
+
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
5
|
+
|
|
6
|
+
import { first } from "../utilities/array";
|
|
7
|
+
import { DEFINED } from "../constants";
|
|
8
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
9
|
+
import { isMetastatementNegated } from "../utilities/verify";
|
|
10
|
+
|
|
11
|
+
const termNodeQuery = nodeQuery("/metastatement/term!"),
|
|
12
|
+
variableNodeQuery = nodeQuery("/metastatement/term/variable!"),
|
|
13
|
+
operatorTerminalNodesQuery = nodesQuery("/metastatement/@operator");
|
|
14
|
+
|
|
15
|
+
export default function verifyMetastatementAsDefinedAssertion(metastatementNode, assignments, derived, localContext) {
|
|
16
|
+
let metastatementVerifiedAsDefinedAssertion = false;
|
|
17
|
+
|
|
18
|
+
const metastatementDefinedAssertion = isMetastatementDefinedAssertion(metastatementNode);
|
|
19
|
+
|
|
20
|
+
if (metastatementDefinedAssertion) {
|
|
21
|
+
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
22
|
+
|
|
23
|
+
localContext.trace(`Verifying the '${metastatementString}' metastatement as a defined assertion...`, metastatementNode);
|
|
24
|
+
|
|
25
|
+
const definedAssertionFunctions = [
|
|
26
|
+
verifyDerivedMetastatementAsDefinedAssertion,
|
|
27
|
+
verifyStatedMetastatementAsDefinedAssertion
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
metastatementVerifiedAsDefinedAssertion = definedAssertionFunctions.some((definedAssertionFunction) => {
|
|
31
|
+
const metastatementVerifiedAsDefinedAssertion = definedAssertionFunction(metastatementNode, assignments, derived, localContext);
|
|
32
|
+
|
|
33
|
+
if (metastatementVerifiedAsDefinedAssertion) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (metastatementVerifiedAsDefinedAssertion) {
|
|
39
|
+
localContext.debug(`...verified the '${metastatementString}' metastatement as a defined assertion.`, metastatementNode);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return metastatementVerifiedAsDefinedAssertion;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function verifyDerivedMetastatementAsDefinedAssertion(metastatementNode, assignments, derived, localContext) {
|
|
47
|
+
let derivedMetastatementVerifiedAsDefeindAssertion = false;
|
|
48
|
+
|
|
49
|
+
if (derived) {
|
|
50
|
+
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
51
|
+
|
|
52
|
+
localContext.trace(`Verifying the derived '${metastatementString}' metastatement as a defined assertion...`, metastatementNode);
|
|
53
|
+
|
|
54
|
+
const metastatementNegated = isMetastatementNegated(metastatementNode),
|
|
55
|
+
variableNode = variableNodeQuery(metastatementNode),
|
|
56
|
+
termNode = termNodeQuery(metastatementNode);
|
|
57
|
+
|
|
58
|
+
if (false) {
|
|
59
|
+
///
|
|
60
|
+
} else if (variableNode !== null) {
|
|
61
|
+
const variable = localContext.findVariableByVariableNode(variableNode);
|
|
62
|
+
|
|
63
|
+
if (variable !== null) {
|
|
64
|
+
const variableDefined = localContext.isVariableDefined(variable);
|
|
65
|
+
|
|
66
|
+
if (!metastatementNegated) {
|
|
67
|
+
if (variableDefined) {
|
|
68
|
+
derivedMetastatementVerifiedAsDefeindAssertion = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (metastatementNegated) {
|
|
73
|
+
if (!variableDefined) {
|
|
74
|
+
derivedMetastatementVerifiedAsDefeindAssertion = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
} else if (termNode !== null) {
|
|
79
|
+
const terms = [],
|
|
80
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
81
|
+
const verifiedAhead = true;
|
|
82
|
+
|
|
83
|
+
return verifiedAhead;
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (termVerified) {
|
|
87
|
+
const firstTerm = first(terms),
|
|
88
|
+
term = firstTerm, ///
|
|
89
|
+
termGrounded = localContext.isTermGrounded(term);
|
|
90
|
+
|
|
91
|
+
if (!metastatementNegated) {
|
|
92
|
+
if (termGrounded) {
|
|
93
|
+
derivedMetastatementVerifiedAsDefeindAssertion = true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (metastatementNegated) {
|
|
98
|
+
if (!termGrounded) {
|
|
99
|
+
derivedMetastatementVerifiedAsDefeindAssertion = true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (derivedMetastatementVerifiedAsDefeindAssertion) {
|
|
106
|
+
localContext.debug(`...verified the derived '${metastatementString}' metastatement as a defined assertion.`, metastatementNode);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return derivedMetastatementVerifiedAsDefeindAssertion;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function verifyStatedMetastatementAsDefinedAssertion(metastatementNode, assignments, derived, localContext) {
|
|
114
|
+
let statedMetastatementVerifiedAsDefinedAssertion = false;
|
|
115
|
+
|
|
116
|
+
if (!derived) {
|
|
117
|
+
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
118
|
+
|
|
119
|
+
localContext.trace(`Verifying the stated '${metastatementString}' metastatement as a defined assertion...`, metastatementNode);
|
|
120
|
+
|
|
121
|
+
const intrinsicLevel = localContext.isIntrinsicLevel();
|
|
122
|
+
|
|
123
|
+
if (intrinsicLevel) {
|
|
124
|
+
localContext.debug(`The stated '${metastatementString}' metastatement as a defined assertion cannot be verified at intrinsic level.`, metastatementNode);
|
|
125
|
+
} else {
|
|
126
|
+
const nonTerminalNode = metastatementNode, ///
|
|
127
|
+
nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
128
|
+
const verifiedAhead = true;
|
|
129
|
+
|
|
130
|
+
return verifiedAhead;
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
statedMetastatementVerifiedAsDefinedAssertion = nonTerminalNodeVerified; ///
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (statedMetastatementVerifiedAsDefinedAssertion) {
|
|
137
|
+
localContext.debug(`...verified the stated '${metastatementString}' metastatement as a defined assertion.`, metastatementNode);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return statedMetastatementVerifiedAsDefinedAssertion;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function isMetastatementDefinedAssertion(metastatementNode) {
|
|
145
|
+
const operatorTerminalNodes = operatorTerminalNodesQuery(metastatementNode),
|
|
146
|
+
metastatementDefinedAssertion = operatorTerminalNodes.some((operatorTerminalNode) => {
|
|
147
|
+
const content = operatorTerminalNode.getContent(),
|
|
148
|
+
contentDefined = (content === DEFINED);
|
|
149
|
+
|
|
150
|
+
if (contentDefined) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
return metastatementDefinedAssertion;
|
|
156
|
+
}
|
package/src/verify/premise.js
CHANGED
|
@@ -41,8 +41,7 @@ export default function verifyPremise(premiseNode, premises, localContext) {
|
|
|
41
41
|
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localContext);
|
|
42
42
|
|
|
43
43
|
if (unqualifiedMetastatementVerified) {
|
|
44
|
-
const
|
|
45
|
-
assignmentAssigned = assignAssignment(assignments, localContext);
|
|
44
|
+
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
46
45
|
|
|
47
46
|
premiseVerified = assignmentAssigned; ///
|
|
48
47
|
}
|
package/src/verify/statement.js
CHANGED
|
@@ -7,12 +7,12 @@ import verifyStatementAsDefinedAssertion from "../verify/statementAsDefinedAsser
|
|
|
7
7
|
import verifyStatementAsContainedAssertion from "../verify/statementAsContainedAssertion";
|
|
8
8
|
import statementAgainstCombinatorNodesVerifier from "../verifier/nodes/statementAgainstCombinator";
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { nodeQuery } from "../utilities/query";
|
|
11
|
+
import { isStatementDefinedAssertion } from "../verify/statementAsDefinedAssertion";
|
|
12
|
+
import { isStatementContainedAssertion } from "../verify/statementAsContainedAssertion";
|
|
12
13
|
|
|
13
14
|
const equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
14
|
-
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!")
|
|
15
|
-
operatorTerminalNodesQuery = nodesQuery("/statement/@operator");
|
|
15
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
16
16
|
|
|
17
17
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
18
18
|
let statementVerified;
|
|
@@ -191,35 +191,7 @@ function isStatementEquality(statementNode) {
|
|
|
191
191
|
|
|
192
192
|
function isStatementTypeAssertion(statementNode) {
|
|
193
193
|
const typeAssertionNode = typeAssertionNodeQuery(statementNode),
|
|
194
|
-
statementTypeAssertion = (typeAssertionNode
|
|
194
|
+
statementTypeAssertion = (typeAssertionNode !== null);
|
|
195
195
|
|
|
196
196
|
return statementTypeAssertion;
|
|
197
197
|
}
|
|
198
|
-
|
|
199
|
-
function isStatementDefinedAssertion(statementNode) {
|
|
200
|
-
const operatorTerminalNodes = operatorTerminalNodesQuery(statementNode),
|
|
201
|
-
statementDefinedAssertion = operatorTerminalNodes.some((operatorTerminalNode) => {
|
|
202
|
-
const content = operatorTerminalNode.getContent(),
|
|
203
|
-
contentDefined = (content === DEFINED);
|
|
204
|
-
|
|
205
|
-
if (contentDefined) {
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
return statementDefinedAssertion;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function isStatementContainedAssertion(statementNode) {
|
|
214
|
-
const operatorTerminalNodes = operatorTerminalNodesQuery(statementNode),
|
|
215
|
-
statementContainedAssertion = operatorTerminalNodes.some((operatorTerminalNode) => {
|
|
216
|
-
const content = operatorTerminalNode.getContent(),
|
|
217
|
-
contentContained = (content === CONTAINED);
|
|
218
|
-
|
|
219
|
-
if (contentContained) {
|
|
220
|
-
return true;
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
return statementContainedAssertion;
|
|
225
|
-
}
|
|
@@ -2,34 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { CONTAINED } from "../constants";
|
|
6
|
+
import { isStatementNegated } from "../utilities/verify";
|
|
6
7
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
7
8
|
|
|
8
|
-
const
|
|
9
|
-
|
|
9
|
+
const termNodeQuery = nodeQuery("/statement/term!"),
|
|
10
|
+
statementTermNodesQuery = nodesQuery("/statement/metaArgument/statement//term"),
|
|
11
|
+
operatorTerminalNodesQuery = nodesQuery("/statement/@operator");
|
|
10
12
|
|
|
11
13
|
export default function verifyStatementAsContainedAssertion(statementNode, assignments, derived, localContext) {
|
|
12
14
|
let statementVerifiedAsContainedAssertion;
|
|
13
15
|
|
|
14
|
-
const
|
|
16
|
+
const statementContainedAssertion = isStatementContainedAssertion(statementNode);
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
if (statementContainedAssertion) {
|
|
19
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
20
|
+
|
|
21
|
+
localContext.trace(`Verifying the '${statementString}' statement as a contained assertion...`, statementNode);
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
const statementFunctions = [
|
|
24
|
+
verifyStatementAsDerivedContainedAssertion,
|
|
25
|
+
verifyStatementAsStatedContainedAssertion
|
|
26
|
+
];
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
statementVerifiedAsContainedAssertion = statementFunctions.some((statementFunction) => {
|
|
29
|
+
const statementVerifiedAsContainedAssertion = statementFunction(statementNode, assignments, derived, localContext);
|
|
30
|
+
|
|
31
|
+
if (statementVerifiedAsContainedAssertion) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
25
35
|
|
|
26
36
|
if (statementVerifiedAsContainedAssertion) {
|
|
27
|
-
|
|
37
|
+
localContext.debug(`...verified the '${statementString}' statement as a contained assertion.`, statementNode);
|
|
28
38
|
}
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
if (statementVerifiedAsContainedAssertion) {
|
|
32
|
-
localContext.debug(`...verified the '${statementString}' statement as a contained assertion.`, statementNode);
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
return statementVerifiedAsContainedAssertion;
|
|
@@ -43,32 +49,27 @@ function verifyStatementAsDerivedContainedAssertion(statementNode, assignments,
|
|
|
43
49
|
|
|
44
50
|
localContext.trace(`Verifying the derived '${statementString}' statement as a contained assertion...`, statementNode);
|
|
45
51
|
|
|
46
|
-
const statementNegated =
|
|
47
|
-
|
|
48
|
-
negated = statementNegated
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!negated) {
|
|
63
|
-
if (variableNodeMatchesMetaArgumentVariableNode) {
|
|
64
|
-
statementVerifiedAsDefinedContainedAssertion = true;
|
|
65
|
-
}
|
|
52
|
+
const statementNegated = isStatementNegated(statementNode),
|
|
53
|
+
termNode = termNodeQuery(statementNode),
|
|
54
|
+
negated = statementNegated, ///
|
|
55
|
+
statementTermNodes = statementTermNodesQuery(statementNode),
|
|
56
|
+
termNodeMatchesMetaArgumentVariableNode = statementTermNodes.some((statementTermNode) => {
|
|
57
|
+
const termNodeMatchesMetaArgumentVariableNode = termNode.match(statementTermNode);
|
|
58
|
+
|
|
59
|
+
if (termNodeMatchesMetaArgumentVariableNode) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
if (!negated) {
|
|
65
|
+
if (termNodeMatchesMetaArgumentVariableNode) {
|
|
66
|
+
statementVerifiedAsDefinedContainedAssertion = true;
|
|
66
67
|
}
|
|
68
|
+
}
|
|
67
69
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
70
|
+
if (negated) {
|
|
71
|
+
if (!termNodeMatchesMetaArgumentVariableNode) {
|
|
72
|
+
statementVerifiedAsDefinedContainedAssertion = true;
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
|
|
@@ -110,3 +111,17 @@ function verifyStatementAsStatedContainedAssertion(statementNode, assignments, d
|
|
|
110
111
|
|
|
111
112
|
return statementVerifiedAsStatedContainedAssertion;
|
|
112
113
|
}
|
|
114
|
+
|
|
115
|
+
export function isStatementContainedAssertion(statementNode) {
|
|
116
|
+
const operatorTerminalNodes = operatorTerminalNodesQuery(statementNode),
|
|
117
|
+
statementContainedAssertion = operatorTerminalNodes.some((operatorTerminalNode) => {
|
|
118
|
+
const content = operatorTerminalNode.getContent(),
|
|
119
|
+
contentContained = (content === CONTAINED);
|
|
120
|
+
|
|
121
|
+
if (contentContained) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
return statementContainedAssertion;
|
|
127
|
+
}
|
|
@@ -4,34 +4,40 @@ import verifyTerm from "./term";
|
|
|
4
4
|
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
5
5
|
|
|
6
6
|
import { first } from "../utilities/array";
|
|
7
|
-
import {
|
|
7
|
+
import { DEFINED } from "../constants";
|
|
8
8
|
import { isStatementNegated } from "../utilities/verify";
|
|
9
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
9
10
|
|
|
10
11
|
const termNodeQuery = nodeQuery("/statement/term!"),
|
|
11
|
-
variableNodeQuery = nodeQuery("/statement/term/variable!")
|
|
12
|
+
variableNodeQuery = nodeQuery("/statement/term/variable!"),
|
|
13
|
+
operatorTerminalNodesQuery = nodesQuery("/statement/@operator");
|
|
12
14
|
|
|
13
15
|
export default function verifyStatementAsDefinedAssertion(statementNode, assignments, derived, localContext) {
|
|
14
|
-
let statementVerifiedAsDefinedAssertion;
|
|
16
|
+
let statementVerifiedAsDefinedAssertion = false;
|
|
15
17
|
|
|
16
|
-
const
|
|
18
|
+
const statementDefinedAssertion = isStatementDefinedAssertion(statementNode);
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
if (statementDefinedAssertion) {
|
|
21
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
22
|
+
|
|
23
|
+
localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
|
|
19
24
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
const definedAssertionFunctions = [
|
|
26
|
+
verifyDerivedStatementAsDefinedAssertion,
|
|
27
|
+
verifyStatedStatementAsDefinedAssertion
|
|
28
|
+
];
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
statementVerifiedAsDefinedAssertion = definedAssertionFunctions.some((definedAssertionFunction) => {
|
|
31
|
+
const statementVerifiedAsDefinedAssertion = definedAssertionFunction(statementNode, assignments, derived, localContext);
|
|
32
|
+
|
|
33
|
+
if (statementVerifiedAsDefinedAssertion) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
27
37
|
|
|
28
38
|
if (statementVerifiedAsDefinedAssertion) {
|
|
29
|
-
|
|
39
|
+
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
30
40
|
}
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
if (statementVerifiedAsDefinedAssertion) {
|
|
34
|
-
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
return statementVerifiedAsDefinedAssertion;
|
|
@@ -134,3 +140,17 @@ function verifyStatedStatementAsDefinedAssertion(statementNode, assignments, der
|
|
|
134
140
|
|
|
135
141
|
return statedStatementVerifiedAsDefinedAssertion;
|
|
136
142
|
}
|
|
143
|
+
|
|
144
|
+
export function isStatementDefinedAssertion(statementNode) {
|
|
145
|
+
const operatorTerminalNodes = operatorTerminalNodesQuery(statementNode),
|
|
146
|
+
statementDefinedAssertion = operatorTerminalNodes.some((operatorTerminalNode) => {
|
|
147
|
+
const content = operatorTerminalNode.getContent(),
|
|
148
|
+
contentDefined = (content === DEFINED);
|
|
149
|
+
|
|
150
|
+
if (contentDefined) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
return statementDefinedAssertion;
|
|
156
|
+
}
|