occam-verify-cli 0.0.533 → 0.0.535

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 (54) hide show
  1. package/lib/assignment.js +60 -0
  2. package/lib/conclusion.js +3 -3
  3. package/lib/consequence.js +2 -2
  4. package/lib/equality.js +22 -113
  5. package/lib/log.js +3 -2
  6. package/lib/premise.js +7 -7
  7. package/lib/supposition.js +4 -4
  8. package/lib/verifier/metastatementForMetavariable.js +23 -23
  9. package/lib/verifier/statement.js +199 -0
  10. package/lib/verifier/statementForMetavariable.js +25 -25
  11. package/lib/verifier/termForVariable.js +23 -23
  12. package/lib/verifier.js +27 -26
  13. package/lib/verify/assertion/type.js +7 -7
  14. package/lib/verify/conclusion.js +2 -2
  15. package/lib/verify/consequence.js +2 -2
  16. package/lib/verify/derivation.js +3 -3
  17. package/lib/verify/metastatement/qualified.js +3 -3
  18. package/lib/verify/metastatement/unqualified.js +3 -3
  19. package/lib/verify/metastatement.js +2 -2
  20. package/lib/verify/premise.js +2 -2
  21. package/lib/verify/ruleDerivation.js +3 -3
  22. package/lib/verify/statement/qualified.js +3 -3
  23. package/lib/verify/statement/unqualified.js +3 -3
  24. package/lib/verify/statement.js +21 -121
  25. package/lib/verify/statementAsCombinator.js +2 -2
  26. package/lib/verify/supposition.js +4 -4
  27. package/package.json +1 -1
  28. package/src/{assertion.js → assignment.js} +4 -4
  29. package/src/conclusion.js +4 -4
  30. package/src/consequence.js +2 -2
  31. package/src/equality.js +20 -105
  32. package/src/log.js +1 -1
  33. package/src/premise.js +15 -15
  34. package/src/supposition.js +11 -11
  35. package/src/verifier/metastatementForMetavariable.js +19 -19
  36. package/src/verifier/statement.js +135 -0
  37. package/src/verifier/statementForMetavariable.js +21 -21
  38. package/src/verifier/termForVariable.js +19 -19
  39. package/src/verifier.js +21 -21
  40. package/src/verify/assertion/type.js +6 -6
  41. package/src/verify/conclusion.js +2 -2
  42. package/src/verify/consequence.js +2 -2
  43. package/src/verify/derivation.js +4 -4
  44. package/src/verify/metastatement/qualified.js +2 -2
  45. package/src/verify/metastatement/unqualified.js +2 -2
  46. package/src/verify/metastatement.js +1 -1
  47. package/src/verify/premise.js +2 -2
  48. package/src/verify/ruleDerivation.js +4 -4
  49. package/src/verify/statement/qualified.js +2 -2
  50. package/src/verify/statement/unqualified.js +2 -2
  51. package/src/verify/statement.js +26 -193
  52. package/src/verify/statementAsCombinator.js +2 -2
  53. package/src/verify/supposition.js +4 -4
  54. package/lib/assertion.js +0 -60
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
 
3
+ import Equality from "../equality";
3
4
  import Variable from "../variable";
4
- import Assertion from "../assertion";
5
+ import Assignment from "../assignment";
5
6
  import verifyTerm from "../verify/term";
7
+ import statementVerifier from "../verifier/statement";
6
8
  import equalityCombinator from "../ocmbinator/equality";
7
9
  import bracketedCombinator from "../ocmbinator/bracketed";
8
10
  import verifyTypeAssertion from "../verify/assertion/type";
9
11
 
10
12
  import { first } from "../utilities/array";
11
- import { objectType } from "../type";
13
+ import { nodeQuery } from "../utilities/query";
12
14
  import { nodeAsString } from "../utilities/string";
13
- import { OBJECT_TYPE_NAME } from "../typeNames";
14
- import { STATEMENT_META_TYPE } from "../metaTypes";
15
15
  import { verifyTermAsVariable } from "../verify/term";
