occam-verify-cli 0.0.1003 → 0.0.1006

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 (183) hide show
  1. package/README.md +0 -2
  2. package/bin/abbreviations.js +1 -3
  3. package/bin/action/help.js +0 -2
  4. package/bin/action/verify.js +4 -24
  5. package/bin/defaults.js +0 -2
  6. package/bin/main.js +3 -4
  7. package/bin/options.js +0 -2
  8. package/bin/utilities/releaseContext.js +9 -2
  9. package/lib/assertion/subproof.js +106 -0
  10. package/lib/assignment/metavariable.js +2 -2
  11. package/lib/combinator.js +50 -16
  12. package/lib/conclusion.js +74 -14
  13. package/lib/context/file.js +191 -31
  14. package/lib/context/local.js +37 -49
  15. package/lib/context/release.js +25 -81
  16. package/lib/declaration/combinator.js +83 -0
  17. package/lib/derivation.js +86 -0
  18. package/lib/equality.js +3 -11
  19. package/lib/index.js +1 -1
  20. package/lib/judgement.js +3 -10
  21. package/lib/label.js +58 -16
  22. package/lib/log.js +3 -11
  23. package/lib/metaType.js +31 -19
  24. package/lib/metavariable.js +39 -12
  25. package/lib/mixins/statement/qualified/unify.js +118 -0
  26. package/lib/mixins/statement/unify.js +57 -0
  27. package/lib/mixins/statement/verify.js +184 -0
  28. package/lib/node/statement/combinator/bracketed.js +15 -11
  29. package/lib/ocmbinator/bracketed.js +52 -8
  30. package/lib/premise.js +109 -55
  31. package/lib/proof.js +91 -0
  32. package/lib/proofStep.js +78 -25
  33. package/lib/reference.js +62 -16
  34. package/lib/rule.js +146 -26
  35. package/lib/ruleNames.js +5 -5
  36. package/lib/statement/qualified.js +127 -0
  37. package/lib/statement/unqualified.js +89 -0
  38. package/lib/statement.js +176 -0
  39. package/lib/subDerivation.js +86 -0
  40. package/lib/subproof.js +155 -0
  41. package/lib/substitution/frameForMetavariable.js +14 -15
  42. package/lib/substitution/statementForMetavariable.js +23 -24
  43. package/lib/substitution/termForVariable.js +11 -12
  44. package/lib/substitution.js +9 -2
  45. package/lib/substitutions.js +14 -14
  46. package/lib/supposition.js +92 -61
  47. package/lib/unifier/statementWithCombinator.js +3 -3
  48. package/lib/unify/metavariableWithFrame.js +2 -2
  49. package/lib/unify/metavariableWithStatement.js +2 -2
  50. package/lib/unify/metavariableWithStatementGivenSubstitution.js +2 -2
  51. package/lib/unify/variableWithTerm.js +2 -2
  52. package/lib/utilities/node.js +13 -11
  53. package/lib/utilities/releaseContext.js +5 -6
  54. package/lib/utilities/string.js +8 -2
  55. package/lib/utilities/subproof.js +5 -5
  56. package/lib/utilities/tokens.js +10 -10
  57. package/lib/variable.js +1 -10
  58. package/lib/verifier/metaLevel.js +2 -2
  59. package/lib/verifier/topLevel.js +5 -5
  60. package/lib/verify/axiom.js +3 -5
  61. package/lib/verify/conjecture.js +4 -7
  62. package/lib/verify/consequent.js +2 -3
  63. package/lib/verify/declaration/combinator.js +2 -14
  64. package/lib/verify/declaration/metavariable.js +9 -10
  65. package/lib/verify/files.js +4 -4
  66. package/lib/verify/frame.js +12 -12
  67. package/lib/verify/lemma.js +4 -7
  68. package/lib/verify/metaLemma.js +4 -7
  69. package/lib/verify/metatheorem.js +4 -7
  70. package/lib/verify/proofStep.js +2 -31
  71. package/lib/verify/theorem.js +4 -7
  72. package/package.json +1 -1
  73. package/src/assertion/subproof.js +84 -0
  74. package/src/assignment/metavariable.js +2 -2
  75. package/src/combinator.js +45 -15
  76. package/src/conclusion.js +85 -13
  77. package/src/context/file.js +223 -11
  78. package/src/context/local.js +12 -16
  79. package/src/context/release.js +31 -100
  80. package/src/declaration/combinator.js +44 -0
  81. package/src/derivation.js +50 -0
  82. package/src/equality.js +2 -9
  83. package/src/index.js +0 -1
  84. package/src/judgement.js +2 -8
  85. package/src/label.js +56 -13
  86. package/src/log.js +2 -9
  87. package/src/metaType.js +26 -14
  88. package/src/metavariable.js +57 -9
  89. package/src/mixins/statement/qualified/unify.js +186 -0
  90. package/src/mixins/statement/unify.js +70 -0
  91. package/src/mixins/statement/verify.js +274 -0
  92. package/src/node/statement/combinator/bracketed.js +4 -3
  93. package/src/ocmbinator/bracketed.js +15 -12
  94. package/src/premise.js +138 -44
  95. package/src/proof.js +58 -0
  96. package/src/proofStep.js +92 -22
  97. package/src/reference.js +58 -12
  98. package/src/rule.js +199 -30
  99. package/src/ruleNames.js +1 -1
  100. package/src/statement/qualified.js +104 -0
  101. package/src/statement/unqualified.js +60 -0
  102. package/src/statement.js +179 -0
  103. package/src/subDerivation.js +52 -0
  104. package/src/subproof.js +99 -0
  105. package/src/substitution/frameForMetavariable.js +20 -17
  106. package/src/substitution/statementForMetavariable.js +31 -29
  107. package/src/substitution/termForVariable.js +15 -14
  108. package/src/substitution.js +8 -0
  109. package/src/substitutions.js +12 -13
  110. package/src/supposition.js +96 -51
  111. package/src/unifier/statementWithCombinator.js +6 -3
  112. package/src/unify/metavariableWithFrame.js +1 -1
  113. package/src/unify/metavariableWithStatement.js +1 -1
  114. package/src/unify/metavariableWithStatementGivenSubstitution.js +1 -1
  115. package/src/unify/variableWithTerm.js +1 -1
  116. package/src/utilities/node.js +18 -12
  117. package/src/utilities/releaseContext.js +5 -8
  118. package/src/utilities/string.js +6 -2
  119. package/src/utilities/subproof.js +2 -2
  120. package/src/utilities/tokens.js +7 -7
  121. package/src/variable.js +0 -10
  122. package/src/verifier/metaLevel.js +3 -2
  123. package/src/verifier/topLevel.js +6 -4
  124. package/src/verify/axiom.js +1 -2
  125. package/src/verify/conjecture.js +2 -3
  126. package/src/verify/consequent.js +1 -1
  127. package/src/verify/declaration/combinator.js +0 -20
  128. package/src/verify/declaration/metavariable.js +8 -12
  129. package/src/verify/files.js +3 -3
  130. package/src/verify/frame.js +11 -11
  131. package/src/verify/lemma.js +2 -3
  132. package/src/verify/metaLemma.js +2 -3
  133. package/src/verify/metatheorem.js +2 -3
  134. package/src/verify/proofStep.js +0 -41
  135. package/src/verify/theorem.js +2 -3
  136. package/lib/tokens/combinatorStatement/bracketed.js +0 -17
  137. package/lib/unify/premiseWithProofStep.js +0 -41
  138. package/lib/unify/premisesWithProofSteps.js +0 -31
  139. package/lib/unify/qualifiedStatement.js +0 -136
  140. package/lib/unify/statementWithBracketedCombinator.js +0 -30
  141. package/lib/unify/statementWithCombinator.js +0 -29
  142. package/lib/unify/statementWithCombinators.js +0 -31
  143. package/lib/unify/statementWithMetaType.js +0 -24
  144. package/lib/verify/conclusion.js +0 -39
  145. package/lib/verify/derivation.js +0 -31
  146. package/lib/verify/label.js +0 -37
  147. package/lib/verify/labels.js +0 -28
  148. package/lib/verify/premise.js +0 -45
  149. package/lib/verify/premises.js +0 -28
  150. package/lib/verify/proof.js +0 -34
  151. package/lib/verify/rule.js +0 -56
  152. package/lib/verify/statement/qualified.js +0 -41
  153. package/lib/verify/statement/unqualified.js +0 -45
  154. package/lib/verify/statement.js +0 -219
  155. package/lib/verify/statementAsCombinator.js +0 -33
  156. package/lib/verify/statementGivenMetaType.js +0 -52
  157. package/lib/verify/subproof.js +0 -34
  158. package/lib/verify/supposition.js +0 -45
  159. package/lib/verify/suppositions.js +0 -28
  160. package/src/tokens/combinatorStatement/bracketed.js +0 -10
  161. package/src/unify/premiseWithProofStep.js +0 -54
  162. package/src/unify/premisesWithProofSteps.js +0 -23
  163. package/src/unify/qualifiedStatement.js +0 -208
  164. package/src/unify/statementWithBracketedCombinator.js +0 -22
  165. package/src/unify/statementWithCombinator.js +0 -22
  166. package/src/unify/statementWithCombinators.js +0 -23
  167. package/src/unify/statementWithMetaType.js +0 -14
  168. package/src/verify/conclusion.js +0 -40
  169. package/src/verify/derivation.js +0 -23
  170. package/src/verify/label.js +0 -34
  171. package/src/verify/labels.js +0 -17
  172. package/src/verify/premise.js +0 -49
  173. package/src/verify/premises.js +0 -17
  174. package/src/verify/proof.js +0 -31
  175. package/src/verify/rule.js +0 -71
  176. package/src/verify/statement/qualified.js +0 -40
  177. package/src/verify/statement/unqualified.js +0 -49
  178. package/src/verify/statement.js +0 -312
  179. package/src/verify/statementAsCombinator.js +0 -27
  180. package/src/verify/statementGivenMetaType.js +0 -52
  181. package/src/verify/subproof.js +0 -32
  182. package/src/verify/supposition.js +0 -49
  183. package/src/verify/suppositions.js +0 -17
