occam-verify-cli 0.0.1089 → 0.0.1091
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.
- package/bin/action/verify.js +2 -2
- package/lib/assertion/contained.js +35 -41
- package/lib/assertion/defined.js +24 -24
- package/lib/assertion/subproof.js +24 -24
- package/lib/assertion/type.js +23 -23
- package/lib/assignment/equality.js +4 -10
- package/lib/assignment/judgement.js +4 -4
- package/lib/assignment/variable.js +4 -4
- package/lib/combinator/bracketed.js +3 -3
- package/lib/conclusion.js +11 -13
- package/lib/consequent.js +11 -13
- package/lib/constructor/bracketed.js +3 -3
- package/lib/constructor.js +2 -2
- package/lib/context/file.js +28 -27
- package/lib/context/local.js +31 -32
- package/lib/context/release.js +6 -3
- package/lib/declaration.js +18 -18
- package/lib/derivation.js +3 -3
- package/lib/equality.js +24 -24
- package/lib/equivalence.js +13 -13
- package/lib/frame.js +43 -43
- package/lib/index.js +2 -1
- package/lib/judgement.js +20 -20
- package/lib/label.js +9 -1
- package/lib/metaType.js +2 -2
- package/lib/metavariable.js +40 -39
- package/lib/mixins/statement/qualified/unify.js +19 -19
- package/lib/mixins/statement/resolve.js +11 -11
- package/lib/mixins/statement/unify.js +12 -12
- package/lib/mixins/statement/verify.js +36 -36
- package/lib/mixins/term/verify.js +2 -2
- package/lib/premise.js +31 -40
- package/lib/proof.js +6 -5
- package/lib/proofStep.js +17 -17
- package/lib/reference.js +8 -8
- package/lib/rule.js +21 -21
- package/lib/statement/qualified.js +17 -17
- package/lib/statement/unqualified.js +19 -19
- package/lib/statement.js +52 -54
- package/lib/subDerivation.js +3 -3
- package/lib/subproof.js +6 -5
- package/lib/substitution/frameForMetavariable.js +16 -39
- package/lib/substitution/statementForMetavariable.js +88 -74
- package/lib/substitution/termForVariable.js +15 -41
- package/lib/substitution.js +20 -6
- package/lib/substitutions.js +13 -13
- package/lib/supposition.js +31 -40
- package/lib/term.js +28 -28
- package/lib/topLevelAssertion.js +33 -21
- package/lib/unifier/equality.js +8 -8
- package/lib/unifier/intrinsicLevel.js +149 -0
- package/lib/unifier/metaLevel.js +41 -31
- package/lib/unifier/metavariable.js +14 -8
- package/lib/unifier/statementWithCombinator.js +16 -16
- package/lib/unifier/termWithConstructor.js +6 -6
- package/lib/unifier.js +47 -47
- package/lib/utilities/assignments.js +3 -3
- package/lib/utilities/equivalences.js +14 -14
- package/lib/utilities/json.js +22 -21
- package/lib/utilities/unifier.js +7 -8
- package/lib/variable.js +33 -33
- package/lib/verifier/statementAsCombinator.js +2 -2
- package/lib/verifier/termAsConstructor.js +2 -2
- package/package.json +2 -2
- package/src/assertion/contained.js +37 -45
- package/src/assertion/defined.js +25 -25
- package/src/assertion/subproof.js +25 -28
- package/src/assertion/type.js +23 -23
- package/src/assignment/equality.js +4 -6
- package/src/assignment/judgement.js +4 -4
- package/src/assignment/variable.js +4 -4
- package/src/combinator/bracketed.js +2 -2
- package/src/conclusion.js +14 -15
- package/src/consequent.js +14 -15
- package/src/constructor/bracketed.js +2 -2
- package/src/constructor.js +3 -2
- package/src/context/file.js +26 -25
- package/src/context/local.js +21 -23
- package/src/context/release.js +5 -3
- package/src/declaration.js +20 -20
- package/src/derivation.js +2 -2
- package/src/equality.js +26 -26
- package/src/equivalence.js +12 -12
- package/src/frame.js +42 -42
- package/src/index.js +1 -0
- package/src/judgement.js +25 -25
- package/src/label.js +14 -0
- package/src/metaType.js +1 -1
- package/src/metavariable.js +51 -43
- package/src/mixins/statement/qualified/unify.js +21 -21
- package/src/mixins/statement/resolve.js +12 -12
- package/src/mixins/statement/unify.js +11 -11
- package/src/mixins/statement/verify.js +35 -35
- package/src/mixins/term/verify.js +1 -1
- package/src/premise.js +42 -53
- package/src/proof.js +6 -4
- package/src/proofStep.js +21 -21
- package/src/reference.js +12 -11
- package/src/rule.js +20 -20
- package/src/statement/qualified.js +18 -17
- package/src/statement/unqualified.js +19 -18
- package/src/statement.js +63 -66
- package/src/subDerivation.js +2 -3
- package/src/subproof.js +6 -4
- package/src/substitution/frameForMetavariable.js +29 -45
- package/src/substitution/statementForMetavariable.js +136 -86
- package/src/substitution/termForVariable.js +28 -49
- package/src/substitution.js +15 -5
- package/src/substitutions.js +12 -12
- package/src/supposition.js +41 -53
- package/src/term.js +27 -27
- package/src/topLevelAssertion.js +32 -19
- package/src/unifier/equality.js +7 -7
- package/src/unifier/intrinsicLevel.js +61 -0
- package/src/unifier/metaLevel.js +60 -46
- package/src/unifier/metavariable.js +22 -13
- package/src/unifier/statementWithCombinator.js +28 -28
- package/src/unifier/termWithConstructor.js +8 -8
- package/src/unifier.js +55 -55
- package/src/utilities/assignments.js +2 -2
- package/src/utilities/equivalences.js +13 -13
- package/src/utilities/json.js +76 -66
- package/src/utilities/unifier.js +10 -12
- package/src/variable.js +43 -40
- package/src/verifier/statementAsCombinator.js +2 -1
- package/src/verifier/termAsConstructor.js +2 -1
|
@@ -5,12 +5,19 @@ import Substitution from "../substitution";
|
|
|
5
5
|
import LocalContext from "../context/local";
|
|
6
6
|
import metaLevelUnifier from "../unifier/metaLevel";
|
|
7
7
|
|
|
8
|
+
import { nodeQuery } from "../utilities/query";
|
|
8
9
|
import { stripBracketsFromStatementNode } from "../utilities/brackets";
|
|
9
10
|
import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
|
|
11
|
+
import { unqualifiedStatementTokensFromUnqualifiedStatementString, substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
|
|
12
|
+
import { substitutionNodeFromUnqualifiedStatementNode,
|
|
13
|
+
unqualifiedStatementStringFromSubstitutionString,
|
|
14
|
+
unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
const substitutionNodeQuery = nodeQuery("/statement/substitution");
|
|
17
|
+
|
|
18
|
+
class StatementForMetavariableSubstitution extends Substitution {
|
|
19
|
+
constructor(string, node, tokens, resolved, statement, metavariable, substitution) {
|
|
20
|
+
super(string, node, tokens);
|
|
14
21
|
|
|
15
22
|
this.resolved = resolved;
|
|
16
23
|
this.statement = statement;
|
|
@@ -46,78 +53,114 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
46
53
|
return simple;
|
|
47
54
|
}
|
|
48
55
|
|
|
49
|
-
|
|
56
|
+
matchStatementNode(statementNode) {
|
|
57
|
+
statementNode = stripBracketsFromStatementNode(statementNode); ///
|
|
58
|
+
|
|
59
|
+
const statementNodeMatches = this.statement.matchStatementNode(statementNode);
|
|
60
|
+
|
|
61
|
+
return statementNodeMatches;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
matchMetavariableNode(metavariableNode) { return this.metavariable.matchMetavariableNode(metavariableNode); }
|
|
65
|
+
|
|
66
|
+
matchSubstitutionNode(substitutionNode) {
|
|
67
|
+
debugger
|
|
68
|
+
|
|
69
|
+
let substitutionNodeMatches;
|
|
70
|
+
|
|
71
|
+
if ((substitutionNode === null) && (this.substitution === null)) {
|
|
72
|
+
substitutionNodeMatches = true;
|
|
73
|
+
} else if ((substitutionNode === null) && (this.substitution !== null)) {
|
|
74
|
+
substitutionNodeMatches = false;
|
|
75
|
+
} else if ((substitutionNode !== null) && (this.substitution === null)) {
|
|
76
|
+
substitutionNodeMatches = false;
|
|
77
|
+
} else {
|
|
78
|
+
substitutionNodeMatches = this.substitution.matchSubstitutionNode(substitutionNode);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return substitutionNodeMatches;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
85
|
+
const metavariableNodeMatches = this.matchMetavariableNode(metavariableNode),
|
|
86
|
+
substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
|
|
87
|
+
metavariableNodeAndSubstitutionNodeMatches = (metavariableNodeMatches && substitutionNodeMatches);
|
|
88
|
+
|
|
89
|
+
return metavariableNodeAndSubstitutionNodeMatches;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
resolve(substitutions, generalContext, specificContext) {
|
|
50
93
|
const substitutionString = this.string;
|
|
51
94
|
|
|
52
95
|
const metavariableNode = this.getMetavariableNode(),
|
|
53
96
|
simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNode);
|
|
54
97
|
|
|
55
98
|
if (simpleSubstitution !== null) {
|
|
56
|
-
|
|
99
|
+
specificContext.trace(`Resolving the ${substitutionString} substitution...`);
|
|
57
100
|
|
|
58
101
|
const substitution = simpleSubstitution, ///
|
|
59
|
-
|
|
102
|
+
substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, generalContext, specificContext);
|
|
60
103
|
|
|
61
104
|
this.resolved = substitutionResolved; ///
|
|
62
105
|
|
|
63
106
|
if (this.resolved) {
|
|
64
|
-
|
|
107
|
+
specificContext.debug(`...resolved the ${substitutionString} substitution.`);
|
|
65
108
|
}
|
|
66
109
|
}
|
|
67
110
|
}
|
|
68
111
|
|
|
69
|
-
resolveSubstitution(substitution, statement, substitutions,
|
|
112
|
+
resolveSubstitution(substitution, statement, substitutions, generalContext, specificContext) {
|
|
70
113
|
let substitutionResolved = false;
|
|
71
114
|
|
|
72
115
|
const substitutionString = substitution.getString();
|
|
73
116
|
|
|
74
|
-
|
|
117
|
+
specificContext.trace(`Resolving the ${substitutionString} substitution...`);
|
|
75
118
|
|
|
76
|
-
const
|
|
77
|
-
|
|
119
|
+
const generalSubstitution = substitution, ///
|
|
120
|
+
specificSubstitution = this.unifyStatement(statement, specificContext, specificContext); ///
|
|
78
121
|
|
|
79
|
-
if (
|
|
80
|
-
|
|
122
|
+
if (specificSubstitution !== null) {
|
|
123
|
+
generalContext = contextFromLocalContextAndSubstitution(generalContext, generalSubstitution); ///
|
|
81
124
|
|
|
82
|
-
|
|
125
|
+
specificContext = contextFromLocalContextAndSubstitution(specificContext, specificSubstitution); ///
|
|
83
126
|
|
|
84
127
|
substitutions.snapshot();
|
|
85
128
|
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
129
|
+
const generalSubstitutionNode = generalSubstitution.getSubstitutionNode(), ///
|
|
130
|
+
specificSubstitutionNode = specificSubstitution.getSubstitutionNode(), ///
|
|
131
|
+
generalSubstitutionString = generalContext.nodeAsString(generalSubstitutionNode),
|
|
132
|
+
specificSubstitutionString = specificContext.nodeAsString(specificSubstitutionNode);
|
|
90
133
|
|
|
91
|
-
|
|
134
|
+
specificContext.trace(`Unifying the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution...`);
|
|
92
135
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
unifiedAtMetaLevel = metaLevelUnifier.unify(
|
|
136
|
+
const generalNode = generalSubstitutionNode, ///
|
|
137
|
+
specificNode = specificSubstitutionNode, ///
|
|
138
|
+
unifiedAtMetaLevel = metaLevelUnifier.unify(generalNode, specificNode, substitutions, generalContext, specificContext);
|
|
96
139
|
|
|
97
140
|
if (unifiedAtMetaLevel) {
|
|
98
|
-
|
|
141
|
+
specificContext.trace(`...unified the '${specificSubstitutionString}' substitution with the '${generalSubstitutionString}' substitution.`);
|
|
99
142
|
}
|
|
100
143
|
|
|
101
144
|
unifiedAtMetaLevel ?
|
|
102
145
|
substitutions.continue() :
|
|
103
|
-
substitutions.rollback(
|
|
146
|
+
substitutions.rollback(specificContext);
|
|
104
147
|
|
|
105
148
|
substitutionResolved = unifiedAtMetaLevel; ///
|
|
106
149
|
}
|
|
107
150
|
|
|
108
151
|
if (substitutionResolved) {
|
|
109
|
-
|
|
152
|
+
specificContext.debug(`...resolved the ${substitutionString} substitution.`);
|
|
110
153
|
}
|
|
111
154
|
|
|
112
155
|
return substitutionResolved;
|
|
113
156
|
}
|
|
114
157
|
|
|
115
|
-
unifyStatement(statement,
|
|
116
|
-
let
|
|
158
|
+
unifyStatement(statement, generalContext, specificContext) {
|
|
159
|
+
let specificSubstitution = null;
|
|
117
160
|
|
|
118
161
|
const { Substitutions } = shim,
|
|
119
162
|
substitutions = Substitutions.fromNothing(),
|
|
120
|
-
statementUnified = this.statement.unifyStatement(statement, substitutions,
|
|
163
|
+
statementUnified = this.statement.unifyStatement(statement, substitutions, generalContext, specificContext);
|
|
121
164
|
|
|
122
165
|
if (statementUnified) {
|
|
123
166
|
const substitutionsLength = substitutions.getLength();
|
|
@@ -125,45 +168,11 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
125
168
|
if (substitutionsLength === 1) {
|
|
126
169
|
const firstSubstitution = substitutions.getFirstSubstitution();
|
|
127
170
|
|
|
128
|
-
|
|
171
|
+
specificSubstitution = firstSubstitution; ///
|
|
129
172
|
}
|
|
130
173
|
}
|
|
131
174
|
|
|
132
|
-
return
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
matchStatementNode(statementNode) {
|
|
136
|
-
statementNode = stripBracketsFromStatementNode(statementNode); ///
|
|
137
|
-
|
|
138
|
-
const statementNodeMatches = this.statement.matchStatementNode(statementNode);
|
|
139
|
-
|
|
140
|
-
return statementNodeMatches;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
matchMetavariableNode(metavariableNode) { return this.metavariable.matchMetavariableNode(metavariableNode); }
|
|
144
|
-
|
|
145
|
-
matchSubstitutionNode(substitutionNode) {
|
|
146
|
-
let substitutionNodeMatches;
|
|
147
|
-
|
|
148
|
-
if ((substitutionNode === null) && (this.substitution === null)) {
|
|
149
|
-
substitutionNodeMatches = true;
|
|
150
|
-
} else if ((substitutionNode === null) && (this.substitution !== null)) {
|
|
151
|
-
substitutionNodeMatches = false;
|
|
152
|
-
} else if ((substitutionNode !== null) && (this.substitution === null)) {
|
|
153
|
-
substitutionNodeMatches = false;
|
|
154
|
-
} else {
|
|
155
|
-
substitutionNodeMatches = this.substitution.matchSubstitutionNode(substitutionNode);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return substitutionNodeMatches;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
|
|
162
|
-
const metavariableNodeMatches = this.matchMetavariableNode(metavariableNode),
|
|
163
|
-
substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
|
|
164
|
-
metavariableNodeAndSubstitutionNodeMatches = (metavariableNodeMatches && substitutionNodeMatches);
|
|
165
|
-
|
|
166
|
-
return metavariableNodeAndSubstitutionNodeMatches;
|
|
175
|
+
return specificSubstitution;
|
|
167
176
|
}
|
|
168
177
|
|
|
169
178
|
toJSON() {
|
|
@@ -183,66 +192,107 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
183
192
|
|
|
184
193
|
static fromJSON(json, fileContext) {
|
|
185
194
|
const { string } = json,
|
|
195
|
+
lexer = fileContext.getLexer(),
|
|
196
|
+
parser = fileContext.getParser(),
|
|
197
|
+
substitutionString = string, ///
|
|
198
|
+
unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
|
|
199
|
+
unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
200
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
|
|
201
|
+
substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
|
|
202
|
+
substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
|
|
203
|
+
node = substitutionNode, ///
|
|
204
|
+
tokens = substitutionTokens, ///
|
|
186
205
|
resolved = true,
|
|
187
206
|
statement = statementFromJSON(json, fileContext),
|
|
188
207
|
metavariable = metavariableFromJSON(json, fileContext),
|
|
189
208
|
substitution = null, ///
|
|
190
|
-
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, resolved, statement, metavariable, substitution);
|
|
209
|
+
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
|
|
191
210
|
|
|
192
211
|
return statementForMetavariableSubstitution;
|
|
193
212
|
}
|
|
194
213
|
|
|
195
|
-
static fromStatementAndMetavariable(statement, metavariable,
|
|
214
|
+
static fromStatementAndMetavariable(statement, metavariable, context) {
|
|
196
215
|
let statementNode = statement.getNode();
|
|
197
216
|
|
|
198
217
|
statementNode = stripBracketsFromStatementNode(statementNode); ///
|
|
199
218
|
|
|
200
219
|
const { Statement } = shim;
|
|
201
220
|
|
|
202
|
-
statement = Statement.fromStatementNode(statementNode,
|
|
203
|
-
|
|
204
|
-
const
|
|
221
|
+
statement = Statement.fromStatementNode(statementNode, context);
|
|
222
|
+
|
|
223
|
+
const lexer = context.getLexer(),
|
|
224
|
+
parser = context.getParser(),
|
|
225
|
+
string = stringFromStatementAndMetavariable(statement, metavariable),
|
|
226
|
+
substitutionString = string, ///
|
|
227
|
+
unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
|
|
228
|
+
unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
229
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
|
|
230
|
+
substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
|
|
231
|
+
substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
|
|
232
|
+
node = substitutionNode, ///
|
|
233
|
+
tokens = substitutionTokens, ///
|
|
205
234
|
resolved = true,
|
|
206
|
-
|
|
207
|
-
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, resolved, statement, metavariable, substitution);
|
|
235
|
+
substitution = null,
|
|
236
|
+
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
|
|
208
237
|
|
|
209
238
|
return statementForMetavariableSubstitution;
|
|
210
239
|
}
|
|
211
240
|
|
|
212
|
-
static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution,
|
|
241
|
+
static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context) {
|
|
213
242
|
let statementNode = statement.getNode();
|
|
214
243
|
|
|
215
244
|
statementNode = stripBracketsFromStatementNode(statementNode); ///
|
|
216
245
|
|
|
217
246
|
const { Statement } = shim;
|
|
218
247
|
|
|
219
|
-
statement = Statement.fromStatementNode(statementNode,
|
|
220
|
-
|
|
221
|
-
const
|
|
248
|
+
statement = Statement.fromStatementNode(statementNode, context);
|
|
249
|
+
|
|
250
|
+
const lexer = context.getLexer(),
|
|
251
|
+
parser = context.getParser(),
|
|
252
|
+
string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context),
|
|
253
|
+
substitutionString = string, ///
|
|
254
|
+
unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
|
|
255
|
+
unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
256
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
|
|
257
|
+
substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
|
|
258
|
+
substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
|
|
259
|
+
node = substitutionNode, ///
|
|
260
|
+
tokens = substitutionTokens, ///
|
|
222
261
|
resolved = false,
|
|
223
|
-
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, resolved, statement, metavariable, substitution);
|
|
262
|
+
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, node, tokens, resolved, statement, metavariable, substitution);
|
|
224
263
|
|
|
225
264
|
return statementForMetavariableSubstitution;
|
|
226
265
|
}
|
|
227
266
|
}
|
|
228
267
|
|
|
229
|
-
|
|
230
|
-
|
|
268
|
+
Object.assign(shim, {
|
|
269
|
+
StatementForMetavariableSubstitution
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
export default StatementForMetavariableSubstitution;
|
|
231
273
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
tokens = substitutionTokens
|
|
274
|
+
function contextFromLocalContextAndSubstitution(context, substitution) {
|
|
275
|
+
const substitutionTokens = substitution.getTokens(),
|
|
276
|
+
tokens = substitutionTokens, ///
|
|
277
|
+
localContext = LocalContext.fromContextAndTokens(context, tokens); ///
|
|
235
278
|
|
|
236
|
-
|
|
279
|
+
context = localContext; ///
|
|
237
280
|
|
|
238
|
-
return
|
|
281
|
+
return context;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function stringFromStatementAndMetavariable(statement, metavariable) {
|
|
285
|
+
const statementString = statement.getString(),
|
|
286
|
+
metavariableString = metavariable.getString(),
|
|
287
|
+
string = `[${statementString} for ${metavariableString}]`;
|
|
288
|
+
|
|
289
|
+
return string;
|
|
239
290
|
}
|
|
240
291
|
|
|
241
|
-
function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution
|
|
292
|
+
function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution) {
|
|
242
293
|
let string;
|
|
243
294
|
|
|
244
|
-
const
|
|
245
|
-
statementString = localContext.nodeAsString(statementNode),
|
|
295
|
+
const statementString = statement.getString(),
|
|
246
296
|
metavariableString = metavariable.getString();
|
|
247
297
|
|
|
248
298
|
if (substitution === null) {
|
|
@@ -16,13 +16,11 @@ const termNodeQuery = nodeQuery("/substitution/term[0]"),
|
|
|
16
16
|
substitutionNodeQuery = nodeQuery("/statement/substitution");
|
|
17
17
|
|
|
18
18
|
export default class TermForVariableSubstitution extends Substitution {
|
|
19
|
-
constructor(string,
|
|
20
|
-
super(string);
|
|
19
|
+
constructor(string, node, tokens, term, variable) {
|
|
20
|
+
super(string, node, tokens);
|
|
21
21
|
|
|
22
22
|
this.term = term;
|
|
23
23
|
this.variable = variable;
|
|
24
|
-
this.substitutionNode = substitutionNode;
|
|
25
|
-
this.substitutionTokens = substitutionTokens;
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
getTerm() {
|
|
@@ -33,35 +31,6 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
33
31
|
return this.variable;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
|
-
getSubstitutionNode() {
|
|
37
|
-
return this.substitutionNode;
|
|
38
|
-
}
|
|
39
|
-
|
|
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}]`;
|
|
48
|
-
|
|
49
|
-
return substitutionString;
|
|
50
|
-
}
|
|
51
|
-
|
|
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);
|
|
59
|
-
|
|
60
|
-
this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
|
|
61
|
-
|
|
62
|
-
this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
34
|
isEqualTo(substitution) {
|
|
66
35
|
let equalTo = false;
|
|
67
36
|
|
|
@@ -103,6 +72,8 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
103
72
|
}
|
|
104
73
|
|
|
105
74
|
matchSubstitutionNode(substitutionNode) {
|
|
75
|
+
debugger
|
|
76
|
+
|
|
106
77
|
let substitutionNodeMatches;
|
|
107
78
|
|
|
108
79
|
if ((substitutionNode === null) && (this.substitutionNode === null)) {
|
|
@@ -118,7 +89,7 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
118
89
|
return substitutionNodeMatches;
|
|
119
90
|
}
|
|
120
91
|
|
|
121
|
-
unifyWithEquivalence(equivalence, substitutions,
|
|
92
|
+
unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext) {
|
|
122
93
|
let unifiedWithEquivalence;
|
|
123
94
|
|
|
124
95
|
const termNode = this.term.getNode(),
|
|
@@ -136,7 +107,7 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
136
107
|
return unifiedWithEquivalence;
|
|
137
108
|
}
|
|
138
109
|
|
|
139
|
-
static fromStatementNode(statementNode,
|
|
110
|
+
static fromStatementNode(statementNode, context) {
|
|
140
111
|
let termForVariableSubstitution = null;
|
|
141
112
|
|
|
142
113
|
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
@@ -147,39 +118,47 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
147
118
|
|
|
148
119
|
if ((termNode !== null) && (variableNode !== null)) {
|
|
149
120
|
const { Term, Variable } = shim,
|
|
150
|
-
term = Term.fromTermNode(termNode,
|
|
151
|
-
variable = Variable.fromVariableNode(variableNode,
|
|
152
|
-
|
|
153
|
-
|
|
121
|
+
term = Term.fromTermNode(termNode, context),
|
|
122
|
+
variable = Variable.fromVariableNode(variableNode, context),
|
|
123
|
+
node = substitutionNode, ///
|
|
124
|
+
tokens = context.nodeAsTokens(node),
|
|
125
|
+
string = stringFromTermAndVariable(term, variable);
|
|
154
126
|
|
|
155
|
-
termForVariableSubstitution = new TermForVariableSubstitution(string,
|
|
127
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, node, tokens, term, variable);
|
|
156
128
|
}
|
|
157
129
|
}
|
|
158
130
|
|
|
159
131
|
return termForVariableSubstitution;
|
|
160
132
|
}
|
|
161
133
|
|
|
162
|
-
static fromTernAndVariable(term, variable,
|
|
134
|
+
static fromTernAndVariable(term, variable, context) {
|
|
163
135
|
let termNode = term.getNode();
|
|
164
136
|
|
|
165
137
|
termNode = stripBracketsFromTermNode(termNode); ///
|
|
166
138
|
|
|
167
139
|
const { Term } = shim;
|
|
168
140
|
|
|
169
|
-
term = Term.fromTermNode(termNode,
|
|
141
|
+
term = Term.fromTermNode(termNode, context);
|
|
170
142
|
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
143
|
+
const lexer = context.getLexer(),
|
|
144
|
+
parser = context.getParser(),
|
|
145
|
+
string = stringFromTermAndVariable(term, variable),
|
|
146
|
+
substitutionString = string, ///
|
|
147
|
+
unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
|
|
148
|
+
unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
149
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
|
|
150
|
+
substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode),
|
|
151
|
+
substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, substitutionNode),
|
|
152
|
+
node = substitutionNode, //
|
|
153
|
+
tokens = substitutionTokens, ///
|
|
154
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, node, tokens, term, variable);
|
|
175
155
|
|
|
176
156
|
return termForVariableSubstitution;
|
|
177
157
|
}
|
|
178
158
|
}
|
|
179
159
|
|
|
180
|
-
function stringFromTermAndVariable(term, variable
|
|
181
|
-
const
|
|
182
|
-
termString = localContext.nodeAsString(termNode),
|
|
160
|
+
function stringFromTermAndVariable(term, variable) {
|
|
161
|
+
const termString = term.getString(),
|
|
183
162
|
variableString = variable.getString(),
|
|
184
163
|
string = `[${termString} for ${variableString}]`;
|
|
185
164
|
|
package/src/substitution.js
CHANGED
|
@@ -3,14 +3,24 @@
|
|
|
3
3
|
import shim from "./shim";
|
|
4
4
|
|
|
5
5
|
class Substitution {
|
|
6
|
-
constructor(string) {
|
|
6
|
+
constructor(string, node, tokens) {
|
|
7
7
|
this.string = string;
|
|
8
|
+
this.node = node;
|
|
9
|
+
this.tokens = tokens;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
getString() {
|
|
11
13
|
return this.string;
|
|
12
14
|
}
|
|
13
15
|
|
|
16
|
+
getNode() {
|
|
17
|
+
return this.node;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getTokens() {
|
|
21
|
+
return this.tokens;
|
|
22
|
+
}
|
|
23
|
+
|
|
14
24
|
getTerm() {
|
|
15
25
|
const term = null;
|
|
16
26
|
|
|
@@ -60,7 +70,7 @@ class Substitution {
|
|
|
60
70
|
return equalTo;
|
|
61
71
|
}
|
|
62
72
|
|
|
63
|
-
resolve(substitutions,
|
|
73
|
+
resolve(substitutions, context) {
|
|
64
74
|
const resolved = true;
|
|
65
75
|
|
|
66
76
|
return resolved;
|
|
@@ -102,15 +112,15 @@ class Substitution {
|
|
|
102
112
|
return metavariableNodeAndSubstitutionNodeMatches;
|
|
103
113
|
}
|
|
104
114
|
|
|
105
|
-
unifyWithEquivalence(equivalence, substitutions,
|
|
115
|
+
unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext) {
|
|
106
116
|
let unifiedWithEquivalence = false;
|
|
107
117
|
|
|
108
118
|
return unifiedWithEquivalence;
|
|
109
119
|
}
|
|
110
120
|
|
|
111
|
-
unifyWithEquivalences(equivalences, substitutions,
|
|
121
|
+
unifyWithEquivalences(equivalences, substitutions, generalContext, specificContext) {
|
|
112
122
|
const unifiedWithEquivalences = equivalences.some((equivalence) => {
|
|
113
|
-
const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions,
|
|
123
|
+
const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext);
|
|
114
124
|
|
|
115
125
|
if (substitutionUnifiedWithEquivalence) {
|
|
116
126
|
return true;
|
package/src/substitutions.js
CHANGED
|
@@ -186,15 +186,15 @@ class Substitutions {
|
|
|
186
186
|
return substitutionPresent;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
addSubstitution(substitution,
|
|
189
|
+
addSubstitution(substitution, context) {
|
|
190
190
|
this.array.push(substitution);
|
|
191
191
|
|
|
192
192
|
const substitutionString = substitution.getString();
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
context.trace(`Added the ${substitutionString} substitution.`);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
removeSubstitution(substitution,
|
|
197
|
+
removeSubstitution(substitution, context) {
|
|
198
198
|
const substitutionA = substitution; ///
|
|
199
199
|
|
|
200
200
|
prune(this.array, (substitution) => {
|
|
@@ -207,13 +207,13 @@ class Substitutions {
|
|
|
207
207
|
|
|
208
208
|
const substitutionString = substitution.getString();
|
|
209
209
|
|
|
210
|
-
|
|
210
|
+
context.trace(`Removed the ${substitutionString} substitution.`);
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
unifyWithEquivalences(equivalences,
|
|
213
|
+
unifyWithEquivalences(equivalences, context) {
|
|
214
214
|
const unifiedWithEquivalences = this.everySubstitution((substitution) => {
|
|
215
215
|
const substitutions = this, ///
|
|
216
|
-
substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions,
|
|
216
|
+
substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, context);
|
|
217
217
|
|
|
218
218
|
if (substitutionUnifiedWithEquivalence) {
|
|
219
219
|
return true;
|
|
@@ -223,7 +223,7 @@ class Substitutions {
|
|
|
223
223
|
return unifiedWithEquivalences;
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
resolve(
|
|
226
|
+
resolve(generalContext, specificContext) {
|
|
227
227
|
const metavariableNodes = this.getMetavariableNodes();
|
|
228
228
|
|
|
229
229
|
metavariableNodes.forEach((metavariableNode) => {
|
|
@@ -237,7 +237,7 @@ class Substitutions {
|
|
|
237
237
|
resolved = substitution.isResolved();
|
|
238
238
|
|
|
239
239
|
if (!resolved) {
|
|
240
|
-
substitution.resolve(substitutions,
|
|
240
|
+
substitution.resolve(substitutions, generalContext, specificContext);
|
|
241
241
|
}
|
|
242
242
|
});
|
|
243
243
|
|
|
@@ -273,7 +273,7 @@ class Substitutions {
|
|
|
273
273
|
];
|
|
274
274
|
}
|
|
275
275
|
|
|
276
|
-
rollback(
|
|
276
|
+
rollback(context) {
|
|
277
277
|
const array = [
|
|
278
278
|
...this.array
|
|
279
279
|
];
|
|
@@ -281,7 +281,7 @@ class Substitutions {
|
|
|
281
281
|
leftDifference(array, this.savedArray);
|
|
282
282
|
|
|
283
283
|
array.forEach((substitution) => {
|
|
284
|
-
this.removeSubstitution(substitution,
|
|
284
|
+
this.removeSubstitution(substitution, context);
|
|
285
285
|
});
|
|
286
286
|
|
|
287
287
|
this.array = [
|
|
@@ -295,9 +295,9 @@ class Substitutions {
|
|
|
295
295
|
this.savedArray = null;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
-
getString(
|
|
298
|
+
getString(generalContext, specificContext) {
|
|
299
299
|
let string = this.array.reduce((string, substitution) => {
|
|
300
|
-
const substitutionString = substitution.getString(
|
|
300
|
+
const substitutionString = substitution.getString(generalContext, specificContext);
|
|
301
301
|
|
|
302
302
|
string = (string === null) ?
|
|
303
303
|
substitutionString :
|