occam-verify-cli 0.0.922 → 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 (150) hide show
  1. package/lib/axiom.js +9 -9
  2. package/lib/conclusion.js +11 -41
  3. package/lib/conjecture.js +9 -9
  4. package/lib/constants.js +1 -13
  5. package/lib/context/file.js +3 -3
  6. package/lib/context/local.js +19 -59
  7. package/lib/declaration.js +15 -15
  8. package/lib/lemma.js +9 -9
  9. package/lib/metaLemma.js +7 -7
  10. package/lib/metatheorem.js +7 -7
  11. package/lib/metavariable.js +8 -1
  12. package/lib/mixins/nodesVerifier/metaLevel.js +6 -6
  13. package/lib/premise.js +14 -91
  14. package/lib/{step/proof.js → proofStep.js} +1 -1
  15. package/lib/rule.js +1 -45
  16. package/lib/ruleNames.js +1 -9
  17. package/lib/substitution/statementForMetavariable.js +9 -1
  18. package/lib/substitution.js +1 -8
  19. package/lib/supposition.js +55 -1
  20. package/lib/theorem.js +9 -9
  21. package/lib/topLevelAssertion.js +186 -0
  22. package/lib/utilities/customGrammar.js +2 -2
  23. package/lib/utilities/match.js +13 -50
  24. package/lib/utilities/node.js +2 -27
  25. package/lib/utilities/tokens.js +1 -8
  26. package/lib/utilities/verify.js +8 -24
  27. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +29 -29
  28. package/lib/verifier/nodes/metaLevel.js +13 -13
  29. package/lib/verify/axiom.js +4 -4
  30. package/lib/verify/conclusion.js +10 -11
  31. package/lib/verify/conjecture.js +4 -4
  32. package/lib/verify/containedAssertion.js +91 -0
  33. package/lib/verify/declaration.js +7 -7
  34. package/lib/verify/definedAssertion.js +115 -0
  35. package/lib/verify/derivation.js +7 -7
  36. package/lib/verify/frame.js +2 -2
  37. package/lib/verify/judgement.js +2 -2
  38. package/lib/verify/lemma.js +5 -5
  39. package/lib/verify/metaLemma.js +12 -12
  40. package/lib/verify/metastatement.js +48 -67
  41. package/lib/verify/metatheorem.js +12 -12
  42. package/lib/verify/metavariable.js +2 -2
  43. package/lib/verify/premise.js +11 -30
  44. package/lib/verify/proof.js +3 -3
  45. package/lib/verify/proofStep.js +8 -8
  46. package/lib/verify/rule.js +10 -10
  47. package/lib/verify/statement/qualified.js +38 -15
  48. package/lib/verify/statement/unqualified.js +38 -10
  49. package/lib/verify/statement.js +85 -92
  50. package/lib/verify/subDerivation.js +3 -3
  51. package/lib/verify/subproof.js +3 -3
  52. package/lib/verify/supposition.js +3 -3
  53. package/lib/verify/termAsConstructor.js +2 -2
  54. package/lib/verify/theorem.js +4 -4
  55. package/package.json +2 -2
  56. package/src/axiom.js +4 -4
  57. package/src/conclusion.js +13 -52
  58. package/src/conjecture.js +4 -4
  59. package/src/constants.js +0 -3
  60. package/src/context/file.js +2 -2
  61. package/src/context/local.js +21 -67
  62. package/src/declaration.js +19 -19
  63. package/src/lemma.js +4 -4
  64. package/src/metaLemma.js +4 -4
  65. package/src/metatheorem.js +4 -4
  66. package/src/metavariable.js +6 -0
  67. package/src/mixins/nodesVerifier/metaLevel.js +8 -8
  68. package/src/premise.js +20 -137
  69. package/src/rule.js +0 -67
  70. package/src/ruleNames.js +0 -2
  71. package/src/substitution/statementForMetavariable.js +14 -0
  72. package/src/substitution.js +0 -6
  73. package/src/supposition.js +46 -0
  74. package/src/theorem.js +4 -4
  75. package/src/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +36 -23
  76. package/src/utilities/customGrammar.js +1 -2
  77. package/src/utilities/match.js +13 -60
  78. package/src/utilities/node.js +3 -32
  79. package/src/utilities/tokens.js +0 -8
  80. package/src/utilities/verify.js +4 -20
  81. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +36 -37
  82. package/src/verifier/nodes/metaLevel.js +17 -17
  83. package/src/verify/axiom.js +5 -4
  84. package/src/verify/conclusion.js +9 -13
  85. package/src/verify/conjecture.js +5 -4
  86. package/src/verify/{statementAsContainedAssertion.js → containedAssertion.js} +20 -36
  87. package/src/verify/declaration.js +8 -8
  88. package/src/verify/{statementAsDefinedAssertion.js → definedAssertion.js} +22 -37
  89. package/src/verify/derivation.js +6 -6
  90. package/src/verify/frame.js +1 -1
  91. package/src/verify/judgement.js +1 -1
  92. package/src/verify/lemma.js +8 -5
  93. package/src/verify/metaLemma.js +24 -24
  94. package/src/verify/metastatement.js +48 -76
  95. package/src/verify/metatheorem.js +23 -23
  96. package/src/verify/metavariable.js +1 -1
  97. package/src/verify/premise.js +14 -46
  98. package/src/verify/proof.js +2 -2
  99. package/src/verify/proofStep.js +4 -4
  100. package/src/verify/rule.js +11 -11
  101. package/src/verify/statement/qualified.js +56 -21
  102. package/src/verify/statement/unqualified.js +52 -10
  103. package/src/verify/statement.js +133 -39
  104. package/src/verify/subDerivation.js +2 -2
  105. package/src/verify/subproof.js +2 -2
  106. package/src/verify/supposition.js +1 -1
  107. package/src/verify/termAsConstructor.js +2 -2
  108. package/src/verify/theorem.js +7 -4
  109. package/lib/axiomLemmaTheoremConjecture.js +0 -174
  110. package/lib/metaConsequent.js +0 -108
  111. package/lib/metaLemmaMetatheorem.js +0 -191
  112. package/lib/metaSupposition.js +0 -160
  113. package/lib/node/metastatement/bracketed.js +0 -16
  114. package/lib/step/metaproof.js +0 -106
  115. package/lib/substitution/metastatementForMetavariable.js +0 -173
  116. package/lib/verify/metaConsequent.js +0 -50
  117. package/lib/verify/metaDerivation.js +0 -31
  118. package/lib/verify/metaSubDerivation.js +0 -25
  119. package/lib/verify/metaSubproof.js +0 -34
  120. package/lib/verify/metaSupposition.js +0 -61
  121. package/lib/verify/metaSuppositions.js +0 -28
  122. package/lib/verify/metaproof.js +0 -31
  123. package/lib/verify/metaproofStep.js +0 -98
  124. package/lib/verify/metastatement/qualified.js +0 -95
  125. package/lib/verify/metastatement/unqualified.js +0 -37
  126. package/lib/verify/metastatementAsContainedAssertion.js +0 -109
  127. package/lib/verify/metastatementAsDefinedAssertion.js +0 -132
  128. package/lib/verify/metavariableAgainstMetastatement.js +0 -44
  129. package/lib/verify/statementAsContainedAssertion.js +0 -109
  130. package/lib/verify/statementAsDefinedAssertion.js +0 -132
  131. package/src/metaConsequent.js +0 -83
  132. package/src/metaLemmaMetatheorem.js +0 -188
  133. package/src/metaSupposition.js +0 -127
  134. package/src/node/metastatement/bracketed.js +0 -9
  135. package/src/step/metaproof.js +0 -73
  136. package/src/substitution/metastatementForMetavariable.js +0 -90
  137. package/src/verify/metaConsequent.js +0 -61
  138. package/src/verify/metaDerivation.js +0 -23
  139. package/src/verify/metaSubDerivation.js +0 -22
  140. package/src/verify/metaSubproof.js +0 -32
  141. package/src/verify/metaSupposition.js +0 -78
  142. package/src/verify/metaSuppositions.js +0 -17
  143. package/src/verify/metaproof.js +0 -28
  144. package/src/verify/metaproofStep.js +0 -137
  145. package/src/verify/metastatement/qualified.js +0 -130
  146. package/src/verify/metastatement/unqualified.js +0 -34
  147. package/src/verify/metastatementAsContainedAssertion.js +0 -127
  148. package/src/verify/metastatementAsDefinedAssertion.js +0 -156
  149. package/src/verify/metavariableAgainstMetastatement.js +0 -42
  150. /package/src/{step/proof.js → proofStep.js} +0 -0