package/src/premise.js CHANGED
@@ -1,73 +1,167 @@
1
1
  "use strict";
2
2
 
3
+ import ProofStep from "./proofStep";
4
+ import LocalContext from "./context/local";
3
5
  import metaLevelUnifier from "./unifier/metaLevel";
6
+ import SubproofAssertion from "./assertion/subproof";
7
+ import UnqualifiedStatement from "./statement/unqualified";
4
8
 
5
- import { match } from "./utilities/array";
6
- import { nodeAsString } from "./utilities/string";
7
- import { nodeQuery, nodesQuery } from "./utilities/query";
9
+ import { trim } from "./utilities/string";
10
+ import { nodeQuery } from "./utilities/query";
11
+ import { assignAssignments } from "./utilities/assignments";
8
12
 
9
- const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
10
- subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
11
- subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement/statement!"),
12
- subproofLastProofStepStatementNodeQuery = nodeQuery("/subproof/subDerivation/lastProofStep/unqualifiedStatement|qualifiedStatement/statement!");
13
+ const unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement");
13
14
 
14
15
  export default class Premise {
15
- constructor(statementNode) {
16
- this.statementNode = statementNode;
16
+ constructor(fileContext, unqualifiedStatement) {
17
+ this.fileContext = fileContext;
18
+ this.unqualifiedStatement = unqualifiedStatement;
17
19
  }
18
20
 
19
- getStatementNode() {
20
- return this.statementNode;
21
+ getFileContext() {
22
+ return this.fileContext;
21
23
  }
22
24
 
23
- unifyStatement(statementNodeB, substitutions, localContextA, localContextB) {
24
- let statementUnified = false;
25
+ getUnqualifiedStatement() {
26
+ return this.unqualifiedStatement;
27
+ }
28
+
29
+ getString() { return this.unqualifiedStatement.getString(); }
30
+
31
+ getStatement() { return this.unqualifiedStatement.getStatement(); }
25
32
 
26
- if (this.statementNode !== null) {
27
- const nodeA = this.statementNode, ///
28
- nodeB = statementNodeB, ///
29
- unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
33
+ unifyProofStep(proofStep, substitutions, localContext) {
34
+ let proofStepUnified = false;
30
35
 
31
- statementUnified = unified; ///
36
+ const subproof = proofStep.getSubproof(),
37
+ statement = proofStep.getStatement();
38
+
39
+ substitutions.snapshot();
40
+
41
+ if (false) {
42
+ ///
43
+ } else if (subproof !== null) {
44
+ proofStepUnified = this.unifySubproof(subproof, substitutions, localContext);
45
+ } else if (statement !== null) {
46
+ proofStepUnified = this.unifyStatement(statement, substitutions, localContext);
47
+ }
48
+
49
+ proofStepUnified ?
50
+ substitutions.continue() :
51
+ substitutions.rollback(localContext);
52
+
53
+ return proofStepUnified;
54
+ }
55
+
56
+ unifyStatement(statement, substitutions, localContext) {
57
+ let statementUnified;
58
+
59
+ const premise = this, ///
60
+ statementString = statement.getString(),
61
+ premiseStatement = premise.getStatement(),
62
+ premiseStatementString = premiseStatement.getString();
63
+
64
+ localContext.trace(`Unifying the '${statementString}' statement with the premise's '${premiseStatementString}' statement...`);
65
+
66
+ const statementNode = statement.getNode(),
67
+ premiseStatementNode = premiseStatement.getNode(),
68
+ nodeA = premiseStatementNode, ///
69
+ nodeB = statementNode, ///
70
+ fileContextA = this.fileContext, ///
71
+ localContextA = LocalContext.fromFileContext(fileContextA),
72
+ localContextB = localContext, ///
73
+ unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
74
+
75
+ statementUnified = unified; ///
76
+
77
+ if (statementUnified) {
78
+ localContext.debug(`...unified the '${statementString}' statement with the premise's '${premiseStatementString}' statement.`);
32
79
  }
33
80
 
34
81
  return statementUnified;
35
82
  }
36
83
 
37
- unifySubproof(subproofNodeB, substitutions, localContextA, localContextB) {
84
+ unifySubproof(subproof, substitutions, localContext) {
38
85
  let subproofUnified = false;
39
86
 
40
- if (this.statementNode !== null) {
41
- const statementNodeA = this.statementNode,
42
- subproofAssertionNodeA = subproofAssertionNodeQuery(statementNodeA); ///
43
-
44
- if (subproofAssertionNodeA !== null) {
45
- const subproofAssertionStatementNodesA = subproofAssertionStatementNodesQuery(subproofAssertionNodeA), ///
46
- subproofSuppositionStatementNodesB = subproofSuppositionStatementNodesQuery(subproofNodeB), ///
47
- subproofLastProofStepStatementNodeB = subproofLastProofStepStatementNodeQuery(subproofNodeB), ///
48
- subproofStatementNodesB = [
49
- ...subproofSuppositionStatementNodesB,
50
- subproofLastProofStepStatementNodeB
51
- ];
52
-
53
- subproofUnified = match(subproofAssertionStatementNodesA, subproofStatementNodesB, (subproofAssertionStatementNodeA, subproofStatementNodeB) => {
54
- const nodeA = subproofAssertionStatementNodeA, ///
55
- nodeB = subproofStatementNodeB, ///
56
- unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
57
-
58
- if (unified) {
59
- return true;
60
- }
61
- });
62
- }
87
+ const premise = this, ///
88
+ subproofString = subproof.getString(),
89
+ premiseStatement = premise.getStatement(),
90
+ premiseStatementString = premiseStatement.getString();
91
+
92
+ localContext.trace(`Unifying the '${subproofString}' subproof with the premise's '${premiseStatementString}' statement...`);
93
+
94
+ const statement = this.unqualifiedStatement.getStatement(),
95
+ statementNode = statement.getNode(),
96
+ subproofAssertion = SubproofAssertion.fromStatementNode(statementNode, this.fileContext);
97
+
98
+ if (subproofAssertion !== null) {
99
+ subproofUnified = subproofAssertion.unifySubproof(subproof, substitutions, localContext);
100
+ }
101
+
102
+ if (subproofUnified) {
103
+ localContext.debug(`...unified the '${subproofString}' subproof with the premise's '${premiseStatementString}' statement.`);
63
104
  }
64
105
 
65
106
  return subproofUnified;
66
107
  }
67
108
 
68
- static fromStatementNode(statementNode) {
69
- const premise = new Premise(statementNode);
109
+ verify(localContext) {
110
+ let verified = false,
111
+ premiseString = this.getString(); ///
112
+
113
+ premiseString = trim(premiseString); ///
114
+
115
+ if (this.unqualifiedStatement !== null) {
116
+ localContext.trace(`Verifying the '${premiseString}' premise...`);
117
+
118
+ const stated = true,
119
+ assignments = [],
120
+ unqualifiedStatementVerified = this.unqualifiedStatement.verify(assignments, stated, localContext);
121
+
122
+ if (unqualifiedStatementVerified) {
123
+ const assignmentsAssigned = assignAssignments(assignments, localContext);
124
+
125
+ if (assignmentsAssigned) {
126
+ const proofStep = ProofStep.fromUnqualifiedStatement(this.unqualifiedStatement);
127
+
128
+ localContext.addProofStep(proofStep);
129
+
130
+ verified = true;
131
+ }
132
+ }
133
+
134
+ if (verified) {
135
+ localContext.debug(`...verified the '${premiseString}' premise.`);
136
+ }
137
+ } else {
138
+ localContext.debug(`The '${premiseString}' premise cannot be verified because it is nonsense.`);
139
+ }
140
+
141
+ return verified;
142
+ }
143
+
144
+ toJSON() {
145
+ const unqualifiedStatementString = this.unqualifiedStatement.getString(),
146
+ unqualifiedStatement = unqualifiedStatementString, ///
147
+ json = {
148
+ unqualifiedStatement
149
+ };
150
+
151
+ return json;
152
+ }
153
+
154
+ static fromJSON(json, fileContext) {
155
+ let premise = null;
70
156
 
71
157
  return premise;
72
158
  }
159
+
160
+ static fromPremiseNode(premiseNode, fileContext) {
161
+ const unqualifiedStatementNode = unqualifiedStatementNodeQuery(premiseNode),
162
+ unqualifiedStatement = UnqualifiedStatement.fromUnqualifiedStatementNode(unqualifiedStatementNode, fileContext),
163
+ premise = new Premise(fileContext, unqualifiedStatement);
164
+
165
+ return premise
166
+ }
73
167
  }
package/src/proof.js ADDED
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import Derivation from "./derivation";
4
+ import LocalContext from "./context/local";
5
+
6
+ import { nodeQuery } from "./utilities/query";
7
+
8
+ const derivationNodeQuery = nodeQuery("/proof/derivation");
9
+
10
+ export default class Proof {
11
+ constructor(derivation) {
12
+ this.derivation = derivation;
13
+ }
14
+
15
+ getDerivation() {
16
+ return this.derivation;
17
+ }
18
+
19
+ getLastProofStep() { return this.derivation.getLastProofStep(); }
20
+
21
+ verify(substitutions, conclusion, localContext) {
22
+ let verified = false;
23
+
24
+ localContext = LocalContext.fromLocalContext(localContext); ///
25
+
26
+ const derivationVerified = this.derivation.verify(substitutions, localContext);
27
+
28
+ if (derivationVerified) {
29
+ const lastProofStep = localContext.getLastProofStep();
30
+
31
+ if (lastProofStep !== null) {
32
+ const lastProofStep = this.getLastProofStep(),
33
+ conclusionStatement = conclusion.getStatement(),
34
+ lastProofStepStatement = lastProofStep.getStatement(),
35
+ conclusionStatementEqualToLastProofStepStatement = conclusionStatement.isEqualTo(lastProofStepStatement);
36
+
37
+ if (conclusionStatementEqualToLastProofStepStatement) {
38
+ verified = true;
39
+ }
40
+ }
41
+ }
42
+
43
+ return verified;
44
+ }
45
+
46
+ static fromProofNode(proofNode, fileContext) {
47
+ let proof = null;
48
+
49
+ if (proofNode !== null) {
50
+ const derivationNode = derivationNodeQuery(proofNode),
51
+ derivation = Derivation.fromDerivationNode(derivationNode, fileContext);
52
+
53
+ proof = new Proof(derivation);
54
+ }
55
+
56
+ return proof;
57
+ }
58
+ }
package/src/proofStep.js CHANGED
@@ -1,45 +1,115 @@
1
1
  "use strict";
2
2
 
3
- import unifyStatementWithStatementGivenEquivalences from "./unify/statementWithSttaemetnGivenEquivalences";
3
+ import shim from "./shim";
4
+ import Subproof from "./subproof";
5
+ import QualifiedStatement from "./statement/qualified";
6
+ import UnqualifiedStatement from "./statement/unqualified";
4
7
 
5
- export default class ProofStep {
6
- constructor(subproofNode, statementNode) {
7
- this.subproofNode = subproofNode;
8
- this.statementNode = statementNode;
8
+ import { nodeQuery } from "./utilities/query";
9
+
10
+ const subproofNodeQuery = nodeQuery("/proofStep|lastProofStep/subproof"),
11
+ qualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/qualifiedStatement"),
12
+ unqualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/unqualifiedStatement");
13
+
14
+ class ProofStep {
15
+ constructor(subproof, qualifiedStatement, unqualifiedStatement) {
16
+ this.subproof = subproof;
17
+ this.qualifiedStatement = qualifiedStatement;
18
+ this.unqualifiedStatement = unqualifiedStatement;
9
19
  }
10
20
 
11
- getSubproofNode() {
12
- return this.subproofNode;
21
+ getSubproof() {
22
+ return this.subproof;
13
23
  }
14
24
 
15
- getStatementNode() {
16
- return this.statementNode;
25
+ getQualifiedStatement() {
26
+ return this.qualifiedStatement;
17
27
  }
18
28
 
19
- unifyStatement(statementNodeB, equivalences, localContextA, localContextB) {
20
- let statementUnified = false;
29
+ getUnqualifiedStatement() {
30
+ return this.unqualifiedStatement;
31
+ }
21
32
 
22
- if (this.statementNode !== null) {
23
- const statementNodeA = this.statementNode, ///
24
- statementUnifiedWithStatement = unifyStatementWithStatementGivenEquivalences(statementNodeA, statementNodeB, equivalences, localContextA, localContextB);
33
+ getStatement() {
34
+ let statement = null;
35
+
36
+ if (this.qualifiedStatement !== null) {
37
+ statement = this.qualifiedStatement.getStatement();
38
+ }
25
39
 
26
- statementUnified = statementUnifiedWithStatement; ///
40
+ if (this.unqualifiedStatement !== null) {
41
+ statement = this.unqualifiedStatement.getStatement();
27
42
  }
28
43
 
29
- return statementUnified;
44
+ return statement;
30
45
  }
31
46
 
32
- static fromSubproofNode(subproofNode) {
33
- const statementNode = null,
34
- proofStep = new ProofStep(subproofNode, statementNode);
47
+ // unifyStatement(statementB, equivalences, localContextA, localContextB) {
48
+ // let statementUnified = false;
49
+ //
50
+ // if (this.statement !== null) {
51
+ // const statementA = this.statement, ///
52
+ // statementUnifiedWithStatement = unifyStatementWithStatementGivenEquivalences(statementA, statementB, equivalences, localContextA, localContextB);
53
+ //
54
+ // statementUnified = statementUnifiedWithStatement; ///
55
+ // }
56
+ //
57
+ // return statementUnified;
58
+ // }
59
+
60
+ verify(substitutions, localContext) {
61
+ let verified = false;
62
+
63
+ if (false) {
64
+ ///
65
+ } else if (this.subproof !== null) {
66
+ const subproofVerified = this.subproof.verify(substitutions, localContext);
67
+
68
+ verified = subproofVerified; ///
69
+ } else if (this.qualifiedStatement !== null) {
70
+ const qualifiedStatementVerified = this.qualifiedStatement.verify(substitutions, localContext);
71
+
72
+ verified = qualifiedStatementVerified; ///
73
+ } else if (this.unqualifiedStatement !== null) {
74
+ const stated = true,
75
+ assignments = [],
76
+ unqualifiedStatementVerified = this.unqualifiedStatement.verify(stated, assignments, localContext);
77
+
78
+ verified = unqualifiedStatementVerified; ///
79
+ }
80
+
81
+ if (verified) {
82
+ const proofStep = this; ///
83
+
84
+ localContext.addProofStep(proofStep);
85
+ }
86
+
87
+ return verified;
88
+ }
89
+
90
+ static fromProofStepNode(proofStepNode, fileContext) {
91
+ const subproofNode = subproofNodeQuery(proofStepNode),
92
+ qualifiedStatementNode = qualifiedStatementNodeQuery(proofStepNode),
93
+ unqualifiedStatementNode = unqualifiedStatementNodeQuery(proofStepNode),
94
+ subproof = Subproof.fromSubproofNode(subproofNode, fileContext),
95
+ qualifiedStatement = QualifiedStatement.fromQualifiedStatementNode(qualifiedStatementNode, fileContext),
96
+ unqualifiedStatement = UnqualifiedStatement.fromUnqualifiedStatementNode(unqualifiedStatementNode, fileContext),
97
+ proofStep = new ProofStep(subproof, qualifiedStatement, unqualifiedStatement);
35
98
 
36
99
  return proofStep;
37
100
  }
38
101
 
39
- static fromStatementNode(statementNode) {
40
- const subproofNode = null,
41
- proofStep = new ProofStep(subproofNode, statementNode);
102
+ static fromUnqualifiedStatement(unqualifiedStatement) {
103
+ const subproof = null,
104
+ qualifiedStatement = null,
105
+ proofStep = new ProofStep(subproof, qualifiedStatement, unqualifiedStatement);
42
106
 
43
107
  return proofStep;
44
108
  }
45
109
  }
110
+
111
+ Object.assign(shim, {
112
+ ProofStep
113
+ });
114
+
115
+ export default ProofStep;
package/src/reference.js CHANGED
@@ -1,30 +1,76 @@
1
1
  "use strict";
2
2
 
3
- import { nodeAsString } from "./utilities/string";
3
+ import Metavariable from "./metavariable";
4
+
5
+ import { nodeQuery } from "./utilities/query";
6
+
7
+ const metavariableNodeQuery = nodeQuery("//reference/metavariable");
4
8
 
5
9
  export default class Reference {
6
- constructor(metavariableNode) {
7
- this.metavariableNode = metavariableNode;
10
+ constructor(metavariable) {
11
+ this.metavariable = metavariable;
8
12
  }
9
13
 
14
+ getMetavariable() {
15
+ return this.metavariable;
16
+ }
17
+
18
+ getString() { return this.metavariable.getString(); }
19
+
20
+ matchMetavariableNode(metavariableNode) { return this.metavariable.matchMetavariableNode(metavariableNode); }
21
+
10
22
  getMetavariableNode() {
11
- return this.metavariableNode;
23
+ const metavariableNode = this.metavariable.getNode();
24
+
25
+ return metavariableNode;
12
26
  }
13
27
 
14
- matchMetavariableNode(metavariableNode) {
15
- const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
28
+ verify(fileContext) {
29
+ let verified;
30
+
31
+ const referenceString = this.getString(); ///
32
+
33
+ fileContext.trace(`Verifying the '${referenceString}' reference...`);
34
+
35
+ verified = true;
16
36
 
17
- return metavariableNodeMatches;
37
+ if (verified) {
38
+ fileContext.debug(`...verified the '${referenceString}' reference.`);
39
+ }
40
+
41
+ return verified;
18
42
  }
19
43
 
20
- asString(tokens) {
21
- const string = nodeAsString(this.metavariableNode, tokens);
44
+ toJSON() {
45
+ const metavariableJSON = this.metavariable.toJSON(),
46
+ metavariable = metavariableJSON, ///
47
+ string = this.string,
48
+ json = {
49
+ string,
50
+ metavariable
51
+ };
52
+
53
+ return json;
54
+ }
55
+
56
+ static fromJSON(json, fileContext) {
57
+ const { string } = json;
58
+
59
+ let { metavariable } = json;
22
60
 
23
- return string;
61
+ json = metavariable; ///
62
+
63
+ metavariable = Metavariable.fromJSON(json, fileContext);
64
+
65
+ const reference = new Reference(string, metavariable);
66
+
67
+ return reference;
24
68
  }
25
69
 
26
- static fromMetavariableNode(metavariableNode) {
27
- const reference = new Reference(metavariableNode);
70
+ static fromReferenceNode(referenceNode, fileContext) {
71
+ const metavariableNode = metavariableNodeQuery(referenceNode),
72
+ metavariable = Metavariable.fromMetavariableNode(metavariableNode, fileContext),
73
+ reference = new Reference(metavariable);
28
74
 
29
75
  return reference;
30
76
  }