occam-verify-cli 0.0.1111 → 0.0.1112

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 (197) hide show
  1. package/lib/combinator/bracketed.js +15 -65
  2. package/lib/combinator.js +4 -8
  3. package/lib/constructor/bracketed.js +24 -101
  4. package/lib/constructor.js +4 -8
  5. package/lib/context/file.js +41 -12
  6. package/lib/context/local.js +45 -25
  7. package/lib/context/release.js +2 -2
  8. package/lib/dom/assertion/contained.js +246 -0
  9. package/lib/dom/assertion/defined.js +266 -0
  10. package/lib/dom/assertion/subproof.js +210 -0
  11. package/lib/dom/assertion/type.js +240 -0
  12. package/lib/{axiom.js → dom/axiom.js} +18 -8
  13. package/lib/dom/conclusion.js +171 -0
  14. package/lib/{conjecture.js → dom/conjecture.js} +18 -8
  15. package/lib/dom/consequent.js +171 -0
  16. package/lib/dom/declaration/combinator.js +105 -0
  17. package/lib/dom/declaration/constructor.js +140 -0
  18. package/lib/dom/declaration/metavariable.js +154 -0
  19. package/lib/dom/declaration/type.js +140 -0
  20. package/lib/dom/declaration/variable.js +155 -0
  21. package/lib/{declaration.js → dom/declaration.js} +62 -18
  22. package/lib/dom/derivation.js +137 -0
  23. package/lib/dom/equality.js +260 -0
  24. package/lib/dom/error.js +85 -0
  25. package/lib/dom/frame.js +372 -0
  26. package/lib/dom/judgement.js +198 -0
  27. package/lib/dom/label.js +190 -0
  28. package/lib/{lemma.js → dom/lemma.js} +19 -9
  29. package/lib/{metaLemma.js → dom/metaLemma.js} +19 -9
  30. package/lib/dom/metaType.js +261 -0
  31. package/lib/dom/metatheorem.js +273 -0
  32. package/lib/dom/metavariable.js +463 -0
  33. package/lib/dom/premise.js +221 -0
  34. package/lib/dom/proof.js +154 -0
  35. package/lib/dom/proofStep.js +239 -0
  36. package/lib/dom/reference.js +218 -0
  37. package/lib/dom/rule.js +311 -0
  38. package/lib/dom/statement.js +379 -0
  39. package/lib/dom/subDerivation.js +137 -0
  40. package/lib/dom/subproof.js +211 -0
  41. package/lib/dom/supposition.js +221 -0
  42. package/lib/dom/term.js +354 -0
  43. package/lib/{theorem.js → dom/theorem.js} +18 -8
  44. package/lib/dom/topLevelAssertion.js +306 -0
  45. package/lib/dom/type.js +327 -0
  46. package/lib/dom/variable.js +328 -0
  47. package/lib/dom.js +27 -0
  48. package/lib/equivalences.js +307 -0
  49. package/lib/index.js +40 -35
  50. package/lib/mixins/proofStep/unify.js +86 -0
  51. package/lib/mixins/statement/verify.js +27 -2
  52. package/lib/mixins/term/verify.js +24 -4
  53. package/lib/substitution/frame.js +3 -3
  54. package/lib/substitution/statement.js +17 -16
  55. package/lib/substitution/term.js +10 -7
  56. package/lib/substitution.js +4 -31
  57. package/lib/substitutions.js +24 -56
  58. package/lib/unifier/equality.js +2 -3
  59. package/lib/unifier/label.js +3 -3
  60. package/lib/unifier/metaLevel.js +9 -8
  61. package/lib/unifier/metavariable.js +3 -3
  62. package/lib/unifier/statementWithCombinator.js +5 -5
  63. package/lib/unifier/termWithConstructor.js +3 -3
  64. package/lib/utilities/json.js +26 -40
  65. package/lib/utilities/string.js +6 -8
  66. package/lib/utilities/subproof.js +2 -2
  67. package/lib/utilities/substitutions.js +7 -6
  68. package/lib/utilities/verification.js +22 -14
  69. package/lib/verifier/combinator.js +4 -4
  70. package/lib/verifier/constructor.js +3 -3
  71. package/lib/verifier/topLevel.js +15 -21
  72. package/package.json +1 -1
  73. package/src/combinator/bracketed.js +11 -4
  74. package/src/combinator.js +3 -10
  75. package/src/constructor/bracketed.js +17 -5
  76. package/src/constructor.js +3 -9
  77. package/src/context/file.js +42 -11
  78. package/src/context/local.js +26 -34
  79. package/src/context/release.js +1 -1
  80. package/src/{assertion → dom/assertion}/contained.js +10 -8
  81. package/src/{assertion → dom/assertion}/defined.js +14 -11
  82. package/src/{assertion → dom/assertion}/subproof.js +11 -62
  83. package/src/{assertion → dom/assertion}/type.js +11 -8
  84. package/src/{axiom.js → dom/axiom.js} +6 -9
  85. package/src/dom/conclusion.js +95 -0
  86. package/src/{conjecture.js → dom/conjecture.js} +5 -8
  87. package/src/dom/consequent.js +95 -0
  88. package/src/{declaration → dom/declaration}/combinator.js +8 -5
  89. package/src/{declaration → dom/declaration}/constructor.js +8 -4
  90. package/src/{declaration → dom/declaration}/metavariable.js +8 -5
  91. package/src/{declaration → dom/declaration}/type.js +8 -4
  92. package/src/{declaration → dom/declaration}/variable.js +9 -6
  93. package/src/{declaration.js → dom/declaration.js} +11 -16
  94. package/src/{derivation.js → dom/derivation.js} +9 -12
  95. package/src/{equality.js → dom/equality.js} +11 -14
  96. package/src/{error.js → dom/error.js} +6 -3
  97. package/src/{frame.js → dom/frame.js} +14 -23
  98. package/src/{judgement.js → dom/judgement.js} +8 -11
  99. package/src/{label.js → dom/label.js} +9 -16
  100. package/src/{lemma.js → dom/lemma.js} +5 -9
  101. package/src/{metaLemma.js → dom/metaLemma.js} +6 -9
  102. package/src/{metaType.js → dom/metaType.js} +7 -10
  103. package/src/{metatheorem.js → dom/metatheorem.js} +6 -10
  104. package/src/{metavariable.js → dom/metavariable.js} +79 -77
  105. package/src/dom/premise.js +173 -0
  106. package/src/{proof.js → dom/proof.js} +8 -11
  107. package/src/dom/proofStep.js +173 -0
  108. package/src/{reference.js → dom/reference.js} +48 -20
  109. package/src/{rule.js → dom/rule.js} +13 -17
  110. package/src/{statement.js → dom/statement.js} +142 -71
  111. package/src/{subDerivation.js → dom/subDerivation.js} +9 -12
  112. package/src/{subproof.js → dom/subproof.js} +14 -47
  113. package/src/dom/supposition.js +173 -0
  114. package/src/{term.js → dom/term.js} +24 -45
  115. package/src/{theorem.js → dom/theorem.js} +5 -8
  116. package/src/{topLevelAssertion.js → dom/topLevelAssertion.js} +12 -14
  117. package/src/{type.js → dom/type.js} +9 -12
  118. package/src/{variable.js → dom/variable.js} +20 -28
  119. package/src/dom.js +13 -0
  120. package/src/equivalences.js +278 -0
  121. package/src/index.js +39 -34
  122. package/src/mixins/proofStep/unify.js +115 -0
  123. package/src/mixins/statement/verify.js +33 -1
  124. package/src/mixins/term/verify.js +33 -3
  125. package/src/substitution/frame.js +2 -2
  126. package/src/substitution/statement.js +20 -18
  127. package/src/substitution/term.js +12 -5
  128. package/src/substitution.js +4 -29
  129. package/src/substitutions.js +35 -73
  130. package/src/unifier/equality.js +1 -2
  131. package/src/unifier/label.js +2 -2
  132. package/src/unifier/metaLevel.js +9 -7
  133. package/src/unifier/metavariable.js +2 -2
  134. package/src/unifier/statementWithCombinator.js +4 -4
  135. package/src/unifier/termWithConstructor.js +2 -2
  136. package/src/utilities/json.js +23 -42
  137. package/src/utilities/string.js +8 -6
  138. package/src/utilities/subproof.js +2 -2
  139. package/src/utilities/substitutions.js +7 -5
  140. package/src/utilities/verification.js +29 -13
  141. package/src/verifier/combinator.js +3 -3
  142. package/src/verifier/constructor.js +3 -3
  143. package/src/verifier/topLevel.js +20 -21
  144. package/lib/assertion/contained.js +0 -232
  145. package/lib/assertion/defined.js +0 -211
  146. package/lib/assertion/subproof.js +0 -203
  147. package/lib/assertion/type.js +0 -185
  148. package/lib/conclusion.js +0 -130
  149. package/lib/consequent.js +0 -130
  150. package/lib/declaration/combinator.js +0 -90
  151. package/lib/declaration/constructor.js +0 -90
  152. package/lib/declaration/metavariable.js +0 -104
  153. package/lib/declaration/type.js +0 -90
  154. package/lib/declaration/variable.js +0 -105
  155. package/lib/derivation.js +0 -91
  156. package/lib/equality.js +0 -209
  157. package/lib/error.js +0 -70
  158. package/lib/frame.js +0 -331
  159. package/lib/judgement.js +0 -147
  160. package/lib/label.js +0 -141
  161. package/lib/metaType.js +0 -255
  162. package/lib/metatheorem.js +0 -263
  163. package/lib/metavariable.js +0 -399
  164. package/lib/mixins/statement/qualified/unify.js +0 -69
  165. package/lib/mixins/statement/unify.js +0 -42
  166. package/lib/mixins/statement/unifyIndependenntly.js +0 -46
  167. package/lib/mixins/term/unify.js +0 -40
  168. package/lib/premise.js +0 -184
  169. package/lib/proof.js +0 -103
  170. package/lib/proofStep.js +0 -179
  171. package/lib/reference.js +0 -145
  172. package/lib/rule.js +0 -259
  173. package/lib/shim.js +0 -14
  174. package/lib/statement/qualified.js +0 -152
  175. package/lib/statement/unqualified.js +0 -175
  176. package/lib/statement.js +0 -270
  177. package/lib/subDerivation.js +0 -91
  178. package/lib/subproof.js +0 -181
  179. package/lib/supposition.js +0 -184
  180. package/lib/term.js +0 -318
  181. package/lib/topLevelAssertion.js +0 -305
  182. package/lib/type.js +0 -321
  183. package/lib/utilities/equivalences.js +0 -178
  184. package/lib/variable.js +0 -281
  185. package/src/conclusion.js +0 -96
  186. package/src/consequent.js +0 -96
  187. package/src/mixins/statement/qualified/unify.js +0 -103
  188. package/src/mixins/statement/unify.js +0 -41
  189. package/src/mixins/statement/unifyIndependenntly.js +0 -58
  190. package/src/mixins/term/unify.js +0 -36
  191. package/src/premise.js +0 -183
  192. package/src/proofStep.js +0 -181
  193. package/src/shim.js +0 -5
  194. package/src/statement/qualified.js +0 -133
  195. package/src/statement/unqualified.js +0 -166
  196. package/src/supposition.js +0 -183
  197. package/src/utilities/equivalences.js +0 -183
