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.
- package/lib/axiomLemmaTheorem.js +2 -2
- package/lib/conclusion.js +6 -161
- package/lib/consequence.js +4 -82
- package/lib/matcher/metastatementForMetavariable/conclusion.js +113 -0
- package/lib/matcher/metastatementForMetavariable/premise.js +113 -0
- package/lib/matcher/metastatementForMetavariable.js +201 -0
- package/lib/matcher/statementForMetavariable/conclusion.js +113 -0
- package/lib/matcher/statementForMetavariable/premise.js +113 -0
- package/lib/matcher/statementForMetavariable.js +201 -0
- package/lib/matcher/statementForVariable/consequence.js +113 -0
- package/lib/matcher/statementForVariable/supposition.js +113 -0
- package/lib/matcher/statementForVariable.js +201 -0
- package/lib/matcher.js +150 -0
- package/lib/premise.js +21 -190
- package/lib/rule.js +11 -11
- package/lib/ruleNames.js +5 -1
- package/lib/step/metaproof.js +5 -5
- package/lib/substitution/metastatementForMetavariable.js +86 -0
- package/lib/substitution/statementForMetavariable.js +86 -0
- package/lib/substitution/statementForVariable.js +86 -0
- package/lib/supposition.js +10 -97
- package/lib/utilities/substitution.js +61 -0
- package/lib/verify/metaproof.js +3 -3
- package/lib/verify/proof.js +3 -3
- package/lib/verify/ruleProof.js +3 -3
- package/package.json +1 -1
- package/src/axiomLemmaTheorem.js +1 -1
- package/src/conclusion.js +11 -282
- package/src/consequence.js +6 -144
- package/src/matcher/metastatementForMetavariable/conclusion.js +9 -0
- package/src/matcher/metastatementForMetavariable/premise.js +9 -0
- package/src/matcher/metastatementForMetavariable.js +99 -0
- package/src/matcher/statementForMetavariable/conclusion.js +9 -0
- package/src/matcher/statementForMetavariable/premise.js +9 -0
- package/src/matcher/statementForMetavariable.js +99 -0
- package/src/matcher/statementForVariable/consequence.js +9 -0
- package/src/matcher/statementForVariable/supposition.js +9 -0
- package/src/matcher/statementForVariable.js +99 -0
- package/src/matcher.js +76 -0
- package/src/premise.js +48 -336
- package/src/rule.js +12 -12
- package/src/ruleNames.js +1 -0
- package/src/step/metaproof.js +1 -1
- package/src/{metaSubstitution.js → substitution/metastatementForMetavariable.js} +9 -8
- package/src/{substitution.js → substitution/statementForMetavariable.js} +8 -7
- package/src/substitution/statementForVariable.js +64 -0
- package/src/supposition.js +26 -173
- package/src/utilities/{node.js → substitution.js} +4 -74
- package/src/verify/metaproof.js +2 -2
- package/src/verify/proof.js +2 -2
- package/src/verify/ruleProof.js +2 -2
- package/lib/metaSubstitution.js +0 -85
- package/lib/metaSupposition.js +0 -167
- package/lib/substitution.js +0 -85
- package/lib/utilities/node.js +0 -106
- package/lib/verify/metaSupposition.js +0 -41
- package/src/metaSupposition.js +0 -196
- 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 {
|
|
5
|
+
import { premiseStatementForMetavariableMatcher } from "./matcher/statementForMetavariable/premise";
|
|
10
6
|
import { metastatementNodeFromMetastatementString } from "./utilities/string";
|
|
11
|
-
import {
|
|
7
|
+
import { premiseMetastatementForMetavariableMatcher } from "./matcher/metastatementForMetavariable/premise";
|
|
12
8
|
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
subDerivationStatementNode
|
|
31
|
+
const subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
|
|
32
|
+
subproofSubDerivationLastStatementNode = subproofSubDerivationLastStatementNodeQuery(subproofNode),
|
|
33
|
+
subproofStatementNodes = [
|
|
34
|
+
...subproofSuppositionStatementNodes,
|
|
35
|
+
subproofSubDerivationLastStatementNode
|
|
41
36
|
],
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
statementNodeMatches =
|
|
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,
|
|
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
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
ruleSubDerivationMetastatementNode
|
|
73
|
+
const ruleSubproofPremiseMetastatement = ruleSubproofPremiseMetastatementQuery(ruleSubproofNode),
|
|
74
|
+
ruleSubproofSubDerivationLastMetastatement = ruleSubproofSubDerivationLastMetastatementQuery(ruleSubproofNode),
|
|
75
|
+
ruleSubproofMetastatementNodes = [
|
|
76
|
+
...ruleSubproofPremiseMetastatement,
|
|
77
|
+
ruleSubproofSubDerivationLastMetastatement
|
|
83
78
|
],
|
|
84
|
-
|
|
79
|
+
ruleSubproofMetastatementNodesLength = ruleSubproofMetastatementNodes.length,
|
|
80
|
+
ruleSubproofAssertionMetastatementNodes = ruleSubproofAssertionMetastatementNodesQuery(ruleSubproofAssertionNode),
|
|
85
81
|
ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
|
|
86
82
|
|
|
87
|
-
if (
|
|
83
|
+
if (ruleSubproofMetastatementNodesLength === ruleSubproofAssertionMetastatementNodesLength) {
|
|
88
84
|
ruleSubproofNodeMatches = ruleSubproofAssertionMetastatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
85
|
+
const ruleSubproofMetastatementNode = ruleSubproofMetastatementNodes[index],
|
|
86
|
+
nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
87
|
+
nonTerminalNodeB = ruleSubproofMetastatementNode, ///
|
|
88
|
+
nonTerminalNodeMatches = premiseMetastatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
93
89
|
|
|
94
|
-
if (
|
|
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,
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
metastatementNodeMatches =
|
|
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
|
|
84
|
-
conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode,
|
|
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
|
|
94
|
-
premisesMatch = metaMatchPremises(this.premises, metaproofSteps,
|
|
93
|
+
const substitutions = [],
|
|
94
|
+
premisesMatch = metaMatchPremises(this.premises, metaproofSteps, substitutions);
|
|
95
95
|
|
|
96
96
|
if (premisesMatch) {
|
|
97
|
-
const conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
255
|
+
function metaMatchPremises(premise, metaproofSteps, substitutions) {
|
|
256
256
|
const premisesMatch = premise.every((premise) => {
|
|
257
|
-
const premiseMatches = metaMatchPremise(premise, metaproofSteps,
|
|
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,
|
|
268
|
-
const metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode,
|
|
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";
|
package/src/step/metaproof.js
CHANGED
|
@@ -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/
|
|
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 {
|
|
4
|
-
import {
|
|
3
|
+
import { matcher } from "../matcher";
|
|
4
|
+
import { METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
5
|
+
import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
|
|
5
6
|
|
|
6
|
-
export default class
|
|
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
|
|
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
|
-
|
|
59
|
+
metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
return
|
|
62
|
+
return metastatementForMetavariableSubstitution;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { matcher } from "../matcher";
|
|
4
|
+
import { STATEMENT_RULE_NAME } from "../ruleNames";
|
|
5
|
+
import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
|
|
5
6
|
|
|
6
|
-
export default class
|
|
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
|
|
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
|
-
|
|
59
|
+
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
return
|
|
62
|
+
return statementForMetavariableSubstitution;
|
|
62
63
|
}
|
|
63
64
|
}
|