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/conclusion.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { first } from "./utilities/array";
|
|
4
3
|
import { nodeAsString } from "./utilities/string";
|
|
5
|
-
import { metavariableNameFromMetavariableNode } from "./utilities/query";
|
|
6
4
|
import { metastatementNodeFromMetastatementString } from "./utilities/string";
|
|
7
|
-
import {
|
|
5
|
+
import { conclusionStatementForMetavariableMatcher } from "./matcher/statementForMetavariable/conclusion";
|
|
6
|
+
import { conclusionMetastatementForMetavariableMatcher } from "./matcher/metastatementForMetavariable/conclusion";
|
|
8
7
|
|
|
9
8
|
export default class Conclusion {
|
|
10
9
|
constructor(metastatementNode) {
|
|
@@ -16,19 +15,19 @@ export default class Conclusion {
|
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
matchStatementNode(statementNode, substitutions) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
statementNodeMatches =
|
|
18
|
+
const nonTerminalNodeA = this.metastatementNode, ///
|
|
19
|
+
nonTerminalNodeB = statementNode, ///
|
|
20
|
+
nonTerminalNodeMatches = conclusionStatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
21
|
+
statementNodeMatches = nonTerminalNodeMatches; ///
|
|
23
22
|
|
|
24
23
|
return statementNodeMatches;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
|
-
matchMetastatementNode(metastatementNode,
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
metastatementNodeMatches =
|
|
26
|
+
matchMetastatementNode(metastatementNode, substitutions) {
|
|
27
|
+
const nonTerminalNodeA = this.metastatementNode, ///
|
|
28
|
+
nonTerminalNodeB = metastatementNode, ///
|
|
29
|
+
nonTerminalNodeMatches = conclusionMetastatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
30
|
+
metastatementNodeMatches = nonTerminalNodeMatches; ///
|
|
32
31
|
|
|
33
32
|
return metastatementNodeMatches;
|
|
34
33
|
}
|
|
@@ -58,273 +57,3 @@ export default class Conclusion {
|
|
|
58
57
|
return conclusion;
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
|
-
|
|
62
|
-
function matchConclusionNode(conclusionNode, node, substitutions) {
|
|
63
|
-
let conclusionNodeMatches = false;
|
|
64
|
-
|
|
65
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
66
|
-
ruleNodeTerminalNode = conclusionNode.isTerminalNode();
|
|
67
|
-
|
|
68
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
69
|
-
if (nodeTerminalNode) {
|
|
70
|
-
const terminalNode = node, ///
|
|
71
|
-
conclusionTerminalNode = conclusionNode, ///
|
|
72
|
-
conclusionTerminalNodeMatches = matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions);
|
|
73
|
-
|
|
74
|
-
conclusionNodeMatches = conclusionTerminalNodeMatches; ///
|
|
75
|
-
} else {
|
|
76
|
-
const nonTerminalNode = node, ///
|
|
77
|
-
conclusionNonTerminalNode = conclusionNode, ///
|
|
78
|
-
conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions);
|
|
79
|
-
|
|
80
|
-
conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return conclusionNodeMatches;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
|
|
88
|
-
let conclusionNodesMatch = false;
|
|
89
|
-
|
|
90
|
-
const nodesLength = nodes.length,
|
|
91
|
-
conclusionNodesLength = conclusionNodes.length;
|
|
92
|
-
|
|
93
|
-
if (nodesLength === conclusionNodesLength) {
|
|
94
|
-
conclusionNodesMatch = nodes.every((node, index) => {
|
|
95
|
-
const conclusionNode = conclusionNodes[index],
|
|
96
|
-
conclusionNodeMatches = matchConclusionNode(conclusionNode, node, metaSubstitutions);
|
|
97
|
-
|
|
98
|
-
if (conclusionNodeMatches) {
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return conclusionNodesMatch;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, substitutions) {
|
|
108
|
-
const matches = conclusionTerminalNode.match(terminalNode),
|
|
109
|
-
conclusionTerminalNodeMatches = matches; ///
|
|
110
|
-
|
|
111
|
-
return conclusionTerminalNodeMatches;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, substitutions) {
|
|
115
|
-
let conclusionNonTerminalNodeMatches = false;
|
|
116
|
-
|
|
117
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
118
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
119
|
-
conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
|
|
120
|
-
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
121
|
-
nodes = childNodes, ///
|
|
122
|
-
conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
|
|
123
|
-
ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME),
|
|
124
|
-
conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
|
|
125
|
-
|
|
126
|
-
if (ruleNameStatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
|
|
127
|
-
const statementNode = nonTerminalNode, ///
|
|
128
|
-
conclusionMetastatementNode = conclusionNonTerminalNode, ///
|
|
129
|
-
conclusionMetastatementNodeMatches = matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions);
|
|
130
|
-
|
|
131
|
-
if (conclusionMetastatementNodeMatches) {
|
|
132
|
-
conclusionNonTerminalNodeMatches = true; ///
|
|
133
|
-
} else {
|
|
134
|
-
const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
|
|
135
|
-
|
|
136
|
-
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
137
|
-
}
|
|
138
|
-
} else if (ruleName === conclusionNonTerminalNodeRuleName) {
|
|
139
|
-
const conclusionNonTerminalNodeChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, substitutions);
|
|
140
|
-
|
|
141
|
-
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return conclusionNonTerminalNodeMatches;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions) {
|
|
148
|
-
let conclusionMetavariableNodeMatches = true;
|
|
149
|
-
|
|
150
|
-
const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
|
|
151
|
-
substitution = substitutions.find((substitution) => {
|
|
152
|
-
const metavariableName = substitution.getMetavariableName();
|
|
153
|
-
|
|
154
|
-
if (metavariableName === conclusionMetavariableName) {
|
|
155
|
-
return true;
|
|
156
|
-
}
|
|
157
|
-
}) || null;
|
|
158
|
-
|
|
159
|
-
if (substitution !== null) {
|
|
160
|
-
const substitutionNodesMatch = substitution.matchStatementNode(statementNode);
|
|
161
|
-
|
|
162
|
-
conclusionMetavariableNodeMatches = substitutionNodesMatch; ///
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return conclusionMetavariableNodeMatches;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function matchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, substitutions) {
|
|
169
|
-
let conclusionMetastatementNodeMatches = false;
|
|
170
|
-
|
|
171
|
-
const conclusionNonTerminalNode = conclusionMetastatementNode, ///
|
|
172
|
-
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
173
|
-
conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
|
|
174
|
-
|
|
175
|
-
if (conclusionNonTerminalNodeChildNodesLength === 1) {
|
|
176
|
-
const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
|
|
177
|
-
conclusionChildNode = firstConclusionChildNode, ///
|
|
178
|
-
conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
|
|
179
|
-
|
|
180
|
-
if (conclusionChildNodeNonTerminalNode) {
|
|
181
|
-
const conclusionNonTerminalChildNode = conclusionChildNode, ///
|
|
182
|
-
conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
|
|
183
|
-
conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
|
|
184
|
-
|
|
185
|
-
if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
186
|
-
const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
|
|
187
|
-
conclusionMetavariableNodeMatches = matchConclusionMetavariableNode(conclusionMetavariableNode, statementNode, substitutions);
|
|
188
|
-
|
|
189
|
-
conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
return conclusionMetastatementNodeMatches;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function metaMatchConclusionNode(conclusionNode, node, metaSubstitutions) {
|
|
198
|
-
let conclusionNodeMatches = false;
|
|
199
|
-
|
|
200
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
201
|
-
ruleNodeTerminalNode = conclusionNode.isTerminalNode();
|
|
202
|
-
|
|
203
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
204
|
-
if (nodeTerminalNode) {
|
|
205
|
-
const terminalNode = node, ///
|
|
206
|
-
conclusionTerminalNode = conclusionNode, ///
|
|
207
|
-
conclusionTerminalNodeMatches = metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions);
|
|
208
|
-
|
|
209
|
-
conclusionNodeMatches = conclusionTerminalNodeMatches; ///
|
|
210
|
-
} else {
|
|
211
|
-
const nonTerminalNode = node, ///
|
|
212
|
-
conclusionNonTerminalNode = conclusionNode, ///
|
|
213
|
-
conclusionNonTerminalNodeMatches = metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
214
|
-
|
|
215
|
-
conclusionNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return conclusionNodeMatches;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
function metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
|
|
223
|
-
let conclusionNodesMatch = false;
|
|
224
|
-
|
|
225
|
-
const nodesLength = nodes.length,
|
|
226
|
-
conclusionNodesLength = conclusionNodes.length;
|
|
227
|
-
|
|
228
|
-
if (nodesLength === conclusionNodesLength) {
|
|
229
|
-
conclusionNodesMatch = nodes.every((node, index) => {
|
|
230
|
-
const conclusionNode = conclusionNodes[index],
|
|
231
|
-
conclusionNodeMatches = metaMatchConclusionNode(conclusionNode, node, metaSubstitutions);
|
|
232
|
-
|
|
233
|
-
if (conclusionNodeMatches) {
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
return conclusionNodesMatch;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function metaMatchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
|
|
243
|
-
const matches = conclusionTerminalNode.match(terminalNode),
|
|
244
|
-
conclusionTerminalNodeMatches = matches; ///
|
|
245
|
-
|
|
246
|
-
return conclusionTerminalNodeMatches;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
function metaMatchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
250
|
-
let conclusionNonTerminalNodeMatches = false;
|
|
251
|
-
|
|
252
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
253
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
254
|
-
conclusionNonTerminalNodeRuleName = conclusionNonTerminalNode.getRuleName(),
|
|
255
|
-
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
256
|
-
nodes = childNodes, ///
|
|
257
|
-
conclusionNodes = conclusionNonTerminalNodeChildNodes, ///
|
|
258
|
-
ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME),
|
|
259
|
-
conclusionNonTerminalNodeRuleNameMetastatementRuleName = (conclusionNonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
|
|
260
|
-
|
|
261
|
-
if (ruleNameMetastatementRuleName && conclusionNonTerminalNodeRuleNameMetastatementRuleName) {
|
|
262
|
-
const statementNode = nonTerminalNode, ///
|
|
263
|
-
conclusionMetastatementNode = conclusionNonTerminalNode, ///
|
|
264
|
-
conclusionMetastatementNodeMatches = metaMatchConclusionMetastatementNode(conclusionMetastatementNode, statementNode, metaSubstitutions);
|
|
265
|
-
|
|
266
|
-
if (conclusionMetastatementNodeMatches) {
|
|
267
|
-
conclusionNonTerminalNodeMatches = true; ///
|
|
268
|
-
} else {
|
|
269
|
-
const conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
|
|
270
|
-
|
|
271
|
-
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
272
|
-
}
|
|
273
|
-
} else if (ruleName === conclusionNonTerminalNodeRuleName) {
|
|
274
|
-
const conclusionNonTerminalNodeChildNodesMatches = metaMatchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
|
|
275
|
-
|
|
276
|
-
conclusionNonTerminalNodeMatches = conclusionNonTerminalNodeChildNodesMatches; ///
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
return conclusionNonTerminalNodeMatches;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
function metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions) {
|
|
283
|
-
let conclusionMetavariableNodeMatches = true;
|
|
284
|
-
|
|
285
|
-
const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
|
|
286
|
-
metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
|
|
287
|
-
const metavariableName = metaSubstitution.getMetavariableName();
|
|
288
|
-
|
|
289
|
-
if (metavariableName === conclusionMetavariableName) {
|
|
290
|
-
return true;
|
|
291
|
-
}
|
|
292
|
-
}) || null;
|
|
293
|
-
|
|
294
|
-
if (metaSubstitution !== null) {
|
|
295
|
-
const metaSubstitutionNodesMatch = metaSubstitution.matchMetastatementNode(metastatementNode);
|
|
296
|
-
|
|
297
|
-
conclusionMetavariableNodeMatches = metaSubstitutionNodesMatch; ///
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
return conclusionMetavariableNodeMatches;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
function metaMatchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
304
|
-
let conclusionMetastatementNodeMatches = false;
|
|
305
|
-
|
|
306
|
-
const conclusionNonTerminalNode = conclusionMetastatementNode, ///
|
|
307
|
-
conclusionNonTerminalNodeChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
308
|
-
conclusionNonTerminalNodeChildNodesLength = conclusionNonTerminalNodeChildNodes.length;
|
|
309
|
-
|
|
310
|
-
if (conclusionNonTerminalNodeChildNodesLength === 1) {
|
|
311
|
-
const firstConclusionChildNode = first(conclusionNonTerminalNodeChildNodes),
|
|
312
|
-
conclusionChildNode = firstConclusionChildNode, ///
|
|
313
|
-
conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
|
|
314
|
-
|
|
315
|
-
if (conclusionChildNodeNonTerminalNode) {
|
|
316
|
-
const conclusionNonTerminalChildNode = conclusionChildNode, ///
|
|
317
|
-
conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
|
|
318
|
-
conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
|
|
319
|
-
|
|
320
|
-
if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
321
|
-
const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
|
|
322
|
-
conclusionMetavariableNodeMatches = metaMatchConclusionMetavariableNode(conclusionMetavariableNode, metastatementNode, metaSubstitutions);
|
|
323
|
-
|
|
324
|
-
conclusionMetastatementNodeMatches = conclusionMetavariableNodeMatches; ///
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
return conclusionMetastatementNodeMatches;
|
|
330
|
-
}
|
package/src/consequence.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { first } from "./utilities/array";
|
|
4
3
|
import { nodeAsString } from "./utilities/string";
|
|
5
|
-
import { variableNameFromVariableNode } from "./utilities/query";
|
|
6
4
|
import { statementNodeFromStatementString } from "./utilities/string";
|
|
7
|
-
import {
|
|
5
|
+
import { consequenceStatementForVariableMatcher } from "./matcher/statementForVariable/consequence";
|
|
8
6
|
|
|
9
7
|
export default class Consequence {
|
|
10
8
|
constructor(statementNode) {
|
|
@@ -15,11 +13,11 @@ export default class Consequence {
|
|
|
15
13
|
return this.statementNode;
|
|
16
14
|
}
|
|
17
15
|
|
|
18
|
-
matchStatementNode(statementNode,
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
statementNodeMatches =
|
|
16
|
+
matchStatementNode(statementNode, substitutions) {
|
|
17
|
+
const nonTerminalNodeA = this.statementNode, ///
|
|
18
|
+
nonTerminalNodeB = statementNode, ///
|
|
19
|
+
nonTerminalNodeMatches = consequenceStatementForVariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
20
|
+
statementNodeMatches = nonTerminalNodeMatches; ///
|
|
23
21
|
|
|
24
22
|
return statementNodeMatches;
|
|
25
23
|
}
|
|
@@ -49,139 +47,3 @@ export default class Consequence {
|
|
|
49
47
|
return consequence;
|
|
50
48
|
}
|
|
51
49
|
}
|
|
52
|
-
|
|
53
|
-
function matchConsequenceNode(consequenceNode, node, metaSubstitutions) {
|
|
54
|
-
let consequenceNodeMatches = false;
|
|
55
|
-
|
|
56
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
57
|
-
ruleNodeTerminalNode = consequenceNode.isTerminalNode();
|
|
58
|
-
|
|
59
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
60
|
-
if (nodeTerminalNode) {
|
|
61
|
-
const terminalNode = node, ///
|
|
62
|
-
consequenceTerminalNode = consequenceNode, ///
|
|
63
|
-
consequenceTerminalNodeMatches = matchConsequenceTerminalNode(consequenceTerminalNode, terminalNode, metaSubstitutions);
|
|
64
|
-
|
|
65
|
-
consequenceNodeMatches = consequenceTerminalNodeMatches; ///
|
|
66
|
-
} else {
|
|
67
|
-
const nonTerminalNode = node, ///
|
|
68
|
-
consequenceNonTerminalNode = consequenceNode, ///
|
|
69
|
-
consequenceNonTerminalNodeMatches = matchConsequenceNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
70
|
-
|
|
71
|
-
consequenceNodeMatches = consequenceNonTerminalNodeMatches; ///
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return consequenceNodeMatches;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function matchConsequenceNodes(consequenceNodes, nodes, metaSubstitutions) {
|
|
79
|
-
let consequenceNodesMatches = false;
|
|
80
|
-
|
|
81
|
-
const nodesLength = nodes.length,
|
|
82
|
-
consequenceNodesLength = consequenceNodes.length;
|
|
83
|
-
|
|
84
|
-
if (nodesLength === consequenceNodesLength) {
|
|
85
|
-
consequenceNodesMatches = nodes.every((node, index) => {
|
|
86
|
-
const consequenceNode = consequenceNodes[index],
|
|
87
|
-
consequenceNodeMatches = matchConsequenceNode(consequenceNode, node, metaSubstitutions);
|
|
88
|
-
|
|
89
|
-
if (consequenceNodeMatches) {
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return consequenceNodesMatches;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function matchConsequenceVariable(consequenceVariableNode, nodes, metaSubstitutions) {
|
|
99
|
-
let consequenceVariableMatches = true;
|
|
100
|
-
|
|
101
|
-
const consequenceVariableName = variableNameFromVariableNode(consequenceVariableNode),
|
|
102
|
-
metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
|
|
103
|
-
const variableName = metaSubstitution.getVariableName();
|
|
104
|
-
|
|
105
|
-
if (variableName === consequenceVariableName) {
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
}) || null;
|
|
109
|
-
|
|
110
|
-
if (metaSubstitution !== null) {
|
|
111
|
-
const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
|
|
112
|
-
|
|
113
|
-
consequenceVariableMatches = metaSubstitutionNodesMatch; ///
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return consequenceVariableMatches;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function matchConsequenceTerminalNode(consequenceTerminalNode, terminalNode, metaSubstitutions) {
|
|
120
|
-
const matches = consequenceTerminalNode.match(terminalNode),
|
|
121
|
-
consequenceTerminalNodeMatches = matches; ///
|
|
122
|
-
|
|
123
|
-
return consequenceTerminalNodeMatches;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function matchConsequenceNonTerminalNode(consequenceNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
127
|
-
let consequenceNonTerminalNodeMatches = false;
|
|
128
|
-
|
|
129
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
130
|
-
consequenceRuleName = consequenceNonTerminalNode.getRuleName(); ///
|
|
131
|
-
|
|
132
|
-
if (ruleName === consequenceRuleName) {
|
|
133
|
-
const childNodes = nonTerminalNode.getChildNodes(),
|
|
134
|
-
consequenceChildNodes = consequenceNonTerminalNode.getChildNodes(),
|
|
135
|
-
nodes = childNodes, ///
|
|
136
|
-
consequenceNodes = consequenceChildNodes, ///
|
|
137
|
-
consequenceChildNodesMatches = matchConsequenceNodes(consequenceNodes, nodes, metaSubstitutions);
|
|
138
|
-
|
|
139
|
-
consequenceNonTerminalNodeMatches = consequenceChildNodesMatches; ///
|
|
140
|
-
|
|
141
|
-
if (!consequenceNonTerminalNodeMatches) {
|
|
142
|
-
const ruleNameStatementRuleName = (ruleName === STATEMENT_RULE_NAME);
|
|
143
|
-
|
|
144
|
-
if (ruleNameStatementRuleName) {
|
|
145
|
-
const statementNode = nonTerminalNode, ///
|
|
146
|
-
consequenceStatementNode = consequenceNonTerminalNode, ///
|
|
147
|
-
consequenceStatementNodeMatches = matchConsequenceStatementNode(consequenceStatementNode, statementNode, metaSubstitutions);
|
|
148
|
-
|
|
149
|
-
consequenceNonTerminalNodeMatches = consequenceStatementNodeMatches; ///
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return consequenceNonTerminalNodeMatches;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function matchConsequenceStatementNode(consequenceStatementNode, statementNode, metaSubstitutions) {
|
|
158
|
-
let consequenceStatementNodeMatches = false;
|
|
159
|
-
|
|
160
|
-
const consequenceNonTerminalNode = consequenceStatementNode, ///
|
|
161
|
-
consequenceChildNodes = consequenceNonTerminalNode.getChildNodes(),
|
|
162
|
-
consequenceChildNodesLength = consequenceChildNodes.length;
|
|
163
|
-
|
|
164
|
-
if (consequenceChildNodesLength === 1) {
|
|
165
|
-
const firstConsequenceChildNode = first(consequenceChildNodes),
|
|
166
|
-
consequenceChildNode = firstConsequenceChildNode, ///
|
|
167
|
-
consequenceChildNodeNonTerminalNode = consequenceChildNode.isNonTerminalNode();
|
|
168
|
-
|
|
169
|
-
if (consequenceChildNodeNonTerminalNode) {
|
|
170
|
-
const consequenceNonTerminalChildNode = consequenceChildNode, ///
|
|
171
|
-
consequenceNonTerminalChildNodeRuleName = consequenceNonTerminalChildNode.getRuleName(),
|
|
172
|
-
consequenceNonTerminalChildNodeRuleNameVariableRuleName = (consequenceNonTerminalChildNodeRuleName === VARIABLE_RULE_NAME);
|
|
173
|
-
|
|
174
|
-
if (consequenceNonTerminalChildNodeRuleNameVariableRuleName) {
|
|
175
|
-
const consequenceVariableNode = consequenceNonTerminalChildNode, ///
|
|
176
|
-
nonTerminalNode = statementNode, ///
|
|
177
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
178
|
-
nodes = childNodes, ///
|
|
179
|
-
consequenceMetaVariableMatches = matchConsequenceVariable(consequenceVariableNode, nodes, metaSubstitutions);
|
|
180
|
-
|
|
181
|
-
consequenceStatementNodeMatches = consequenceMetaVariableMatches; ///
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return consequenceStatementNodeMatches;
|
|
187
|
-
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MetastatementForMetavariableMatcher from "../../matcher/metastatementForMetavariable";
|
|
4
|
+
|
|
5
|
+
class ConclusionMetastatementForMetavariableMatcher extends MetastatementForMetavariableMatcher {
|
|
6
|
+
static createSubstitutions = false;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const conclusionMetastatementForMetavariableMatcher = new ConclusionMetastatementForMetavariableMatcher();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MetastatementForMetavariableMatcher from "../../matcher/metastatementForMetavariable";
|
|
4
|
+
|
|
5
|
+
class PremiseMetastatementForMetavariableMatcher extends MetastatementForMetavariableMatcher {
|
|
6
|
+
static createSubstitutions = true;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const premiseMetastatementForMetavariableMatcher = new PremiseMetastatementForMetavariableMatcher();
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Matcher from "../matcher";
|
|
4
|
+
import MetastatementForMetavariableSubstitution from "../substitution/metastatementForMetavariable";
|
|
5
|
+
|
|
6
|
+
import { first } from "../utilities/array";
|
|
7
|
+
import { metavariableNameFromMetavariableNode } from "../utilities/query";
|
|
8
|
+
import { METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
9
|
+
|
|
10
|
+
export default class MetastatementForMetavariableMatcher extends Matcher {
|
|
11
|
+
matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
|
|
12
|
+
let nonTerminalNodeMatches = false;
|
|
13
|
+
|
|
14
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
15
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(),
|
|
16
|
+
nonTerminalNodeARuleNameMetastatementRuleName = (nonTerminalNodeARuleName === METASTATEMENT_RULE_NAME),
|
|
17
|
+
nonTerminalNodeBRuleNameMetastatementRuleName = (nonTerminalNodeBRuleName === METASTATEMENT_RULE_NAME);
|
|
18
|
+
|
|
19
|
+
if (nonTerminalNodeARuleNameMetastatementRuleName && nonTerminalNodeBRuleNameMetastatementRuleName) {
|
|
20
|
+
const metastatementNodeA = nonTerminalNodeA, ///
|
|
21
|
+
metastatementNodeB = nonTerminalNodeB, ///
|
|
22
|
+
metastatementNodeMatches = this.matchMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions);
|
|
23
|
+
|
|
24
|
+
if (metastatementNodeMatches) {
|
|
25
|
+
nonTerminalNodeMatches = true; ///
|
|
26
|
+
} else {
|
|
27
|
+
nonTerminalNodeMatches = super.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
28
|
+
}
|
|
29
|
+
} else if (nonTerminalNodeBRuleName === nonTerminalNodeARuleName) {
|
|
30
|
+
nonTerminalNodeMatches = super.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return nonTerminalNodeMatches;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
matchMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions) {
|
|
37
|
+
let metastatementNodeMatches = false;
|
|
38
|
+
|
|
39
|
+
const nonTerminalNodeA = metastatementNodeA, ///
|
|
40
|
+
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
41
|
+
nonTerminalNodeAChildNodesLength = nonTerminalNodeAChildNodes.length;
|
|
42
|
+
|
|
43
|
+
if (nonTerminalNodeAChildNodesLength === 1) {
|
|
44
|
+
const firstNonTerminalNodeAChildNode = first(nonTerminalNodeAChildNodes),
|
|
45
|
+
cChildNodeA = firstNonTerminalNodeAChildNode, ///
|
|
46
|
+
cChildNodeANonTerminalNode = cChildNodeA.isNonTerminalNode();
|
|
47
|
+
|
|
48
|
+
if (cChildNodeANonTerminalNode) {
|
|
49
|
+
const nonTerminalNodeA = cChildNodeA, ///
|
|
50
|
+
nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
51
|
+
nonTerminalNodeARuleNameMetavariableRuleName = (nonTerminalNodeARuleName === METAVARIABLE_RULE_NAME);
|
|
52
|
+
|
|
53
|
+
if (nonTerminalNodeARuleNameMetavariableRuleName) {
|
|
54
|
+
const metavariableNodeA = nonTerminalNodeA, ///
|
|
55
|
+
metaVariableNodeMatches = this.matchMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions);
|
|
56
|
+
|
|
57
|
+
metastatementNodeMatches = metaVariableNodeMatches; ///
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return metastatementNodeMatches;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
matchMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions) {
|
|
66
|
+
let metavariableNodeMatches;
|
|
67
|
+
|
|
68
|
+
const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
|
|
69
|
+
substitution = substitutions.find((substitution) => {
|
|
70
|
+
const metavariableName = substitution.getMetavariableName();
|
|
71
|
+
|
|
72
|
+
if (metavariableName === metavariableNameA) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}) || null;
|
|
76
|
+
|
|
77
|
+
if (substitution !== null) {
|
|
78
|
+
const metastatementNode = metastatementNodeB, ///
|
|
79
|
+
substitutionNodesMatch = substitution.matchMetastatementNode(metastatementNode);
|
|
80
|
+
|
|
81
|
+
metavariableNodeMatches = substitutionNodesMatch; ///
|
|
82
|
+
} else {
|
|
83
|
+
const { createSubstitutions } = this.constructor;
|
|
84
|
+
|
|
85
|
+
if (createSubstitutions) {
|
|
86
|
+
const metavariableName = metavariableNameA, ///
|
|
87
|
+
metastatementNode = metastatementNodeB, ///
|
|
88
|
+
metastatementForMetavariableSubstitution = MetastatementForMetavariableSubstitution.fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode),
|
|
89
|
+
substitution = metastatementForMetavariableSubstitution; ///
|
|
90
|
+
|
|
91
|
+
substitutions.push(substitution);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
metavariableNodeMatches = true;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return metavariableNodeMatches;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import StatementForMetavariableMatcher from "../../matcher/statementForMetavariable";
|
|
4
|
+
|
|
5
|
+
class ConclusionStatementForMetavariableMatcher extends StatementForMetavariableMatcher {
|
|
6
|
+
static createSubstitutions = false;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const conclusionStatementForMetavariableMatcher = new ConclusionStatementForMetavariableMatcher();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import StatementForMetavariableMatcher from "../../matcher/statementForMetavariable";
|
|
4
|
+
|
|
5
|
+
class PremiseStatementForMetavariableMatcher extends StatementForMetavariableMatcher {
|
|
6
|
+
static createSubstitutions = true;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const premiseStatementForMetavariableMatcher = new PremiseStatementForMetavariableMatcher();
|