occam-verify-cli 0.0.505 → 0.0.507

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 (50) hide show
  1. package/lib/conclusion.js +5 -160
  2. package/lib/consequence.js +3 -81
  3. package/lib/matcher/conclusion.js +194 -0
  4. package/lib/matcher/consequence.js +194 -0
  5. package/lib/matcher/premise.js +199 -0
  6. package/lib/matcher/supposition.js +199 -0
  7. package/lib/matcher.js +36 -0
  8. package/lib/metaMatcher/conclusion.js +194 -0
  9. package/lib/metaMatcher/premise.js +199 -0
  10. package/lib/metaMatcher.js +36 -0
  11. package/lib/metaSubstitution.js +7 -6
  12. package/lib/mixins/matcher.js +109 -0
  13. package/lib/premise.js +14 -183
  14. package/lib/ruleNames.js +5 -1
  15. package/lib/step/metaproof.js +6 -6
  16. package/lib/substitution.js +7 -6
  17. package/lib/supposition.js +5 -92
  18. package/lib/theorem.js +3 -3
  19. package/lib/utilities/substitution.js +61 -0
  20. package/lib/verify/metaproof.js +3 -3
  21. package/lib/verify/proof.js +3 -3
  22. package/lib/verify/ruleProof.js +5 -5
  23. package/package.json +1 -1
  24. package/src/conclusion.js +6 -277
  25. package/src/consequence.js +3 -141
  26. package/src/matcher/conclusion.js +86 -0
  27. package/src/matcher/consequence.js +89 -0
  28. package/src/matcher/premise.js +94 -0
  29. package/src/matcher/supposition.js +97 -0
  30. package/src/matcher.js +9 -0
  31. package/src/metaMatcher/conclusion.js +86 -0
  32. package/src/metaMatcher/premise.js +94 -0
  33. package/src/metaMatcher.js +9 -0
  34. package/src/metaSubstitution.js +4 -3
  35. package/src/mixins/matcher.js +81 -0
  36. package/src/premise.js +24 -312
  37. package/src/ruleNames.js +1 -0
  38. package/src/step/metaproof.js +2 -2
  39. package/src/substitution.js +3 -2
  40. package/src/supposition.js +12 -159
  41. package/src/theorem.js +1 -1
  42. package/src/utilities/{node.js → substitution.js} +4 -74
  43. package/src/verify/metaproof.js +2 -2
  44. package/src/verify/proof.js +2 -2
  45. package/src/verify/ruleProof.js +3 -3
  46. package/lib/metaSupposition.js +0 -167
  47. package/lib/utilities/node.js +0 -106
  48. package/lib/verify/metaSupposition.js +0 -41
  49. package/src/metaSupposition.js +0 -196
  50. 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";
4
+ import { premiseMatcher } from "./matcher/premise";
5
+ import { premiseMetaMatcher } from "./metaMatcher/premise";
8
6
  import { nodeQuery, nodesQuery } from "./utilities/query";
9
- import { metavariableNameFromMetavariableNode } from "./utilities/query";
10
7
  import { metastatementNodeFromMetastatementString } from "./utilities/string";
11
- import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "./ruleNames";
12
8
 
13
9
  const metastatementNodesQuery = nodesQuery("/ruleSubproofAssertion/metastatement"),
14
10
  ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
