occam-verify-cli 0.0.700 → 0.0.704

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 (86) hide show
  1. package/lib/assignment/equality.js +2 -2
  2. package/lib/assignment/metavariable.js +2 -2
  3. package/lib/assignment/variable.js +2 -2
  4. package/lib/collection.js +44 -6
  5. package/lib/conclusion.js +6 -6
  6. package/lib/consequent.js +4 -4
  7. package/lib/context/file.js +9 -2
  8. package/lib/context/local.js +27 -64
  9. package/lib/context/localMeta.js +8 -1
  10. package/lib/equality.js +20 -4
  11. package/lib/premise.js +9 -9
  12. package/lib/supposition.js +4 -4
  13. package/lib/utilities/collection.js +27 -13
  14. package/lib/verifier/node/statementAsCombinator.js +7 -17
  15. package/lib/verifier/node/termAsConstructor.js +10 -45
  16. package/lib/verifier/nodes/equality.js +169 -0
  17. package/lib/verifier/nodes/metastatementForMetavariable.js +6 -7
  18. package/lib/verifier/nodes/statement.js +12 -4
  19. package/lib/verifier/nodes/statementForMetavariable.js +6 -7
  20. package/lib/verifier/nodes/termForVariable.js +19 -20
  21. package/lib/verify/consequent.js +3 -3
  22. package/lib/verify/derivation.js +28 -6
  23. package/lib/verify/equality.js +9 -4
  24. package/lib/verify/givenType.js +32 -0
  25. package/lib/verify/metastatement.js +7 -25
  26. package/lib/verify/statement/qualified.js +135 -37
  27. package/lib/verify/statement.js +44 -33
  28. package/lib/verify/supposition.js +13 -8
  29. package/lib/verify/suppositions.js +2 -11
  30. package/lib/verify/term.js +35 -50
  31. package/lib/verify/termAndGivenType.js +39 -0
  32. package/lib/verify/termAsGivenVariable.js +36 -0
  33. package/lib/verify/type.js +28 -4
  34. package/lib/verify/typeAssertion.js +35 -22
  35. package/package.json +1 -1
  36. package/src/assignment/equality.js +2 -2
  37. package/src/assignment/metavariable.js +2 -2
  38. package/src/assignment/variable.js +2 -2
  39. package/src/collection.js +55 -5
  40. package/src/conclusion.js +6 -6
  41. package/src/consequent.js +4 -4
  42. package/src/context/file.js +7 -1
  43. package/src/context/local.js +33 -78
  44. package/src/context/localMeta.js +6 -0
  45. package/src/equality.js +23 -2
  46. package/src/premise.js +10 -10
  47. package/src/supposition.js +3 -3
  48. package/src/utilities/collection.js +31 -11
  49. package/src/verifier/node/statementAsCombinator.js +5 -24
  50. package/src/verifier/node/termAsConstructor.js +6 -47
  51. package/src/verifier/nodes/equality.js +47 -0
  52. package/src/verifier/nodes/metastatementForMetavariable.js +10 -10
  53. package/src/verifier/nodes/statement.js +1 -1
  54. package/src/verifier/nodes/statementForMetavariable.js +10 -10
  55. package/src/verifier/nodes/termForVariable.js +30 -30
  56. package/src/verify/consequent.js +4 -4
  57. package/src/verify/derivation.js +37 -8
  58. package/src/verify/equality.js +12 -3
  59. package/src/verify/{standaloneType.js → givenType.js} +7 -7
  60. package/src/verify/metastatement.js +8 -35
  61. package/src/verify/statement/qualified.js +194 -39
  62. package/src/verify/statement.js +65 -44
  63. package/src/verify/supposition.js +15 -8
  64. package/src/verify/suppositions.js +1 -13
  65. package/src/verify/term.js +42 -58
  66. package/src/verify/termAndGivenType.js +37 -0
  67. package/src/verify/termAsGivenVariable.js +39 -0
  68. package/src/verify/type.js +26 -0
  69. package/src/verify/typeAssertion.js +50 -28
  70. package/lib/verifier/nodes/metastatementForMetavariable/conclusion.js +0 -114
  71. package/lib/verifier/nodes/metastatementForMetavariable/premise.js +0 -114
  72. package/lib/verifier/nodes/statementForMetavariable/conclusion.js +0 -114
  73. package/lib/verifier/nodes/statementForMetavariable/premise.js +0 -114
  74. package/lib/verifier/nodes/termForVariable/consequent.js +0 -114
  75. package/lib/verifier/nodes/termForVariable/supposition.js +0 -114
  76. package/lib/verify/standaloneType.js +0 -32
  77. package/lib/verify/termAndStandaloneType.js +0 -39
  78. package/lib/verify/termAsVariableAndStandaloneType.js +0 -39
  79. package/src/verifier/nodes/metastatementForMetavariable/conclusion.js +0 -11
  80. package/src/verifier/nodes/metastatementForMetavariable/premise.js +0 -11
  81. package/src/verifier/nodes/statementForMetavariable/conclusion.js +0 -11
  82. package/src/verifier/nodes/statementForMetavariable/premise.js +0 -11
  83. package/src/verifier/nodes/termForVariable/consequent.js +0 -11
  84. package/src/verifier/nodes/termForVariable/supposition.js +0 -11
  85. package/src/verify/termAndStandaloneType.js +0 -37
  86. package/src/verify/termAsVariableAndStandaloneType.js +0 -38
