occam-verify-cli 0.0.506 → 0.0.508

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 (58) hide show
  1. package/lib/axiomLemmaTheorem.js +2 -2
  2. package/lib/conclusion.js +6 -161
  3. package/lib/consequence.js +4 -82
  4. package/lib/matcher/metastatementForMetavariable/conclusion.js +113 -0
  5. package/lib/matcher/metastatementForMetavariable/premise.js +113 -0
  6. package/lib/matcher/metastatementForMetavariable.js +201 -0
  7. package/lib/matcher/statementForMetavariable/conclusion.js +113 -0
  8. package/lib/matcher/statementForMetavariable/premise.js +113 -0
  9. package/lib/matcher/statementForMetavariable.js +201 -0
  10. package/lib/matcher/statementForVariable/consequence.js +113 -0
  11. package/lib/matcher/statementForVariable/supposition.js +113 -0
  12. package/lib/matcher/statementForVariable.js +201 -0
  13. package/lib/matcher.js +150 -0
  14. package/lib/premise.js +21 -190
  15. package/lib/rule.js +11 -11
  16. package/lib/ruleNames.js +5 -1
  17. package/lib/step/metaproof.js +5 -5
  18. package/lib/substitution/metastatementForMetavariable.js +86 -0
  19. package/lib/substitution/statementForMetavariable.js +86 -0
  20. package/lib/substitution/statementForVariable.js +86 -0
  21. package/lib/supposition.js +10 -97
  22. package/lib/utilities/substitution.js +61 -0
  23. package/lib/verify/metaproof.js +3 -3
  24. package/lib/verify/proof.js +3 -3
  25. package/lib/verify/ruleProof.js +3 -3
  26. package/package.json +1 -1
  27. package/src/axiomLemmaTheorem.js +1 -1
  28. package/src/conclusion.js +11 -282
  29. package/src/consequence.js +6 -144
  30. package/src/matcher/metastatementForMetavariable/conclusion.js +9 -0
  31. package/src/matcher/metastatementForMetavariable/premise.js +9 -0
  32. package/src/matcher/metastatementForMetavariable.js +99 -0
  33. package/src/matcher/statementForMetavariable/conclusion.js +9 -0
  34. package/src/matcher/statementForMetavariable/premise.js +9 -0
  35. package/src/matcher/statementForMetavariable.js +99 -0
  36. package/src/matcher/statementForVariable/consequence.js +9 -0
  37. package/src/matcher/statementForVariable/supposition.js +9 -0
  38. package/src/matcher/statementForVariable.js +99 -0
  39. package/src/matcher.js +76 -0
  40. package/src/premise.js +48 -336
  41. package/src/rule.js +12 -12
  42. package/src/ruleNames.js +1 -0
  43. package/src/step/metaproof.js +1 -1
  44. package/src/{metaSubstitution.js → substitution/metastatementForMetavariable.js} +9 -8
  45. package/src/{substitution.js → substitution/statementForMetavariable.js} +8 -7
  46. package/src/substitution/statementForVariable.js +64 -0
  47. package/src/supposition.js +26 -173
  48. package/src/utilities/{node.js → substitution.js} +4 -74
  49. package/src/verify/metaproof.js +2 -2
  50. package/src/verify/proof.js +2 -2
  51. package/src/verify/ruleProof.js +2 -2
  52. package/lib/metaSubstitution.js +0 -85
  53. package/lib/metaSupposition.js +0 -167
  54. package/lib/substitution.js +0 -85
  55. package/lib/utilities/node.js +0 -106
  56. package/lib/verify/metaSupposition.js +0 -41
  57. package/src/metaSupposition.js +0 -196
  58. package/src/verify/metaSupposition.js +0 -44
package/src/premise.js CHANGED
@@ -1,21 +1,17 @@
1
1
  "use strict";
2
2
 
3
- import Substitution from "./substitution";
4
- import MetaSubstitution from "./metaSubstitution";
5
-
6
- import { first } from "./utilities/array";
7
3
  import { nodeAsString } from "./utilities/string";
8
4
  import { nodeQuery, nodesQuery } from "./utilities/query";
