occam-verify-cli 0.0.923 → 0.0.924

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 (74) 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/theorem.js +9 -9
  11. package/lib/topLevelAssertion.js +186 -0
  12. package/lib/verify/axiom.js +4 -4
  13. package/lib/verify/conjecture.js +4 -4
  14. package/lib/verify/containedAssertion.js +91 -0
  15. package/lib/verify/declaration.js +2 -2
  16. package/lib/verify/definedAssertion.js +115 -0
  17. package/lib/verify/derivation.js +7 -7
  18. package/lib/verify/frame.js +2 -2
  19. package/lib/verify/judgement.js +2 -2
  20. package/lib/verify/lemma.js +5 -5
  21. package/lib/verify/metaLemma.js +4 -4
  22. package/lib/verify/metastatement.js +4 -23
  23. package/lib/verify/metatheorem.js +4 -4
  24. package/lib/verify/metavariable.js +2 -2
  25. package/lib/verify/proof.js +3 -3
  26. package/lib/verify/proofStep.js +4 -4
  27. package/lib/verify/rule.js +3 -3
  28. package/lib/verify/statement/qualified.js +18 -21
  29. package/lib/verify/statement/unqualified.js +38 -10
  30. package/lib/verify/statement.js +85 -92
  31. package/lib/verify/subDerivation.js +3 -3
  32. package/lib/verify/subproof.js +3 -3
  33. package/lib/verify/termAsConstructor.js +2 -2
  34. package/lib/verify/theorem.js +4 -4
  35. package/package.json +2 -2
  36. package/src/axiom.js +4 -4
  37. package/src/conjecture.js +4 -4
  38. package/src/constants.js +0 -2
  39. package/src/context/file.js +2 -2
  40. package/src/context/local.js +4 -3
  41. package/src/lemma.js +4 -4
  42. package/src/metaLemma.js +4 -4
  43. package/src/metatheorem.js +4 -4
  44. package/src/metavariable.js +6 -0
  45. package/src/theorem.js +4 -4
  46. package/src/{metaLemmaMetatheorem.js → topLevelAssertion.js} +16 -26
  47. package/src/verify/axiom.js +5 -4
  48. package/src/verify/conjecture.js +5 -4
  49. package/src/verify/{statementAsContainedAssertion.js → containedAssertion.js} +20 -36
  50. package/src/verify/declaration.js +1 -1
  51. package/src/verify/{statementAsDefinedAssertion.js → definedAssertion.js} +22 -37
  52. package/src/verify/derivation.js +6 -6
  53. package/src/verify/frame.js +1 -1
  54. package/src/verify/judgement.js +1 -1
  55. package/src/verify/lemma.js +8 -5
  56. package/src/verify/metaLemma.js +4 -4
  57. package/src/verify/metastatement.js +3 -31
  58. package/src/verify/metatheorem.js +4 -4
  59. package/src/verify/metavariable.js +1 -1
  60. package/src/verify/proof.js +2 -2
  61. package/src/verify/proofStep.js +3 -3
  62. package/src/verify/rule.js +4 -4
  63. package/src/verify/statement/qualified.js +33 -32
  64. package/src/verify/statement/unqualified.js +52 -10
  65. package/src/verify/statement.js +133 -39
  66. package/src/verify/subDerivation.js +2 -2
  67. package/src/verify/subproof.js +2 -2
  68. package/src/verify/termAsConstructor.js +2 -2
  69. package/src/verify/theorem.js +7 -4
  70. package/lib/axiomLemmaTheoremConjecture.js +0 -174
  71. package/lib/metaLemmaMetatheorem.js +0 -191
  72. package/lib/verify/statementAsContainedAssertion.js +0 -109
  73. package/lib/verify/statementAsDefinedAssertion.js +0 -132
  74. package/src/axiomLemmaTheoremConjecture.js +0 -165
@@ -2,8 +2,6 @@
2
2
 
3
3
  import verifyJudgement from "../verify/judgement";
4
4
  import metaLevelNodeVerifier from "../verifier/node/metaLevel";
5
- import verifyStatementAsDefinedAssertion from "./statementAsDefinedAssertion";
6
- import verifyStatementAsContainedAssertion from "./statementAsContainedAssertion";
7
5
 
8
6
  import { nodeQuery } from "../utilities/query";
9
7
 