@@ -8,7 +8,7 @@ import { METASTATEMENT_RULE_NAME } from "../../ruleNames";
8
8
 
9
9
  const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!');
10
10
 
11
- export default class MetastatementForMetavariableNodesVerifier extends NodesVerifier {
11
+ class MetastatementForMetavariableNodesVerifier extends NodesVerifier {
12
12
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localMetaContextB, verifyAhead) {
13
13
  let nonTerminalNodeVerified = false;
14
14
 
@@ -68,16 +68,12 @@ export default class MetastatementForMetavariableNodesVerifier extends NodesVeri
68
68
 
69
69
  metavariableNodeVerified = metastatementNodeMatches; ///
70
70
  } else {
71
- const { createSubstitutions } = this.constructor;
71
+ const metavariableNode = metavariableNodeA, ///
72
+ metastatementNode = metastatementNodeB, ///
73
+ metastatementForMetavariableSubstitution = MetastatementForMetavariableSubstitution.fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode),
74
+ substitution = metastatementForMetavariableSubstitution; ///
72
75
 
73
- if (createSubstitutions) {
74
- const metavariableNode = metavariableNodeA, ///
75
- metastatementNode = metastatementNodeB, ///
76
- metastatementForMetavariableSubstitution = MetastatementForMetavariableSubstitution.fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode),
77
- substitution = metastatementForMetavariableSubstitution; ///
78
-
79
- substitutions.push(substitution);
80
- }
76
+ substitutions.push(substitution);
81
77
 
82
78
  metavariableNodeVerified = true;
83
79
  }
@@ -85,3 +81,7 @@ export default class MetastatementForMetavariableNodesVerifier extends NodesVeri
85
81
  return metavariableNodeVerified;
86
82
  }
87
83
  }
84
+
85
+ const metastatementForMetavariableNodesVerifier = new MetastatementForMetavariableNodesVerifier();
86
+
87
+ export default metastatementForMetavariableNodesVerifier;
@@ -60,7 +60,7 @@ const statementNodesVerifier = new StatementNodesVerifier();
60
60
 
61
61
  export default statementNodesVerifier;
62
62
 
63
- function verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead) {
63
+ export function verifyMetaargument(metaArgumentNode, combinatorMetaargumentNode, context, verifyAhead) {
64
64
  let metaArgumentVerified = false;
65
65
 
66
66
  const metaArgumentString = context.nodeAsString(metaArgumentNode);
@@ -9,7 +9,7 @@ import { STATEMENT_RULE_NAME, METASTATEMENT_RULE_NAME, META_ARGUMENT_RULE_NAME }
9
9
  const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!'),
10
10
  metaArgumentChildNodeNodeQuery = nodeQuery('/metaArgument/*!');
11
11
 
12
- export default class StatementForMetavariableNodesVerifier extends NodesVerifier {
12
+ class StatementForMetavariableNodesVerifier extends NodesVerifier {
13
13
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, fileContextA, localContext) {
14
14
  let nonTerminalNodeVerified = false;
15
15
 
@@ -84,16 +84,12 @@ export default class StatementForMetavariableNodesVerifier extends NodesVerifier
84
84
 
85
85
  metavariableNodeVerified = statementNodeMatches; ///
86
86
  } else {
87
- const { createSubstitutions } = this.constructor;
87
+ const metavariableNode = metavariableNodeA, ///
88
+ statementNode = statementNodeB, ///
89
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode),
90
+ substitution = statementForMetavariableSubstitution; ///
88
91
 
89
- if (createSubstitutions) {
90
- const metavariableNode = metavariableNodeA, ///
91
- statementNode = statementNodeB, ///
92
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode),
93
- substitution = statementForMetavariableSubstitution; ///
94
-
95
- substitutions.push(substitution);
96
- }
92
+ substitutions.push(substitution);
97
93
 
98
94
  metavariableNodeVerified = true;
99
95
  }
@@ -101,3 +97,7 @@ export default class StatementForMetavariableNodesVerifier extends NodesVerifier
101
97
  return metavariableNodeVerified;
102
98
  }
