occam-verify-cli 0.0.1067 → 0.0.1069

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 (137) hide show
  1. package/bin/action/verify.js +3 -2
  2. package/lib/assertion/contained.js +2 -2
  3. package/lib/assertion/defined.js +2 -2
  4. package/lib/assertion/subproof.js +3 -3
  5. package/lib/assignment/judgement.js +3 -3
  6. package/lib/axiom.js +11 -6
  7. package/lib/combinator.js +9 -9
  8. package/lib/conclusion.js +13 -10
  9. package/lib/conjecture.js +11 -6
  10. package/lib/consequent.js +13 -10
  11. package/lib/constructor.js +9 -9
  12. package/lib/context/file.js +34 -126
  13. package/lib/context/local.js +16 -5
  14. package/lib/context/release.js +2 -3
  15. package/lib/declaration.js +96 -2
  16. package/lib/equivalence.js +2 -2
  17. package/lib/frame.js +179 -98
  18. package/lib/index.js +22 -6
  19. package/lib/judgement.js +84 -5
  20. package/lib/label.js +12 -8
  21. package/lib/lemma.js +12 -12
  22. package/lib/metaLemma.js +120 -8
  23. package/lib/metaType.js +24 -3
  24. package/lib/metatheorem.js +145 -9
  25. package/lib/metavariable.js +128 -43
  26. package/lib/mixins/statement/qualified/unify.js +6 -10
  27. package/lib/mixins/statement/unify.js +4 -19
  28. package/lib/mixins/statement/verify.js +13 -13
  29. package/lib/mixins/term/unify.js +2 -2
  30. package/lib/premise.js +21 -13
  31. package/lib/reference.js +17 -17
  32. package/lib/rule.js +28 -40
  33. package/lib/statement/unqualified.js +34 -9
  34. package/lib/statement.js +7 -5
  35. package/lib/substitution/frameForMetavariable.js +75 -70
  36. package/lib/substitution/statementForMetavariable.js +83 -42
  37. package/lib/substitution/termForVariable.js +65 -68
  38. package/lib/substitution.js +46 -43
  39. package/lib/substitutions.js +52 -40
  40. package/lib/supposition.js +15 -11
  41. package/lib/term.js +6 -11
  42. package/lib/theorem.js +11 -6
  43. package/lib/topLevelAssertion.js +24 -42
  44. package/lib/type.js +5 -12
  45. package/lib/unifier/intrinsicLevel.js +4 -4
  46. package/lib/unifier/metaLevel.js +11 -7
  47. package/lib/unifier/metavariable.js +6 -6
  48. package/lib/unifier/statementWithCombinator.js +16 -16
  49. package/lib/unifier/termWithConstructor.js +7 -7
  50. package/lib/utilities/brackets.js +10 -10
  51. package/lib/utilities/json.js +493 -0
  52. package/lib/utilities/node.js +26 -19
  53. package/lib/utilities/release.js +53 -0
  54. package/lib/utilities/releaseContext.js +4 -15
  55. package/lib/utilities/tokens.js +8 -1
  56. package/lib/variable.js +14 -15
  57. package/lib/verifier/topLevel.js +5 -5
  58. package/package.json +1 -1
  59. package/src/assertion/contained.js +1 -1
  60. package/src/assertion/defined.js +1 -1
  61. package/src/assertion/subproof.js +2 -3
  62. package/src/assignment/judgement.js +3 -4
  63. package/src/axiom.js +14 -6
  64. package/src/combinator.js +12 -13
  65. package/src/conclusion.js +16 -13
  66. package/src/conjecture.js +14 -6
  67. package/src/consequent.js +16 -13
  68. package/src/constructor.js +11 -13
  69. package/src/context/file.js +94 -202
  70. package/src/context/local.js +8 -6
  71. package/src/context/release.js +2 -3
  72. package/src/declaration.js +126 -45
  73. package/src/equivalence.js +2 -2
  74. package/src/frame.js +225 -141
  75. package/src/index.js +17 -1
  76. package/src/judgement.js +109 -3
  77. package/src/label.js +15 -10
  78. package/src/lemma.js +17 -10
  79. package/src/metaLemma.js +102 -1
  80. package/src/metaType.js +29 -3
  81. package/src/metatheorem.js +143 -2
  82. package/src/metavariable.js +189 -66
  83. package/src/mixins/statement/qualified/unify.js +7 -19
  84. package/src/mixins/statement/unify.js +3 -25
  85. package/src/mixins/statement/verify.js +15 -13
  86. package/src/mixins/term/unify.js +1 -1
  87. package/src/premise.js +31 -16
  88. package/src/reference.js +18 -18
  89. package/src/rule.js +40 -58
  90. package/src/statement/unqualified.js +41 -11
  91. package/src/statement.js +6 -3
  92. package/src/substitution/frameForMetavariable.js +85 -98
  93. package/src/substitution/statementForMetavariable.js +109 -45
  94. package/src/substitution/termForVariable.js +83 -94
  95. package/src/substitution.js +36 -34
  96. package/src/substitutions.js +53 -46
  97. package/src/supposition.js +22 -14
  98. package/src/term.js +5 -15
  99. package/src/theorem.js +14 -6
  100. package/src/topLevelAssertion.js +38 -64
  101. package/src/type.js +5 -20
  102. package/src/unifier/intrinsicLevel.js +4 -3
  103. package/src/unifier/metaLevel.js +19 -7
  104. package/src/unifier/metavariable.js +5 -5
  105. package/src/unifier/statementWithCombinator.js +19 -19
  106. package/src/unifier/termWithConstructor.js +7 -7
  107. package/src/utilities/brackets.js +5 -5
  108. package/src/utilities/json.js +551 -0
  109. package/src/utilities/node.js +28 -23
  110. package/src/{verify → utilities}/release.js +5 -1
  111. package/src/utilities/releaseContext.js +2 -2
  112. package/src/utilities/tokens.js +10 -0
  113. package/src/variable.js +18 -19
  114. package/src/verifier/topLevel.js +6 -4
  115. package/lib/argument.js +0 -106
  116. package/lib/metaTypes.js +0 -19
  117. package/lib/unify/metavariableWithFrame.js +0 -40
  118. package/lib/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -31
  119. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +0 -45
  120. package/lib/verify/declaration.js +0 -83
  121. package/lib/verify/frame.js +0 -120
  122. package/lib/verify/judgement.js +0 -88
  123. package/lib/verify/metaLemma.js +0 -49
  124. package/lib/verify/metatheorem.js +0 -48
  125. package/lib/verify/metavariableGivenMetaType.js +0 -44
  126. package/lib/verify/release.js +0 -50
  127. package/src/argument.js +0 -79
  128. package/src/metaTypes.js +0 -11
  129. package/src/unify/metavariableWithFrame.js +0 -40
  130. package/src/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -27
  131. package/src/unify/statementWithSttaemetnGivenEquivalences.js +0 -51
  132. package/src/verify/declaration.js +0 -113
  133. package/src/verify/frame.js +0 -157
  134. package/src/verify/judgement.js +0 -127
  135. package/src/verify/metaLemma.js +0 -72
  136. package/src/verify/metatheorem.js +0 -67
  137. package/src/verify/metavariableGivenMetaType.js +0 -45
