occam-verify-cli 0.0.892 → 0.0.894

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 (57) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +5 -5
  2. package/lib/conclusion.js +4 -3
  3. package/lib/metaConsequent.js +4 -3
  4. package/lib/metaLemmaMetatheorem.js +16 -16
  5. package/lib/metaSupposition.js +19 -20
  6. package/lib/premise.js +63 -20
  7. package/lib/rule.js +43 -31
  8. package/lib/step/metaproof.js +19 -5
  9. package/lib/utilities/array.js +5 -2
  10. package/lib/verifier/nodes/metaLevel.js +7 -7
  11. package/lib/verify/derivation.js +10 -90
  12. package/lib/verify/metaDerivation.js +7 -87
  13. package/lib/verify/metaProofStep.js +76 -0
  14. package/lib/verify/metaSubDerivation.js +25 -0
  15. package/lib/verify/metaSubproof.js +34 -0
  16. package/lib/verify/metaproof.js +7 -8
  17. package/lib/verify/metastatement/qualified.js +71 -35
  18. package/lib/verify/metastatement/unqualified.js +16 -19
  19. package/lib/verify/proofStep.js +70 -0
  20. package/lib/verify/ruleDerivation.js +7 -85
  21. package/lib/verify/ruleProofStep.js +88 -0
  22. package/lib/verify/ruleSubDerivation.js +25 -0
  23. package/lib/verify/ruleSubproof.js +34 -0
  24. package/lib/verify/statement/qualified.js +74 -100
  25. package/lib/verify/statement/unqualified.js +16 -19
  26. package/lib/verify/statement.js +7 -1
  27. package/lib/verify/subDerivation.js +25 -0
  28. package/lib/verify/subproof.js +34 -0
  29. package/package.json +4 -4
  30. package/src/axiomLemmaTheoremConjecture.js +6 -5
  31. package/src/conclusion.js +6 -4
  32. package/src/metaConsequent.js +6 -4
  33. package/src/metaLemmaMetatheorem.js +16 -16
  34. package/src/metaSupposition.js +32 -33
  35. package/src/premise.js +106 -35
  36. package/src/rule.js +48 -30
  37. package/src/step/metaproof.js +24 -7
  38. package/src/utilities/array.js +1 -1
  39. package/src/verifier/nodes/metaLevel.js +6 -6
  40. package/src/verify/derivation.js +10 -138
  41. package/src/verify/metaDerivation.js +7 -135
  42. package/src/verify/metaProofStep.js +98 -0
  43. package/src/verify/metaSubDerivation.js +22 -0
  44. package/src/verify/metaSubproof.js +32 -0
  45. package/src/verify/metaproof.js +11 -11
  46. package/src/verify/metastatement/qualified.js +98 -32
  47. package/src/verify/metastatement/unqualified.js +16 -19
  48. package/src/verify/proofStep.js +88 -0
  49. package/src/verify/ruleDerivation.js +7 -133
  50. package/src/verify/ruleProofStep.js +121 -0
  51. package/src/verify/ruleSubDerivation.js +22 -0
  52. package/src/verify/ruleSubproof.js +32 -0
  53. package/src/verify/statement/qualified.js +83 -125
  54. package/src/verify/statement/unqualified.js +16 -19
  55. package/src/verify/statement.js +2 -2
  56. package/src/verify/subDerivation.js +22 -0
  57. package/src/verify/subproof.js +32 -0
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ import LocalContext from "../context/local";
4
+ import MetaproofStep from "../step/metaproof";
5
+ import verifyRuleSubproof from "../verify/ruleSubproof";
6
+ import verifyRuleSubDerivation from "../verify/ruleSubDerivation";
7
+ import verifyQualifiedStatement from "../verify/statement/qualified";
8
+ import verifyUnqualifiedStatement from "../verify/statement/unqualified";
9
+ import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
10
+ import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
11
+
12
+ import { nodeQuery } from "../utilities/query";
13
+ import { assignAssignment } from "../utilities/assignments";
14
+
15
+ const statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/statement!"),
16
+ ruleSubproofNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/ruleSubproof!"),
17
+ metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMetastatement/metastatement!"),
18
+ qualifiedStatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/qualifiedStatement!"),
19
+ unqualifiedStatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/unqualifiedStatement!"),
20
+ qualifiedMetastatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/qualifiedMetastatement!"),
21
+ unqualifiedMetastatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/unqualifiedMetastatement!");
22
+
23
+ export default function verifyRuleProofStep(ruleProofStepNode, localMetaContext) {
24
+ let ruleProofStepVerified = false;
25
+
26
+ const ruleSubproofNode = ruleSubproofNodeQuery(ruleProofStepNode),
27
+ qualifiedStatementNode = qualifiedStatementNodeQuery(ruleProofStepNode),
28
+ unqualifiedStatementNode = unqualifiedStatementNodeQuery(ruleProofStepNode),
29
+ qualifiedMetastatementNode = qualifiedMetastatementNodeQuery(ruleProofStepNode),
30
+ unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(ruleProofStepNode);
31
+
32
+ if (false) {
33
+ ///
34
+ } else if (ruleSubproofNode !== null) {
35
+ let ruleSubproofVerified;
36
+
37
+ ruleSubproofVerified = verifyRuleSubproof(ruleSubproofNode, localMetaContext);
38
+
39
+ if (ruleSubproofVerified) {
40
+ const metaproofStep = MetaproofStep.fromRuleSubproofNode(ruleSubproofNode);
41
+
42
+ localMetaContext.addMetaproofStep(metaproofStep);
43
+
44
+ ruleProofStepVerified = true;
45
+ }
46
+ } else if (qualifiedStatementNode !== null) {
47
+ let qualifiedStatementVerified;
48
+
49
+ const assignments = [],
50
+ localContext = LocalContext.fromLocalMetaContext(localMetaContext);
51
+
52
+ qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext);
53
+
54
+ if (qualifiedStatementVerified) {
55
+ const assignmentAssigned = assignAssignment(assignments, localContext);
56
+
57
+ qualifiedStatementVerified = assignmentAssigned; ///
58
+ }
59
+
60
+ if (qualifiedStatementVerified) {
61
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
62
+ metaproofStep = MetaproofStep.fromStatementNode(statementNode);
63
+
64
+ localMetaContext.addMetaproofStep(metaproofStep);
65
+
66
+ ruleProofStepVerified = true;
67
+ }
68
+ } else if (unqualifiedStatementNode !== null) {
69
+ debugger
70
+ } else if (qualifiedMetastatementNode !== null) {
71
+ let qualifiedMetastatementVerified;
72
+
73
+ const assignments = [],
74
+ substitutions = null;
75
+
76
+ qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, substitutions, assignments, localMetaContext);
77
+
78
+ if (qualifiedMetastatementVerified) {
79
+ const assignmentAssigned = assignAssignment(assignments, localMetaContext);
80
+
81
+ qualifiedMetastatementVerified = assignmentAssigned; ///
82
+ }
83
+
84
+ if (qualifiedMetastatementVerified) {
85
+ const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
86
+ metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
87
+
88
+ localMetaContext.addMetaproofStep(metaproofStep);
89
+
90
+ ruleProofStepVerified = qualifiedMetastatementVerified; ///
91
+ }
92
+ } else if (unqualifiedMetastatementNode !== null) {
93
+ let unqualifiedMetastatementVerified;
94
+
95
+ const derived = true,
96
+ assignments = [];
97
+
98
+ unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext);
99
+
100
+ if (unqualifiedMetastatementVerified) {
101
+ const assignmentAssigned = assignAssignment(assignments, localMetaContext);
102
+
103
+ unqualifiedMetastatementVerified = assignmentAssigned; ///
104
+ }
105
+
106
+ if (unqualifiedMetastatementVerified) {
107
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
108
+ metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
109
+
110
+ localMetaContext.addMetaproofStep(metaproofStep);
111
+
112
+ ruleProofStepVerified = true;
113
+ }
114
+ }
115
+
116
+ return ruleProofStepVerified;
117
+ }
118
+
119
+ Object.assign(verifyRuleSubDerivation, {
120
+ verifyRuleProofStep
121
+ });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ import { nodesQuery } from "../utilities/query";
4
+
5
+ const ruleProofStepNodesQuery = nodesQuery("/ruleSubDerivation/ruleProofStep|lastRuleProofStep");
6
+
7
+ export default function verifyRuleSubDerivation(ruleSubDerivationNode, localMetaContext) {
8
+ let ruleSubDerivationVerified;
9
+
10
+ const ruleProofStepNodes = ruleProofStepNodesQuery(ruleSubDerivationNode);
11
+
12
+ ruleSubDerivationVerified = ruleProofStepNodes.every((ruleProofStepNode) => {
13
+ const { verifyRuleProofStep } = verifyRuleSubDerivation,
14
+ ruleProofStepVerified = verifyRuleProofStep(ruleProofStepNode, localMetaContext);
15
+
16
+ if (ruleProofStepVerified) {
17
+ return true;
18
+ }
19
+ });
20
+
21
+ return ruleSubDerivationVerified;
22
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ import verifyPremises from "../verify/premises";
4
+ import LocalMetaContext from "../context/localMeta";
5
+ import verifyRuleSubDerivation from "../verify/ruleSubDerivation";
6
+
7
+ import { nodeQuery, nodesQuery } from "../utilities/query";
8
+
9
+ const premiseNodesQuery = nodesQuery("/ruleSubproof/premise"),
10
+ ruleSubDerivationNodeQuery = nodeQuery("/ruleSubproof/ruleSubDerivation");
11
+
12
+ export default function verifyRuleSubproof(ruleSubproofNode, localMetaContext) {
13
+ let ruleSubproofVerified = false;
14
+
15
+ localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
16
+
17
+ const premises = [],
18
+ premiseNodes = premiseNodesQuery(ruleSubproofNode),
19
+ premisesVerified = verifyPremises(premiseNodes, premises, localMetaContext);
20
+
21
+ if (premisesVerified) {
22
+ const ruleSubDerivationNode = ruleSubDerivationNodeQuery(ruleSubproofNode),
23
+ ruleSubDerivationVerified = verifyRuleSubDerivation(ruleSubDerivationNode, localMetaContext);
24
+
25
+ if (ruleSubDerivationVerified) {
26
+ ruleSubproofVerified = true;
27
+ }
28
+ }
29
+
30
+ return ruleSubproofVerified;
31
+ }
32
+
@@ -1,241 +1,199 @@
1
1
  "use strict";
2
2
 
3
- import verifyEquality from "../equality";
4
- import verifyTypeAssertion from "../typeAssertion";
5
-
6
3
  import { nodeQuery } from "../../utilities/query";
4
+ import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
7
5
 
8
- const equalityNodeQuery = nodeQuery("/qualifiedStatement/statement/equality!"),
9
- statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
10
- typeAssertionNodeQuery = nodeQuery("/qualifiedStatement/statement/typeAssertion!"),
11
- referenceMetavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
12
-
13
- export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, derived, localContext) {
14
- let qualifiedStatementVerified = false;
6
+ const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
7
+ metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
15
8
 
16
- const statementNode = statementNodeQuery(qualifiedStatementNode);
9
+ export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext) {
10
+ let qualifiedStatementVerified;
17
11
 
18
- if (statementNode !== null) {
19
- const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
12
+ const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
20
13
 
21
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
14
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
22
15
 
23
- const referenceMetavariableNode = referenceMetavariableNodeQuery(qualifiedStatementNode),
24
- verifyQualifiedStatementFunctions = [
25
- verifyQualifiedStatementAAgainstRule,
26
- verifyQualifiedStatementAAgainstAxiom,
27
- verifyQualifiedStatementAAgainstLemma,
28
- verifyQualifiedStatementAAgainstTheorem,
29
- verifyQualifiedStatementAAgainstConjecture
30
- ];
16
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
17
+ verifyQualifiedStatementFunctions = [
18
+ verifyQualifiedStatementAAgainstRule,
19
+ verifyQualifiedStatementAAgainstAxiom,
20
+ verifyQualifiedStatementAAgainstLemma,
21
+ verifyQualifiedStatementAAgainstTheorem,
22
+ verifyQualifiedStatementAAgainstConjecture
23
+ ];
31
24
 
32
- qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
33
- const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, referenceMetavariableNode, localContext);
34
-
35
- if (qualifiedStatementVerified) {
36
- return true;
37
- }
38
- });
25
+ qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
26
+ const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, localContext);
39
27
 
