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.
Files changed (92) hide show
  1. package/lib/axiom.js +9 -9
  2. package/lib/conjecture.js +9 -9
  3. package/lib/constants.js +1 -9
  4. package/lib/context/file.js +3 -3
  5. package/lib/context/local.js +5 -5
  6. package/lib/lemma.js +9 -9
  7. package/lib/metaLemma.js +7 -7
  8. package/lib/metatheorem.js +7 -7
  9. package/lib/metavariable.js +8 -1
  10. package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
  11. package/lib/premise.js +6 -6
  12. package/lib/theorem.js +9 -9
  13. package/lib/topLevelAssertion.js +186 -0
  14. package/lib/verifier/nodes/intrinsicLevel.js +3 -3
  15. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +3 -3
  16. package/lib/verifier/nodes/metaLevel.js +16 -16
  17. package/lib/verify/assertion/contained.js +91 -0
  18. package/lib/verify/assertion/defined.js +114 -0
  19. package/lib/verify/assertion/subproof.js +65 -0
  20. package/lib/verify/assertion/type.js +112 -0
  21. package/lib/verify/axiom.js +4 -4
  22. package/lib/verify/conjecture.js +4 -4
  23. package/lib/verify/declaration.js +3 -6
  24. package/lib/verify/derivation.js +7 -7
  25. package/lib/verify/equality.js +3 -3
  26. package/lib/verify/frame.js +2 -2
  27. package/lib/verify/judgement.js +2 -2
  28. package/lib/verify/lemma.js +5 -5
  29. package/lib/verify/metaLemma.js +4 -4
  30. package/lib/verify/metastatement.js +4 -24
  31. package/lib/verify/metatheorem.js +4 -4
  32. package/lib/verify/metavariable.js +2 -2
  33. package/lib/verify/proof.js +3 -3
  34. package/lib/verify/proofStep.js +4 -4
  35. package/lib/verify/rule.js +3 -3
  36. package/lib/verify/statement/qualified.js +19 -25
  37. package/lib/verify/statement/unqualified.js +38 -10
  38. package/lib/verify/statement.js +106 -97
  39. package/lib/verify/subDerivation.js +3 -3
  40. package/lib/verify/subproof.js +3 -3
  41. package/lib/verify/termAsConstructor.js +2 -2
  42. package/lib/verify/theorem.js +4 -4
  43. package/package.json +2 -2
  44. package/src/axiom.js +4 -4
  45. package/src/conjecture.js +4 -4
  46. package/src/constants.js +0 -2
  47. package/src/context/file.js +2 -2
  48. package/src/context/local.js +4 -3
  49. package/src/lemma.js +4 -4
  50. package/src/metaLemma.js +4 -4
  51. package/src/metatheorem.js +4 -4
  52. package/src/metavariable.js +6 -0
  53. package/src/mixins/nodesVerifier/metaLevel.js +1 -1
  54. package/src/premise.js +6 -6
  55. package/src/theorem.js +4 -4
  56. package/src/{metaLemmaMetatheorem.js → topLevelAssertion.js} +16 -26
  57. package/src/verifier/nodes/intrinsicLevel.js +2 -2
  58. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +3 -3
  59. package/src/verifier/nodes/metaLevel.js +18 -19
  60. package/src/verify/assertion/contained.js +111 -0
  61. package/src/verify/{statementAsDefinedAssertion.js → assertion/defined.js} +25 -41
  62. package/src/verify/assertion/subproof.js +77 -0
  63. package/src/verify/{typeAssertion.js → assertion/type.js} +15 -15
  64. package/src/verify/axiom.js +5 -4
  65. package/src/verify/conjecture.js +5 -4
  66. package/src/verify/declaration.js +2 -6
  67. package/src/verify/derivation.js +6 -6
  68. package/src/verify/equality.js +2 -2
  69. package/src/verify/frame.js +1 -1
  70. package/src/verify/judgement.js +1 -1
  71. package/src/verify/lemma.js +8 -5
  72. package/src/verify/metaLemma.js +4 -4
  73. package/src/verify/metastatement.js +3 -32
  74. package/src/verify/metatheorem.js +4 -4
  75. package/src/verify/metavariable.js +1 -1
  76. package/src/verify/proof.js +2 -2
  77. package/src/verify/proofStep.js +3 -3
  78. package/src/verify/rule.js +4 -4
  79. package/src/verify/statement/qualified.js +30 -33
  80. package/src/verify/statement/unqualified.js +52 -10
  81. package/src/verify/statement.js +168 -47
  82. package/src/verify/subDerivation.js +2 -2
  83. package/src/verify/subproof.js +2 -2
  84. package/src/verify/termAsConstructor.js +2 -2
  85. package/src/verify/theorem.js +7 -4
  86. package/lib/axiomLemmaTheoremConjecture.js +0 -174
  87. package/lib/metaLemmaMetatheorem.js +0 -191
  88. package/lib/verify/statementAsContainedAssertion.js +0 -109
  89. package/lib/verify/statementAsDefinedAssertion.js +0 -132
  90. package/lib/verify/typeAssertion.js +0 -112
  91. package/src/axiomLemmaTheoremConjecture.js +0 -165
  92. package/src/verify/statementAsContainedAssertion.js +0 -127