103
99
  }
100
+
101
+ const statementForMetavariableNodesVerifier = new StatementForMetavariableNodesVerifier();
102
+
103
+ export default statementForMetavariableNodesVerifier;
@@ -10,7 +10,7 @@ import { TERM_RULE_NAME } from "../../ruleNames";
10
10
 
11
11
  const variableNodeQuery = nodeQuery('/term/variable!');
12
12
 
13
- export default class TermForVariableNodesVerifier extends NodesVerifier {
13
+ class TermForVariableNodesVerifier extends NodesVerifier {
14
14
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
15
15
  let nonTerminalNodeVerified = false;
16
16
 
@@ -74,47 +74,47 @@ export default class TermForVariableNodesVerifier extends NodesVerifier {
74
74
  variableVerified = verifiedAhead; ///
75
75
  }
76
76
  } else {
77
- const { createSubstitutions } = this.constructor;
77
+ const variableNode = variableNodeA, ///
78
+ localContext = localContextA, ///
79
+ variable = localContext.findVariableByVariableNode(variableNode);
78
80
 
79
- if (createSubstitutions) {
80
- const variableNode = variableNodeA, ///
81
- localContext = localContextA, ///
82
- variable = localContext.findVariableByVariableNode(variableNode);
81
+ if (variable !== null) {
82
+ const terms = [],
83
+ context = localContextB, ///
84
+ termNode = termNodeB, ///
85
+ termVerified = verifyTerm(termNode, terms, context, () => {
86
+ let verifiedAhead = false;
83
87
 
84
- if (variable !== null) {
85
- const terms = [],
86
- context = localContextB, ///
87
- termNode = termNodeB, ///
88
- termVerified = verifyTerm(termNode, terms, context, () => {
89
- let verifiedAhead = false;
88
+ const firstTerm = first(terms),
89
+ term = firstTerm, ///
90
+ termType = term.getType(),
91
+ variableType = variable.getType(),
92
+ variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
90
93
 
91
- const firstTerm = first(terms),
92
- term = firstTerm, ///
93
- termType = term.getType(),
94
- variableType = variable.getType(),
95
- variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
94
+ if (variableTypeEqualToOrSuperTypeOfTermType) {
95
+ const termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
96
+ substitution = termForVariableSubstitution; ///
96
97
 
97
- if (variableTypeEqualToOrSuperTypeOfTermType) {
98
- const termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
99
- substitution = termForVariableSubstitution; ///
98
+ substitutions.push(substitution);
100
99
 
101
- substitutions.push(substitution);
100
+ verifiedAhead = verifyAhead();
102
101
 
103
- verifiedAhead = verifyAhead();
104
-
105
- if (!verifiedAhead) {
106
- substitutions.pop();
107
- }
102
+ if (!verifiedAhead) {
103
+ substitutions.pop();
108
104
  }
105
+ }
109
106
 
110
- return verifiedAhead;
111
- });
107
+ return verifiedAhead;
108
+ });
112
109
 
113
- variableVerified = termVerified; ///
114
- }
110
+ variableVerified = termVerified; ///
115
111
  }
116
112
  }
117
113
 
118
114
  return variableVerified;
119
115
  }
120
116
  }
117
+
118
+ const termForVariableNodesVerifier = new TermForVariableNodesVerifier();
119
+
120
+ export default termForVariableNodesVerifier;
@@ -21,15 +21,15 @@ export default function verifyConsequent(consequentNode, consequents, localConte
21
21
  unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
22
22
 
23
23
  if (unqualifiedStatementVerified) {
24
+ consequentVerified = true;
25
+ }
26
+
27
+ if (consequentVerified) {
24
28
  const statementNode = statementNodeQuery(unqualifiedStatementNode),
25
29
  consequent = Consequent.fromStatementNode(statementNode);
26
30
 
27
31
  consequents.push(consequent);
28
32
 
29
- consequentVerified = true;
30
- }
31
-
32
- if (consequentVerified) {
33
33
  localContext.debug(`...verified the '${consequentString}' consequent.`, consequentNode);
34
34
  }
35
35
 
@@ -68,14 +68,17 @@ function verifySubproof(subproofNode, localContext) {
68
68
  }
69
69
 
70
70
  function verifyChild(childNode, localContext) {
71
- let childVerified;
71
+ let childVerified = false;
72
72
 
73
73
  const childNodeRuleName = childNode.getRuleName();
74
74
 
75
75
  switch (childNodeRuleName) {
76
76
  case SUBPROOF_RULE_NAME: {
77
- const subproofNode = childNode, ///
78
- subproofVerified = verifySubproof(subproofNode, localContext);
77
+ let subproofVerified;
78
+
79
+ const subproofNode = childNode; ///
80
+
81
+ subproofVerified = verifySubproof(subproofNode, localContext);
79
82
 
80
83
  if (subproofVerified) {
81
84
  const proofStep = ProofStep.fromSubproofNode(subproofNode);
@@ -89,10 +92,23 @@ function verifyChild(childNode, localContext) {
89
92
  }
90
93
 
91
94
  case QUALIFIED_STATEMENT_RULE_NAME: {
95
+ let qualifiedStatementVerified;
96
+
92
97
  const derived = true,
93
98
  assignments = [],
94
- qualifiedStatementNode = childNode, ///
95
- qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, derived, localContext);
99
+ qualifiedStatementNode = childNode; ///
100
+
101
+ qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, derived, localContext);
102
+
103
+ if (qualifiedStatementVerified) {
104
+ qualifiedStatementVerified = assignments.every((assignment) => { ///
105
+ const assigned = assignment.assign(localContext);
106
+
107
+ if (assigned) {
108
+ return true;
109
+ }
110
+ });
111
+ }
96
112
 
97
113
  if (qualifiedStatementVerified) {
98
114
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -100,17 +116,30 @@ function verifyChild(childNode, localContext) {
100
116
 
101
117
  localContext.addProofStep(proofStep);
102
118
 
103
- childVerified = qualifiedStatementVerified; ///
119
+ childVerified = true; ///
104
120
  }
105
121
 
106
122
  break;
107
123
  }
108
124
 
109
125
  case UNQUALIFIED_STATEMENT_RULE_NAME: {
126
+ let unqualifiedStatementVerified;
127
+
110
128
  const derived = true,
111
129
  assignments = [],
112
- unqualifiedStatementNode = childNode, ///
113
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
130
+ unqualifiedStatementNode = childNode; ///
131
+
132
+ unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
133
+
134
+ if (unqualifiedStatementVerified) {
135
+ unqualifiedStatementVerified = assignments.every((assignment) => { ///
136
+ const assigned = assignment.assign(localContext);
137
+
138
+ if (assigned) {
139
+ return true;
140
+ }
141
+ });
142
+ }
114
143
 
115
144
  if (unqualifiedStatementVerified) {
116
145
  const statementNode = statementNodeQuery(unqualifiedStatementNode),
@@ -59,13 +59,22 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
59
59
  secondTerm = second(terms),
60
60
  leftTerm = firstTerm, ///
61
61
  rightTerm = secondTerm, ///
62
- equality = Equality.fromEqualityNodeLeftTermAndRightTerm(equalityNode, leftTerm, rightTerm);
62
+ equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
63
63
 
64
64
  if (equality !== null) {
65
- const equalityEqual = context.isEqualityEqual(equality);
65
+ const equalityEqual = equality.isEqual(context);
66
66
 
67
67
  if (equalityEqual) {
68
+ const equalityAssignment = EqualityAssignment.fromEquality(equality),
69
+ assignment = equalityAssignment; ///
70
+
71
+ assignments.push(assignment);
72
+
68
73
  verifiedAhead = verifyAhead();
74
+
75
+ if (!verifiedAhead) {
76
+ assignments.pop();
77
+ }
69
78
  }
70
79
  }
71
80
 
@@ -104,7 +113,7 @@ function verifyGivenEquality(equalityNode, assignments, derived, context, verify
104
113
  secondTerm = second(terms),
105
114
  leftTerm = firstTerm, ///
106
115
  rightTerm = secondTerm, ///
107
- equality = Equality.fromEqualityNodeLeftTermAndRightTerm(equalityNode, leftTerm, rightTerm);
116
+ equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
108
117
 
109
118
  if (equality !== null) {
110
119
  const equalityAssignment = EqualityAssignment.fromEquality(equality),
@@ -2,12 +2,12 @@
2
2
 
3
3
  import { typeNameFromTypeNode } from "../utilities/query";
4
4
 
5
- export default function verifyStandaloneType(typeNode, types, context, verifyAhead) {
6
- let standaloneTypeVerified = false;
5
+ export default function verifyGivenType(typeNode, types, context, verifyAhead) {
6
+ let givenTypeVerified = false;
7
7
 
8
8
  const typeString = context.nodeAsString(typeNode);
9
9
 
10
- context.trace(`Verifying the standalone '${typeString}' type...`, typeNode);
10
+ context.trace(`Verifying the given '${typeString}' type...`, typeNode);
11
11
 
12
12
  const typeName = typeNameFromTypeNode(typeNode),
13
13
  type = context.findTypeByTypeName(typeName);
@@ -23,12 +23,12 @@ export default function verifyStandaloneType(typeNode, types, context, verifyAhe
23
23
  types.pop();
24
24
  }
25
25
 
26
- standaloneTypeVerified = verifiedAhead; ///
26
+ givenTypeVerified = verifiedAhead; ///
27
27
  }
28
28
 
29
- if (standaloneTypeVerified) {
30
- context.debug(`...verified the standalone '${typeString}' type.`, typeNode);
29
+ if (givenTypeVerified) {
30
+ context.debug(`...verified the given '${typeString}' type.`, typeNode);
31
31
  }
32
32
 
33
- return standaloneTypeVerified;
33
+ return givenTypeVerified;
34
34
  }
@@ -9,17 +9,14 @@ function verifyMetastatement(metastatementNode, derived, localMetaContext) {
9
9
 
10
10
  localMetaContext.trace(`Verifying the '${metastatementString}' metastatement...`, metastatementNode);
11
11
 
12
- const verifyMetastatementFunctions = [
13
- verifyStandaloneMetastatement
14
- ];
12
+ const nonTerminalNode = metastatementNode, ///
13
+ nonTerminalNodeVerified = metastatementNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localMetaContext, () => {
14
+ const verifiedAhead = true;
15
15
 
16
- metastatementVerified = verifyMetastatementFunctions.some((verifyMetastatementFunction) => {
17
- const metastatementVerified = verifyMetastatementFunction(metastatementNode, derived, localMetaContext);
16
+ return verifiedAhead;
17
+ });
18
18
 
19
- if (metastatementVerified) {
20
- return true;
21
- }
22
- });
19
+ metastatementVerified = nonTerminalNodeVerified; ///
23
20
 
24
21
  if (metastatementVerified) {
25
22
  localMetaContext.debug(`...verified the '${metastatementString}' metastatement.`, metastatementNode);
@@ -28,32 +25,8 @@ function verifyMetastatement(metastatementNode, derived, localMetaContext) {
28
25
  return metastatementVerified;
29
26
  }
30
27
 
31
- Object.assign(verifyMetastatement, {
32
- metastatementNodeVerifier
28
+ Object.assign(metastatementNodeVerifier, {
29
+ verifyMetastatement
33
30
  });
34
31
 
35
32
  export default verifyMetastatement;
36
-
37
- function verifyStandaloneMetastatement(metastatementNode, derived, localMetaContext) {
38
- let standaloneMetastatementVerified;
39
-
40
- const metastatementString = localMetaContext.nodeAsString(metastatementNode);
41
-
42
- localMetaContext.trace(`Verifying the '${metastatementString}' standalone metastatement...`, metastatementNode);
43
-
44
- const nonTerminalNode = metastatementNode, ///
45
- nonTerminalNodeVerified = metastatementNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localMetaContext, () => {
46
- const verifiedAhead = true;
47
-
48
- return verifiedAhead;
49
- });
50
-
51
- standaloneMetastatementVerified = nonTerminalNodeVerified; ///
52
-
53
- if (standaloneMetastatementVerified) {
54
- localMetaContext.debug(`...verified the '${metastatementString}' standalone metastatement.`, metastatementNode);
55
- }
56
-
57
- return standaloneMetastatementVerified;
58
-
59
- }