occam-verify-cli 0.0.933 → 0.0.934
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/context/local.js +8 -7
- package/lib/declaration.js +2 -2
- package/lib/equivalence.js +16 -1
- package/lib/proofStep.js +43 -6
- package/lib/shim.js +14 -0
- package/lib/substitution/statementForMetavariable.js +45 -1
- package/lib/substitution/termForVariable.js +15 -1
- package/lib/unifier/metaLevel.js +5 -1
- package/lib/unifier/statementAgainstCombinator.js +3 -2
- package/lib/unifier/termAgainstConstructor.js +3 -2
- package/lib/verify/declaration.js +18 -18
- package/lib/verify/judgement.js +2 -2
- package/lib/verify/proofStep.js +3 -3
- package/lib/verify/statement/qualified.js +57 -9
- package/lib/verify/statement/unqualified.js +62 -51
- package/lib/verify/statement.js +22 -34
- package/lib/verify/subDerivation.js +8 -2
- package/lib/verify/term.js +3 -2
- package/package.json +1 -1
- package/src/context/local.js +8 -5
- package/src/declaration.js +2 -2
- package/src/equivalence.js +19 -0
- package/src/proofStep.js +57 -4
- package/src/shim.js +5 -0
- package/src/substitution/statementForMetavariable.js +31 -0
- package/src/substitution/termForVariable.js +16 -0
- package/src/unifier/metaLevel.js +5 -0
- package/src/unifier/statementAgainstCombinator.js +2 -1
- package/src/unifier/termAgainstConstructor.js +2 -1
- package/src/verify/declaration.js +20 -23
- package/src/verify/judgement.js +1 -1
- package/src/verify/proofStep.js +2 -2
- package/src/verify/statement/qualified.js +84 -8
- package/src/verify/statement/unqualified.js +85 -12
- package/src/verify/statement.js +34 -37
- package/src/verify/subDerivation.js +3 -1
- package/src/verify/term.js +2 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import Declaration from "../declaration"
|
|
4
|
-
import metaLevelUnifier from "../unifier/metaLevel";
|
|
5
5
|
import referenceMetaType from "../metaType/reference";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
metavariableNodeQuery = nodeQuery("/metavariable!");
|
|
9
|
+
const statementNodeQuery = nodeQuery("/declaration/statement!"),
|
|
10
|
+
metavariableNodeQuery = nodeQuery("/declaration/metavariable!");
|
|
12
11
|
|
|
13
12
|
export default function verifyDeclaration(declarationNode, declarations, localContext) {
|
|
14
13
|
let declarationVerified = false;
|
|
@@ -17,20 +16,19 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
|
|
|
17
16
|
|
|
18
17
|
localContext.trace(`Verifying the '${declarationString}' declaration...`, declarationNode);
|
|
19
18
|
|
|
20
|
-
const
|
|
21
|
-
|
|
19
|
+
const metavariableNode = metavariableNodeQuery(declarationNode),
|
|
20
|
+
metavariableVerified = verifyMetavariable(metavariableNode, localContext);
|
|
22
21
|
|
|
23
|
-
if (
|
|
22
|
+
if (metavariableVerified) {
|
|
24
23
|
const statementNode = statementNodeQuery(declarationNode);
|
|
25
24
|
|
|
26
|
-
const { verifyStatement } =
|
|
25
|
+
const { verifyStatement } = shim,
|
|
27
26
|
derived = false,
|
|
28
27
|
assignments = [],
|
|
29
28
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
30
29
|
|
|
31
30
|
if (statementVerified) {
|
|
32
|
-
const
|
|
33
|
-
declaration = Declaration.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode);
|
|
31
|
+
const declaration = Declaration.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode);
|
|
34
32
|
|
|
35
33
|
declarations.push(declaration);
|
|
36
34
|
|
|
@@ -45,34 +43,33 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
|
|
|
45
43
|
return declarationVerified;
|
|
46
44
|
}
|
|
47
45
|
|
|
48
|
-
function
|
|
49
|
-
let
|
|
46
|
+
function verifyMetavariable(metavariableNode, localContext) {
|
|
47
|
+
let metavariableVerified = false;
|
|
50
48
|
|
|
51
|
-
const
|
|
49
|
+
const metavariableString = localContext.nodeAsString(metavariableNode);
|
|
52
50
|
|
|
53
|
-
localContext.trace(`Verifying the '${
|
|
51
|
+
localContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
|
|
54
52
|
|
|
55
|
-
const
|
|
56
|
-
metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
53
|
+
const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
57
54
|
|
|
58
55
|
if (metavariable !== null) {
|
|
59
56
|
const metaType = metavariable.getMetaType();
|
|
60
57
|
|
|
61
58
|
if (metaType === referenceMetaType) {
|
|
62
|
-
|
|
59
|
+
metavariableVerified = true;
|
|
63
60
|
} else {
|
|
64
61
|
const referenceMetaTypeName = referenceMetaType.getName(),
|
|
65
62
|
metaTypeString = metaType.asString();
|
|
66
63
|
|
|
67
|
-
localContext.debug(`The '${
|
|
64
|
+
localContext.debug(`The '${metavariableString}' metavariable's meta-type is '${metaTypeString}' when it should be '${referenceMetaTypeName}'.`, metavariableNode);
|
|
68
65
|
}
|
|
69
66
|
} else {
|
|
70
|
-
localContext.debug(`The '${
|
|
67
|
+
localContext.debug(`The '${metavariableString}' metavariable is not present'.`, metavariableNode);
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
if (
|
|
74
|
-
localContext.debug(`...verified the '${
|
|
70
|
+
if (metavariableVerified) {
|
|
71
|
+
localContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
|
|
75
72
|
}
|
|
76
73
|
|
|
77
|
-
return
|
|
78
|
-
}
|
|
74
|
+
return metavariableVerified;
|
|
75
|
+
}
|
package/src/verify/judgement.js
CHANGED
|
@@ -9,7 +9,7 @@ import { first } from "../utilities/array";
|
|
|
9
9
|
import { nodeQuery } from "../utilities/query";
|
|
10
10
|
|
|
11
11
|
const frameNodeQuery = nodeQuery("/judgement/frame!"),
|
|
12
|
-
metavariableNodeQuery = nodeQuery("/judgement/
|
|
12
|
+
metavariableNodeQuery = nodeQuery("/judgement/metavariable!");
|
|
13
13
|
|
|
14
14
|
export default function verifyJudgement(judgementNode, assignments, derived, localContext) {
|
|
15
15
|
let judgementVerified;
|
package/src/verify/proofStep.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import ProofStep from "../proofStep";
|
|
4
5
|
import verifySubproof from "../verify/subproof";
|
|
5
|
-
import verifySubDerivation from "../verify/subDerivation";
|
|
6
6
|
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
7
7
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
8
8
|
|
|
@@ -83,6 +83,6 @@ export default function verifyProofStep(proofStepNode, substitutions, localConte
|
|
|
83
83
|
return proofStepVerified;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
Object.assign(
|
|
86
|
+
Object.assign(shim, {
|
|
87
87
|
verifyProofStep
|
|
88
88
|
});
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyEquality from "../equality";
|
|
4
|
+
import verifyJudgement from "../judgement";
|
|
5
|
+
import verifyTypeAssertion from "../assertion/type";
|
|
3
6
|
import unifyMetavariableAgainstStatement from "../../unify/metavariableAgainstStatement";
|
|
4
7
|
|
|
5
8
|
import { nodeQuery } from "../../utilities/query";
|
|
6
|
-
import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
7
9
|
|
|
8
10
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
9
|
-
|
|
11
|
+
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
12
|
+
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
13
|
+
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!"),
|
|
14
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
10
15
|
|
|
11
16
|
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
|
|
12
17
|
let qualifiedStatementVerified;
|
|
@@ -188,7 +193,7 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
|
|
|
188
193
|
localContextB = localContext, ///
|
|
189
194
|
statementNodeB = statementNode, ///
|
|
190
195
|
substitutionNode = null,
|
|
191
|
-
metavariableNodeA =
|
|
196
|
+
metavariableNodeA = metavariableNode, ///
|
|
192
197
|
metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, () => {
|
|
193
198
|
const verifiedAhead = true;
|
|
194
199
|
|
|
@@ -212,13 +217,14 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
|
|
|
212
217
|
|
|
213
218
|
localContext.trace(`Verifying the '${statementString}' stated statement...`, statementNode);
|
|
214
219
|
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
220
|
+
const verifyStatedStatementFunctions = [
|
|
221
|
+
verifyStatedStatementAsEquality,
|
|
222
|
+
verifyStatedStatementAsJudgement,
|
|
223
|
+
verifyStatedStatementAsTypeAssertion
|
|
218
224
|
];
|
|
219
225
|
|
|
220
|
-
|
|
221
|
-
const statedStatementVerified =
|
|
226
|
+
verifyStatedStatementFunctions.every((verifyStatedStatementFunction) => { ///
|
|
227
|
+
const statedStatementVerified = verifyStatedStatementFunction(statementNode, assignments, derived, localContext);
|
|
222
228
|
|
|
223
229
|
if (statedStatementVerified) {
|
|
224
230
|
return true;
|
|
@@ -233,3 +239,73 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
|
|
|
233
239
|
|
|
234
240
|
return statedStatementVerified;
|
|
235
241
|
}
|
|
242
|
+
|
|
243
|
+
function verifyStatedStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
244
|
+
let statedStatementVerifiedAsEquality = true; ///
|
|
245
|
+
|
|
246
|
+
const equalityNode = equalityNodeQuery(statementNode);
|
|
247
|
+
|
|
248
|
+
if (equalityNode !== null) {
|
|
249
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
250
|
+
|
|
251
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as an equality...`, statementNode);
|
|
252
|
+
|
|
253
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
254
|
+
const verifiedAhead = true;
|
|
255
|
+
|
|
256
|
+
return verifiedAhead;
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
statedStatementVerifiedAsEquality = equalityVerified; ///
|
|
260
|
+
|
|
261
|
+
if (statedStatementVerifiedAsEquality) {
|
|
262
|
+
localContext.debug(`...verified the '${statementString}' stated statement as an equality.`, statementNode);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return statedStatementVerifiedAsEquality;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function verifyStatedStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
270
|
+
let statedStatementVerifiedAsJudgement = true;
|
|
271
|
+
|
|
272
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
273
|
+
|
|
274
|
+
if (judgementNode !== null) {
|
|
275
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
276
|
+
|
|
277
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as a judgement...`, statementNode);
|
|
278
|
+
|
|
279
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
280
|
+
|
|
281
|
+
statedStatementVerifiedAsJudgement = judgementVerified; ///
|
|
282
|
+
|
|
283
|
+
if (statedStatementVerifiedAsJudgement) {
|
|
284
|
+
localContext.debug(`...verified the '${statementString}' stated statement as a judgement.`, statementNode);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return statedStatementVerifiedAsJudgement;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function verifyStatedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
292
|
+
let statementVerifiedAsTypeAssertion = true; ///
|
|
293
|
+
|
|
294
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
295
|
+
|
|
296
|
+
if (typeAssertionNode !== null) {
|
|
297
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
298
|
+
|
|
299
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as a type assertion...`, statementNode);
|
|
300
|
+
|
|
301
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
302
|
+
|
|
303
|
+
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
304
|
+
|
|
305
|
+
if (statementVerifiedAsTypeAssertion) {
|
|
306
|
+
localContext.debug(`...verified the '${statementString}' stated statement as a type assertion.`, statementNode);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return statementVerifiedAsTypeAssertion;
|
|
311
|
+
}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyEquality from "../../verify/equality";
|
|
4
|
+
import verifyJudgement from "../../verify/judgement";
|
|
3
5
|
import verifyStatement from "../../verify/statement";
|
|
6
|
+
import verifyTypeAssertion from "../assertion/type";
|
|
4
7
|
|
|
5
8
|
import { nodeQuery } from "../../utilities/query";
|
|
6
|
-
import { verifyStatementAsEquality, verifyStatementAsJudgement, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
7
9
|
|
|
8
|
-
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!")
|
|
10
|
+
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
11
|
+
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
12
|
+
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
13
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
9
14
|
|
|
10
15
|
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
11
16
|
let unqualifiedStatementVerified;
|
|
@@ -43,9 +48,9 @@ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments
|
|
|
43
48
|
|
|
44
49
|
localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
45
50
|
|
|
46
|
-
const
|
|
51
|
+
const statementUnified = localContext.unifyStatement(statementNode);
|
|
47
52
|
|
|
48
|
-
if (
|
|
53
|
+
if (statementUnified) {
|
|
49
54
|
derivedUnqualifiedStatementVerified = true;
|
|
50
55
|
} else {
|
|
51
56
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
@@ -90,25 +95,93 @@ function verifyDerivedStatement(statementNode, assignments, derived, localContex
|
|
|
90
95
|
|
|
91
96
|
localContext.trace(`Verifying the '${statementString}' derived statement...`, statementNode);
|
|
92
97
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
const verifyDerivedStatementFunctions = [
|
|
99
|
+
verifyDerivedStatementAsEquality,
|
|
100
|
+
verifyDerivedStatementAsJudgement,
|
|
101
|
+
verifyDerivedStatementAsTypeAssertion
|
|
97
102
|
];
|
|
98
103
|
|
|
99
|
-
|
|
100
|
-
const derivedStatementVerified =
|
|
104
|
+
derivedStatementVerified = verifyDerivedStatementFunctions.every((verifyDerivedStatementFunction) => { ///
|
|
105
|
+
const derivedStatementVerified = verifyDerivedStatementFunction(statementNode, assignments, derived, localContext);
|
|
101
106
|
|
|
102
107
|
if (derivedStatementVerified) {
|
|
103
108
|
return true;
|
|
104
109
|
}
|
|
105
110
|
});
|
|
106
111
|
|
|
107
|
-
derivedStatementVerified = true; ///
|
|
108
|
-
|
|
109
112
|
if (derivedStatementVerified) {
|
|
110
113
|
localContext.debug(`...verified the '${statementString}' derived statement.`, statementNode);
|
|
111
114
|
}
|
|
112
115
|
|
|
113
116
|
return derivedStatementVerified;
|
|
114
117
|
}
|
|
118
|
+
|
|
119
|
+
function verifyDerivedStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
120
|
+
let derivedStatementVerifiedAsEquality = true; ///
|
|
121
|
+
|
|
122
|
+
const equalityNode = equalityNodeQuery(statementNode);
|
|
123
|
+
|
|
124
|
+
if (equalityNode !== null) {
|
|
125
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
126
|
+
|
|
127
|
+
localContext.trace(`Verifying the '${statementString}' derived statement as an equality...`, statementNode);
|
|
128
|
+
|
|
129
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
130
|
+
const verifiedAhead = true;
|
|
131
|
+
|
|
132
|
+
return verifiedAhead;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
derivedStatementVerifiedAsEquality = equalityVerified; ///
|
|
136
|
+
|
|
137
|
+
if (derivedStatementVerifiedAsEquality) {
|
|
138
|
+
localContext.debug(`...verified the '${statementString}' derived statement as an equality.`, statementNode);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return derivedStatementVerifiedAsEquality;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function verifyDerivedStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
146
|
+
let derivedStatementVerifiedAsJudgement = true;
|
|
147
|
+
|
|
148
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
149
|
+
|
|
150
|
+
if (judgementNode !== null) {
|
|
151
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
152
|
+
|
|
153
|
+
localContext.trace(`Verifying the '${statementString}' derived statement as a judgement...`, statementNode);
|
|
154
|
+
|
|
155
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
156
|
+
|
|
157
|
+
derivedStatementVerifiedAsJudgement = judgementVerified; ///
|
|
158
|
+
|
|
159
|
+
if (derivedStatementVerifiedAsJudgement) {
|
|
160
|
+
localContext.debug(`...verified the '${statementString}' derived statement as a judgement.`, statementNode);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return derivedStatementVerifiedAsJudgement;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function verifyDerivedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
168
|
+
let statementVerifiedAsTypeAssertion = true; ///
|
|
169
|
+
|
|
170
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
171
|
+
|
|
172
|
+
if (typeAssertionNode !== null) {
|
|
173
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
174
|
+
|
|
175
|
+
localContext.trace(`Verifying the '${statementString}' derived statement as a type assertion...`, statementNode);
|
|
176
|
+
|
|
177
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
178
|
+
|
|
179
|
+
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
180
|
+
|
|
181
|
+
if (statementVerifiedAsTypeAssertion) {
|
|
182
|
+
localContext.debug(`...verified the '${statementString}' derived statement as a type assertion.`, statementNode);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return statementVerifiedAsTypeAssertion;
|
|
187
|
+
}
|
package/src/verify/statement.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import verifyEquality from "../verify/equality";
|
|
4
5
|
import verifyJudgement from "../verify/judgement";
|
|
5
|
-
import metaLevelUnifier from "../unifier/metaLevel";
|
|
6
6
|
import bracketedCombinator from "../ocmbinator/bracketed";
|
|
7
7
|
import verifyTypeAssertion from "../verify/assertion/type";
|
|
8
8
|
import verifyDefinedAssertion from "../verify/assertion/defined";
|
|
@@ -81,17 +81,43 @@ export function verifyStandaloneStatement(statementNode, localContext, verifyAhe
|
|
|
81
81
|
return standaloneStatementVerified;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
Object.assign(
|
|
84
|
+
Object.assign(shim, {
|
|
85
85
|
verifyStatement
|
|
86
86
|
});
|
|
87
87
|
|
|
88
|
-
Object.assign(statementAgainstCombinatorUnifier, {
|
|
89
|
-
verifyStatement
|
|
90
|
-
});
|
|
91
88
|
|
|
92
89
|
export default verifyStatement;
|
|
93
90
|
|
|
94
|
-
|
|
91
|
+
function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
|
|
92
|
+
let statementVerifiedAsMetavariable = false;
|
|
93
|
+
|
|
94
|
+
const metavariableNode = metavariableNodeQuery(statementNode);
|
|
95
|
+
|
|
96
|
+
if (metavariableNode !== null) {
|
|
97
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
98
|
+
|
|
99
|
+
localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
|
|
100
|
+
|
|
101
|
+
const metavariableVerified = verifyMetavariable(metavariableNode, localContext);
|
|
102
|
+
|
|
103
|
+
if (metavariableVerified) {
|
|
104
|
+
const substitutionNode = substitutionNodeQuery(statementNode),
|
|
105
|
+
substitutionVerified = verifySubstitution(substitutionNode, localContext);
|
|
106
|
+
|
|
107
|
+
if (substitutionVerified) {
|
|
108
|
+
statementVerifiedAsMetavariable = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (statementVerifiedAsMetavariable) {
|
|
113
|
+
localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return statementVerifiedAsMetavariable;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function verifyStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
95
121
|
let statementVerifiedAsEquality = false;
|
|
96
122
|
|
|
97
123
|
const equalityNode = equalityNodeQuery(statementNode);
|
|
@@ -117,7 +143,7 @@ export function verifyStatementAsEquality(statementNode, assignments, derived, l
|
|
|
117
143
|
return statementVerifiedAsEquality;
|
|
118
144
|
}
|
|
119
145
|
|
|
120
|
-
|
|
146
|
+
function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
121
147
|
let statementVerifiedAsJudgement = false;
|
|
122
148
|
|
|
123
149
|
const judgementNode = judgementNodeQuery(statementNode);
|
|
@@ -139,7 +165,7 @@ export function verifyStatementAsJudgement(statementNode, assignments, derived,
|
|
|
139
165
|
return statementVerifiedAsJudgement;
|
|
140
166
|
}
|
|
141
167
|
|
|
142
|
-
|
|
168
|
+
function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
143
169
|
let statementVerifiedAsTypeAssertion = false;
|
|
144
170
|
|
|
145
171
|
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
@@ -161,35 +187,6 @@ export function verifyStatementAsTypeAssertion(statementNode, assignments, deriv
|
|
|
161
187
|
return statementVerifiedAsTypeAssertion;
|
|
162
188
|
}
|
|
163
189
|
|
|
164
|
-
function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
|
|
165
|
-
let statementVerifiedAsMetavariable = false;
|
|
166
|
-
|
|
167
|
-
const metavariableNode = metavariableNodeQuery(statementNode);
|
|
168
|
-
|
|
169
|
-
if (metavariableNode !== null) {
|
|
170
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
171
|
-
|
|
172
|
-
localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
|
|
173
|
-
|
|
174
|
-
const metavariableVerified = verifyMetavariable(metavariableNode, localContext);
|
|
175
|
-
|
|
176
|
-
if (metavariableVerified) {
|
|
177
|
-
const substitutionNode = substitutionNodeQuery(statementNode),
|
|
178
|
-
substitutionVerified = verifySubstitution(substitutionNode, localContext);
|
|
179
|
-
|
|
180
|
-
if (substitutionVerified) {
|
|
181
|
-
statementVerifiedAsMetavariable = true;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (statementVerifiedAsMetavariable) {
|
|
186
|
-
localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
return statementVerifiedAsMetavariable;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
190
|
function verifyStatementAsDefinedAssertion(statementNode, assignments, derived, localContext) {
|
|
194
191
|
let statementVerifiedAsDefinedAssertion = false;
|
|
195
192
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
4
|
+
|
|
3
5
|
import { nodesQuery } from "../utilities/query";
|
|
4
6
|
|
|
5
7
|
const proofStepNodesQuery = nodesQuery("/subDerivation/proofStep|lastProofStep");
|
|
@@ -10,7 +12,7 @@ export default function verifySubDerivation(subDerivationNode, substitutions, lo
|
|
|
10
12
|
const proofStepNodes = proofStepNodesQuery(subDerivationNode);
|
|
11
13
|
|
|
12
14
|
subDerivationVerified = proofStepNodes.every((proofStepNode) => {
|
|
13
|
-
const { verifyProofStep } =
|
|
15
|
+
const { verifyProofStep } = shim,
|
|
14
16
|
proofStepVerified = verifyProofStep(proofStepNode, substitutions, localContext);
|
|
15
17
|
|
|
16
18
|
if (proofStepVerified) {
|
package/src/verify/term.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import Term from "../term";
|
|
4
5
|
import bracketedConstructor from "../constructor/bracketed";
|
|
5
6
|
import termAgainstConstructorUnifier from "../unifier/termAgainstConstructor";
|
|
@@ -57,7 +58,7 @@ export function verifyStandaloneTerm(termNode, localContext, verifyAhead) {
|
|
|
57
58
|
return standaloneTermVerified;
|
|
58
59
|
}
|
|
59
60
|
|
|
60
|
-
Object.assign(
|
|
61
|
+
Object.assign(shim, {
|
|
61
62
|
verifyTerm
|
|
62
63
|
});
|
|
63
64
|
|