occam-verify-cli 0.0.1002 → 0.0.1005

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 (184) 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/lib/assertion/subproof.js +106 -0
  9. package/lib/assignment/metavariable.js +2 -2
  10. package/lib/combinator.js +50 -16
  11. package/lib/conclusion.js +73 -14
  12. package/lib/context/file.js +191 -31
  13. package/lib/context/local.js +37 -49
  14. package/lib/context/release.js +42 -35
  15. package/lib/context/release.other.js +605 -0
  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 -56
  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 -60
  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 +3 -3
  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 +4 -4
  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 +83 -13
  77. package/src/context/file.js +223 -11
  78. package/src/context/local.js +12 -16
  79. package/src/context/release.js +57 -39
  80. package/src/context/release.other.js +547 -0
  81. package/src/declaration/combinator.js +44 -0
  82. package/src/derivation.js +50 -0
  83. package/src/equality.js +2 -9
  84. package/src/index.js +0 -1
  85. package/src/judgement.js +2 -8
  86. package/src/label.js +56 -13
  87. package/src/log.js +2 -9
  88. package/src/metaType.js +26 -14
  89. package/src/metavariable.js +57 -9
  90. package/src/mixins/statement/qualified/unify.js +186 -0
  91. package/src/mixins/statement/unify.js +70 -0
  92. package/src/mixins/statement/verify.js +274 -0
  93. package/src/node/statement/combinator/bracketed.js +4 -3
  94. package/src/ocmbinator/bracketed.js +15 -12
  95. package/src/premise.js +136 -44
  96. package/src/proof.js +58 -0
  97. package/src/proofStep.js +92 -22
  98. package/src/reference.js +58 -12
  99. package/src/rule.js +199 -30
  100. package/src/ruleNames.js +1 -1
  101. package/src/statement/qualified.js +104 -0
  102. package/src/statement/unqualified.js +60 -0
  103. package/src/statement.js +179 -0
  104. package/src/subDerivation.js +52 -0
  105. package/src/subproof.js +99 -0
  106. package/src/substitution/frameForMetavariable.js +20 -17
  107. package/src/substitution/statementForMetavariable.js +31 -29
  108. package/src/substitution/termForVariable.js +15 -14
  109. package/src/substitution.js +8 -0
  110. package/src/substitutions.js +12 -13
  111. package/src/supposition.js +94 -44
  112. package/src/unifier/statementWithCombinator.js +6 -3
  113. package/src/unify/metavariableWithFrame.js +1 -1
  114. package/src/unify/metavariableWithStatement.js +1 -1
  115. package/src/unify/metavariableWithStatementGivenSubstitution.js +1 -1
  116. package/src/unify/variableWithTerm.js +1 -1
  117. package/src/utilities/node.js +18 -12
  118. package/src/utilities/releaseContext.js +2 -2
  119. package/src/utilities/string.js +6 -2
  120. package/src/utilities/subproof.js +2 -2
  121. package/src/utilities/tokens.js +7 -7
  122. package/src/variable.js +0 -10
  123. package/src/verifier/metaLevel.js +3 -2
  124. package/src/verifier/topLevel.js +6 -4
  125. package/src/verify/axiom.js +1 -2
  126. package/src/verify/conjecture.js +2 -3
  127. package/src/verify/consequent.js +1 -1
  128. package/src/verify/declaration/combinator.js +0 -20
  129. package/src/verify/declaration/metavariable.js +8 -12
  130. package/src/verify/files.js +3 -3
  131. package/src/verify/frame.js +11 -11
  132. package/src/verify/lemma.js +2 -3
  133. package/src/verify/metaLemma.js +2 -3
  134. package/src/verify/metatheorem.js +2 -3
  135. package/src/verify/proofStep.js +0 -41
  136. package/src/verify/theorem.js +2 -3
  137. package/lib/tokens/combinatorStatement/bracketed.js +0 -17
  138. package/lib/unify/premiseWithProofStep.js +0 -41
  139. package/lib/unify/premisesWithProofSteps.js +0 -31
  140. package/lib/unify/qualifiedStatement.js +0 -136
  141. package/lib/unify/statementWithBracketedCombinator.js +0 -30
  142. package/lib/unify/statementWithCombinator.js +0 -29
  143. package/lib/unify/statementWithCombinators.js +0 -31
  144. package/lib/unify/statementWithMetaType.js +0 -24
  145. package/lib/verify/conclusion.js +0 -39
  146. package/lib/verify/derivation.js +0 -31
  147. package/lib/verify/label.js +0 -37
  148. package/lib/verify/labels.js +0 -28
  149. package/lib/verify/premise.js +0 -45
  150. package/lib/verify/premises.js +0 -28
  151. package/lib/verify/proof.js +0 -34
  152. package/lib/verify/rule.js +0 -56
  153. package/lib/verify/statement/qualified.js +0 -41
  154. package/lib/verify/statement/unqualified.js +0 -45
  155. package/lib/verify/statement.js +0 -219
  156. package/lib/verify/statementAsCombinator.js +0 -33
  157. package/lib/verify/statementGivenMetaType.js +0 -52
  158. package/lib/verify/subproof.js +0 -34
  159. package/lib/verify/supposition.js +0 -45
  160. package/lib/verify/suppositions.js +0 -28
  161. package/src/tokens/combinatorStatement/bracketed.js +0 -10
  162. package/src/unify/premiseWithProofStep.js +0 -54
  163. package/src/unify/premisesWithProofSteps.js +0 -23
  164. package/src/unify/qualifiedStatement.js +0 -208
  165. package/src/unify/statementWithBracketedCombinator.js +0 -22
  166. package/src/unify/statementWithCombinator.js +0 -22
  167. package/src/unify/statementWithCombinators.js +0 -23
  168. package/src/unify/statementWithMetaType.js +0 -14
  169. package/src/verify/conclusion.js +0 -40
  170. package/src/verify/derivation.js +0 -23
  171. package/src/verify/label.js +0 -34
  172. package/src/verify/labels.js +0 -17
  173. package/src/verify/premise.js +0 -49
  174. package/src/verify/premises.js +0 -17
  175. package/src/verify/proof.js +0 -31
  176. package/src/verify/rule.js +0 -71
  177. package/src/verify/statement/qualified.js +0 -40
  178. package/src/verify/statement/unqualified.js +0 -49
  179. package/src/verify/statement.js +0 -312
  180. package/src/verify/statementAsCombinator.js +0 -27
  181. package/src/verify/statementGivenMetaType.js +0 -52
  182. package/src/verify/subproof.js +0 -32
  183. package/src/verify/supposition.js +0 -49
  184. package/src/verify/suppositions.js +0 -17
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+
3
+ import verifyFrame from "../../verify/frame";
4
+ import verifyEquality from "../../verify/equality";
5
+ import verifyJudgement from "../../verify/judgement";
6
+ import verifyDeclaration from "../../verify/declaration";
7
+ import verifyTypeAssertion from "../../verify/assertion/type";
8
+ import metavariableUnifier from "../../unifier/metavariable";
9
+ import verifyDefinedAssertion from "../../verify/assertion/defined";
10
+ import verifySubproofAssertion from "../../verify/assertion/subproof";
11
+ import verifyContainedAssertion from "../../verify/assertion/contained";
12
+
13
+ import { nodeQuery } from "../../utilities/query";
14
+ import { metavariableNameFromMetavariableNode } from "../../utilities/name";
15
+
16
+ const frameNodeQuery = nodeQuery("/statement/frame!"),
17
+ equalityNodeQuery = nodeQuery("/statement/equality!"),
18
+ judgementNodeQuery = nodeQuery("/statement/judgement!"),
19
+ declarationNodeQuery = nodeQuery("/statement/declaration!"),
20
+ metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
21
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
22
+ definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
23
+ subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
24
+ containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
25
+
26
+ function verifyAsMetavariable(statement, assignments, stated, localContext) {
27
+ let verifiedAsMetavariable = false;
28
+
29
+ const statementNode = statement.getNode(),
30
+ metavariableNode = metavariableNodeQuery(statementNode);
31
+
32
+ if (metavariableNode !== null) {
33
+ const statementString = statement.getString();
34
+
35
+ localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`);
36
+
37
+ const metavariableUnified = unifyMetavariable(metavariableNode, localContext);
38
+
39
+ verifiedAsMetavariable = metavariableUnified; ///
40
+
41
+ if (verifiedAsMetavariable) {
42
+ localContext.debug(`...verified the '${statementString}' statement as a metavariable.`);
43
+ }
44
+ }
45
+
46
+ return verifiedAsMetavariable;
47
+ }
48
+
49
+ function verifyAsEquality(statement, assignments, stated, localContext) {
50
+ let verifiedAsEquality = false;
51
+
52
+ const statementNode = statement.getNode(),
53
+ equalityNode = equalityNodeQuery(statementNode);
54
+
55
+ if (equalityNode !== null) {
56
+ const statementString = statement.getString();
57
+
58
+ localContext.trace(`Verifying the '${statementString}' statement as an equality...`);
59
+
60
+ const equalityVerified = verifyEquality(equalityNode, assignments, stated, localContext);
61
+
62
+ verifiedAsEquality = equalityVerified; ///
63
+
64
+ if (verifiedAsEquality) {
65
+ localContext.debug(`...verified the '${statementString}' statement as an equality.`);
66
+ }
67
+ }
68
+
69
+ return verifiedAsEquality;
70
+ }
71
+
72
+ function verifyAsFrame(statement, assignments, stated, localContext) {
73
+ let verifiedAsFrame = false;
74
+
75
+ const statementNode = statement.getNode(),
76
+ frameNode = frameNodeQuery(statementNode);
77
+
78
+ if (frameNode !== null) {
79
+ const statementString = statement.getString();
80
+
81
+ localContext.trace(`Verifying the '${statementString}' statement as a frame...`);
82
+
83
+ const frameVerified = verifyFrame(frameNode, assignments, stated, localContext);
84
+
85
+ verifiedAsFrame = frameVerified; ///
86
+
87
+ if (verifiedAsFrame) {
88
+ localContext.debug(`...verified the '${statementString}' statement as a frame.`);
89
+ }
90
+ }
91
+
92
+ return verifiedAsFrame;
93
+ }
94
+
95
+ function verifyAsJudgement(statement, assignments, stated, localContext) {
96
+ let verifiedAsJudgement = false;
97
+
98
+ const statementNode = statement.getNode(),
99
+ judgementNode = judgementNodeQuery(statementNode);
100
+
101
+ if (judgementNode !== null) {
102
+ const statementString = statement.getString();
103
+
104
+ localContext.trace(`Verifying the '${statementString}' statement as a judgement...`);
105
+
106
+ const judgementVerified = verifyJudgement(judgementNode, assignments, stated, localContext);
107
+
108
+ verifiedAsJudgement = judgementVerified; ///
109
+
110
+ if (verifiedAsJudgement) {
111
+ localContext.debug(`...verified the '${statementString}' statement as a judgement.`);
112
+ }
113
+ }
114
+
115
+ return verifiedAsJudgement;
116
+ }
117
+
118
+ function verifyAsDeclaration(statement, assignments, stated, localContext) {
119
+ let verifiedAsDeclaration = false;
120
+
121
+ const statementNode = statement.getNode(),
122
+ declarationNode = declarationNodeQuery(statementNode);
123
+
124
+ if (declarationNode !== null) {
125
+ const statementString = statement.getString();
126
+
127
+ localContext.trace(`Verifying the '${statementString}' statement as a declaration...`);
128
+
129
+ const declarationVerified = verifyDeclaration(declarationNode, assignments, stated, localContext);
130
+
131
+ verifiedAsDeclaration = declarationVerified; ///
132
+
133
+ if (verifiedAsDeclaration) {
134
+ localContext.debug(`...verified the '${statementString}' statement as a declaration.`);
135
+ }
136
+ }
137
+
138
+ return verifiedAsDeclaration;
139
+ }
140
+
141
+ function verifyAsTypeAssertion(statement, assignments, stated, localContext) {
142
+ let verifiedAsTypeAssertion = false;
143
+
144
+ const statementNode = statement.getNode(),
145
+ typeAssertionNode = typeAssertionNodeQuery(statementNode);
146
+
147
+ if (typeAssertionNode !== null) {
148
+ const statementString = statement.getString();
149
+
150
+ localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`);
151
+
152
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, stated, localContext);
153
+
154
+ verifiedAsTypeAssertion = typeAssertionVerified; ///
155
+
156
+ if (verifiedAsTypeAssertion) {
157
+ localContext.debug(`...verified the '${statementString}' statement as a type assertion.`);
158
+ }
159
+ }
160
+
161
+ return verifiedAsTypeAssertion;
162
+ }
163
+
164
+ function verifyAsDefinedAssertion(statement, assignments, stated, localContext) {
165
+ let verifiedAsDefinedAssertion = false;
166
+
167
+ const statementNode = statement.getNode(),
168
+ definedAssertionNode = definedAssertionNodeQuery(statementNode);
169
+
170
+ if (definedAssertionNode !== null) {
171
+ const statementString = statement.getString();
172
+
173
+ localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`);
174
+
175
+ const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments, stated, localContext);
176
+
177
+ verifiedAsDefinedAssertion = definedAssertionVerified; ///
178
+
179
+ if (verifiedAsDefinedAssertion) {
180
+ localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`);
181
+ }
182
+ }
183
+
184
+ return verifiedAsDefinedAssertion;
185
+ }
186
+
187
+ function verifyAsSubproofAssertion(statement, assignments, stated, localContext) {
188
+ let verifiedAsSubproofAssertion = false;
189
+
190
+ const statementNode = statement.getNode(),
191
+ subproofAssertionNode = subproofAssertionNodeQuery(statementNode);
192
+
193
+ if (subproofAssertionNode !== null) {
194
+ const statementString = statement.getString();
195
+
196
+ localContext.trace(`Verifying the '${statementString}' statement as a subproof assertion...`);
197
+
198
+ const subproofAssertionVerified = verifySubproofAssertion(subproofAssertionNode, assignments, stated, localContext);
199
+
200
+ verifiedAsSubproofAssertion = subproofAssertionVerified; ///
201
+
202
+ if (verifiedAsSubproofAssertion) {
203
+ localContext.debug(`...verified the '${statementString}' statement as a subproof assertion.`);
204
+ }
205
+ }
206
+
207
+ return verifiedAsSubproofAssertion;
208
+ }
209
+
210
+ function verifyAsContainedAssertion(statement, assignments, stated, localContext) {
211
+ let verifiedAsContainedAssertion = false;
212
+
213
+ const statementNode = statement.getNode(),
214
+ containedAssertionNode = containedAssertionNodeQuery(statementNode);
215
+
216
+ if (containedAssertionNode !== null) {
217
+ const statementString = statement.getString();
218
+
219
+ localContext.trace(`Verifying the '${statementString}' statement as a contained assertion...`);
220
+
221
+ const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, stated, localContext);
222
+
223
+ verifiedAsContainedAssertion = containedAssertionVerified; ///
224
+
225
+ if (verifiedAsContainedAssertion) {
226
+ localContext.debug(`...verified the '${statementString}' statement as a contained assertion.`);
227
+ }
228
+ }
229
+
230
+ return verifiedAsContainedAssertion;
231
+ }
232
+
233
+ const verifyMixins = [
234
+ verifyAsMetavariable,
235
+ verifyAsEquality,
236
+ verifyAsFrame,
237
+ verifyAsJudgement,
238
+ verifyAsDeclaration,
239
+ verifyAsTypeAssertion,
240
+ verifyAsDefinedAssertion,
241
+ verifyAsSubproofAssertion,
242
+ verifyAsContainedAssertion
243
+ ];
244
+
245
+ export default verifyMixins;
246
+
247
+ function unifyMetavariable(metavariableNode, localContext) {
248
+ let metavariableUnified;
249
+
250
+ const metavariableString = localContext.nodeAsString(metavariableNode);
251
+
252
+ localContext.trace(`Unifying the '${metavariableString}' metavariable...`);
253
+
254
+ const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
255
+ metavariable = localContext.findMetavariableByMetavariableName(metavariableName);
256
+
257
+ if (metavariable !== null) {
258
+ const metavariableNodeA = metavariableNode; ///
259
+
260
+ metavariableNode = metavariable.getNode();
261
+
262
+ const metavariableNodeB = metavariableNode; ///
263
+
264
+ const unified = metavariableUnifier.unify(metavariableNodeA, metavariableNodeB, localContext);
265
+
266
+ metavariableUnified = unified; ///
267
+ }
268
+
269
+ if (metavariableUnified) {
270
+ localContext.debug(`...unified the '${metavariableString}' metavariable.`);
271
+ }
272
+
273
+ return metavariableUnified;
274
+ }
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import bracketedCombinatorStatementTokens from "../../../tokens/combinatorStatement/bracketed";
3
+ import { STATEMENT_META_TYPE_NAME } from "../../../metaTypeNames";
4
+ import { statementNodeFromStatementString } from "../../../utilities/node";
4
5
 