15
- unqualifiedStatementStatementNodesQuery = nodesQuery("/subproof/antecedent/unqualifiedStatement!/statement!"),
16
- unqualifiedMetastatementMetastatementNodesQuery = nodesQuery("/ruleSubproof/metaAntecedent/unqualifiedMetastatement!/metastatement!"),
17
- qualifiedOrUnqualifiedStatementStatementNodeQuery = nodeQuery("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"),
18
- qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = nodeQuery("/ruleSubproof/metaSubDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
11
+ premiseMetastatementNodesQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
12
+ subDerivationStatementNodeQuery = nodeQuery("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"),
13
+ suppositionStatementStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement!/statement!"),
14
+ ruleSubDerivationMetastatementNodeQuery = nodeQuery("/ruleSubproof/ruleSubDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
19
15
 
20
16
  export default class Premise {
21
17
  constructor(metastatementNode) {
@@ -32,12 +28,12 @@ export default class Premise {
32
28
  const subproofAssertionNode = ruleSubproofAssertionNodeQuery(this.metastatementNode);
33
29
 
34
30
  if (subproofAssertionNode !== null) {
35
- const ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(subproofAssertionNode),
36
- unqualifiedStatementStatementNodes = unqualifiedStatementStatementNodesQuery(subproofNode),
37
- qualifiedOrUnqualifiedStatementStatementNode = qualifiedOrUnqualifiedStatementStatementNodeQuery(subproofNode),
31
+ const subDerivationStatementNode = subDerivationStatementNodeQuery(subproofNode),
32
+ suppositionStatementStatementNodes = suppositionStatementStatementNodesQuery(subproofNode),
33
+ ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(subproofAssertionNode),
38
34
  statementNodes = [
39
- ...unqualifiedStatementStatementNodes,
40
- qualifiedOrUnqualifiedStatementStatementNode
35
+ ...suppositionStatementStatementNodes,
36
+ subDerivationStatementNode
41
37
  ],
42
38
  statementNodesLength = statementNodes.length,
43
39
  ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
@@ -47,9 +43,9 @@ export default class Premise {
47
43
  const statementNode = statementNodes[index],
48
44
  nonTerminalNode = statementNode, ///
49
45
  premiseNonTerminalNode = ruleSubproofAssertionMetastatementNode, ///
50
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions);
46
+ nonTerminalNodeMatches = premiseMatcher.matchNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions);
51
47
 
52
- if (premiseNonTerminalNodeMatches) {
48
+ if (nonTerminalNodeMatches) {
53
49
  return true;
54
50
  }
55
51
  });
@@ -62,8 +58,8 @@ export default class Premise {
62
58
  matchStatementNode(statementNode, substitutions) {
63
59
  const nonTerminalNode = statementNode, ///
64
60
  premiseNonTerminalNode = this.metastatementNode, ///
65
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions),
66
- statementNodeMatches = premiseNonTerminalNodeMatches; ///
61
+ nonTerminalNodeMatches = premiseMatcher.matchNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions),
62
+ statementNodeMatches = nonTerminalNodeMatches; ///
67
63
 
68
64
  return statementNodeMatches;
69
65
  }
@@ -74,12 +70,12 @@ export default class Premise {
74
70
  const ruleSubproofAssertionNode = ruleSubproofAssertionNodeQuery(this.metastatementNode);
75
71
 
76
72
  if (ruleSubproofAssertionNode !== null) {
77
- const ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(ruleSubproofAssertionNode),
78
- unqualifiedMetastatementMetastatementNodes = unqualifiedMetastatementMetastatementNodesQuery(ruleSubproofNode),
79
- qualifiedOrUnqualifiedMetastatementMetastatementNode = qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery(ruleSubproofNode),
73
+ const premiseMetastatementNodes = premiseMetastatementNodesQuery(ruleSubproofNode),
74
+ ruleSubDerivationMetastatementNode = ruleSubDerivationMetastatementNodeQuery(ruleSubproofNode),
75
+ ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(ruleSubproofAssertionNode),
80
76
  metastatementNodes = [
81
- ...unqualifiedMetastatementMetastatementNodes,
82
- qualifiedOrUnqualifiedMetastatementMetastatementNode
77
+ ...premiseMetastatementNodes,
78
+ ruleSubDerivationMetastatementNode
83
79
  ],
84
80
  metastatementNodesLength = metastatementNodes.length,
85
81
  ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
@@ -89,9 +85,9 @@ export default class Premise {
89
85
  const metastatementNode = metastatementNodes[index],
90
86
  nonTerminalNode = metastatementNode, ///
91
87
  premiseNonTerminalNode = ruleSubproofAssertionMetastatementNode, ///
92
- premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
88
+ nonTerminalNodeMatches = premiseMetaMatcher.matchNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
93
89
 
94
- if (premiseNonTerminalNodeMatches) {
90
+ if (nonTerminalNodeMatches) {
95
91
  return true;
96
92
  }
97
93
  });
@@ -104,8 +100,8 @@ export default class Premise {
104
100
  matchMetastatementNode(metastatementNode, metaSubstitutions) {
105
101
  const nonTerminalNode = metastatementNode, ///
106
102
  premiseNonTerminalNode = this.metastatementNode, ///
107
- premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions),
108
- metastatementNodeMatches = premiseNonTerminalNodeMatches; ///
103
+ nonTerminalNodeMatches = premiseMetaMatcher.matchNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions),
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/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"),
@@ -85,7 +85,7 @@ export default class MetaproofStep {
85
85
 
86
86
  static fromRuleSubproofNode(ruleSubproofNode) {
87
87
  const metastatementNode = null,
88
- metaProofStep = new MetaproofStep(ruleSubproofNode, ruleSubproofNode, metastatementNode);
88
+ metaProofStep = new MetaproofStep(ruleSubproofNode, metastatementNode);
89
89
 
90
90
  return metaProofStep;
91
91
  }
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ import { matcher } from "./matcher";
3
4
  import { STATEMENT_RULE_NAME } from "./ruleNames";
4
- import { matchNode, bracketedNonTerminalChildNodeFromChildNodes } from "./utilities/node";
5
+ import { bracketedNonTerminalChildNodeFromChildNodes } from "./utilities/substitution";
5
6
 
6
7
  export default class Substitution {
7
8
  constructor(metavariableName, 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
 
@@ -1,13 +1,9 @@
1
1
  "use strict";
2
2
 
3
- import Substitution from "./substitution";
4
-
5
- import { first } from "./utilities/array";
6
3
  import { nodeAsString } from "./utilities/string";
4
+ import { suppositionMatcher } from "./matcher/supposition";
7
5
  import { nodeQuery, nodesQuery } from "./utilities/query";
8
- import { variableNameFromVariableNode } from "./utilities/query";
9
6
  import { statementNodeFromStatementString } from "./utilities/string";
10
- import { VARIABLE_RULE_NAME, STATEMENT_RULE_NAME } from "./ruleNames";
11
7
 
12
8
  const statementNodesQuery = nodesQuery("/subproofAssertion/statement"),
13
9
  subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
@@ -41,15 +37,15 @@ export default class Supposition {
41
37
 
42
38
  if (statementNodesLength === subproofAssertionStatementNodesLength) {
43
39
  subproofNodeMatches = subproofAssertionStatementNodes.every((subproofAssertionStatementNode, index) => {
44
- const statementNode = statementNodes[index],
45
- nonTerminalNode = statementNode, ///
46
- suppositionNonTerminalNode = subproofAssertionStatementNode, ///
47
- suppositionNonTerminalNodeMatches = matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions);
48
-
49
- if (suppositionNonTerminalNodeMatches) {
50
- return true;
51
- }
52
- });
40
+ const statementNode = statementNodes[index],
41
+ nonTerminalNode = statementNode, ///
42
+ suppositionNonTerminalNode = subproofAssertionStatementNode, ///
43
+ nonTerminalNodeMatches = suppositionMatcher.matchNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions);
44
+
45
+ if (nonTerminalNodeMatches) {
46
+ return true;
47
+ }
48
+ });
53
49
  }
54
50
  }
55
51
 
@@ -59,8 +55,8 @@ export default class Supposition {
59
55
  matchStatementNode(statementNode, substitutions) {
60
56
  const nonTerminalNode = statementNode, ///
61
57
  suppositionNonTerminalNode = this.statementNode, ///
62
- suppositionNonTerminalNodeMatches = matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions),
63
- statementNodeMatches = suppositionNonTerminalNodeMatches; ///
58
+ nonTerminalNodeMatches = suppositionMatcher.matchNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions),
59
+ statementNodeMatches = nonTerminalNodeMatches; ///
64
60
 
65
61
  return statementNodeMatches;
66
62
  }
@@ -90,146 +86,3 @@ export default class Supposition {
90
86
  return supposition;
91
87
  }
92
88
  }
93
-
94
- function matchSuppositionNode(suppositionNode, node, substitutions) {
95
- let suppositionNodeMatches = false;
96
-
97
- const nodeTerminalNode = node.isTerminalNode(),
98
- ruleNodeTerminalNode = suppositionNode.isTerminalNode();
99
-
100
- if (nodeTerminalNode === ruleNodeTerminalNode) {
101
- if (nodeTerminalNode) {
102
- const terminalNode = node, ///
103
- suppositionTerminalNode = suppositionNode, ///
104
- suppositionTerminalNodeMatches = matchSuppositionTerminalNode(suppositionTerminalNode, terminalNode, substitutions);
105
-
106
- suppositionNodeMatches = suppositionTerminalNodeMatches; ///
107
- } else {
108
- const nonTerminalNode = node, ///
109
- suppositionNonTerminalNode = suppositionNode, ///
110
- suppositionNonTerminalNodeMatches = matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions);
111
-
112
- suppositionNodeMatches = suppositionNonTerminalNodeMatches; ///
113
- }
114
- }
115
-
116
- return suppositionNodeMatches;
117
- }
118
-
119
- function matchSuppositionNodes(suppositionNodes, nodes, substitutions) {
120
- let suppositionNodesMatches = false;
121
-
122
- const nodesLength = nodes.length,
123
- suppositionNodesLength = suppositionNodes.length;
124
-
125
- if (nodesLength === suppositionNodesLength) {
126
- suppositionNodesMatches = nodes.every((node, index) => {
127
- const suppositionNode = suppositionNodes[index],
128
- suppositionNodeMatches = matchSuppositionNode(suppositionNode, node, substitutions);
129
-
130
- if (suppositionNodeMatches) {
131
- return true;
132
- }
133
- });
134
- }
135
-
136
- return suppositionNodesMatches;
137
- }
138
-
139
- function matchSuppositionVariable(suppositionVariableNode, nodes, substitutions) {
140
- let suppositionVariableMatches;
141
-
142
- const suppositionVariableName = variableNameFromVariableNode(suppositionVariableNode),
143
- substitution = substitutions.find((substitution) => {
144
- const variableName = substitution.getVariableName();
145
-
146
- if (variableName === suppositionVariableName) {
147
- return true;
148
- }
149
- }) || null;
150
-
151
- if (substitution !== null) {
152
- const substitutionNodesMatch = substitution.matchNodes(nodes);
153
-
154
- suppositionVariableMatches = substitutionNodesMatch; ///
155
- } else {
156
- const variableName = suppositionVariableName, ///
157
- substitution = Substitution.fromVariableNameAndNodes(variableName, nodes);
158
-
159
- substitutions.push(substitution);
160
-
161
- suppositionVariableMatches = true;
162
- }
163
-
164
- return suppositionVariableMatches;
165
- }
166
-
167
- function matchSuppositionTerminalNode(suppositionTerminalNode, terminalNode, substitutions) {
168
- const matches = suppositionTerminalNode.match(terminalNode),
169
- suppositionTerminalNodeMatches = matches;
170
-
171
- return suppositionTerminalNodeMatches;
172
- }
173
-
174
- function matchSuppositionNonTerminalNode(suppositionNonTerminalNode, nonTerminalNode, substitutions) {
175
- let suppositionNonTerminalNodeMatches = false;
176
-
177
- const ruleName = nonTerminalNode.getRuleName(),
178
- suppositionRuleName = suppositionNonTerminalNode.getRuleName(); ///
179
-
180
- if (ruleName === suppositionRuleName) {
181
- const childNodes = nonTerminalNode.getChildNodes(),
182
- suppositionChildNodes = suppositionNonTerminalNode.getChildNodes(),
183
- nodes = childNodes, ///
184
- suppositionNodes = suppositionChildNodes, ///
185
- suppositionChildNodesMatches = matchSuppositionNodes(suppositionNodes, nodes, substitutions);
186
-
187
- suppositionNonTerminalNodeMatches = suppositionChildNodesMatches; ///
188
-
189
- if (!suppositionNonTerminalNodeMatches) {
190
- const ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME);
191
-
192
- if (ruleNameStatementRuleName) {
193
- const statementNode = nonTerminalNode, ///
194
- suppositionStatementNode = suppositionNonTerminalNode, ///
195
- suppositionStatementNodeMatches = matchSuppositionStatementNode(suppositionStatementNode, statementNode, substitutions);
196
-
197
- suppositionNonTerminalNodeMatches = suppositionStatementNodeMatches; ///
198
- }
199
- }
200
- }
201
-
202
- return suppositionNonTerminalNodeMatches;
203
- }
204
-
205
- function matchSuppositionStatementNode(suppositionStatementNode, statementNode, substitutions) {
206
- let suppositionStatementNodeMatches = false;
207
-
208
- const suppositionNonTerminalNode = suppositionStatementNode, ///
209
- suppositionChildNodes = suppositionNonTerminalNode.getChildNodes(),
210
- suppositionChildNodesLength = suppositionChildNodes.length;
211
-
212
- if (suppositionChildNodesLength === 1) {
213
- const firstSuppositionChildNode = first(suppositionChildNodes),
214
- suppositionChildNode = firstSuppositionChildNode, ///
215
- suppositionChildNodeNonTerminalNode = suppositionChildNode.isNonTerminalNode();
216
-
217
- if (suppositionChildNodeNonTerminalNode) {
218
- const suppositionNonTerminalChildNode = suppositionChildNode, ///
219
- suppositionNonTerminalChildNodeRuleName = suppositionNonTerminalChildNode.getRuleName(),
220
- suppositionNonTerminalChildNodeRuleNameVariableRuleName = (suppositionNonTerminalChildNodeRuleName === VARIABLE_RULE_NAME);
221
-
222
- if (suppositionNonTerminalChildNodeRuleNameVariableRuleName) {
223
- const suppositionVariableNode = suppositionNonTerminalChildNode, ///
224
- nonTerminalNode = statementNode, ///
225
- childNodes = nonTerminalNode.getChildNodes(),
226
- nodes = childNodes, ///
227
- suppositionVariableMatches = matchSuppositionVariable(suppositionVariableNode, nodes, substitutions);
228
-
229
- suppositionStatementNodeMatches = suppositionVariableMatches; ///
230
- }
231
- }
232
- }
233
-
234
- return suppositionStatementNodeMatches;
235
- }
package/src/theorem.js CHANGED
@@ -9,5 +9,5 @@ export default class Theorem extends AxiomLemmaTheorem {
9
9
 
10
10
  static fromJSON(json, releaseContext) { return AxiomLemmaTheorem.fromJSON(Theorem, json, releaseContext); }
11
11
 
12
- static fromLabelsSuppositionsAndConsequence(labels, antecedents, consequence) { return AxiomLemmaTheorem.fromLabelsSuppositionsAndConsequence(Theorem, labels, antecedents, consequence); }
12
+ static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheorem.fromLabelsSuppositionsAndConsequence(Theorem, labels, suppositions, consequence); }
13
13
  }