40
28
  if (qualifiedStatementVerified) {
41
- derived = false; ///
42
-
43
- const verifyQualifiedStatementFunctions = [
44
- verifyQualifiedStatementAsEquality,
45
- verifyQualifiedStatementAsTypeAssertion
46
- ];
29
+ return true;
30
+ }
31
+ });
47
32
 
48
- qualifiedStatementVerified = verifyQualifiedStatementFunctions.every((verifyQualifiedStatementFunction) => { ///
49
- const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived, localContext, () => {
50
- const verifiedAhead = true;
33
+ if (qualifiedStatementVerified) {
34
+ const derived = false,
35
+ statementNode = statementNodeQuery(qualifiedStatementNode),
36
+ statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
37
+ const verifiedAhead = true;
51
38
 
52
- return verifiedAhead;
53
- });
39
+ return verifiedAhead;
40
+ });
54
41
 
55
- if (qualifiedStatementVerified) {
56
- return true;
57
- }
58
- });
59
- }
42
+ qualifiedStatementVerified = statementVerified; ///
43
+ }
60
44
 
61
- if (qualifiedStatementVerified) {
62
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
63
- }
45
+ if (qualifiedStatementVerified) {
46
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
64
47
  }
65
48
 
66
49
  return qualifiedStatementVerified;
