occam-verify-cli 0.0.678 → 0.0.680

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 (141) hide show
  1. package/bin/action/verify.js +13 -3
  2. package/lib/axiomLemmaTheoremConjecture.js +3 -3
  3. package/lib/conclusion.js +16 -5
  4. package/lib/consequent.js +11 -3
  5. package/lib/context/file.js +73 -3
  6. package/lib/context/release.js +7 -2
  7. package/lib/equality.js +13 -199
  8. package/lib/premise.js +24 -7
  9. package/lib/supposition.js +15 -4
  10. package/lib/type.js +3 -8
  11. package/lib/utilities/array.js +5 -2
  12. package/lib/utilities/string.js +26 -13
  13. package/lib/verifier/node/metastatement.js +176 -0
  14. package/lib/verifier/node/statementAsCombinator.js +186 -0
  15. package/lib/verifier/node/termAsConstructor.js +224 -0
  16. package/lib/verifier/node.js +158 -0
  17. package/lib/verifier/nodes/equality.js +155 -0
  18. package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/conclusion.js +13 -12
  19. package/lib/verifier/{metastatementForMetavariable → nodes/metastatementForMetavariable}/premise.js +13 -12
  20. package/lib/verifier/nodes/metastatementForMetavariable.js +198 -0
  21. package/lib/verifier/nodes/statement.js +200 -0
  22. package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/conclusion.js +13 -12
  23. package/lib/verifier/{statementForMetavariable → nodes/statementForMetavariable}/premise.js +13 -12
  24. package/lib/verifier/nodes/statementForMetavariable.js +203 -0
  25. package/lib/verifier/nodes/term.js +210 -0
  26. package/lib/verifier/{termForVariable/supposition.js → nodes/termForVariable/consequent.js} +13 -12
  27. package/lib/verifier/{termForVariable/consequent.js → nodes/termForVariable/supposition.js} +13 -12
  28. package/lib/verifier/nodes/termForVariable.js +217 -0
  29. package/lib/verifier/nodes.js +175 -0
  30. package/lib/verify/axiom.js +3 -3
  31. package/lib/verify/conclusion.js +3 -3
  32. package/lib/verify/conjecture.js +3 -3
  33. package/lib/verify/consequent.js +3 -3
  34. package/lib/verify/declaration/combinator.js +7 -2
  35. package/lib/verify/declaration/constructor.js +8 -2
  36. package/lib/verify/declaration/metavariable.js +7 -2
  37. package/lib/verify/declaration/type.js +7 -2
  38. package/lib/verify/declaration/variable.js +8 -2
  39. package/lib/verify/file.js +3 -3
  40. package/lib/verify/label.js +9 -4
  41. package/lib/verify/lemma.js +3 -3
  42. package/lib/verify/metastatement/qualified.js +5 -6
  43. package/lib/verify/metastatement/unqualified.js +9 -7
  44. package/lib/verify/metastatement.js +36 -156
  45. package/lib/verify/metavariable.js +6 -4
  46. package/lib/verify/premise.js +3 -3
  47. package/lib/verify/release.js +3 -3
  48. package/lib/verify/rule.js +3 -3
  49. package/lib/verify/statement/qualified.js +5 -6
  50. package/lib/verify/statement/unqualified.js +9 -7
  51. package/lib/verify/statement.js +86 -332
  52. package/lib/verify/statementAsCombinator.js +8 -82
  53. package/lib/verify/supposition.js +3 -3
  54. package/lib/verify/term.js +79 -215
  55. package/lib/verify/termAsConstructor.js +15 -89
  56. package/lib/verify/terms.js +45 -0
  57. package/lib/verify/theorem.js +3 -3
  58. package/lib/verify/type.js +7 -5
  59. package/lib/verify/typeAssertion.js +124 -0
  60. package/lib/verify/variable.js +7 -5
  61. package/package.json +5 -5
  62. package/src/axiomLemmaTheoremConjecture.js +2 -2
  63. package/src/conclusion.js +13 -4
  64. package/src/consequent.js +9 -2
  65. package/src/context/file.js +9 -2
  66. package/src/context/release.js +9 -2
  67. package/src/equality.js +17 -143
  68. package/src/premise.js +23 -6
  69. package/src/supposition.js +12 -3
  70. package/src/type.js +3 -8
  71. package/src/utilities/array.js +1 -1
  72. package/src/utilities/string.js +34 -23
  73. package/src/verifier/node/metastatement.js +61 -0
  74. package/src/verifier/node/statementAsCombinator.js +80 -0
  75. package/src/verifier/node/termAsConstructor.js +124 -0
  76. package/src/verifier/node.js +85 -0
  77. package/src/verifier/nodes/equality.js +68 -0
  78. package/src/verifier/nodes/metastatementForMetavariable/conclusion.js +11 -0
  79. package/src/verifier/nodes/metastatementForMetavariable/premise.js +11 -0
  80. package/src/verifier/{metastatementForMetavariable.js → nodes/metastatementForMetavariable.js} +13 -13
  81. package/src/verifier/nodes/statement.js +100 -0
  82. package/src/verifier/nodes/statementForMetavariable/conclusion.js +11 -0
  83. package/src/verifier/nodes/statementForMetavariable/premise.js +11 -0
  84. package/src/verifier/{statementForMetavariable.js → nodes/statementForMetavariable.js} +10 -10
  85. package/src/verifier/nodes/term.js +106 -0
  86. package/src/verifier/nodes/termForVariable/consequent.js +11 -0
  87. package/src/verifier/nodes/termForVariable/supposition.js +11 -0
  88. package/src/verifier/{termForVariable.js → nodes/termForVariable.js} +42 -30
  89. package/src/verifier/nodes.js +111 -0
  90. package/src/verify/axiom.js +2 -2
  91. package/src/verify/conclusion.js +2 -2
  92. package/src/verify/conjecture.js +2 -2
  93. package/src/verify/consequent.js +2 -2
  94. package/src/verify/declaration/combinator.js +9 -1
  95. package/src/verify/declaration/constructor.js +15 -1
  96. package/src/verify/declaration/metavariable.js +9 -1
  97. package/src/verify/declaration/type.js +14 -1
  98. package/src/verify/declaration/variable.js +15 -1
  99. package/src/verify/file.js +2 -2
  100. package/src/verify/label.js +10 -2
  101. package/src/verify/lemma.js +4 -4
  102. package/src/verify/metastatement/qualified.js +4 -6
  103. package/src/verify/metastatement/unqualified.js +9 -7
  104. package/src/verify/metastatement.js +35 -56
  105. package/src/verify/metavariable.js +6 -3
  106. package/src/verify/premise.js +2 -2
  107. package/src/verify/release.js +2 -2
  108. package/src/verify/rule.js +2 -2
  109. package/src/verify/statement/qualified.js +4 -6
  110. package/src/verify/statement/unqualified.js +9 -7
  111. package/src/verify/statement.js +109 -302
  112. package/src/verify/statementAsCombinator.js +9 -129
  113. package/src/verify/supposition.js +2 -2
  114. package/src/verify/term.js +99 -156
  115. package/src/verify/termAsConstructor.js +20 -135
  116. package/src/verify/terms.js +54 -0
  117. package/src/verify/theorem.js +2 -2
  118. package/src/verify/type.js +7 -4
  119. package/src/verify/typeAssertion.js +164 -0
  120. package/src/verify/variable.js +7 -4
  121. package/lib/node/statement/combinator/equality.js +0 -21
  122. package/lib/ocmbinator/equality.js +0 -126
  123. package/lib/tokens/statement/combinator/equality.js +0 -17
  124. package/lib/verifier/metastatementForMetavariable.js +0 -198
  125. package/lib/verifier/statementForMetavariable.js +0 -203
  126. package/lib/verifier/termForVariable.js +0 -209
  127. package/lib/verifier.js +0 -138
  128. package/lib/verify/assertion/type.js +0 -115
  129. package/lib/verify/typeInference.js +0 -132
  130. package/src/node/statement/combinator/equality.js +0 -9
  131. package/src/ocmbinator/equality.js +0 -23
  132. package/src/tokens/statement/combinator/equality.js +0 -10
  133. package/src/verifier/metastatementForMetavariable/conclusion.js +0 -9
  134. package/src/verifier/metastatementForMetavariable/premise.js +0 -9
  135. package/src/verifier/statementForMetavariable/conclusion.js +0 -9
  136. package/src/verifier/statementForMetavariable/premise.js +0 -9
  137. package/src/verifier/termForVariable/consequent.js +0 -9
  138. package/src/verifier/termForVariable/supposition.js +0 -9
  139. package/src/verifier.js +0 -74
  140. package/src/verify/assertion/type.js +0 -153
  141. package/src/verify/typeInference.js +0 -146
