occam-verify-cli 1.0.437 → 1.0.444

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 (217) hide show
  1. package/lib/context/file.js +38 -35
  2. package/lib/context/local.js +10 -10
  3. package/lib/context/release.js +6 -6
  4. package/lib/context/temporary.js +14 -14
  5. package/lib/element/assertion/contained.js +45 -45
  6. package/lib/element/assertion/defined.js +13 -13
  7. package/lib/element/assertion/property.js +23 -22
  8. package/lib/element/assertion/satisfies.js +7 -6
  9. package/lib/element/assertion/subproof.js +20 -17
  10. package/lib/element/assertion/type.js +3 -2
  11. package/lib/element/assertion.js +1 -23
  12. package/lib/element/assumption.js +24 -22
  13. package/lib/element/axiom.js +9 -12
  14. package/lib/element/axiomLemmaTheoremConjecture.js +32 -32
  15. package/lib/element/{statement/combinator → combinator}/bracketed.js +16 -16
  16. package/lib/element/combinator.js +229 -0
  17. package/lib/element/conclusion.js +11 -9
  18. package/lib/element/{term/constructor → constructor}/bracketed.js +5 -5
  19. package/lib/element/constructor.js +232 -0
  20. package/lib/element/declaration/combinator.js +2 -16
  21. package/lib/element/declaration/complexType.js +12 -12
  22. package/lib/element/declaration/constructor.js +13 -11
  23. package/lib/element/declaration/simpleType.js +4 -4
  24. package/lib/element/declaration/typePrefix.js +2 -2
  25. package/lib/element/declaration/variable.js +3 -3
  26. package/lib/element/deduction.js +11 -9
  27. package/lib/element/derivation.js +5 -8
  28. package/lib/element/equivalence.js +10 -10
  29. package/lib/element/equivalences.js +5 -5
  30. package/lib/element/frame.js +32 -38
  31. package/lib/element/hypothesis.js +3 -3
  32. package/lib/element/judgement.js +6 -4
  33. package/lib/element/label.js +16 -18
  34. package/lib/element/metaLemmaMetatheorem.js +5 -5
  35. package/lib/element/metaType.js +17 -80
  36. package/lib/element/metavariable.js +34 -34
  37. package/lib/element/parameter.js +3 -3
  38. package/lib/element/premise.js +43 -52
  39. package/lib/element/property.js +9 -9
  40. package/lib/element/propertyRelation.js +13 -13
  41. package/lib/element/reference.js +14 -17
  42. package/lib/element/rule.js +26 -50
  43. package/lib/element/signature.js +11 -11
  44. package/lib/element/statement.js +54 -56
  45. package/lib/element/step.js +79 -51
  46. package/lib/element/subDerivation.js +7 -10
  47. package/lib/element/subproof.js +6 -14
  48. package/lib/element/substitution/frame.js +1 -7
  49. package/lib/element/substitution/reference.js +2 -3
  50. package/lib/element/substitution/statement.js +44 -15
  51. package/lib/element/substitution/term.js +10 -57
  52. package/lib/element/substitution.js +5 -11
  53. package/lib/element/substitutions.js +29 -29
  54. package/lib/element/supposition.js +63 -55
  55. package/lib/element/term.js +21 -34
  56. package/lib/element/type.js +47 -60
  57. package/lib/element/typePrefix.js +5 -5
  58. package/lib/element/variable.js +9 -9
  59. package/lib/element.js +27 -3
  60. package/lib/metaTypes.js +52 -0
  61. package/lib/node/axiomLemmaTheoremConjecture.js +9 -9
  62. package/lib/node/body/axiom.js +2 -25
  63. package/lib/node/body/conjecture.js +2 -25
  64. package/lib/node/body/lemma.js +2 -25
  65. package/lib/node/body/metaLemma.js +2 -25
  66. package/lib/node/body/metatheorem.js +2 -25
  67. package/lib/node/body/rule.js +15 -1
  68. package/lib/node/body/theorem.js +2 -25
  69. package/lib/node/body.js +25 -2
  70. package/lib/node/combinator.js +11 -2
  71. package/lib/node/constructor.js +11 -2
  72. package/lib/node/declaration/combinator.js +5 -5
  73. package/lib/node/declaration/constructor.js +8 -8
  74. package/lib/node/declaration/property.js +15 -15
  75. package/lib/node/declaration/simpleType.js +31 -31
  76. package/lib/node/declaration/variable.js +8 -8
  77. package/lib/node/equality.js +8 -8
  78. package/lib/node/frame.js +20 -20
  79. package/lib/node/header.js +22 -22
  80. package/lib/node/metaLemmaMetaTheorem.js +16 -16
  81. package/lib/node/metavariable.js +15 -15
  82. package/lib/node/property.js +8 -8
  83. package/lib/node/propertyRelation.js +8 -8
  84. package/lib/node/rule.js +16 -16
  85. package/lib/node/statement.js +12 -12
  86. package/lib/node/step.js +22 -22
  87. package/lib/node/subproof.js +8 -8
  88. package/lib/node/substitution/frame.js +19 -19
  89. package/lib/node/substitution/statement.js +19 -19
  90. package/lib/node/substitution/term.js +19 -19
  91. package/lib/node/term.js +35 -35
  92. package/lib/preamble.js +5 -5
  93. package/lib/process/instantiate.js +20 -2
  94. package/lib/process/unify.js +39 -42
  95. package/lib/process/validate.js +431 -0
  96. package/lib/process/verify.js +44 -135
  97. package/lib/types.js +27 -0
  98. package/lib/utilities/brackets.js +4 -4
  99. package/lib/utilities/element.js +100 -61
  100. package/lib/utilities/instance.js +18 -18
  101. package/lib/utilities/statement.js +11 -16
  102. package/lib/utilities/string.js +21 -10
  103. package/lib/utilities/unification.js +237 -0
  104. package/lib/utilities/validation.js +251 -0
  105. package/package.json +6 -6
  106. package/src/context/file.js +37 -31
  107. package/src/context/local.js +8 -8
  108. package/src/context/release.js +9 -6
  109. package/src/context/temporary.js +11 -11
  110. package/src/element/assertion/contained.js +19 -20
  111. package/src/element/assertion/defined.js +11 -12
  112. package/src/element/assertion/property.js +20 -20
  113. package/src/element/assertion/satisfies.js +6 -6
  114. package/src/element/assertion/subproof.js +17 -15
  115. package/src/element/assertion/type.js +2 -2
  116. package/src/element/assertion.js +0 -2
  117. package/src/element/assumption.js +22 -19
  118. package/src/element/axiom.js +7 -11
  119. package/src/element/axiomLemmaTheoremConjecture.js +36 -36
  120. package/src/element/{statement/combinator → combinator}/bracketed.js +7 -7
  121. package/src/element/combinator.js +90 -0
  122. package/src/element/conclusion.js +12 -10
  123. package/src/element/{term/constructor → constructor}/bracketed.js +5 -5
  124. package/src/element/{term/constructor.js → constructor.js} +17 -25
  125. package/src/element/declaration/combinator.js +1 -22
  126. package/src/element/declaration/complexType.js +11 -11
  127. package/src/element/declaration/constructor.js +13 -10
  128. package/src/element/declaration/simpleType.js +3 -3
  129. package/src/element/declaration/typePrefix.js +1 -1
  130. package/src/element/declaration/variable.js +2 -2
  131. package/src/element/deduction.js +12 -9
  132. package/src/element/derivation.js +4 -8
  133. package/src/element/equivalence.js +8 -8
  134. package/src/element/equivalences.js +4 -4
  135. package/src/element/frame.js +28 -30
  136. package/src/element/hypothesis.js +2 -2
  137. package/src/element/judgement.js +6 -3
  138. package/src/element/label.js +14 -21
  139. package/src/element/metaLemmaMetatheorem.js +4 -3
  140. package/src/element/metaType.js +9 -45
  141. package/src/element/metavariable.js +29 -31
  142. package/src/element/parameter.js +2 -2
  143. package/src/element/premise.js +56 -62
  144. package/src/element/property.js +6 -6
  145. package/src/element/propertyRelation.js +11 -11
  146. package/src/element/reference.js +12 -21
  147. package/src/element/rule.js +28 -72
  148. package/src/element/signature.js +10 -9
  149. package/src/element/statement.js +69 -56
  150. package/src/element/step.js +89 -51
  151. package/src/element/subDerivation.js +6 -10
  152. package/src/element/subproof.js +4 -12
  153. package/src/element/substitution/frame.js +0 -2
  154. package/src/element/substitution/reference.js +1 -5
  155. package/src/element/substitution/statement.js +44 -14
  156. package/src/element/substitution/term.js +10 -13
  157. package/src/element/substitution.js +3 -5
  158. package/src/element/substitutions.js +48 -30
  159. package/src/element/supposition.js +88 -70
  160. package/src/element/term.js +18 -28
  161. package/src/element/type.js +42 -36
  162. package/src/element/typePrefix.js +3 -3
  163. package/src/element/variable.js +7 -7
  164. package/src/element.js +15 -1
  165. package/src/metaTypes.js +42 -0
  166. package/src/node/axiomLemmaTheoremConjecture.js +6 -6
  167. package/src/node/body/axiom.js +0 -21
  168. package/src/node/body/conjecture.js +0 -23
  169. package/src/node/body/lemma.js +0 -23
  170. package/src/node/body/metaLemma.js +0 -23
  171. package/src/node/body/metatheorem.js +0 -23
  172. package/src/node/body/rule.js +12 -0
  173. package/src/node/body/theorem.js +0 -23
  174. package/src/node/body.js +23 -0
  175. package/src/node/combinator.js +9 -0
  176. package/src/node/constructor.js +9 -0
  177. package/src/node/declaration/combinator.js +5 -5
  178. package/src/node/declaration/constructor.js +8 -8
  179. package/src/node/declaration/property.js +14 -14
  180. package/src/node/declaration/simpleType.js +31 -31
  181. package/src/node/declaration/variable.js +7 -7
  182. package/src/node/equality.js +7 -7
  183. package/src/node/frame.js +21 -21
  184. package/src/node/header.js +22 -22
  185. package/src/node/metaLemmaMetaTheorem.js +14 -14
  186. package/src/node/metavariable.js +14 -14
  187. package/src/node/property.js +7 -7
  188. package/src/node/propertyRelation.js +7 -7
  189. package/src/node/rule.js +15 -15
  190. package/src/node/statement.js +12 -12
  191. package/src/node/step.js +21 -21
  192. package/src/node/subproof.js +7 -7
  193. package/src/node/substitution/frame.js +18 -18
  194. package/src/node/substitution/statement.js +18 -18
  195. package/src/node/substitution/term.js +18 -18
  196. package/src/node/term.js +34 -34
  197. package/src/preamble.js +4 -4
  198. package/src/process/instantiate.js +12 -0
  199. package/src/process/unify.js +53 -57
  200. package/src/process/validate.js +316 -0
  201. package/src/process/verify.js +50 -138
  202. package/src/types.js +18 -0
  203. package/src/utilities/brackets.js +10 -6
  204. package/src/utilities/element.js +138 -91
  205. package/src/utilities/instance.js +18 -18
  206. package/src/utilities/statement.js +27 -28
  207. package/src/utilities/string.js +34 -20
  208. package/src/{mixins/step/unify.js → utilities/unification.js} +82 -68
  209. package/src/utilities/validation.js +369 -0
  210. package/lib/element/statement/combinator.js +0 -105
  211. package/lib/element/term/constructor.js +0 -172
  212. package/lib/mixins/statement/verify.js +0 -198
  213. package/lib/mixins/step/unify.js +0 -228
  214. package/lib/mixins/term/verify.js +0 -65
  215. package/src/element/statement/combinator.js +0 -59
  216. package/src/mixins/statement/verify.js +0 -295
  217. package/src/mixins/term/verify.js +0 -81
