occam-verify-cli 0.0.869 → 0.0.871

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 (129) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +13 -13
  2. package/lib/conclusion.js +3 -3
  3. package/lib/context/file.js +77 -73
  4. package/lib/equality.js +2 -4
  5. package/lib/equivalence.js +1 -1
  6. package/lib/label.js +5 -6
  7. package/lib/metaLemmaMetatheorem.js +13 -13
  8. package/lib/mixins/context.js +28 -28
  9. package/lib/premise.js +4 -4
  10. package/lib/rule.js +13 -13
  11. package/lib/ruleNames.js +1 -29
  12. package/lib/substitution/metastatementForMetavariable.js +3 -2
  13. package/lib/substitution/statementForMetavariable.js +27 -64
  14. package/lib/substitution/termForVariable.js +5 -5
  15. package/lib/utilities/name.js +8 -8
  16. package/lib/utilities/node.js +14 -14
  17. package/lib/utilities/query.js +4 -9
  18. package/lib/utilities/tokens.js +6 -6
  19. package/lib/utilities/verifier.js +86 -0
  20. package/lib/verifier/node/metastatement.js +41 -28
  21. package/lib/verifier/node/statementAsCombinator.js +41 -28
  22. package/lib/verifier/node/termAsConstructor.js +30 -22
  23. package/lib/verifier/nodes/equality.js +27 -32
  24. package/lib/verifier/nodes/intrinsicLevel.js +25 -34
  25. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
  26. package/lib/verifier/nodes/metaLevel.js +25 -34
  27. package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
  28. package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
  29. package/lib/verify/argumentAgainstArgument.js +24 -0
  30. package/lib/verify/axiom.js +4 -4
  31. package/lib/verify/conjecture.js +4 -4
  32. package/lib/verify/containment.js +5 -5
  33. package/lib/verify/equality.js +9 -9
  34. package/lib/verify/label.js +8 -9
  35. package/lib/verify/labels.js +15 -8
  36. package/lib/verify/lemma.js +4 -4
  37. package/lib/verify/metaDerivation.js +19 -19
  38. package/lib/verify/metaLemma.js +4 -4
  39. package/lib/verify/metaproof.js +4 -6
  40. package/lib/verify/metastatement/qualified.js +3 -3
  41. package/lib/verify/metatheorem.js +4 -4
  42. package/lib/verify/metavariable.js +7 -5
  43. package/lib/verify/metavariableAgainstMetastatement.js +44 -0
  44. package/lib/verify/metavariableAgainstStatement.js +65 -0
  45. package/lib/verify/rule.js +4 -4
  46. package/lib/verify/statement/qualified.js +29 -29
  47. package/lib/verify/statement.js +4 -4
  48. package/lib/verify/statementAgainstMetaType.js +24 -0
  49. package/lib/verify/statementAtainstStatement.js +52 -0
  50. package/lib/verify/term.js +7 -8
  51. package/lib/verify/termAgainstTerm.js +22 -0
  52. package/lib/verify/termAgainstType.js +26 -0
  53. package/lib/verify/terms.js +2 -3
  54. package/lib/verify/theorem.js +4 -4
  55. package/lib/verify/type.js +7 -5
  56. package/lib/verify/typeAssertion.js +45 -40
  57. package/lib/verify/variable.js +7 -5
  58. package/lib/verify/variableAgainstTerm.js +70 -0
  59. package/package.json +4 -4
  60. package/src/axiomLemmaTheoremConjecture.js +13 -13
  61. package/src/conclusion.js +2 -2
  62. package/src/context/file.js +79 -73
  63. package/src/equality.js +3 -9
  64. package/src/equivalence.js +1 -1
  65. package/src/label.js +6 -7
  66. package/src/metaLemmaMetatheorem.js +13 -13
  67. package/src/mixins/context.js +17 -17
  68. package/src/premise.js +3 -3
  69. package/src/rule.js +13 -13
  70. package/src/ruleNames.js +0 -7
  71. package/src/substitution/metastatementForMetavariable.js +3 -1
  72. package/src/substitution/statementForMetavariable.js +32 -74
  73. package/src/substitution/termForVariable.js +3 -3
  74. package/src/utilities/name.js +7 -7
  75. package/src/utilities/node.js +13 -13
  76. package/src/utilities/query.js +3 -9
  77. package/src/utilities/tokens.js +4 -4
  78. package/src/utilities/verifier.js +46 -0
  79. package/src/verifier/node/metastatement.js +41 -34
  80. package/src/verifier/node/statementAsCombinator.js +39 -32
  81. package/src/verifier/node/termAsConstructor.js +30 -25
  82. package/src/verifier/nodes/equality.js +31 -36
  83. package/src/verifier/nodes/intrinsicLevel.js +30 -38
  84. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
  85. package/src/verifier/nodes/metaLevel.js +30 -38
  86. package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
  87. package/src/verifier/nodes/termAgainstConstructor.js +30 -71
  88. package/src/verify/argumentAgainstArgument.js +15 -0
  89. package/src/verify/axiom.js +4 -4
  90. package/src/verify/conjecture.js +4 -4
  91. package/src/verify/containment.js +4 -4
  92. package/src/verify/equality.js +8 -8
  93. package/src/verify/label.js +8 -9
  94. package/src/verify/labels.js +17 -7
  95. package/src/verify/lemma.js +4 -4
  96. package/src/verify/metaDerivation.js +18 -18
  97. package/src/verify/metaLemma.js +6 -6
  98. package/src/verify/metaproof.js +3 -6
  99. package/src/verify/metastatement/qualified.js +5 -4
  100. package/src/verify/metatheorem.js +4 -4
  101. package/src/verify/metavariable.js +7 -5
  102. package/src/verify/metavariableAgainstMetastatement.js +42 -0
  103. package/src/verify/metavariableAgainstStatement.js +77 -0
  104. package/src/verify/rule.js +4 -4
  105. package/src/verify/statement/qualified.js +35 -30
  106. package/src/verify/statement.js +5 -5
  107. package/src/verify/statementAgainstMetaType.js +21 -0
  108. package/src/verify/statementAtainstStatement.js +60 -0
  109. package/src/verify/term.js +13 -17
  110. package/src/verify/termAgainstTerm.js +20 -0
  111. package/src/verify/termAgainstType.js +28 -0
  112. package/src/verify/terms.js +1 -3
  113. package/src/verify/theorem.js +4 -4
  114. package/src/verify/type.js +7 -5
  115. package/src/verify/typeAssertion.js +56 -55
  116. package/src/verify/variable.js +7 -5
  117. package/src/verify/variableAgainstTerm.js +86 -0
  118. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
  119. package/lib/verifier/nodes/substitution.js +0 -223
  120. package/lib/verify/givenMetavariable.js +0 -31
  121. package/lib/verify/givenType.js +0 -31
  122. package/lib/verify/givenVariable.js +0 -31
  123. package/lib/verify/termAndGivenType.js +0 -39
  124. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
  125. package/src/verifier/nodes/substitution.js +0 -125
  126. package/src/verify/givenMetavariable.js +0 -31
  127. package/src/verify/givenType.js +0 -31
  128. package/src/verify/givenVariable.js +0 -31
  129. package/src/verify/termAndGivenType.js +0 -37
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  import Variable from "../variable";
4
+ import verifyTerm from "../verify/term";
4
5
  import VariableAssignment from "../assignment/variable";