@@ -15,18 +15,17 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
15
15
 
16
16
  localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
17
17
 
18
- const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
19
- verifyQualifiedStatementFunctions = [
20
- verifyQualifiedStatementAAgainstRule,
21
- verifyQualifiedStatementAAgainstReference,
22
- verifyQualifiedStatementAAgainstAxiom,
23
- verifyQualifiedStatementAAgainstLemma,
24
- verifyQualifiedStatementAAgainstTheorem,
25
- verifyQualifiedStatementAAgainstConjecture
26
- ];
18
+ const verifyQualifiedStatementFunctions = [
19
+ verifyQualifiedStatementAAgainstRule,
20
+ verifyQualifiedStatementAAgainstAxiom,
21
+ verifyQualifiedStatementAAgainstLemma,
22
+ verifyQualifiedStatementAAgainstTheorem,
23
+ verifyQualifiedStatementAAgainstConjecture,
24
+ verifyQualifiedStatementAAgainstReference
25
+ ];
27
26
 
28
27
  qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
29
- const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, substitutions, localContext);
28
+ const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
30
29
 
31
30
  if (qualifiedStatementVerified) {
32
31
  return true;
@@ -36,11 +35,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
36
35
  if (qualifiedStatementVerified) {
37
36
  const derived = false,
38
37
  statementNode = statementNodeQuery(qualifiedStatementNode),
39
- statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
40
- const verifiedAhead = true;
41
-
42
- return verifiedAhead;
43
- });
38
+ statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
44
39
 
45
40
  qualifiedStatementVerified = statementVerified; ///
46
41
  }
@@ -52,10 +47,11 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
52
47
  return qualifiedStatementVerified;
53
48
  }
54
49
 
