occam-verify-cli 0.0.923 → 0.0.925
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/axiom.js +9 -9
- package/lib/conjecture.js +9 -9
- package/lib/constants.js +1 -9
- package/lib/context/file.js +3 -3
- package/lib/context/local.js +5 -5
- package/lib/lemma.js +9 -9
- package/lib/metaLemma.js +7 -7
- package/lib/metatheorem.js +7 -7
- package/lib/metavariable.js +8 -1
- package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
- package/lib/premise.js +6 -6
- package/lib/theorem.js +9 -9
- package/lib/topLevelAssertion.js +186 -0
- package/lib/verifier/nodes/intrinsicLevel.js +3 -3
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +3 -3
- package/lib/verifier/nodes/metaLevel.js +16 -16
- package/lib/verify/assertion/contained.js +91 -0
- package/lib/verify/assertion/defined.js +114 -0
- package/lib/verify/assertion/subproof.js +65 -0
- package/lib/verify/assertion/type.js +112 -0
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/declaration.js +3 -6
- package/lib/verify/derivation.js +7 -7
- package/lib/verify/equality.js +3 -3
- package/lib/verify/frame.js +2 -2
- package/lib/verify/judgement.js +2 -2
- package/lib/verify/lemma.js +5 -5
- package/lib/verify/metaLemma.js +4 -4
- package/lib/verify/metastatement.js +4 -24
- package/lib/verify/metatheorem.js +4 -4
- package/lib/verify/metavariable.js +2 -2
- package/lib/verify/proof.js +3 -3
- package/lib/verify/proofStep.js +4 -4
- package/lib/verify/rule.js +3 -3
- package/lib/verify/statement/qualified.js +19 -25
- package/lib/verify/statement/unqualified.js +38 -10
- package/lib/verify/statement.js +106 -97
- package/lib/verify/subDerivation.js +3 -3
- package/lib/verify/subproof.js +3 -3
- package/lib/verify/termAsConstructor.js +2 -2
- package/lib/verify/theorem.js +4 -4
- package/package.json +2 -2
- package/src/axiom.js +4 -4
- package/src/conjecture.js +4 -4
- package/src/constants.js +0 -2
- package/src/context/file.js +2 -2
- package/src/context/local.js +4 -3
- package/src/lemma.js +4 -4
- package/src/metaLemma.js +4 -4
- package/src/metatheorem.js +4 -4
- package/src/metavariable.js +6 -0
- package/src/mixins/nodesVerifier/metaLevel.js +1 -1
- package/src/premise.js +6 -6
- package/src/theorem.js +4 -4
- package/src/{metaLemmaMetatheorem.js → topLevelAssertion.js} +16 -26
- package/src/verifier/nodes/intrinsicLevel.js +2 -2
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +3 -3
- package/src/verifier/nodes/metaLevel.js +18 -19
- package/src/verify/assertion/contained.js +111 -0
- package/src/verify/{statementAsDefinedAssertion.js → assertion/defined.js} +25 -41
- package/src/verify/assertion/subproof.js +77 -0
- package/src/verify/{typeAssertion.js → assertion/type.js} +15 -15
- package/src/verify/axiom.js +5 -4
- package/src/verify/conjecture.js +5 -4
- package/src/verify/declaration.js +2 -6
- package/src/verify/derivation.js +6 -6
- package/src/verify/equality.js +2 -2
- package/src/verify/frame.js +1 -1
- package/src/verify/judgement.js +1 -1
- package/src/verify/lemma.js +8 -5
- package/src/verify/metaLemma.js +4 -4
- package/src/verify/metastatement.js +3 -32
- package/src/verify/metatheorem.js +4 -4
- package/src/verify/metavariable.js +1 -1
- package/src/verify/proof.js +2 -2
- package/src/verify/proofStep.js +3 -3
- package/src/verify/rule.js +4 -4
- package/src/verify/statement/qualified.js +30 -33
- package/src/verify/statement/unqualified.js +52 -10
- package/src/verify/statement.js +168 -47
- package/src/verify/subDerivation.js +2 -2
- package/src/verify/subproof.js +2 -2
- package/src/verify/termAsConstructor.js +2 -2
- package/src/verify/theorem.js +7 -4
- package/lib/axiomLemmaTheoremConjecture.js +0 -174
- package/lib/metaLemmaMetatheorem.js +0 -191
- package/lib/verify/statementAsContainedAssertion.js +0 -109
- package/lib/verify/statementAsDefinedAssertion.js +0 -132
- package/lib/verify/typeAssertion.js +0 -112
- package/src/axiomLemmaTheoremConjecture.js +0 -165
- package/src/verify/statementAsContainedAssertion.js +0 -127
package/src/metaLemma.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import TopLevelAssertion from "./topLevelAssertion";
|
|
4
4
|
|
|
5
|
-
export default class MetaLemma extends
|
|
6
|
-
static fromJSONAndFileContext(json, fileContext) { return
|
|
5
|
+
export default class MetaLemma extends TopLevelAssertion {
|
|
6
|
+
static fromJSONAndFileContext(json, fileContext) { return TopLevelAssertion.fromJSONAndFileContext(MetaLemma, json, fileContext); }
|
|
7
7
|
|
|
8
|
-
static fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(labels, metaSuppositions, metaConsequent, substitutions, fileContext) { return
|
|
8
|
+
static fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(labels, metaSuppositions, metaConsequent, substitutions, fileContext) { return TopLevelAssertion.fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(MetaLemma, labels, metaSuppositions, metaConsequent, substitutions, fileContext); }
|
|
9
9
|
}
|
package/src/metatheorem.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import TopLevelAssertion from "./topLevelAssertion";
|
|
4
4
|
|
|
5
|
-
export default class Metatheorem extends
|
|
6
|
-
static fromJSONAndFileContext(json, fileContext) { return
|
|
5
|
+
export default class Metatheorem extends TopLevelAssertion {
|
|
6
|
+
static fromJSONAndFileContext(json, fileContext) { return TopLevelAssertion.fromJSONAndFileContext(Metatheorem, json, fileContext); }
|
|
7
7
|
|
|
8
|
-
static fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, fileContext) { return
|
|
8
|
+
static fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, fileContext) { return TopLevelAssertion.fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(Metatheorem, labels, suppositions, consequent, fileContext); }
|
|
9
9
|
}
|
package/src/metavariable.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import StatementForMetavariableSubstitution from "../../substitution/statementForMetavariable";
|
|
4
4
|
|
|
5
|
-
function verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions, localContextA,
|
|
5
|
+
function verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
6
6
|
let metavariableNodeVerified;
|
|
7
7
|
|
|
8
8
|
const substitution = substitutions.find((substitution) => {
|
package/src/premise.js
CHANGED
|
@@ -10,17 +10,17 @@ import { nodeQuery, nodesQuery } from "./utilities/query";
|
|
|
10
10
|
import { statementNodeFromStatementString } from "./utilities/node";
|
|
11
11
|
|
|
12
12
|
const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
13
|
-
subproofPremiseStatementNodesQuery = nodesQuery("/subproof/premise/unqualifiedStatement!/statement!"),
|
|
14
13
|
subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
|
|
14
|
+
subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement!/statement!"),
|
|
15
15
|
subproofLastProofStepStatementNodeQuery = nodeQuery("/subproof/subDerivation/lastProofStep/unqualifiedStatement|qualifiedStatement/statement!");
|
|
16
16
|
|
|
17
17
|
export default class Premise {
|
|
18
18
|
constructor(statementNode) {
|
|
19
|
-
this.
|
|
19
|
+
this.statementNode = statementNode;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
getStatementNode() {
|
|
23
|
-
return this.
|
|
23
|
+
return this.statementNode;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
matchStatementNode(statementNode, substitutions, fileContext, localContext) {
|
|
@@ -51,10 +51,10 @@ export default class Premise {
|
|
|
51
51
|
const subproofAssertionNode = subproofAssertionNodeQuery(this.statementNode);
|
|
52
52
|
|
|
53
53
|
if (subproofAssertionNode !== null) {
|
|
54
|
-
const
|
|
54
|
+
const subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
|
|
55
55
|
subproofLastProofStepStatementNode = subproofLastProofStepStatementNodeQuery(subproofNode),
|
|
56
56
|
subproofStatementNodes = [
|
|
57
|
-
...
|
|
57
|
+
...subproofSuppositionStatementNodes,
|
|
58
58
|
subproofLastProofStepStatementNode
|
|
59
59
|
],
|
|
60
60
|
subproofAssertionStatementNodes = subproofAssertionStatementNodesQuery(subproofAssertionNode);
|
|
@@ -82,7 +82,7 @@ export default class Premise {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
toJSON(tokens) {
|
|
85
|
-
const statementString = nodeAsString(this.
|
|
85
|
+
const statementString = nodeAsString(this.statementNode, tokens),
|
|
86
86
|
statement = statementString, ///
|
|
87
87
|
json = {
|
|
88
88
|
statement
|
package/src/theorem.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import TopLevelAssertion from "./topLevelAssertion";
|
|
4
4
|
|
|
5
|
-
export default class Theorem extends
|
|
6
|
-
static fromJSONAndFileContext(json, fileContext) { return
|
|
5
|
+
export default class Theorem extends TopLevelAssertion {
|
|
6
|
+
static fromJSONAndFileContext(json, fileContext) { return TopLevelAssertion.fromJSONAndFileContext(Theorem, json, fileContext); }
|
|
7
7
|
|
|
8
|
-
static
|
|
8
|
+
static fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext) { return TopLevelAssertion.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(Theorem, labels, suppositions, consequent, substitutions, fileContext); }
|
|
9
9
|
}
|
|
@@ -7,7 +7,7 @@ import StatementForMetavariableSubstitution from "./substitution/statementForMet
|
|
|
7
7
|
|
|
8
8
|
import { reverse, correlate } from "./utilities/array";
|
|
9
9
|
|
|
10
|
-
export default class
|
|
10
|
+
export default class TopLevelAssertion {
|
|
11
11
|
constructor(labels, suppositions, consequent, substitutions, fileContext) {
|
|
12
12
|
this.labels = labels;
|
|
13
13
|
this.suppositions = suppositions;
|
|
@@ -39,9 +39,9 @@ export default class MetaLemmaMetatheorem {
|
|
|
39
39
|
matchStatement(statementNode, localContext) {
|
|
40
40
|
let statementNatches = false;
|
|
41
41
|
|
|
42
|
-
const
|
|
42
|
+
const proofSteps = localContext.getProofSteps(),
|
|
43
43
|
substitutions = [],
|
|
44
|
-
suppositionsMatch = matchSuppositions(this.suppositions,
|
|
44
|
+
suppositionsMatch = matchSuppositions(this.suppositions, proofSteps, substitutions, this.fileContext, localContext);
|
|
45
45
|
|
|
46
46
|
if (suppositionsMatch) {
|
|
47
47
|
const consequentMatches = matchConsequent(this.consequent, statementNode, substitutions, this.fileContext, localContext);
|
|
@@ -77,22 +77,19 @@ export default class MetaLemmaMetatheorem {
|
|
|
77
77
|
}),
|
|
78
78
|
consequentJSON = this.consequent.toJSON(tokens),
|
|
79
79
|
substitutionsJSON = this.substitutions.map((substitution) => {
|
|
80
|
-
|
|
80
|
+
const substitutionJSON = substitution.toJSON();
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
localContextJSON = this.fileContext.toJSON(tokens),
|
|
82
|
+
return substitutionJSON;
|
|
83
|
+
}),
|
|
85
84
|
labels = labelsJSON, ///
|
|
86
85
|
suppositions = suppositionsJSON, ///
|
|
87
86
|
consequent = consequentJSON, ///
|
|
88
87
|
substitutions = substitutionsJSON, ///
|
|
89
|
-
fileContext = localContextJSON, ///
|
|
90
88
|
json = {
|
|
91
89
|
labels,
|
|
92
90
|
suppositions,
|
|
93
91
|
consequent,
|
|
94
|
-
substitutions
|
|
95
|
-
fileContext
|
|
92
|
+
substitutions
|
|
96
93
|
};
|
|
97
94
|
|
|
98
95
|
return json;
|
|
@@ -143,13 +140,13 @@ export default class MetaLemmaMetatheorem {
|
|
|
143
140
|
static fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(Class, labels, suppositions, consequent, substitutions, fileContext) { return new Class(labels, suppositions, consequent, substitutions, fileContext); }
|
|
144
141
|
}
|
|
145
142
|
|
|
146
|
-
function matchSuppositions(suppositions,
|
|
143
|
+
function matchSuppositions(suppositions, proofSteps, substitutions, fileContext, localContext) {
|
|
147
144
|
suppositions = reverse(suppositions); ///
|
|
148
145
|
|
|
149
|
-
|
|
146
|
+
proofSteps = reverse(proofSteps); ///
|
|
150
147
|
|
|
151
|
-
const suppositionsMatch = correlate(suppositions,
|
|
152
|
-
const suppositionMatches = matchSupposition(supposition,
|
|
148
|
+
const suppositionsMatch = correlate(suppositions, proofSteps, (supposition, proofStep) => {
|
|
149
|
+
const suppositionMatches = matchSupposition(supposition, proofStep, substitutions, fileContext, localContext);
|
|
153
150
|
|
|
154
151
|
if (suppositionMatches) {
|
|
155
152
|
return true;
|
|
@@ -159,25 +156,18 @@ function matchSuppositions(suppositions, metaproofSteps, substitutions, fileCont
|
|
|
159
156
|
return suppositionsMatch;
|
|
160
157
|
}
|
|
161
158
|
|
|
162
|
-
function matchSupposition(supposition,
|
|
163
|
-
let
|
|
164
|
-
|
|
165
|
-
const metaSubproofNode = metaproofStep.getSubproofNode(),
|
|
166
|
-
statementNode = metaproofStep.getStatementNode();
|
|
159
|
+
function matchSupposition(supposition, proofStep, substitutions, fileContext, localContext) {
|
|
160
|
+
let suppositionMatches = false;
|
|
167
161
|
|
|
168
|
-
|
|
169
|
-
const suppositionMatchesSubproofNode = supposition.matchSubproofNode(metaSubproofNode, substitutions, fileContext, localContext);
|
|
170
|
-
|
|
171
|
-
matchesSupposition - suppositionMatchesSubproofNode; ///
|
|
172
|
-
}
|
|
162
|
+
const statementNode = proofStep.getStatementNode();
|
|
173
163
|
|
|
174
164
|
if (statementNode !== null) {
|
|
175
165
|
const suppositionMatchesStatementNode = supposition.matchStatementNode(statementNode, substitutions, fileContext, localContext);
|
|
176
166
|
|
|
177
|
-
|
|
167
|
+
suppositionMatches = suppositionMatchesStatementNode; ///
|
|
178
168
|
}
|
|
179
169
|
|
|
180
|
-
return
|
|
170
|
+
return suppositionMatches;
|
|
181
171
|
}
|
|
182
172
|
|
|
183
173
|
function matchConsequent(consequent, statementNode, substitutions, fileContext, localContext) {
|
|
@@ -35,7 +35,7 @@ class IntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
35
35
|
{
|
|
36
36
|
nodeQueryA: nonTerminalNodeQuery,
|
|
37
37
|
nodeQueryB: nonTerminalNodeQuery,
|
|
38
|
-
verifyNodes: (nodeA, nodeB, substitutions,
|
|
38
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
39
39
|
let nonTerminalNodeVerified;
|
|
40
40
|
|
|
41
41
|
const nonTerminalNodeA = nodeA, ///
|
|
@@ -43,7 +43,7 @@ class IntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
43
43
|
|
|
44
44
|
nonTerminalNodeVerified =
|
|
45
45
|
|
|
46
|
-
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
46
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
47
47
|
|
|
48
48
|
return nonTerminalNodeVerified;
|
|
49
49
|
}
|
|
@@ -93,7 +93,7 @@ class IntrinsicLevelAgainstMetaLevelNodesVerifier extends NodesVerifier {
|
|
|
93
93
|
{
|
|
94
94
|
nodeQueryA: nonTerminalNodeQuery,
|
|
95
95
|
nodeQueryB: nonTerminalNodeQuery,
|
|
96
|
-
verifyNodes: (nodeA, nodeB, substitutions,
|
|
96
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
97
97
|
let nonTerminalNodeVerified;
|
|
98
98
|
|
|
99
99
|
const nonTerminalNodeA = nodeA, ///
|
|
@@ -101,7 +101,7 @@ class IntrinsicLevelAgainstMetaLevelNodesVerifier extends NodesVerifier {
|
|
|
101
101
|
|
|
102
102
|
nonTerminalNodeVerified =
|
|
103
103
|
|
|
104
|
-
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
104
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
105
105
|
|
|
106
106
|
return nonTerminalNodeVerified;
|
|
107
107
|
}
|
|
@@ -133,7 +133,7 @@ class IntrinsicLevelAgainstMetaLevelNodesVerifier extends NodesVerifier {
|
|
|
133
133
|
|
|
134
134
|
const substitutionNode = statementSubstitutionNodeA, ///
|
|
135
135
|
metavariableNodeA = statementMetavariableNodeA, ///
|
|
136
|
-
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
|
|
136
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead);
|
|
137
137
|
|
|
138
138
|
statementMetavariableNodeVerifiedAgainstStatementNode = metavariableVerifiedAgainstStatement; ///
|
|
139
139
|
|
|
@@ -8,29 +8,29 @@ import { nodeQuery } from "../../utilities/query";
|
|
|
8
8
|
import { verifyNodes } from "../../utilities/verifier";
|
|
9
9
|
|
|
10
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
11
|
-
nonTerminalNodeQuery = nodeQuery("/*"),
|
|
12
11
|
statementNodeQuery = nodeQuery("/statement!"),
|
|
12
|
+
nonTerminalNodeQuery = nodeQuery("/*"),
|
|
13
13
|
termVariableNodeQuery = nodeQuery("/term/variable!"),
|
|
14
|
-
|
|
14
|
+
metavariableNodeQuery = nodeQuery("/metavariable!");
|
|
15
15
|
|
|
16
16
|
class MetaLevelNodesVerifier extends NodesVerifier {
|
|
17
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
17
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
18
18
|
let nonTerminalNodeVerified;
|
|
19
19
|
|
|
20
20
|
const nodeQueryMaps = [
|
|
21
21
|
{
|
|
22
|
-
nodeQueryA:
|
|
22
|
+
nodeQueryA: metavariableNodeQuery,
|
|
23
23
|
nodeQueryB: statementNodeQuery,
|
|
24
|
-
verifyNodes: (nodeA, nodeB, substitutions,
|
|
24
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
25
25
|
let nonTerminalNodeVerified;
|
|
26
26
|
|
|
27
27
|
const statementNodeB = nodeB, ///
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
metavariableNodeA = nodeA, ///
|
|
29
|
+
metavariableNodeVerifiedAgainstStatementNode =
|
|
30
30
|
|
|
31
|
-
this.
|
|
31
|
+
this.verifyMetavariableNodeAgainstStatementNode(metavariableNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
32
32
|
|
|
33
|
-
nonTerminalNodeVerified =
|
|
33
|
+
nonTerminalNodeVerified = metavariableNodeVerifiedAgainstStatementNode; ///
|
|
34
34
|
|
|
35
35
|
return nonTerminalNodeVerified;
|
|
36
36
|
}
|
|
@@ -55,7 +55,7 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
55
55
|
{
|
|
56
56
|
nodeQueryA: nonTerminalNodeQuery,
|
|
57
57
|
nodeQueryB: nonTerminalNodeQuery,
|
|
58
|
-
verifyNodes: (nodeA, nodeB, substitutions,
|
|
58
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
59
59
|
let nonTerminalNodeVerified;
|
|
60
60
|
|
|
61
61
|
const nonTerminalNodeA = nodeA, ///
|
|
@@ -63,30 +63,29 @@ class MetaLevelNodesVerifier extends NodesVerifier {
|
|
|
63
63
|
|
|
64
64
|
nonTerminalNodeVerified =
|
|
65
65
|
|
|
66
|
-
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
66
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
67
67
|
|
|
68
68
|
return nonTerminalNodeVerified;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
];
|
|
72
72
|
|
|
73
|
-
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
73
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
74
74
|
|
|
75
75
|
nonTerminalNodeVerified = nodesVerified; ///
|
|
76
76
|
|
|
77
77
|
return nonTerminalNodeVerified;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
let
|
|
80
|
+
verifyMetavariableNodeAgainstStatementNode(metavariableNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
81
|
+
let metavariableNodeVerifiedAgainstStatementNode;
|
|
82
82
|
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, verifyAhead);
|
|
83
|
+
const substitutionNode = null,
|
|
84
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead);
|
|
86
85
|
|
|
87
|
-
|
|
86
|
+
metavariableNodeVerifiedAgainstStatementNode = metavariableVerifiedAgainstStatement; ///
|
|
88
87
|
|
|
89
|
-
return
|
|
88
|
+
return metavariableNodeVerifiedAgainstStatementNode;
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import metaLevelNodeVerifier from "../../verifier/node/metaLevel";
|
|
4
|
+
|
|
5
|
+
import { isStatementNegated } from "../../utilities/verify";
|
|
6
|
+
import { nodeQuery, nodesQuery } from "../../utilities/query";
|
|
7
|
+
|
|
8
|
+
const termNodeQuery = nodeQuery("/statement/term!"),
|
|
9
|
+
statementTermNodesQuery = nodesQuery("/statement/metaArgument/statement//term");
|
|
10
|
+
|
|
11
|
+
export default function verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
|
|
12
|
+
let statementVerifiedAsContainedAssertion;
|
|
13
|
+
|
|
14
|
+
const statementContainedAssertion = isStatementContainedAssertion(containedAssertionNode);
|
|
15
|
+
|
|
16
|
+
if (statementContainedAssertion) {
|
|
17
|
+
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
18
|
+
|
|
19
|
+
localContext.trace(`Verifying the '${containedAssertionString}' statement as a contained assertion...`, containedAssertionNode);
|
|
20
|
+
|
|
21
|
+
const statementFunctions = [
|
|
22
|
+
verifyStatementAsDerivedContainedAssertion,
|
|
23
|
+
verifyStatementAsStatedContainedAssertion
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
statementVerifiedAsContainedAssertion = statementFunctions.some((statementFunction) => {
|
|
27
|
+
const statementVerifiedAsContainedAssertion = statementFunction(containedAssertionNode, assignments, derived, localContext);
|
|
28
|
+
|
|
29
|
+
if (statementVerifiedAsContainedAssertion) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
if (statementVerifiedAsContainedAssertion) {
|
|
35
|
+
localContext.debug(`...verified the '${containedAssertionString}' statement as a contained assertion.`, containedAssertionNode);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return statementVerifiedAsContainedAssertion;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function verifyStatementAsDerivedContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
|
|
43
|
+
let statementVerifiedAsDefinedContainedAssertion = false;
|
|
44
|
+
|
|
45
|
+
if (derived) {
|
|
46
|
+
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
47
|
+
|
|
48
|
+
localContext.trace(`Verifying the '${containedAssertionString}' derived statement as a contained assertion...`, containedAssertionNode);
|
|
49
|
+
|
|
50
|
+
const statementNegated = isStatementNegated(containedAssertionNode),
|
|
51
|
+
termNode = termNodeQuery(containedAssertionNode),
|
|
52
|
+
negated = statementNegated, ///
|
|
53
|
+
statementTermNodes = statementTermNodesQuery(containedAssertionNode),
|
|
54
|
+
termNodeMatchesMetaArgumentVariableNode = statementTermNodes.some((statementTermNode) => {
|
|
55
|
+
const termNodeMatchesMetaArgumentVariableNode = termNode.match(statementTermNode);
|
|
56
|
+
|
|
57
|
+
if (termNodeMatchesMetaArgumentVariableNode) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
if (!negated) {
|
|
63
|
+
if (termNodeMatchesMetaArgumentVariableNode) {
|
|
64
|
+
statementVerifiedAsDefinedContainedAssertion = true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (negated) {
|
|
69
|
+
if (!termNodeMatchesMetaArgumentVariableNode) {
|
|
70
|
+
statementVerifiedAsDefinedContainedAssertion = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (statementVerifiedAsDefinedContainedAssertion) {
|
|
75
|
+
localContext.debug(`...verified the '${containedAssertionString}' derived statement as a contained assertion.`, containedAssertionNode);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return statementVerifiedAsDefinedContainedAssertion;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function verifyStatementAsStatedContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
|
|
83
|
+
let statementVerifiedAsStatedContainedAssertion = false;
|
|
84
|
+
|
|
85
|
+
if (!derived) {
|
|
86
|
+
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
87
|
+
|
|
88
|
+
localContext.trace(`Verifying the '${containedAssertionString}' stated statement as a contained assertion...`, containedAssertionNode);
|
|
89
|
+
|
|
90
|
+
const intrinsicLevel = localContext.isIntrinsicLevel();
|
|
91
|
+
|
|
92
|
+
if (intrinsicLevel) {
|
|
93
|
+
localContext.debug(`The '${containedAssertionString}' stated statement as a contained assertion cannot be verified at intrinsic level.`, containedAssertionNode);
|
|
94
|
+
} else {
|
|
95
|
+
const nonTerminalNode = containedAssertionNode, ///
|
|
96
|
+
nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
97
|
+
const verifiedAhead = true;
|
|
98
|
+
|
|
99
|
+
return verifiedAhead;
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
statementVerifiedAsStatedContainedAssertion = nonTerminalNodeVerified; ///
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (statementVerifiedAsStatedContainedAssertion) {
|
|
106
|
+
localContext.debug(`...verified the '${containedAssertionString}' stated statement as a contained assertion.`, containedAssertionNode);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return statementVerifiedAsStatedContainedAssertion;
|
|
111
|
+
}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import verifyTerm from "
|
|
4
|
-
import metaLevelNodeVerifier from "
|
|
3
|
+
import verifyTerm from "../../verify/term";
|
|
4
|
+
import metaLevelNodeVerifier from "../../verifier/node/metaLevel";
|
|
5
5
|
|
|
6
|
-
import { first } from "
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
6
|
+
import { first } from "../../utilities/array";
|
|
7
|
+
import { nodeQuery } from "../../utilities/query";
|
|
8
|
+
import { isAssertionNegated } from "../../utilities/verify";
|
|
10
9
|
|
|
11
10
|
const termNodeQuery = nodeQuery("/statement/term!"),
|
|
12
|
-
variableNodeQuery = nodeQuery("/statement/term/variable!")
|
|
13
|
-
operatorTerminalNodesQuery = nodesQuery("/statement/@operator");
|
|
11
|
+
variableNodeQuery = nodeQuery("/statement/term/variable!");
|
|
14
12
|
|
|
15
|
-
export default function
|
|
13
|
+
export default function verifyDefinedAssertion(definedAssertionNode, assignments, derived, localContext) {
|
|
16
14
|
let statementVerifiedAsDefinedAssertion = false;
|
|
17
15
|
|
|
18
|
-
const statementDefinedAssertion = isStatementDefinedAssertion(
|
|
16
|
+
const statementDefinedAssertion = isStatementDefinedAssertion(definedAssertionNode);
|
|
19
17
|
|
|
20
18
|
if (statementDefinedAssertion) {
|
|
21
|
-
const
|
|
19
|
+
const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
|
|
22
20
|
|
|
23
|
-
localContext.trace(`Verifying the '${
|
|
21
|
+
localContext.trace(`Verifying the '${definedAssertionString}' statement as a defined assertion...`, definedAssertionNode);
|
|
24
22
|
|
|
25
23
|
const definedAssertionFunctions = [
|
|
26
24
|
verifyDerivedStatementAsDefinedAssertion,
|
|
@@ -28,7 +26,7 @@ export default function verifyStatementAsDefinedAssertion(statementNode, assignm
|
|
|
28
26
|
];
|
|
29
27
|
|
|
30
28
|
statementVerifiedAsDefinedAssertion = definedAssertionFunctions.some((definedAssertionFunction) => {
|
|
31
|
-
const statementVerifiedAsDefinedAssertion = definedAssertionFunction(
|
|
29
|
+
const statementVerifiedAsDefinedAssertion = definedAssertionFunction(definedAssertionNode, assignments, derived, localContext);
|
|
32
30
|
|
|
33
31
|
if (statementVerifiedAsDefinedAssertion) {
|
|
34
32
|
return true;
|
|
@@ -36,24 +34,24 @@ export default function verifyStatementAsDefinedAssertion(statementNode, assignm
|
|
|
36
34
|
});
|
|
37
35
|
|
|
38
36
|
if (statementVerifiedAsDefinedAssertion) {
|
|
39
|
-
localContext.debug(`...verified the '${
|
|
37
|
+
localContext.debug(`...verified the '${definedAssertionString}' statement as a defined assertion.`, definedAssertionNode);
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
return statementVerifiedAsDefinedAssertion;
|
|
44
42
|
}
|
|
45
43
|
|
|
46
|
-
function verifyDerivedStatementAsDefinedAssertion(
|
|
44
|
+
function verifyDerivedStatementAsDefinedAssertion(definedAssertionNode, assignments, derived, localContext) {
|
|
47
45
|
let derivedStatementVerifiedAsDefeindAssertion = false;
|
|
48
46
|
|
|
49
47
|
if (derived) {
|
|
50
|
-
const
|
|
48
|
+
const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
|
|
51
49
|
|
|
52
|
-
localContext.trace(`Verifying the
|
|
50
|
+
localContext.trace(`Verifying the '${definedAssertionString}' derived statement as a defined assertion...`, definedAssertionNode);
|
|
53
51
|
|
|
54
|
-
const statementNegated =
|
|
55
|
-
variableNode = variableNodeQuery(
|
|
56
|
-
termNode = termNodeQuery(
|
|
52
|
+
const statementNegated = isAssertionNegated(definedAssertionNode),
|
|
53
|
+
variableNode = variableNodeQuery(definedAssertionNode),
|
|
54
|
+
termNode = termNodeQuery(definedAssertionNode);
|
|
57
55
|
|
|
58
56
|
if (false) {
|
|
59
57
|
///
|
|
@@ -103,27 +101,27 @@ function verifyDerivedStatementAsDefinedAssertion(statementNode, assignments, de
|
|
|
103
101
|
}
|
|
104
102
|
|
|
105
103
|
if (derivedStatementVerifiedAsDefeindAssertion) {
|
|
106
|
-
localContext.debug(`...verified the
|
|
104
|
+
localContext.debug(`...verified the '${definedAssertionString}' derived statement as a defined assertion.`, definedAssertionNode);
|
|
107
105
|
}
|
|
108
106
|
}
|
|
109
107
|
|
|
110
108
|
return derivedStatementVerifiedAsDefeindAssertion;
|
|
111
109
|
}
|
|
112
110
|
|
|
113
|
-
function verifyStatedStatementAsDefinedAssertion(
|
|
111
|
+
function verifyStatedStatementAsDefinedAssertion(definedAssertionNode, assignments, derived, localContext) {
|
|
114
112
|
let statedStatementVerifiedAsDefinedAssertion = false;
|
|
115
113
|
|
|
116
114
|
if (!derived) {
|
|
117
|
-
const
|
|
115
|
+
const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
|
|
118
116
|
|
|
119
|
-
localContext.trace(`Verifying the
|
|
117
|
+
localContext.trace(`Verifying the '${definedAssertionString}' stated statement as a defined assertion...`, definedAssertionNode);
|
|
120
118
|
|
|
121
119
|
const intrinsicLevel = localContext.isIntrinsicLevel();
|
|
122
120
|
|
|
123
121
|
if (intrinsicLevel) {
|
|
124
|
-
localContext.debug(`The
|
|
122
|
+
localContext.debug(`The '${definedAssertionString}' stated statement as a defined assertion cannot be verified at intrinsic level.`, definedAssertionNode);
|
|
125
123
|
} else {
|
|
126
|
-
const nonTerminalNode =
|
|
124
|
+
const nonTerminalNode = definedAssertionNode, ///
|
|
127
125
|
nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
128
126
|
const verifiedAhead = true;
|
|
129
127
|
|
|
@@ -134,23 +132,9 @@ function verifyStatedStatementAsDefinedAssertion(statementNode, assignments, der
|
|
|
134
132
|
}
|
|
135
133
|
|
|
136
134
|
if (statedStatementVerifiedAsDefinedAssertion) {
|
|
137
|
-
localContext.debug(`...verified the
|
|
135
|
+
localContext.debug(`...verified the '${definedAssertionString}' stated statement as a defined assertion.`, definedAssertionNode);
|
|
138
136
|
}
|
|
139
137
|
}
|
|
140
138
|
|
|
141
139
|
return statedStatementVerifiedAsDefinedAssertion;
|
|
142
140
|
}
|
|
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
|
-
}
|