5
- import verifyTermAndGivenType from "../verify/termAndGivenType";
6
6
 
7
7
  import { first } from "../utilities/array";
8
8
  import { nodeQuery } from "../utilities/query";
9
- import { verifyTermAsGivenVariable } from "./term";
10
9
 
11
10
  const termNodeQuery = nodeQuery("/typeAssertion/term!"),
12
11
  typeNodeQuery = nodeQuery("/typeAssertion/type!"),
@@ -21,7 +20,7 @@ export default function verifyTypeAssertion(typeAssertionNode, assignments, deri
21
20
 
22
21
  const verifyTypeAssertionFunctions = [
23
22
  verifyDerivedTypeAssertion,
24
- verifyGivenTypeAssertion
23
+ verifyStatedTypeAssertion
25
24
  ];
26
25
 
27
26
  typeAssertionVerified = verifyTypeAssertionFunctions.some((verifyTypeAssertionFunction) => {
@@ -48,38 +47,39 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
48
47
  localContext.trace(`Verifying the '${typeAssertionString}' derived type assertion...`, typeAssertionNode);
49
48
 
50
49
  const terms = [],
51
- types = [],
52
50
  termNode = termNodeQuery(typeAssertionNode),
53
- typeNode = typeNodeQuery(typeAssertionNode),
54
- termAndGivenTypeVerified = verifyTermAndGivenType(termNode, typeNode, terms, types, localContext, () => {
51
+ termVerified = verifyTerm(termNode, terms, localContext, () => {
55
52
  let verifiedAhead = false;
56
53
 
57
- const firstTerm = first(terms),
58
- firstType = first(types),
59
- term = firstTerm, ///
60
- type = firstType, ///
61
- termType = localContext.getTermType(term),
62
- typeEqualToOrSuperTypeOfTermType = type.isEqualToOrSuperTypeOf(termType);
54
+ const typeNode = typeNodeQuery(typeAssertionNode),
55
+ type = localContext.findTypeByTypeNode(typeNode);
63
56
 
64
- if (typeEqualToOrSuperTypeOfTermType) {
65
- const variableNode = variableNodeQuery(termNode);
57
+ if (type !== null) {
58
+ const firstTerm = first(terms),
59
+ term = firstTerm, ///
60
+ termType = localContext.getTermType(term),
61
+ typeEqualToOrSuperTypeOfTermType = type.isEqualToOrSuperTypeOf(termType);
66
62
 
67
- if (variableNode === null) {
68
- verifiedAhead = verifyAhead();
69
- } else {
70
- let variable = localContext.findVariableByVariableNode(variableNode);
63
+ if (typeEqualToOrSuperTypeOfTermType) {
64
+ const variableNode = variableNodeQuery(termNode);
71
65
 
72
- variable = Variable.fromVariableAndType(variable, type);
66
+ if (variableNode === null) {
67
+ verifiedAhead = verifyAhead();
68
+ } else {
69
+ let variable = localContext.findVariableByVariableNode(variableNode);
73
70
 
74
- const variableAssignment = VariableAssignment.fromVariable(variable),
75
- assignment = variableAssignment; ///
71
+ variable = Variable.fromVariableAndType(variable, type);
76
72
 
77
- assignments.push(assignment);
73
+ const variableAssignment = VariableAssignment.fromVariable(variable),
74
+ assignment = variableAssignment; ///
78
75
 
79
- verifiedAhead = verifyAhead();
76
+ assignments.push(assignment);
80
77
 
81
- if (!verifiedAhead) {
82
- assignments.pop();
78
+ verifiedAhead = verifyAhead();
79
+
80
+ if (!verifiedAhead) {
81
+ assignments.pop();
82
+ }
83
83
  }
84
84
  }
85
85
  }
@@ -87,7 +87,7 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
87
87
  return verifiedAhead;
88
88
  });
89
89
 
90
- derivedTypeAssertionVerified = termAndGivenTypeVerified; ///
90
+ derivedTypeAssertionVerified = termVerified; ///
91
91
 
92
92
  if (derivedTypeAssertionVerified) {
93
93
  localContext.trace(`...verified the '${typeAssertionString}' derived type assertion.`, typeAssertionNode);
@@ -97,47 +97,48 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
97
97
  return derivedTypeAssertionVerified;
98
98
  }
99
99
 
100
- function verifyGivenTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead) {
101
- let givenTypeAssertionVerified = false;
100
+ function verifyStatedTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead) {
101
+ let statedTypeAssertionVerified = false;
102
102
 
103
103
  if (!derived) {
104
104
  const typeAssertionString = localContext.nodeAsString(typeAssertionNode);
105
105
 
106
- localContext.trace(`Verifying the '${typeAssertionString}' given type assertion...`, typeAssertionNode);
106
+ localContext.trace(`Verifying the '${typeAssertionString}' stated type assertion...`, typeAssertionNode);
107
107
 
108
108
  const terms = [],
109
- types = [],
110
109
  termNode = termNodeQuery(typeAssertionNode),
111
- typeNode = typeNodeQuery(typeAssertionNode),
112
- termAndGivenTypeVerified = verifyTermAndGivenType(termNode, typeNode, terms, types, localContext, () => {
110
+ termVerified = verifyTerm(termNode, terms, localContext, () => {
113
111
  let verifiedAhead = false;
114
112
 
115
- const firstTerm = first(terms),
116
- firstType = first(types),
117
- term = firstTerm, ///
118
- type = firstType, ///
119
- termType = term.getType(),
120
- typeEqualToOrSubTypeOfTermType = type.isEqualToOrSubTypeOf(termType);
113
+ const typeNode = typeNodeQuery(typeAssertionNode),
114
+ type = localContext.findTypeByTypeNode(typeNode);
115
+
116
+ if (type !== null) {
117
+ const firstTerm = first(terms),
118
+ term = firstTerm, ///
119
+ termType = term.getType(),
120
+ typeEqualToOrSubTypeOfTermType = type.isEqualToOrSubTypeOf(termType);
121
121
 
122
- if (typeEqualToOrSubTypeOfTermType) {
123
- const variableNode = variableNodeQuery(termNode);
122
+ if (typeEqualToOrSubTypeOfTermType) {
123
+ const variableNode = variableNodeQuery(termNode);
124
124
 
125
- if (variableNode === null) {
126
- verifiedAhead = verifyAhead();
127
- } else {
128
- let variable = localContext.findVariableByVariableNode(variableNode);
125
+ if (variableNode === null) {
126
+ verifiedAhead = verifyAhead();
127
+ } else {
128
+ let variable = localContext.findVariableByVariableNode(variableNode);
129
129
 
130
- variable = Variable.fromVariableAndType(variable, type);
130
+ variable = Variable.fromVariableAndType(variable, type);
131
131
 
132
- const variableAssignment = VariableAssignment.fromVariable(variable),
133
- assignment = variableAssignment; ///
132
+ const variableAssignment = VariableAssignment.fromVariable(variable),
133
+ assignment = variableAssignment; ///
134
134
 
135
- assignments.push(assignment);
135
+ assignments.push(assignment);
136
136
 
137
- verifiedAhead = verifyAhead();
137
+ verifiedAhead = verifyAhead();
138
138
 
139
- if (!verifiedAhead) {
140
- assignments.pop();
139
+ if (!verifiedAhead) {
140
+ assignments.pop();
141
+ }
141
142
  }
142
143
  }
143
144
  }
@@ -145,12 +146,12 @@ function verifyGivenTypeAssertion(typeAssertionNode, assignments, derived, local
145
146
  return verifiedAhead;
146
147
  });
147
148
 
148
- givenTypeAssertionVerified = termAndGivenTypeVerified; ///
149
+ statedTypeAssertionVerified = termVerified; ///
149
150
 
150
- if (givenTypeAssertionVerified) {
151
- localContext.trace(`...verified the '${typeAssertionString}' given type assertion.`, typeAssertionNode);
151
+ if (statedTypeAssertionVerified) {
152
+ localContext.trace(`...verified the '${typeAssertionString}' stated type assertion.`, typeAssertionNode);
152
153
  }
153
154
  }
154
155
 
155
- return givenTypeAssertionVerified;
156
+ return statedTypeAssertionVerified;
156
157
  }
@@ -2,7 +2,6 @@
2
2
 
3
3
  import Variable from "../variable";
4
4
  import VariableAssignment from "../assignment/variable";
5
- import verifyGivenVariable from "../verify/givenVariable";
6
5
 
7
6
  import { objectType } from "../type";
8
7
 
@@ -54,16 +53,19 @@ export default function verifyVariable(variableNode, typeNode, fileContext) {
54
53
  }
55
54
 
56
55
  export function verifyStandaloneVariable(variableNode, localContext, verifyAhead) {
57
- let standaloneVariableVerified;
56
+ let standaloneVariableVerified = false;
58
57
 
59
58
  const variableString = localContext.nodeAsString(variableNode);
60
59
 
61
60
  localContext.trace(`Verifying the '${variableString}' standalone variable...`, variableNode);
62
61
 
63
- const variables = [],
64
- givenVariableVerified = verifyGivenVariable(variableNode, variables, localContext, verifyAhead);
62
+ const variablePresent = localContext.isVariablePresentByVariableNode(variableNode);
65
63
 
66
- standaloneVariableVerified = givenVariableVerified; ///
64
+ if (variablePresent) {
65
+ const verifiedAhead = verifyAhead();
66
+
67
+ standaloneVariableVerified = verifiedAhead; ///
68
+ }
67
69
 
68
70
  if (standaloneVariableVerified) {
69
71
  localContext.debug(`...verified the '${variableString}' standalone variable.`, variableNode);
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ import verifyTerm from "../verify/term";
4
+ import TermForVariableSubstitution from "../substitution/termForVariable";
5
+
6
+ import { first } from "../utilities/array";
7
+ import { nodeQuery } from "../utilities/query";
8
+
9
+ const variableNodeQuery = nodeQuery("/term/variable");
10
+
11
+ export default function verifyVariableAgainstTerm(variableNode, termNode, substitutions, localContextA, localContextB, verifyAhead) {
12
+ let variableVerifiedAgainstTerm = false;
13
+
14
+ const substitution = substitutions.find((substitution) => {
15
+ const substitutionMatchesVariableNodeA = substitution.matchVariableNode(variableNode);
16
+
17
+ if (substitutionMatchesVariableNodeA) {
18
+ return true;
19
+ }
20
+ }) || null;
21
+
22
+ if (substitution !== null) {
23
+ const termNodeMatches = substitution.matchTermNode(termNode);
24
+
25
+ if (termNodeMatches) {
26
+ const verifiedAhead = verifyAhead();
27
+
28
+ variableVerifiedAgainstTerm = verifiedAhead; ///
29
+ }
30
+ } else {
31
+ const variableA = localContextA.findVariableByVariableNode(variableNode);
32
+
33
+ if (variableA !== null) {
34
+ const terms = [],
35
+ termVerified = verifyTerm(termNode, terms, localContextB, () => {
36
+ let verifiedAhead = false;
37
+
38
+ const firstTerm = first(terms),
39
+ termB = firstTerm, ///
40
+ variableB = variableFromTerm(termB, localContextB);
41
+
42
+ if (variableA === variableB) {
43
+ verifiedAhead = verifyAhead();
44
+ } else {
45
+ const term = termB, ///
46
+ variable = variableA, ///
47
+ termType = term.getType(),
48
+ variableType = variable.getType(),
49
+ variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
50
+
51
+ if (variableTypeEqualToOrSuperTypeOfTermType) {
52
+ const termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
53
+ substitution = termForVariableSubstitution; ///
54
+
55
+ substitutions.push(substitution);
56
+
57
+ verifiedAhead = verifyAhead();
58
+
59
+ if (!verifiedAhead) {
60
+ substitutions.pop();
61
+ }
62
+ }
63
+ }
64
+
65
+ return verifiedAhead;
66
+ });
67
+
68
+ variableVerifiedAgainstTerm = termVerified; ///
69
+ }
70
+ }
71
+
72
+ return variableVerifiedAgainstTerm;
73
+ }
74
+
75
+ function variableFromTerm(term, localContext) {
76
+ let variable = null;
77
+
78
+ const termNode = term.getNode(),
79
+ variableNode = variableNodeQuery(termNode);
80
+
81
+ if (variableNode !== null) {
82
+ variable = localContext.findVariableByVariableNode(variableNode);
83
+ }
84
+
85
+ return variable;
86
+ }