55
- function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
50
+ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, substitutions, localContext) {
56
51
  let qualifiedStatementVerifiedAgainstRule = false;
57
52
 
58
- const rule = localContext.findRuleByMetavariableNode(metavariableNode);
53
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
54
+ rule = localContext.findRuleByMetavariableNode(metavariableNode);
59
55
 
60
56
  if (rule !== null) {
61
57
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -76,10 +72,11 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariab
76
72
  return qualifiedStatementVerifiedAgainstRule;
77
73
  }
78
74
 
79
- function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
75
+ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, substitutions, localContext) {
80
76
  let qualifiedStatementVerifiedAgainstAxiom = false;
81
77
 
82
- const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
78
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
79
+ axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
83
80
 
84
81
  if (axiom !== null) {
85
82
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -100,10 +97,11 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavaria
100
97
  return qualifiedStatementVerifiedAgainstAxiom;
101
98
  }
102
99
 
103
- function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
100
+ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, substitutions, localContext) {
104
101
  let qualifiedStatementVerifiedAgainstLemma = false;
105
102
 
106
- const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
103
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
104
+ lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
107
105
 
108
106
  if (lemma !== null) {
109
107
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -124,10 +122,11 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavaria
124
122
  return qualifiedStatementVerifiedAgainstLemma;
125
123
  }
126
124
 
127
- function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
125
+ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, substitutions, localContext) {
128
126
  let qualifiedStatementVerifiedAgainstTheorem = false;
129
127
 
130
- const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
128
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
129
+ theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
131
130
 
132
131
  if (theorem !== null) {
133
132
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -148,10 +147,11 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavar
148
147
  return qualifiedStatementVerifiedAgainstTheorem;
149
148
  }
150
149
 
151
- function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
150
+ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, substitutions, localContext) {
152
151
  let qualifiedStatementVerifiedAgainstConjecture = false;
153
152
 
154
- const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
153
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
154
+ conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
155
155
 
156
156
  if (conjecture !== null) {
157
157
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -172,22 +172,19 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, meta
172
172
  return qualifiedStatementVerifiedAgainstConjecture;
173
173
  }
174
174
 
175
- function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
175
+ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substitutions, localContext) {
176
176
  let qualifiedStatementVerifiedAgainstReference = false;
177
177
 
178
- const metavariableString = localContext.nodeAsString(metavariableNode),
179
- metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode, localContext),
178
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
179
+ metavariableString = localContext.nodeAsString(metavariableNode),
180
+ metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
180
181
  qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
181
182
 
182
183
  localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference...`, qualifiedStatementNode);
183
184
 
184
185
  if (metavariablePresent) {
185
186
  const statementNode = statementNodeQuery(qualifiedStatementNode),
186
- metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
187
- const verifiedAhead = true;
188
-
189
- return verifiedAhead;
190
- });
187
+ metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead);
191
188
 
192
189
  qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
193
190
  }
@@ -7,28 +7,70 @@ import { nodeQuery } from "../../utilities/query";
7
7
  const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
8
8
 
9
9
  export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
10
- let unqualifiedStatementVerified = false;
10
+ let unqualifiedStatementVerified;
11
11
 
12
- const statementNode = statementNodeQuery(unqualifiedStatementNode),
13
- unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
12
+ const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
14
13
 
15
14
  localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
16
15
 
16
+ const verifyUnqualifiedStatementFunctions = [
17
+ verifyDerivedUnqualifiedStatement,
18
+ verifyStatedUnqualifiedStatement
19
+ ];
20
+
21
+ unqualifiedStatementVerified = verifyUnqualifiedStatementFunctions.some((verifyUnqualifiedStatementFunction) => {
22
+ const unqualifiedStatementVerified = verifyUnqualifiedStatementFunction(unqualifiedStatementNode, assignments, derived, localContext);
23
+
24
+ if (unqualifiedStatementVerified) {
25
+ return true;
26
+ }
27
+ });
28
+
29
+ if (unqualifiedStatementVerified) {
30
+ localContext.debug(`...verified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
31
+ }
32
+
33
+ return unqualifiedStatementVerified;
34
+ }
35
+
36
+ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
37
+ let derivedUnqualifiedStatementVerified = false;
38
+
17
39
  if (derived) {
40
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
41
+ unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
42
+
43
+ localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
44
+
18
45
  const matchesStatementNode = localContext.matchStatementNode(statementNode);
19
46
 
20
- unqualifiedStatementVerified = matchesStatementNode; ///
47
+ derivedUnqualifiedStatementVerified = matchesStatementNode; ///
48
+
49
+ if (derivedUnqualifiedStatementVerified) {
50
+ localContext.debug(`...verified the '${unqualifiedStatementString}' derived unqualified statement.`, unqualifiedStatementNode);
51
+ }
21
52
  }
22
53
 
23
- if (!unqualifiedStatementVerified) {
54
+ return derivedUnqualifiedStatementVerified;
55
+ }
56
+
57
+ function verifyStatedUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
58
+ let statedUnqualifiedStatementVerified = false;
59
+
60
+ if (!derived) {
61
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
62
+ unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
63
+
64
+ localContext.trace(`Verifying the '${unqualifiedStatementString}' stated unqualified statement...`, unqualifiedStatementNode);
65
+
24
66
  const statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
25
67
 
26
- unqualifiedStatementVerified = statementVerified; ///
27
- }
68
+ statedUnqualifiedStatementVerified = statementVerified; ///
28
69
 