9
- import { metavariableNameFromMetavariableNode } from "./utilities/query";
5
+ import { premiseStatementForMetavariableMatcher } from "./matcher/statementForMetavariable/premise";
10
6
  import { metastatementNodeFromMetastatementString } from "./utilities/string";
11
- import { STATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } from "./ruleNames";
7
+ import { premiseMetastatementForMetavariableMatcher } from "./matcher/metastatementForMetavariable/premise";
12
8
 
13
- const metastatementNodesQuery = nodesQuery("/ruleSubproofAssertion/metastatement"),
14
- ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
15
- premiseMetastatementNodesQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
16
- subDerivationStatementNodeQuery = nodeQuery("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"),
17
- suppositionStatementStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement!/statement!"),
18
- ruleSubDerivationMetastatementNodeQuery = nodeQuery("/ruleSubproof/ruleSubDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
9
+ const ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
10
+ ruleSubproofPremiseMetastatementQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
11
+ subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement!/statement!"),
12
+ subproofSubDerivationLastStatementNodeQuery = nodeQuery("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"),
13
+ ruleSubproofAssertionMetastatementNodesQuery = nodesQuery("/ruleSubproofAssertion/metastatement"),
14
+ ruleSubproofSubDerivationLastMetastatementQuery = nodeQuery("/ruleSubproof/ruleSubDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
19
15
 
20
16
  export default class Premise {
21
17
  constructor(metastatementNode) {
@@ -32,24 +28,24 @@ export default class Premise {
32
28
  const subproofAssertionNode = ruleSubproofAssertionNodeQuery(this.metastatementNode);
33
29
 
34
30
  if (subproofAssertionNode !== null) {
35
- const subDerivationStatementNode = subDerivationStatementNodeQuery(subproofNode),
36
- suppositionStatementStatementNodes = suppositionStatementStatementNodesQuery(subproofNode),
37
- ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(subproofAssertionNode),
38
- statementNodes = [
39
- ...suppositionStatementStatementNodes,
40
- subDerivationStatementNode
31
+ const subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
32
+ subproofSubDerivationLastStatementNode = subproofSubDerivationLastStatementNodeQuery(subproofNode),
33
+ subproofStatementNodes = [
34
+ ...subproofSuppositionStatementNodes,
35
+ subproofSubDerivationLastStatementNode
41
36
  ],
42
- statementNodesLength = statementNodes.length,
43
- ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
44
-
45
- if (statementNodesLength === ruleSubproofAssertionMetastatementNodesLength) {
46
- subproofNodeMatches = ruleSubproofAssertionMetastatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
47
- const statementNode = statementNodes[index],
48
- nonTerminalNode = statementNode, ///
49
- premiseNonTerminalNode = ruleSubproofAssertionMetastatementNode, ///
50
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions);
51
-
52
- if (premiseNonTerminalNodeMatches) {
37
+ ruleSubproofAssertionMetaSubproofStatementNodes = ruleSubproofAssertionMetaSubproofStatementNodesQuery(subproofAssertionNode),
38
+ subproofStatementNodesLength = subproofStatementNodes.length,
39
+ ruleSubproofAssertionMetaSubproofStatementNodesLength = ruleSubproofAssertionMetaSubproofStatementNodes.length;
40
+
41
+ if (subproofStatementNodesLength === ruleSubproofAssertionMetaSubproofStatementNodesLength) {
42
+ subproofNodeMatches = ruleSubproofAssertionMetaSubproofStatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
43
+ const subproofStatementNode = subproofStatementNodes[index],
44
+ nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
45
+ nonTerminalNodeB = subproofStatementNode, ///
46
+ nonTerminalNodeMatches = premiseStatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
47
+
48
+ if (nonTerminalNodeMatches) {
53
49
  return true;
54
50
  }
55
51
  });
@@ -60,38 +56,38 @@ export default class Premise {
60
56
  }
61
57
 
62
58
  matchStatementNode(statementNode, substitutions) {
63
- const nonTerminalNode = statementNode, ///
64
- premiseNonTerminalNode = this.metastatementNode, ///
65
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions),
66
- statementNodeMatches = premiseNonTerminalNodeMatches; ///
59
+ const nonTerminalNodeA = this.metastatementNode, ///
60
+ nonTerminalNodeB = statementNode, ///
61
+ nonTerminalNodeMatches = premiseStatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
62
+ statementNodeMatches = nonTerminalNodeMatches; ///
67
63
 
68
64
  return statementNodeMatches;
69
65
  }
70
66
 
71
- matchRuleSubproofNode(ruleSubproofNode, metaSubstitutions) {
67
+ matchRuleSubproofNode(ruleSubproofNode, substitutions) {
72
68
  let ruleSubproofNodeMatches = false;
73
69
 
74
70
  const ruleSubproofAssertionNode = ruleSubproofAssertionNodeQuery(this.metastatementNode);
75
71
 
76
72
  if (ruleSubproofAssertionNode !== null) {
77
- const premiseMetastatementNodes = premiseMetastatementNodesQuery(ruleSubproofNode),
78
- ruleSubDerivationMetastatementNode = ruleSubDerivationMetastatementNodeQuery(ruleSubproofNode),
79
- ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(ruleSubproofAssertionNode),
80
- metastatementNodes = [
81
- ...premiseMetastatementNodes,
82
- ruleSubDerivationMetastatementNode
73
+ const ruleSubproofPremiseMetastatement = ruleSubproofPremiseMetastatementQuery(ruleSubproofNode),
74
+ ruleSubproofSubDerivationLastMetastatement = ruleSubproofSubDerivationLastMetastatementQuery(ruleSubproofNode),
75
+ ruleSubproofMetastatementNodes = [
76
+ ...ruleSubproofPremiseMetastatement,
77
+ ruleSubproofSubDerivationLastMetastatement
83
78
  ],
84
- metastatementNodesLength = metastatementNodes.length,
79
+ ruleSubproofMetastatementNodesLength = ruleSubproofMetastatementNodes.length,
80
+ ruleSubproofAssertionMetastatementNodes = ruleSubproofAssertionMetastatementNodesQuery(ruleSubproofAssertionNode),
85
81
  ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
86
82
 
87
- if (metastatementNodesLength === ruleSubproofAssertionMetastatementNodesLength) {
83
+ if (ruleSubproofMetastatementNodesLength === ruleSubproofAssertionMetastatementNodesLength) {
88
84
  ruleSubproofNodeMatches = ruleSubproofAssertionMetastatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
89
- const metastatementNode = metastatementNodes[index],
90
- nonTerminalNode = metastatementNode, ///
91
- premiseNonTerminalNode = ruleSubproofAssertionMetastatementNode, ///
92
- premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
85
+ const ruleSubproofMetastatementNode = ruleSubproofMetastatementNodes[index],
86
+ nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
87
+ nonTerminalNodeB = ruleSubproofMetastatementNode, ///
88
+ nonTerminalNodeMatches = premiseMetastatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
93
89
 
94
- if (premiseNonTerminalNodeMatches) {
90
+ if (nonTerminalNodeMatches) {
95
91
  return true;
96
92
  }
97
93
  });
@@ -101,11 +97,11 @@ export default class Premise {
101
97
  return ruleSubproofNodeMatches;
102
98
  }
103
99
 
104
- matchMetastatementNode(metastatementNode, metaSubstitutions) {
105
- const nonTerminalNode = metastatementNode, ///
106
- premiseNonTerminalNode = this.metastatementNode, ///
107
- premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions),
108
- metastatementNodeMatches = premiseNonTerminalNodeMatches; ///
100
+ matchMetastatementNode(metastatementNode, substitutions) {
101
+ const nonTerminalNodeA = this.metastatementNode, ///
102
+ nonTerminalNodeB = metastatementNode, ///
103
+ nonTerminalNodeMatches = premiseMetastatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
104
+ metastatementNodeMatches = nonTerminalNodeMatches; ///
109
105
 
110
106
  return metastatementNodeMatches;
111
107
  }
@@ -135,287 +131,3 @@ export default class Premise {
135
131
  return premise;
136
132
  }
137
133
  }
138
-
139
- function matchPremiseNode(premiseNode, node, substitutions) {
140
- let premiseNodeMatches = false;
141
-
142
- const nodeTerminalNode = node.isTerminalNode(),
143
- ruleNodeTerminalNode = premiseNode.isTerminalNode();
144
-
145
- if (nodeTerminalNode === ruleNodeTerminalNode) {
146
- if (nodeTerminalNode) {
147
- const terminalNode = node, ///
148
- premiseTerminalNode = premiseNode, ///
149
- premiseTerminalNodeMatches = matchPremiseTerminalNode(premiseTerminalNode, terminalNode, substitutions);
150
-
151
- premiseNodeMatches = premiseTerminalNodeMatches; ///
152
- } else {
153
- const nonTerminalNode = node, ///
154
- premiseNonTerminalNode = premiseNode, ///
155
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions);
156
-
157
- premiseNodeMatches = premiseNonTerminalNodeMatches; ///
158
- }
159
- }
160
-
161
- return premiseNodeMatches;
162
- }
163
-
164
- function matchPremiseNodes(premiseNodes, nodes, substitutions) {
165
- let premiseNodesMatches = false;
166
-
167
- const nodesLength = nodes.length,
168
- premiseNodesLength = premiseNodes.length;
169
-
170
- if (nodesLength === premiseNodesLength) {
171
- premiseNodesMatches = nodes.every((node, index) => {
172
- const premiseNode = premiseNodes[index],
173
- premiseNodeMatches = matchPremiseNode(premiseNode, node, substitutions);
174
-
175
- if (premiseNodeMatches) {
176
- return true;
177
- }
178
- });
179
- }
180
-
181
- return premiseNodesMatches;
182
- }
183
-
184
- function matchPremiseTerminalNode(premiseTerminalNode, terminalNode, substitutions) {
185
- const matches = premiseTerminalNode.match(terminalNode),
186
- premiseTerminalNodeMatches = matches;
187
-
188
- return premiseTerminalNodeMatches;
189
- }
190
-
191
- function matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions) {
192
- let premiseNonTerminalNodeMatches = false;
193
-
194
- const ruleName = nonTerminalNode.getRuleName(),
195
- childNodes = nonTerminalNode.getChildNodes(),
196
- premiseNonTerminalNodeRuleName = premiseNonTerminalNode.getRuleName(),
197
- premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(),
198
- nodes = childNodes, ///
199
- premiseNodes = premiseNonTerminalNodeChildNodes, ///
200
- ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
201
- premiseNonTerminalNodeRuleNameMetastatementRuleName = (premiseNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
202
-
203
- if (ruleNameStatementRuleName && premiseNonTerminalNodeRuleNameMetastatementRuleName) {
204
- const statementNode = nonTerminalNode, ///
205
- premiseMetastatementNode = premiseNonTerminalNode, ///
206
- premiseMetastatementNodeMatches = matchPremiseMetastatementNode(premiseMetastatementNode, statementNode, substitutions);
207
-
208
- if (premiseMetastatementNodeMatches) {
209
- premiseNonTerminalNodeMatches = true;
210
- } else {
211
- const premiseNonTerminalNodeChildNodesMatches = matchPremiseNodes(premiseNodes, nodes, substitutions);
212
-
213
- premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
214
- }
215
- } else if (ruleName === premiseNonTerminalNodeRuleName) {
216
- const premiseNonTerminalNodeChildNodesMatches = matchPremiseNodes(premiseNodes, nodes, substitutions);
217
-
218
- premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
219
- }
220
-
221
- return premiseNonTerminalNodeMatches;
222
- }
223
-
224
- function matchPremiseMetavariableNode(premiseMetavariableNode, statementNode, substitutions) {
225
- let premiseMetavariableNodeMatches;
226
-
227
- const premiseMetavariableName = metavariableNameFromMetavariableNode(premiseMetavariableNode),
228
- substitution = substitutions.find((substitution) => {
229
- const metavariableName = substitution.getMetavariableName();
230
-
231
- if (metavariableName === premiseMetavariableName) {
232
- return true;
233
- }
234
- }) || null;
235
-
236
- if (substitution !== null) {
237
- const substitutionNodesMatch = substitution.matchStatementNode(statementNode);
238
-
239
- premiseMetavariableNodeMatches = substitutionNodesMatch; ///
240
- } else {
241
- const metavariableName = premiseMetavariableName, ///
242
- substitution = Substitution.fromMetavariableNameAndStatementNode(metavariableName, statementNode);
243
-
244
- substitutions.push(substitution);
245
-
246
- premiseMetavariableNodeMatches = true;
247
- }
248
-
249
- return premiseMetavariableNodeMatches;
250
- }
251
-
252
- function matchPremiseMetastatementNode(premiseMetastatementNode, statementNode, substitutions) {
253
- let premiseMetastatementNodeMatches = false;
254
-
255
- const premiseNonTerminalNode = premiseMetastatementNode, ///
256
- premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(),
257
- premiseNonTerminalNodeChildNodesLength = premiseNonTerminalNodeChildNodes.length;
258
-
259
- if (premiseNonTerminalNodeChildNodesLength === 1) {
260
- const firstPremiseChildNode = first(premiseNonTerminalNodeChildNodes),
261
- premiseChildNode = firstPremiseChildNode, ///
262
- premiseChildNodeNonTerminalNode = premiseChildNode.isNonTerminalNode();
263
-
264
- if (premiseChildNodeNonTerminalNode) {
265
- const premiseNonTerminalChildNode = premiseChildNode, ///
266
- premiseNonTerminalChildNodeRuleName = premiseNonTerminalChildNode.getRuleName(),
267
- premiseNonTerminalChildNodeRuleNameMetavariableRuleName = (premiseNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
268
-
269
- if (premiseNonTerminalChildNodeRuleNameMetavariableRuleName) {
270
- const premiseMetavariableNode = premiseNonTerminalChildNode, ///
271
- premiseMetaVariableNodeMatches = matchPremiseMetavariableNode(premiseMetavariableNode, statementNode, substitutions);
272
-
273
- premiseMetastatementNodeMatches = premiseMetaVariableNodeMatches; ///
274
- }
275
- }
276
- }
277
-
278
- return premiseMetastatementNodeMatches;
279
- }
280
-
281
- function metaMatchPremiseNode(premiseNode, node, metaSubstitutions) {
282
- let premiseNodeMatches = false;
283
-
284
- const nodeTerminalNode = node.isTerminalNode(),
285
- ruleNodeTerminalNode = premiseNode.isTerminalNode();
286
-
287
- if (nodeTerminalNode === ruleNodeTerminalNode) {
288
- if (nodeTerminalNode) {
289
- const terminalNode = node, ///
290
- premiseTerminalNode = premiseNode, ///
291
- premiseTerminalNodeMatches = metaMatchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions);
292
-
293
- premiseNodeMatches = premiseTerminalNodeMatches; ///
294
- } else {
295
- const nonTerminalNode = node, ///
296
- premiseNonTerminalNode = premiseNode, ///
297
- premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
298
-
299
- premiseNodeMatches = premiseNonTerminalNodeMatches; ///
300
- }
301
- }
302
-
303
- return premiseNodeMatches;
304
- }
305
-
306
- function metaMatchPremiseNodes(premiseNodes, nodes, metaSubstitutions) {
307
- let premiseNodesMatches = false;
308
-
309
- const nodesLength = nodes.length,
310
- premiseNodesLength = premiseNodes.length;
311
-
312
- if (nodesLength === premiseNodesLength) {
313
- premiseNodesMatches = nodes.every((node, index) => {
314
- const premiseNode = premiseNodes[index],
315
- premiseNodeMatches = metaMatchPremiseNode(premiseNode, node, metaSubstitutions);
316
-
317
- if (premiseNodeMatches) {
318
- return true;
319
- }
320
- });
321
- }
322
-
323
- return premiseNodesMatches;
324
- }
325
-
326
- function metaMatchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions) {
327
- const matches = premiseTerminalNode.match(terminalNode),
328
- premiseTerminalNodeMatches = matches;
329
-
330
- return premiseTerminalNodeMatches;
331
- }
332
-
333
- function metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions) {
334
- let premiseNonTerminalNodeMatches = false;
335
-
336
- const ruleName = nonTerminalNode.getRuleName(),
337
- childNodes = nonTerminalNode.getChildNodes(),
338
- premiseNonTerminalNodeRuleName = premiseNonTerminalNode.getRuleName(),
339
- premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(),
340
- nodes = childNodes, ///
341
- premiseNodes = premiseNonTerminalNodeChildNodes, ///
342
- ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME),
343
- premiseNonTerminalNodeRuleNameMetastatementRuleName = (premiseNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
344
-
345
- if (ruleNameMetastatementRuleName && premiseNonTerminalNodeRuleNameMetastatementRuleName) {
346
- const metastatementNode = nonTerminalNode, ///
347
- premiseMetastatementNode = premiseNonTerminalNode, ///
348
- premiseMetastatementNodeMatches = metaMatchPremiseMetastatementNode(premiseMetastatementNode, metastatementNode, metaSubstitutions);
349
-
350
- if (premiseMetastatementNodeMatches) {
351
- premiseNonTerminalNodeMatches = true;
352
- } else {
353
- const premiseNonTerminalNodeChildNodesMatches = metaMatchPremiseNodes(premiseNodes, nodes, metaSubstitutions);
354
-
355
- premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
356
- }
357
- } else if (ruleName === premiseNonTerminalNodeRuleName) {
358
- const premiseNonTerminalNodeChildNodesMatches = metaMatchPremiseNodes(premiseNodes, nodes, metaSubstitutions);
359
-
360
- premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
361
- }
362
-
363
- return premiseNonTerminalNodeMatches;
364
- }
365
-
366
- function metaMatchPremiseMetavariableNode(premiseMetavariableNode, metastatementNode, metaSubstitutions) {
367
- let premiseMetavariableNodeMatches;
368
-
369
- const premiseMetavariableName = metavariableNameFromMetavariableNode(premiseMetavariableNode),
370
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
371
- const metavariableName = metaSubstitution.getMetavariableName();
372
-
373
- if (metavariableName === premiseMetavariableName) {
374
- return true;
375
- }
376
- }) || null;
377
-
378
- if (metaSubstitution !== null) {
379
- const metaSubstitutionNodesMatch = metaSubstitution.matchMetastatementNode(metastatementNode);
380
-
381
- premiseMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
382
- } else {
383
- const metavariableName = premiseMetavariableName, ///
384
- metaSubstitution = MetaSubstitution.fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode);
385
-
386
- metaSubstitutions.push(metaSubstitution);
387
-
388
- premiseMetavariableNodeMatches = true;
389
- }
390
-
391
- return premiseMetavariableNodeMatches;
392
- }
393
-
394
- function metaMatchPremiseMetastatementNode(premiseMetastatementNode, metastatementNode, metaSubstitutions) {
395
- let premiseMetastatementNodeMatches = false;
396
-
397
- const premiseNonTerminalNode = premiseMetastatementNode, ///
398
- premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(),
399
- premiseNonTerminalNodeChildNodesLength = premiseNonTerminalNodeChildNodes.length;
400
-
401
- if (premiseNonTerminalNodeChildNodesLength === 1) {
402
- const firstPremiseChildNode = first(premiseNonTerminalNodeChildNodes),
403
- premiseChildNode = firstPremiseChildNode, ///
404
- premiseChildNodeNonTerminalNode = premiseChildNode.isNonTerminalNode();
405
-
406
- if (premiseChildNodeNonTerminalNode) {
407
- const premiseNonTerminalChildNode = premiseChildNode, ///
408
- premiseNonTerminalChildNodeRuleName = premiseNonTerminalChildNode.getRuleName(),
409
- premiseNonTerminalChildNodeRuleNameMetavariableRuleName = (premiseNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
410
-
411
- if (premiseNonTerminalChildNodeRuleNameMetavariableRuleName) {
412
- const premiseMetavariableNode = premiseNonTerminalChildNode, ///
413
- premiseMetaVariableNodeMatches = metaMatchPremiseMetavariableNode(premiseMetavariableNode, metastatementNode, metaSubstitutions);
414
-
415
- premiseMetastatementNodeMatches = premiseMetaVariableNodeMatches; ///
416
- }
417
- }
418
- }
419
-
420
- return premiseMetastatementNodeMatches;
421
- }
package/src/rule.js CHANGED
@@ -80,8 +80,8 @@ export default class Rule {
80
80
  const premisesLength = this.premises.length;
81
81
 
82
82
  if (premisesLength === 0) {
83
- const metaSubstitutions = [],
84
- conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, metaSubstitutions);
83
+ const substitutions = [],
84
+ conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions);
85
85
 
86
86
  metastatementNatches = conclusionMatches; ///
87
87
  } else {
@@ -90,11 +90,11 @@ export default class Rule {
90
90
  metastatementNatches = someSubArray(metaproofSteps, premisesLength, (metaproofSteps) => {
91
91
  let premisesMatchConclusion = false;
92
92
 
93
- const metaSubstitutions = [],
94
- premisesMatch = metaMatchPremises(this.premises, metaproofSteps, metaSubstitutions);
93
+ const substitutions = [],
94
+ premisesMatch = metaMatchPremises(this.premises, metaproofSteps, substitutions);
95
95
 
96
96
  if (premisesMatch) {
97
- const conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, metaSubstitutions);
97
+ const conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions);
98
98
 
99
99
  premisesMatchConclusion = conclusionMatches; ///
100
100
  }
@@ -225,13 +225,13 @@ function matchConclusion(conclusion, statementNode, substitutions) {
225
225
  return conclusionMatches;
226
226
  }
227
227
 
228
- function metaMatchPremise(premise, metaproofSteps, metaSubstitutions) {
228
+ function metaMatchPremise(premise, metaproofSteps, substitutions) {
229
229
  const metaproofStep = prune(metaproofSteps, (metaproofStep) => {
230
230
  const ruleSubproofNode = metaproofStep.getRuleSubproofNode(),
231
231
  metastatementNode = metaproofStep.getMetastatementNode()
232
232
 
233
233
  if (ruleSubproofNode !== null) {
234
- const ruleSubProofNodeMatches = premise.matchRuleSubproofNode(ruleSubproofNode, metaSubstitutions);
234
+ const ruleSubProofNodeMatches = premise.matchRuleSubproofNode(ruleSubproofNode, substitutions);
235
235
 
236
236
  if (!ruleSubProofNodeMatches) { ///
237
237
  return true;
@@ -239,7 +239,7 @@ function metaMatchPremise(premise, metaproofSteps, metaSubstitutions) {
239
239
  }
240
240
 
241
241
  if (metastatementNode !== null) {
242
- const metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, metaSubstitutions);
242
+ const metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, substitutions);
243
243
 
244
244
  if (!metastatementNodeMatches) { ///
245
245
  return true;
@@ -252,9 +252,9 @@ function metaMatchPremise(premise, metaproofSteps, metaSubstitutions) {
252
252
  return premiseMatches;
253
253
  }
254
254
 
255
- function metaMatchPremises(premise, metaproofSteps, metaSubstitutions) {
255
+ function metaMatchPremises(premise, metaproofSteps, substitutions) {
256
256
  const premisesMatch = premise.every((premise) => {
257
- const premiseMatches = metaMatchPremise(premise, metaproofSteps, metaSubstitutions);
257
+ const premiseMatches = metaMatchPremise(premise, metaproofSteps, substitutions);
258
258
 
259
259
  if (premiseMatches) {
260
260
  return true;
@@ -264,8 +264,8 @@ function metaMatchPremises(premise, metaproofSteps, metaSubstitutions) {
264
264
  return premisesMatch;
265
265
  }
266
266
 
267
- function metaMatchConclusion(conclusion, metastatementNode, metaSubstitutions) {
268
- const metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, metaSubstitutions),
267
+ function metaMatchConclusion(conclusion, metastatementNode, substitutions) {
268
+ const metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, substitutions),
269
269
  conclusionMatches = metastatementNodeMatches; ///
270
270
 
271
271
  return conclusionMatches;
package/src/ruleNames.js CHANGED
@@ -5,6 +5,7 @@ export const TYPE_RULE_NAME = "type";
5
5
  export const LABEL_RULE_NAME = "label";
6
6
  export const ARGUMENT_RULE_NAME = "argument";
7
7
  export const SUBPROOF_RULE_NAME = "subproof";
8
+ export const VARIABLE_RULE_NAME = "variable";
8
9
  export const STATEMENT_RULE_NAME = "statement";
9
10
  export const METAVARIABLE_RULE_NAME = "metavariable";
10
11
  export const METASTATEMENT_RULE_NAME = "metastatement";
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { first, second } from "../utilities/array";
4
4
  import { nodeQuery, nodesQuery } from "../utilities/query";
5
- import { matchBracketedNonTerminalNode } from "../utilities/node";
5
+ import { matchBracketedNonTerminalNode } from "../utilities/substitution";
6
6
 
7
7
  const metastatementNodesQuery = nodesQuery("/ruleSubproofAssertion/metastatement"),
8
8
  ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion"),
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import { METASTATEMENT_RULE_NAME } from "./ruleNames";
4
- import { matchNode, bracketedNonTerminalChildNodeFromChildNodes } from "./utilities/node";
3
+ import { matcher } from "../matcher";
4
+ import { METASTATEMENT_RULE_NAME } from "../ruleNames";
5
+ import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
5
6
 
6
- export default class MetaSubstitution {
7
+ export default class MetastatementForMetavariableSubstitution {
7
8
  constructor(metavariableName, metastatementNode) {
8
9
  this.metavariableName = metavariableName;
9
10
  this.metastatementNode = metastatementNode;
@@ -22,7 +23,7 @@ export default class MetaSubstitution {
22
23
 
23
24
  const nodeA = this.metastatementNode, ///
24
25
  nodeB = metastatementNode,
25
- nodeMatches = matchNode(nodeA, nodeB);
26
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
26
27
 
27
28
  matchesMetastatementNode = nodeMatches; ///
28
29
 
@@ -36,7 +37,7 @@ export default class MetaSubstitution {
36
37
  if (metastatementNode !== null) {
37
38
  const nodeA = this.metastatementNode, ///
38
39
  nodeB = metastatementNode,
39
- nodeMatches = matchNode(nodeA, nodeB);
40
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
40
41
 
41
42
  matchesMetastatementNode = nodeMatches; ///
42
43
  }
@@ -46,7 +47,7 @@ export default class MetaSubstitution {
46
47
  }
47
48
 
48
49
  static fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode) {
49
- let metaSubstitution = new MetaSubstitution(metavariableName, metastatementNode);
50
+ let metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
50
51
 
51
52
  const nonTerminalNode = metastatementNode, ///
52
53
  childNodes = nonTerminalNode.getChildNodes(),
@@ -55,9 +56,9 @@ export default class MetaSubstitution {
55
56
  metastatementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
56
57
 
57
58
  if (metastatementNode !== null) {
58
- metaSubstitution = new MetaSubstitution(metavariableName, metastatementNode);
59
+ metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
59
60
  }
60
61
 
61
- return metaSubstitution;
62
+ return metastatementForMetavariableSubstitution;
62
63
  }
63
64
  }
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import { STATEMENT_RULE_NAME } from "./ruleNames";
4
- import { matchNode, bracketedNonTerminalChildNodeFromChildNodes } from "./utilities/node";
3
+ import { matcher } from "../matcher";
4
+ import { STATEMENT_RULE_NAME } from "../ruleNames";
5
+ import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
5
6
 
6
- export default class Substitution {
7
+ export default class StatementForMetavariableSubstitution {
7
8
  constructor(metavariableName, statementNode) {
8
9
  this.metavariableName = metavariableName;
9
10
  this.statementNode = statementNode;
@@ -22,7 +23,7 @@ export default class Substitution {
22
23
 
23
24
  const nodeA = this.statementNode, ///
24
25
  nodeB = statementNode,
25
- nodeMatches = matchNode(nodeA, nodeB);
26
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
26
27
 
27
28
  matchesStatementNode = nodeMatches; ///
28
29
 
@@ -46,7 +47,7 @@ export default class Substitution {
46
47
  }
47
48
 
48
49
  static fromMetavariableNameAndStatementNode(metavariableName, statementNode) {
49
- let substitution = new Substitution(metavariableName, statementNode);
50
+ let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
50
51
 
51
52
  const nonTerminalNode = statementNode, ///
52
53
  childNodes = nonTerminalNode.getChildNodes(),
@@ -55,9 +56,9 @@ export default class Substitution {
55
56
  statementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
56
57
 
57
58
  if (statementNode !== null) {
58
- substitution = new Substitution(metavariableName, statementNode);
59
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
59
60
  }
60
61
 
61
- return substitution;
62
+ return statementForMetavariableSubstitution;
62
63
  }
63
64
  }