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.
Files changed (51) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +3 -3
  2. package/lib/conclusion.js +4 -3
  3. package/lib/metaConsequent.js +4 -3
  4. package/lib/metaLemmaMetatheorem.js +13 -13
  5. package/lib/metaSupposition.js +6 -5
  6. package/lib/premise.js +9 -8
  7. package/lib/rule.js +16 -15
  8. package/lib/verifier/nodes/metaLevel.js +7 -7
  9. package/lib/verify/derivation.js +10 -90
  10. package/lib/verify/metaDerivation.js +7 -87
  11. package/lib/verify/metaProofStep.js +76 -0
  12. package/lib/verify/metaSubDerivation.js +25 -0
  13. package/lib/verify/metaSubproof.js +34 -0
  14. package/lib/verify/metaproof.js +7 -8
  15. package/lib/verify/metastatement/qualified.js +53 -34
  16. package/lib/verify/metastatement/unqualified.js +16 -19
  17. package/lib/verify/proofStep.js +70 -0
  18. package/lib/verify/ruleDerivation.js +7 -85
  19. package/lib/verify/ruleProofStep.js +76 -0
  20. package/lib/verify/ruleSubDerivation.js +25 -0
  21. package/lib/verify/ruleSubproof.js +34 -0
  22. package/lib/verify/statement/qualified.js +47 -89
  23. package/lib/verify/statement/unqualified.js +16 -19
  24. package/lib/verify/subDerivation.js +25 -0
  25. package/lib/verify/subproof.js +34 -0
  26. package/package.json +4 -4
  27. package/src/axiomLemmaTheoremConjecture.js +4 -2
  28. package/src/conclusion.js +6 -4
  29. package/src/metaConsequent.js +6 -4
  30. package/src/metaLemmaMetatheorem.js +12 -12
  31. package/src/metaSupposition.js +11 -8
  32. package/src/premise.js +15 -14
  33. package/src/rule.js +16 -14
  34. package/src/verifier/nodes/metaLevel.js +6 -6
  35. package/src/verify/derivation.js +10 -138
  36. package/src/verify/metaDerivation.js +7 -135
  37. package/src/verify/metaProofStep.js +98 -0
  38. package/src/verify/metaSubDerivation.js +22 -0
  39. package/src/verify/metaSubproof.js +32 -0
  40. package/src/verify/metaproof.js +11 -11
  41. package/src/verify/metastatement/qualified.js +67 -31
  42. package/src/verify/metastatement/unqualified.js +16 -19
  43. package/src/verify/proofStep.js +88 -0
  44. package/src/verify/ruleDerivation.js +7 -133
  45. package/src/verify/ruleProofStep.js +99 -0
  46. package/src/verify/ruleSubDerivation.js +22 -0
  47. package/src/verify/ruleSubproof.js +32 -0
  48. package/src/verify/statement/qualified.js +55 -127
  49. package/src/verify/statement/unqualified.js +16 -19
  50. package/src/verify/subDerivation.js +22 -0
  51. package/src/verify/subproof.js +32 -0
@@ -1,26 +1,29 @@
1
1
  "use strict";
2
2
 
3
- import verifyEquality from "../equality";
4
- import verifyTypeAssertion from "../typeAssertion";
3
+ import verifyStatement from "../../verify/statement";
5
4
 
6
5
  import { nodeQuery } from "../../utilities/query";
7
6
 
