occam-verify-cli 0.0.478 → 0.0.479

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.
package/src/premise.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ import Substitution from "./substitution";
3
4
  import MetaSubstitution from "./metaSubstitution";
4
5
 
5
6
  import { first } from "./utilities/array";
@@ -7,11 +8,13 @@ import { nodeAsString } from "./utilities/string";
7
8
  import { nodeQuery, nodesQuery } from "./utilities/query";
8
9
  import { metavariableNameFromMetavariableNode } from "./utilities/query";
9
10
  import { metastatementNodeFromMetastatementString } from "./utilities/string";
10
- import { METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } from "./ruleNames";
11
+ import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, METAVARIABLE_RULE_NAME } from "./ruleNames";
11
12
 
12
13
  const metastatementNodesQuery = nodesQuery("/metaSubproofAssertion/metastatement"),
13
14
  metaSubproofAssertionNodeQuery = nodeQuery("/metastatement/metaSubproofAssertion!"),
15
+ unqualifiedStatementStatementNodesQuery = nodesQuery("/subproof/unqualifiedStatement/statement!"),
14
16
  unqualifiedMetastatementMetastatementNodesQuery = nodesQuery("/metaSubproof/unqualifiedMetastatement/metastatement!"),
17
+ qualifiedOrUnqualifiedStatementStatementNodeQuery = nodeQuery("/subproof/derivation|abridgedDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"),
15
18
  qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = nodeQuery("/metaSubproof/metaDerivation|abridgedMetaDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
16
19
 
17
20
  export default class Premise {
@@ -23,6 +26,48 @@ export default class Premise {
23
26
  return this.metastatementNode;
24
27
  }
25
28
 
29
+ matchSubproofNode(subproofNode, substitutions) {
30
+ let subproofNodeMatches = false;
31
+
32
+ const subproofAssertionNode = metaSubproofAssertionNodeQuery(this.metastatementNode);
33
+
34
+ if (subproofAssertionNode !== null) {
35
+ const metaSubproofAssertionMetastatementNodes = metastatementNodesQuery(subproofAssertionNode),
36
+ unqualifiedStatementStatementNodes = unqualifiedStatementStatementNodesQuery(subproofNode),
37
+ qualifiedOrUnqualifiedStatementStatementNode = qualifiedOrUnqualifiedStatementStatementNodeQuery(subproofNode),
38
+ statementNodes = [
39
+ ...unqualifiedStatementStatementNodes,
40
+ qualifiedOrUnqualifiedStatementStatementNode
41
+ ],
42
+ statementNodesLength = statementNodes.length,
43
+ metaSubproofAssertionMetastatementNodesLength = metaSubproofAssertionMetastatementNodes.length;
44
+
45
+ if (statementNodesLength === metaSubproofAssertionMetastatementNodesLength) {
46
+ subproofNodeMatches = metaSubproofAssertionMetastatementNodes.every((metaSubproofAssertionMetastatementNode, index) => {
47
+ const statementNode = statementNodes[index],
48
+ nonTerminalNode = statementNode, ///
49
+ premiseNonTerminalNode = metaSubproofAssertionMetastatementNode, ///
50
+ premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions);
51
+
52
+ if (premiseNonTerminalNodeMatches) {
53
+ return true;
54
+ }
55
+ });
56
+ }
57
+ }
58
+
59
+ return subproofNodeMatches;
60
+ }
61
+
62
+ matchStatementNode(statementNode, substitutions) {
63
+ const nonTerminalNode = statementNode, ///
64
+ premiseNonTerminalNode = this.metastatementNode, ///
65
+ premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions),
66
+ statementNodeMatches = premiseNonTerminalNodeMatches; ///
67
+
68
+ return statementNodeMatches;
69
+ }
70
+
26
71
  matchMetaSubproofNode(metaSubproofNode, metaSubstitutions) {
27
72
  let metaSubproofNodeMatches = false;
28
73
 
@@ -44,7 +89,7 @@ export default class Premise {
44
89
  const metastatementNode = metastatementNodes[index],
45
90
  nonTerminalNode = metastatementNode, ///
46
91
  premiseNonTerminalNode = metaSubproofAssertionMetastatementNode, ///
47
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
92
+ premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
48
93
 
49
94
  if (premiseNonTerminalNodeMatches) {
50
95
  return true;
@@ -59,7 +104,7 @@ export default class Premise {
59
104
  matchMetastatementNode(metastatementNode, metaSubstitutions) {
60
105
  const nonTerminalNode = metastatementNode, ///
61
106
  premiseNonTerminalNode = this.metastatementNode, ///
62
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions),
107
+ premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions),
63
108
  metastatementNodeMatches = premiseNonTerminalNodeMatches; ///
64
109
 
65
110
  return metastatementNodeMatches;
@@ -91,23 +136,23 @@ export default class Premise {
91
136
  }
92
137
  }
93
138
 
94
- function matchPremiseNode(premiseNode, node, metaSubstitutions) {
139
+ function matchPremiseNode(premiseNode, node, substitutions) {
95
140
  let premiseNodeMatches = false;
96
141
 
97
142
  const nodeTerminalNode = node.isTerminalNode(),
98
- ruleNodeTerminalNode = premiseNode.isTerminalNode();
143
+ ruleNodeTerminalNode = premiseNode.isTerminalNode();
99
144
 
100
145
  if (nodeTerminalNode === ruleNodeTerminalNode) {
101
146
  if (nodeTerminalNode) {
102
147
  const terminalNode = node, ///
103
148
  premiseTerminalNode = premiseNode, ///
104
- premiseTerminalNodeMatches = matchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions);
149
+ premiseTerminalNodeMatches = matchPremiseTerminalNode(premiseTerminalNode, terminalNode, substitutions);
105
150
 
106
151
  premiseNodeMatches = premiseTerminalNodeMatches; ///
107
152
  } else {
108
153
  const nonTerminalNode = node, ///
109
154
  premiseNonTerminalNode = premiseNode, ///
110
- premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
155
+ premiseNonTerminalNodeMatches = matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, substitutions);
111
156
 
112
157
  premiseNodeMatches = premiseNonTerminalNodeMatches; ///
113
158
  }
@@ -116,7 +161,7 @@ function matchPremiseNode(premiseNode, node, metaSubstitutions) {
116
161
  return premiseNodeMatches;
117
162
  }
118
163
 
119
- function matchPremiseNodes(premiseNodes, nodes, metaSubstitutions) {
164
+ function matchPremiseNodes(premiseNodes, nodes, substitutions) {
120
165
  let premiseNodesMatches = false;
121
166
 
122
167
  const nodesLength = nodes.length,
@@ -125,7 +170,7 @@ function matchPremiseNodes(premiseNodes, nodes, metaSubstitutions) {
125
170
  if (nodesLength === premiseNodesLength) {
126
171
  premiseNodesMatches = nodes.every((node, index) => {
127
172
  const premiseNode = premiseNodes[index],
128
- premiseNodeMatches = matchPremiseNode(premiseNode, node, metaSubstitutions);
173
+ premiseNodeMatches = matchPremiseNode(premiseNode, node, substitutions);
129
174
 
130
175
  if (premiseNodeMatches) {
131
176
  return true;
@@ -136,81 +181,224 @@ function matchPremiseNodes(premiseNodes, nodes, metaSubstitutions) {
136
181
  return premiseNodesMatches;
137
182
  }
138
183
 
139
- function matchPremiseMetavariable(premiseMetavariableNode, nodes, metaSubstitutions) {
140
- let premiseMetavariableMatches;
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
+ ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
199
+ premiseNonTerminalNodeRuleNameMetastatementRuleName = (premiseNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
200
+
201
+ if (ruleNameStatementRuleName && premiseNonTerminalNodeRuleNameMetastatementRuleName) {
202
+ const statementNode = nonTerminalNode, ///
203
+ premiseMetastatementNode = premiseNonTerminalNode, ///
204
+ premiseMetastatementNodeMatches = matchPremiseMetastatementNode(premiseMetastatementNode, statementNode, substitutions);
205
+
206
+ if (premiseMetastatementNodeMatches) {
207
+ premiseNonTerminalNodeMatches = true;
208
+ } else {
209
+ const nodes = childNodes, ///
210
+ premiseNodes = premiseNonTerminalNodeChildNodes, ///
211
+ premiseNonTerminalNodeChildNodesMatches = matchPremiseNodes(premiseNodes, nodes, substitutions);
212
+
213
+ premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
214
+ }
215
+ } else if (ruleName === premiseNonTerminalNodeRuleName) {
216
+ const nodes = childNodes, ///
217
+ premiseNodes = premiseNonTerminalNodeChildNodes, ///
218
+ premiseNonTerminalNodeChildNodesMatches = matchPremiseNodes(premiseNodes, nodes, substitutions);
219
+
220
+ premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
221
+ }
222
+
223
+ return premiseNonTerminalNodeMatches;
224
+ }
225
+
226
+ function matchPremiseMetavariableNode(premiseMetavariableNode, nodes, substitutions) {
227
+ let premiseMetavariableNodeMatches;
141
228
 
142
229
  const premiseMetavariableName = metavariableNameFromMetavariableNode(premiseMetavariableNode),
143
- metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
144
- const metavariableName = metaSubstitution.getMetavariableName();
230
+ substitution = substitutions.find((substitution) => {
231
+ const metavariableName = substitution.getMetavariableName();
145
232
 
146
233
  if (metavariableName === premiseMetavariableName) {
147
234
  return true;
148
235
  }
149
236
  }) || null;
150
237
 
151
- if (metaSubstitution !== null) {
152
- const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
238
+ if (substitution !== null) {
239
+ const substitutionNodesMatch = substitution.matchNodes(nodes);
153
240
 
154
- premiseMetavariableMatches = metaSubstitutionNodesMatch; ///
241
+ premiseMetavariableNodeMatches = substitutionNodesMatch; ///
155
242
  } else {
156
243
  const metavariableName = premiseMetavariableName, ///
157
- metaSubstitution = MetaSubstitution.fromMetavariableNameAndNodes(metavariableName, nodes);
244
+ substitution = Substitution.fromMetavariableNameAndNodes(metavariableName, nodes);
158
245
 
159
- metaSubstitutions.push(metaSubstitution);
246
+ substitutions.push(substitution);
160
247
 
161
- premiseMetavariableMatches = true;
248
+ premiseMetavariableNodeMatches = true;
162
249
  }
163
250
 
164
- return premiseMetavariableMatches;
251
+ return premiseMetavariableNodeMatches;
252
+ }
253
+
254
+ function matchPremiseMetastatementNode(premiseMetastatementNode, statementNode, substitutions) {
255
+ let premiseMetastatementNodeMatches = false;
256
+
257
+ const premiseNonTerminalNode = premiseMetastatementNode, ///
258
+ premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(),
259
+ premiseNonTerminalNodeChildNodesLength = premiseNonTerminalNodeChildNodes.length;
260
+
261
+ if (premiseNonTerminalNodeChildNodesLength === 1) {
262
+ const firstPremiseChildNode = first(premiseNonTerminalNodeChildNodes),
263
+ premiseChildNode = firstPremiseChildNode, ///
264
+ premiseChildNodeNonTerminalNode = premiseChildNode.isNonTerminalNode();
265
+
266
+ if (premiseChildNodeNonTerminalNode) {
267
+ const premiseNonTerminalChildNode = premiseChildNode, ///
268
+ premiseNonTerminalChildNodeRuleName = premiseNonTerminalChildNode.getRuleName(),
269
+ premiseNonTerminalChildNodeRuleNameMetavariableRuleName = (premiseNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
270
+
271
+ if (premiseNonTerminalChildNodeRuleNameMetavariableRuleName) {
272
+ const premiseMetavariableNode = premiseNonTerminalChildNode, ///
273
+ nonTerminalNode = statementNode, ///
274
+ childNodes = nonTerminalNode.getChildNodes(),
275
+ nodes = childNodes, ///
276
+ premiseMetaVariableNodeMatches = matchPremiseMetavariableNode(premiseMetavariableNode, nodes, substitutions);
277
+
278
+ premiseMetastatementNodeMatches = premiseMetaVariableNodeMatches; ///
279
+ }
280
+ }
281
+ }
282
+
283
+ return premiseMetastatementNodeMatches;
165
284
  }
166
285
 
167
- function matchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions) {
286
+ function metaMatchPremiseNode(premiseNode, node, metaSubstitutions) {
287
+ let premiseNodeMatches = false;
288
+
289
+ const nodeTerminalNode = node.isTerminalNode(),
290
+ ruleNodeTerminalNode = premiseNode.isTerminalNode();
291
+
292
+ if (nodeTerminalNode === ruleNodeTerminalNode) {
293
+ if (nodeTerminalNode) {
294
+ const terminalNode = node, ///
295
+ premiseTerminalNode = premiseNode, ///
296
+ premiseTerminalNodeMatches = metaMatchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions);
297
+
298
+ premiseNodeMatches = premiseTerminalNodeMatches; ///
299
+ } else {
300
+ const nonTerminalNode = node, ///
301
+ premiseNonTerminalNode = premiseNode, ///
302
+ premiseNonTerminalNodeMatches = metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions);
303
+
304
+ premiseNodeMatches = premiseNonTerminalNodeMatches; ///
305
+ }
306
+ }
307
+
308
+ return premiseNodeMatches;
309
+ }
310
+
311
+ function metaMatchPremiseNodes(premiseNodes, nodes, metaSubstitutions) {
312
+ let premiseNodesMatches = false;
313
+
314
+ const nodesLength = nodes.length,
315
+ premiseNodesLength = premiseNodes.length;
316
+
317
+ if (nodesLength === premiseNodesLength) {
318
+ premiseNodesMatches = nodes.every((node, index) => {
319
+ const premiseNode = premiseNodes[index],
320
+ premiseNodeMatches = metaMatchPremiseNode(premiseNode, node, metaSubstitutions);
321
+
322
+ if (premiseNodeMatches) {
323
+ return true;
324
+ }
325
+ });
326
+ }
327
+
328
+ return premiseNodesMatches;
329
+ }
330
+
331
+ function metaMatchPremiseTerminalNode(premiseTerminalNode, terminalNode, metaSubstitutions) {
168
332
  const matches = premiseTerminalNode.match(terminalNode),
169
333
  premiseTerminalNodeMatches = matches;
170
334
 
171
335
  return premiseTerminalNodeMatches;
172
336
  }
173
337
 
174
- function matchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions) {
338
+ function metaMatchPremiseNonTerminalNode(premiseNonTerminalNode, nonTerminalNode, metaSubstitutions) {
175
339
  let premiseNonTerminalNodeMatches = false;
176
340
 
177
341
  const ruleName = nonTerminalNode.getRuleName(),
178
- premiseRuleName = premiseNonTerminalNode.getRuleName(); ///
342
+ premiseNonTerminalNodeRuleName = premiseNonTerminalNode.getRuleName(),
343
+ ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME),
344
+ premiseNonTerminalNodeRuleNameMetastatementRuleName = (premiseNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
345
+
346
+ if (ruleNameMetastatementRuleName && premiseNonTerminalNodeRuleNameMetastatementRuleName) {
347
+ const metastatementNode = nonTerminalNode, ///
348
+ premiseMetastatementNode = premiseNonTerminalNode, ///
349
+ premiseMetastatementNodeMatches = metaMatchPremiseMetastatementNode(premiseMetastatementNode, metastatementNode, metaSubstitutions);
179
350
 
180
- if (ruleName === premiseRuleName) {
351
+ premiseNonTerminalNodeMatches = premiseMetastatementNodeMatches; ///
352
+ } else if (ruleName === premiseNonTerminalNodeRuleName) {
181
353
  const childNodes = nonTerminalNode.getChildNodes(),
182
- premiseChildNodes = premiseNonTerminalNode.getChildNodes(),
354
+ premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(), ///
183
355
  nodes = childNodes, ///
184
- premiseNodes = premiseChildNodes, ///
185
- premiseChildNodesMatches = matchPremiseNodes(premiseNodes, nodes, metaSubstitutions);
356
+ premiseNodes = premiseNonTerminalNodeChildNodes, ///
357
+ premiseNonTerminalNodeChildNodesMatches = metaMatchPremiseNodes(premiseNodes, nodes, metaSubstitutions);
186
358
 
187
- premiseNonTerminalNodeMatches = premiseChildNodesMatches; ///
359
+ premiseNonTerminalNodeMatches = premiseNonTerminalNodeChildNodesMatches; ///
360
+ }
188
361
 
189
- if (!premiseNonTerminalNodeMatches) {
190
- const ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME);
362
+ return premiseNonTerminalNodeMatches;
363
+ }
191
364
 
192
- if (ruleNameMetastatementRuleName) {
193
- const metastatementNode = nonTerminalNode, ///
194
- premiseMetastatementNode = premiseNonTerminalNode, ///
195
- premiseMetastatementNodeMatches = matchPremiseMetastatementNode(premiseMetastatementNode, metastatementNode, metaSubstitutions);
365
+ function metaMatchPremiseMetavariableNode(premiseMetavariableNode, nodes, metaSubstitutions) {
366
+ let premiseMetavariableNodeMatches;
196
367
 
197
- premiseNonTerminalNodeMatches = premiseMetastatementNodeMatches; ///
198
- }
199
- }
368
+ const premiseMetavariableName = metavariableNameFromMetavariableNode(premiseMetavariableNode),
369
+ metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
370
+ const metavariableName = metaSubstitution.getMetavariableName();
371
+
372
+ if (metavariableName === premiseMetavariableName) {
373
+ return true;
374
+ }
375
+ }) || null;
376
+
377
+ if (metaSubstitution !== null) {
378
+ const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
379
+
380
+ premiseMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
381
+ } else {
382
+ const metavariableName = premiseMetavariableName, ///
383
+ metaSubstitution = MetaSubstitution.fromMetavariableNameAndNodes(metavariableName, nodes);
384
+
385
+ metaSubstitutions.push(metaSubstitution);
386
+
387
+ premiseMetavariableNodeMatches = true;
200
388
  }
201
389
 
202
- return premiseNonTerminalNodeMatches;
390
+ return premiseMetavariableNodeMatches;
203
391
  }
204
392
 
205
- function matchPremiseMetastatementNode(premiseMetastatementNode, metastatementNode, metaSubstitutions) {
393
+ function metaMatchPremiseMetastatementNode(premiseMetastatementNode, metastatementNode, metaSubstitutions) {
206
394
  let premiseMetastatementNodeMatches = false;
207
395
 
208
396
  const premiseNonTerminalNode = premiseMetastatementNode, ///
209
- premiseChildNodes = premiseNonTerminalNode.getChildNodes(),
210
- premiseChildNodesLength = premiseChildNodes.length;
397
+ premiseNonTerminalNodeChildNodes = premiseNonTerminalNode.getChildNodes(),
398
+ premiseNonTerminalNodeChildNodesLength = premiseNonTerminalNodeChildNodes.length;
211
399
 
212
- if (premiseChildNodesLength === 1) {
213
- const firstPremiseChildNode = first(premiseChildNodes),
400
+ if (premiseNonTerminalNodeChildNodesLength === 1) {
401
+ const firstPremiseChildNode = first(premiseNonTerminalNodeChildNodes),
214
402
  premiseChildNode = firstPremiseChildNode, ///
215
403
  premiseChildNodeNonTerminalNode = premiseChildNode.isNonTerminalNode();
216
404
 
@@ -224,9 +412,9 @@ function matchPremiseMetastatementNode(premiseMetastatementNode, metastatementNo
224
412
  nonTerminalNode = metastatementNode, ///
225
413
  childNodes = nonTerminalNode.getChildNodes(),
226
414
  nodes = childNodes, ///
227
- premiseMetaVariableMatches = matchPremiseMetavariable(premiseMetavariableNode, nodes, metaSubstitutions);
415
+ premiseMetaVariableNodeMatches = metaMatchPremiseMetavariableNode(premiseMetavariableNode, nodes, metaSubstitutions);
228
416
 
229
- premiseMetastatementNodeMatches = premiseMetaVariableMatches; ///
417
+ premiseMetastatementNodeMatches = premiseMetaVariableNodeMatches; ///
230
418
  }
231
419
  }
232
420
  }
package/src/rule.js CHANGED
@@ -40,6 +40,40 @@ export default class Rule {
40
40
  return matchesLabelName;
41
41
  }
42
42
 
43
+ matchStatement(statementNode, proofContext) {
44
+ let statementNatches;
45
+
46
+ const premisesLength = this.premises.length;
47
+
48
+ if (premisesLength === 0) {
49
+ const substitutions = [],
50
+ conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions);
51
+
52
+ statementNatches = conclusionMatches; ///
53
+ } else {
54
+ const proofSteps = proofContext.getProofSteps();
55
+
56
+ statementNatches = someSubArray(proofSteps, premisesLength, (proofSteps) => {
57
+ let premisesMatchConclusion = false;
58
+
59
+ const substitutions = [],
60
+ premisesMatch = matchPremises(this.premises, proofSteps, substitutions);
61
+
62
+ if (premisesMatch) {
63
+ const conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions);
64
+
65
+ premisesMatchConclusion = conclusionMatches; ///
66
+ }
67
+
68
+ if (premisesMatchConclusion) {
69
+ return true;
70
+ }
71
+ });
72
+ }
73
+
74
+ return statementNatches;
75
+ }
76
+
43
77
  matchMetastatement(metastatementNode, metaproofContext) {
44
78
  let metastatementNatches;
45
79
 
@@ -47,7 +81,7 @@ export default class Rule {
47
81
 
48
82
  if (premisesLength === 0) {
49
83
  const metaSubstitutions = [],
50
- conclusionMatches = matchConclusion(this.conclusion, metastatementNode, metaSubstitutions);
84
+ conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, metaSubstitutions);
51
85
 
52
86
  metastatementNatches = conclusionMatches; ///
53
87
  } else {
@@ -57,10 +91,10 @@ export default class Rule {
57
91
  let premisesMatchConclusion = false;
58
92
 
59
93
  const metaSubstitutions = [],
60
- premisesMatches = matchPremises(this.premises, metaproofSteps, metaSubstitutions);
94
+ premisesMatch = metaMatchPremises(this.premises, metaproofSteps, metaSubstitutions);
61
95
 
62
- if (premisesMatches) {
63
- const conclusionMatches = matchConclusion(this.conclusion, metastatementNode, metaSubstitutions);
96
+ if (premisesMatch) {
97
+ const conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, metaSubstitutions);
64
98
 
65
99
  premisesMatchConclusion = conclusionMatches; ///
66
100
  }
@@ -145,23 +179,69 @@ export default class Rule {
145
179
  }
146
180
  }
147
181
 
148
- function matchPremise(premise, metaproofSteps, metaSubstitutions) {
182
+ function matchPremise(premise, proofSteps, substitutions) {
183
+ const proofStep = prune(proofSteps, (proofStep) => {
184
+ const subproofNode = proofStep.getSubproofNode(),
185
+ statementNode = proofStep.getStatementNode()
186
+
187
+ if (subproofNode !== null) {
188
+ const subProofNodeMatches = premise.matchSubproofNode(subproofNode, substitutions);
189
+
190
+ if (!subProofNodeMatches) { ///
191
+ return true;
192
+ }
193
+ }
194
+
195
+ if (statementNode !== null) {
196
+ const statementNodeMatches = premise.matchStatementNode(statementNode, substitutions);
197
+
198
+ if (!statementNodeMatches) { ///
199
+ return true;
200
+ }
201
+ }
202
+ }) || null;
203
+
204
+ const premiseMatches = (proofStep !== null);
205
+
206
+ return premiseMatches;
207
+ }
208
+
209
+ function matchPremises(premise, proofSteps, substitutions) {
210
+ const premisesMatch = premise.every((premise) => {
211
+ const premiseMatches = matchPremise(premise, proofSteps, substitutions);
212
+
213
+ if (premiseMatches) {
214
+ return true;
215
+ }
216
+ });
217
+
218
+ return premisesMatch;
219
+ }
220
+
221
+ function matchConclusion(conclusion, statementNode, substitutions) {
222
+ const statementNodeMatches = conclusion.matchStatementNode(statementNode, substitutions),
223
+ conclusionMatches = statementNodeMatches; ///
224
+
225
+ return conclusionMatches;
226
+ }
227
+
228
+ function metaMatchPremise(premise, metaproofSteps, metaSubstitutions) {
149
229
  const metaproofStep = prune(metaproofSteps, (metaproofStep) => {
150
230
  const metaSubproofNode = metaproofStep.getMetaSubproofNode(),
151
231
  metastatementNode = metaproofStep.getMetastatementNode()
152
232
 
153
233
  if (metaSubproofNode !== null) {
154
- const metaSubProofMatches = premise.matchMetaSubproofNode(metaSubproofNode, metaSubstitutions);
234
+ const metaSubProofNodeMatches = premise.matchMetaSubproofNode(metaSubproofNode, metaSubstitutions);
155
235
 
156
- if (!metaSubProofMatches) { ///
236
+ if (!metaSubProofNodeMatches) { ///
157
237
  return true;
158
238
  }
159
239
  }
160
240
 
161
241
  if (metastatementNode !== null) {
162
- const metastatementMatches = premise.matchMetastatementNode(metastatementNode, metaSubstitutions);
242
+ const metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, metaSubstitutions);
163
243
 
164
- if (!metastatementMatches) { ///
244
+ if (!metastatementNodeMatches) { ///
165
245
  return true;
166
246
  }
167
247
  }
@@ -172,21 +252,21 @@ function matchPremise(premise, metaproofSteps, metaSubstitutions) {
172
252
  return premiseMatches;
173
253
  }
174
254
 
175
- function matchPremises(premise, metaproofSteps, metaSubstitutions) {
176
- const premisesMatches = premise.every((premise) => {
177
- const premiseMatches = matchPremise(premise, metaproofSteps, metaSubstitutions);
255
+ function metaMatchPremises(premise, metaproofSteps, metaSubstitutions) {
256
+ const premisesMatch = premise.every((premise) => {
257
+ const premiseMatches = metaMatchPremise(premise, metaproofSteps, metaSubstitutions);
178
258
 
179
259
  if (premiseMatches) {
180
260
  return true;
181
261
  }
182
262
  });
183
263
 
184
- return premisesMatches;
264
+ return premisesMatch;
185
265
  }
186
266
 
187
- function matchConclusion(conclusion, metastatementNode, metaSubstitutions) {
188
- const nonTerminalNodeMatches = conclusion.matchMetastatementNode(metastatementNode, metaSubstitutions),
189
- conclusionMatches = nonTerminalNodeMatches; ///
267
+ function metaMatchConclusion(conclusion, metastatementNode, metaSubstitutions) {
268
+ const metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, metaSubstitutions),
269
+ conclusionMatches = metastatementNodeMatches; ///
190
270
 
191
271
  return conclusionMatches;
192
272
  }
package/src/ruleNames.js CHANGED
@@ -4,12 +4,13 @@ export const TERM_RULE_NAME = "term";
4
4
  export const TYPE_RULE_NAME = "type";
5
5
  export const LABEL_RULE_NAME = "label";
6
6
  export const ARGUMENT_RULE_NAME = "argument";
7
+ export const SUBPROOF_RULE_NAME = "subproof";
8
+ export const STATEMENT_RULE_NAME = "statement";
7
9
  export const METAVARIABLE_RULE_NAME = "metavariable";
8
10
  export const METASTATEMENT_RULE_NAME = "metastatement";
9
11
  export const META_SUBPROOF_RULE_NAME = "metaSubproof";
12
+ export const QUALIFIED_STATEMENT_RULE_NAME = "qualifiedStatement";
10
13
  export const UNQUALIFIED_STATEMENT_RULE_NAME = "unqualifiedStatement";
11
14
  export const CONDITIONAL_INDICATIVE_RULE_NAME = "conditionalIndicative";
12
- export const COMBINATOR_DECLARATION_RULE_NAME = "combinatorDeclaration";
13
- export const CONSTRUCTOR_DECLARATION_RULE_NAME = "constructorDeclaration";
14
15
  export const QUALIFIED_METASTATEMENT_RULE_NAME = "qualifiedMetastatement";
15
16
  export const UNQUALIFIED_METASTATEMENT_RULE_NAME = "unqualifiedMetastatement";
@@ -3,13 +3,13 @@
3
3
  import { matchNodes, bracketedChildNodeFromChildNodes } from "./utilities/node";
4
4
 
5
5
  export default class Substitution {
6
- constructor(variableName, nodes) {
7
- this.variableName = variableName;
6
+ constructor(metavariableName, nodes) {
7
+ this.metavariableName = metavariableName;
8
8
  this.nodes = nodes;
9
9
  }
10
10
 
11
- getVariableName() {
12
- return this.variableName;
11
+ getMetavariableName() {
12
+ return this.metavariableName;
13
13
  }
14
14
 
15
15
  getNodes() {
@@ -21,9 +21,9 @@ export default class Substitution {
21
21
 
22
22
  const nodesA = this.nodes, ///
23
23
  nodesB = nodes,
24
- metaSubstitutionNodesMatch = matchNodes(nodesA, nodesB);
24
+ nodesMatch = matchNodes(nodesA, nodesB);
25
25
 
26
- matches = metaSubstitutionNodesMatch; ///
26
+ matches = nodesMatch; ///
27
27
 
28
28
  if (!matches) {
29
29
  const childNodes = nodes, ///
@@ -42,7 +42,7 @@ export default class Substitution {
42
42
  return matches;
43
43
  }
44
44
 
45
- static fromMetavariableNameAndNodes(variableName, nodes) {
45
+ static fromMetavariableNameAndNodes(metavariableName, nodes) {
46
46
  const bracketedChildNode = bracketedChildNodeFromChildNodes(nodes);
47
47
 
48
48
  if (bracketedChildNode !== null) {
@@ -52,7 +52,7 @@ export default class Substitution {
52
52
  nodes = childNodes; ///
53
53
  }
54
54
 
55
- const metaSubstitution = new Substitution(variableName, nodes);
55
+ const metaSubstitution = new Substitution(metavariableName, nodes);
56
56
 
57
57
  return metaSubstitution;
58
58
  }