occam-verify-cli 1.0.617 → 1.0.631
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/ephemeral.js +152 -47
- package/lib/context/file/nominal.js +136 -140
- package/lib/context/liminal.js +16 -26
- package/lib/context/scoped.js +26 -55
- package/lib/context.js +103 -53
- package/lib/element/assertion/contained.js +3 -1
- package/lib/element/assertion/defined.js +3 -1
- package/lib/element/assertion/property.js +10 -58
- package/lib/element/assertion/satisfies.js +3 -1
- package/lib/element/assertion/subproof.js +3 -1
- package/lib/element/assertion/type.js +63 -109
- package/lib/element/assumption.js +40 -16
- package/lib/element/derivation.js +8 -10
- package/lib/element/equality.js +102 -62
- package/lib/element/equivalence.js +6 -6
- package/lib/element/equivalences.js +4 -4
- package/lib/element/frame.js +21 -21
- package/lib/element/hypothesis.js +5 -7
- package/lib/element/judgement.js +47 -25
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +12 -3
- package/lib/element/reference.js +9 -21
- package/lib/element/rule.js +13 -15
- package/lib/element/statement.js +23 -25
- package/lib/element/subDerivation.js +4 -6
- package/lib/element/substitution/frame.js +4 -4
- package/lib/element/substitution/reference.js +4 -4
- package/lib/element/substitution/statement.js +4 -4
- package/lib/element/substitution/term.js +7 -1
- package/lib/element/substitution.js +71 -43
- package/lib/element/term.js +15 -1
- package/lib/element/topLevelAssertion.js +9 -11
- package/lib/element/topLevelMetaAssertion.js +9 -11
- package/lib/element/variable.js +44 -3
- package/lib/process/assign.js +96 -26
- package/lib/process/unify.js +3 -4
- package/lib/process/validate.js +2 -2
- package/lib/process/verify.js +2 -2
- package/lib/utilities/element.js +74 -12
- package/lib/utilities/json.js +2 -2
- package/lib/utilities/string.js +9 -24
- package/lib/utilities/substitutions.js +14 -22
- package/package.json +1 -1
- package/src/context/ephemeral.js +170 -50
- package/src/context/file/nominal.js +136 -141
- package/src/context/liminal.js +22 -34
- package/src/context/scoped.js +33 -74
- package/src/context.js +97 -46
- package/src/element/assertion/contained.js +4 -0
- package/src/element/assertion/defined.js +4 -0
- package/src/element/assertion/property.js +15 -26
- package/src/element/assertion/satisfies.js +4 -0
- package/src/element/assertion/subproof.js +4 -0
- package/src/element/assertion/type.js +67 -77
- package/src/element/assumption.js +48 -16
- package/src/element/derivation.js +3 -5
- package/src/element/equality.js +109 -74
- package/src/element/equivalence.js +7 -7
- package/src/element/equivalences.js +7 -5
- package/src/element/frame.js +25 -25
- package/src/element/hypothesis.js +4 -6
- package/src/element/judgement.js +54 -24
- package/src/element/metaType.js +1 -1
- package/src/element/metavariable.js +16 -3
- package/src/element/reference.js +12 -26
- package/src/element/rule.js +8 -10
- package/src/element/statement.js +27 -30
- package/src/element/subDerivation.js +3 -5
- package/src/element/substitution/frame.js +1 -1
- package/src/element/substitution/reference.js +1 -1
- package/src/element/substitution/statement.js +1 -1
- package/src/element/substitution/term.js +2 -0
- package/src/element/substitution.js +60 -36
- package/src/element/term.js +20 -2
- package/src/element/topLevelAssertion.js +4 -6
- package/src/element/topLevelMetaAssertion.js +4 -6
- package/src/element/variable.js +2 -0
- package/src/process/assign.js +114 -37
- package/src/process/unify.js +2 -3
- package/src/process/validate.js +1 -1
- package/src/process/verify.js +1 -1
- package/src/utilities/element.js +83 -26
- package/src/utilities/json.js +1 -1
- package/src/utilities/string.js +7 -29
- package/src/utilities/substitutions.js +18 -29
package/src/context/ephemeral.js
CHANGED
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
import Context from "../context";
|
|
4
4
|
|
|
5
5
|
export default class EphemeralContext extends Context {
|
|
6
|
-
constructor(context, terms, frames,
|
|
6
|
+
constructor(context, terms, frames, judgements, equalities, assertions, statements, references, assumptions, substitutions) {
|
|
7
7
|
super(context);
|
|
8
8
|
|
|
9
9
|
this.terms = terms;
|
|
10
10
|
this.frames = frames;
|
|
11
|
-
this.
|
|
11
|
+
this.judgements = judgements;
|
|
12
|
+
this.equalities = equalities;
|
|
12
13
|
this.assertions = assertions;
|
|
14
|
+
this.statements = statements;
|
|
13
15
|
this.references = references;
|
|
16
|
+
this.assumptions = assumptions;
|
|
14
17
|
this.substitutions = substitutions;
|
|
15
18
|
}
|
|
16
19
|
|
|
@@ -22,6 +25,14 @@ export default class EphemeralContext extends Context {
|
|
|
22
25
|
return this.frames;
|
|
23
26
|
}
|
|
24
27
|
|
|
28
|
+
getEqualities() {
|
|
29
|
+
return this.equalities;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getJudgements() {
|
|
33
|
+
return this.judgements;
|
|
34
|
+
}
|
|
35
|
+
|
|
25
36
|
getStatements() {
|
|
26
37
|
return this.statements;
|
|
27
38
|
}
|
|
@@ -34,6 +45,10 @@ export default class EphemeralContext extends Context {
|
|
|
34
45
|
return this.references;
|
|
35
46
|
}
|
|
36
47
|
|
|
48
|
+
getAssumptions() {
|
|
49
|
+
return this.assumptions;
|
|
50
|
+
}
|
|
51
|
+
|
|
37
52
|
getSubstitutions() {
|
|
38
53
|
return this.substitutions;
|
|
39
54
|
}
|
|
@@ -88,6 +103,56 @@ export default class EphemeralContext extends Context {
|
|
|
88
103
|
}
|
|
89
104
|
}
|
|
90
105
|
|
|
106
|
+
addEquality(equality) {
|
|
107
|
+
const equalityA = equality, ///
|
|
108
|
+
context = this, ///
|
|
109
|
+
equalityString = equality.getString();
|
|
110
|
+
|
|
111
|
+
context.trace(`Adding the '${equalityString}' equality to the ephemeral context...`);
|
|
112
|
+
|
|
113
|
+
const equalityB = this.equalities.find((equality) => {
|
|
114
|
+
const equalityB = equality, ///
|
|
115
|
+
equalityAEqualToEqualityB = equalityA.isEqualTo(equalityB);
|
|
116
|
+
|
|
117
|
+
if (equalityAEqualToEqualityB) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}) || null;
|
|
121
|
+
|
|
122
|
+
if (equalityB !== null) {
|
|
123
|
+
context.trace(`The '${equalityString}' equality has already been added to the ephemeral context.`);
|
|
124
|
+
} else {
|
|
125
|
+
this.equalities.push(equality);
|
|
126
|
+
|
|
127
|
+
context.debug(`...added the '${equalityString}' equality to the ephemeral context.`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
addJudgement(judgement) {
|
|
132
|
+
const judgementA = judgement, ///
|
|
133
|
+
context = this, ///
|
|
134
|
+
judgementString = judgement.getString();
|
|
135
|
+
|
|
136
|
+
context.trace(`Adding the '${judgementString}' judgement to the ephemeral context...`);
|
|
137
|
+
|
|
138
|
+
const judgementB = this.judgements.find((judgement) => {
|
|
139
|
+
const judgementB = judgement, ///
|
|
140
|
+
judgementAEqualToEqualityB = judgementA.isEqualTo(judgementB);
|
|
141
|
+
|
|
142
|
+
if (judgementAEqualToEqualityB) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}) || null;
|
|
146
|
+
|
|
147
|
+
if (judgementB !== null) {
|
|
148
|
+
context.trace(`The '${judgementString}' judgement has already been added to the ephemeral context.`);
|
|
149
|
+
} else {
|
|
150
|
+
this.judgements.push(judgement);
|
|
151
|
+
|
|
152
|
+
context.debug(`...added the '${judgementString}' judgement to the ephemeral context.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
91
156
|
addStatement(statement) {
|
|
92
157
|
const context = this, ///
|
|
93
158
|
statementA = statement, ///
|
|
@@ -163,6 +228,31 @@ export default class EphemeralContext extends Context {
|
|
|
163
228
|
}
|
|
164
229
|
}
|
|
165
230
|
|
|
231
|
+
addAssumption(assumption) {
|
|
232
|
+
const context = this, ///
|
|
233
|
+
assumptionA = assumption, ///
|
|
234
|
+
assumptionString = assumption.getString();
|
|
235
|
+
|
|
236
|
+
context.trace(`Adding the '${assumptionString}' assumption to the ephemeral context...`);
|
|
237
|
+
|
|
238
|
+
const assumptionB = this.assumptions.find((assumption) => {
|
|
239
|
+
const assumptionB = assumption, ///
|
|
240
|
+
assumptionAEqualToAssumptionB = assumptionA.isEqualTo(assumptionB);
|
|
241
|
+
|
|
242
|
+
if (assumptionAEqualToAssumptionB) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
}) || null;
|
|
246
|
+
|
|
247
|
+
if (assumptionB !== null) {
|
|
248
|
+
context.trace(`The '${assumptionString}' assumption has already been added to the ephemeral context.`);
|
|
249
|
+
} else {
|
|
250
|
+
this.assumptions.push(assumption);
|
|
251
|
+
|
|
252
|
+
context.debug(`...added the '${assumptionString}' assumption to the ephemeral context.`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
166
256
|
addSubstitution(substitution) {
|
|
167
257
|
const context = this, ///
|
|
168
258
|
substitutionA = substitution, ///
|
|
@@ -190,7 +280,7 @@ export default class EphemeralContext extends Context {
|
|
|
190
280
|
|
|
191
281
|
findTermByTermNode(termNode) {
|
|
192
282
|
const term = this.terms.find((term) => {
|
|
193
|
-
const termNodeMatches = term.
|
|
283
|
+
const termNodeMatches = term.matchTermNode(termNode);
|
|
194
284
|
|
|
195
285
|
if (termNodeMatches) {
|
|
196
286
|
return true;
|
|
@@ -202,7 +292,7 @@ export default class EphemeralContext extends Context {
|
|
|
202
292
|
|
|
203
293
|
findFrameByFrameNode(frameNode) {
|
|
204
294
|
const frame = this.frames.find((frame) => {
|
|
205
|
-
const frameNodeMatches = frame.
|
|
295
|
+
const frameNodeMatches = frame.matchFrameNode(frameNode);
|
|
206
296
|
|
|
207
297
|
if (frameNodeMatches) {
|
|
208
298
|
return true;
|
|
@@ -212,9 +302,33 @@ export default class EphemeralContext extends Context {
|
|
|
212
302
|
return frame;
|
|
213
303
|
}
|
|
214
304
|
|
|
305
|
+
findJudgementByJudgementNode(judgementNode) {
|
|
306
|
+
const judgement = this.judgements.find((judgement) => {
|
|
307
|
+
const judgementNodeMatches = judgement.matchJudgementNode(judgementNode);
|
|
308
|
+
|
|
309
|
+
if (judgementNodeMatches) {
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
}) || null;
|
|
313
|
+
|
|
314
|
+
return judgement;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
findEqualityByEqualityNode(equalityNode) {
|
|
318
|
+
const equality = this.equalities.find((equality) => {
|
|
319
|
+
const equalityNodeMatches = equality.matchEqualityNode(equalityNode);
|
|
320
|
+
|
|
321
|
+
if (equalityNodeMatches) {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
}) || null;
|
|
325
|
+
|
|
326
|
+
return equality;
|
|
327
|
+
}
|
|
328
|
+
|
|
215
329
|
findStatementByStatementNode(statementNode) {
|
|
216
330
|
const statement = this.statements.find((statement) => {
|
|
217
|
-
const statementNodeMatches = statement.
|
|
331
|
+
const statementNodeMatches = statement.matchStatementNode(statementNode);
|
|
218
332
|
|
|
219
333
|
if (statementNodeMatches) {
|
|
220
334
|
return true;
|
|
@@ -226,7 +340,7 @@ export default class EphemeralContext extends Context {
|
|
|
226
340
|
|
|
227
341
|
findAssertionByAssertionNode(assertionNode) {
|
|
228
342
|
const assertion = this.assertions.find((assertion) => {
|
|
229
|
-
const assertionNodeMatches = assertion.
|
|
343
|
+
const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
|
|
230
344
|
|
|
231
345
|
if (assertionNodeMatches) {
|
|
232
346
|
return true;
|
|
@@ -236,6 +350,18 @@ export default class EphemeralContext extends Context {
|
|
|
236
350
|
return assertion;
|
|
237
351
|
}
|
|
238
352
|
|
|
353
|
+
findAssumptionByAssumptionNode(assumptionNode) {
|
|
354
|
+
const assumption = this.assumptions.find((assumption) => {
|
|
355
|
+
const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
|
|
356
|
+
|
|
357
|
+
if (assumptionNodeMatches) {
|
|
358
|
+
return true;
|
|
359
|
+
}
|
|
360
|
+
}) || null;
|
|
361
|
+
|
|
362
|
+
return assumption;
|
|
363
|
+
}
|
|
364
|
+
|
|
239
365
|
findReferenceByMetavariableNode(metavariableNode) {
|
|
240
366
|
const reference = this.references.find((reference) => {
|
|
241
367
|
const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
|
|
@@ -250,7 +376,7 @@ export default class EphemeralContext extends Context {
|
|
|
250
376
|
|
|
251
377
|
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
252
378
|
const substitution = this.substitutions.find((substitution) => {
|
|
253
|
-
const substitutionNodeMatches = substitution.
|
|
379
|
+
const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
|
|
254
380
|
|
|
255
381
|
if (substitutionNodeMatches) {
|
|
256
382
|
return true;
|
|
@@ -261,73 +387,64 @@ export default class EphemeralContext extends Context {
|
|
|
261
387
|
}
|
|
262
388
|
|
|
263
389
|
isTermPresentByTermNode(termNode) {
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (termNodeMatches) {
|
|
268
|
-
return true;
|
|
269
|
-
}
|
|
270
|
-
});
|
|
390
|
+
const term = this.findTermByTermNode(termNode),
|
|
391
|
+
termPresent = (term !== null);
|
|
271
392
|
|
|
272
393
|
return termPresent;
|
|
273
394
|
}
|
|
274
395
|
|
|
275
396
|
isFramePresentByFrameNode(frameNode) {
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if (frameNodeMatches) {
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
});
|
|
397
|
+
const frame = this.findFrameByFrameNode(frameNode),
|
|
398
|
+
framePresent = (frame !== null);
|
|
283
399
|
|
|
284
400
|
return framePresent;
|
|
285
401
|
}
|
|
286
402
|
|
|
287
|
-
|
|
288
|
-
const
|
|
289
|
-
|
|
403
|
+
isEqualityPresentByEqualityNode(equalityNode) {
|
|
404
|
+
const equality = this.findEqualityByEqualityNode(equalityNode),
|
|
405
|
+
equalityPresent = (equality !== null);
|
|
290
406
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
407
|
+
return equalityPresent;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
isJudgementPresentByJudgementNode(judgementNode) {
|
|
411
|
+
const judgement = this.findJudgementByJudgementNode(judgementNode),
|
|
412
|
+
judgementPresent = (judgement !== null);
|
|
413
|
+
|
|
414
|
+
return judgementPresent;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
isStatementPresentByStatementNode(statementNode) {
|
|
418
|
+
const statement = this.findStatementByStatementNode(statementNode),
|
|
419
|
+
statementPresent = (statement !== null);
|
|
295
420
|
|
|
296
421
|
return statementPresent;
|
|
297
422
|
}
|
|
298
423
|
|
|
299
424
|
isAssertionPresentByAssertionNode(assertionNode) {
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if (assertionNodeMatches) {
|
|
304
|
-
return true;
|
|
305
|
-
}
|
|
306
|
-
});
|
|
425
|
+
const assertion = this.findAssertionByAssertionNode(assertionNode),
|
|
426
|
+
assertionPresent = (assertion !== null);
|
|
307
427
|
|
|
308
428
|
return assertionPresent;
|
|
309
429
|
}
|
|
310
430
|
|
|
311
|
-
|
|
312
|
-
const
|
|
313
|
-
|
|
431
|
+
isAssumptionPresentByAssumptionNode(assumptionNode) {
|
|
432
|
+
const assumption = this.findAssumptionByAssumptionNode(assumptionNode),
|
|
433
|
+
assumptionPresent = (assumption !== null);
|
|
314
434
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
435
|
+
return assumptionPresent;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
isReferencePresentByMetavariableNode(metavariableNode) {
|
|
439
|
+
const reference = this.findReferenceByMetavariableNode(metavariableNode),
|
|
440
|
+
referencePresent = (reference !== null);
|
|
319
441
|
|
|
320
442
|
return referencePresent;
|
|
321
443
|
}
|
|
322
444
|
|
|
323
445
|
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
324
|
-
const
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
if (substitutionNodeMatches) {
|
|
328
|
-
return true;
|
|
329
|
-
}
|
|
330
|
-
});
|
|
446
|
+
const substitution = this.findSubstitutionBySubstitutionNode(substitutionNode),
|
|
447
|
+
substitutionPresent = (substitution !== null);
|
|
331
448
|
|
|
332
449
|
return substitutionPresent;
|
|
333
450
|
}
|
|
@@ -335,11 +452,14 @@ export default class EphemeralContext extends Context {
|
|
|
335
452
|
static fromNothing(context) {
|
|
336
453
|
const terms = [],
|
|
337
454
|
frames = [],
|
|
455
|
+
judgements = [],
|
|
456
|
+
equalities = [],
|
|
338
457
|
statements = [],
|
|
339
458
|
assertions = [],
|
|
340
459
|
references = [],
|
|
460
|
+
assumptions = [],
|
|
341
461
|
substitutions = [],
|
|
342
|
-
emphemeralContext = new EphemeralContext(context, terms, frames,
|
|
462
|
+
emphemeralContext = new EphemeralContext(context, terms, frames, judgements, equalities, assertions, statements, references, assumptions, substitutions);
|
|
343
463
|
|
|
344
464
|
return emphemeralContext;
|
|
345
465
|
}
|