8
- const equalityNodeQuery = nodeQuery("/qualifiedStatement/statement/equality!"),
9
- statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
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, derived, localContext) {
14
- let qualifiedStatementVerified = false;
10
+ export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext) {
11
+ let qualifiedStatementVerified;
15
12
 
16
- const statementNode = statementNodeQuery(qualifiedStatementNode);
13
+ const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
17
14
 
18
- if (statementNode !== null) {
19
- const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
15
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
20
16
 
21
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
17
+ const derived = false,
18
+ statementNode = statementNodeQuery(qualifiedStatementNode),
19
+ statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
20
+ const verifiedAhead = true;
22
21
 
23
- const referenceMetavariableNode = referenceMetavariableNodeQuery(qualifiedStatementNode),
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, referenceMetavariableNode, localContext);
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
- if (qualifiedStatementVerified) {
41
- derived = false; ///
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, referenceMetavariableNode, localContext) {
51
+ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
70
52
  let qualifiedStatementVerifiedAgainstRule = false;
71
53
 
72
- const metavariableNode = referenceMetavariableNode, ///
73
- rule = localContext.findRuleByMetavariableNode(metavariableNode);
54
+ const rule = localContext.findRuleByMetavariableNode(metavariableNode);
74
55
 
75
56
  if (rule !== null) {
76
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
77
- statementNode = statementNodeQuery(qualifiedStatementNode),
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 '${referenceMetavariableString}' rule...`, statementNode);
61
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule...`, qualifiedStatementNode);
82
62
 
83
- const ruleMatchesStatement = rule.matchStatement(statementNode, statementLocalContext);
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 '${referenceMetavariableString}' rule.`, statementNode);
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, referenceMetavariableNode, localContext) {
75
+ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
96
76
  let qualifiedStatementVerifiedAgainstAxiom = false;
97
77
 
98
- const metavariableNode = referenceMetavariableNode, ///
99
- axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
78
+ const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
100
79
 
101
80
  if (axiom !== null) {
102
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
103
- statementNode = statementNodeQuery(qualifiedStatementNode),
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 '${referenceMetavariableString}' axiom...`, statementNode);
85
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom...`, qualifiedStatementNode);
108
86
 
109
- const axiomMatchesStatement = axiom.matchStatement(statementNode, statementLocalContext);
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 '${referenceMetavariableString}' axiom.`, statementNode);
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, referenceMetavariableNode, localContext) {
99
+ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
122
100
  let qualifiedStatementVerifiedAgainstLemma = false;
123
101
 
124
- const metavariableNode = referenceMetavariableNode, ///
125
- lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
102
+ const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
126
103
 
127
104
  if (lemma !== null) {
128
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
129
- statementNode = statementNodeQuery(qualifiedStatementNode),
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 '${referenceMetavariableString}' lemma...`, statementNode);
109
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma...`, qualifiedStatementNode);
134
110
 
135
- const lemmaMatchesStatement = lemma.matchStatement(statementNode, statementLocalContext);
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 '${referenceMetavariableString}' lemma.`, statementNode);
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, referenceMetavariableNode, localContext) {
123
+ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
148
124
  let qualifiedStatementVerifiedAgainstTheorem = false;
149
125
 
150
- const metavariableNode = referenceMetavariableNode, ///
151
- theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
126
+ const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
152
127
 
153
128
  if (theorem !== null) {
154
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
155
- statementNode = statementNodeQuery(qualifiedStatementNode),
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 '${referenceMetavariableString}' theorem...`, statementNode);
133
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem...`, qualifiedStatementNode);
160
134
 
161
- const theoremMatchesStatement = theorem.matchStatement(statementNode, statementLocalContext);
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 '${referenceMetavariableString}' theorem.`, statementNode);
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, referenceMetavariableNode, localContext) {
147
+ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
174
148
  let qualifiedStatementVerifiedAgainstConjecture = false;
175
149
 
176
- const metavariableNode = referenceMetavariableNode, ///
177
- conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
150
+ const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
178
151
 
179
152
  if (conjecture !== null) {
180
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
181
- statementNode = statementNodeQuery(qualifiedStatementNode),
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 '${referenceMetavariableString}' conjecture...`, statementNode);
157
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture...`, qualifiedStatementNode);
186
158
 
187
- const conjectureMatchesStatement = conjecture.matchStatement(statementNode, statementLocalContext);
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 '${referenceMetavariableString}' conjecture.`, statementNode);
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
- if (statementNode !== null) {
15
- const statementString = localContext.nodeAsString(statementNode);
15
+ localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
16
16
 
17
- localContext.trace(`Verifying the '${statementString}' unqualified statement...`, unqualifiedStatementNode);
17
+ if (derived) {
18
+ const statementMatches = localContext.matchStatement(statementNode);
18
19
 
19
- if (derived) {
20
- const statementMatches = localContext.matchStatement(statementNode);
21
-
22
- unqualifiedStatementVerified = statementMatches; ///
23
- }
20
+ unqualifiedStatementVerified = statementMatches; ///
21
+ }
24
22
 
25
- if (!unqualifiedStatementVerified) {
26
- const statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
27
- const verifiedAhead = true;
23
+ if (!unqualifiedStatementVerified) {
24
+ const statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
25
+ const verifiedAhead = true;
28
26
 
29
- return verifiedAhead;
30
- });
27
+ return verifiedAhead;
28
+ });
31
29
 
32
- unqualifiedStatementVerified = statementVerified; ///
33
- }
30
+ unqualifiedStatementVerified = statementVerified; ///
31
+ }
34
32
 
35
- if (unqualifiedStatementVerified) {
36
- localContext.debug(`...verified the '${statementString}' unqualified statement.`, unqualifiedStatementNode);
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
+