@@ -17,9 +15,6 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
17
15
  localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
18
16
 
19
17
  const verifyStatementFunctions = [
20
- verifyStatementAsJudgement,
21
- verifyStatementAsDefinedAssertion,
22
- verifyStatementAsContainedAssertion,
23
18
  verifyStatementAsIs
24
19
  ];
25
20
 
@@ -44,29 +39,6 @@ Object.assign(metaLevelNodeVerifier, {
44
39
 
45
40
  export default verifyStatement;
46
41
 
47
- function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
48
- let statementVerifiedAsJudgement = false;
49
-
50
- const statementJudgement = isStatementJudgement(statementNode);
51
-
52
- if (statementJudgement) {
53
- const statementString = localContext.nodeAsString(statementNode);
54
-
55
- localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
56
-
57
- const judgementNode = judgementNodeQuery(statementNode),
58
- judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
59
-
60
- statementVerifiedAsJudgement = judgementVerified; ///
61
-
62
- if (statementVerifiedAsJudgement) {
63
- localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
64
- }
65
- }
66
-
67
- return statementVerifiedAsJudgement;
68
- }
69
-
70
42
  function verifyStatementAsIs(statementNode, assignments, derived, localContext) {
71
43
  let statementVerifiedAsIs;
72
44
 
@@ -104,7 +76,7 @@ function verifyDerivedStatementAsIs(statementNode, assignments, derived, localCo
104
76
  if (derived) {
105
77
  const statementString = localContext.nodeAsString(statementNode);
106
78
 
107
- localContext.debug(`Cannot verify the derived '${statementString}' statement as is.`, statementNode);
79
+ localContext.debug(`Cannot verify the '${statementString}' derived statement as is.`, statementNode);
108
80
  }
109
81
 
110
82
  return derivedStatementVerifiedAsIs;
@@ -116,7 +88,7 @@ function verifyStatedStatementAsIs(statementNode, assignments, derived, localCon
116
88
  if (!derived) {
117
89
  const statementString = localContext.nodeAsString(statementNode);
118
90
 
119
- localContext.trace(`Verifying the stated '${statementString}' statement as is...`, statementNode);
91
+ localContext.trace(`Verifying the '${statementString}' stated statement as is...`, statementNode);
120
92
 
121
93
  const nonTerminalNode = statementNode, ///
122
94
  nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
@@ -128,7 +100,7 @@ function verifyStatedStatementAsIs(statementNode, assignments, derived, localCon
128
100
  statedStatementVerifiedAsIs = nonTerminalNodeVerified; ///
129
101
 
130
102
  if (statedStatementVerifiedAsIs) {
131
- localContext.debug(`...verified the stated '${statementString}' statement as is.`, statementNode);
103
+ localContext.debug(`...verified the '${statementString}' stated statement as is.`, statementNode);
132
104
  }
133
105
  }
134
106
 
@@ -27,21 +27,21 @@ export default function verifyMetatheorem(metatheoremNode, fileContext) {
27
27
  labelsVerified = verifyLabels(labelNodes, labels, fileContext);
28
28
 
29
29
  if (labelsVerified) {
30
- const localContext = LocalContext.fromFileContext(fileContext), ///
31
- substitutions = [],
30
+ const localContext = LocalContext.fromFileContext(fileContext),
32
31
  suppositions = [],
33
32
  suppositionNodes = suppositionsNodeQuery(metatheoremNode),
34
- suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, substitutions, localContext);
33
+ suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
35
34
 
36
35
  if (suppositionsVerified) {
37
36
  const consequents = [],
38
37
  consequentNode = consequentNodeQuery(metatheoremNode),
39
- consequentVerified = verifyConsequent(consequentNode, consequents, substitutions, localContext);
38
+ consequentVerified = verifyConsequent(consequentNode, consequents, localContext);
40
39
 
41
40
  if (consequentVerified) {
42
41
  const proofNode = proofNodeQuery(metatheoremNode),
43
42
  firstConsequent = first(consequents),
44
43
  consequent = firstConsequent, ///
44
+ substitutions = [],
45
45
  statementNode = consequent.getStatementNode(),
46
46
  proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
47
47
 
@@ -73,7 +73,7 @@ export function verifyStandaloneMetavariable(metavariableNode, localContext, ver
73
73
 
74
74
  localContext.trace(`Verifying the '${metavariableString}' standalone metavariable...`, metavariableNode);
75
75
 
76
- const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode, localContext);
76
+ const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode);
77
77
 
78
78
  if (metavariablePresent) {
79
79
  const verifiedAhead = verifyAhead();
@@ -7,13 +7,13 @@ import { nodeQuery } from "../utilities/query";
7
7
 
8
8
  const derivationNodeQuery = nodeQuery("/proof/derivation!");
9
9
 
10
- export default function verifyProof(proofNode, conclusion, localContext) {
10
+ export default function verifyProof(proofNode, conclusion, substitutions, localContext) {
11
11
  let proofVerified = false;
12
12
 
13
13
  localContext = LocalContext.fromLocalContext(localContext); ///
14
14
 
15
15
  const derivationNode = derivationNodeQuery(proofNode),
16
- derivationVerified = verifyDerivation(derivationNode, localContext);
16
+ derivationVerified = verifyDerivation(derivationNode, substitutions, localContext);
17
17
 
18
18
  if (derivationVerified) {
19
19
  const lastProofStep = localContext.getLastProofStep();
@@ -14,7 +14,7 @@ const subproofNodeQuery = nodeQuery("/proofStep|lastProofStep/subproof!"),
14
14
  qualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/qualifiedStatement!"),
15
15
  unqualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/unqualifiedStatement!");
16
16
 
17
- export default function verifyProofStep(proofStepNode, localContext) {
17
+ export default function verifyProofStep(proofStepNode, substitutions, localContext) {
18
18
  let proofStepVerified = false;
19
19
 
20
20
  const subproofNode = subproofNodeQuery(proofStepNode),
@@ -26,7 +26,7 @@ export default function verifyProofStep(proofStepNode, localContext) {
26
26
  } else if (subproofNode !== null) {
27
27
  let subproofVerified;
28
28
 
29
- subproofVerified = verifySubproof(subproofNode, localContext);
29
+ subproofVerified = verifySubproof(subproofNode, substitutions, localContext);
30
30
 
31
31
  if (subproofVerified) {
32
32
  const proofStep = ProofStep.fromSubproofNode(subproofNode);
@@ -40,7 +40,7 @@ export default function verifyProofStep(proofStepNode, localContext) {
40
40
 
41
41
  const assignments = [];
42
42
 
43
- qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext);
43
+ qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext);
44
44
 
45
45
  if (qualifiedStatementVerified) {
46
46
  const assignmentAssigned = assignAssignment(assignments, localContext);
@@ -10,9 +10,9 @@ import verifyConclusion from "../verify/conclusion";
10
10
  import { first } from "../utilities/array";
11
11
  import { nodeQuery, nodesQuery } from "../utilities/query";
12
12
 
13
- const labelNodesQuery = nodesQuery("/rule/label"),
13
+ const proofNodeQuery = nodeQuery("/rule/proof!"),
14
+ labelNodesQuery = nodesQuery("/rule/label"),
14
15
  premisesNodeQuery = nodesQuery("/rule/premise"),
15
- proofNodeQuery = nodeQuery("/rule/proof!"),
16
16
  conclusionNodeQuery = nodeQuery("/rule/conclusion!");
17
17
 
18
18
  export default function verifyRule(ruleNode, fileContext) {
@@ -27,8 +27,8 @@ export default function verifyRule(ruleNode, fileContext) {
27
27
  labelsVerified = verifyLabels(labelNodes, labels, fileContext);
28
28
 
29
29
  if (labelsVerified) {
30
- const premises = [],
31
- localContext = LocalContext.fromFileContext(fileContext),
30
+ const localContext = LocalContext.fromFileContext(fileContext),
31
+ premises = [],
32
32
  premiseNodes = premisesNodeQuery(ruleNode),
33
33
  premisesVerified = verifyPremises(premiseNodes, premises, localContext);
34
34
 
@@ -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,23 @@ 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;
187
+ metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
188
+ const verifiedAhead = true;
188
189
 
189
- return verifiedAhead;
190
- });
190
+ return verifiedAhead;
191
+ });
191
192
 
192
193
  qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
193
194
  }
@@ -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,21 @@
1
1
  "use strict";
2
2
 
3
3
  import verifyEquality from "../verify/equality";
4
- import bracketedCombinator from "../ocmbinator/bracketed";
4
+ import verifyJudgement from "../verify/judgement";
5
5
  import verifyTypeAssertion from "../verify/typeAssertion";
6
- import verifyStatementAsDefinedAssertion from "../verify/statementAsDefinedAssertion";
7
- import verifyStatementAsContainedAssertion from "../verify/statementAsContainedAssertion";
6
+ import verifyDefinedAssertion from "./definedAssertion";
7
+ import verifyContainedAssertion from "./containedAssertion";
8
8
  import statementAgainstCombinatorNodesVerifier from "../verifier/nodes/statementAgainstCombinator";
9
9
 
10
10
  import { nodeQuery } from "../utilities/query";
11
- import { isStatementDefinedAssertion } from "../verify/statementAsDefinedAssertion";
12
- import { isStatementContainedAssertion } from "../verify/statementAsContainedAssertion";
11
+ import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
13
12
 
14
13
  const equalityNodeQuery = nodeQuery("/statement/equality!"),
15
- typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
14
+ judgementNodeQuery = nodeQuery("/statement/judgement!"),
15
+ metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
16
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
17
+ definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
18
+ containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
16
19
 
17
20
  function verifyStatement(statementNode, assignments, derived, localContext) {
18
21
  let statementVerified;
@@ -22,7 +25,9 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
22
25
  localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
23
26
 
24
27
  const verifyStatementFunctions = [
28
+ verifyStatementAsMetavariable,
25
29
  verifyStatementAsEquality,
30
+ verifyStatementAsJudgement,
26
31
  verifyStatementAsTypeAssertion,
27
32
  verifyStatementAsDefinedAssertion,
28
33
  verifyStatementAsContainedAssertion,
@@ -77,15 +82,14 @@ export default verifyStatement;
77
82
  export function verifyStatementAsEquality(statementNode, assignments, derived, localContext) {
78
83
  let statementVerifiedAsEquality = false;
79
84
 
80
- const statementEquality = isStatementEquality(statementNode);
85
+ const equalityNode = equalityNodeQuery(statementNode);
81
86
 
82
- if (statementEquality) {
87
+ if (equalityNode !== null) {
83
88
  const statementString = localContext.nodeAsString(statementNode);
84
89
 
85
90
  localContext.trace(`Verifying the '${statementString}' statement as an equality...`, statementNode);
86
91
 
87
- const equalityNode = equalityNodeQuery(statementNode),
88
- equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
92
+ const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
89
93
  const verifiedAhead = true;
90
94
 
91
95
  return verifiedAhead;
@@ -104,15 +108,14 @@ export function verifyStatementAsEquality(statementNode, assignments, derived, l
104
108
  export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
105
109
  let statementVerifiedAsTypeAssertion = false;
106
110
 
107
- const statementTypeAssertion = isStatementTypeAssertion(statementNode);
111
+ const typeAssertionNode = typeAssertionNodeQuery(statementNode);
108
112
 
109
- if (statementTypeAssertion) {
113
+ if (typeAssertionNode !== null) {
110
114
  const statementString = localContext.nodeAsString(statementNode);
111
115
 
112
116
  localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
113
117
 
114
- const typeAssertionNode = typeAssertionNodeQuery(statementNode),
115
- typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, () => {
118
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, () => {
116
119
  const verifiedAhead = true;
117
120
 
118
121
  return verifiedAhead;
@@ -128,21 +131,126 @@ export function verifyStatementAsTypeAssertion(statementNode, assignments, deriv
128
131
  return statementVerifiedAsTypeAssertion;
129
132
  }
130
133
 
134
+ function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
135
+ let statementVerifiedAsJudgement = false;
136
+
137
+ const judgementNode = judgementNodeQuery(statementNode);
138
+
139
+ if (judgementNode !== null) {
140
+ const statementString = localContext.nodeAsString(statementNode);
141
+
142
+ localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
143
+
144
+ const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
145
+
146
+ statementVerifiedAsJudgement = judgementVerified; ///
147
+
148
+ if (statementVerifiedAsJudgement) {
149
+ localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
150
+ }
151
+ }
152
+
153
+ return statementVerifiedAsJudgement;
154
+ }
155
+
156
+ function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
157
+ let statementVerifiedAsMetavariable = false;
158
+
159
+ const metavariableNode = metavariableNodeQuery(statementNode);
160
+
161
+ if (metavariableNode !== null) {
162
+ const statementString = localContext.nodeAsString(statementNode);
163
+
164
+ localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
165
+
166
+ const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
167
+
168
+ if (metavariable !== null) {
169
+ const metaTypeName = metavariable.getMetaTypeName();
170
+
171
+ if (metaTypeName === STATEMENT_META_TYPE_NAME) {
172
+ statementVerifiedAsMetavariable = true;
173
+ }
174
+ }
175
+
176
+ if (statementVerifiedAsMetavariable) {
177
+ localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
178
+ }
179
+ }
180
+
181
+ return statementVerifiedAsMetavariable;
182
+ }
183
+
184
+ function verifyStatementAsDefinedAssertion(statementNode, assignments, derived, localContext) {
185
+ let statementVerifiedAsDefinedAssertion = false;
186
+
187
+ const definedAssertionNode = definedAssertionNodeQuery(statementNode);
188
+
189
+ if (definedAssertionNode !== null) {
190
+ const statementString = localContext.nodeAsString(statementNode);
191
+
192
+ localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
193
+
194
+ const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments, derived, localContext, () => {
195
+ const verifiedAhead = true;
196
+
197
+ return verifiedAhead;
198
+ });
199
+
200
+ statementVerifiedAsDefinedAssertion = definedAssertionVerified; ///
201
+
202
+ if (statementVerifiedAsDefinedAssertion) {
203
+ localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
204
+ }
205
+ }
206
+
207
+ return statementVerifiedAsDefinedAssertion;
208
+ }
209
+
210
+ function verifyStatementAsContainedAssertion(statementNode, assignments, derived, localContext) {
211
+ let statementVerifiedAsContainedAssertion = false;
212
+
213
+ const containedAssertionNode = containedAssertionNodeQuery(statementNode);
214
+
215
+ if (containedAssertionNode !== null) {
216
+ const statementString = localContext.nodeAsString(statementNode);
217
+
218
+ localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
219
+
220
+ const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext, () => {
221
+ const verifiedAhead = true;
222
+
223
+ return verifiedAhead;
224
+ });
225
+
226
+ statementVerifiedAsContainedAssertion = containedAssertionVerified; ///
227
+
228
+ if (statementVerifiedAsContainedAssertion) {
229
+ localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
230
+ }
231
+ }
232
+
233
+ return statementVerifiedAsContainedAssertion;
234
+ }
235
+
131
236
  function verifyStatementAgainstCombinators(statementNode, assignments, derived, localContext) {
132
237
  let statementVerifiedAgainstCombinators = false;
133
238
 
134
- const statementEquality = isStatementEquality(statementNode),
135
- statementTypeAssertion = isStatementTypeAssertion(statementNode),
136
- statementDefinedAssertion = isStatementDefinedAssertion(statementNode),
137
- statementContainedAssertion = isStatementContainedAssertion(statementNode);
239
+ const equalityNode = equalityNodeQuery(statementNode),
240
+ judgementNode = judgementNodeQuery(statementNode),
241
+ metavariableNode = metavariableNodeQuery(statementNode),
242
+ typeAssertionNode = typeAssertionNodeQuery(statementNode),
243
+ definedAssertionNode = definedAssertionNodeQuery(statementNode),
244
+ containedAssertionNode = containedAssertionNodeQuery(statementNode);
138
245
 
139
- if (!statementEquality && !statementTypeAssertion && !statementDefinedAssertion && !statementContainedAssertion) {
140
- let combinators = localContext.getCombinators();
246
+ if ( (equalityNode === null) &&
247
+ (judgementNode === null) &&
248
+ (metavariableNode === null) &&
249
+ (typeAssertionNode === null) &&
250
+ (definedAssertionNode === null) &&
251
+ (containedAssertionNode === null) ) {
141
252
 
142
- combinators = [ ///
143
- bracketedCombinator,
144
- ...combinators
145
- ];
253
+ const combinators = localContext.getCombinators();
146
254
 
147
255
  statementVerifiedAgainstCombinators = combinators.some((combinator) => {
148
256
  const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, localContext);
@@ -180,18 +288,4 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
180
288
  }
181
289
 
182
290
  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
- }
291
+ }
@@ -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;