@@ -3,10 +3,10 @@
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
5
  import Element from "../element";
6
- import verifyMixins from "../mixins/statement/verify";
7
6
 
8
7
  import { define } from "../elements";
9
8
  import { unifyStatement } from "../process/unify";
9
+ import { validateStatements } from "../utilities/validation";
10
10
  import { instantiateStatement } from "../process/instantiate";
11
11
  import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
12
12
 
@@ -23,36 +23,43 @@ export default define(class Statement extends Element {
23
23
  const singular = this.isSingular();
24
24
 
25
25
  if (singular) {
26
- metavariableName = this.node.getMetavariableName();
26
+ const node = this.getNode();
27
+
28
+ metavariableName = node.getMetavariableName();
27
29
  }
28
30
 
29
31
  return metavariableName;
30
32
  }
31
33
 
32
- isSingular() { return this.node.isSingular(); }
34
+ isSingular() {
35
+ const node = this.getNode(),
36
+ singular = node.isSingular();
37
+
38
+ return singular;
39
+ }
33
40
 
34
41
  isTermContained(term, context) {
35
42
  let termContained;
36
43
 
37
- const termString = term.getString(),
38
- statementString = this.string; ///
44
+ const node = this.getNode(),
45
+ termString = term.getString(),
46
+ statementString = this.getString(); ///
39
47
 
40
- context.trace(`Is the '${termString}' term contained in the '${statementString}' statement...`, this.node);
48
+ context.trace(`Is the '${termString}' term contained in the '${statementString}' statement...`, node);
41
49
 
42
- const termNode = term.getNode(),
43
- statementNode = this.node,
50
+ const statementNode = node, ///
44
51
  statementNodeTermNodes = statementNode.getTermNodes();
45
52
 
46
53
  termContained = statementNodeTermNodes.some((statementNodeTermNode) => { ///
47
- const termNodeMatchesStatementNodeTermNode = termNode.match(statementNodeTermNode);
54
+ const statementNodeTermNodeMatches = term.matchNode(statementNodeTermNode);
48
55
 
49
- if (termNodeMatchesStatementNodeTermNode) {
56
+ if (statementNodeTermNodeMatches) {
50
57
  return true;
51
58
  }
52
59
  });
53
60
 
54
61
  if (termContained) {
55
- context.debug(`...the '${termString}' term is contained in the '${statementString}' statement.`, this.node);
62
+ context.debug(`...the '${termString}' term is contained in the '${statementString}' statement.`, node);
56
63
  }
57
64
 
58
65
  return termContained;
@@ -61,25 +68,25 @@ export default define(class Statement extends Element {
61
68
  isFrameContained(frame, context) {
62
69
  let frameContained;
63
70
 
64
- const frameString = frame.getString(),
65
- statementString = this.string; ///
71
+ const node = this.getNode(),
72
+ frameString = frame.getString(),
73
+ statementString = this.getString(); ///
66
74
 
67
- context.trace(`Is the '${frameString}' frame contained in the '${statementString}' statement...`, this.node);
75
+ context.trace(`Is the '${frameString}' frame contained in the '${statementString}' statement...`, node);
68
76
 
69
- const frameNode = frame.getNode(),
70
- statementNode = this.node,
77
+ const statementNode = node,
71
78
  statementNodeFrameNodes = statementNode.getFrameNodes();
72
79
 
73
80
  frameContained = statementNodeFrameNodes.some((statementNodeFrameNode) => { ///
74
- const frameNodeMatchesStatementNodeFrameNode = frameNode.match(statementNodeFrameNode);
81
+ const statementNodeFrameNodeMatches = frame.matchNode(statementNodeFrameNode);
75
82
 
76
- if (frameNodeMatchesStatementNodeFrameNode) {
83
+ if (statementNodeFrameNodeMatches) {
77
84
  return true;
78
85
  }
79
86
  });
80
87
 
81
88
  if (frameContained) {
82
- context.debug(`...the '${frameString}' frame is contained in the '${statementString}' statement.`, this.node);
89
+ context.debug(`...the '${frameString}' frame is contained in the '${statementString}' statement.`, node);
83
90
  }
84
91
 
85
92
  return frameContained;
@@ -91,8 +98,9 @@ export default define(class Statement extends Element {
91
98
  const singular = this.isSingular();
92
99
 
93
100
  if (singular) {
94
- const metavariableA = metavariable, ///
95
- singularMetavariableNode = this.node.getSingularMetavariableNode(),
101
+ const node = this.getNode(),
102
+ metavariableA = metavariable, ///
103
+ singularMetavariableNode = node.getSingularMetavariableNode(),
96
104
  metavariableName = singularMetavariableNode.getMetavariableName();
97
105
 
98
106
  metavariable = context.findMetavariableByMetavariableName(metavariableName)
@@ -106,63 +114,64 @@ export default define(class Statement extends Element {
106
114
  return metavariableEqualToMetavariable;
107
115
  }
108
116
 
109
- matchStatementNode(statementNode) { return this.node.match(statementNode); }
110
-
111
- verify(assignments, stated, context) {
112
- let verifies;
117
+ validate(assignments, stated, context) {
118
+ let validates;
113
119
 
114
- const statementString = this.string; ///
120
+ const node = this.getNode(),
121
+ statementString = this.getString(); ///
115
122
 
116
- context.trace(`Verifying the '${statementString}' statement...`, this.node);
123
+ context.trace(`Validating the '${statementString}' statement...`, node);
117
124
 
118
- verifies = verifyMixins.some((verifyMixin) => {
125
+ validates = validateStatements.some((validateStatement) => {
119
126
  const statement = this, ///
120
- verifies = verifyMixin(statement, assignments, stated, context);
127
+ statementValidates = validateStatement(statement, assignments, stated, context);
121
128
 
122
- if (verifies) {
129
+ if (statementValidates) {
123
130
  return true;
124
131
  }
125
132
  });
126
133
 
127
- if (verifies) {
134
+ if (validates) {
128
135
  const statement = this; ///
129
136
 
130
137
  context.addStatement(statement);
131
138
 
132
- context.debug(`...verified the '${statementString}' statement.`, this.node);
139
+ context.debug(`...validated the '${statementString}' statement.`, node);
133
140
  }
134
141
 
135
- return verifies;
142
+ return validates;
136
143
  }
137
144
 
138
- verifyGivenMetaType(metaType, assignments, stated, context) {
139
- let verifiesGivenMetaType = false;
145
+ validateGivenMetaType(metaType, assignments, stated, context) {
146
+ let validatesGivenMetaType = false;
140
147
 
141
- const metaTypeString = metaType.getString(),
142
- statementString = this.string; ///
148
+ const node = this.getNode(),
149
+ metaTypeString = metaType.getString(),
150
+ statementString = this.getString(); ///
143
151
 
144
- context.trace(`Verifying the '${statementString}' statement given the '${metaTypeString}' meta-type...`, this.node);
152
+ context.trace(`Validating the '${statementString}' statement given the '${metaTypeString}' meta-type...`, node);
145
153
 
146
154
  const metaTypeName = metaType.getName();
147
155
 
148
156
  if (metaTypeName === STATEMENT_META_TYPE_NAME) {
149
- const verifies = this.verify(assignments, stated, context)
157
+ const validates = this.validate(assignments, stated, context)
150
158
 
151
- verifiesGivenMetaType = verifies; ///
159
+ validatesGivenMetaType = validates; ///
152
160
  }
153
161
 
154
- if (verifiesGivenMetaType) {
155
- context.debug(`...verified the '${statementString}' statement given the '${metaTypeString}' meta-type.`, this.node);
162
+ if (validatesGivenMetaType) {
163
+ context.debug(`...validated the '${statementString}' statement given the '${metaTypeString}' meta-type.`, node);
156
164
  }
157
165
 
158
- return verifiesGivenMetaType;
166
+ return validatesGivenMetaType;
159
167
  }
160
168
 
161
169
  unifySubproof(subproof, substitutions, generalContext, specificContext) {
162
170
  let subproofUnifies = false;
163
171
 
164
- const context = specificContext, ///
165
- statementNode = this.node,
172
+ const node = this.getNode(),
173
+ context = specificContext, ///
174
+ statementNode = node,
166
175
  subproofAssertionNode = statementNode.getSubproofAssertionNode(),
167
176
  assertionNode = subproofAssertionNode; ///
168
177
 
@@ -219,11 +228,12 @@ export default define(class Statement extends Element {
219
228
  let unifiesIndependently = false;
220
229
 
221
230
  const context = specificContext, ///
222
- statementString = this.string; ///
231
+ statementString = this.getString(); ///
223
232
 
224
233
  context.trace(`Unifying the '${statementString}' statement independently...`);
225
234
 
226
- const statementNode = this.node,
235
+ const node = this.getNode(),
236
+ statementNode = node, ///
227
237
  definedAssertionNode = statementNode.getDefinedAssertionNode(),
228
238
  containedAssertionNode = statementNode.getContainedAssertionNode();
229
239
 
@@ -244,23 +254,23 @@ export default define(class Statement extends Element {
244
254
  return unifiesIndependently;
245
255
  }
246
256
 
247
- equateWithStepsOrSubproofs(stepsOrSubproofs, context) {
248
- let equatesWithStepsOrSubproofs;
257
+ compareStepsOrSubproofs(stepsOrSubproofs, context) {
258
+ let comparesToStepsOrSubproofs;
249
259
 
250
- equatesWithStepsOrSubproofs = backwardsSome(stepsOrSubproofs, (stepOrSubproof) => {
260
+ comparesToStepsOrSubproofs = backwardsSome(stepsOrSubproofs, (stepOrSubproof) => {
251
261
  const statement = this, ///
252
- statementUnifies = stepOrSubproof.equateWithStatement(statement, context);
262
+ stepOrSubproofComparesToStatement = stepOrSubproof.compareStatement(statement, context);
253
263
 
254
- if (statementUnifies) {
264
+ if (stepOrSubproofComparesToStatement) {
255
265
  return true;
256
266
  }
257
267
  });
258
268
 
259
- return equatesWithStepsOrSubproofs;
269
+ return comparesToStepsOrSubproofs;
260
270
  }
261
271
 
262
272
  toJSON() {
263
- const string = this.string, ///
273
+ const string = this.getString(),
264
274
  json = {
265
275
  string
266
276
  };
@@ -273,8 +283,11 @@ export default define(class Statement extends Element {
273
283
  static fromJSON(json, context) {
274
284
  const { string } = json,
275
285
  statmentNode = instantiateStatement(string, context),
276
- node = statmentNode, ///,
277
- statement = new Statement(string, node);
286
+ node = statmentNode; ///,
287
+
288
+ context = null;
289
+
290
+ const statement = new Statement(context, string, node);
278
291
 
279
292
  return statement;
280
293
  }
@@ -2,11 +2,13 @@
2
2
 
3
3
  import Element from "../element";
4
4
  import elements from "../elements";
5
- import unifyMixins from "../mixins/step/unify";
6
5
  import TemporaryContext from "../context/temporary";
7
6
 
8
7
  import { define } from "../elements";
8
+ import { instantiateStep } from "../process/instantiate";
9
+ import { unifyStatements } from "../utilities/unification";
9
10
  import { equateStatements } from "../process/equate";
11
+ import { stepFromStepNode } from "../utilities/element";
10
12
  import { propertyAssertionFromStatement } from "../utilities/statement";
11
13
 
12
14
  export default define(class Step extends Element {
@@ -55,16 +57,16 @@ export default define(class Step extends Element {
55
57
  return step;
56
58
  }
57
59
 
58
- matchTermAndPropertyRelation(term, propertyRelation, context) {
59
- let termAndPropertyRelationMatch = false;
60
+ compareTermAndPropertyRelation(term, propertyRelation, context) {
61
+ let comparesToTermAndPropertyRelation = false;
60
62
 
61
63
  const propertyAssertion = propertyAssertionFromStatement(this.statement, context);
62
64
 
63
65
  if (propertyAssertion !== null) {
64
- termAndPropertyRelationMatch = propertyAssertion.matchTermAndPropertyRelation(term, propertyRelation, context);
66
+ comparesToTermAndPropertyRelation = propertyAssertion.compareTermAndPropertyRelation(term, propertyRelation, context);
65
67
  }
66
68
 
67
- return termAndPropertyRelationMatch;
69
+ return comparesToTermAndPropertyRelation;
68
70
  }
69
71
 
70
72
  verify(substitutions, assignments, context) {
@@ -74,77 +76,102 @@ export default define(class Step extends Element {
74
76
 
75
77
  context = temporaryContext; ///
76
78
 
77
- const stepString = this.string; ///
79
+ const node = this.getNode(),
80
+ stepString = this.getString(); ///
78
81
 
79
- context.trace(`Verifying the '${stepString}' step...`, this.node);
82
+ context.trace(`Verifying the '${stepString}' step...`, node);
80
83
 
81
- if (this.statement !== null) {
82
- const stated = this.isStated(),
83
- statementVerifies = this.statement.verify(assignments, stated, context);
84
+ if (this.statement === null) {
85
+ context.debug(`Unable to verify the '${stepString}' step because it is nonsense.`, node);
86
+ } else {
87
+ const referenceVerifies = this.verifyReference(context);
84
88
 
85
- if (statementVerifies) {
86
- const qualified = this.isQualified(),
87
- satisfied = this.isSatisfied();
89
+ if (referenceVerifies) {
90
+ const satisfiesAssertioVeriries = this.verifySatisfiesAssertion(context);
88
91
 
89
- if (false) {
90
- ///
91
- } else if (qualified) {
92
- const referenceVerifies = this.reference.verify(context);
92
+ if (satisfiesAssertioVeriries) {
93
+ const stated = this.isStated(),
94
+ statementValidates = this.statement.validate(assignments, stated, context);
93
95
 
94
- if (referenceVerifies) {
95
- verifies = true;
96
- }
97
- } else if (satisfied) {
98
- const stated = true,
99
- assignments = null,
100
- satisfiesAssertionVerifies = this.satisfiesAssertion.verify(assignments, stated, context);
96
+ if (statementValidates) {
97
+ const statementUnifies = unifyStatements.some((unifyStatement) => {
98
+ const statementUnifies = unifyStatement(this.statement, this.reference, this.satisfiesAssertion, substitutions, context);
99
+
100
+ if (statementUnifies) {
101
+ return true;
102
+ }
103
+ });
104
+
105
+ if (statementUnifies) {
106
+ const { Step } = elements,
107
+ step = Step.fromStatement(this.statement, context),
108
+ stepOrSubproof = step; ///
109
+
110
+ context.addStepOrSubproof(stepOrSubproof);
111
+
112
+ this.setContext(context);
101
113
 
102
- if (satisfiesAssertionVerifies) {
103
- verifies = true;
114
+ verifies = true;
115
+ }
104
116
  }
105
- } else {
106
- verifies = true;
107
117
  }
108
118
  }
109
- } else {
110
- context.debug(`Cannot verify the '${stepString}' step because it is nonsense.`, this.node);
111
119
  }
112
120
 
113
121
  if (verifies) {
114
- this.context = context;
115
-
116
- context.debug(`...verified the '${stepString}' step.`, this.node);
122
+ context.debug(`...verified the '${stepString}' step.`, node);
117
123
  }
118
124
 
119
125
  return verifies;
120
126
  }
121
127
 
122
- unify(substitutions, context) {
123
- let unifies;
128
+ verifyReference(context) {
129
+ let referenceVeriries;
124
130
 
125
- context = this.context;
131
+ const node = this.getNode(),
132
+ stepString = this.getString(); ///
126
133
 
127
- const stepString = this.string; ///
134
+ context.trace(`Verifying the '${stepString}' step's reference... `, node);
128
135
 
129
- context.trace(`Unifying the '${stepString}' step...`, this.node);
136
+ if (this.reference !== null) {
137
+ referenceVeriries = this.reference.verify(context);
138
+ } else {
139
+ referenceVeriries = true;
140
+ }
130
141
 
131
- unifies = unifyMixins.some((unifyMixin) => {
132
- const unifies = unifyMixin(this.statement, this.reference, this.satisfiesAssertion, substitutions, context);
142
+ if (referenceVeriries) {
143
+ context.debug(`...verified the '${stepString}' step's reference. `, node);
144
+ }
133
145
 
134
- if (unifies) {
135
- return true;
136
- }
137
- });
146
+ return referenceVeriries;
147
+ }
148
+
149
+ verifySatisfiesAssertion(context) {
150
+ let satisfiesAssertionVerifies;
151
+
152
+ const node = this.getNode(),
153
+ stepString = this.getString(); ///
138
154
 
139
- if (unifies) {
140
- context.debug(`...unified the '${stepString}' step.`, this.node);
155
+ context.trace(`Verifying the '${stepString}' step's satisfies assertion... `, node);
156
+
157
+ if (this.satisfiesAssertion !== null) {
158
+ const stated = true,
159
+ assignments = null;
160
+
161
+ satisfiesAssertionVerifies = this.satisfiesAssertion.validate(assignments, stated, context);
162
+ } else {
163
+ satisfiesAssertionVerifies = true;
141
164
  }
142
165
 
143
- return unifies;
166
+ if (satisfiesAssertionVerifies) {
167
+ context.debug(`...verified the '${stepString}' step's satisfies assertion. `, node);
168
+ }
169
+
170
+ return satisfiesAssertionVerifies;
144
171
  }
145
172
 
146
- equateWithStatement(statement, context) {
147
- let statementEquates;
173
+ compareStatment(statement, context) {
174
+ let comparesToStatement;
148
175
 
149
176
  const leftStatement = statement, ///
150
177
  rightStatement = this.statement, ///
@@ -152,9 +179,9 @@ export default define(class Step extends Element {
152
179
  rightStatementNode = rightStatement.getNode(),
153
180
  statementsEquate = equateStatements(leftStatementNode, rightStatementNode, context);
154
181
 
155
- statementEquates = statementsEquate; ///
182
+ comparesToStatement = statementsEquate; ///
156
183
 
157
- return statementEquates;
184
+ return comparesToStatement;
158
185
  }
159
186
 
160
187
  unifyWithSatisfiesAssertion(satisfiesAssertion, context) {
@@ -191,4 +218,15 @@ export default define(class Step extends Element {
191
218
  }
192
219
 
193
220
  static name = "Step";
221
+
222
+ static fromStatement(statement, context) {
223
+ const statementString = statement.getString(),
224
+ stepString = statementString, ///
225
+ string = `${stepString}
226
+ `,
227
+ stepNode = instantiateStep(string, context),
228
+ step = stepFromStepNode(stepNode, context);
229
+
230
+ return step;;
231
+ }
194
232
  });
@@ -32,19 +32,15 @@ export default define(class SubDerivation extends Element {
32
32
 
33
33
  verifies = this.stepsOrSubproofs.every((stepOrSubproof) => { ///
34
34
  const assignments = [],
35
- stepOrSubproofVerifies = stepOrSubproof.verify(substitutions, assignments, context);
35
+ stepOrSubproofVarifies = stepOrSubproof.verify(substitutions, assignments, context);
36
36
 
37
- if (stepOrSubproofVerifies) {
38
- const stepOrSubproofUnifies = stepOrSubproof.unify(substitutions, context);
37
+ if (stepOrSubproofVarifies) {
38
+ const assignmentsAssigned = assignAssignments(assignments, context);
39
39
 
40
- if (stepOrSubproofUnifies) {
41
- const assignmentsAssigned = assignAssignments(assignments, context);
40
+ if (assignmentsAssigned) {
41
+ context.addStepOrSubproof(stepOrSubproof);
42
42
 
43
- if (assignmentsAssigned) {
44
- context.addStepOrSubproof(stepOrSubproof);
45
-
46
- return true;
47
- }
43
+ return true;
48
44
  }
49
45
  }
50
46
  });
@@ -46,16 +46,8 @@ export default define(class Subproof extends Element {
46
46
  return sStep;
47
47
  }
48
48
 
49
- unify(substitutions, context) {
50
- let unifies;
51
-
52
- unifies = true; ///
53
-
54
- return unifies;
55
- }
56
-
57
49
  verify(substitutions, assignments, context) {
58
- let subproofVerifies = false;
50
+ let verifies = false;
59
51
 
60
52
  const localContext = LocalContext.fromNothing(context); ///
61
53
 
@@ -73,14 +65,14 @@ export default define(class Subproof extends Element {
73
65
  const subDerivationVerifies = this.subDerivation.verify(substitutions, context);
74
66
 
75
67
  if (subDerivationVerifies) {
76
- subproofVerifies = true;
68
+ verifies = true;
77
69
  }
78
70
  }
79
71
 
80
- return subproofVerifies;
72
+ return verifies;
81
73
  }
82
74
 
83
- equateWithStatement(statement, context) {
75
+ compareStatement(statement, context) {
84
76
  const statementUnifies = false;
85
77
 
86
78
  return statementUnifies;
@@ -33,8 +33,6 @@ export default define(class FrameSubstitution extends Substitution {
33
33
 
34
34
  isMetavariableEqualToMetavariable(metavariable) { return this.metavariable.isEqualTo(metavariable); }
35
35
 
36
- matchParameter(parameter) { return this.metavariable.matchParameter(parameter); }
37
-
38
36
  verify(context) {
39
37
  let verifies = false;
40
38
 
@@ -22,11 +22,7 @@ export default define(class ReferenceSubstitution extends Substitution {
22
22
  return this.metavariable;
23
23
  }
24
24
 
25
- isReferenceEqualToReference(reference) {
26
- const referenceEqualToReference = this.reference.isEqualTo(reference);
27
-
28
- return referenceEqualToReference;
29
- }
25
+ isReferenceEqualToReference(reference) { return this.reference.isEqualTo(reference); }
30
26
 
31
27
  static name = "ReferenceSubstitution";
32
28
 
@@ -43,18 +43,16 @@ export default define(class StatementSubstitution extends Substitution {
43
43
  return replacementNode;
44
44
  }
45
45
 
46
- isSimple() {
47
- const simple = (this.substitution === null);
48
-
49
- return simple;
46
+ setStatement(statement) {
47
+ this.statement = statement;
50
48
  }
51
49
 
52
- isStatementEqualToStatement(statement, context) {
53
- statement = stripBracketsFromStatement(statement, context); ///
54
-
55
- const statementEqualToStatement = this.statement.isEqualTo(statement);
50
+ setMetavariable(metavariable) {
51
+ this.metavariable = metavariable;
52
+ }
56
53
 
57
- return statementEqualToStatement;
54
+ setSubstitution(substitution) {
55
+ this.substitution = substitution;
58
56
  }
59
57
 
60
58
  isMetavariableEqualToMetavariable(metavariable) { return this.metavariable.isEqualTo(metavariable); }
@@ -75,7 +73,19 @@ export default define(class StatementSubstitution extends Substitution {
75
73
  return substitutionEqualToSubstitution;
76
74
  }
77
75
 
78
- matchParameter(parameter) { return this.metavariable.matchParameter(parameter); }
76
+ isStatementEqualToStatement(statement, context) {
77
+ statement = stripBracketsFromStatement(statement, context); ///
78
+
79
+ const statementEqualToStatement = this.statement.isEqualTo(statement);
80
+
81
+ return statementEqualToStatement;
82
+ }
83
+
84
+ isSimple() {
85
+ const simple = (this.substitution === null);
86
+
87
+ return simple;
88
+ }
79
89
 
80
90
  unifyStatement(statement, context) {
81
91
  let substitution = null;
@@ -205,8 +215,17 @@ export default define(class StatementSubstitution extends Substitution {
205
215
  statement = stripBracketsFromStatement(statement, context); ///
206
216
 
207
217
  const string = stringFromStatementAndMetavariable(statement, metavariable),
208
- statementSubstitutionNode = instantiateStatementSubstitution(string, context),
209
- statementSubstitution = statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context);
218
+ statementSubstitutionNode = instantiateStatementSubstitution(string, context);
219
+
220
+ context = {
221
+ nodeAsString: () => string
222
+ };
223
+
224
+ const statementSubstitution = statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context);
225
+
226
+ statementSubstitution.setStatement(statement);
227
+
228
+ statementSubstitution.setMetavariable(metavariable);
210
229
 
211
230
  return statementSubstitution;
212
231
  }
@@ -215,8 +234,19 @@ export default define(class StatementSubstitution extends Substitution {
215
234
  statement = stripBracketsFromStatement(statement, context); ///
216
235
 
217
236
  const string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context),
218
- statementSubstitutionNode = instantiateStatementSubstitution(string, context),
219
- statementSubstitution = statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, substitution, context);
237
+ statementSubstitutionNode = instantiateStatementSubstitution(string, context);
238
+
239
+ context = {
240
+ nodeAsString: () => string
241
+ };
242
+
243
+ const statementSubstitution = statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context);
244
+
245
+ statementSubstitution.setStatement(statement);
246
+
247
+ statementSubstitution.setMetavariable(metavariable);
248
+
249
+ statementSubstitution.setSubstitution(substitution);
220
250
 
221
251
  return statementSubstitution;
222
252
  }