67
50
  }
68
51
 
69
- function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, referenceMetavariableNode, localContext) {
52
+ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
70
53
  let qualifiedStatementVerifiedAgainstRule = false;
71
54
 
72
- const metavariableNode = referenceMetavariableNode, ///
73
- rule = localContext.findRuleByMetavariableNode(metavariableNode);
55
+ const rule = localContext.findRuleByMetavariableNode(metavariableNode);
74
56
 
75
57
  if (rule !== null) {
76
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
77
- statementNode = statementNodeQuery(qualifiedStatementNode),
78
- statementLocalContext = localContext, ///
58
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
59
+ metavariableString = localContext.nodeAsString(metavariableNode),
79
60
  qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
80
61
 
81
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' rule...`, statementNode);
62
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule...`, qualifiedStatementNode);
82
63
 
83
- const ruleMatchesStatement = rule.matchStatement(statementNode, statementLocalContext);
64
+ const ruleMatchesStatement = rule.matchStatement(statementNode, localContext);
84
65
 
85
66
  qualifiedStatementVerifiedAgainstRule = ruleMatchesStatement; ///
86
67
 
87
68
  if (qualifiedStatementVerifiedAgainstRule) {
88
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' rule.`, statementNode);
69
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule.`, qualifiedStatementNode);
89
70
  }
90
71
  }
91
72
 
92
73
  return qualifiedStatementVerifiedAgainstRule;
93
74
  }
94
75
 
95
- function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, referenceMetavariableNode, localContext) {
76
+ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
96
77
  let qualifiedStatementVerifiedAgainstAxiom = false;
97
78
 
98
- const metavariableNode = referenceMetavariableNode, ///
99
- axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
79
+ const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
100
80
 
101
81
  if (axiom !== null) {
102
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
103
- statementNode = statementNodeQuery(qualifiedStatementNode),
104
- statementLocalContext = localContext, ///
82
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
83
+ metavariableString = localContext.nodeAsString(metavariableNode),
105
84
  qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
106
85
 
107
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' axiom...`, statementNode);
86
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom...`, qualifiedStatementNode);
108
87
 
109
- const axiomMatchesStatement = axiom.matchStatement(statementNode, statementLocalContext);
88
+ const axiomMatchesStatement = axiom.matchStatement(statementNode, localContext);
110
89
 
111
90
  qualifiedStatementVerifiedAgainstAxiom = axiomMatchesStatement; ///
112
91
 
113
92
  if (qualifiedStatementVerifiedAgainstAxiom) {
114
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' axiom.`, statementNode);
93
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom.`, qualifiedStatementNode);
115
94
  }
116
95
  }
117
96
 
118
97
  return qualifiedStatementVerifiedAgainstAxiom;
119
98
  }
120
99
 
121
- function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, referenceMetavariableNode, localContext) {
100
+ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
122
101
  let qualifiedStatementVerifiedAgainstLemma = false;
123
102
 
124
- const metavariableNode = referenceMetavariableNode, ///
125
- lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
103
+ const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
126
104
 
127
105
  if (lemma !== null) {
128
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
129
- statementNode = statementNodeQuery(qualifiedStatementNode),
130
- statementLocalContext = localContext, ///
106
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
107
+ metavariableString = localContext.nodeAsString(metavariableNode),
131
108
  qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
132
109
 
133
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' lemma...`, statementNode);
110
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma...`, qualifiedStatementNode);
134
111
 
135
- const lemmaMatchesStatement = lemma.matchStatement(statementNode, statementLocalContext);
112
+ const lemmaMatchesStatement = lemma.matchStatement(statementNode, localContext);
136
113
 
137
114
  qualifiedStatementVerifiedAgainstLemma = lemmaMatchesStatement; ///
138
115
 
139
116
  if (qualifiedStatementVerifiedAgainstLemma) {
140
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' lemma.`, statementNode);
117
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma.`, qualifiedStatementNode);
141
118
  }
142
119
  }
143
120
 
144
121
  return qualifiedStatementVerifiedAgainstLemma;
145
122
  }
146
123
 
147
- function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, referenceMetavariableNode, localContext) {
124
+ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
148
125
  let qualifiedStatementVerifiedAgainstTheorem = false;
149
126
 
150
- const metavariableNode = referenceMetavariableNode, ///
151
- theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
127
+ const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
152
128
 
153
129
  if (theorem !== null) {
154
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
155
- statementNode = statementNodeQuery(qualifiedStatementNode),
156
- statementLocalContext = localContext, ///
130
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
131
+ metavariableString = localContext.nodeAsString(metavariableNode),
157
132
  qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
158
133
 
159
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' theorem...`, statementNode);
134
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem...`, qualifiedStatementNode);
160
135
 
161
- const theoremMatchesStatement = theorem.matchStatement(statementNode, statementLocalContext);
136
+ const theoremMatchesStatement = theorem.matchStatement(statementNode, localContext);
162
137
 
163
138
  qualifiedStatementVerifiedAgainstTheorem = theoremMatchesStatement; ///
164
139
 
165
140
  if (qualifiedStatementVerifiedAgainstTheorem) {
166
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' theorem.`, statementNode);
141
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem.`, qualifiedStatementNode);
167
142
  }
168
143
  }
169
144
 
170
145
  return qualifiedStatementVerifiedAgainstTheorem;
171
146
  }
172
147
 
173
- function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, referenceMetavariableNode, localContext) {
148
+ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
174
149
  let qualifiedStatementVerifiedAgainstConjecture = false;
175
150
 
176
- const metavariableNode = referenceMetavariableNode, ///
177
- conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
151
+ const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
178
152
 
179
153
  if (conjecture !== null) {
180
- const referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode),
181
- statementNode = statementNodeQuery(qualifiedStatementNode),
182
- statementLocalContext = localContext, ///
154
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
155
+ metavariableString = localContext.nodeAsString(metavariableNode),
183
156
  qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
184
157
 
185
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' conjecture...`, statementNode);
158
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture...`, qualifiedStatementNode);
186
159
 
187
- const conjectureMatchesStatement = conjecture.matchStatement(statementNode, statementLocalContext);
160
+ const conjectureMatchesStatement = conjecture.matchStatement(statementNode, localContext);
188
161
 
189
162
  qualifiedStatementVerifiedAgainstConjecture = conjectureMatchesStatement; ///
190
163
 
191
164
  if (qualifiedStatementVerifiedAgainstConjecture) {
192
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceMetavariableString}' conjecture.`, statementNode);
165
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture.`, qualifiedStatementNode);
193
166
  }
194
167
  }
195
168
 
196
169
  return qualifiedStatementVerifiedAgainstConjecture;
197
170
  }
198
171
 
199
- function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
200
- let statementVerifiedAsEquality = true; ///
201
-
202
- const equalityNode = equalityNodeQuery(qualifiedStatementNode);
172
+ function verifyStatement(statementNode, assignments, derived, localContext, verifyAhead) {
173
+ let statementVerified;
203
174
 
204
- if (equalityNode !== null) {
205
- const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
175
+ const statementString = localContext.nodeAsString(statementNode);
206
176
 
207
- localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as an equality...`, qualifiedStatementNode);
177
+ localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
208
178
 