@@ -2,9 +2,12 @@
2
2
 
3
3
  import shim from "../shim";
4
4
  import Substitution from "../substitution";
5
+ import LocalContext from "../context/local";
5
6
  import Substitutions from "../substitutions";
7
+ import metaLevelUnifier from "../unifier/metaLevel";
6
8
 
7
- import { stripBracketsFromStatement } from "../utilities/brackets";
9
+ import { stripBracketsFromStatementNode } from "../utilities/brackets";
10
+ import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
8
11
 
9
12
  export default class StatementForMetavariableSubstitution extends Substitution {
10
13
  constructor(string, statement, metavariable, substitution) {
@@ -27,16 +30,10 @@ export default class StatementForMetavariableSubstitution extends Substitution {
27
30
  return this.substitution;
28
31
  }
29
32
 
30
- getStatementNode() {
31
- const statementNode = this.statement.getNode();
33
+ getMetavariableName() {
34
+ const metavariableName = this.metavariable.getName();
32
35
 
33
- return statementNode;
34
- }
35
-
36
- getMetavariableNode() {
37
- const metavariableNode = this.metavariable.getNode();
38
-
39
- return metavariableNode;
36
+ return metavariableName;
40
37
  }
41
38
 
42
39
  isSimple() {
@@ -45,79 +42,93 @@ export default class StatementForMetavariableSubstitution extends Substitution {
45
42
  return simple;
46
43
  }
47
44
 
48
- resolve(substitutions, localContext) {
45
+ resolve(substitutions, localContextA, localContextB) {
49
46
  let resolved = false;
50
47
 
51
48
  const substitutionString = this.string;
52
49
 
53
- localContext.trace(`Resolving the ${substitutionString} substitution...`);
50
+ localContextB.trace(`Resolving the ${substitutionString} substitution...`);
54
51
 
55
- const metavariableNode = this.getMetavariableNode(),
56
- simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNode);
52
+ const metavariableName = this.getMetavariableName(),
53
+ simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableName(metavariableName);
57
54
 
58
55
  if (simpleSubstitution !== null) {
59
56
  const substitution = simpleSubstitution, ///
60
- substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, localContext);
57
+ substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, localContextA, localContextB);
61
58
 
62
59
  resolved = substitutionResolved; ///
63
60
  }
64
61
 
65
62
  if (resolved) {
66
- localContext.debug(`...resolved the ${substitutionString} substitution.`);
63
+ localContextB.debug(`...resolved the ${substitutionString} substitution.`);
67
64
  }
68
65
 
69
66
  return resolved;
70
67
  }
71
68
 
72
- resolveSubstitution(substitution, statement, substitutions, localContext) {
69
+ resolveSubstitution(substitution, statement, substitutions, localContextA, localContextB) {
73
70
  let substitutionResolved = false;
74
71
 
75
72
  const substitutionString = substitution.getString();
76
73
 
77
- localContext.trace(`Resolving the ${substitutionString} substitution...`);
74
+ localContextB.trace(`Resolving the ${substitutionString} substitution...`);
78
75
 
79
- const transformedSubstitution = substitution.transformed(substitutions, localContext);
76
+ const substitutionA = substitution, ///
77
+ substitutionB = this.unifyStatement(statement, localContextB, localContextB); ///
80
78
 
81
- if (transformedSubstitution !== null) {
82
- const transformedSubstitutionString = transformedSubstitution.getString();
79
+ if (substitutionB !== null) {
80
+ localContextA = localContextFromLocalContextAndSubstitution(localContextA, substitutionA); ///
83
81
 
84
- localContext.trace(`Transformed the substitution to ${transformedSubstitutionString}...`);
82
+ localContextB = localContextFromLocalContextAndSubstitution(localContextB, substitutionB); ///
85
83
 
86
- substitutions = Substitutions.fromNothing(); ///
84
+ substitutions.snapshot();
87
85
 
88
- const localContextA = localContext, ///
89
- localContextB = localContext, ///
90
- statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
86
+ const nodeA = substitutionA.getSubstitutionNode(), ///
87
+ nodeB = substitutionB.getSubstitutionNode(), ///
88
+ unifiedAtMetaLevel = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
91
89
 
92
- if (statementUnified) {
93
- const substitutionsLength = substitutions.getLength();
90
+ unifiedAtMetaLevel ?
91
+ substitutions.continue() :
92
+ substitutions.rollback(localContextB);
94
93
 
95
- if (substitutionsLength === 1) {
96
- const firstSubstitution = substitutions.getFirstSubstitution(),
97
- substitution = firstSubstitution, ///
98
- substitutionEqualToTransformedSubstitution = substitution.isEqualTo(transformedSubstitution);
99
-
100
- substitutionResolved = substitutionEqualToTransformedSubstitution; ///
101
- }
102
- }
94
+ substitutionResolved = unifiedAtMetaLevel; ///
103
95
  }
104
96
 
105
97
  if (substitutionResolved) {
106
- localContext.debug(`...resolved the ${substitutionString} substitution.`);
98
+ localContextB.debug(`...resolved the ${substitutionString} substitution.`);
107
99
  }
108
100
 
109
101
  return substitutionResolved;
110
102
  }
111
103
 
104
+ unifyStatement(statement, localContextA, localContextB) {
105
+ let substitution = null;
106
+
107
+ const substitutions = Substitutions.fromNothing(),
108
+ statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
109
+
110
+ if (statementUnified) {
111
+ const substitutionsLength = substitutions.getLength();
112
+
113
+ if (substitutionsLength === 1) {
114
+ const firstSubstitution = substitutions.getFirstSubstitution();
115
+
116
+ substitution = firstSubstitution; ///
117
+ }
118
+ }
119
+
120
+ return substitution;
121
+ }
122
+
112
123
  matchStatementNode(statementNode) {
113
- statementNode = stripBracketsFromStatement(statementNode); ///
124
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
114
125
 
115
126
  const statementNodeMatches = this.statement.matchStatementNode(statementNode);
116
127
 
117
128
  return statementNodeMatches;
118
129
  }
119
130
 
120
- matchMetavariableNode(metavariableNode) { return this.metavariable.matchMetavariableNode(metavariableNode); }
131
+ matchMetavariableName(metavariableName) { return this.metavariable.matchMetavariableName(metavariableName); }
121
132
 
122
133
  matchSubstitutionNode(substitutionNode) {
123
134
  let substitutionNodeMatches;
@@ -135,18 +146,59 @@ export default class StatementForMetavariableSubstitution extends Substitution {
135
146
  return substitutionNodeMatches;
136
147
  }
137
148
 
138
- matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
139
- const metavariableNodeMatches = this.matchMetavariableNode(metavariableNode),
149
+ matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
150
+ const metavariableNameMatches = this.matchMetavariableName(metavariableName),
140
151
  substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
141
- metavariableNodeAndSubstitutionNodeMatches = (metavariableNodeMatches && substitutionNodeMatches);
152
+ metavariableNameAndSubstitutionNodeMatches = (metavariableNameMatches && substitutionNodeMatches);
153
+
154
+ return metavariableNameAndSubstitutionNodeMatches;
155
+ }
142
156
 
143
- return metavariableNodeAndSubstitutionNodeMatches;
157
+ toJSON() {
158
+ const metavariableJSON = metavariableToMetavariableJSON(this.metavariable),
159
+ statementJSON = statementToStatementJSON(this.statement),
160
+ metavariable = metavariableJSON, ///
161
+ statement = statementJSON, ///
162
+ string = this.string,
163
+ json = {
164
+ string,
165
+ statement,
166
+ metavariable
167
+ };
168
+
169
+ return json;
170
+ }
171
+
172
+ static fromJSON(json, fileContext) {
173
+ const { string } = json,
174
+ statement = statementFromJSON(json, fileContext),
175
+ metavariable = metavariableFromJSON(json, fileContext),
176
+ substitution = null, ///
177
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
178
+
179
+ return statementForMetavariableSubstitution;
180
+ }
181
+
182
+ static fromStatementAndMetavariable(statement, metavariable, localContext) {
183
+ let statementNode = statement.getNode();
184
+
185
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
186
+
187
+ const { Statement } = shim;
188
+
189
+ statement = Statement.fromStatementNode(statementNode, localContext);
190
+
191
+ const substitution = null,
192
+ string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext),
193
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
194
+
195
+ return statementForMetavariableSubstitution;
144
196
  }
145
197
 
146
198
  static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
147
199
  let statementNode = statement.getNode();
148
200
 
149
- statementNode = stripBracketsFromStatement(statementNode); ///
201
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
150
202
 
151
203
  const { Statement } = shim;
152
204
 
@@ -159,6 +211,18 @@ export default class StatementForMetavariableSubstitution extends Substitution {
159
211
  }
160
212
  }
161
213
 
214
+ function localContextFromLocalContextAndSubstitution(localContext, substitution) {
215
+ substitution.setSubstitutionNodeAndTokens(localContext);
216
+
217
+ const substitutionTokens = substitution.getSubstitutionTokens(),
218
+ context = localContext, ///
219
+ tokens = substitutionTokens; ///
220
+
221
+ localContext = LocalContext.fromContextAndTokens(context, tokens); ///
222
+
223
+ return localContext;
224
+ }
225
+
162
226
  function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
163
227
  let string;
164
228
 
@@ -175,4 +239,4 @@ function stringFromStatementMetavariableAndSubstitution(statement, metavariable,
175
239
  }
176
240
 
177
241
  return string;
178
- }
242
+ }
@@ -4,63 +4,74 @@ import shim from "../shim";
4
4
  import Substitution from "../substitution";
