occam-verify-cli 1.0.587 → 1.0.602

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 (105) hide show
  1. package/lib/context/ephemeral.js +74 -2
  2. package/lib/context/file/nominal.js +11 -9
  3. package/lib/context/liminal.js +161 -24
  4. package/lib/context/literal.js +8 -2
  5. package/lib/context/scoped.js +4 -28
  6. package/lib/context/synthetic.js +146 -0
  7. package/lib/context.js +170 -1
  8. package/lib/element/assertion/contained.js +21 -15
  9. package/lib/element/assertion/defined.js +45 -65
  10. package/lib/element/assertion/property.js +25 -19
  11. package/lib/element/assertion/satisfies.js +14 -8
  12. package/lib/element/assertion/subproof.js +12 -6
  13. package/lib/element/assertion.js +47 -1
  14. package/lib/element/assumption.js +12 -12
  15. package/lib/element/conclusion.js +2 -2
  16. package/lib/element/deduction.js +2 -2
  17. package/lib/element/frame.js +61 -29
  18. package/lib/element/judgement.js +7 -1
  19. package/lib/element/label.js +8 -8
  20. package/lib/element/metavariable.js +71 -59
  21. package/lib/element/procedureCall.js +24 -8
  22. package/lib/element/proof.js +43 -35
  23. package/lib/element/proofAssertion/premise.js +122 -97
  24. package/lib/element/proofAssertion/step.js +161 -115
  25. package/lib/element/proofAssertion/supposition.js +157 -118
  26. package/lib/element/proofAssertion.js +3 -3
  27. package/lib/element/reference.js +40 -7
  28. package/lib/element/rule.js +227 -95
  29. package/lib/element/signature.js +2 -1
  30. package/lib/element/statement.js +67 -34
  31. package/lib/element/substitution/frame.js +36 -16
  32. package/lib/element/substitution/reference.js +36 -16
  33. package/lib/element/substitution/statement.js +94 -55
  34. package/lib/element/substitution/term.js +36 -16
  35. package/lib/element/substitution.js +54 -17
  36. package/lib/element/substitutions.js +4 -276
  37. package/lib/element/term.js +60 -31
  38. package/lib/element/topLevelAssertion/axiom.js +13 -4
  39. package/lib/element/topLevelAssertion/conjecture.js +7 -2
  40. package/lib/element/topLevelAssertion/theorem.js +7 -2
  41. package/lib/element/topLevelAssertion.js +201 -134
  42. package/lib/element/topLevelMetaAssertion.js +310 -51
  43. package/lib/element/variable.js +15 -6
  44. package/lib/node/substitution/statement.js +33 -1
  45. package/lib/process/unify.js +6 -6
  46. package/lib/utilities/context.js +10 -25
  47. package/lib/utilities/element.js +34 -9
  48. package/lib/utilities/statement.js +1 -8
  49. package/lib/utilities/string.js +12 -1
  50. package/lib/utilities/substitutions.js +42 -16
  51. package/lib/utilities/unification.js +3 -1
  52. package/lib/utilities/validation.js +2 -2
  53. package/package.json +4 -4
  54. package/src/context/ephemeral.js +73 -1
  55. package/src/context/file/nominal.js +14 -11
  56. package/src/context/liminal.js +180 -25
  57. package/src/context/literal.js +3 -1
  58. package/src/context/scoped.js +3 -35
  59. package/src/context/synthetic.js +49 -0
  60. package/src/context.js +163 -1
  61. package/src/element/assertion/contained.js +28 -20
  62. package/src/element/assertion/defined.js +62 -34
  63. package/src/element/assertion/property.js +27 -19
  64. package/src/element/assertion/satisfies.js +15 -7
  65. package/src/element/assertion/subproof.js +13 -5
  66. package/src/element/assertion.js +35 -0
  67. package/src/element/assumption.js +5 -5
  68. package/src/element/conclusion.js +2 -4
  69. package/src/element/deduction.js +2 -4
  70. package/src/element/frame.js +71 -39
  71. package/src/element/judgement.js +2 -0
  72. package/src/element/label.js +4 -4
  73. package/src/element/metavariable.js +94 -75
  74. package/src/element/procedureCall.js +6 -6
  75. package/src/element/proof.js +6 -6
  76. package/src/element/proofAssertion/premise.js +101 -69
  77. package/src/element/proofAssertion/step.js +78 -39
  78. package/src/element/proofAssertion/supposition.js +141 -115
  79. package/src/element/proofAssertion.js +3 -2
  80. package/src/element/reference.js +52 -10
  81. package/src/element/rule.js +138 -76
  82. package/src/element/signature.js +2 -0
  83. package/src/element/statement.js +76 -45
  84. package/src/element/substitution/frame.js +44 -15
  85. package/src/element/substitution/reference.js +44 -15
  86. package/src/element/substitution/statement.js +124 -72
  87. package/src/element/substitution/term.js +43 -15
  88. package/src/element/substitution.js +55 -18
  89. package/src/element/substitutions.js +1 -258
  90. package/src/element/term.js +65 -34
  91. package/src/element/topLevelAssertion/axiom.js +1 -1
  92. package/src/element/topLevelAssertion/conjecture.js +1 -1
  93. package/src/element/topLevelAssertion/theorem.js +1 -1
  94. package/src/element/topLevelAssertion.js +128 -48
  95. package/src/element/topLevelMetaAssertion.js +86 -32
  96. package/src/element/variable.js +15 -5
  97. package/src/node/substitution/statement.js +33 -0
  98. package/src/process/unify.js +6 -8
  99. package/src/utilities/context.js +9 -8
  100. package/src/utilities/element.js +37 -10
  101. package/src/utilities/statement.js +0 -7
  102. package/src/utilities/string.js +14 -0
  103. package/src/utilities/substitutions.js +59 -17
  104. package/src/utilities/unification.js +4 -0
  105. package/src/utilities/validation.js +3 -1