209
- const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead);
179
+ const verifyStatementFunctions = [
180
+ verifyStatementAsEquality,
181
+ verifyStatementAsTypeAssertion
182
+ ];
210
183
 
211
- statementVerifiedAsEquality = equalityVerified; ///
184
+ verifyStatementFunctions.some((verifyStatementFunction) => {
185
+ const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext, verifyAhead);
212
186
 
213
- if (statementVerifiedAsEquality) {
214
- localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as an equality.`, qualifiedStatementNode);
187
+ if (statementVerified) {
188
+ return true;
215
189
  }
216
- }
217
-
218
- return statementVerifiedAsEquality;
219
- }
190
+ });
220
191
 
221
- function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
222
- let statementVerifiedAsTypeAssertion = true; ///
192
+ statementVerified = true; ///
223
193
 
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
- }
194
+ if (statementVerified) {
195
+ localContext.debug(`...verified the '${statementString}' statement.`, statementNode);
238
196
  }
239
197
 
240
- return statementVerifiedAsTypeAssertion;
198
+ return statementVerified;
241
199
  }
@@ -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;
@@ -71,7 +71,7 @@ Object.assign(statementAgainstCombinatorNodesVerifier, {
71
71
 
72
72
  export default verifyStatement;
73
73
 
74
- function verifyStatementAsEquality(statementNode, assignments, derived, localContext, verifyAhead) {
74
+ export function verifyStatementAsEquality(statementNode, assignments, derived, localContext, verifyAhead) {
75
75
  let statementVerifiedAsEquality = false;
76
76
 
77
77
  const equalityNode = equalityNodeQuery(statementNode);
@@ -93,7 +93,7 @@ function verifyStatementAsEquality(statementNode, assignments, derived, localCon
93
93
  return statementVerifiedAsEquality;
94
94
  }
95
95
 
96
- function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext, verifyAhead) {
96
+ export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext, verifyAhead) {
97
97
  let statementVerifiedAsTypeAssertion = false;
98
98
 
99
99
  const typeAssertionNode = typeAssertionNodeQuery(statementNode);
@@ -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
+