occam-verify-cli 0.0.1003 → 0.0.1006

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 (183) hide show
  1. package/README.md +0 -2
  2. package/bin/abbreviations.js +1 -3
  3. package/bin/action/help.js +0 -2
  4. package/bin/action/verify.js +4 -24
  5. package/bin/defaults.js +0 -2
  6. package/bin/main.js +3 -4
  7. package/bin/options.js +0 -2
  8. package/bin/utilities/releaseContext.js +9 -2
  9. package/lib/assertion/subproof.js +106 -0
  10. package/lib/assignment/metavariable.js +2 -2
  11. package/lib/combinator.js +50 -16
  12. package/lib/conclusion.js +74 -14
  13. package/lib/context/file.js +191 -31
  14. package/lib/context/local.js +37 -49
  15. package/lib/context/release.js +25 -81
  16. package/lib/declaration/combinator.js +83 -0
  17. package/lib/derivation.js +86 -0
  18. package/lib/equality.js +3 -11
  19. package/lib/index.js +1 -1
  20. package/lib/judgement.js +3 -10
  21. package/lib/label.js +58 -16
  22. package/lib/log.js +3 -11
  23. package/lib/metaType.js +31 -19
  24. package/lib/metavariable.js +39 -12
  25. package/lib/mixins/statement/qualified/unify.js +118 -0
  26. package/lib/mixins/statement/unify.js +57 -0
  27. package/lib/mixins/statement/verify.js +184 -0
  28. package/lib/node/statement/combinator/bracketed.js +15 -11
  29. package/lib/ocmbinator/bracketed.js +52 -8
  30. package/lib/premise.js +109 -55
  31. package/lib/proof.js +91 -0
  32. package/lib/proofStep.js +78 -25
  33. package/lib/reference.js +62 -16
  34. package/lib/rule.js +146 -26
  35. package/lib/ruleNames.js +5 -5
  36. package/lib/statement/qualified.js +127 -0
  37. package/lib/statement/unqualified.js +89 -0
  38. package/lib/statement.js +176 -0
  39. package/lib/subDerivation.js +86 -0
  40. package/lib/subproof.js +155 -0
  41. package/lib/substitution/frameForMetavariable.js +14 -15
  42. package/lib/substitution/statementForMetavariable.js +23 -24
  43. package/lib/substitution/termForVariable.js +11 -12
  44. package/lib/substitution.js +9 -2
  45. package/lib/substitutions.js +14 -14
  46. package/lib/supposition.js +92 -61
  47. package/lib/unifier/statementWithCombinator.js +3 -3
  48. package/lib/unify/metavariableWithFrame.js +2 -2
  49. package/lib/unify/metavariableWithStatement.js +2 -2
  50. package/lib/unify/metavariableWithStatementGivenSubstitution.js +2 -2
  51. package/lib/unify/variableWithTerm.js +2 -2
  52. package/lib/utilities/node.js +13 -11
  53. package/lib/utilities/releaseContext.js +5 -6
  54. package/lib/utilities/string.js +8 -2
  55. package/lib/utilities/subproof.js +5 -5
  56. package/lib/utilities/tokens.js +10 -10
  57. package/lib/variable.js +1 -10
  58. package/lib/verifier/metaLevel.js +2 -2
  59. package/lib/verifier/topLevel.js +5 -5
  60. package/lib/verify/axiom.js +3 -5
  61. package/lib/verify/conjecture.js +4 -7
  62. package/lib/verify/consequent.js +2 -3
  63. package/lib/verify/declaration/combinator.js +2 -14
  64. package/lib/verify/declaration/metavariable.js +9 -10
  65. package/lib/verify/files.js +4 -4
  66. package/lib/verify/frame.js +12 -12
  67. package/lib/verify/lemma.js +4 -7
  68. package/lib/verify/metaLemma.js +4 -7
  69. package/lib/verify/metatheorem.js +4 -7
  70. package/lib/verify/proofStep.js +2 -31
  71. package/lib/verify/theorem.js +4 -7
  72. package/package.json +1 -1
  73. package/src/assertion/subproof.js +84 -0
  74. package/src/assignment/metavariable.js +2 -2
  75. package/src/combinator.js +45 -15
  76. package/src/conclusion.js +85 -13
  77. package/src/context/file.js +223 -11
  78. package/src/context/local.js +12 -16
  79. package/src/context/release.js +31 -100
  80. package/src/declaration/combinator.js +44 -0
  81. package/src/derivation.js +50 -0
  82. package/src/equality.js +2 -9
  83. package/src/index.js +0 -1
  84. package/src/judgement.js +2 -8
  85. package/src/label.js +56 -13
  86. package/src/log.js +2 -9
  87. package/src/metaType.js +26 -14
  88. package/src/metavariable.js +57 -9
  89. package/src/mixins/statement/qualified/unify.js +186 -0
  90. package/src/mixins/statement/unify.js +70 -0
  91. package/src/mixins/statement/verify.js +274 -0
  92. package/src/node/statement/combinator/bracketed.js +4 -3
  93. package/src/ocmbinator/bracketed.js +15 -12
  94. package/src/premise.js +138 -44
  95. package/src/proof.js +58 -0
  96. package/src/proofStep.js +92 -22
  97. package/src/reference.js +58 -12
  98. package/src/rule.js +199 -30
  99. package/src/ruleNames.js +1 -1
  100. package/src/statement/qualified.js +104 -0
  101. package/src/statement/unqualified.js +60 -0
  102. package/src/statement.js +179 -0
  103. package/src/subDerivation.js +52 -0
  104. package/src/subproof.js +99 -0
  105. package/src/substitution/frameForMetavariable.js +20 -17
  106. package/src/substitution/statementForMetavariable.js +31 -29
  107. package/src/substitution/termForVariable.js +15 -14
  108. package/src/substitution.js +8 -0
  109. package/src/substitutions.js +12 -13
  110. package/src/supposition.js +96 -51
  111. package/src/unifier/statementWithCombinator.js +6 -3
  112. package/src/unify/metavariableWithFrame.js +1 -1
  113. package/src/unify/metavariableWithStatement.js +1 -1
  114. package/src/unify/metavariableWithStatementGivenSubstitution.js +1 -1
  115. package/src/unify/variableWithTerm.js +1 -1
  116. package/src/utilities/node.js +18 -12
  117. package/src/utilities/releaseContext.js +5 -8
  118. package/src/utilities/string.js +6 -2
  119. package/src/utilities/subproof.js +2 -2
  120. package/src/utilities/tokens.js +7 -7
  121. package/src/variable.js +0 -10
  122. package/src/verifier/metaLevel.js +3 -2
  123. package/src/verifier/topLevel.js +6 -4
  124. package/src/verify/axiom.js +1 -2
  125. package/src/verify/conjecture.js +2 -3
  126. package/src/verify/consequent.js +1 -1
  127. package/src/verify/declaration/combinator.js +0 -20
  128. package/src/verify/declaration/metavariable.js +8 -12
  129. package/src/verify/files.js +3 -3
  130. package/src/verify/frame.js +11 -11
  131. package/src/verify/lemma.js +2 -3
  132. package/src/verify/metaLemma.js +2 -3
  133. package/src/verify/metatheorem.js +2 -3
  134. package/src/verify/proofStep.js +0 -41
  135. package/src/verify/theorem.js +2 -3
  136. package/lib/tokens/combinatorStatement/bracketed.js +0 -17
  137. package/lib/unify/premiseWithProofStep.js +0 -41
  138. package/lib/unify/premisesWithProofSteps.js +0 -31
  139. package/lib/unify/qualifiedStatement.js +0 -136
  140. package/lib/unify/statementWithBracketedCombinator.js +0 -30
  141. package/lib/unify/statementWithCombinator.js +0 -29
  142. package/lib/unify/statementWithCombinators.js +0 -31
  143. package/lib/unify/statementWithMetaType.js +0 -24
  144. package/lib/verify/conclusion.js +0 -39
  145. package/lib/verify/derivation.js +0 -31
  146. package/lib/verify/label.js +0 -37
  147. package/lib/verify/labels.js +0 -28
  148. package/lib/verify/premise.js +0 -45
  149. package/lib/verify/premises.js +0 -28
  150. package/lib/verify/proof.js +0 -34
  151. package/lib/verify/rule.js +0 -56
  152. package/lib/verify/statement/qualified.js +0 -41
  153. package/lib/verify/statement/unqualified.js +0 -45
  154. package/lib/verify/statement.js +0 -219
  155. package/lib/verify/statementAsCombinator.js +0 -33
  156. package/lib/verify/statementGivenMetaType.js +0 -52
  157. package/lib/verify/subproof.js +0 -34
  158. package/lib/verify/supposition.js +0 -45
  159. package/lib/verify/suppositions.js +0 -28
  160. package/src/tokens/combinatorStatement/bracketed.js +0 -10
  161. package/src/unify/premiseWithProofStep.js +0 -54
  162. package/src/unify/premisesWithProofSteps.js +0 -23
  163. package/src/unify/qualifiedStatement.js +0 -208
  164. package/src/unify/statementWithBracketedCombinator.js +0 -22
  165. package/src/unify/statementWithCombinator.js +0 -22
  166. package/src/unify/statementWithCombinators.js +0 -23
  167. package/src/unify/statementWithMetaType.js +0 -14
  168. package/src/verify/conclusion.js +0 -40
  169. package/src/verify/derivation.js +0 -23
  170. package/src/verify/label.js +0 -34
  171. package/src/verify/labels.js +0 -17
  172. package/src/verify/premise.js +0 -49
  173. package/src/verify/premises.js +0 -17
  174. package/src/verify/proof.js +0 -31
  175. package/src/verify/rule.js +0 -71
  176. package/src/verify/statement/qualified.js +0 -40
  177. package/src/verify/statement/unqualified.js +0 -49
  178. package/src/verify/statement.js +0 -312
  179. package/src/verify/statementAsCombinator.js +0 -27
  180. package/src/verify/statementGivenMetaType.js +0 -52
  181. package/src/verify/subproof.js +0 -32
  182. package/src/verify/supposition.js +0 -49
  183. package/src/verify/suppositions.js +0 -17
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ import Supposition from "./supposition";
4
+ import LocalContext from "./context/local";
5
+ import SubDerivation from "./subDerivation";
6
+
7
+ import { nodeQuery, nodesQuery } from "./utilities/query";
8
+ import {subproofNodeAsSubproofString, subproofStringFromSubproofNode} from "./utilities/subproof";
9
+
10
+ const suppositionNodesQuery = nodesQuery("/subproof/supposition"),
11
+ subDerivationNodeQuery = nodeQuery("/subproof/subDerivation");
12
+
13
+ export default class Subproof {
14
+ constructor(string, suppositions, subDerivation) {
15
+ this.string = string;
16
+ this.suppositions = suppositions;
17
+ this.subDerivation = subDerivation;
18
+ }
19
+
20
+ getString() {
21
+ return this.string;
22
+ }
23
+
24
+ getNode() {
25
+ return this.node;
26
+ }
27
+
28
+ getSuppositions() {
29
+ return this.suppositions;
30
+ }
31
+
32
+ getSubDerivation() {
33
+ return this.subDerivation;
34
+ }
35
+
36
+ getLastProofStep() { return this.subDerivation.getLastProofStep(); }
37
+
38
+ getStatements() {
39
+ const lastProofStep = this.getLastProofStep(),
40
+ suppositionStatements = this.suppositions.map((supposition) => {
41
+ const suppositionStatement = supposition.getStatement();
42
+
43
+ return suppositionStatement;
44
+ }),
45
+ lastProofStepStatement = lastProofStep.getStatement(),
46
+ statements = [
47
+ ...suppositionStatements,
48
+ lastProofStepStatement
49
+ ];
50
+
51
+ return statements;
52
+ }
53
+
54
+
55
+ verify(substitutions, localContext) {
56
+ let subproofVerified = false;
57
+
58
+ localContext = LocalContext.fromLocalContext(localContext); ///
59
+
60
+ const suppositionsVerified = this.suppositions.every((supposition) => {
61
+ const suppositionVerified = supposition.verify(localContext);
62
+
63
+ if (suppositionVerified) {
64
+ return true;
65
+ }
66
+ });
67
+
68
+ if (suppositionsVerified) {
69
+ const subDerivationVerified = this.subDerivation.verify(substitutions, localContext);
70
+
71
+ if (subDerivationVerified) {
72
+ subproofVerified = true;
73
+ }
74
+ }
75
+
76
+ return subproofVerified;
77
+ }
78
+
79
+ static fromSubproofNode(subproofNode, fileContext) {
80
+ let subproof = null;
81
+
82
+ if (subproofNode !== null) {
83
+ const subproofString = subproofStringFromSubproofNode(subproofNode, fileContext),
84
+ suppositionNodes = suppositionNodesQuery(subproofNode),
85
+ subDerivationNode = subDerivationNodeQuery(subproofNode),
86
+ string = subproofString, ///
87
+ suppositions = suppositionNodes.map((suppositionNode) => {
88
+ const supposition = Supposition.fromSuppositionNode(suppositionNode, fileContext);
89
+
90
+ return supposition;
91
+ }),
92
+ subDerivation = SubDerivation.fromSubDerivationNode(subDerivationNode, fileContext);
93
+
94
+ subproof = new Subproof(string, suppositions, subDerivation);
95
+ }
96
+
97
+ return subproof;
98
+ }
99
+ }
@@ -9,8 +9,8 @@ const substitutionFrameNodeQuery = nodeQuery("/substitution/frame!"),
9
9
  substitutionMetavariableNodeQuery = nodeQuery("/substitution/metavariable!");