@@ -7,46 +7,9 @@ import { define } from "../elements";
7
7
  import { EMPTY_STRING } from "../constants";
8
8
  import { substitutionsStringFromSubstitutions } from "../utilities/string";
9
9
 
10
- const { find, first, clear, prune, filter, extract, compress, correlate } = arrayUtilities;
10
+ const { first, extract, correlate } = arrayUtilities;
11
11
 
12
12
  export default define(class Substitutions extends Element {
13
- constructor(context, string, node, array, savedArray) {
14
- super(context, string, node);
15
-
16
- this.array = array;
17
- this.savedArray = savedArray;
18
- }
19
-
20
- getArray() {
21
- return this.array;
22
- }
23
-
24
- getSavedArray() {
25
- return this.savedArray;
26
- }
27
-
28
- getMetavariables() {
29
- const metavariables = [];
30
-
31
- this.forEachSubstitution((substitution) => {
32
- const metavariable = substitution.getMetavariable();
33
-
34
- if (metavariable !== null) {
35
- metavariables.push(metavariable);
36
- }
37
- });
38
-
39
- compress(metavariables, (metavariableA, metavariableB) => {
40
- const metavariableAEqualToMetavariableB = metavariableB.isEqualTo(metavariableA);
41
-
42
- if (!metavariableAEqualToMetavariableB) {
43
- return true;
44
- }
45
- });
46
-
47
- return metavariables;
48
- }
49
-
50
13
  getNonTrivialLength() {
51
14
  const nonTrivialLength = this.reduceSubstitution((nonTrivialLength, substitution) => {
52
15
  const substitutionTrivial = substitution.isTrivial();
@@ -73,124 +36,8 @@ export default define(class Substitutions extends Element {
73
36
  return firstSubstitution;
74
37
  }
75
38
 
76
- getLength() { return this.array.length; }
77
-
78
- mapSubstitution(callback) { return this.array.map(callback); }
79
-
80
- someSubstitution(callback) { return this.array.some(callback); }
81
-
82
- everySubstitution(callback) { return this.array.every(callback); }
83
-
84
- reduceSubstitution(callback, initialValue) { return this.array.reduce(callback, initialValue); }
85
-
86
- forEachSubstitution(callback) { this.array.forEach(callback); }
87
-
88
39
  extractSubstitution(callbcak) { return extract(this.array, callbcak); }
89
40
 
90
- findSubstitutions(callback) {
91
- let string;
92
-
93
- const array = find(this.array, callback),
94
- context = null;
95
-
96
- string = null;
97
-
98
- const node = null,
99
- savedArray = [],
100
- substitutions = new Substitutions(context, string, node, array, savedArray);
101
-
102
- string = substitutions.asString();
103
-
104
- substitutions.setString(string);
105
-
106
- return substitutions;
107
- }
108
-
109
- findSubstitutionByVariable(variable) {
110
- const substitution = this.findSubstitution((substitution) => {
111
- const substitutionVariable = substitution.getVariable();
112
-
113
- if (substitutionVariable !== null) {
114
- const substitutionVariableEqualToVariable = substitutionVariable.isEqualTo(variable);
115
-
116
- if (substitutionVariableEqualToVariable) {
117
- return true;
118
- }
119
- }
120
- }) || null;
121
-
122
- return substitution;
123
- }
124
-
125
- findSubstitutionsByMetavariable(metavariable) {
126
- const substitutions = this.findSubstitutions((substitution) => {
127
- const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualToMetavariable(metavariable);
128
-
129
- if (substitutionMetavariableEqualToMetavariable) {
130
- return true;
131
- }
132
- });
133
-
134
- return substitutions;
135
- }
136
-
137
- findComplexSubstitutionsByMetavariable(metavariable) {
138
- const complexSubstitutions = this.findSubstitutions((substitution) => {
139
- const substitutionComplex = substitution.isComplex();
140
-
141
- if (substitutionComplex) {
142
- const complexSubstitution = substitution, ///
143
- complexSubstitutionMetavariableEqualToMetavariable = complexSubstitution.isMetavariableEqualToMetavariable(metavariable);
144
-
145
- if (complexSubstitutionMetavariableEqualToMetavariable) {
146
- return true;
147
- }
148
- }
149
- });
150
-
151
- return complexSubstitutions;
152
- }
153
-
154
- isSubstitutionPresentByVariable(variable) {
155
- const substitution = this.findSubstitutionByVariable(variable),
156
- substitutionPresent = (substitution !== null);
157
-
158
- return substitutionPresent;
159
- }
160
-
161
- addSubstitution(substitution, context) {
162
- const substitutionString = substitution.getString(),
163
- substitutionsString = this.asString(); ///
164
-
165
- this.array.push(substitution);
166
-
167
- const string = this.asString();
168
-
169
- this.setString(string);
170
-
171
- context.trace(`Added the '${substitutionString}' substitution to the '${substitutionsString}' substitutions.`);
172
- }
173
-
174
- removeSubstitution(substitution, context) {
175
- const substitutionA = substitution; ///
176
-
177
- prune(this.array, (substitution) => {
178
- const substitutionB = substitution; ///
179
-
180
- if (substitutionA !== substitutionB) {
181
- return true;
182
- }
183
- });
184
-
185
- const string = this.asString(),
186
- substitutionString = substitution.getString(),
187
- substitutionsString = string; ///
188
-
189
- this.setString(string);
190
-
191
- context.trace(`Removed the '${substitutionString}' substitution from the '${substitutionsString}' substitutions.`);
192
- }
193
-
194
41
  correlateSubstitutions(substitutions) {
195
42
  const array = substitutions.getArray(),
196
43
  arrayA = array, ///
@@ -206,100 +53,6 @@ export default define(class Substitutions extends Element {
206
53
  return correlates;
207
54
  }
208
55
 
209
- clear() {
210
- clear(this.array);
211
-
212
- this.savedArray = null;
213
- }
214
-
215
- resolve(context) {
216
- const metavariables = this.getMetavariables();
217
-
218
- metavariables.forEach((metavariable) => {
219
- const complexSubstitutions = this.findComplexSubstitutionsByMetavariable(metavariable),
220
- complexSubstitutionsResolved = complexSubstitutions.everySubstitution((complexSubstitution) => {
221
- let resolved;
222
-
223
- const substitutions = this, ///
224
- substitution = complexSubstitution; ///
225
-
226
- resolved = substitution.isResolved();
227
-
228
- if (!resolved) {
229
- substitution.resolve(substitutions, context);
230
- }
231
- });
232
-
233
- if (complexSubstitutionsResolved) {
234
- return true;
235
- }
236
- });
237
- }
238
-
239
- areResolved() {
240
- const metavariables = this.getMetavariables(),
241
- resolved = metavariables.every((metavariable) => {
242
- const complexSubstitutions = this.findComplexSubstitutionsByMetavariable(metavariable),
243
- complexSubstitutionsResolved = complexSubstitutions.everySubstitution((complexSubstitution) => {
244
- const complexSubstitutionResolved = complexSubstitution.isResolved();
245
-
246
- if (complexSubstitutionResolved) {
247
- return true;
248
- }
249
- });
250
-
251
- if (complexSubstitutionsResolved) {
252
- return true;
253
- }
254
- });
255
-
256
- return resolved;
257
- }
258
-
259
- snapshot(context) {
260
- const substitutionsString = this.getString(); ///
261
-
262
- context.trace(`Taking a snapshot of the '${substitutionsString}' substitutions.`);
263
-
264
- this.savedArray = [
265
- ...this.array
266
- ];
267
- }
268
-
269
- rollback(context) {
270
- const substitutionsString = this.getString(); ///
271
-
272
- context.trace(`Rolling back the '${substitutionsString}' substitutions.`);
273
-
274
- const array = [
275
- ...this.array
276
- ];
277
-
278
- leftDifference(array, this.savedArray);
279
-
280
- array.forEach((substitution) => {
281
- this.removeSubstitution(substitution, context);
282
- });
283
-
284
- this.array = [
285
- ...this.savedArray
286
- ];
287
-
288
- this.savedArray = null;
289
-
290
- const string = this.asString();
291
-
292
- this.setString(string);
293
- }
294
-
295
- continue(context) {
296
- const substitutionsString = this.getString(); ///
297
-
298
- context.trace(`Continuing with the '${substitutionsString}' substitutions.`);
299
-
300
- this.savedArray = null;
301
- }
302
-
303
56
  asString() {
304
57
  let string;
305
58
 
@@ -329,13 +82,3 @@ export default define(class Substitutions extends Element {
329
82
  return substitutions;
330
83
  }
331
84
  });
332
-
333
- function leftDifference(arrayA, arrayB) {
334
- filter(arrayA, (elementA) => {
335
- const arrayBIncludesElementA = arrayB.includes(elementA);
336
-
337
- if (!arrayBIncludesElementA) {
338
- return true;
339
- }
340
- });
341
- }
@@ -24,15 +24,47 @@ export default define(class Term extends Element {
24
24
  this.type = type;
25
25
  }
26
26
 
27
- isSingular() {
27
+ getTermNode() {
28
28
  const node = this.getNode(),
29
- termNode = node, ///
30
- singular = termNode.isSingular();
29
+ termNode = node; ///
31
30
 
32
- return singular;
31
+ return termNode;
33
32
  }
34
33
 
35
- isProvisional() { return this.type.isProvisional(); }
34
+ getVariableIdentifier() {
35
+ const termNode = this.getTermNode(),
36
+ variableIdentifier = termNode.getVariableIdentifier();
37
+
38
+ return variableIdentifier;
39
+ }
40
+
41
+ matchTermNode(termNode) {
42
+ const termNodeA = termNode; ///
43
+
44
+ termNode = this.getTermNode();
45
+
46
+ const termNodeB = termNode, ///
47
+ termNodeAAMatchesTermBNodeB = termNodeA.match(termNodeB),
48
+ equalTo = termNodeAAMatchesTermBNodeB; ///
49
+
50
+ return equalTo;
51
+ }
52
+
53
+ isValid(context) {
54
+ const termNode = this.getTermNode(),
55
+ termPresent = context.isTermPresentByTermNode(termNode),
56
+ valid = termPresent; ///
57
+
58
+ return valid;
59
+ }
60
+
61
+ isEqualTo(term) {
62
+ const termNode = term.getNode(),
63
+ termNodeMatches = this.matchTermNode(termNode),
64
+ equalTo = termNodeMatches; ///
65
+
66
+ return equalTo;
67
+ }
36
68
 
37
69
  isGrounded(definedVariables, context) {
38
70
  const term = this, ///
@@ -53,6 +85,15 @@ export default define(class Term extends Element {
53
85
  return grounded;
54
86
  }
55
87
 
88
+ isSingular() {
89
+ const termNode = this.getTermNode(),
90
+ singular = termNode.isSingular();
91
+
92
+ return singular;
93
+ }
94
+
95
+ isProvisional() { return this.type.isProvisional(); }
96
+
56
97
  isInitiallyGrounded(context) {
57
98
  const term = this, ///
58
99
  variables = variablesFromTerm(term, context),
@@ -69,24 +110,6 @@ export default define(class Term extends Element {
69
110
  return implicitlyGrounded;
70
111
  }
71
112
 
72
- getVariableIdentifier() {
73
- const node = this.getNode(),
74
- variableIdentifier = node.getVariableIdentifier();
75
-
76
- return variableIdentifier;
77
- }
78
-
79
- isEqualTo(term) {
80
- const termA = this, ///
81
- termB = term, ///
82
- termANode = termA.getNode(),
83
- termBNode = termB.getNode(),
84
- termANodeMatchesTermBNode = termANode.match(termBNode),
85
- equalTo = termANodeMatchesTermBNode; ///
86
-
87
- return equalTo;
88
- }
89
-
90
113
  compareParameter(parameter) {
91
114
  let comparesToParamter = false;
92
115
 
@@ -114,21 +137,29 @@ export default define(class Term extends Element {
114
137
 
115
138
  context.trace(`Validating the '${termString}' term...`);
116
139
 
117
- validates = validateTerms.some((validateTerm) => { ///
118
- const term = this, ///
119
- termValidates = validateTerm(term, context, verifyForwards);
140
+ const valid = this.isValid(context);
120
141
 
121
- if (termValidates) {
122
- return true;
123
- }
124
- });
142
+ if (valid) {
143
+ validates = true;
125
144
 
126
- if (validates) {
127
- const term = this; ///
145
+ context.debug(`...the '${termString}' term is already valid.`);
146
+ } else {
147
+ validates = validateTerms.some((validateTerm) => { ///
148
+ const term = this, ///
149
+ termValidates = validateTerm(term, context, verifyForwards);
150
+
151
+ if (termValidates) {
152
+ return true;
153
+ }
154
+ });
155
+
156
+ if (validates) {
157
+ const term = this; ///
128
158
 
129
- context.addTerm(term);
159
+ context.addTerm(term);
130
160
 
131
- context.debug(`...validated the '${termString}' term.`);
161
+ context.debug(`...validated the '${termString}' term.`);
162
+ }
132
163
  }
133
164
 
134
165
  return validates;
@@ -246,7 +246,7 @@ export default define(class Axiom extends TopLevelAssertion {
246
246
  const signatureVerifies = this.verifySignature();
247
247
 
248
248
  if (signatureVerifies) {
249
- verifies = super.verify();
249
+ verifies = await super.verify();
250
250
  }
251
251
 
252
252
  if (verifies) {
@@ -16,7 +16,7 @@ export default define(class Conjecture extends TopLevelAssertion {
16
16
 
17
17
  context.trace(`Verifying the '${conjectureString}' conjecture...`);
18
18
 
19
- verifies = super.verify();
19
+ verifies = await super.verify();
20
20
 
21
21
  if (verifies) {
22
22
  const conjecture = this; ///
@@ -16,7 +16,7 @@ export default define(class Theorem extends TopLevelAssertion {
16
16
 
17
17
  context.trace(`Verifying the '${theoremString}' theorem...`);
18
18
 
19
- verifies = super.verify();
19
+ verifies = await super.verify();
20
20
 
21
21
  if (verifies) {
22
22
  const theorem = this; ///