29
- if (unqualifiedStatementVerified) {
30
- localContext.debug(`...verified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
70
+ if (statedUnqualifiedStatementVerified) {
71
+ localContext.debug(`...verified the '${unqualifiedStatementString}' stated unqualified statement.`, unqualifiedStatementNode);
72
+ }
31
73
  }
32
74
 
33
- return unqualifiedStatementVerified;
75
+ return statedUnqualifiedStatementVerified;
34
76
  }
@@ -1,18 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  import verifyEquality from "../verify/equality";
4
- import bracketedCombinator from "../ocmbinator/bracketed";
5
- import verifyTypeAssertion from "../verify/typeAssertion";
6
- import verifyStatementAsDefinedAssertion from "../verify/statementAsDefinedAssertion";
7
- import verifyStatementAsContainedAssertion from "../verify/statementAsContainedAssertion";
4
+ import verifyJudgement from "../verify/judgement";
5
+ import verifyTypeAssertion from "../verify/assertion/type";
6
+ import verifyDefinedAssertion from "../verify/assertion/defined";
7
+ import verifySubproofAssertion from "../verify/assertion/subproof";
8
+ import verifyContainedAssertion from "../verify/assertion/contained";
8
9
  import statementAgainstCombinatorNodesVerifier from "../verifier/nodes/statementAgainstCombinator";
9
10
 
10
11
  import { nodeQuery } from "../utilities/query";
11
- import { isStatementDefinedAssertion } from "../verify/statementAsDefinedAssertion";
12
- import { isStatementContainedAssertion } from "../verify/statementAsContainedAssertion";
12
+ import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
13
13
 
14
14
  const equalityNodeQuery = nodeQuery("/statement/equality!"),
15
- typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
15
+ judgementNodeQuery = nodeQuery("/statement/judgement!"),
16
+ metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
17
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
18
+ definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
19
+ subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
20
+ containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
16
21
 
17
22
  function verifyStatement(statementNode, assignments, derived, localContext) {
18
23
  let statementVerified;
@@ -22,9 +27,12 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
22
27
  localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
23
28
 
24
29
  const verifyStatementFunctions = [
30
+ verifyStatementAsMetavariable,
25
31
  verifyStatementAsEquality,
32
+ verifyStatementAsJudgement,
26
33
  verifyStatementAsTypeAssertion,
27
34
  verifyStatementAsDefinedAssertion,
35
+ verifyStatementAsSubproofAssertion,
28
36
  verifyStatementAsContainedAssertion,
29
37
  verifyStatementAgainstCombinators
30
38
  ];
@@ -53,7 +61,7 @@ export function verifyStandaloneStatement(statementNode, localContext, verifyAhe
53
61
 
54
62
  const derived = false,
55
63
  assignments = [],
56
- statementVerified = verifyStatement(statementNode, assignments, derived);
64
+ statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
57
65
 
58
66
  if (statementVerified) {
59
67
  const verifiedAhead = verifyAhead();
@@ -77,15 +85,14 @@ export default verifyStatement;
77
85
  export function verifyStatementAsEquality(statementNode, assignments, derived, localContext) {
78
86
  let statementVerifiedAsEquality = false;
79
87
 
80
- const statementEquality = isStatementEquality(statementNode);
88
+ const equalityNode = equalityNodeQuery(statementNode);
81
89
 
82
- if (statementEquality) {
90
+ if (equalityNode !== null) {
83
91
  const statementString = localContext.nodeAsString(statementNode);
84
92
 
85
93
  localContext.trace(`Verifying the '${statementString}' statement as an equality...`, statementNode);
86
94
 
87
- const equalityNode = equalityNodeQuery(statementNode),
88
- equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
95
+ const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
89
96
  const verifiedAhead = true;
90
97
 
91
98
  return verifiedAhead;
@@ -104,19 +111,14 @@ export function verifyStatementAsEquality(statementNode, assignments, derived, l
104
111
  export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
105
112
  let statementVerifiedAsTypeAssertion = false;
106
113
 
107
- const statementTypeAssertion = isStatementTypeAssertion(statementNode);
114
+ const typeAssertionNode = typeAssertionNodeQuery(statementNode);
108
115
 
109
- if (statementTypeAssertion) {
116
+ if (typeAssertionNode !== null) {
110
117
  const statementString = localContext.nodeAsString(statementNode);
111
118
 
112
119
  localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
113
120
 
114
- const typeAssertionNode = typeAssertionNodeQuery(statementNode),
115
- typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, () => {
116
- const verifiedAhead = true;
117
-
118
- return verifiedAhead;
119
- });
121
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
120
122
 
121
123
  statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
122
124
 
@@ -128,21 +130,154 @@ export function verifyStatementAsTypeAssertion(statementNode, assignments, deriv
128
130
  return statementVerifiedAsTypeAssertion;
129
131
  }
130
132
 
131
- function verifyStatementAgainstCombinators(statementNode, assignments, derived, localContext) {
132
- let statementVerifiedAgainstCombinators = false;
133
+ function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
134
+ let statementVerifiedAsJudgement = false;
135
+
136
+ const judgementNode = judgementNodeQuery(statementNode);
137
+
138
+ if (judgementNode !== null) {
139
+ const statementString = localContext.nodeAsString(statementNode);
140
+
141
+ localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
142
+
143
+ const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
144
+
145
+ statementVerifiedAsJudgement = judgementVerified; ///
146
+
147
+ if (statementVerifiedAsJudgement) {
148
+ localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
149
+ }
150
+ }
151
+
152
+ return statementVerifiedAsJudgement;
153
+ }
154
+
155
+ function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
156
+ let statementVerifiedAsMetavariable = false;
157
+
158
+ const metavariableNode = metavariableNodeQuery(statementNode);
159
+
160
+ if (metavariableNode !== null) {
161
+ const statementString = localContext.nodeAsString(statementNode);
162
+
163
+ localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
164
+
165
+ const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
166
+
167
+ if (metavariable !== null) {
168
+ const metaTypeName = metavariable.getMetaTypeName();
169
+
170
+ if (metaTypeName === STATEMENT_META_TYPE_NAME) {
171
+ statementVerifiedAsMetavariable = true;
172
+ }
173
+ }
174
+
175
+ if (statementVerifiedAsMetavariable) {
176
+ localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
177
+ }
178
+ }
179
+
180
+ return statementVerifiedAsMetavariable;
181
+ }
182
+
183
+ function verifyStatementAsDefinedAssertion(statementNode, assignments, derived, localContext) {
184
+ let statementVerifiedAsDefinedAssertion = false;
185
+
186
+ const definedAssertionNode = definedAssertionNodeQuery(statementNode);
187
+
188
+ if (definedAssertionNode !== null) {
189
+ const statementString = localContext.nodeAsString(statementNode);
190
+
191
+ localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
192
+
193
+ const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments, derived, localContext, () => {
194
+ const verifiedAhead = true;
195
+
196
+ return verifiedAhead;
197
+ });
198
+
199
+ statementVerifiedAsDefinedAssertion = definedAssertionVerified; ///
200
+
201
+ if (statementVerifiedAsDefinedAssertion) {
202
+ localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
203
+ }
204
+ }
205
+
206
+ return statementVerifiedAsDefinedAssertion;
207
+ }
208
+
209
+ function verifyStatementAsSubproofAssertion(statementNode, assignments, derived, localContext) {
210
+ let statementVerifiedAsSubproofAssertion = false;
211
+
212
+ const subproofAssertionNode = subproofAssertionNodeQuery(statementNode);
213
+
214
+ if (subproofAssertionNode !== null) {
215
+ const statementString = localContext.nodeAsString(statementNode);
216
+
217
+ localContext.trace(`Verifying the '${statementString}' statement as a subproof assertion...`, statementNode);
218
+
219
+ const subproofAssertionVerified = verifySubproofAssertion(subproofAssertionNode, assignments, derived, localContext, () => {
220
+ const verifiedAhead = true;
221
+
222
+ return verifiedAhead;
223
+ });
224
+
225
+ statementVerifiedAsSubproofAssertion = subproofAssertionVerified; ///
226
+
227
+ if (statementVerifiedAsSubproofAssertion) {
228
+ localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
229
+ }
230
+ }
231
+
232
+ return statementVerifiedAsSubproofAssertion;
233
+ }
234
+
235
+ function verifyStatementAsContainedAssertion(statementNode, assignments, derived, localContext) {
236
+ let statementVerifiedAsContainedAssertion = false;
237
+
238
+ const containedAssertionNode = containedAssertionNodeQuery(statementNode);
239
+
240
+ if (containedAssertionNode !== null) {
241
+ const statementString = localContext.nodeAsString(statementNode);
242
+
243
+ localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
244
+
245
+ const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext, () => {
246
+ const verifiedAhead = true;
133
247
 
134
- const statementEquality = isStatementEquality(statementNode),
135
- statementTypeAssertion = isStatementTypeAssertion(statementNode),
136
- statementDefinedAssertion = isStatementDefinedAssertion(statementNode),
137
- statementContainedAssertion = isStatementContainedAssertion(statementNode);
248
+ return verifiedAhead;
249
+ });
138
250
 
139
- if (!statementEquality && !statementTypeAssertion && !statementDefinedAssertion && !statementContainedAssertion) {
140
- let combinators = localContext.getCombinators();
251
+ statementVerifiedAsContainedAssertion = containedAssertionVerified; ///
141
252
 
142
- combinators = [ ///
143
- bracketedCombinator,
144
- ...combinators
145
- ];
253
+ if (statementVerifiedAsContainedAssertion) {
254
+ localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
255
+ }
256
+ }
257
+
258
+ return statementVerifiedAsContainedAssertion;
259
+ }
260
+
261
+ function verifyStatementAgainstCombinators(statementNode, assignments, derived, localContext) {
262
+ let statementVerifiedAgainstCombinators = false;
263
+
264
+ const equalityNode = equalityNodeQuery(statementNode),
265
+ judgementNode = judgementNodeQuery(statementNode),
266
+ metavariableNode = metavariableNodeQuery(statementNode),
267
+ typeAssertionNode = typeAssertionNodeQuery(statementNode),
268
+ definedAssertionNode = definedAssertionNodeQuery(statementNode),
269
+ subproofAssertionNode = subproofAssertionNodeQuery(statementNode),
270
+ containedAssertionNode = containedAssertionNodeQuery(statementNode);
271
+
272
+ if ( (equalityNode === null) &&
273
+ (judgementNode === null) &&
274
+ (metavariableNode === null) &&
275
+ (typeAssertionNode === null) &&
276
+ (definedAssertionNode === null) &&
277
+ (subproofAssertionNode === null) &&
278
+ (containedAssertionNode === null) ) {
279
+
280
+ const combinators = localContext.getCombinators();
146
281
 
147
282
  statementVerifiedAgainstCombinators = combinators.some((combinator) => {
148
283
  const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, localContext);
@@ -180,18 +315,4 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
180
315
  }
181
316
 
182
317
  return statementVerifiedAgainstCombinator;
183
- }
184
-
185
- function isStatementEquality(statementNode) {
186
- const equalityNode = equalityNodeQuery(statementNode),
187
- statementEquality = (equalityNode !== null);
188
-
189
- return statementEquality;
190
- }
191
-
192
- function isStatementTypeAssertion(statementNode) {
193
- const typeAssertionNode = typeAssertionNodeQuery(statementNode),
194
- statementTypeAssertion = (typeAssertionNode !== null);
195
-
196
- return statementTypeAssertion;
197
- }
318
+ }
@@ -4,14 +4,14 @@ import { nodesQuery } from "../utilities/query";
4
4
 
5
5
  const proofStepNodesQuery = nodesQuery("/subDerivation/proofStep|lastProofStep");
6
6
 
7
- export default function verifySubDerivation(subDerivationNode, localContext) {
7
+ export default function verifySubDerivation(subDerivationNode, substitutions, localContext) {
8
8
  let subDerivationVerified;
9
9
 
10
10
  const proofStepNodes = proofStepNodesQuery(subDerivationNode);
11
11
 
12
12
  subDerivationVerified = proofStepNodes.every((proofStepNode) => {
13
13
  const { verifyProofStep } = verifySubDerivation,
14
- proofStepVerified = verifyProofStep(proofStepNode, localContext);
14
+ proofStepVerified = verifyProofStep(proofStepNode, substitutions, localContext);
15
15
 
16
16
  if (proofStepVerified) {
17
17
  return true;
@@ -9,7 +9,7 @@ import { nodeQuery, nodesQuery } from "../utilities/query";
9
9
  const suppositionNodesQuery = nodesQuery("/subproof/supposition"),
10
10
  subDerivationNodeQuery = nodeQuery("/subproof/subDerivation");
11
11
 
12
- export default function verifySubproof(subproofNode, localContext) {
12
+ export default function verifySubproof(subproofNode, substitutions, localContext) {
13
13
  let subproofVerified = false;
14
14
 
15
15
  localContext = LocalContext.fromLocalContext(localContext); ///
@@ -20,7 +20,7 @@ export default function verifySubproof(subproofNode, localContext) {
20
20
 
21
21
  if (suppositionsVerified) {
22
22
  const subDerivationNode = subDerivationNodeQuery(subproofNode),
23
- subDerivationVerified = verifySubDerivation(subDerivationNode, localContext);
23
+ subDerivationVerified = verifySubDerivation(subDerivationNode, substitutions, localContext);
24
24
 
25
25
  if (subDerivationVerified) {
26
26
  subproofVerified = true;
@@ -11,9 +11,9 @@ export default function verifyTermAsConstructor(termNode, typeNode, fileContext)
11
11
 
12
12
  fileContext.debug(`Verifying the '${termString}' term as a constructor...`, termNode);
13
13
 
14
- const nonTerminalNode = termNode, ///
14
+ const localContext = LocalContext.fromFileContext(fileContext),
15
+ nonTerminalNode = termNode, ///
15
16
  childNodes = nonTerminalNode.getChildNodes(),
16
- localContext = LocalContext.fromFileContext(fileContext),
17
17
  childNodesVerified = termAsConstructorNodeVerifier.verifyChildNodes(childNodes, localContext, () => {
18
18
  const verifiedAhead = true;
19
19
 
@@ -27,9 +27,9 @@ export default function verifyTheorem(theoremNode, fileContext) {
27
27
  labelsVerified = verifyLabels(labelNodes, labels, fileContext);
28
28
 
29
29
  if (labelsVerified) {
30
- const suppositionNodes = suppositionsNodeQuery(theoremNode),
30
+ const localContext = LocalContext.fromFileContext(fileContext),
31
31
  suppositions = [],
32
- localContext = LocalContext.fromFileContext(fileContext),
32
+ suppositionNodes = suppositionsNodeQuery(theoremNode),
33
33
  suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
34
34
 
35
35
  if (suppositionsVerified) {
@@ -41,10 +41,13 @@ export default function verifyTheorem(theoremNode, fileContext) {
41
41
  const proofNode = proofNodeQuery(theoremNode),
42
42
  firstConsequent = first(consequents),
43
43
  consequent = firstConsequent, ///
44
- proofVerified = verifyProof(proofNode, consequent, localContext);
44
+ statementNode = consequent.getStatementNode(),
45
+ substitutions = [],
46
+ proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
45
47
 
46
48
  if (proofVerified) {
47
- const theorem = Theorem.fromLabelsSuppositionsConsequentAndLocalContext(labels, suppositions, consequent, localContext);
49
+ const substitutions = [],
50
+ theorem = Theorem.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
48
51
 
49
52
  fileContext.addTheorem(theorem);
50
53