occam-verify-cli 0.0.534 → 0.0.536
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/conclusion.js +3 -3
- package/lib/consequence.js +2 -2
- package/lib/constants.js +5 -1
- package/lib/context/proof.js +16 -1
- package/lib/equality.js +236 -69
- package/lib/log.js +6 -6
- package/lib/node/statement/equality.js +16 -0
- package/lib/premise.js +7 -7
- package/lib/supposition.js +4 -4
- package/lib/type.js +12 -5
- package/lib/variable.js +3 -23
- package/lib/verifier/metastatementForMetavariable.js +17 -17
- package/lib/verifier/statementForMetavariable.js +18 -18
- package/lib/verifier/termForVariable.js +17 -17
- package/lib/verifier.js +65 -20
- package/lib/verify/assertion/type.js +22 -11
- package/lib/verify/statement.js +227 -24
- package/package.json +1 -1
- package/src/conclusion.js +4 -4
- package/src/consequence.js +2 -2
- package/src/constants.js +1 -0
- package/src/context/proof.js +18 -0
- package/src/equality.js +159 -85
- package/src/log.js +7 -5
- package/src/node/statement/equality.js +9 -0
- package/src/premise.js +8 -8
- package/src/supposition.js +4 -4
- package/src/type.js +17 -8
- package/src/variable.js +2 -18
- package/src/verifier/metastatementForMetavariable.js +16 -16
- package/src/verifier/statementForMetavariable.js +17 -17
- package/src/verifier/termForVariable.js +16 -16
- package/src/verifier.js +18 -18
- package/src/verify/assertion/type.js +28 -13
- package/src/verify/statement.js +226 -42
- package/lib/verifier/statement.js +0 -199
- package/src/verifier/statement.js +0 -135
package/src/equality.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import matcher from "./matcher";
|
|
4
|
+
import Verifier from "./verifier";
|
|
5
|
+
import verifyTerm from "./verify/term";
|
|
6
|
+
import equalityStatementNode from "./node/statement/equality";
|
|
7
|
+
|
|
8
|
+
import { nodeQuery } from "./utilities/query";
|
|
9
|
+
import { first, second } from "./utilities/array";
|
|
3
10
|
import { TERM_RULE_NAME } from "./ruleNames";
|
|
11
|
+
import { EQUALITY_DEPTH } from "./constants";
|
|
12
|
+
import { verifyTermAsVariable } from "./verify/term";
|
|
13
|
+
|
|
14
|
+
const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
|
|
15
|
+
rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!");
|
|
4
16
|
|
|
5
17
|
export default class Equality {
|
|
6
18
|
constructor(leftTermNode, rightTermNode) {
|
|
@@ -16,7 +28,7 @@ export default class Equality {
|
|
|
16
28
|
return this.rightTermNode;
|
|
17
29
|
}
|
|
18
30
|
|
|
19
|
-
matchTermNodes(leftTermNode, rightTermNode, reversed, context) {
|
|
31
|
+
matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context) {
|
|
20
32
|
let leftTermNodeAndRightTermNodeMatch = true;
|
|
21
33
|
|
|
22
34
|
if (leftTermNodeAndRightTermNodeMatch) {
|
|
@@ -24,9 +36,9 @@ export default class Equality {
|
|
|
24
36
|
this.rightTermNode :
|
|
25
37
|
this.leftTermNode, ///
|
|
26
38
|
rightNonTerminalNode = leftTermNode, ///
|
|
27
|
-
|
|
39
|
+
nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
|
|
28
40
|
|
|
29
|
-
leftTermNodeAndRightTermNodeMatch =
|
|
41
|
+
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeVerified; ///
|
|
30
42
|
}
|
|
31
43
|
|
|
32
44
|
if (leftTermNodeAndRightTermNodeMatch) {
|
|
@@ -34,30 +46,32 @@ export default class Equality {
|
|
|
34
46
|
this.leftTermNode :
|
|
35
47
|
this.rightTermNode, ///
|
|
36
48
|
rightNonTerminalNode = rightTermNode, ///
|
|
37
|
-
|
|
49
|
+
nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
|
|
38
50
|
|
|
39
|
-
leftTermNodeAndRightTermNodeMatch =
|
|
51
|
+
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeVerified; ///
|
|
40
52
|
}
|
|
41
53
|
|
|
42
54
|
return leftTermNodeAndRightTermNodeMatch;
|
|
43
55
|
}
|
|
44
56
|
|
|
45
|
-
match(equality, context) {
|
|
57
|
+
match(equality, equalities, context) {
|
|
46
58
|
let matches = false;
|
|
47
59
|
|
|
48
60
|
const leftTermNode = equality.getLeftTermNode(),
|
|
49
61
|
rightTermNode = equality.getRightTermNode();
|
|
50
62
|
|
|
63
|
+
equalities = filterEqualities(equalities, equality); ///
|
|
64
|
+
|
|
51
65
|
if (!matches) {
|
|
52
66
|
const reversed = false,
|
|
53
|
-
leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, context);
|
|
67
|
+
leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context);
|
|
54
68
|
|
|
55
69
|
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
56
70
|
}
|
|
57
71
|
|
|
58
72
|
if (!matches) {
|
|
59
73
|
const reversed = true,
|
|
60
|
-
leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, context);
|
|
74
|
+
leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context);
|
|
61
75
|
|
|
62
76
|
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
63
77
|
}
|
|
@@ -65,13 +79,43 @@ export default class Equality {
|
|
|
65
79
|
return matches;
|
|
66
80
|
}
|
|
67
81
|
|
|
68
|
-
|
|
82
|
+
verify(equalities, context) {
|
|
69
83
|
const leftNonTerminalNode = this.leftTermNode, ///
|
|
70
84
|
rightNonTerminalNode = this.rightTermNode, ///
|
|
71
|
-
|
|
72
|
-
|
|
85
|
+
nonTerminalNodeVerified = equalityVerifier.verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context),
|
|
86
|
+
verified = nonTerminalNodeVerified; ///
|
|
87
|
+
|
|
88
|
+
return verified;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
static fromProofStep(proofStep) {
|
|
92
|
+
let equality = null;
|
|
93
|
+
|
|
94
|
+
const statementNode = proofStep.getStatementNode();
|
|
95
|
+
|
|
96
|
+
if (statementNode !== null) {
|
|
97
|
+
const nodeA = statementNode, ///
|
|
98
|
+
nodeB = equalityStatementNode, ///
|
|
99
|
+
depth = EQUALITY_DEPTH,
|
|
100
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB, depth);
|
|
101
|
+
|
|
102
|
+
if (nodeMatches) {
|
|
103
|
+
const leftTermNode = leftTermNodeQuery(statementNode),
|
|
104
|
+
rightTermNode = rightTermNodeQuery(statementNode);
|
|
105
|
+
|
|
106
|
+
equality = new Equality(leftTermNode, rightTermNode);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return equality;
|
|
111
|
+
}
|
|
73
112
|
|
|
74
|
-
|
|
113
|
+
static fromStatementNode(statementNode) {
|
|
114
|
+
const leftTermNode = leftTermNodeQuery(statementNode),
|
|
115
|
+
rightTermNode = rightTermNodeQuery(statementNode),
|
|
116
|
+
equality = new Equality(leftTermNode, rightTermNode);
|
|
117
|
+
|
|
118
|
+
return equality;
|
|
75
119
|
}
|
|
76
120
|
|
|
77
121
|
static fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
|
|
@@ -81,108 +125,138 @@ export default class Equality {
|
|
|
81
125
|
}
|
|
82
126
|
}
|
|
83
127
|
|
|
84
|
-
|
|
85
|
-
|
|
128
|
+
class EqualityVerifier extends Verifier {
|
|
129
|
+
verifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context) {
|
|
130
|
+
let nonTerminalNodeVerified = false;
|
|
86
131
|
|
|
87
|
-
|
|
88
|
-
|
|
132
|
+
const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
|
|
133
|
+
rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
|
|
89
134
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
terminalNodeB = nodeB, ///
|
|
94
|
-
terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, context);
|
|
135
|
+
if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
|
|
136
|
+
const ruleName = leftNonTerminalNodeRuleName, ///
|
|
137
|
+
ruleNameTermRuleName = (ruleName === TERM_RULE_NAME);
|
|
95
138
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
139
|
+
if (ruleNameTermRuleName) {
|
|
140
|
+
const leftTermNode = leftNonTerminalNode, ///
|
|
141
|
+
rightTermNode = rightNonTerminalNode, ///
|
|
142
|
+
termNodeVerified = this.verifyTermNode(leftTermNode, rightTermNode, equalities, context);
|
|
143
|
+
|
|
144
|
+
nonTerminalNodeVerified = termNodeVerified; ///
|
|
145
|
+
}
|
|
101
146
|
|
|
102
|
-
|
|
147
|
+
if (!nonTerminalNodeVerified) {
|
|
148
|
+
const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
|
|
149
|
+
rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
|
|
150
|
+
leftNodes = leftNonTerminalNodeChildNodes, ///
|
|
151
|
+
rightNodes = rightNonTerminalNodeChildNodes, ///
|
|
152
|
+
nodesVerified = this.verifyNodes(leftNodes, rightNodes, equalities, context);
|
|
153
|
+
|
|
154
|
+
nonTerminalNodeVerified = nodesVerified; ///
|
|
155
|
+
}
|
|
103
156
|
}
|
|
157
|
+
|
|
158
|
+
return nonTerminalNodeVerified;
|
|
104
159
|
}
|
|
105
160
|
|
|
106
|
-
|
|
107
|
-
|
|
161
|
+
verifyTermNode(leftTermNode, rightTermNode, equalities, context) {
|
|
162
|
+
let termNodeVerified = false;
|
|
108
163
|
|
|
109
|
-
|
|
110
|
-
|
|
164
|
+
const variables = [],
|
|
165
|
+
leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
|
|
166
|
+
rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
|
|
111
167
|
|
|
112
|
-
|
|
113
|
-
rightNodesLength = rightNodes.length;
|
|
168
|
+
let equality = null;
|
|
114
169
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
170
|
+
if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
|
|
171
|
+
const firstVariable = first(variables),
|
|
172
|
+
secondVariable = second(variables),
|
|
173
|
+
leftVariable = firstVariable, ///
|
|
174
|
+
rightVariable = secondVariable, ///
|
|
175
|
+
leftVariableType = leftVariable.getType(),
|
|
176
|
+
rightVariableType = rightVariable.getType(),
|
|
177
|
+
leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
|
|
119
178
|
|
|
120
|
-
if (
|
|
121
|
-
|
|
179
|
+
if (leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
|
|
180
|
+
equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
|
|
122
181
|
}
|
|
123
|
-
})
|
|
124
|
-
|
|
182
|
+
} else if (leftTermVerifiedAsVariable) {
|
|
183
|
+
const types = [];
|
|
125
184
|
|
|
126
|
-
|
|
127
|
-
}
|
|
185
|
+
verifyTerm(rightTermNode, types, context);
|
|
128
186
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
187
|
+
const firstType = first(types),
|
|
188
|
+
firstVariable = first(variables),
|
|
189
|
+
leftVariable = firstVariable, ///
|
|
190
|
+
rightTermType = firstType, ///
|
|
191
|
+
leftVariableType = leftVariable.getType(),
|
|
192
|
+
leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
|
|
132
193
|
|
|
133
|
-
|
|
134
|
-
|
|
194
|
+
if (leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
195
|
+
equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
|
|
196
|
+
}
|
|
197
|
+
} else if (rightTermVerifiedAsVariable) {
|
|
198
|
+
const types = [];
|
|
135
199
|
|
|
136
|
-
|
|
137
|
-
let nonTerminalNodeEquates = false;
|
|
200
|
+
verifyTerm(leftTermNode, types, context);
|
|
138
201
|
|
|
139
|
-
|
|
140
|
-
|
|
202
|
+
const firstType = first(types),
|
|
203
|
+
firstVariable = first(variables),
|
|
204
|
+
leftTermType = firstType, ///
|
|
205
|
+
rightVariable = firstVariable, ///
|
|
206
|
+
rightVariableType = rightVariable.getType(),
|
|
207
|
+
rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
|
|
141
208
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
209
|
+
if (rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
210
|
+
equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
|
|
211
|
+
}
|
|
212
|
+
} else {
|
|
213
|
+
const types = [];
|
|
145
214
|
|
|
146
|
-
|
|
147
|
-
const leftTermNode = leftNonTerminalNode, ///
|
|
148
|
-
rightTermNode = rightNonTerminalNode, ///
|
|
149
|
-
termNodeEquates = equateTermNode(leftTermNode, rightTermNode, context);
|
|
215
|
+
verifyTerm(leftTermNode, types, context);
|
|
150
216
|
|
|
151
|
-
|
|
217
|
+
verifyTerm(rightTermNode, types, context);
|
|
218
|
+
|
|
219
|
+
const firstType = first(types),
|
|
220
|
+
secondType = second(types),
|
|
221
|
+
leftTermType = firstType, ///
|
|
222
|
+
rightTermType = secondType, ///
|
|
223
|
+
leftTermTypeEqualToRightTermType = leftTermType.isEqualTo(rightTermType);
|
|
224
|
+
|
|
225
|
+
if (leftTermTypeEqualToRightTermType) {
|
|
226
|
+
equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode);
|
|
227
|
+
}
|
|
152
228
|
}
|
|
153
229
|
|
|
154
|
-
if (
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
nodesEquate = equateNodes(leftNodes, rightNodes, context);
|
|
230
|
+
if (equality !== null) {
|
|
231
|
+
const equalityA = equality, ///
|
|
232
|
+
equalitiesB = equalities, ///
|
|
233
|
+
equalityMatches = equalitiesB.some((equalityB) => { ///
|
|
234
|
+
const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, context);
|
|
160
235
|
|
|
161
|
-
|
|
236
|
+
if (equalityAMatchesEqualityB) {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
termNodeVerified = equalityMatches; ///
|
|
162
242
|
}
|
|
163
|
-
}
|
|
164
243
|
|
|
165
|
-
|
|
244
|
+
return termNodeVerified;
|
|
245
|
+
}
|
|
166
246
|
}
|
|
167
247
|
|
|
168
|
-
|
|
169
|
-
let termNodeEquates = false;
|
|
170
|
-
|
|
171
|
-
const equality = equalityFromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, context);
|
|
248
|
+
const equalityVerifier = new EqualityVerifier();
|
|
172
249
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
equalitiesB = equalities, ///
|
|
176
|
-
equalityMatches = equalitiesB.some((equalityB) => { ///
|
|
177
|
-
const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, context);
|
|
250
|
+
function filterEqualities(equalities, equality) {
|
|
251
|
+
const equalityA = equality; ///
|
|
178
252
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
});
|
|
253
|
+
equalities = equalities.filter((equality) => {
|
|
254
|
+
const equalityB = equality; ///
|
|
183
255
|
|
|
184
|
-
|
|
185
|
-
|
|
256
|
+
if (equalityA !== equalityB) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
186
260
|
|
|
187
|
-
return
|
|
261
|
+
return equalities;
|
|
188
262
|
}
|
package/src/log.js
CHANGED
|
@@ -110,14 +110,16 @@ function formatMessage(level, message, node = null, tokens = null, filePath = nu
|
|
|
110
110
|
message = `${upperCaseLevel}: ${message}`;
|
|
111
111
|
} else {
|
|
112
112
|
const leastLineIndex = leastLineIndexFromNodeAndTokens(node, tokens),
|
|
113
|
-
|
|
113
|
+
leastLineNumber = leastLineIndex + 1,
|
|
114
|
+
greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens),
|
|
115
|
+
greatestLineNumber = greatestLineIndex + 1;
|
|
114
116
|
|
|
115
|
-
if (
|
|
116
|
-
const
|
|
117
|
+
if (leastLineNumber === greatestLineNumber) {
|
|
118
|
+
const lineNumber = leastLineNumber; ///
|
|
117
119
|
|
|
118
|
-
message = `${upperCaseLevel}: ${filePath} (${
|
|
120
|
+
message = `${upperCaseLevel}: ${filePath} (${lineNumber}) - ${message}`;
|
|
119
121
|
} else {
|
|
120
|
-
message = `${upperCaseLevel}: ${filePath} (${
|
|
122
|
+
message = `${upperCaseLevel}: ${filePath} (${leastLineNumber}-${greatestLineNumber}) - ${message}`;
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
125
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { statementNodeFromStatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const equalityStatementString = "n=m";
|
|
6
|
+
|
|
7
|
+
const equalityStatementNode = statementNodeFromStatementString(equalityStatementString);
|
|
8
|
+
|
|
9
|
+
export default equalityStatementNode;
|
package/src/premise.js
CHANGED
|
@@ -43,9 +43,9 @@ export default class Premise {
|
|
|
43
43
|
const subproofStatementNode = subproofStatementNodes[index],
|
|
44
44
|
nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
45
45
|
nonTerminalNodeB = subproofStatementNode, ///
|
|
46
|
-
|
|
46
|
+
nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
47
47
|
|
|
48
|
-
if (
|
|
48
|
+
if (nonTerminalNodeVerified) {
|
|
49
49
|
return true;
|
|
50
50
|
}
|
|
51
51
|
});
|
|
@@ -58,8 +58,8 @@ export default class Premise {
|
|
|
58
58
|
matchStatementNode(statementNode, substitutions) {
|
|
59
59
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
60
60
|
nonTerminalNodeB = statementNode, ///
|
|
61
|
-
|
|
62
|
-
statementNodeMatches =
|
|
61
|
+
nonTerminalNodeVerified = premiseStatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
62
|
+
statementNodeMatches = nonTerminalNodeVerified; ///
|
|
63
63
|
|
|
64
64
|
return statementNodeMatches;
|
|
65
65
|
}
|
|
@@ -85,9 +85,9 @@ export default class Premise {
|
|
|
85
85
|
const ruleSubproofMetastatementNode = ruleSubproofMetastatementNodes[index],
|
|
86
86
|
nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
87
87
|
nonTerminalNodeB = ruleSubproofMetastatementNode, ///
|
|
88
|
-
|
|
88
|
+
nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
89
89
|
|
|
90
|
-
if (
|
|
90
|
+
if (nonTerminalNodeVerified) {
|
|
91
91
|
return true;
|
|
92
92
|
}
|
|
93
93
|
});
|
|
@@ -100,8 +100,8 @@ export default class Premise {
|
|
|
100
100
|
matchMetastatementNode(metastatementNode, substitutions) {
|
|
101
101
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
102
102
|
nonTerminalNodeB = metastatementNode, ///
|
|
103
|
-
|
|
104
|
-
metastatementNodeMatches =
|
|
103
|
+
nonTerminalNodeVerified = premiseMetastatementForMetavariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
104
|
+
metastatementNodeMatches = nonTerminalNodeVerified; ///
|
|
105
105
|
|
|
106
106
|
return metastatementNodeMatches;
|
|
107
107
|
}
|
package/src/supposition.js
CHANGED
|
@@ -40,9 +40,9 @@ export default class Supposition {
|
|
|
40
40
|
const subproofStatementNode = subproofStatementNodes[index],
|
|
41
41
|
nonTerminalNodeA = subproofAssertionStatementNode, ///
|
|
42
42
|
nonTerminalNodeB = subproofStatementNode, ///
|
|
43
|
-
|
|
43
|
+
nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
44
44
|
|
|
45
|
-
if (
|
|
45
|
+
if (nonTerminalNodeVerified) {
|
|
46
46
|
return true;
|
|
47
47
|
}
|
|
48
48
|
});
|
|
@@ -55,8 +55,8 @@ export default class Supposition {
|
|
|
55
55
|
matchStatementNode(statementNode, substitutions) {
|
|
56
56
|
const nonTerminalNodeA = this.statementNode, ///
|
|
57
57
|
nonTerminalNodeB = statementNode, ///
|
|
58
|
-
|
|
59
|
-
statementNodeMatches =
|
|
58
|
+
nonTerminalNodeVerified = suppositionTermForVariableVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
59
|
+
statementNodeMatches = nonTerminalNodeVerified; ///
|
|
60
60
|
|
|
61
61
|
return statementNodeMatches;
|
|
62
62
|
}
|
package/src/type.js
CHANGED
|
@@ -60,19 +60,28 @@ export default class Type {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
isEqualToOrSubTypeOf(type) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
const equalTo = this.isEqualTo(type),
|
|
64
|
+
subTypeOf = this.isSubTypeOf(type),
|
|
65
|
+
equalToOrSubTypeOf = (equalTo || subTypeOf);
|
|
66
66
|
|
|
67
|
-
return
|
|
67
|
+
return equalToOrSubTypeOf;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
isEqualToOrSuperTypeOf(type) {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
const equalTo = this.isEqualTo(type),
|
|
72
|
+
superTypeOf = this.isSuperTypeOf(type),
|
|
73
|
+
equalToOrSuperTypeOf = (equalTo || superTypeOf);
|
|
74
|
+
|
|
75
|
+
return equalToOrSuperTypeOf;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
isEqualToOrSubTypeOfOfSuperTypeOf(type) {
|
|
79
|
+
const equalTo = this.isEqualTo(type),
|
|
80
|
+
subTypeOf = this.isSubTypeOf(type),
|
|
81
|
+
superTypeOf = this.isSuperTypeOf(type),
|
|
82
|
+
equalToOrSubTypeOfOfSuperTypeOf = (equalTo || subTypeOf || superTypeOf);
|
|
74
83
|
|
|
75
|
-
return
|
|
84
|
+
return equalToOrSubTypeOfOfSuperTypeOf;
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
match(type) {
|
package/src/variable.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export default class Variable {
|
|
4
|
-
constructor(type, name
|
|
4
|
+
constructor(type, name) {
|
|
5
5
|
this.type = type;
|
|
6
6
|
this.name = name;
|
|
7
|
-
this.termNode = termNode;
|
|
8
7
|
}
|
|
9
8
|
|
|
10
9
|
getType() {
|
|
@@ -15,14 +14,6 @@ export default class Variable {
|
|
|
15
14
|
return this.name;
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
getTermNode() {
|
|
19
|
-
return this.termNode;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
isUndefined() {
|
|
23
|
-
return (this.termNode === null);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
17
|
matchName(name) {
|
|
27
18
|
const matchesName = (this.name === name);
|
|
28
19
|
|
|
@@ -37,14 +28,7 @@ export default class Variable {
|
|
|
37
28
|
}
|
|
38
29
|
|
|
39
30
|
static fromTypeAndName(type, name) {
|
|
40
|
-
const
|
|
41
|
-
variable = new Variable(type, name, termNode);
|
|
42
|
-
|
|
43
|
-
return variable;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
static fromTypeNameAndTermNode(type, name, termNode) {
|
|
47
|
-
const variable = new Variable(type, name, termNode);
|
|
31
|
+
const variable = new Variable(type, name);
|
|
48
32
|
|
|
49
33
|
return variable;
|
|
50
34
|
}
|
|
@@ -11,7 +11,7 @@ const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!');
|
|
|
11
11
|
|
|
12
12
|
export default class MetastatementForMetavariableVerifier extends Verifier {
|
|
13
13
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
|
|
14
|
-
let
|
|
14
|
+
let nonTerminalNodeVerified = false;
|
|
15
15
|
|
|
16
16
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
17
17
|
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
@@ -23,37 +23,37 @@ export default class MetastatementForMetavariableVerifier extends Verifier {
|
|
|
23
23
|
if (nonTerminalNodeARuleNameMetastatementRuleName && nonTerminalNodeBRuleNameMetastatementRuleName) {
|
|
24
24
|
const metastatementNodeA = nonTerminalNodeA, ///
|
|
25
25
|
metastatementNodeB = nonTerminalNodeB, ///
|
|
26
|
-
|
|
26
|
+
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions);
|
|
27
27
|
|
|
28
|
-
if (
|
|
29
|
-
|
|
28
|
+
if (metastatementNodeVerified) {
|
|
29
|
+
nonTerminalNodeVerified = true; ///
|
|
30
30
|
} else {
|
|
31
|
-
|
|
31
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
32
32
|
}
|
|
33
33
|
} else {
|
|
34
|
-
|
|
34
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
return
|
|
38
|
+
return nonTerminalNodeVerified;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions) {
|
|
42
|
-
let
|
|
42
|
+
let metastatementNodeVerified = false;
|
|
43
43
|
|
|
44
44
|
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
45
45
|
|
|
46
46
|
if (metavariableNodeA !== null) {
|
|
47
|
-
const
|
|
47
|
+
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions);
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
metastatementNodeVerified = metaVariableNodeVerified; ///
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
return
|
|
52
|
+
return metastatementNodeVerified;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions) {
|
|
56
|
-
let
|
|
56
|
+
let metavariableNodeVerified;
|
|
57
57
|
|
|
58
58
|
const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
|
|
59
59
|
substitution = substitutions.find((substitution) => {
|
|
@@ -66,9 +66,9 @@ export default class MetastatementForMetavariableVerifier extends Verifier {
|
|
|
66
66
|
|
|
67
67
|
if (substitution !== null) {
|
|
68
68
|
const metastatementNode = metastatementNodeB, ///
|
|
69
|
-
|
|
69
|
+
metastatementNodeMatches = substitution.matchMetastatementNode(metastatementNode);
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
metavariableNodeVerified = metastatementNodeMatches; ///
|
|
72
72
|
} else {
|
|
73
73
|
const { createSubstitutions } = this.constructor;
|
|
74
74
|
|
|
@@ -81,9 +81,9 @@ export default class MetastatementForMetavariableVerifier extends Verifier {
|
|
|
81
81
|
substitutions.push(substitution);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
metavariableNodeVerified = true;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
return
|
|
87
|
+
return metavariableNodeVerified;
|
|
88
88
|
}
|
|
89
89
|
}
|