@@ -2,142 +2,114 @@
2
2
 
3
3
  import verifyJudgement from "../verify/judgement";
4
4
  import metaLevelNodeVerifier from "../verifier/node/metaLevel";
5
- import verifyMetastatementAsDefinedAssertion from "./metastatementAsDefinedAssertion";
6
- import verifyMetastatementAsContainedAssertion from "./metastatementAsContainedAssertion";
7
5
 
8
6
  import { nodeQuery } from "../utilities/query";
9
7
 
10
- const judgementNodeQuery = nodeQuery("/metastatement/judgement!");
8
+ const judgementNodeQuery = nodeQuery("/statement/judgement!");
11
9
 
12
- function verifyMetastatement(metastatementNode, assignments, derived, localContext) {
13
- let metastatementVerified;
10
+ function verifyStatement(statementNode, assignments, derived, localContext) {
11
+ let statementVerified;
14
12
 
15
- const metastatementString = localContext.nodeAsString(metastatementNode);
13
+ const statementString = localContext.nodeAsString(statementNode);
16
14
 
17
- localContext.trace(`Verifying the '${metastatementString}' metastatement...`, metastatementNode);
15
+ localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
18
16
 
19
- const verifyMetaStatementFunctions = [
20
- verifyMetastatementAsJudgement,
21
- verifyMetastatementAsDefinedAssertion,
22
- verifyMetastatementAsContainedAssertion,
23
- verifyMetastatementAsIs
17
+ const verifyStatementFunctions = [
18
+ verifyStatementAsIs
24
19
  ];
25
20
 
26
- metastatementVerified = verifyMetaStatementFunctions.some((verifyStatementFunction) => {
27
- const metastatementVerified = verifyStatementFunction(metastatementNode, assignments, derived, localContext);
21
+ statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
22
+ const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
28
23
 
29
- if (metastatementVerified) {
24
+ if (statementVerified) {
30
25
  return true;
31
26
  }
32
27
  });
33
28
 
34
- if (metastatementVerified) {
35
- localContext.debug(`...verified the '${metastatementString}' metastatement.`, metastatementNode);
29
+ if (statementVerified) {
30
+ localContext.debug(`...verified the '${statementString}' statement.`, statementNode);
36
31
  }
37
32
 
38
- return metastatementVerified;
33
+ return statementVerified;
39
34
  }
40
35
 
41
36
  Object.assign(metaLevelNodeVerifier, {
42
- verifyMetastatement
37
+ verifyStatement
43
38
  });
44
39
 
45
- export default verifyMetastatement;
40
+ export default verifyStatement;
46
41
 
47
- function verifyMetastatementAsJudgement(metastatementNode, assignments, derived, localContext) {
48
- let metastatementVerifiedAsJudgement = false;
42
+ function verifyStatementAsIs(statementNode, assignments, derived, localContext) {
43
+ let statementVerifiedAsIs;
49
44
 
50
- const metastatementJudgement = isMetastatementJudgement(metastatementNode);
45
+ const statementJudgement = isStatementJudgement(statementNode);
51
46
 
52
- if (metastatementJudgement) {
53
- const metastatementString = localContext.nodeAsString(metastatementNode);
47
+ if (!statementJudgement) {
48
+ const statementString = localContext.nodeAsString(statementNode);
54
49
 
55
- localContext.trace(`Verifying the '${metastatementString}' metastatement as a judgement...`, metastatementNode);
50
+ localContext.trace(`Verifying the '${statementString}' statement as is...`, statementNode);
56
51
 
57
- const judgementNode = judgementNodeQuery(metastatementNode),
58
- judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
59
-
60
- metastatementVerifiedAsJudgement = judgementVerified; ///
61
-
62
- if (metastatementVerifiedAsJudgement) {
63
- localContext.debug(`...verified the '${metastatementString}' metastatement as a judgement.`, metastatementNode);
64
- }
65
- }
66
-
67
- return metastatementVerifiedAsJudgement;
68
- }
69
-
70
- function verifyMetastatementAsIs(metastatementNode, assignments, derived, localContext) {
71
- let metastatementVerifiedAsIs;
72
-
73
- const metastatementJudgement = isMetastatementJudgement(metastatementNode);
74
-
75
- if (!metastatementJudgement) {
76
- const metastatementString = localContext.nodeAsString(metastatementNode);
77
-
78
- localContext.trace(`Verifying the '${metastatementString}' metastatement as is...`, metastatementNode);
79
-
80
- const verifyMetastatementAsIsFunctions = [
81
- verifyDerivedMetastatementAsIs,
82
- verifyStatedMetastatementAsIs
52
+ const verifyStatementAsIsFunctions = [
53
+ verifyDerivedStatementAsIs,
54
+ verifyStatedStatementAsIs
83
55
  ];
84
56
 
85
- metastatementVerifiedAsIs = verifyMetastatementAsIsFunctions.some((verifyMetastatementAsIsFunction) => {
86
- const metastatementVerifiedAsIs = verifyMetastatementAsIsFunction(metastatementNode, assignments, derived, localContext);
57
+ statementVerifiedAsIs = verifyStatementAsIsFunctions.some((verifyStatementAsIsFunction) => {
58
+ const statementVerifiedAsIs = verifyStatementAsIsFunction(statementNode, assignments, derived, localContext);
87
59
 
88
- if (metastatementVerifiedAsIs) {
60
+ if (statementVerifiedAsIs) {
89
61
  return true;
90
62
  }
91
63
  });
92
64
 
93
- if (metastatementVerifiedAsIs) {
94
- localContext.debug(`...verified the '${metastatementString}' metastatement as is.`, metastatementNode);
65
+ if (statementVerifiedAsIs) {
66
+ localContext.debug(`...verified the '${statementString}' statement as is.`, statementNode);
95
67
  }
96
68
  }
97
69
 
98
- return metastatementVerifiedAsIs;
70
+ return statementVerifiedAsIs;
99
71
  }
100
72
 
101
- function verifyDerivedMetastatementAsIs(metastatementNode, assignments, derived, localContext) {
102
- let derivedMetastatementVerifiedAsIs = false;
73
+ function verifyDerivedStatementAsIs(statementNode, assignments, derived, localContext) {
74
+ let derivedStatementVerifiedAsIs = false;
103
75
 
104
76
  if (derived) {
105
- const metastatementString = localContext.nodeAsString(metastatementNode);
77
+ const statementString = localContext.nodeAsString(statementNode);
106
78
 
107
- localContext.debug(`Cannot verify the derived '${metastatementString}' metastatement as is.`, metastatementNode);
79
+ localContext.debug(`Cannot verify the '${statementString}' derived statement as is.`, statementNode);
108
80
  }
109
81
 
110
- return derivedMetastatementVerifiedAsIs;
82
+ return derivedStatementVerifiedAsIs;
111
83
  }
112
84
 
113
- function verifyStatedMetastatementAsIs(metastatementNode, assignments, derived, localContext) {
114
- let statedMetastatementVerifiedAsIs = false;
85
+ function verifyStatedStatementAsIs(statementNode, assignments, derived, localContext) {
86
+ let statedStatementVerifiedAsIs = false;
115
87
 
116
88
  if (!derived) {
117
- const metastatementString = localContext.nodeAsString(metastatementNode);
89
+ const statementString = localContext.nodeAsString(statementNode);
118
90
 
119
- localContext.trace(`Verifying the stated '${metastatementString}' metastatement as is...`, metastatementNode);
91
+ localContext.trace(`Verifying the '${statementString}' stated statement as is...`, statementNode);
120
92
 
121
- const nonTerminalNode = metastatementNode, ///
93
+ const nonTerminalNode = statementNode, ///
122
94
  nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
123
95
  const verifiedAhead = true;
124
96
 
125
97
  return verifiedAhead;
126
98
  });
127
99
 
128
- statedMetastatementVerifiedAsIs = nonTerminalNodeVerified; ///
100
+ statedStatementVerifiedAsIs = nonTerminalNodeVerified; ///
129
101
 
130
- if (statedMetastatementVerifiedAsIs) {
131
- localContext.debug(`...verified the stated '${metastatementString}' metastatement as is.`, metastatementNode);
102
+ if (statedStatementVerifiedAsIs) {
103
+ localContext.debug(`...verified the '${statementString}' stated statement as is.`, statementNode);
132
104
  }
133
105
  }
134
106
 
135
- return statedMetastatementVerifiedAsIs;
107
+ return statedStatementVerifiedAsIs;
136
108
  }
137
109
 
138
- function isMetastatementJudgement(metastatementNode) {
139
- const judgementNode = judgementNodeQuery(metastatementNode),
140
- metastatementJudgement = (judgementNode !== null);
110
+ function isStatementJudgement(statementNode) {
111
+ const judgementNode = judgementNodeQuery(statementNode),
112
+ statementJudgement = (judgementNode !== null);
141
113
 
142
- return metastatementJudgement;
114
+ return statementJudgement;
143
115
  }
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ import verifyProof from "../verify/proof";
3
4
  import Metatheorem from "../metatheorem";
4
5
  import verifyLabels from "../verify/labels";
5
6
  import LocalContext from "../context/local";
6
- import verifyMetaproof from "../verify/metaproof";
7
- import verifyMetaConsequent from "../verify/metaConsequent";
8
- import verifyMetaSuppositions from "../verify/metaSuppositions";
7
+ import verifyConsequent from "../verify/consequent";
8
+ import verifySuppositions from "../verify/suppositions";
9
9
 
10
10
  import { first } from "../utilities/array";
11
11
  import { nodeQuery, nodesQuery } from "../utilities/query";
12
12
 
13
13
  const labelNodesQuery = nodesQuery("/metatheorem/label"),
14
- metaproofNodeQuery = nodeQuery("/metatheorem/metaproof!"),
15
- metaConsequentNodeQuery = nodeQuery("/metatheorem/metaConsequent!"),
16
- metaSuppositionsNodeQuery = nodesQuery("/metatheorem/metaSupposition");
14
+ proofNodeQuery = nodeQuery("/metatheorem/proof!"),
15
+ consequentNodeQuery = nodeQuery("/metatheorem/consequent!"),
16
+ suppositionsNodeQuery = nodesQuery("/metatheorem/supposition");
17
17
 
18
18
  export default function verifyMetatheorem(metatheoremNode, fileContext) {
19
19
  let metatheoremVerified = false;
@@ -27,26 +27,26 @@ 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 = [],
32
- metaSuppositions = [],
33
- metaSuppositionNodes = metaSuppositionsNodeQuery(metatheoremNode),
34
- metaSuppositionsVerified = verifyMetaSuppositions(metaSuppositionNodes, metaSuppositions, substitutions, localContext);
30
+ const localContext = LocalContext.fromFileContext(fileContext),
31
+ suppositions = [],
32
+ suppositionNodes = suppositionsNodeQuery(metatheoremNode),
33
+ suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
35
34
 
36
- if (metaSuppositionsVerified) {
37
- const metaConsequents = [],
38
- metaConsequentNode = metaConsequentNodeQuery(metatheoremNode),
39
- metaConsequentVerified = verifyMetaConsequent(metaConsequentNode, metaConsequents, substitutions, localContext);
35
+ if (suppositionsVerified) {
36
+ const consequents = [],
37
+ consequentNode = consequentNodeQuery(metatheoremNode),
38
+ consequentVerified = verifyConsequent(consequentNode, consequents, localContext);
40
39
 
41
- if (metaConsequentVerified) {
42
- const metaproofNode = metaproofNodeQuery(metatheoremNode),
43
- firstMetaConsequent = first(metaConsequents),
44
- metaConsequent = firstMetaConsequent, ///
45
- metastatementNode = metaConsequent.getMetastatementNode(),
46
- metaproofVerified = verifyMetaproof(metaproofNode, metastatementNode, substitutions, localContext);
40
+ if (consequentVerified) {
41
+ const proofNode = proofNodeQuery(metatheoremNode),
42
+ firstConsequent = first(consequents),
43
+ consequent = firstConsequent, ///
44
+ substitutions = [],
45
+ statementNode = consequent.getStatementNode(),
46
+ proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
47
47
 
48
- if (metaproofVerified) {
49
- const metatheorem = Metatheorem.fromLabelsMetaSuppositionsMetaConsequentSubstitutionsAndFileContext(labels, metaSuppositions, metaConsequent, substitutions, fileContext);
48
+ if (proofVerified) {
49
+ const metatheorem = Metatheorem.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
50
50
 
51
51
  fileContext.addMetatheorem(metatheorem);
52
52
 
@@ -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();
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  import Premise from "../premise";
4
- import MetaproofStep from "../step/metaproof";
4
+ import ProofStep from "../proofStep";
5
5
  import verifyUnqualifiedStatement from "../verify/statement/unqualified";
6
- import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
7
6
 
8
7
  import { nodeQuery } from "../utilities/query";
9
8
  import { assignAssignment } from "../utilities/assignments";
10
9
 
11
10
  const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
12
- metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!"),
13
- unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!"),
14
- unqualifiedMetastatementNodeQuery = nodeQuery("/premise/unqualifiedMetastatement!");
11
+ unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!");
15
12
 
16
13
  export default function verifyPremise(premiseNode, premises, localContext) {
17
14
  let premiseVerified;
@@ -21,56 +18,27 @@ export default function verifyPremise(premiseNode, premises, localContext) {
21
18
  localContext.trace(`Verifying the '${premiseString}' premise...`, premiseNode);
22
19
 
23
20
  const unqualifiedStatementNode = unqualifiedStatementNodeQuery(premiseNode),
24
- unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(premiseNode);
21
+ derived = false,
22
+ assignments = [],
23
+ unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
25
24
 
26
- if (unqualifiedStatementNode !== null) {
27
- const derived = false,
28
- assignments = [],
29
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
25
+ if (unqualifiedStatementVerified) {
26
+ const assignmentAssigned = assignAssignment(assignments, localContext);
30
27
 
31
- if (unqualifiedStatementVerified) {
32
- const assignmentAssigned = assignAssignment(assignments, localContext);
28
+ if (assignmentAssigned) {
29
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
30
+ metaproofStep = ProofStep.fromStatementNode(statementNode),
31
+ premise = Premise.fromStatementNode(statementNode);
33
32
 
34
- premiseVerified = assignmentAssigned; ///
35
- }
36
- }
33
+ premises.push(premise);
37
34
 
38
- if (unqualifiedMetastatementNode !== null) {
39
- const derived = false,
40
- assignments = [],
41
- unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localContext);
35
+ localContext.addProofStep(metaproofStep);
42
36
 
43
- if (unqualifiedMetastatementVerified) {
44
- const assignmentAssigned = assignAssignment(assignments, localContext);
45
-
46
- premiseVerified = assignmentAssigned; ///
37
+ premiseVerified = true;
47
38
  }
48
39
  }
49
40
 
50
41
  if (premiseVerified) {
51
- let premise,
52
- metaproofStep;
53
-
54
- if (unqualifiedStatementNode !== null) {
55
- const statementNode = statementNodeQuery(unqualifiedStatementNode);
56
-
57
- metaproofStep = MetaproofStep.fromMetastatementNode(statementNode);
58
-
59
- premise = Premise.fromStatementNode(statementNode);
60
- }
61
-
62
- if (unqualifiedMetastatementNode !== null) {
63
- const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
64
-
65
- metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
66
-
67
- premise = Premise.fromMetastatementNode(metastatementNode);
68
- }
69
-
70
- premises.push(premise);
71
-
72
- localContext.addMetaproofStep(metaproofStep);
73
-
74
42
  localContext.debug(`...verified the '${premiseString}' premise.`, premiseNode);
75
43
  }
76
44
 
@@ -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();
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import ProofStep from "../step/proof";
3
+ import ProofStep from "../proofStep";
4
4
  import verifySubproof from "../verify/subproof";
5
5
  import verifySubDerivation from "../verify/subDerivation";
6
6
  import verifyQualifiedStatement from "../verify/statement/qualified";
@@ -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);
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  import Rule from "../rule";
4
+ import verifyProof from "../verify/proof";
4
5
  import LocalContext from "../context/local";
5
6
  import verifyLabels from "../verify/labels";
6
7
  import verifyPremises from "../verify/premises";
7
- import verifyMetaproof from "../verify/metaproof";
8
8
  import verifyConclusion from "../verify/conclusion";
9
9
 
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
- metaproofNodeQuery = nodeQuery("/rule/metaproof!"),
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
 
@@ -38,20 +38,20 @@ export default function verifyRule(ruleNode, fileContext) {
38
38
  conclusionVerified = verifyConclusion(conclusionNode, conclusions, localContext);
39
39
 
40
40
  if (conclusionVerified) {
41
- let metaproofVerified = true; ///
41
+ let proofVerified = true; ///
42
42
 
43
43
  const firstConclusion = first(conclusions),
44
- metaproofNode = metaproofNodeQuery(ruleNode),
44
+ proofNode = proofNodeQuery(ruleNode),
45
45
  conclusion = firstConclusion; ///
46
46
 
47
- if (metaproofNode !== null) {
47
+ if (proofNode !== null) {
48
48
  const substitutions = [],
49
- metastatementNode = conclusion.getMetastatementNode();
49
+ statementNode = conclusion.getStatementNode();
50
50
 
51
- metaproofVerified = verifyMetaproof(metaproofNode, metastatementNode, substitutions, localContext);
51
+ proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
52
52
  }
53
53
 
54
- if (metaproofVerified) {
54
+ if (proofVerified) {
55
55
  const rule = Rule.fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext);
56
56
 
57
57
  fileContext.addRule(rule);
@@ -6,24 +6,26 @@ import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../..
6
6
  const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
7
7
  metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
8
8
 
9
- export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext) {
9
+ import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
10
+
11
+ export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
10
12
  let qualifiedStatementVerified;
11
13
 
12
14
  const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
13
15
 
14
16
  localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
15
17
 
16
- const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
17
- verifyQualifiedStatementFunctions = [
18
- verifyQualifiedStatementAAgainstRule,
19
- verifyQualifiedStatementAAgainstAxiom,
20
- verifyQualifiedStatementAAgainstLemma,
21
- verifyQualifiedStatementAAgainstTheorem,
22
- verifyQualifiedStatementAAgainstConjecture
23
- ];
18
+ const verifyQualifiedStatementFunctions = [
19
+ verifyQualifiedStatementAAgainstRule,
20
+ verifyQualifiedStatementAAgainstAxiom,
21
+ verifyQualifiedStatementAAgainstLemma,
22
+ verifyQualifiedStatementAAgainstTheorem,
23
+ verifyQualifiedStatementAAgainstConjecture,
24
+ verifyQualifiedStatementAAgainstReference
25
+ ];
24
26
 
25
27
  qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
26
- const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, localContext);
28
+ const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
27
29
 
28
30
  if (qualifiedStatementVerified) {
29
31
  return true;
@@ -35,7 +37,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
35
37
  statementNode = statementNodeQuery(qualifiedStatementNode),
36
38
  statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
37
39
 
38
- qualifiedStatementVerified = statementVerified; ///
40
+ qualifiedStatementVerified = statementVerified; ///
39
41
  }
40
42
 
41
43
  if (qualifiedStatementVerified) {
@@ -45,10 +47,11 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
45
47
  return qualifiedStatementVerified;
46
48
  }
47
49
 
48
- function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
50
+ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, substitutions, localContext) {
49
51
  let qualifiedStatementVerifiedAgainstRule = false;
50
52
 
51
- const rule = localContext.findRuleByMetavariableNode(metavariableNode);
53
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
54
+ rule = localContext.findRuleByMetavariableNode(metavariableNode);
52
55
 
53
56
  if (rule !== null) {
54
57
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -69,10 +72,11 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariab
69
72
  return qualifiedStatementVerifiedAgainstRule;
70
73
  }
71
74
 
72
- function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
75
+ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, substitutions, localContext) {
73
76
  let qualifiedStatementVerifiedAgainstAxiom = false;
74
77
 
75
- const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
78
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
79
+ axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
76
80
 
77
81
  if (axiom !== null) {
78
82
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -93,10 +97,11 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavaria
93
97
  return qualifiedStatementVerifiedAgainstAxiom;
94
98
  }
95
99
 
96
- function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
100
+ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, substitutions, localContext) {
97
101
  let qualifiedStatementVerifiedAgainstLemma = false;
98
102
 
99
- const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
103
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
104
+ lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
100
105
 
101
106
  if (lemma !== null) {
102
107
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -117,10 +122,11 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavaria
117
122
  return qualifiedStatementVerifiedAgainstLemma;
118
123
  }
119
124
 
120
- function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
125
+ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, substitutions, localContext) {
121
126
  let qualifiedStatementVerifiedAgainstTheorem = false;
122
127
 
123
- const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
128
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
129
+ theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
124
130
 
125
131
  if (theorem !== null) {
126
132
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -141,10 +147,11 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavar
141
147
  return qualifiedStatementVerifiedAgainstTheorem;
142
148
  }
143
149
 
144
- function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
150
+ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, substitutions, localContext) {
145
151
  let qualifiedStatementVerifiedAgainstConjecture = false;
146
152
 
147
- const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
153
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
154
+ conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
148
155
 
149
156
  if (conjecture !== null) {
150
157
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -165,6 +172,34 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, meta
165
172
  return qualifiedStatementVerifiedAgainstConjecture;
166
173
  }
167
174
 
175
+ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substitutions, localContext) {
176
+ let qualifiedStatementVerifiedAgainstReference = false;
177
+
178
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
179
+ metavariableString = localContext.nodeAsString(metavariableNode),
180
+ metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
181
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
182
+
183
+ localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference...`, qualifiedStatementNode);
184
+
185
+ if (metavariablePresent) {
186
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
187
+ metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
188
+ const verifiedAhead = true;
189
+
190
+ return verifiedAhead;
191
+ });
192
+
193
+ qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
194
+ }
195
+
196
+ if (qualifiedStatementVerifiedAgainstReference) {
197
+ localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference.`, qualifiedStatementNode);
198
+ }
199
+
200
+ return qualifiedStatementVerifiedAgainstReference;
201
+ }
202
+
168
203
  function verifyStatement(statementNode, assignments, derived, localContext) {
169
204
  let statementVerified;
170
205