occam-verify-cli 0.0.1036 → 0.0.1038

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 (67) hide show
  1. package/lib/assertion/subproof.js +80 -49
  2. package/lib/assertion/type.js +5 -5
  3. package/lib/context/file.js +6 -20
  4. package/lib/context/release.js +24 -84
  5. package/lib/equality.js +5 -5
  6. package/lib/metavariable.js +92 -6
  7. package/lib/mixins/statement/verify.js +3 -3
  8. package/lib/premise.js +25 -34
  9. package/lib/ruleNames.js +5 -1
  10. package/lib/statement.js +17 -4
  11. package/lib/substitution/frameForMetavariable.js +4 -4
  12. package/lib/substitution/statement.js +139 -0
  13. package/lib/substitution/statementForMetavariable.js +39 -22
  14. package/lib/substitution/termForVariable.js +17 -16
  15. package/lib/supposition.js +48 -57
  16. package/lib/unifier/intrinsicLevel.js +4 -4
  17. package/lib/unifier/metaLevel.js +22 -20
  18. package/lib/unifier/statementWithCombinator.js +1 -2
  19. package/lib/utilities/node.js +15 -1
  20. package/lib/utilities/tokens.js +8 -1
  21. package/lib/variable.js +13 -6
  22. package/lib/verifier/intrinsicLevel.js +2 -2
  23. package/lib/verifier/metaLevel.js +2 -2
  24. package/lib/verify/assertion/subproof.js +1 -49
  25. package/package.json +1 -1
  26. package/src/assertion/subproof.js +102 -56
  27. package/src/assertion/type.js +4 -4
  28. package/src/context/file.js +2 -48
  29. package/src/context/release.js +27 -65
  30. package/src/equality.js +4 -4
  31. package/src/metavariable.js +115 -6
  32. package/src/mixins/statement/verify.js +3 -2
  33. package/src/premise.js +33 -47
  34. package/src/ruleNames.js +1 -0
  35. package/src/statement.js +21 -4
  36. package/src/substitution/frameForMetavariable.js +3 -2
  37. package/src/substitution/statement.js +52 -0
  38. package/src/substitution/statementForMetavariable.js +50 -22
  39. package/src/substitution/termForVariable.js +21 -19
  40. package/src/supposition.js +64 -78
  41. package/src/unifier/intrinsicLevel.js +6 -7
  42. package/src/unifier/metaLevel.js +33 -26
  43. package/src/unifier/statementWithCombinator.js +0 -1
  44. package/src/utilities/node.js +16 -0
  45. package/src/utilities/tokens.js +7 -0
  46. package/src/variable.js +12 -5
  47. package/src/verifier/intrinsicLevel.js +3 -3
  48. package/src/verifier/metaLevel.js +3 -3
  49. package/src/verify/assertion/subproof.js +0 -63
  50. package/lib/unify/conclusionWithStatement.js +0 -34
  51. package/lib/unify/consequentWithStatement.js +0 -34
  52. package/lib/unify/metavariableWithStatement.js +0 -40
  53. package/lib/unify/metavariableWithStatementGivenSubstitution.js +0 -40
  54. package/lib/unify/suppositionWithProffStep.js +0 -41
  55. package/lib/unify/suppositionsWithProofSteps.js +0 -31
  56. package/lib/unify/unqualifiedStatement.js +0 -25
  57. package/lib/verify/file.js +0 -35
  58. package/lib/verify/subDerivation.js +0 -31
  59. package/src/unify/conclusionWithStatement.js +0 -34
  60. package/src/unify/consequentWithStatement.js +0 -34
  61. package/src/unify/metavariableWithStatement.js +0 -40
  62. package/src/unify/metavariableWithStatementGivenSubstitution.js +0 -41
  63. package/src/unify/suppositionWithProffStep.js +0 -54
  64. package/src/unify/suppositionsWithProofSteps.js +0 -23
  65. package/src/unify/unqualifiedStatement.js +0 -24
  66. package/src/verify/file.js +0 -29
  67. package/src/verify/subDerivation.js +0 -24
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
4
-
5
- import { metavariableFromStatementNode } from "../utilities/unify";
6
- import { metavariableNameFromMetavariableNode } from "../utilities/name";
7
-
8
- export default function unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutions, localContextA, localContextB) {
9
- let metavariableUnifiedWithStatement = false;
10
-
11
- const simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNodeA),
12
- substitution = simpleSubstitution; ///
13
-
14
- if (substitution !== null) {
15
- const statementNodeMatches = substitution.matchStatementNode(statementNodeB);
16
-
17
- if (statementNodeMatches) {
18
- metavariableUnifiedWithStatement = true;
19
- }
20
- } else {
21
- const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
22
- metavariableA = localContextA.findMetavariableByMetavariableName(metavariableNameA),
23
- metavariableB = metavariableFromStatementNode(statementNodeB, localContextB);
24
-
25
- if (metavariableA === metavariableB) {
26
- metavariableUnifiedWithStatement = true;
27
- } else {
28
- const statementNode = statementNodeB, ///
29
- metavariableNode = metavariableNodeA, ///
30
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeAndMetavariableNode(statementNode, metavariableNode, localContextA, localContextB),
31
- substitution = statementForMetavariableSubstitution; ///
32
-
33
- substitutions.addSubstitution(substitution, localContextA, localContextB);
34
-
35
- metavariableUnifiedWithStatement = true;
36
- }
37
- }
38
-
39
- return metavariableUnifiedWithStatement;
40
- }
@@ -1,41 +0,0 @@
1
- "use strict";
2
-
3
- import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
4
-
5
- import { metavariableFromStatementNode } from "../utilities/unify";
6
- import { metavariableNameFromMetavariableNode } from "../utilities/name";
7
-
8
- export default function unifyMetavariableWithStatementGivenSubstitution(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB) {
9
- let metavariableUnifiedWithStatementGivenSubstitution = false;
10
-
11
- const complexSubstitution = substitutions.findComplexSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNodeA, substitutionNodeA),
12
- substitution = complexSubstitution; ///
13
-
14
- if (substitution !== null) {
15
- const statementNodeMatches = substitution.matchStatementNode(statementNodeB);
16
-
17
- if (statementNodeMatches) {
18
- metavariableUnifiedWithStatementGivenSubstitution = true;
19
- }
20
- } else {
21
- const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
22
- metavariableA = localContextA.findMetavariableByMetavariableName(metavariableNameA),
23
- metavariableB = metavariableFromStatementNode(statementNodeB, localContextB);
24
-
25
- if (metavariableA === metavariableB) {
26
- metavariableUnifiedWithStatementGivenSubstitution = false; ///
27
- } else {
28
- const statementNode = statementNodeB, ///
29
- substitutionNode = substitutionNodeA, ///
30
- metavariableNode = metavariableNodeA, ///
31
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeMetavariableNodeAndSubstitutionNode(statementNode, metavariableNode, substitutionNode, localContextA, localContextB),
32
- substitution = statementForMetavariableSubstitution; ///
33
-
34
- substitutions.addSubstitution(substitution, localContextA, localContextB);
35
-
36
- metavariableUnifiedWithStatementGivenSubstitution = true;
37
- }
38
- }
39
-
40
- return metavariableUnifiedWithStatementGivenSubstitution;
41
- }
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- import { subproofNodeAsSubproofString } from "../utilities/subproof";
4
-
5
- export default function unifySuppositionWithProofStep(suppositionA, proofStepB, substitutions, localContextA, localContextB) {
6
- let suppositionUnified = false;
7
-
8
- const suppositionAStatementNode = suppositionA.getStatementNode();
9
-
10
- if (suppositionAStatementNode !== null) {
11
- const proofStepBSubproofNode = proofStepB.getSubproofNode(),
12
- proofStepBStatementNode = proofStepB.getStatementNode(),
13
- subproofNodeB = proofStepBSubproofNode, ///
14
- statementNodeB = proofStepBStatementNode, ///
15
- statementNodeA = suppositionAStatementNode, ///
16
- statementStringA = localContextA.nodeAsString(statementNodeA)
17
-
18
- substitutions.snapshot();
19
-
20
- if (subproofNodeB !== null) {
21
- const subproofStringB = subproofNodeAsSubproofString(subproofNodeB, localContextB);
22
-
23
- localContextB.trace(`Unifying the '${subproofStringB}' subproof with the supposition's '${statementStringA}' statement...`, subproofNodeB);
24
-
25
- const subproofUnified = suppositionA.unifySubproof(subproofNodeB, substitutions, localContextA, localContextB);
26
-
27
- if (subproofUnified) {
28
- localContextB.debug(`...unified the '${subproofStringB}' subproof with the supposition's '${statementStringA}' statement.`, subproofNodeB);
29
-
30
- suppositionUnified = true;
31
- }
32
- }
33
-
34
- if (statementNodeB !== null) {
35
- const statementStringB = localContextB.nodeAsString(statementNodeB);
36
-
37
- localContextB.trace(`Unifying the '${statementStringB}' statement with the supposition's '${statementStringA}' statement...`, statementNodeB);
38
-
39
- const statementUnified = suppositionA.unifyStatement(statementNodeB, substitutions, localContextA, localContextB);
40
-
41
- if (statementUnified) {
42
- localContextB.debug(`...unified the '${statementStringB}' statement with the supposition's '${statementStringA}' statement.`, statementNodeB);
43
-
44
- suppositionUnified = true;
45
- }
46
- }
47
-
48
- suppositionUnified ?
49
- substitutions.continue() :
50
- substitutions.rollback(localContextA, localContextB);
51
- }
52
-
53
- return suppositionUnified;
54
- }
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- import LocalContext from "../context/local";
4
- import unifySuppositionWithProofStep from "./suppositionWithProffStep";
5
-
6
- import { reverse, correlate } from "../utilities/array";
7
-
8
- export default function unifySuppositionsWithProofSteps(suppositionsA, proofStepsB, substitutions, fileContextA, localContextB) {
9
- suppositionsA = reverse(suppositionsA); ///
10
-
11
- proofStepsB = reverse(proofStepsB); ///
12
-
13
- const suppositionsUnified = correlate(suppositionsA, proofStepsB, (suppositionA, proofStepB) => {
14
- const localContextA = LocalContext.fromFileContext(fileContextA),
15
- suppositionUnified = unifySuppositionWithProofStep(suppositionA, proofStepB, substitutions, localContextA, localContextB);
16
-
17
- if (suppositionUnified) {
18
- return true;
19
- }
20
- });
21
-
22
- return suppositionsUnified;
23
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
-
3
- import { nodeQuery } from "../utilities/query";
4
-
5
- const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
6
-
7
- export default function unifyUnqualifiedStatement(unqualifiedStatementNode, localContext) {
8
- let unqualifiedStatementUnified;
9
-
10
- const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
11
-
12
- localContext.trace(`Unifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
13
-
14
- const statementNode = statementNodeQuery(unqualifiedStatementNode),
15
- statementUnified = localContext.unifyStatement(statementNode, localContext);
16
-
17
- unqualifiedStatementUnified = statementUnified; ///
18
-
19
- if (unqualifiedStatementUnified) {
20
- localContext.debug(`...unified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
21
- }
22
-
23
- return unqualifiedStatementUnified;
24
- }
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- import FileContext from "../context/file";
4
- import topLevelVerifier from "../verifier/topLevel";
5
-
6
- export default function verifyFile(filePath, releaseContext) {
7
- let fileVerified = false;
8
-
9
- releaseContext.debug(`Verifying the '${filePath}' file...`);
10
-
11
- const fileContext = FileContext.fromFilePathAndReleaseContext(filePath, releaseContext),
12
- node = fileContext.getNode();
13
-
14
- if (node !== null) {
15
- const verified = topLevelVerifier.verify(node, fileContext);
16
-
17
- if (verified) {
18
- releaseContext.addFileContext(fileContext);
19
-
20
- fileVerified = true;
21
- }
22
- }
23
-
24
- if (fileVerified) {
25
- releaseContext.info(`...verified the '${filePath}' file.`);
26
- }
27
-
28
- return fileVerified;
29
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
-
3
- import shim from "../shim";
4
-
5
- import { nodesQuery } from "../utilities/query";
6
-
7
- const proofStepNodesQuery = nodesQuery("/subDerivation/proofStep|lastProofStep");
8
-
9
- export default function verifySubDerivation(subDerivationNode, substitutions, localContext) {
10
- let subDerivationVerified;
11
-
12
- const proofStepNodes = proofStepNodesQuery(subDerivationNode);
13
-
14
- subDerivationVerified = proofStepNodes.every((proofStepNode) => {
15
- const { verifyProofStep } = shim,
16
- proofStepVerified = verifyProofStep(proofStepNode, substitutions, localContext);
17
-
18
- if (proofStepVerified) {
19
- return true;
20
- }
21
- });
22
-
23
- return subDerivationVerified;
24
- }