occam-verify-cli 0.0.892 → 0.0.893
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/axiomLemmaTheoremConjecture.js +3 -3
- package/lib/conclusion.js +4 -3
- package/lib/metaConsequent.js +4 -3
- package/lib/metaLemmaMetatheorem.js +13 -13
- package/lib/metaSupposition.js +6 -5
- package/lib/premise.js +9 -8
- package/lib/rule.js +16 -15
- package/lib/verifier/nodes/metaLevel.js +7 -7
- package/lib/verify/derivation.js +10 -90
- package/lib/verify/metaDerivation.js +7 -87
- package/lib/verify/metaProofStep.js +76 -0
- package/lib/verify/metaSubDerivation.js +25 -0
- package/lib/verify/metaSubproof.js +34 -0
- package/lib/verify/metaproof.js +7 -8
- package/lib/verify/metastatement/qualified.js +53 -34
- package/lib/verify/metastatement/unqualified.js +16 -19
- package/lib/verify/proofStep.js +70 -0
- package/lib/verify/ruleDerivation.js +7 -85
- package/lib/verify/ruleProofStep.js +76 -0
- package/lib/verify/ruleSubDerivation.js +25 -0
- package/lib/verify/ruleSubproof.js +34 -0
- package/lib/verify/statement/qualified.js +47 -89
- package/lib/verify/statement/unqualified.js +16 -19
- package/lib/verify/subDerivation.js +25 -0
- package/lib/verify/subproof.js +34 -0
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +4 -2
- package/src/conclusion.js +6 -4
- package/src/metaConsequent.js +6 -4
- package/src/metaLemmaMetatheorem.js +12 -12
- package/src/metaSupposition.js +11 -8
- package/src/premise.js +15 -14
- package/src/rule.js +16 -14
- package/src/verifier/nodes/metaLevel.js +6 -6
- package/src/verify/derivation.js +10 -138
- package/src/verify/metaDerivation.js +7 -135
- package/src/verify/metaProofStep.js +98 -0
- package/src/verify/metaSubDerivation.js +22 -0
- package/src/verify/metaSubproof.js +32 -0
- package/src/verify/metaproof.js +11 -11
- package/src/verify/metastatement/qualified.js +67 -31
- package/src/verify/metastatement/unqualified.js +16 -19
- package/src/verify/proofStep.js +88 -0
- package/src/verify/ruleDerivation.js +7 -133
- package/src/verify/ruleProofStep.js +99 -0
- package/src/verify/ruleSubDerivation.js +22 -0
- package/src/verify/ruleSubproof.js +32 -0
- package/src/verify/statement/qualified.js +55 -127
- package/src/verify/statement/unqualified.js +16 -19
- package/src/verify/subDerivation.js +22 -0
- package/src/verify/subproof.js +32 -0
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import verifyTypeAssertion from "../typeAssertion";
|
|
3
|
+
import verifyStatement from "../../verify/statement";
|
|
5
4
|
|
|
6
5
|
import { nodeQuery } from "../../utilities/query";
|
|
7
6
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
typeAssertionNodeQuery = nodeQuery("/qualifiedStatement/statement/typeAssertion!"),
|
|
11
|
-
referenceMetavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
7
|
+
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
8
|
+
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
12
9
|
|
|
13
|
-
export default function verifyQualifiedStatement(qualifiedStatementNode, assignments,
|
|
14
|
-
let qualifiedStatementVerified
|
|
10
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext) {
|
|
11
|
+
let qualifiedStatementVerified;
|
|
15
12
|
|
|
16
|
-
const
|
|
13
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
15
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
const derived = false,
|
|
18
|
+
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
19
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
20
|
+
const verifiedAhead = true;
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
return verifiedAhead;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (statementVerified) {
|
|
26
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
24
27
|
verifyQualifiedStatementFunctions = [
|
|
25
28
|
verifyQualifiedStatementAAgainstRule,
|
|
26
29
|
verifyQualifiedStatementAAgainstAxiom,
|
|
@@ -30,212 +33,137 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
30
33
|
];
|
|
31
34
|
|
|
32
35
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
33
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode,
|
|
36
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, localContext);
|
|
34
37
|
|
|
35
38
|
if (qualifiedStatementVerified) {
|
|
36
39
|
return true;
|
|
37
40
|
}
|
|
38
41
|
});
|
|
42
|
+
}
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const verifyQualifiedStatementFunctions = [
|
|
44
|
-
verifyQualifiedStatementAsEquality,
|
|
45
|
-
verifyQualifiedStatementAsTypeAssertion
|
|
46
|
-
];
|
|
47
|
-
|
|
48
|
-
qualifiedStatementVerified = verifyQualifiedStatementFunctions.every((verifyQualifiedStatementFunction) => { ///
|
|
49
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived, localContext, () => {
|
|
50
|
-
const verifiedAhead = true;
|
|
51
|
-
|
|
52
|
-
return verifiedAhead;
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
if (qualifiedStatementVerified) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (qualifiedStatementVerified) {
|
|
62
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
|
|
63
|
-
}
|
|
44
|
+
if (qualifiedStatementVerified) {
|
|
45
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
|
|
64
46
|
}
|
|
65
47
|
|
|
66
48
|
return qualifiedStatementVerified;
|
|
67
49
|
}
|
|
68
50
|
|
|
69
|
-
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode,
|
|
51
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
|
|
70
52
|
let qualifiedStatementVerifiedAgainstRule = false;
|
|
71
53
|
|
|
72
|
-
const
|
|
73
|
-
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
54
|
+
const rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
74
55
|
|
|
75
56
|
if (rule !== null) {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
statementLocalContext = localContext, ///
|
|
57
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
58
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
79
59
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
80
60
|
|
|
81
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
61
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule...`, qualifiedStatementNode);
|
|
82
62
|
|
|
83
|
-
const ruleMatchesStatement = rule.matchStatement(statementNode,
|
|
63
|
+
const ruleMatchesStatement = rule.matchStatement(statementNode, localContext);
|
|
84
64
|
|
|
85
65
|
qualifiedStatementVerifiedAgainstRule = ruleMatchesStatement; ///
|
|
86
66
|
|
|
87
67
|
if (qualifiedStatementVerifiedAgainstRule) {
|
|
88
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
68
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule.`, qualifiedStatementNode);
|
|
89
69
|
}
|
|
90
70
|
}
|
|
91
71
|
|
|
92
72
|
return qualifiedStatementVerifiedAgainstRule;
|
|
93
73
|
}
|
|
94
74
|
|
|
95
|
-
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode,
|
|
75
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
|
|
96
76
|
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
97
77
|
|
|
98
|
-
const
|
|
99
|
-
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
78
|
+
const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
100
79
|
|
|
101
80
|
if (axiom !== null) {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
statementLocalContext = localContext, ///
|
|
81
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
82
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
105
83
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
106
84
|
|
|
107
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
85
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom...`, qualifiedStatementNode);
|
|
108
86
|
|
|
109
|
-
const axiomMatchesStatement = axiom.matchStatement(statementNode,
|
|
87
|
+
const axiomMatchesStatement = axiom.matchStatement(statementNode, localContext);
|
|
110
88
|
|
|
111
89
|
qualifiedStatementVerifiedAgainstAxiom = axiomMatchesStatement; ///
|
|
112
90
|
|
|
113
91
|
if (qualifiedStatementVerifiedAgainstAxiom) {
|
|
114
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
92
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom.`, qualifiedStatementNode);
|
|
115
93
|
}
|
|
116
94
|
}
|
|
117
95
|
|
|
118
96
|
return qualifiedStatementVerifiedAgainstAxiom;
|
|
119
97
|
}
|
|
120
98
|
|
|
121
|
-
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode,
|
|
99
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
|
|
122
100
|
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
123
101
|
|
|
124
|
-
const
|
|
125
|
-
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
102
|
+
const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
126
103
|
|
|
127
104
|
if (lemma !== null) {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
statementLocalContext = localContext, ///
|
|
105
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
106
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
131
107
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
132
108
|
|
|
133
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
109
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma...`, qualifiedStatementNode);
|
|
134
110
|
|
|
135
|
-
const lemmaMatchesStatement = lemma.matchStatement(statementNode,
|
|
111
|
+
const lemmaMatchesStatement = lemma.matchStatement(statementNode, localContext);
|
|
136
112
|
|
|
137
113
|
qualifiedStatementVerifiedAgainstLemma = lemmaMatchesStatement; ///
|
|
138
114
|
|
|
139
115
|
if (qualifiedStatementVerifiedAgainstLemma) {
|
|
140
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
116
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma.`, qualifiedStatementNode);
|
|
141
117
|
}
|
|
142
118
|
}
|
|
143
119
|
|
|
144
120
|
return qualifiedStatementVerifiedAgainstLemma;
|
|
145
121
|
}
|
|
146
122
|
|
|
147
|
-
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode,
|
|
123
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
|
|
148
124
|
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
149
125
|
|
|
150
|
-
const
|
|
151
|
-
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
126
|
+
const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
152
127
|
|
|
153
128
|
if (theorem !== null) {
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
statementLocalContext = localContext, ///
|
|
129
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
130
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
157
131
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
158
132
|
|
|
159
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
133
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem...`, qualifiedStatementNode);
|
|
160
134
|
|
|
161
|
-
const theoremMatchesStatement = theorem.matchStatement(statementNode,
|
|
135
|
+
const theoremMatchesStatement = theorem.matchStatement(statementNode, localContext);
|
|
162
136
|
|
|
163
137
|
qualifiedStatementVerifiedAgainstTheorem = theoremMatchesStatement; ///
|
|
164
138
|
|
|
165
139
|
if (qualifiedStatementVerifiedAgainstTheorem) {
|
|
166
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
140
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem.`, qualifiedStatementNode);
|
|
167
141
|
}
|
|
168
142
|
}
|
|
169
143
|
|
|
170
144
|
return qualifiedStatementVerifiedAgainstTheorem;
|
|
171
145
|
}
|
|
172
146
|
|
|
173
|
-
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode,
|
|
147
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
|
|
174
148
|
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
175
149
|
|
|
176
|
-
const
|
|
177
|
-
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
150
|
+
const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
178
151
|
|
|
179
152
|
if (conjecture !== null) {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
statementLocalContext = localContext, ///
|
|
153
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
154
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
183
155
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
184
156
|
|
|
185
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
157
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture...`, qualifiedStatementNode);
|
|
186
158
|
|
|
187
|
-
const conjectureMatchesStatement = conjecture.matchStatement(statementNode,
|
|
159
|
+
const conjectureMatchesStatement = conjecture.matchStatement(statementNode, localContext);
|
|
188
160
|
|
|
189
161
|
qualifiedStatementVerifiedAgainstConjecture = conjectureMatchesStatement; ///
|
|
190
162
|
|
|
191
163
|
if (qualifiedStatementVerifiedAgainstConjecture) {
|
|
192
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
164
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture.`, qualifiedStatementNode);
|
|
193
165
|
}
|
|
194
166
|
}
|
|
195
167
|
|
|
196
168
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
197
169
|
}
|
|
198
|
-
|
|
199
|
-
function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
|
|
200
|
-
let statementVerifiedAsEquality = true; ///
|
|
201
|
-
|
|
202
|
-
const equalityNode = equalityNodeQuery(qualifiedStatementNode);
|
|
203
|
-
|
|
204
|
-
if (equalityNode !== null) {
|
|
205
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
206
|
-
|
|
207
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as an equality...`, qualifiedStatementNode);
|
|
208
|
-
|
|
209
|
-
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead);
|
|
210
|
-
|
|
211
|
-
statementVerifiedAsEquality = equalityVerified; ///
|
|
212
|
-
|
|
213
|
-
if (statementVerifiedAsEquality) {
|
|
214
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as an equality.`, qualifiedStatementNode);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return statementVerifiedAsEquality;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
|
|
222
|
-
let statementVerifiedAsTypeAssertion = true; ///
|
|
223
|
-
|
|
224
|
-
const typeAssertionNode = typeAssertionNodeQuery(qualifiedStatementNode);
|
|
225
|
-
|
|
226
|
-
if (typeAssertionNode !== null) {
|
|
227
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
228
|
-
|
|
229
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as a type assertion...`, qualifiedStatementNode);
|
|
230
|
-
|
|
231
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead);
|
|
232
|
-
|
|
233
|
-
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
234
|
-
|
|
235
|
-
if (statementVerifiedAsTypeAssertion) {
|
|
236
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as a type assertion.`, qualifiedStatementNode);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
return statementVerifiedAsTypeAssertion;
|
|
241
|
-
}
|
|
@@ -9,32 +9,29 @@ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
|
9
9
|
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
10
10
|
let unqualifiedStatementVerified = false;
|
|
11
11
|
|
|
12
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode)
|
|
12
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
13
|
+
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
15
|
+
localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
if (derived) {
|
|
18
|
+
const statementMatches = localContext.matchStatement(statementNode);
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
unqualifiedStatementVerified = statementMatches; ///
|
|
23
|
-
}
|
|
20
|
+
unqualifiedStatementVerified = statementMatches; ///
|
|
21
|
+
}
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
if (!unqualifiedStatementVerified) {
|
|
24
|
+
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
25
|
+
const verifiedAhead = true;
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
return verifiedAhead;
|
|
28
|
+
});
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
unqualifiedStatementVerified = statementVerified; ///
|
|
31
|
+
}
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
33
|
+
if (unqualifiedStatementVerified) {
|
|
34
|
+
localContext.debug(`...verified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
|
|
38
35
|
}
|
|
39
36
|
|
|
40
37
|
return unqualifiedStatementVerified;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nodesQuery } from "../utilities/query";
|
|
4
|
+
|
|
5
|
+
const proofStepNodesQuery = nodesQuery("/subDerivation/proofStep|lastProofStep");
|
|
6
|
+
|
|
7
|
+
export default function verifySubDerivation(subDerivationNode, localMetaContext) {
|
|
8
|
+
let subDerivationVerified;
|
|
9
|
+
|
|
10
|
+
const proofStepNodes = proofStepNodesQuery(subDerivationNode);
|
|
11
|
+
|
|
12
|
+
subDerivationVerified = proofStepNodes.every((proofStepNode) => {
|
|
13
|
+
const { verifyProofStep } = verifySubDerivation,
|
|
14
|
+
proofStepVerified = verifyProofStep(proofStepNode, localMetaContext);
|
|
15
|
+
|
|
16
|
+
if (proofStepVerified) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return subDerivationVerified;
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import LocalContext from "../context/local";
|
|
4
|
+
import verifySuppositions from "../verify/suppositions";
|
|
5
|
+
import verifySubDerivation from "../verify/subDerivation";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
8
|
+
|
|
9
|
+
const suppositionNodesQuery = nodesQuery("/subproof/supposition"),
|
|
10
|
+
subDerivationNodeQuery = nodeQuery("/subproof/subDerivation");
|
|
11
|
+
|
|
12
|
+
export default function verifySubproof(subproofNode, localContext) {
|
|
13
|
+
let subproofVerified = false;
|
|
14
|
+
|
|
15
|
+
localContext = LocalContext.fromLocalContext(localContext); ///
|
|
16
|
+
|
|
17
|
+
const suppositions = [],
|
|
18
|
+
suppositionNodes = suppositionNodesQuery(subproofNode),
|
|
19
|
+
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
|
|
20
|
+
|
|
21
|
+
if (suppositionsVerified) {
|
|
22
|
+
const subDerivationNode = subDerivationNodeQuery(subproofNode),
|
|
23
|
+
subDerivationVerified = verifySubDerivation(subDerivationNode, localContext);
|
|
24
|
+
|
|
25
|
+
if (subDerivationVerified) {
|
|
26
|
+
subproofVerified = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return subproofVerified;
|
|
31
|
+
}
|
|
32
|
+
|