package/src/index.js CHANGED
@@ -1,39 +1,44 @@
1
1
  "use strict";
2
2
 
3
- import Type from "./type";
4
- import Term from "./term";
5
- import Rule from "./rule";
6
- import Label from "./label";
7
- import Axiom from "./axiom";
8
- import Lemma from "./lemma";
9
- import Frame from "./frame";
10
- import Proof from "./proof";
11
- import Premise from "./premise";
12
- import Theorem from "./theorem";
13
- import Equality from "./equality";
14
- import MetaType from "./metaType";
15
- import Subproof from "./subproof";
16
- import Variable from "./variable";
17
- import Statement from "./statement";
18
- import ProofStep from "./proofStep";
19
- import Judgement from "./judgement";
20
- import MetaLemma from "./metaLemma";
21
- import Consequent from "./consequent";
22
- import Conjecture from "./conjecture";
23
- import Combinator from "./combinator";
24
- import Conclusion from "./conclusion";
25
- import Derivation from "./derivation";
26
- import Declaration from "./declaration";
27
- import Constructor from "./constructor";
28
- import Supposition from "./supposition";
29
- import Metatheorem from "./metatheorem";
30
- import Metavariable from "./metavariable";
31
- import Substitution from "./substitution";
32
- import Substitutions from "./substitutions";
33
- import SubDerivation from "./subDerivation";
34
- import QualifiedStatement from "./statement/qualified";
35
- import UnqualifiedStatement from "./statement/unqualified";
36
- import StatementSubstitution from "./substitution/statement";
3
+ import Type from "./dom/type";
4
+ import Term from "./dom/term";
5
+ import Rule from "./dom/rule";
6
+ import Label from "./dom/label";
7
+ import Axiom from "./dom/axiom";
8
+ import Lemma from "./dom/lemma";
9
+ import Frame from "./dom/frame";
10
+ import Proof from "./dom/proof";
11
+ import Error from "./dom/error";
12
+ import Premise from "./dom/premise";
13
+ import Theorem from "./dom/theorem";
14
+ import Equality from "./dom/equality";
15
+ import MetaType from "./dom/metaType";
16
+ import Subproof from "./dom/subproof";
17
+ import Variable from "./dom/variable";
18
+ import ProofStep from "./dom/proofStep";
19
+ import Reference from "./dom/reference";
20
+ import Statement from "./dom/statement";
21
+ import Judgement from "./dom/judgement";
22
+ import MetaLemma from "./dom/metaLemma";
23
+ import Consequent from "./dom/consequent";
24
+ import Conjecture from "./dom/conjecture";
25
+ import Conclusion from "./dom/conclusion";
26
+ import Derivation from "./dom/derivation";
27
+ import Declaration from "./dom/declaration";
28
+ import Supposition from "./dom/supposition";
29
+ import Metatheorem from "./dom/metatheorem";
30
+ import Metavariable from "./dom/metavariable";
31
+ import SubDerivation from "./dom/subDerivation";
32
+ import TypeAssertion from "./dom/assertion/type";
33
+ import TypeDeclaration from "./dom/declaration/type";
34
+ import DefinedAssertion from "./dom/assertion/defined";
35
+ import SubproofAssertion from "./dom/assertion/subproof";
36
+ import ContainedAssertion from "./dom/assertion/contained";
37
+ import VariableDeclaration from "./dom/declaration/variable";
38
+ import CombinatorDeclaration from "./dom/declaration/combinator";
39
+ import ConstructorDeclaration from "./dom/declaration/constructor";
40
+ import MetavariableDeclaration from "./dom/declaration/metavariable";
41
+ import ConstructorBracketedContext from "./context/bracketed/constructor";
37
42
 
