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.
- package/bin/action/verify.js +3 -2
- package/lib/assertion/contained.js +2 -2
- package/lib/assertion/defined.js +2 -2
- package/lib/assertion/subproof.js +3 -3
- package/lib/assignment/judgement.js +3 -3
- package/lib/axiom.js +11 -6
- package/lib/combinator.js +9 -9
- package/lib/conclusion.js +13 -10
- package/lib/conjecture.js +11 -6
- package/lib/consequent.js +13 -10
- package/lib/constructor.js +9 -9
- package/lib/context/file.js +34 -126
- package/lib/context/local.js +16 -5
- package/lib/context/release.js +2 -3
- package/lib/declaration.js +96 -2
- package/lib/equivalence.js +2 -2
- package/lib/frame.js +179 -98
- package/lib/index.js +22 -6
- package/lib/judgement.js +84 -5
- package/lib/label.js +12 -8
- package/lib/lemma.js +12 -12
- package/lib/metaLemma.js +120 -8
- package/lib/metaType.js +24 -3
- package/lib/metatheorem.js +145 -9
- package/lib/metavariable.js +128 -43
- package/lib/mixins/statement/qualified/unify.js +6 -10
- package/lib/mixins/statement/unify.js +4 -19
- package/lib/mixins/statement/verify.js +13 -13
- package/lib/mixins/term/unify.js +2 -2
- package/lib/premise.js +21 -13
- package/lib/reference.js +17 -17
- package/lib/rule.js +28 -40
- package/lib/statement/unqualified.js +34 -9
- package/lib/statement.js +7 -5
- package/lib/substitution/frameForMetavariable.js +75 -70
- package/lib/substitution/statementForMetavariable.js +83 -42
- package/lib/substitution/termForVariable.js +65 -68
- package/lib/substitution.js +46 -43
- package/lib/substitutions.js +52 -40
- package/lib/supposition.js +15 -11
- package/lib/term.js +6 -11
- package/lib/theorem.js +11 -6
- package/lib/topLevelAssertion.js +24 -42
- package/lib/type.js +5 -12
- package/lib/unifier/intrinsicLevel.js +4 -4
- package/lib/unifier/metaLevel.js +11 -7
- package/lib/unifier/metavariable.js +6 -6
- package/lib/unifier/statementWithCombinator.js +16 -16
- package/lib/unifier/termWithConstructor.js +7 -7
- package/lib/utilities/brackets.js +10 -10
- package/lib/utilities/json.js +493 -0
- package/lib/utilities/node.js +26 -19
- package/lib/utilities/release.js +53 -0
- package/lib/utilities/releaseContext.js +4 -15
- package/lib/utilities/tokens.js +8 -1
- package/lib/variable.js +14 -15
- package/lib/verifier/topLevel.js +5 -5
- package/package.json +1 -1
- package/src/assertion/contained.js +1 -1
- package/src/assertion/defined.js +1 -1
- package/src/assertion/subproof.js +2 -3
- package/src/assignment/judgement.js +3 -4
- package/src/axiom.js +14 -6
- package/src/combinator.js +12 -13
- package/src/conclusion.js +16 -13
- package/src/conjecture.js +14 -6
- package/src/consequent.js +16 -13
- package/src/constructor.js +11 -13
- package/src/context/file.js +94 -202
- package/src/context/local.js +8 -6
- package/src/context/release.js +2 -3
- package/src/declaration.js +126 -45
- package/src/equivalence.js +2 -2
- package/src/frame.js +225 -141
- package/src/index.js +17 -1
- package/src/judgement.js +109 -3
- package/src/label.js +15 -10
- package/src/lemma.js +17 -10
- package/src/metaLemma.js +102 -1
- package/src/metaType.js +29 -3
- package/src/metatheorem.js +143 -2
- package/src/metavariable.js +189 -66
- package/src/mixins/statement/qualified/unify.js +7 -19
- package/src/mixins/statement/unify.js +3 -25
- package/src/mixins/statement/verify.js +15 -13
- package/src/mixins/term/unify.js +1 -1
- package/src/premise.js +31 -16
- package/src/reference.js +18 -18
- package/src/rule.js +40 -58
- package/src/statement/unqualified.js +41 -11
- package/src/statement.js +6 -3
- package/src/substitution/frameForMetavariable.js +85 -98
- package/src/substitution/statementForMetavariable.js +109 -45
- package/src/substitution/termForVariable.js +83 -94
- package/src/substitution.js +36 -34
- package/src/substitutions.js +53 -46
- package/src/supposition.js +22 -14
- package/src/term.js +5 -15
- package/src/theorem.js +14 -6
- package/src/topLevelAssertion.js +38 -64
- package/src/type.js +5 -20
- package/src/unifier/intrinsicLevel.js +4 -3
- package/src/unifier/metaLevel.js +19 -7
- package/src/unifier/metavariable.js +5 -5
- package/src/unifier/statementWithCombinator.js +19 -19
- package/src/unifier/termWithConstructor.js +7 -7
- package/src/utilities/brackets.js +5 -5
- package/src/utilities/json.js +551 -0
- package/src/utilities/node.js +28 -23
- package/src/{verify → utilities}/release.js +5 -1
- package/src/utilities/releaseContext.js +2 -2
- package/src/utilities/tokens.js +10 -0
- package/src/variable.js +18 -19
- package/src/verifier/topLevel.js +6 -4
- package/lib/argument.js +0 -106
- package/lib/metaTypes.js +0 -19
- package/lib/unify/metavariableWithFrame.js +0 -40
- package/lib/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -31
- package/lib/unify/statementWithSttaemetnGivenEquivalences.js +0 -45
- package/lib/verify/declaration.js +0 -83
- package/lib/verify/frame.js +0 -120
- package/lib/verify/judgement.js +0 -88
- package/lib/verify/metaLemma.js +0 -49
- package/lib/verify/metatheorem.js +0 -48
- package/lib/verify/metavariableGivenMetaType.js +0 -44
- package/lib/verify/release.js +0 -50
- package/src/argument.js +0 -79
- package/src/metaTypes.js +0 -11
- package/src/unify/metavariableWithFrame.js +0 -40
- package/src/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -27
- package/src/unify/statementWithSttaemetnGivenEquivalences.js +0 -51
- package/src/verify/declaration.js +0 -113
- package/src/verify/frame.js +0 -157
- package/src/verify/judgement.js +0 -127
- package/src/verify/metaLemma.js +0 -72
- package/src/verify/metatheorem.js +0 -67
- 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 {
|
|
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
|
-
|
|
31
|
-
const
|
|
33
|
+
getMetavariableName() {
|
|
34
|
+
const metavariableName = this.metavariable.getName();
|
|
32
35
|
|
|
33
|
-
return
|
|
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,
|
|
45
|
+
resolve(substitutions, localContextA, localContextB) {
|
|
49
46
|
let resolved = false;
|
|
50
47
|
|
|
51
48
|
const substitutionString = this.string;
|
|
52
49
|
|
|
53
|
-
|
|
50
|
+
localContextB.trace(`Resolving the ${substitutionString} substitution...`);
|
|
54
51
|
|
|
55
|
-
const
|
|
56
|
-
simpleSubstitution = substitutions.
|
|
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,
|
|
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
|
-
|
|
63
|
+
localContextB.debug(`...resolved the ${substitutionString} substitution.`);
|
|
67
64
|
}
|
|
68
65
|
|
|
69
66
|
return resolved;
|
|
70
67
|
}
|
|
71
68
|
|
|
72
|
-
resolveSubstitution(substitution, statement, substitutions,
|
|
69
|
+
resolveSubstitution(substitution, statement, substitutions, localContextA, localContextB) {
|
|
73
70
|
let substitutionResolved = false;
|
|
74
71
|
|
|
75
72
|
const substitutionString = substitution.getString();
|
|
76
73
|
|
|
77
|
-
|
|
74
|
+
localContextB.trace(`Resolving the ${substitutionString} substitution...`);
|
|
78
75
|
|
|
79
|
-
const
|
|
76
|
+
const substitutionA = substitution, ///
|
|
77
|
+
substitutionB = this.unifyStatement(statement, localContextB, localContextB); ///
|
|
80
78
|
|
|
81
|
-
if (
|
|
82
|
-
|
|
79
|
+
if (substitutionB !== null) {
|
|
80
|
+
localContextA = localContextFromLocalContextAndSubstitution(localContextA, substitutionA); ///
|
|
83
81
|
|
|
84
|
-
|
|
82
|
+
localContextB = localContextFromLocalContextAndSubstitution(localContextB, substitutionB); ///
|
|
85
83
|
|
|
86
|
-
substitutions
|
|
84
|
+
substitutions.snapshot();
|
|
87
85
|
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
const nodeA = substitutionA.getSubstitutionNode(), ///
|
|
87
|
+
nodeB = substitutionB.getSubstitutionNode(), ///
|
|
88
|
+
unifiedAtMetaLevel = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
|
|
91
89
|
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
unifiedAtMetaLevel ?
|
|
91
|
+
substitutions.continue() :
|
|
92
|
+
substitutions.rollback(localContextB);
|
|
94
93
|
|
|
95
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
139
|
-
const
|
|
149
|
+
matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
|
|
150
|
+
const metavariableNameMatches = this.matchMetavariableName(metavariableName),
|
|
140
151
|
substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
|
|
141
|
-
|
|
152
|
+
metavariableNameAndSubstitutionNodeMatches = (metavariableNameMatches && substitutionNodeMatches);
|
|
153
|
+
|
|
154
|
+
return metavariableNameAndSubstitutionNodeMatches;
|
|
155
|
+
}
|
|
142
156
|
|
|
143
|
-
|
|
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 =
|
|
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 {
|
|
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
|
|
10
|
-
|
|
11
|
-
|
|
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,
|
|
19
|
+
constructor(string, term, variable, substitutionNode, substitutionTokens) {
|
|
16
20
|
super(string);
|
|
17
21
|
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
22
|
+
this.term = term;
|
|
23
|
+
this.variable = variable;
|
|
20
24
|
this.substitutionNode = substitutionNode;
|
|
25
|
+
this.substitutionTokens = substitutionTokens;
|
|
21
26
|
}
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
return this.
|
|
28
|
+
getTerm() {
|
|
29
|
+
return this.term;
|
|
25
30
|
}
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
return this.
|
|
32
|
+
getVariable() {
|
|
33
|
+
return this.variable;
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
getSubstitutionNode() {
|
|
32
37
|
return this.substitutionNode;
|
|
33
38
|
}
|
|
34
39
|
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
39
|
-
|
|
49
|
+
return substitutionString;
|
|
50
|
+
}
|
|
40
51
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
51
|
-
}
|
|
60
|
+
this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
isEqualTo(substitution) {
|
|
57
66
|
let equalTo = false;
|
|
58
67
|
|
|
59
|
-
const
|
|
60
|
-
|
|
68
|
+
const term = substitution.getTerm(),
|
|
69
|
+
variable = substitution.getVariable();
|
|
61
70
|
|
|
62
|
-
if ((
|
|
63
|
-
const
|
|
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 =
|
|
84
|
+
termNode = stripBracketsFromTermNode(termNode); ///
|
|
74
85
|
|
|
75
|
-
const termNodeMatches = this.
|
|
86
|
+
const termNodeMatches = this.term.matchTermNode(termNode);
|
|
76
87
|
|
|
77
88
|
return termNodeMatches;
|
|
78
89
|
}
|
|
79
90
|
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
102
|
+
return variableNameMatches;
|
|
84
103
|
}
|
|
85
104
|
|
|
86
105
|
matchSubstitutionNode(substitutionNode) {
|
|
87
|
-
|
|
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
|
|
124
|
+
const termNode = this.term.getNode(),
|
|
125
|
+
equivalenceMatchesTermNode = equivalence.matchTermNode(termNode);
|
|
96
126
|
|
|
97
127
|
if (equivalenceMatchesTermNode) {
|
|
98
|
-
const
|
|
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
|
-
|
|
145
|
+
const termNode = termNodeQuery(substitutionNode),
|
|
146
|
+
variableNode = variableNodeQuery(substitutionNode);
|
|
115
147
|
|
|
116
|
-
if (
|
|
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,
|
|
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 =
|
|
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
|
-
|
|
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),
|
package/src/substitution.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
13
|
-
const
|
|
14
|
+
getTerm() {
|
|
15
|
+
const term = null;
|
|
14
16
|
|
|
15
|
-
return
|
|
17
|
+
return term;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
+
getFrame() {
|
|
21
|
+
const frame = null;
|
|
20
22
|
|
|
21
|
-
return
|
|
23
|
+
return frame;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
+
getStatement() {
|
|
27
|
+
const statement = null;
|
|
26
28
|
|
|
27
|
-
return
|
|
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
|
-
|
|
98
|
-
const
|
|
87
|
+
matchVariableName(variableName) {
|
|
88
|
+
const variableNameMatches = false;
|
|
99
89
|
|
|
100
|
-
return
|
|
90
|
+
return variableNameMatches;
|
|
101
91
|
}
|
|
102
92
|
|
|
103
|
-
|
|
104
|
-
const
|
|
93
|
+
matchMetavariableName(metavariableName) {
|
|
94
|
+
const metavariableNameMatches = false;
|
|
105
95
|
|
|
106
|
-
return
|
|
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;
|