10
10
 
11
11
  export default class FrameForMetavariableSubstitution extends Substitution {
12
- constructor(frameNode, metavariableNode) {
13
- super();
12
+ constructor(string, frameNode, metavariableNode) {
13
+ super(string);
14
14
 
15
15
  this.frameNode = frameNode;
16
16
  this.metavariableNode = metavariableNode;
@@ -69,17 +69,7 @@ export default class FrameForMetavariableSubstitution extends Substitution {
69
69
  return metavariableNodeMatches;
70
70
  }
71
71
 
72
- asString(localContextA, localContextB) {
73
- const frameNodeB = this.frameNode, ///
74
- frameStringB = localContextB.nodeAsString(frameNodeB),
75
- metavariableNodeA = this.metavariableNode, ///
76
- metavariableStringA = localContextA.nodeAsString(metavariableNodeA),
77
- string = `[${frameStringB} for ${metavariableStringA}]`;
78
-
79
- return string;
80
- }
81
-
82
- static fromSubstitutionNode(substitutionNode) {
72
+ static fromSubstitutionNode(substitutionNode, localContextA, localContextB) {
83
73
  let frameForMetavariableSubstitution = null;
84
74
 
85
75
  const substitutionFrameNode = substitutionFrameNodeQuery(substitutionNode);
@@ -87,16 +77,18 @@ export default class FrameForMetavariableSubstitution extends Substitution {
87
77
  if (substitutionFrameNode !== null) {
88
78
  const substitutionMetavariableNode = substitutionMetavariableNodeQuery(substitutionNode),
89
79
  metavariableNode = substitutionMetavariableNode, ///
90
- frameNode = substitutionFrameNode; ///
80
+ frameNode = substitutionFrameNode, ///
81
+ string = stringFromFrameNodeAndMetavariableNode(frameNode, metavariableNode, localContextA, localContextB);
91
82
 
92
- frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(frameNode, metavariableNode);
83
+ frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode);
93
84
  }
94
85
 
95
86
  return frameForMetavariableSubstitution;
96
87
  }
97
88
 
98
- static fromFrameNodeAndMetavariableNode(frameNode, metavariableNode) {
99
- const frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(frameNode, metavariableNode);
89
+ static fromFrameNodeAndMetavariableNode(frameNode, metavariableNode, localContextA, localContextB) {
90
+ const string = stringFromFrameNodeAndMetavariableNode(frameNode, metavariableNode, localContextA, localContextB),
91
+ frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode);
100
92
 
101
93
  return frameForMetavariableSubstitution;
102
94
  }
@@ -146,3 +138,14 @@ function transformMetavariableNode(metavariableNode, substitutions) {
146
138
 
147
139
  return transformedMetavariableNode;
148
140
  }
141
+
142
+ function stringFromFrameNodeAndMetavariableNode(frameNode, metavariableNode, localContextA, localContextB) {
143
+ const frameNodeB = frameNode, ///
144
+ frameStringB = localContextB.nodeAsString(frameNodeB),
145
+ metavariableNodeA = metavariableNode, ///
146
+ metavariableStringA = localContextA.nodeAsString(metavariableNodeA),
147
+ string = `[${frameStringB} for ${metavariableStringA}]`;
148
+
149
+ return string;
150
+ }
151
+
@@ -7,8 +7,8 @@ import FrameForMetavariableSubstitution from "../substitution/frameForMetavariab
7
7
  import { stripBracketsFromStatement } from "../utilities/brackets";
8
8
 
9
9
  export default class StatementForMetavariableSubstitution extends Substitution {
10
- constructor(statementNode, metavariableNode, substitution) {
11
- super();
10
+ constructor(string, statementNode, metavariableNode, substitution) {
11
+ super(string);
12
12
 
13
13
  this.statementNode = statementNode;
14
14
  this.metavariableNode = metavariableNode;
@@ -53,49 +53,32 @@ export default class StatementForMetavariableSubstitution extends Substitution {
53
53
  return metavariableNodeMatches;
54
54
  }
55
55
 
56
- asString(localContextA, localContextB) {
57
- let string;
58
-
59
- const statementNodeB = this.statementNode, ///
60
- statementStringB = localContextB.nodeAsString(statementNodeB),
61
- metavariableNodeA = this.metavariableNode, ///
62
- metavariableStringA = localContextA.nodeAsString(metavariableNodeA);
63
-
64
- if (this.substitution === null) {
65
- string = `[${statementStringB} for ${metavariableStringA}]`;
66
- } else {
67
- const substitutionString = this.substitution.asString(localContextA, localContextA);
68
-
69
- string = `[${statementStringB} for ${metavariableStringA}${substitutionString}]`;
70
- }
71
-
72
- return string;
73
- }
74
-
75
- static fromStatementNodeAndMetavariableNode(statementNode, metavariableNode) {
56
+ static fromStatementNodeAndMetavariableNode(statementNode, metavariableNode, localContextA, localContextB) {
76
57
  statementNode = stripBracketsFromStatement(statementNode); ///
77
58
 
78
59
  const substitution = null,
79
- statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(statementNode, metavariableNode, substitution);
60
+ string = stringFromStatementNodeMetavariableNodeAndSubstitution(statementNode, metavariableNode, substitution, localContextA, localContextB),
61
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statementNode, metavariableNode, substitution);
80
62
 
81
63
  return statementForMetavariableSubstitution;
82
64
  }
83
65
 
84
- static fromStatementNodeMetavariableNodeAndSubstitutionNode(statementNode, metavariableNode, substitutionNode) {
66
+ static fromStatementNodeMetavariableNodeAndSubstitutionNode(statementNode, metavariableNode, substitutionNode, localContextA, localContextB) {
85
67
  statementNode = stripBracketsFromStatement(statementNode); ///
86
68
 
87
- const substitution = substitutionFromSubstitutionNode(substitutionNode),
88
- statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(statementNode, metavariableNode, substitution);
69
+ const substitution = substitutionFromSubstitutionNode(substitutionNode, localContextA, localContextB),
70
+ string = stringFromStatementNodeMetavariableNodeAndSubstitution(statementNode, metavariableNode, substitution, localContextA, localContextB),
71
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statementNode, metavariableNode, substitution);
89
72
 
90
73
  return statementForMetavariableSubstitution;
91
74
  }
92
75
  }
93
76
 
94
- function substitutionFromSubstitutionNode(substitutionNode) {
77
+ function substitutionFromSubstitutionNode(substitutionNode, localContextA, localContextB) {
95
78
  let substitution = null;
96
79
 
97
80
  if (substitution === null) {
98
- const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionNode(substitutionNode);
81
+ const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionNode(substitutionNode, localContextA, localContextB);
99
82
 
100
83
  if (termForVariableSubstitution !== null) {
101
84
  substitution = termForVariableSubstitution; ///
@@ -103,7 +86,7 @@ function substitutionFromSubstitutionNode(substitutionNode) {
103
86
  }
104
87
 
105
88
  if (substitution === null) {
106
- const frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromSubstitutionNode(substitutionNode);
89
+ const frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromSubstitutionNode(substitutionNode, localContextA, localContextB);
107
90
 
108
91
  if (frameForMetavariableSubstitution !== null) {
109
92
  substitution = frameForMetavariableSubstitution; ///
@@ -112,3 +95,22 @@ function substitutionFromSubstitutionNode(substitutionNode) {
112
95
 
113
96
  return substitution;
114
97
  }
98
+
99
+ function stringFromStatementNodeMetavariableNodeAndSubstitution(statementNode, metavariableNode, substitution, localContextA, localContextB) {
100
+ let string;
101
+
102
+ const statementNodeB = statementNode, ///
103
+ statementStringB = localContextB.nodeAsString(statementNodeB),
104
+ metavariableNodeA = metavariableNode, ///
105
+ metavariableStringA = localContextA.nodeAsString(metavariableNodeA);
106
+
107
+ if (substitution === null) {
108
+ string = `[${statementStringB} for ${metavariableStringA}]`;
109
+ } else {
110
+ const substitutionString = substitution.asString(localContextA, localContextA);
111
+
112
+ string = `[${statementStringB} for ${metavariableStringA}${substitutionString}]`;
113
+ }
114
+
115
+ return string;
116
+ }
@@ -10,8 +10,8 @@ const termVariableNodeQuery = nodeQuery("/term/variable!"),
10
10
  substitutionsVariableNodeQuery = nodeQuery("/substitution/variable!");
11
11
 
12
12
  export default class TermForVariableSubstitution extends Substitution {
13
- constructor(termNode, variableNode) {
14
- super();
13
+ constructor(string, termNode, variableNode) {
14
+ super(string);
15
15
 
16
16
  this.termNode = termNode;
17
17
  this.variableNode = variableNode;
@@ -88,16 +88,6 @@ export default class TermForVariableSubstitution extends Substitution {
88
88
  return unifiedWithEquivalence;
89
89
  }
90
90
 
91
- asString(localContextA, localContextB) {
92
- const termNodeB = this.termNode, ///
93
- termStringB = localContextB.nodeAsString(termNodeB),
94
- variableNodeA = this.variableNode, ///
95
- variableStringA = localContextA.nodeAsString(variableNodeA),
96
- string = `[${termStringB} for ${variableStringA}]`;
97
-
98
- return string;
99
- }
100
-
101
91
  static fromSubstitutionNode(substitutionNode) {
102
92
  let termForVariableSubstitution = null;
103
93
 
@@ -117,10 +107,11 @@ export default class TermForVariableSubstitution extends Substitution {
117
107
  return termForVariableSubstitution;
118
108
  }
119
109
 
120
- static fromTernNodeAndVariableNode(termNode, variableNode) {
110
+ static fromTernNodeAndVariableNode(termNode, variableNode, localContextA, localContextB) {
121
111
  termNode = stripBracketsFromTerm(termNode); ///
122
112
 
123
- const termForVariableSubstitution = new TermForVariableSubstitution(termNode, variableNode);
113
+ const string = stringFromTermNodeAndVariableNode(termNode, variableNode, localContextA, localContextB),
114
+ termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode);
124
115
 
125
116
  return termForVariableSubstitution;
126
117
  }
@@ -170,3 +161,13 @@ function transformVariableNode(variableNode, substitutions) {
170
161
 
171
162
  return transformedVariableNode;
172
163
  }
164
+
165
+ function stringFromTermNodeAndVariableNode(termNode, variableNode, localContextA, localContextB) {
166
+ const termNodeB = termNode, ///
167
+ termStringB = localContextB.nodeAsString(termNodeB),
168
+ variableNodeA = variableNode, ///
169
+ variableStringA = localContextA.nodeAsString(variableNodeA),
170
+ string = `[${termStringB} for ${variableStringA}]`;
171
+
172
+ return string;
173
+ }
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  export default class Substitution {
4
+ constructor(string) {
5
+ this.string = string;
6
+ }
7
+
8
+ getString() {
9
+ return this.string;
10
+ }
11
+
4
12
  isSimple() {
5
13
  const simple = true;
6
14
 
@@ -177,16 +177,15 @@ export default class Substitutions {
177
177
  return complexSubstitution;
178
178
  }
179
179
 
180
- addSubstitution(substitution, localContextA, localContextB) {
180
+ addSubstitution(substitution, localContext) {
181
181
  this.array.push(substitution);
182
182
 
183
- const substitutionNode = substitution.getNode(),
184
- substitutionString = substitution.asString(localContextA, localContextB);
183
+ const substitutionString = substitution.getString();
185
184
 
186
- localContextB.trace(`Added the ${substitutionString} substitution.`, substitutionNode);
185
+ localContext.trace(`Added the ${substitutionString} substitution.`);
187
186
  }
188
187
 
189
- removeSubstitution(substitution, localContextA, localContextB) {
188
+ removeSubstitution(substitution, localContext) {
190
189
  const substitutionA = substitution; ///
191
190
 
192
191
  prune(this.array, (substitution) => {
@@ -198,15 +197,15 @@ export default class Substitutions {
198
197
  });
199
198
 
200
199
  const substitutionNode = substitution.getNode(),
201
- substitutionString = substitution.asString(localContextA, localContextB);
200
+ substitutionString = substitution.getString();
202
201
 
203
- localContextB.trace(`Removed the ${substitutionString} substitution.`, substitutionNode);
202
+ localContext.trace(`Removed the ${substitutionString} substitution.`, substitutionNode);
204
203
  }
205
204
 
206
- unifyWithEquivalences(equivalences, localContextA, localContextB) {
205
+ unifyWithEquivalences(equivalences, localContext) {
207
206
  const unifiedWithEquivalences = this.everySubstitution((substitution) => {
208
207
  const substitutions = this, ///
209
- substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, localContextA, localContextB);
208
+ substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, localContext);
210
209
 
211
210
  if (substitutionUnifiedWithEquivalence) {
212
211
  return true;
@@ -232,7 +231,7 @@ export default class Substitutions {
232
231
  ];
233
232
  }
234
233
 
235
- rollback(localContextA, localContextB) {
234
+ rollback(localContext) {
236
235
  const array = [
237
236
  ...this.array
238
237
  ];
@@ -240,7 +239,7 @@ export default class Substitutions {
240
239
  rightDifference(this.savedArray, array);
241
240
 
242
241
  array.forEach((substitution) => {
243
- this.removeSubstitution(substitution, localContextA, localContextB);
242
+ this.removeSubstitution(substitution, localContext);
244
243
  });
245
244
 
246
245
  this.array = [
@@ -254,9 +253,9 @@ export default class Substitutions {
254
253
  this.savedArray = null;
255
254
  }
256
255
 
257
- asString(localContextA, localContextB) {
256
+ getString(localContextA, localContextB) {
258
257
  let string = this.array.reduce((string, substitution) => {
259
- const substitutionString = substitution.asString(localContextA, localContextB);
258
+ const substitutionString = substitution.getString(localContextA, localContextB);
260
259
 
261
260
  string = (string === null) ?
262
261
  substitutionString :
@@ -1,72 +1,117 @@
1
1
  "use strict";
2
2
 
3
- import metaLevelUnifier from "./unifier/metaLevel";
3
+ import ProofStep from "./proofStep";
4
+ import UnqualifiedStatement from "./statement/unqualified";
4
5
 
5
- import { match } from "./utilities/array";
6
- import { nodeAsString } from "./utilities/string";
7
- import { nodeQuery, nodesQuery } from "./utilities/query";
6
+ import { trim } from "./utilities/string";
7
+ import { nodeQuery } from "./utilities/query";
8
+ import { assignAssignments } from "./utilities/assignments";
8
9
 
9
- const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
10
- subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
11
- subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement/statement!"),
12
- subproofLastProofStepStatementNodeQuery = nodeQuery("/subproof/subDerivation/lastProofStep/unqualifiedStatement|qualifiedStatement/statement!");
10
+ const unqualifiedStatementNodeQuery = nodeQuery("/supposition/unqualifiedStatement");
13
11
 
14
12
  export default class Supposition {
15
- constructor(statementNode) {
16
- this.statementNode = statementNode;
13
+ constructor(fileContext, unqualifiedStatement) {
14
+ this.fileContext = fileContext;
15
+ this.unqualifiedStatement = unqualifiedStatement;
17
16
  }
18
17
 
19
- getStatementNode() {
20
- return this.statementNode;
18
+ getFileContext() {
19
+ return this.fileContext;
21
20
  }
22
21
 
23
- unifyStatement(statementNodeB, substitutions, localContextA, localContextB) {
24
- let statementUnified = false;
22
+ getUnqualifiedStatement() {
23
+ return this.unqualifiedStatement;
24
+ }
25
25
 
26
- if (this.statementNode !== null) {
27
- const nodeA = this.statementNode, ///
28
- nodeB = statementNodeB, ///
29
- unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
26
+ getString() { return this.unqualifiedStatement.getString(); }
27
+
28
+ getStatement() { return this.unqualifiedStatement.getStatement(); }
29
+
30
+ // unifyStatement(statementNodeB, substitutions, localContextA, localContextB) {
31
+ // let statementUnified = false;
32
+ //
33
+ // if (this.statementNode !== null) {
34
+ // const nodeA = this.statementNode, ///
35
+ // nodeB = statementNodeB, ///
36
+ // unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
37
+ //
38
+ // statementUnified = unified; ///
39
+ // }
40
+ //
41
+ // return statementUnified;
42
+ // }
43
+
44
+ // unifySubproof(subproofNodeB, substitutions, localContextA, localContextB) {
45
+ // let subproofUnified = false;
46
+ //
47
+ // if (this.statementNode !== null) {
48
+ // const statementNodeA = this.statementNode,
49
+ // subproofAssertionNodeA = subproofAssertionNodeQuery(statementNodeA); ///
50
+ //
51
+ // if (subproofAssertionNodeA !== null) {
52
+ // const subproofAssertionStatementNodesA = subproofAssertionStatementNodesQuery(subproofAssertionNodeA), ///
53
+ // subproofSuppositionStatementNodesB = subproofSuppositionStatementNodesQuery(subproofNodeB), ///
54
+ // subproofLastProofStepStatementNodeB = subproofLastProofStepStatementNodeQuery(subproofNodeB), ///
55
+ // subproofStatementNodesB = [
56
+ // ...subproofSuppositionStatementNodesB,
57
+ // subproofLastProofStepStatementNodeB
58
+ // ];
59
+ //
60
+ // subproofUnified = match(subproofAssertionStatementNodesA, subproofStatementNodesB, (subproofAssertionStatementNodeA, subproofStatementNodeB) => {
61
+ // const nodeA = subproofAssertionStatementNodeA, ///
62
+ // nodeB = subproofStatementNodeB, ///
63
+ // unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
64
+ //
65
+ // if (unified) {
66
+ // return true;
67
+ // }
68
+ // });
69
+ // }
70
+ // }
71
+ //
72
+ // return subproofUnified;
73
+ // }
74
+
75
+ verify(localContext) {
76
+ let verified = false,
77
+ suppositionString = this.getString(); ///
78
+
79
+ suppositionString = trim(suppositionString); ///
80
+
81
+ if (this.unqualifiedStatement !== null) {
82
+ localContext.trace(`Verifying the '${suppositionString}' supposition...`);
83
+
84
+ const stated = true,
85
+ assignments = [],
86
+ unqualifiedStatementVerified = this.unqualifiedStatement.verify(assignments, stated, localContext);
87
+
88
+ if (unqualifiedStatementVerified) {
89
+ const assignmentsAssigned = assignAssignments(assignments, localContext);
90
+
91
+ if (assignmentsAssigned) {
92
+ const proofStep = ProofStep.fromUnqualifiedStatement(this.unqualifiedStatement);
93
+
94
+ localContext.addProofStep(proofStep);
95
+
96
+ verified = true;
97
+ }
98
+ }
30
99
 
31
- statementUnified = unified; ///
100
+ } else {
101
+ localContext.debug(`The '${suppositionString}' supposition cannot be verified because it is nonsense.`);
32
102
  }
33
103
 
34
- return statementUnified;
35
- }
36
-
37
- unifySubproof(subproofNodeB, substitutions, localContextA, localContextB) {
38
- let subproofUnified = false;
39
-
40
- if (this.statementNode !== null) {
41
- const statementNodeA = this.statementNode,
42
- subproofAssertionNodeA = subproofAssertionNodeQuery(statementNodeA); ///
43
-
44
- if (subproofAssertionNodeA !== null) {
45
- const subproofAssertionStatementNodesA = subproofAssertionStatementNodesQuery(subproofAssertionNodeA), ///
46
- subproofSuppositionStatementNodesB = subproofSuppositionStatementNodesQuery(subproofNodeB), ///
47
- subproofLastProofStepStatementNodeB = subproofLastProofStepStatementNodeQuery(subproofNodeB), ///
48
- subproofStatementNodesB = [
49
- ...subproofSuppositionStatementNodesB,
50
- subproofLastProofStepStatementNodeB
51
- ];
52
-
53
- subproofUnified = match(subproofAssertionStatementNodesA, subproofStatementNodesB, (subproofAssertionStatementNodeA, subproofStatementNodeB) => {
54
- const nodeA = subproofAssertionStatementNodeA, ///
55
- nodeB = subproofStatementNodeB, ///
56
- unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
57
-
58
- if (unified) {
59
- return true;
60
- }
61
- });
62
- }
104
+ if (verified) {
105
+ localContext.debug(`...verified the '${suppositionString}' supposition.`);
63
106
  }
64
107
 
65
- return subproofUnified;
108
+ return verified;
66
109
  }
67
110
 
68
- static fromStatementNode(statementNode) {
69
- const supposition = new Supposition(statementNode);
111
+ static fromSuppositionNode(suppositionNode, fileContext) {
112
+ const unqualifiedStatementNode = unqualifiedStatementNodeQuery(suppositionNode),
113
+ unqualifiedStatement = UnqualifiedStatement.fromUnqualifiedStatementNode(unqualifiedStatementNode, fileContext),
114
+ supposition = new Supposition(fileContext, unqualifiedStatement);
70
115
 
71
116
  return supposition;
72
117
  }
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ import shim from "../shim";
3
4
  import Unifier from "../unifier";
4
5
  import unifyTermWithType from "../unify/termWithType";
5
6
  import unifyFrameWithMetaType from "../unify/frameWithMetaType";
6
- import unifyStatementWithMetaType from "../unify/statementWithMetaType";
7
7
 
8
8
  import { nodeQuery } from "../utilities/query";
9
9
 
@@ -31,9 +31,12 @@ class StatementWithCombinatorUnifier extends Unifier {
31
31
  nodeQueryA: statementNodeQuery,
32
32
  nodeQueryB: metaTypeNodeQuery,
33
33
  unify: (statementNodeA, metaTypeNodeB, assignments, stated, localContext) => {
34
- const metaTypeNode = metaTypeNodeB, ///
34
+ const { MetaType, Statement } = shim,
35
+ metaTypeNode = metaTypeNodeB, ///
35
36
  statementNode = statementNodeA, ///
36
- statementUnifiedWithMetaType = unifyStatementWithMetaType(statementNode, metaTypeNode, assignments, stated, localContext);
37
+ metaType = MetaType.fromMetaTypeNode(metaTypeNode, localContext),
38
+ statement = Statement.fromStatementNode(statementNode, localContext),
39
+ statementUnifiedWithMetaType = statement.unifyWithMetaType(metaType, assignments, stated, localContext);
37
40
 
38
41
  return statementUnifiedWithMetaType;
39
42
  }
@@ -27,7 +27,7 @@ export default function unifyMetavariableWithFrame(metavariableNodeA, frameNodeB
27
27
  } else {
28
28
  const frameNode = frameNodeB, ///
29
29
  metavariableNode = metavariableNodeA, ///
30
- frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromFrameNodeAndMetavariableNode(frameNode, metavariableNode),
30
+ frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromFrameNodeAndMetavariableNode(frameNode, metavariableNode, localContextA, localContextB),
31
31
  substitution = frameForMetavariableSubstitution; ///
32
32
 
33
33
  substitutions.addSubstitution(substitution, localContextA, localContextB);
@@ -27,7 +27,7 @@ export default function unifyMetavariableWithStatement(metavariableNodeA, statem
27
27
  } else {
28
28
  const statementNode = statementNodeB, ///
29
29
  metavariableNode = metavariableNodeA, ///
30
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeAndMetavariableNode(statementNode, metavariableNode),
30
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeAndMetavariableNode(statementNode, metavariableNode, localContextA, localContextB),
31
31
  substitution = statementForMetavariableSubstitution; ///
32
32
 
33
33
  substitutions.addSubstitution(substitution, localContextA, localContextB);
@@ -28,7 +28,7 @@ export default function unifyMetavariableWithStatementGivenSubstitution(metavari
28
28
  const statementNode = statementNodeB, ///
29
29
  substitutionNode = substitutionNodeA, ///
30
30
  metavariableNode = metavariableNodeA, ///
31
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeMetavariableNodeAndSubstitutionNode(statementNode, metavariableNode, substitutionNode),
31
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeMetavariableNodeAndSubstitutionNode(statementNode, metavariableNode, substitutionNode, localContextA, localContextB),
32
32
  substitution = statementForMetavariableSubstitution; ///
33
33
 
34
34
  substitutions.addSubstitution(substitution, localContextA, localContextB);
@@ -24,7 +24,7 @@ export default function unifyVariableWithTerm(variableNodeA, termNodeB, substitu
24
24
  } else {
25
25
  const termNode = termNodeB, ///
26
26
  variableNode = variableNodeA, ///
27
- termForVariableSubstitution = TermForVariableSubstitution.fromTernNodeAndVariableNode(termNode, variableNode),
27
+ termForVariableSubstitution = TermForVariableSubstitution.fromTernNodeAndVariableNode(termNode, variableNode, localContextA, localContextB),
28
28
  substitution = termForVariableSubstitution; ///
29
29
 
30
30
  substitutions.addSubstitution(substitution, localContextA, localContextB);