occam-verify-cli 0.0.536 → 0.0.538
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/metaproof.js +8 -1
- package/lib/context/proof.js +8 -1
- package/lib/equality.js +3 -3
- package/lib/utilities/array.js +2 -5
- package/lib/verify/metastatement/qualified.js +9 -18
- package/lib/verify/metastatement/unqualified.js +9 -5
- package/lib/verify/statement/qualified.js +35 -43
- package/lib/verify/statement/unqualified.js +8 -4
- package/lib/verify/statement.js +16 -11
- package/package.json +3 -3
- package/src/context/metaproof.js +12 -1
- package/src/context/proof.js +12 -1
- package/src/equality.js +2 -2
- package/src/utilities/array.js +1 -1
- package/src/verify/metastatement/qualified.js +10 -15
- package/src/verify/metastatement/unqualified.js +11 -5
- package/src/verify/statement/qualified.js +37 -41
- package/src/verify/statement/unqualified.js +10 -4
- package/src/verify/statement.js +25 -8
package/src/verify/statement.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import Verifier from "../verifier";
|
|
4
4
|
import Variable from "../variable";
|
|
5
5
|
import Equality from "../equality";
|
|
6
|
+
import Assignment from "../assignment";
|
|
6
7
|
import verifyTerm from "../verify/term";
|
|
7
8
|
import equalityCombinator from "../ocmbinator/equality";
|
|
8
9
|
import bracketedCombinator from "../ocmbinator/bracketed";
|
|
@@ -39,7 +40,7 @@ export default function verifyStatement(statementNode, assignments, derived, con
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
if (!statementVerified) {
|
|
42
|
-
const statementVerifiedAsEquality = verifyStatementAsEquality(statementNode, derived, context);
|
|
43
|
+
const statementVerifiedAsEquality = verifyStatementAsEquality(statementNode, assignments, derived, context);
|
|
43
44
|
|
|
44
45
|
statementVerified = statementVerifiedAsEquality; //
|
|
45
46
|
}
|
|
@@ -211,7 +212,7 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, con
|
|
|
211
212
|
return statementVerifiedAsTypeAssertion;
|
|
212
213
|
}
|
|
213
214
|
|
|
214
|
-
function verifyStatementAsEquality(statementNode, derived, context) {
|
|
215
|
+
function verifyStatementAsEquality(statementNode, assignments, derived, context) {
|
|
215
216
|
let statementVerifiedAsEquality = false;
|
|
216
217
|
|
|
217
218
|
const combinator = equalityCombinator, ///
|
|
@@ -255,17 +256,19 @@ function verifyStatementAsEquality(statementNode, derived, context) {
|
|
|
255
256
|
if (leftVariableTypeSuperTypeOfRightVariableType) {
|
|
256
257
|
const type = rightVariableType, ///
|
|
257
258
|
name = leftVariableName, ///
|
|
258
|
-
variable = Variable.fromTypeAndName(type, name)
|
|
259
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
260
|
+
assignment = Assignment.fromVariable(variable);
|
|
259
261
|
|
|
260
|
-
|
|
262
|
+
assignments.push(assignment);
|
|
261
263
|
}
|
|
262
264
|
|
|
263
265
|
if (rightVariableTypeSuperTypeOfLeftVariableType) {
|
|
264
266
|
const type = leftVariableType, ///
|
|
265
267
|
name = rightVariableName, ///
|
|
266
|
-
variable = Variable.fromTypeAndName(type, name)
|
|
268
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
269
|
+
assignment = Assignment.fromVariable(variable);
|
|
267
270
|
|
|
268
|
-
|
|
271
|
+
assignments.push(assignment);
|
|
269
272
|
}
|
|
270
273
|
|
|
271
274
|
statementVerifiedAsEquality = true;
|
|
@@ -279,17 +282,24 @@ function verifyStatementAsEquality(statementNode, derived, context) {
|
|
|
279
282
|
firstVariable = first(variables),
|
|
280
283
|
leftVariable = firstVariable, ///
|
|
281
284
|
rightTermType = firstType, ///
|
|
285
|
+
leftVariableName = leftVariable.getName(),
|
|
282
286
|
leftVariableType = leftVariable.getType(),
|
|
283
287
|
leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
|
|
284
288
|
|
|
285
289
|
if (!leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
286
290
|
const rightTermString = context.nodeAsString(rightTermNode),
|
|
287
|
-
leftVariableName = leftVariable.getName(),
|
|
288
291
|
rightTermTypeName = rightTermType.getName(),
|
|
289
292
|
leftVariableTypeName = leftVariableType.getName();
|
|
290
293
|
|
|
291
294
|
context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
|
|
292
295
|
} else {
|
|
296
|
+
const type = rightTermType, ///
|
|
297
|
+
name = leftVariableName, ///
|
|
298
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
299
|
+
assignment = Assignment.fromVariable(variable);
|
|
300
|
+
|
|
301
|
+
assignments.push(assignment);
|
|
302
|
+
|
|
293
303
|
statementVerifiedAsEquality = true;
|
|
294
304
|
}
|
|
295
305
|
} else if (rightTermVerifiedAsVariable) {
|
|
@@ -301,17 +311,24 @@ function verifyStatementAsEquality(statementNode, derived, context) {
|
|
|
301
311
|
firstVariable = first(variables),
|
|
302
312
|
leftTermType = firstType, ///
|
|
303
313
|
rightVariable = firstVariable, ///
|
|
314
|
+
rightVariableName = rightVariable.getName(),
|
|
304
315
|
rightVariableType = rightVariable.getType(),
|
|
305
316
|
rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
|
|
306
317
|
|
|
307
318
|
if (!rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
308
319
|
const leftTermString = context.nodeAsString(leftTermNode),
|
|
309
|
-
rightVariableName = rightVariable.getName(),
|
|
310
320
|
leftTermTypeName = leftTermType.getName(),
|
|
311
321
|
rightVariableTypeName = rightVariableType.getName();
|
|
312
322
|
|
|
313
323
|
context.error(`The right '${rightVariableName}' variable's '${rightVariableTypeName}' type is not equal to or a super-type of the left '${leftTermString}' term's '${leftTermTypeName}' type.`, statementNode);
|
|
314
324
|
} else {
|
|
325
|
+
const type = leftTermType, ///
|
|
326
|
+
name = rightVariableName, ///
|
|
327
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
328
|
+
assignment = Assignment.fromVariable(variable);
|
|
329
|
+
|
|
330
|
+
assignments.push(assignment);
|
|
331
|
+
|
|
315
332
|
statementVerifiedAsEquality = true;
|
|
316
333
|
}
|
|
317
334
|
} else {
|