16
- import { nodeQuery, typeNameFromTypeNode } from "../utilities/query";
17
- import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../ruleNames";
18
16
 
19
- const termNodeQuery = nodeQuery("/argument/term!"),
20
- typeNodeQuery = nodeQuery("/argument/type!"),
21
- leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
17
+ const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
22
18
  rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!"),
23
- metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
24
- statementNodeQuery = nodeQuery("/metaArgument/statement!"),
25
- typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
26
- metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
19
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
27
20
 
28
- export default function verifyStatement(statementNode, assertions, derived, context) {
21
+ export default function verifyStatement(statementNode, assignments, derived, context) {
29
22
  let statementVerified = false;
30
23
 
31
24
  if (!statementVerified) {
@@ -35,13 +28,13 @@ export default function verifyStatement(statementNode, assertions, derived, cont
35
28
  }
36
29
 
37
30
  if (!statementVerified) {
38
- const statementVerifiedAsTypeAssertion = verifyStatementAsTypeAssertion(statementNode, assertions, derived, context);
31
+ const statementVerifiedAsTypeAssertion = verifyStatementAsTypeAssertion(statementNode, assignments, derived, context);
39
32
 
40
33
  statementVerified = statementVerifiedAsTypeAssertion; ///
41
34
  }
42
35
 
43
36
  if (!statementVerified) {
44
- const statementVerifiedAsEquality = verifyStatementAsEquality(statementNode, assertions, derived, context);
37
+ const statementVerifiedAsEquality = verifyStatementAsEquality(statementNode, assignments, derived, context);
45
38
 
46
39
  statementVerified = statementVerifiedAsEquality; //
47
40
  }
@@ -76,21 +69,22 @@ function verifyStatementAgainstCombinators(statementNode, context) {
76
69
 
77
70
  function verifyStatementAgainstCombinator(statementNode, combinator, context) {
78
71
  const combinatorStatementNode = combinator.getStatementNode(),
79
- node = statementNode, ///
80
- combinatorNode = combinatorStatementNode, ///
81
- nodeVerified = verifyNode(node, combinatorNode, context),
82
- statementVerifiedAgainstCombinator = nodeVerified; ///
72
+ nonTerminalNodeA = statementNode, ///
73
+ nonTerminalNodeB = combinatorStatementNode, ///
74
+ substitutions = null,
75
+ nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context),
76
+ statementVerifiedAgainstCombinator = nodeVerified; ///
83
77
 
84
78
  return statementVerifiedAgainstCombinator;
85
79
  }
86
80
 
87
- function verifyStatementAsTypeAssertion(statementNode, assertions, derived, context) {
81
+ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, context) {
88
82
  let statementVerifiedAsTypeAssertion = false;
89
83
 
90
84
  const typeAssertionNode = typeAssertionNodeQuery(statementNode);
91
85
 
92
86
  if (typeAssertionNode !== null) {
93
- const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assertions, derived, context);
87
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, context);
94
88
 
95
89
  statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
96
90
  }
@@ -98,7 +92,7 @@ function verifyStatementAsTypeAssertion(statementNode, assertions, derived, cont
98
92
  return statementVerifiedAsTypeAssertion;
99
93
  }
100
94
 
101
- function verifyStatementAsEquality(statementNode, assertions, derived, context) {
95
+ function verifyStatementAsEquality(statementNode, assignments, derived, context) {
102
96
  let statementVerifiedAsEquality = false;
103
97
 
104
98
  const statementString = context.nodeAsString(statementNode);
@@ -107,13 +101,17 @@ function verifyStatementAsEquality(statementNode, assertions, derived, context)
107
101
  statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
108
102
 
109
103
  if (statementVerifiedAgainstCombinator) {
104
+ const leftTermNode = leftTermNodeQuery(statementNode),
105
+ rightTermNode = rightTermNodeQuery(statementNode);
106
+
110
107
  if (derived) {
111
- debugger
108
+ const equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode),
109
+ equalityEquates = equality.equate(context);
110
+
111
+ statementVerifiedAsEquality = equalityEquates; ///
112
112
  } else {
113
113
  const types = [],
114
114
  variables = [],
115
- leftTermNode = leftTermNodeQuery(statementNode),
116
- rightTermNode = rightTermNodeQuery(statementNode),
117
115
  leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context);
118
116
 
119
117
  if (leftTermVerifiedAsVariable) {
@@ -138,9 +136,9 @@ function verifyStatementAsEquality(statementNode, assertions, derived, context)
138
136
  name = leftVariableName, ///
139
137
  termNode = rightTermNode, ///
140
138
  variable = Variable.fromTypeNameAndTermNode(type, name, termNode),
141
- assertion = Assertion.fromVariable(variable);
139
+ assignment = Assignment.fromVariable(variable);
142
140
 
143
- assertions.push(assertion);
141
+ assignments.push(assignment);
144
142
 
145
143
  statementVerifiedAsEquality = true;
146
144
  }
@@ -167,168 +165,3 @@ function verifyStatementAsEquality(statementNode, assertions, derived, context)
167
165
 
168
166
  return statementVerifiedAsEquality;
169
167
  }
170
-
171
- function verifyNode(node, combinatorNode, context) {
172
- let nodeVerified;
173
-
174
- const nodeTerminalNode = node.isTerminalNode(),
175
- combinatorNodeTerminalNode = combinatorNode.isTerminalNode();
176
-
177
- if (nodeTerminalNode === combinatorNodeTerminalNode) {
178
- if (nodeTerminalNode) {
179
- const terminalNode = node, ///
180
- combinatorTerminalNode = combinatorNode, ///
181
- terminalNodeVerified = verifyTerminalNode(terminalNode, combinatorTerminalNode, context);
182
-
183
- nodeVerified = terminalNodeVerified; ///
184
- } else {
185
- const nonTerminalNode = node, ///
186
- combinatorNonTerminalNode = combinatorNode, ///
187
- nonTerminalNodeVerified = verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, context);
188
-
189
- nodeVerified = nonTerminalNodeVerified; ///
190
- }
191
- }
192
-
193
- return nodeVerified;
194
- }
195
-
196
- function verifyNodes(nodes, combinatorNodes, context) {
197
- let nodesVerified = false;
198
-
199
- const nodesLength = nodes.length,
200
- combinatorNodesLength = combinatorNodes.length;
201
-
202
- if (nodesLength === combinatorNodesLength) {
203
- nodesVerified = nodes.every((node, index) => {
204
- const combinatorNode = combinatorNodes[index],
205
- nodeVerified = verifyNode(node, combinatorNode, context);
206
-
207
- if (nodeVerified) {
208
- return true;
209
- }
210
- });
211
- }
212
-
213
- return nodesVerified;
214
- }
215
-
216
- function verifyTerminalNode(terminalNode, combinatorTerminalNode, context) {
217
- let terminalNodeVerified = false;
218
-
219
- const matches = terminalNode.match(combinatorTerminalNode);
220
-
221
- if (matches) {
222
- terminalNodeVerified = true;
223
- }
224
-
225
- return terminalNodeVerified;
226
- }
227
-
228
- function verifyNonTerminalNode(nonTerminalNode, combinatorNonTerminalNode, context) {
229
- let nonTerminalNodeVerified = false;
230
-
231
- const ruleName = nonTerminalNode.getRuleName(), ///
232
- combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
233
-
234
- if (ruleName === combinatorRuleName) {
235
- switch (ruleName) {
236
- case ARGUMENT_RULE_NAME: {
237
- const argumentNode = nonTerminalNode, ///
238
- combinatorArgumentNode = combinatorNonTerminalNode, ///
239
- argumentNodeVerified = verifyArgumentNode(argumentNode, combinatorArgumentNode, context);
240
-
241
- nonTerminalNodeVerified = argumentNodeVerified; ///
242
-
243
- break;
244
- }
245
-
246
- case META_ARGUMENT_RULE_NAME: {
247
- const metaArgumentNode = nonTerminalNode, ///
248
- combinatorMetaargumentNode = combinatorNonTerminalNode, ///
249
- metaArgumentNodeVerified = verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context);
250
-
251
- nonTerminalNodeVerified = metaArgumentNodeVerified; ///
252
-
253
- break;
254
- }
255
-
256
- default: {
257
- const childNodes = nonTerminalNode.getChildNodes(),
258
- combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(),
259
- nodes = childNodes, ///
260
- combinatorNodes = combinatorChildNodes, ///
261
- nodesVerified = verifyNodes(nodes, combinatorNodes, context);
262
-
263
- nonTerminalNodeVerified = nodesVerified; ///
264
-
265
- break;
266
- }
267
- }
268
- }
269
-
270
- return nonTerminalNodeVerified;
271
- }
272
-
273
- function verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
274
- let argumentNodeVerified = false;
275
-
276
- const termNode = termNodeQuery(argumentNode);
277
-
278
- if (termNode === null) {
279
- const argumentString = context.nodeAsString(argumentNode);
280
-
281
- context.error(`The ${argumentString} argument should be a term, not a type`, argumentNode);
282
- } else {
283
- const types = [],
284
- termVerified = verifyTerm(termNode, types, context);
285
-
286
- if (termVerified) {
287
- const firstType = first(types),
288
- termType = firstType, ///
289
- typeNode = typeNodeQuery(combinatorArgumentNode),
290
- typeName = typeNameFromTypeNode(typeNode),
291
- type = (typeName === OBJECT_TYPE_NAME) ?
292
- objectType : ///
293
- context.findTypeByTypeName(typeName),
294
- statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
295
-
296
- if (statementTypeEqualToOrSubTypeOfType) {
297
- argumentNodeVerified = true;
298
- }
299
- }
300
- }
301
-
302
- return argumentNodeVerified;
303
- }
304
-
305
- function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context) {
306
- let metaArgumentNodeVerified = false;
307
-
308
- const statementNode = statementNodeQuery(metaArgumentNode),
309
- combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
310
-
311
- if (statementNode === null) {
312
- const metaArgumentString = context.nodeAsString(metaArgumentNode);
313
-
314
- context.error(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
315
- } else {
316
- if (combinatorMetaTYpeNode === null) {
317
- const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
318
-
319
- context.error(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
320
- } else {
321
- const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
322
- content = combinatorMetaTypeTerminalNode.getContent(),
323
- contentStatementMetaType = (content === STATEMENT_META_TYPE);
324
-
325
- if (!contentStatementMetaType) {
326
- context.error(`Expected the meta-type to be 'Statement' but got '${content}'.`, metaArgumentNode);
327
- } else {
328
- metaArgumentNodeVerified = true;
329
- }
330
- }
331
- }
332
-
333
- return metaArgumentNodeVerified;
334
- }
@@ -145,8 +145,8 @@ function verifyTermNode(termNode, fileContext) {
145
145
  function verifyStatementNode(statementNode, fileContext) {
146
146
  const context = fileContext, ///
147
147
  derived = false,
148
- assertions = [],
149
- statementVerified = verifyStatement(statementNode, assertions, derived, context),
148
+ assignments = [],
149
+ statementVerified = verifyStatement(statementNode, assignments, derived, context),
150
150
  statementNodeVerified = statementVerified; ///
151
151
 
152
152
  return statementNodeVerified;
@@ -17,9 +17,9 @@ export default function verifySupposition(suppositionNode, suppositions, proofCo
17
17
  proofContext.debug(`Verifying the '${suppositionString}' supposition...`, suppositionNode);
18
18
 
19
19
  const derived = false,
20
- assertions = [],
20
+ assignments = [],
21
21
  unqualifiedStatementNode = unqualifiedStatementNodeQuery(suppositionNode),
22
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assertions, derived, proofContext);
22
+ unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, proofContext);
23
23
 
24
24
  if (unqualifiedStatementVerified) {
25
25
  const statementNode = statementNodeQuery(unqualifiedStatementNode),
@@ -30,8 +30,8 @@ export default function verifySupposition(suppositionNode, suppositions, proofCo
30
30
 
31
31
  proofContext.addProofStep(proofStep);
32
32
 
33
- assertions.every((assertion) => {
34
- assertion.assert(proofContext);
33
+ assignments.every((assignment) => {
34
+ assignment.assign(proofContext);
35
35
  });
36
36
 
37
37
  suppositionVerified = true;
package/lib/assertion.js DELETED
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return Assertion;
9
- }
10
- });
11
- function _classCallCheck(instance, Constructor) {
12
- if (!(instance instanceof Constructor)) {
13
- throw new TypeError("Cannot call a class as a function");
14
- }
15
- }
16
- function _defineProperties(target, props) {
17
- for(var i = 0; i < props.length; i++){
18
- var descriptor = props[i];
19
- descriptor.enumerable = descriptor.enumerable || false;
20
- descriptor.configurable = true;
21
- if ("value" in descriptor) descriptor.writable = true;
22
- Object.defineProperty(target, descriptor.key, descriptor);
23
- }
24
- }
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
30
- var Assertion = /*#__PURE__*/ function() {
31
- function Assertion(variable) {
32
- _classCallCheck(this, Assertion);
33
- this.variable = variable;
34
- }
35
- _createClass(Assertion, [
36
- {
37
- key: "getVariable",
38
- value: function getVariable() {
39
- return this.variable;
40
- }
41
- },
42
- {
43
- key: "assert",
44
- value: function assert(proofContext) {
45
- proofContext.addVariable(this.variable);
46
- }
47
- }
48
- ], [
49
- {
50
- key: "fromVariable",
51
- value: function fromVariable(variable) {
52
- var assertion = new Assertion(variable);
53
- return assertion;
54
- }
55
- }
56
- ]);
57
- return Assertion;
58
- }();
59
-
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3NlcnRpb24uanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKHZhcmlhYmxlKSB7XG4gICAgdGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFibGU7XG4gIH1cblxuICBhc3NlcnQocHJvb2ZDb250ZXh0KSB7XG4gICAgcHJvb2ZDb250ZXh0LmFkZFZhcmlhYmxlKHRoaXMudmFyaWFibGUpO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24odmFyaWFibGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxufVxuIiwiUmVhY3QuY3JlYXRlRWxlbWVudCJdLCJuYW1lcyI6WyJBc3NlcnRpb24iLCJ2YXJpYWJsZSIsImdldFZhcmlhYmxlIiwiYXNzZXJ0IiwicHJvb2ZDb250ZXh0IiwiYWRkVmFyaWFibGUiLCJmcm9tVmFyaWFibGUiLCJhc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBRXFCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLElBQUEsQUFBTUEsMEJBQU47YUFBTUEsVUFDUEMsUUFBUTs4QkFEREQ7UUFFakIsSUFBSSxDQUFDQyxRQUFRLEdBQUdBOztpQkFGQ0Q7O1lBS25CRSxLQUFBQTttQkFBQUEsU0FBQUEsY0FBYztnQkFDWixPQUFPLElBQUksQ0FBQ0QsUUFBUTtZQUN0Qjs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPQyxZQUFZLEVBQUU7Z0JBQ25CQSxhQUFhQyxXQUFXLENBQUMsSUFBSSxDQUFDSixRQUFRO1lBQ3hDOzs7O1lBRU9LLEtBQUFBO21CQUFQLFNBQU9BLGFBQWFMLFFBQVEsRUFBRTtnQkFDNUIsSUFBTU0sWUFBWSxJQWREUCxVQWNlQztnQkFFaEMsT0FBT007WUFDVDs7O1dBakJtQlAifQ==