@@ -1,146 +0,0 @@
1
- "use strict";
2
-
3
- import Equality from "../equality";
4
- import verifyTerm from "./term";
5
- import equalityCombinator from "../ocmbinator/equality";
6
-
7
- import { nodeQuery } from "../utilities/query";
8
- import { first, second } from "../utilities/array";
9
- import { verifyTermAsVariable } from "./term";
10
- import { verifyVariableTypeAssertion } from "./assertion/type";
11
- import { verifyStatementAgainstCombinator } from "../verify/statement";
12
- import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
13
-
14
- const statementNodeQuery = nodeQuery("/typeInference/statement!"),
15
- typeAssertionNodeQuery = nodeQuery("/typeInference/typeAssertion!");
16
-
17
- export default function verifyTypeInference(typeInferenceNode, context) {
18
- let typeInferenceVerified = false;
19
-
20
- const typeInferenceString = context.nodeAsString(typeInferenceNode);
21
-
22
- context.debug(`Verifying the '${typeInferenceString}' type inference...`, typeInferenceNode);
23
-
24
- let statementNode = statementNodeQuery(typeInferenceNode);
25
-
26
- const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
27
-
28
- if (bracketedStatementChildNode !== null) {
29
- statementNode = bracketedStatementChildNode; ///
30
- }
31
-
32
- const statementString = context.nodeAsString(statementNode),
33
- statementMatches = context.matchStatement(statementNode);
34
-
35
- if (!statementMatches) {
36
- context.error(`The '${statementString}' statement is not present in the context.`, typeInferenceNode);
37
- } else {
38
- const combinator = equalityCombinator, ///
39
- statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
40
-
41
- if (!statementVerifiedAgainstCombinator) {
42
- context.error(`The '${statementString}' statement is not an equality.`, typeInferenceNode);
43
- } else {
44
- const derived = false, ///
45
- equality = Equality.fromStatementNode(statementNode),
46
- assignments = [],
47
- typeAssertionNode = typeAssertionNodeQuery(typeInferenceNode),
48
- variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, assignments, derived, context)
49
-
50
- if (variableTypeAssertionVerified) {
51
- const firstAssignment = first(assignments),
52
- assignment = firstAssignment, ///
53
- variables = [],
54
- leftTermNode = equality.getLeftTermNode(),
55
- rightTermNode = equality.getRightTermNode(),
56
- leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
57
- rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
58
-
59
- if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
60
- const firstVariable = first(variables),
61
- secondVariable = second(variables),
62
- leftVariable = firstVariable, ///
63
- rightVariable = secondVariable, ///
64
- leftVariableName = leftVariable.getName(),
65
- leftVariableType = leftVariable.getType(),
66
- rightVariableName = rightVariable.getName(),
67
- rightVariableType = rightVariable.getType(),
68
- leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
69
-
70
- if (leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
71
- const leftVariableTypeSuperTypeOfRightVariableType = leftVariableType.isSuperTypeOf(rightVariableType),
72
- rightVariableTypeSuperTypeOfLeftVariableType = rightVariableType.isSuperTypeOf(leftVariableType);
73
-
74
- if (leftVariableTypeSuperTypeOfRightVariableType) {
75
- const name = leftVariableName, ///
76
- type = rightVariableType; ///
77
-
78
- assignAssignment(name, type, assignment, context);
79
- }
80
-
81
- if (rightVariableTypeSuperTypeOfLeftVariableType) {
82
- const name = rightVariableName, ///
83
- type = leftVariableType; ///
84
-
85
- assignAssignment(name, type, assignment, context);
86
- }
87
- }
88
- } else if (leftTermVerifiedAsVariable) {
89
- const types = [];
90
-
91
- verifyTerm(rightTermNode, types, context);
92
-
93
- const firstType = first(types),
94
- firstVariable = first(variables),
95
- leftVariable = firstVariable, ///
96
- rightTermType = firstType, ///
97
- leftVariableName = leftVariable.getName(),
98
- leftVariableType = leftVariable.getType(),
99
- leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
100
-
101
- if (leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
102
- const name = leftVariableName, ///
103
- type = rightTermType; ///
104
-
105
- assignAssignment(name, type, assignment, context);
106
- }
107
- } else if (rightTermVerifiedAsVariable) {
108
- const types = [];
109
-
110
- verifyTerm(leftTermNode, types, context);
111
-
112
- const firstType = first(types),
113
- firstVariable = first(variables),
114
- leftTermType = firstType, ///
115
- rightVariable = firstVariable, ///
116
- rightVariableName = rightVariable.getName(),
117
- rightVariableType = rightVariable.getType(),
118
- rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
119
-
120
- if (rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
121
- const name = rightVariableName, ///
122
- type = leftTermType; ///
123
-
124
- assignAssignment(name, type, assignment, context);
125
- }
126
- }
127
-
128
- typeInferenceVerified = true;
129
- }
130
- }
131
- }
132
-
133
- if (typeInferenceVerified) {
134
- context.info(`Verified the '${typeInferenceString}' type inference.`, typeInferenceNode);
135
- }
136
-
137
- return typeInferenceVerified;
138
- }
139
-
140
- function assignAssignment(name, type, assignment, context) {
141
- const assignmentMatchesNameAndType = assignment.matchNameAndType(name, type);
142
-
143
- if (assignmentMatchesNameAndType) {
144
- assignment.assign(context);
145
- }
146
- }