5
5
 
6
6
  import { nodeQuery } from "../utilities/query";
7
- import { stripBracketsFromTerm } from "../utilities/brackets";
7
+ import { stripBracketsFromTermNode } from "../utilities/brackets";
8
+ import { substitutionNodeFromUnqualifiedStatementNode,
9
+ unqualifiedStatementStringFromSubstitutionString,
10
+ unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
11
+ import { unqualifiedStatementTokensFromUnqualifiedStatementString,
12
+ substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
8
13
 
9
- const substitutionNodeQuery = nodeQuery("/statement/substitution"),
10
- termVariableNodeQuery = nodeQuery("/term/variable!"),
11
- substitutionTermNodeQuery = nodeQuery("/substitution/term!"),
12
- substitutionsVariableNodeQuery = nodeQuery("/substitution/variable!");
14
+ const termNodeQuery = nodeQuery("/substitution/term[0]"),
15
+ variableNodeQuery = nodeQuery("/substitution/term[1]/variable!"),
16
+ substitutionNodeQuery = nodeQuery("/statement/substitution");
13
17
 
14
18
  export default class TermForVariableSubstitution extends Substitution {
15
- constructor(string, termNode, variableNode, substitutionNode) {
19
+ constructor(string, term, variable, substitutionNode, substitutionTokens) {
16
20
  super(string);
17
21
 
18
- this.termNode = termNode;
19
- this.variableNode = variableNode;
22
+ this.term = term;
23
+ this.variable = variable;
20
24
  this.substitutionNode = substitutionNode;
25
+ this.substitutionTokens = substitutionTokens;
21
26
  }
22
27
 
23
- getTermNode() {
24
- return this.termNode;
28
+ getTerm() {
29
+ return this.term;
25
30
  }
26
31
 
27
- getVariableNode() {
28
- return this.variableNode;
32
+ getVariable() {
33
+ return this.variable;
29
34
  }
30
35
 
31
36
  getSubstitutionNode() {
32
37
  return this.substitutionNode;
33
38
  }
34
39
 
35
- transformed(substitutions, localContext) {
36
- let transformedSubstitution = null;
40
+ getSubstitutionTokens() {
41
+ return this.substitutionTokens;
42
+ }
43
+
44
+ getSubstitutionString() {
45
+ const termString = this.term.getString(),
46
+ variableString = this.variable.getString(),
47
+ substitutionString = `[${termString} for ${variableString}]`;
37
48
 
38
- const transformedTermNode = transformTermNode(this.termNode, substitutions),
39
- transformedVariableNode = transformVariableNode(this.variableNode, substitutions);
49
+ return substitutionString;
50
+ }
40
51
 
41
- if ((transformedTermNode !== null) && (transformedVariableNode !== null)) {
42
- const termNode = transformedTermNode, ///
43
- variableNode = transformedVariableNode, ///
44
- termString = localContext.nodeAsString(termNode),
45
- variableString = localContext.nodeAsString(variableNode),
46
- string = `[${termString} for ${variableString}]`,
47
- substitutionNode = null,
48
- termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
52
+ setSubstitutionNodeAndTokens(localContext) {
53
+ const lexer = localContext.getLexer(),
54
+ parser = localContext.getParser(),
55
+ substitutionString = this.getSubstitutionString(),
56
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
57
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
58
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
49
59
 
50
- transformedSubstitution = termForVariableSubstitution; ///
51
- }
60
+ this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
52
61
 
53
- return transformedSubstitution;
62
+ this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
54
63
  }
55
64
 
56
65
  isEqualTo(substitution) {
57
66
  let equalTo = false;
58
67
 
59
- const termNode = substitution.getTermNode(),
60
- variableNode = substitution.getVariableNode();
68
+ const term = substitution.getTerm(),
69
+ variable = substitution.getVariable();
61
70
 
62
- if ((termNode !== null) && (variableNode !== null)) {
63
- const termNodeMatches = this.matchTermNode(termNode),
71
+ if ((term !== null) && (variable !== null)) {
72
+ const termNode = term.getNode(),
73
+ variableNode = variable.getNode(),
74
+ termNodeMatches = this.matchTermNode(termNode),
64
75
  variableNodeMatches = this.matchVariableNode(variableNode);
65
76
 
66
77
  equalTo = (termNodeMatches && variableNodeMatches);
@@ -70,21 +81,39 @@ export default class TermForVariableSubstitution extends Substitution {
70
81
  }
71
82
 
72
83
  matchTermNode(termNode) {
73
- termNode = stripBracketsFromTerm(termNode); ///
84
+ termNode = stripBracketsFromTermNode(termNode); ///
74
85
 
75
- const termNodeMatches = this.termNode.match(termNode);
86
+ const termNodeMatches = this.term.matchTermNode(termNode);
76
87
 
77
88
  return termNodeMatches;
78
89
  }
79
90
 
80
- matchVariableNode(variableNode) {
81
- const variableNodeMatches = this.variableNode.match(variableNode);
91
+ matchVariableName(variableName) {
92
+ let variableNameMatches;
93
+
94
+ const variableNameA = variableName; ///
95
+
96
+ variableName = this.variable.getName();
97
+
98
+ const variableNameB = variableName; ///
99
+
100
+ variableNameMatches = (variableNameA === variableNameB);
82
101
 
83
- return variableNodeMatches;
102
+ return variableNameMatches;
84
103
  }
85
104
 
86
105
  matchSubstitutionNode(substitutionNode) {
87
- const substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
106
+ let substitutionNodeMatches;
107
+
108
+ if ((substitutionNode === null) && (this.substitutionNode === null)) {
109
+ substitutionNodeMatches = true;
110
+ } else if ((substitutionNode === null) && (this.substitutionNode !== null)) {
111
+ substitutionNodeMatches = false;
112
+ } else if ((substitutionNode !== null) && (this.substitutionNode === null)) {
113
+ substitutionNodeMatches = false;
114
+ } else {
115
+ substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
116
+ }
88
117
 
89
118
  return substitutionNodeMatches;
90
119
  }
@@ -92,10 +121,12 @@ export default class TermForVariableSubstitution extends Substitution {
92
121
  unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
93
122
  let unifiedWithEquivalence;
94
123
 
95
- const equivalenceMatchesTermNode = equivalence.matchTermNode(this.termNode);
124
+ const termNode = this.term.getNode(),
125
+ equivalenceMatchesTermNode = equivalence.matchTermNode(termNode);
96
126
 
97
127
  if (equivalenceMatchesTermNode) {
98
- const equivalenceMatchesVariableNode = equivalence.matchVariableNode(this.variableNode);
128
+ const variableNode = this.variable.getNode(),
129
+ equivalenceMatchesVariableNode = equivalence.matchVariableNode(variableNode);
99
130
 
100
131
  if (equivalenceMatchesVariableNode) {
101
132
  unifiedWithEquivalence = true;
@@ -111,18 +142,17 @@ export default class TermForVariableSubstitution extends Substitution {
111
142
  const substitutionNode = substitutionNodeQuery(statementNode);
112
143
 
113
144
  if (substitutionNode !== null) {
114
- let substitutionTermNode = substitutionTermNodeQuery(substitutionNode);
145
+ const termNode = termNodeQuery(substitutionNode),
146
+ variableNode = variableNodeQuery(substitutionNode);
115
147
 
116
- if (substitutionTermNode !== null) {
148
+ if ((termNode !== null) && (variableNode !== null)) {
117
149
  const { Term, Variable } = shim,
118
- substitutionVariableNode = substitutionsVariableNodeQuery(substitutionNode),
119
- variableNode = substitutionVariableNode, ///
120
- termNode = substitutionTermNode, ///
121
150
  term = Term.fromTermNode(termNode, localContext),
122
151
  variable = Variable.fromVariableNode(variableNode, localContext),
123
- string = stringFromTermAndVariable(term, variable, localContext);
152
+ string = stringFromTermAndVariable(term, variable, localContext),
153
+ substitutionTokens = localContext.nodeAsTokens(substitutionNode);
124
154
 
125
- termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
155
+ termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
126
156
  }
127
157
  }
128
158
 
@@ -132,62 +162,21 @@ export default class TermForVariableSubstitution extends Substitution {
132
162
  static fromTernAndVariable(term, variable, localContext) {
133
163
  let termNode = term.getNode();
134
164
 
135
- termNode = stripBracketsFromTerm(termNode); ///
165
+ termNode = stripBracketsFromTermNode(termNode); ///
166
+
167
+ const { Term } = shim;
168
+
169
+ term = Term.fromTermNode(termNode, localContext);
136
170
 
137
171
  const string = stringFromTermAndVariable(term, variable, localContext),
138
- variableNode = variable.getNode(),
139
172
  substitutionNode = null,
140
- termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
173
+ substitutionTokens = null,
174
+ termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
141
175
 
142
176
  return termForVariableSubstitution;
143
177
  }
144
178
  }
145
179
 
146
- function transformTermNode(termNode, substitutions) {
147
- let transformedTermNode = null;
148
-
149
- const termVariableNode = termVariableNodeQuery(termNode);
150
-
151
- if (termVariableNode !== null) {
152
- const variableNode = termVariableNode; ///
153
-
154
- substitutions.someSubstitution((substitution) => {
155
- const substitutionMatchesVariableNode = substitution.matchVariableNode(variableNode);
156
-
157
- if (substitutionMatchesVariableNode) {
158
- const termNode = substitution.getTermNode();
159
-
160
- transformedTermNode = termNode; ////
161
-
162
- return true;
163
- }
164
- });
165
- }
166
-
167
- return transformedTermNode;
168
- }
169
-
170
- function transformVariableNode(variableNode, substitutions) {
171
- let transformedVariableNode = null;
172
-
173
- substitutions.someSubstitution((substitution) => {
174
- const variableNodeMatches = substitution.matchVariableNode(variableNode);
175
-
176
- if (variableNodeMatches) {
177
- const termNode = substitution.getTermNode(),
178
- termVariableNode = termVariableNodeQuery(termNode);
179
-
180
- if (termVariableNode !== null) {
181
- transformedVariableNode = termVariableNode; ///
182
-
183
- return true;
184
- }
185
- }
186
- });
187
-
188
- return transformedVariableNode;
189
- }
190
-
191
180
  function stringFromTermAndVariable(term, variable, localContext) {
192
181
  const termNode = term.getNode(),
193
182
  termString = localContext.nodeAsString(termNode),
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
 
3
- export default class Substitution {
3
+ import shim from "./shim";
4
+
5
+ class Substitution {
4
6
  constructor(string) {
5
7
  this.string = string;
6
8
  }
@@ -9,34 +11,22 @@ export default class Substitution {
9
11
  return this.string;
10
12
  }
11
13
 
12
- getTermNode() {
13
- const termNode = null;
14
+ getTerm() {
15
+ const term = null;
14
16
 
15
- return termNode;
17
+ return term;
16
18
  }
17
19
 
18
- getFrameNode() {
19
- const frameNode = null;
20
+ getFrame() {
21
+ const frame = null;
20
22
 
21
- return frameNode;
23
+ return frame;
22
24
  }
23
25
 
24
- getStatementNode() {
25
- const statementNode = null;
26
+ getStatement() {
27
+ const statement = null;
26
28
 
27
- return statementNode;
28
- }
29
-
30
- getVariableNode() {
31
- const variableNode = null;
32
-
33
- return variableNode;
34
- }
35
-
36
- getMetavariableNode() {
37
- const metavariableNode = null;
38
-
39
- return metavariableNode;
29
+ return statement;
40
30
  }
41
31
 
42
32
  getSubstitutionNode() {
@@ -45,6 +35,12 @@ export default class Substitution {
45
35
  return substitutionNode;
46
36
  }
47
37
 
38
+ getMetavariableName() {
39
+ const metavariableName = null;
40
+
41
+ return metavariableName;
42
+ }
43
+
48
44
  isSimple() {
49
45
  const simple = true;
50
46
 
@@ -82,28 +78,28 @@ export default class Substitution {
82
78
  return frameNodeMatches;
83
79
  }
84
80
 
85
- matchVariableNode(variableNode) {
86
- const variableNodeMatches = false;
87
-
88
- return variableNodeMatches;
89
- }
90
-
91
81
  matchStatementNode(statementNode) {
92
82
  const statementNodeMatches = false;
93
83
 
94
84
  return statementNodeMatches;
95
85
  }
96
86
 
97
- matchMetavariableNode(metavariableNode) {
98
- const metavariableNodeMatches = false;
87
+ matchVariableName(variableName) {
88
+ const variableNameMatches = false;
99
89
 
100
- return metavariableNodeMatches;
90
+ return variableNameMatches;
101
91
  }
102
92
 
103
- matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
104
- const metavariableNodeAndSubstitutionNodeMatches = false;
93
+ matchMetavariableName(metavariableName) {
94
+ const metavariableNameMatches = false;
105
95
 
106
- return metavariableNodeAndSubstitutionNodeMatches;
96
+ return metavariableNameMatches;
97
+ }
98
+
99
+ matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
100
+ const metavariableNameAndSubstitutionNodeMatches = false;
101
+
102
+ return metavariableNameAndSubstitutionNodeMatches;
107
103
  }
108
104
 
109
105
  unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
@@ -124,3 +120,9 @@ export default class Substitution {
124
120
  return unifiedWithEquivalences;
125
121
  }
126
122
  }
123
+
124
+ Object.assign(shim, {
125
+ Substitution
126
+ });
127
+
128
+ export default Substitution;