5
- import { statementNodeFromStatementTokens } from "../../../utilities/node";
6
+ export const bracketedCombinatorStatementString = `(${STATEMENT_META_TYPE_NAME})`;
6
7
 
7
- const bracketedCombinatorStatementNode = statementNodeFromStatementTokens(bracketedCombinatorStatementTokens);
8
+ const bracketedCombinatorStatementNode = statementNodeFromStatementString(bracketedCombinatorStatementString)
8
9
 
9
10
  export default bracketedCombinatorStatementNode;
@@ -1,23 +1,26 @@
1
1
  "use strict";
2
2
 
3
+ import shim from "../shim";
3
4
  import Combinator from "../combinator";
4
5
  import bracketedCombinatorStatementNode from "../node/statement/combinator/bracketed";
5
- import bracketedCombinatorStatementTokens from "../tokens/combinatorStatement/bracketed";
6
6
 
7
- import { nodeAsString } from "../utilities/string";
7
+ import { bracketedCombinatorStatementString } from "../node/statement/combinator/bracketed";
8
8
 
9
- class BracketedCombinator extends Combinator {
9
+ const localContext = {
10
+ nodeAsString: (node) => {
11
+ const string = bracketedCombinatorStatementString; ///
12
+
13
+ return string;
14
+ }
15
+ };
16
+
17
+ export default class BracketedCombinator extends Combinator {
10
18
  static fromNothing() {
11
- const node = bracketedCombinatorStatementNode, ///
12
- tokens = bracketedCombinatorStatementTokens, ///
13
- string = nodeAsString(node, tokens),
14
- statementNode = node, ///
15
- bracketedCombinator = new BracketedCombinator(statementNode, string);
19
+ const { Statement } = shim,
20
+ statementNode = bracketedCombinatorStatementNode, ///
21
+ statement = Statement.fromStatementNode(statementNode, localContext),
22
+ bracketedCombinator = new BracketedCombinator(statement);
16
23
 
17
24
  return bracketedCombinator;
18
25
  }
19
26
  }
20
-
21
- const bracketedCombinator = BracketedCombinator.fromNothing();
22
-
23
- export default bracketedCombinator;
package/src/premise.js CHANGED
@@ -1,73 +1,165 @@
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 { nodeQuery } from "./utilities/query";
10
+ import { assignAssignments } from "./utilities/assignments";
8
11
 
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!");
12
+ const unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement");
13
13
 
14
14
  export default class Premise {
15
- constructor(statementNode) {
16
- this.statementNode = statementNode;
15
+ constructor(fileContext, unqualifiedStatement) {
16
+ this.fileContext = fileContext;
17
+ this.unqualifiedStatement = unqualifiedStatement;
17
18
  }
18
19
 
19
- getStatementNode() {
20
- return this.statementNode;
20
+ getFileContext() {
21
+ return this.fileContext;
21
22
  }
22
23
 
23
- unifyStatement(statementNodeB, substitutions, localContextA, localContextB) {
24
- let statementUnified = false;
24
+ getUnqualifiedStatement() {
25
+ return this.unqualifiedStatement;
26
+ }
27
+
28
+ getString() { return this.unqualifiedStatement.getString(); }
29
+
30
+ getStatement() { return this.unqualifiedStatement.getStatement(); }
25
31
 
26
- if (this.statementNode !== null) {
27
- const nodeA = this.statementNode, ///
28
- nodeB = statementNodeB, ///
29
- unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
32
+ unifyProofStep(proofStep, substitutions, localContext) {
33
+ let proofStepUnified = false;
30
34
 
31
- statementUnified = unified; ///
35
+ const subproof = proofStep.getSubproof(),
36
+ statement = proofStep.getStatement();
37
+
38
+ substitutions.snapshot();
39
+
40
+ if (false) {
41
+ ///
42
+ } else if (subproof !== null) {
43
+ proofStepUnified = this.unifySubproof(subproof, substitutions, localContext);
44
+ } else if (statement !== null) {
45
+ proofStepUnified = this.unifyStatement(statement, substitutions, localContext);
46
+ }
47
+
48
+ proofStepUnified ?
49
+ substitutions.continue() :
50
+ substitutions.rollback(localContext);
51
+
52
+ return proofStepUnified;
53
+ }
54
+
55
+ unifyStatement(statement, substitutions, localContext) {
56
+ let statementUnified;
57
+
58
+ const premise = this, ///
59
+ statementString = statement.getString(),
60
+ premiseStatement = premise.getStatement(),
61
+ premiseStatementString = premiseStatement.getString();
62
+
63
+ localContext.trace(`Unifying the '${statementString}' statement with the premise's '${premiseStatementString}' statement...`);
64
+
65
+ const statementNode = statement.getNode(),
66
+ premiseStatementNode = premiseStatement.getNode(),
67
+ nodeA = premiseStatementNode, ///
68
+ nodeB = statementNode, ///
69
+ fileContextA = this.fileContext, ///
70
+ localContextA = LocalContext.fromFileContext(fileContextA),
71
+ localContextB = localContext, ///
72
+ unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
73
+
74
+ statementUnified = unified; ///
75
+
76
+ if (statementUnified) {
77
+ localContext.debug(`...unified the '${statementString}' statement with the premise's '${premiseStatementString}' statement.`);
32
78
  }
33
79
 
34
80
  return statementUnified;
35
81
  }
36
82
 
37
- unifySubproof(subproofNodeB, substitutions, localContextA, localContextB) {
83
+ unifySubproof(subproof, substitutions, localContext) {
38
84
  let subproofUnified = false;
39
85
 
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
- }
86
+ const premise = this, ///
87
+ subproofString = subproof.getString(),
88
+ premiseStatement = premise.getStatement(),
89
+ premiseStatementString = premiseStatement.getString();
90
+
91
+ localContext.trace(`Unifying the '${subproofString}' subproof with the premise's '${premiseStatementString}' statement...`);
92
+
93
+ const statement = this.unqualifiedStatement.getStatement(),
94
+ statementNode = statement.getNode(),
95
+ subproofAssertion = SubproofAssertion.fromStatementNode(statementNode, this.fileContext);
96
+
97
+ if (subproofAssertion !== null) {
98
+ subproofUnified = subproofAssertion.unifySubproof(subproof, substitutions, localContext);
99
+ }
100
+
101
+ if (subproofUnified) {
102
+ localContext.debug(`...unified the '${subproofString}' subproof with the premise's '${premiseStatementString}' statement.`);
63
103
  }
64
104
 
65
105
  return subproofUnified;
66
106
  }
67
107
 
68
- static fromStatementNode(statementNode) {
69
- const premise = new Premise(statementNode);
108
+ verify(localContext) {
109
+ let verified = false;
110
+
111
+ const premiseString = this.getString(); ///
112
+
113
+ if (this.unqualifiedStatement !== null) {
114
+ localContext.trace(`Verifying the '${premiseString}' premise...`);
115
+
116
+ const stated = true,
117
+ assignments = [],
118
+ unqualifiedStatementVerified = this.unqualifiedStatement.verify(assignments, stated, localContext);
119
+
120
+ if (unqualifiedStatementVerified) {
121
+ const assignmentsAssigned = assignAssignments(assignments, localContext);
122
+
123
+ if (assignmentsAssigned) {
124
+ const proofStep = ProofStep.fromUnqualifiedStatement(this.unqualifiedStatement);
125
+
126
+ localContext.addProofStep(proofStep);
127
+
128
+ verified = true;
129
+ }
130
+ }
131
+
132
+ if (verified) {
133
+ localContext.debug(`...verified the '${premiseString}' premise.`);
134
+ }
135
+ } else {
136
+ localContext.debug(`The '${premiseString}' premise cannot be verified because it is nonsense.`);
137
+ }
138
+
139
+ return verified;
140
+ }
141
+
142
+ toJSON() {
143
+ const unqualifiedStatementString = this.unqualifiedStatement.getString(),
144
+ unqualifiedStatement = unqualifiedStatementString, ///
145
+ json = {
146
+ unqualifiedStatement
147
+ };
148
+
149
+ return json;
150
+ }
151
+
152
+ static fromJSON(json, fileContext) {
153
+ let premise = null;
70
154
 
71
155
  return premise;
72
156
  }
157
+
158
+ static fromPremiseNode(premiseNode, fileContext) {
159
+ const unqualifiedStatementNode = unqualifiedStatementNodeQuery(premiseNode),
160
+ unqualifiedStatement = UnqualifiedStatement.fromUnqualifiedStatementNode(unqualifiedStatementNode, fileContext),
161
+ premise = new Premise(fileContext, unqualifiedStatement);
162
+
163
+ return premise
164
+ }
73
165
  }
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
+ }