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.
Files changed (85) hide show
  1. package/lib/context/ephemeral.js +152 -47
  2. package/lib/context/file/nominal.js +136 -140
  3. package/lib/context/liminal.js +16 -26
  4. package/lib/context/scoped.js +26 -55
  5. package/lib/context.js +103 -53
  6. package/lib/element/assertion/contained.js +3 -1
  7. package/lib/element/assertion/defined.js +3 -1
  8. package/lib/element/assertion/property.js +10 -58
  9. package/lib/element/assertion/satisfies.js +3 -1
  10. package/lib/element/assertion/subproof.js +3 -1
  11. package/lib/element/assertion/type.js +63 -109
  12. package/lib/element/assumption.js +40 -16
  13. package/lib/element/derivation.js +8 -10
  14. package/lib/element/equality.js +102 -62
  15. package/lib/element/equivalence.js +6 -6
  16. package/lib/element/equivalences.js +4 -4
  17. package/lib/element/frame.js +21 -21
  18. package/lib/element/hypothesis.js +5 -7
  19. package/lib/element/judgement.js +47 -25
  20. package/lib/element/metaType.js +2 -2
  21. package/lib/element/metavariable.js +12 -3
  22. package/lib/element/reference.js +9 -21
  23. package/lib/element/rule.js +13 -15
  24. package/lib/element/statement.js +23 -25
  25. package/lib/element/subDerivation.js +4 -6
  26. package/lib/element/substitution/frame.js +4 -4
  27. package/lib/element/substitution/reference.js +4 -4
  28. package/lib/element/substitution/statement.js +4 -4
  29. package/lib/element/substitution/term.js +7 -1
  30. package/lib/element/substitution.js +71 -43
  31. package/lib/element/term.js +15 -1
  32. package/lib/element/topLevelAssertion.js +9 -11
  33. package/lib/element/topLevelMetaAssertion.js +9 -11
  34. package/lib/element/variable.js +44 -3
  35. package/lib/process/assign.js +96 -26
  36. package/lib/process/unify.js +3 -4
  37. package/lib/process/validate.js +2 -2
  38. package/lib/process/verify.js +2 -2
  39. package/lib/utilities/element.js +74 -12
  40. package/lib/utilities/json.js +2 -2
  41. package/lib/utilities/string.js +9 -24
  42. package/lib/utilities/substitutions.js +14 -22
  43. package/package.json +1 -1
  44. package/src/context/ephemeral.js +170 -50
  45. package/src/context/file/nominal.js +136 -141
  46. package/src/context/liminal.js +22 -34
  47. package/src/context/scoped.js +33 -74
  48. package/src/context.js +97 -46
  49. package/src/element/assertion/contained.js +4 -0
  50. package/src/element/assertion/defined.js +4 -0
  51. package/src/element/assertion/property.js +15 -26
  52. package/src/element/assertion/satisfies.js +4 -0
  53. package/src/element/assertion/subproof.js +4 -0
  54. package/src/element/assertion/type.js +67 -77
  55. package/src/element/assumption.js +48 -16
  56. package/src/element/derivation.js +3 -5
  57. package/src/element/equality.js +109 -74
  58. package/src/element/equivalence.js +7 -7
  59. package/src/element/equivalences.js +7 -5
  60. package/src/element/frame.js +25 -25
  61. package/src/element/hypothesis.js +4 -6
  62. package/src/element/judgement.js +54 -24
  63. package/src/element/metaType.js +1 -1
  64. package/src/element/metavariable.js +16 -3
  65. package/src/element/reference.js +12 -26
  66. package/src/element/rule.js +8 -10
  67. package/src/element/statement.js +27 -30
  68. package/src/element/subDerivation.js +3 -5
  69. package/src/element/substitution/frame.js +1 -1
  70. package/src/element/substitution/reference.js +1 -1
  71. package/src/element/substitution/statement.js +1 -1
  72. package/src/element/substitution/term.js +2 -0
  73. package/src/element/substitution.js +60 -36
  74. package/src/element/term.js +20 -2
  75. package/src/element/topLevelAssertion.js +4 -6
  76. package/src/element/topLevelMetaAssertion.js +4 -6
  77. package/src/element/variable.js +2 -0
  78. package/src/process/assign.js +114 -37
  79. package/src/process/unify.js +2 -3
  80. package/src/process/validate.js +1 -1
  81. package/src/process/verify.js +1 -1
  82. package/src/utilities/element.js +83 -26
  83. package/src/utilities/json.js +1 -1
  84. package/src/utilities/string.js +7 -29
  85. package/src/utilities/substitutions.js +18 -29
@@ -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, statements, assertions, references, substitutions) {
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.statements = statements;
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.matchNode(termNode);
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.matchNode(frameNode);
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.matchNode(statementNode);
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.matchNode(assertionNode);
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.matchNode(substitutionNode);
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 termPresent = this.terms.some((term) => {
265
- const termNodeMatches = term.matchTermNode(termNode);
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 framePresent = this.frames.some((frame) => {
277
- const frameNodeMatches = frame.matchFrameNode(frameNode);
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
- isStatementPresentByStatementNode(statementNode) {
288
- const statementPresent = this.statements.some((statement) => {
289
- const statementNodeMatches = statement.matchStatementNode(statementNode);
403
+ isEqualityPresentByEqualityNode(equalityNode) {
404
+ const equality = this.findEqualityByEqualityNode(equalityNode),
405
+ equalityPresent = (equality !== null);
290
406
 
291
- if (statementNodeMatches) {
292
- return true;
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 assertionPresent = this.assertions.some((assertion) => {
301
- const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
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
- isReferencePresentByReferenceNode(referenceNode) {
312
- const referencePresent = this.references.some((reference) => {
313
- const referenceNodeMatches = reference.matchReferenceNode(referenceNode);
431
+ isAssumptionPresentByAssumptionNode(assumptionNode) {
432
+ const assumption = this.findAssumptionByAssumptionNode(assumptionNode),
433
+ assumptionPresent = (assumption !== null);
314
434
 
315
- if (referenceNodeMatches) {
316
- return true;
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 substitutionPresent = this.substitutions.some((substitution) => {
325
- const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
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, statements, assertions, references, substitutions);
462
+ emphemeralContext = new EphemeralContext(context, terms, frames, judgements, equalities, assertions, statements, references, assumptions, substitutions);
343
463
 
344
464
  return emphemeralContext;
345
465
  }