38
43
  export { default as Log } from "./log";
39
44
  export { default as ReleaseContext } from "./context/release";
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ import StatementSubstitution from "../../substitution/statement";
4
+
5
+ function unifyAWithRule(statement, reference, substitutions, context) {
6
+ let unifiedWithRule = false;
7
+
8
+ if (reference !== null) {
9
+ const rule = context.findRuleByReference(reference);
10
+
11
+ if (rule !== null) {
12
+ const ruleString = rule.getString(),
13
+ statementString = statement.getString();
14
+
15
+ context.trace(`Unifying the '${statementString}' statement with the '${ruleString}' rule...`);
16
+
17
+ const proofSteps = context.getProofSteps(),
18
+ statementAndProofStepsUnified = rule.unifyStatementAndProofSteps(statement, proofSteps, context);
19
+
20
+ unifiedWithRule = statementAndProofStepsUnified; ///
21
+
22
+ if (unifiedWithRule) {
23
+ context.debug(`...unified the '${statementString}' statement with the '${ruleString}' rule.`);
24
+ }
25
+ }
26
+ }
27
+
28
+ return unifiedWithRule;
29
+ }
30
+
31
+ function unifyAWithReference(statement, reference, substitutions, context) {
32
+ let unifiedWithReference = false;
33
+
34
+ if (reference !== null) {
35
+ const metavariableVerified = reference.verifyMetavariable(context);
36
+
37
+ if (metavariableVerified) {
38
+ const statementString = statement.getString(),
39
+ referenceString = reference.getString();
40
+
41
+ context.trace(`Unifying the '${statementString}' statement with the '${referenceString}' reference...`);
42
+
43
+ const metavariable = reference.getMetavariable(),
44
+ statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
45
+ substitution = statementSubstitution; ///
46
+
47
+ substitutions.addSubstitution(substitution, context);
48
+
49
+ unifiedWithReference = true;
50
+
51
+ if (unifiedWithReference) {
52
+ context.debug(`...unified the '${statementString}' statement with the '${referenceString}' reference.`);
53
+ }
54
+ }
55
+ }
56
+
57
+ return unifiedWithReference;
58
+ }
59
+
60
+ function unifyAWithAxiomLemmaTheoremOrConjecture(statement, reference, substitutions, context) {
61
+ let unifiedWithAxiomLemmaTheoremOrConjecture = false;
62
+
63
+ if (reference !== null) {
64
+ const axiomLemmaTheoremConjecture = context.findAxiomLemmaTheoremConjectureByReference(reference);
65
+
66
+ if (axiomLemmaTheoremConjecture !== null) {
67
+ const statementString = statement.getString(),
68
+ axiomLemmaTheoremConjectureString = reference.getString();
69
+
70
+ context.trace(`Unifying the '${statementString}' statement with the '${axiomLemmaTheoremConjectureString}' axiom, lemma, theorem or conjecture...`);
71
+
72
+ const proofSteps = context.getProofSteps(),
73
+ statementAndProofStepsUnified = axiomLemmaTheoremConjecture.unifyStatementAndProofSteps(statement, proofSteps, context);
74
+
75
+ if (statementAndProofStepsUnified) {
76
+ const metavariable = reference.getMetavariable(),
77
+ statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
78
+ substitution = statementSubstitution; ///
79
+
80
+ substitutions.addSubstitution(substitution, context);
81
+
82
+ unifiedWithAxiomLemmaTheoremOrConjecture = true;
83
+ }
84
+
85
+ if (unifiedWithAxiomLemmaTheoremOrConjecture) {
86
+ context.debug(`...unified the '${statementString}' statement with the '${axiomLemmaTheoremConjectureString}' axiom, lemma, theorem or conjecture.`);
87
+ }
88
+ }
89
+ }
90
+
91
+ return unifiedWithAxiomLemmaTheoremOrConjecture;
92
+ }
93
+
94
+ function unifyWithProofSteps(statement, reference, substitutions, context) {
95
+ let unifiedWithProofSteps = false;
96
+
97
+ if (reference === null) {
98
+ const proofSteps = context.getProofSteps(),
99
+ statementUnifiedWithProofSteps = statement.unifyWithProofSteps(proofSteps, context);
100
+
101
+ unifiedWithProofSteps = statementUnifiedWithProofSteps; ///
102
+ }
103
+
104
+ return unifiedWithProofSteps;
105
+ }
106
+
107
+ const unifyMixins = [
108
+ unifyAWithRule,
109
+ unifyAWithReference,
110
+ unifyAWithAxiomLemmaTheoremOrConjecture,
111
+ unifyWithProofSteps
112
+ ];
113
+
114
+ export default unifyMixins;
115
+
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import BracketedCombinator from "../../combinator/bracketed";
4
+
3
5
  import { equalityFromStatement,
4
6
  judgementFromStatement,
5
7
  metavariableFromStatement,
@@ -162,6 +164,34 @@ function verifyAsSubproofAssertion(statement, assignments, stated, context) {
162
164
  return verifiedAsSubproofAssertion;
163
165
  }
164
166
 
167
+ function unifyWithBracketedCombinator(statement, assignments, stated, context) {
168
+ stated = true; ///
169
+
170
+ assignments = null; ///
171
+
172
+ const bracketedCombinator = BracketedCombinator.fromNothing(),
173
+ unifiedWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, assignments, stated, context);
174
+
175
+ return unifiedWithBracketedCombinator;
176
+ }
177
+
178
+ function unifyWithCombinators(statement, assignments, stated, context) {
179
+ stated = true; ///
180
+
181
+ assignments = null; ///
182
+
183
+ const combinators = context.getCombinators(),
184
+ unifiedWithCombinators = combinators.some((combinator) => {
185
+ const unifiedWithCombinator = combinator.unifyStatement(statement, assignments, stated, context);
186
+
187
+ if (unifiedWithCombinator) {
188
+ return true;
189
+ }
190
+ });
191
+
192
+ return unifiedWithCombinators;
193
+ }
194
+
165
195
  const verifyMixins = [
166
196
  verifyAsMetavariable,
167
197
  verifyAsEquality,
@@ -169,7 +199,9 @@ const verifyMixins = [
169
199
  verifyAsTypeAssertion,
170
200
  verifyAsDefinedAssertion,
171
201
  verifyAsSubproofAssertion,
172
- verifyAsContainedAssertion
202
+ verifyAsContainedAssertion,
203
+ unifyWithBracketedCombinator,
204
+ unifyWithCombinators
173
205
  ];
174
206
 
175
207
  export default verifyMixins;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import shim from "../../shim";
3
+ import dom from "../../dom";
4
+
5
+ import BracketedConstructor from "../../constructor/bracketed";
4
6
 
5
7
  import { nodeQuery } from "../../utilities/query";
6
8
 
@@ -9,7 +11,7 @@ const variableNodeQuery = nodeQuery("/term/variable!");
9
11
  function verifyTermAsVariable(term, localContext, verifyAhead) {
10
12
  let termVerifiedAsVariable = false;
11
13
 
12
- const { Variable } = shim,
14
+ const { Variable } = dom,
13
15
  context = localContext, ///
14
16
  termNode = term.getNode(),
15
17
  variableNode = variableNodeQuery(termNode),
@@ -42,8 +44,36 @@ function verifyTermAsVariable(term, localContext, verifyAhead) {
42
44
  return termVerifiedAsVariable;
43
45
  }
44
46
 
47
+ function unifyWithBracketedConstructor(term, context, verifyAhead) {
48
+ let unifiedWithBracketedConstructor;
49
+
50
+ const bracketedConstructor = BracketedConstructor.fromNothing();
51
+
52
+ unifiedWithBracketedConstructor = bracketedConstructor.unifyTerm(term, context, verifyAhead);
53
+
54
+ return unifiedWithBracketedConstructor;
55
+ }
56
+
57
+ function unifyWithConstructors(term, context, verifyAhead) {
58
+ let unifiedWithConstructors;
59
+
60
+ const constructors = context.getConstructors();
61
+
62
+ unifiedWithConstructors = constructors.some((constructor) => {
63
+ const unifiedWithConstructor = constructor.unifyTerm(term, context, verifyAhead);
64
+
65
+ if (unifiedWithConstructor) {
66
+ return true;
67
+ }
68
+ });
69
+
70
+ return unifiedWithConstructors;
71
+ }
72
+
45
73
  const verifyMixins = [
46
- verifyTermAsVariable
74
+ verifyTermAsVariable,
75
+ unifyWithBracketedConstructor,
76
+ unifyWithConstructors
47
77
  ];
48
78
 
49
79
  export default verifyMixins;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import shim from "../shim";
3
+ import dom from "../dom";
4
4
  import Substitution from "../substitution";
5
5
  import FrameSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/frame";
6
6
 
@@ -40,7 +40,7 @@ export default class FrameSubstitution extends Substitution {
40
40
  metavariableNode = metavariableNodeQuery(frameSubstitutionNode);
41
41
 
42
42
  if ((frameNode !== null) && (metavariableNode !== null)) {
43
- const { Frame, Metavariable } = shim,
43
+ const { Frame, Metavariable } = dom,
44
44
  frame = Frame.fromFrameNode(frameNode, context),
45
45
  metavariable = Metavariable.fromMetavariableNode(metavariableNode, context),
46
46
  node = frameSubstitutionNode, ///
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
 
3
- import shim from "../shim";
4
3
  import Substitution from "../substitution";
4
+ import Substitutions from "../substitutions";
5
5
  import StatementSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/statement";
6
6
 
7
7
  import { unifySubstitution } from "../utilities/unification";
8
8
  import { stripBracketsFromStatement } from "../utilities/verification";
9
- import { stripBracketsFromStatementNode } from "../utilities/brackets";
10
9
  import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
11
10
 
12
- class StatementSubstitution extends Substitution {
11
+ export default class StatementSubstitution extends Substitution {
13
12
  constructor(string, node, tokens, resolved, statement, metavariable, substitution) {
14
13
  super(string, node, tokens);
15
14
 
@@ -35,17 +34,27 @@ class StatementSubstitution extends Substitution {
35
34
  return this.substitution;
36
35
  }
37
36
 
38
- isStatementEqualTo(statement) { return this.statement.isEqualTo(statement); }
37
+ isStatementEqualTo(statement, context) {
38
+ statement = stripBracketsFromStatement(statement, context); ///
39
+
40
+ const statementEqualTo = this.statement.isEqualTo(statement);
41
+
42
+ return statementEqualTo;
43
+ }
39
44
 
40
45
  isMetavariableEqualTo(metavariable) { return this.metavariable.isEqualTo(metavariable); }
41
46
 
42
47
  isSubstitutionEqualTo(substitution) {
43
- let substitutionEqualTo = false;
44
-
45
- if (this.substitution === null) {
46
- if (substitution === null) {
47
- substitutionEqualTo = true;
48
- }
48
+ let substitutionEqualTo;
49
+
50
+ if (false) {
51
+ ///
52
+ } else if ((substitution === null) && (this.substitution === null)) {
53
+ substitutionEqualTo = true;
54
+ } else if ((substitution !== null) && (this.substitution === null)) {
55
+ substitutionEqualTo = false;
56
+ } else if ((substitution === null) && (this.substitution !== null)) {
57
+ substitutionEqualTo = false;
49
58
  } else {
50
59
  substitutionEqualTo = this.substitution.isEqualTo(substitution);
51
60
  }
@@ -123,8 +132,7 @@ class StatementSubstitution extends Substitution {
123
132
  unifyStatement(statement, generalContext, specificContext) {
124
133
  let specificSubstitution = null;
125
134
 
126
- const { Substitutions } = shim,
127
- substitutions = Substitutions.fromNothing(),
135
+ const substitutions = Substitutions.fromNothing(),
128
136
  statementUnified = this.statement.unifyStatement(statement, substitutions, generalContext, specificContext);
129
137
 
130
138
  if (statementUnified) {
@@ -198,12 +206,6 @@ class StatementSubstitution extends Substitution {
198
206
  }
199
207
  }
200
208
 
201
- Object.assign(shim, {
202
- StatementSubstitution
203
- });
204
-
205
- export default StatementSubstitution;
206
-
207
209
  function stringFromStatementAndMetavariable(statement, metavariable) {
208
210
  const statementString = statement.getString(),
209
211
  metavariableString = metavariable.getString(),
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import shim from "../shim";
3
+ import dom from "../dom";
4
4
  import Substitution from "../substitution";
5
5
  import TermSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/term";
6
6
 
7
7
  import { nodeQuery } from "../utilities/query";
8
+ import { stripBracketsFromTerm } from "../utilities/verification";
8
9
  import { stripBracketsFromTermNode } from "../utilities/brackets";
9
10
 
10
11
  const termNodeQuery = nodeQuery("/termSubstitution/term[0]"),
@@ -27,11 +28,17 @@ export default class TermSubstitution extends Substitution {
27
28
  return this.variable;
28
29
  }
29
30
 
30
- isTermEqualTo(term) { return this.term.isEqualTo(term); }
31
+ isTermEqualTo(term, context) {
32
+ term = stripBracketsFromTerm(term); ///
33
+
34
+ const termEqualTo = this.term.isEqualTo(term);
35
+
36
+ return termEqualTo;
37
+ }
31
38
 
32
39
  isVariableEqualTo(variable) { return this.variable.isEqualTo(variable); }
33
40
 
34
- unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext) {
41
+ unifyWithEquivalence(equivalence) {
35
42
  let unifiedWithEquivalence;
36
43
 
37
44
  const termNode = this.term.getNode(),
@@ -59,7 +66,7 @@ export default class TermSubstitution extends Substitution {
59
66
  variableNode = variableNodeQuery(termSubstitutionNode);
60
67
 
61
68
  if ((termNode !== null) && (variableNode !== null)) {
62
- const { Term, Variable } = shim,
69
+ const { Term, Variable } = dom,
63
70
  term = Term.fromTermNode(termNode, context),
64
71
  variable = Variable.fromVariableNode(variableNode, context),
65
72
  node = termSubstitutionNode, ///
@@ -78,7 +85,7 @@ export default class TermSubstitution extends Substitution {
78
85
 
79
86
  termNode = stripBracketsFromTermNode(termNode); ///
80
87
 
81
- const { Term } = shim;
88
+ const { Term } = dom;
82
89
 
83
90
  term = Term.fromTermNode(termNode, context);
84
91
 
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import shim from "./shim";
4
-
5
- class Substitution {
3
+ export default class Substitution {
6
4
  constructor(string, node, tokens) {
7
5
  this.string = string;
8
6
  this.node = node;
@@ -71,13 +69,8 @@ class Substitution {
71
69
  }
72
70
 
73
71
  isEqualTo(substitution) {
74
- let equalTo = false;
75
-
76
- if (substitution !== null) {
77
- const substitutionString = substitution.getString();
78
-
79
- equalTo = (substitutionString === this.string);
80
- }
72
+ const substitutionString = substitution.getString(),
73
+ equalTo = (substitutionString === this.string);
81
74
 
82
75
  return equalTo;
83
76
  }
@@ -124,27 +117,9 @@ class Substitution {
124
117
  return resolved;
125
118
  }
126
119
 
127
- unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext) {
120
+ unifyWithEquivalence(equivalence) {
128
121
  let unifiedWithEquivalence = false;
129
122
 
130
123
  return unifiedWithEquivalence;
131
124
  }
132
-
133
- unifyWithEquivalences(equivalences, substitutions, generalContext, specificContext) {
134
- const unifiedWithEquivalences = equivalences.some((equivalence) => {
135
- const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext);
136
-
137
- if (substitutionUnifiedWithEquivalence) {
138
- return true;
139
- }
140
- });
141
-
142
- return unifiedWithEquivalences;
143
- }
144
125
  }
145
-
146
- Object.assign(shim, {
147
- Substitution
148
- });
149
-
150
- export default Substitution;
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
 
3
- import shim from "./shim";
4
-
5
3
  import { arrayUtilities } from "necessary";
6
4
 
7
5
  import { EMPTY_STRING } from "./constants";
8
6
 
9
7
  const { find, first, clear, prune, filter, compress } = arrayUtilities;
10
8
 
11
- class Substitutions {
9
+ export default class Substitutions {
12
10
  constructor(array, savedArray) {
13
11
  this.array = array;
14
12
  this.savedArray = savedArray;
@@ -75,13 +73,6 @@ class Substitutions {
75
73
  return substitutions;
76
74
  }
77
75
 
78
- filterSubstitution(callback) {
79
- const array = this.array.filter(callback),
80
- substitutions = Substitutions.fromArray(array);
81
-
82
- return substitutions;
83
- }
84
-
85
76
  findSubstitutionByVariable(variable) {
86
77
  const substitution = this.findSubstitution((substitution) => {
87
78
  const substitutionVariable = substitution.getVariable();
@@ -98,18 +89,6 @@ class Substitutions {
98
89
  return substitution;
99
90
  }
100
91
 
101
- findSubstitutionByMetavariable(metavariable) {
102
- const substitution = this.findSubstitution((substitution) => {
103
- const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
104
-
105
- if (substitutionMetavariableEqualToMetavariable) {
106
- return true;
107
- }
108
- });
109
-
110
- return substitution;
111
- }
112
-
113
92
  findSubstitutionsByMetavariable(metavariable) {
114
93
  const substitutions = this.findSubstitutions((substitution) => {
115
94
  const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
@@ -123,54 +102,54 @@ class Substitutions {
123
102
  }
124
103
 
125
104
  findSimpleSubstitutionByMetavariable(metavariable) {
126
- const substitutions = this.findSubstitutionsByMetavariable(metavariable),
127
- simpleSubstitutions = substitutions.filterSubstitution((substitution) => {
128
- const substitutionSimple = substitution.isSimple();
105
+ const simpleSubstitution = this.findSubstitution((substitution) => {
106
+ const substitutionSimple = substitution.isSimple();
129
107
 
130
- if (substitutionSimple) {
131
- return true;
132
- }
133
- }),
134
- firstSimpleSubstitution = simpleSubstitutions.getFirstSubstitution(),
135
- simpleSubstitution = firstSimpleSubstitution; ///
108
+ if (substitutionSimple) {
109
+ const simpleSubstitution = substitution, ///
110
+ simpleSubstitutionMetavariableEqualToMetavariable = simpleSubstitution.isMetavariableEqualTo(metavariable);
111
+
112
+ if (simpleSubstitutionMetavariableEqualToMetavariable) {
113
+ return true;
114
+ }
115
+ }
116
+ });
136
117
 
137
118
  return simpleSubstitution;
138
119
  }
139
120
 
140
121
  findComplexSubstitutionsByMetavariable(metavariable) {
141
- const substitutions = this.findSubstitutionsByMetavariable(metavariable),
142
- complexSubstitutions = substitutions.filterSubstitution((substitution) => {
143
- const substitutionComplex = substitution.isComplex();
122
+ const complexSubstitutions = this.findSubstitutions((substitution) => {
123
+ const substitutionComplex = substitution.isComplex();
144
124
 
145
- if (substitutionComplex) {
146
- return true;
147
- }
148
- });
125
+ if (substitutionComplex) {
126
+ const complexSubstitution = substitution, ///
127
+ complexSubstitutionMetavariableEqualToMetavariable = complexSubstitution.isMetavariableEqualTo(metavariable);
128
+
129
+ if (complexSubstitutionMetavariableEqualToMetavariable) {
130
+ return true;
131
+ }
132
+ }
133
+ });
149
134
 
150
135
  return complexSubstitutions;
151
136
  }
152
137
 
153
138
  findSubstitutionByMetavariableAndSubstitution(metavariable, substitution) {
154
- const substitutionA = substitution, ///
155
- substitutions = this.findSubstitutions((substitution) => {
156
- const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
157
-
158
- if (substitutionMetavariableEqualToMetavariable) {
159
- const substitutionSubstitution = substitution.getSubstitution();
139
+ const substitutionA = substitution; ///
160
140
 
161
- if (substitutionSubstitution !== null) {
162
- const substitutionB = substitution, ///
163
- substitutionBSubstitutionEqualToSubstitutionB = substitutionB.isSubstitutionEqualTo(substitutionA);
141
+ substitution = this.findSubstitution((substitution) => { ///
142
+ const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
164
143
 
165
- if (substitutionBSubstitutionEqualToSubstitutionB) {
166
- return true;
167
- }
168
- }
169
- }
170
- }),
171
- firstSubstitution = substitutions.getFirstSubstitution();
144
+ if (substitutionMetavariableEqualToMetavariable) {
145
+ const substitutionB = substitution, ///
146
+ substitutionBSubstitutionEqualToSubstitutionA = substitutionB.isSubstitutionEqualTo(substitutionA);
172
147
 
173
- substitution = firstSubstitution; ///
148
+ if (substitutionBSubstitutionEqualToSubstitutionA) {
149
+ return true;
150
+ }
151
+ }
152
+ });
174
153
 
175
154
  return substitution;
176
155
  }
@@ -221,19 +200,6 @@ class Substitutions {
221
200
  context.trace(`Removed the ${substitutionString} substitution.`);
222
201
  }
223
202
 
224
- unifyWithEquivalences(equivalences, context) {
225
- const unifiedWithEquivalences = this.everySubstitution((substitution) => {
226
- const substitutions = this, ///
227
- substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, context);
228
-
229
- if (substitutionUnifiedWithEquivalence) {
230
- return true;
231
- }
232
- });
233
-
234
- return unifiedWithEquivalences;
235
- }
236
-
237
203
  clear() {
238
204
  clear(this.array);
239
205
 
@@ -248,7 +214,7 @@ class Substitutions {
248
214
  complexSubstitutionsResolved = complexSubstitutions.everySubstitution((complexSubstitution) => {
249
215
  let resolved;
250
216
 
251
- const substitutions = this,
217
+ const substitutions = this, ///
252
218
  substitution = complexSubstitution; ///
253
219
 
254
220
  resolved = substitution.isResolved();
@@ -346,10 +312,6 @@ class Substitutions {
346
312
  }
347
313
  }
348
314
 
349
- Object.assign(shim, {
350
- Substitutions
351
- });
352
-
353
315
  function leftDifference(arrayA, arrayB) {
354
316
  filter(arrayA, (elementA) => {
355
317
  const arrayBIncludesElementA = arrayB.includes(elementA);