occam-verify-cli 0.0.1067 → 0.0.1068
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/lib/assertion/contained.js +2 -2
- package/lib/assertion/defined.js +2 -2
- package/lib/assignment/judgement.js +3 -3
- package/lib/conclusion.js +4 -4
- package/lib/consequent.js +4 -4
- package/lib/declaration.js +90 -3
- package/lib/frame.js +109 -48
- package/lib/judgement.js +84 -5
- package/lib/metaType.js +24 -3
- package/lib/metavariable.js +93 -25
- package/lib/mixins/statement/unify.js +2 -17
- package/lib/mixins/statement/verify.js +13 -13
- package/lib/premise.js +10 -6
- package/lib/reference.js +11 -9
- package/lib/rule.js +5 -2
- package/lib/ruleNames.js +5 -1
- package/lib/statement/unqualified.js +26 -2
- package/lib/statement.js +4 -2
- package/lib/substitution/frameForMetavariable.js +61 -60
- package/lib/substitution/statementForMetavariable.js +52 -29
- package/lib/substitution/termForVariable.js +53 -52
- package/lib/substitution.js +28 -28
- package/lib/substitutions.js +46 -40
- package/lib/supposition.js +4 -4
- package/lib/unifier/intrinsicLevel.js +4 -4
- package/lib/unifier/metaLevel.js +11 -7
- package/lib/unifier/statementWithCombinator.js +2 -2
- package/lib/utilities/node.js +24 -10
- package/lib/utilities/tokens.js +8 -1
- package/lib/variable.js +9 -5
- package/package.json +1 -1
- package/src/assertion/contained.js +1 -1
- package/src/assertion/defined.js +1 -1
- package/src/assignment/judgement.js +3 -4
- package/src/conclusion.js +4 -4
- package/src/consequent.js +4 -4
- package/src/declaration.js +57 -4
- package/src/frame.js +149 -90
- package/src/judgement.js +109 -3
- package/src/metaType.js +29 -3
- package/src/metavariable.js +145 -42
- package/src/mixins/statement/unify.js +1 -23
- package/src/mixins/statement/verify.js +15 -13
- package/src/premise.js +13 -6
- package/src/reference.js +11 -7
- package/src/rule.js +7 -1
- package/src/ruleNames.js +1 -0
- package/src/statement/unqualified.js +31 -1
- package/src/statement.js +3 -1
- package/src/substitution/frameForMetavariable.js +65 -84
- package/src/substitution/statementForMetavariable.js +63 -32
- package/src/substitution/termForVariable.js +56 -77
- package/src/substitution.js +21 -21
- package/src/substitutions.js +51 -46
- package/src/supposition.js +4 -4
- package/src/unifier/intrinsicLevel.js +4 -3
- package/src/unifier/metaLevel.js +19 -7
- package/src/unifier/statementWithCombinator.js +1 -1
- package/src/utilities/node.js +26 -10
- package/src/utilities/tokens.js +7 -0
- package/src/variable.js +14 -5
- package/lib/unify/metavariableWithFrame.js +0 -40
- package/lib/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -31
- package/lib/verify/declaration.js +0 -83
- package/lib/verify/frame.js +0 -120
- package/lib/verify/judgement.js +0 -88
- package/lib/verify/metavariableGivenMetaType.js +0 -44
- package/src/unify/metavariableWithFrame.js +0 -40
- package/src/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -27
- package/src/verify/declaration.js +0 -113
- package/src/verify/frame.js +0 -157
- package/src/verify/judgement.js +0 -127
- package/src/verify/metavariableGivenMetaType.js +0 -45
|
@@ -4,19 +4,23 @@ import shim from "../shim";
|
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { metavariableNameFromMetavariableNode } from "../utilities/name";
|
|
8
|
+
import { substitutionNodeFromSubstitutionTokens } from "../utilities/node";
|
|
9
|
+
import { substitutionTokensFromSubstitutionString } from "../utilities/tokens";
|
|
7
10
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
const frameNodeQuery = nodeQuery("/substitution/frame[0]"),
|
|
12
|
+
metavariableNodeQuery = nodeQuery("/substitution/frame[1]/metavariable!"),
|
|
13
|
+
substitutionNodeQuery = nodeQuery("/statement/substitution"),
|
|
14
|
+
frameMetavariableNodeQuery = nodeQuery("/frame/metavariable");
|
|
12
15
|
|
|
13
16
|
export default class FrameForMetavariableSubstitution extends Substitution {
|
|
14
|
-
constructor(string, frameNode, metavariableNode, substitutionNode) {
|
|
17
|
+
constructor(string, frameNode, metavariableNode, substitutionNode, substitutionTokens) {
|
|
15
18
|
super(string);
|
|
16
19
|
|
|
17
20
|
this.frameNode = frameNode;
|
|
18
21
|
this.metavariableNode = metavariableNode;
|
|
19
22
|
this.substitutionNode = substitutionNode;
|
|
23
|
+
this.substitutionTokens = substitutionTokens;
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
getFrameNode() {
|
|
@@ -31,36 +35,40 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
31
35
|
return this.substitutionNode;
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
getSubstitutionTokens() {
|
|
39
|
+
return this.substitutionTokens;
|
|
40
|
+
}
|
|
36
41
|
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
getMetavariableName() {
|
|
43
|
+
const metavariableName = metavariableNameFromMetavariableNode(this.metavariableNode);
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
frameNode = transformedFrameNode, ///
|
|
43
|
-
metavariableNode = transformedMetavariableNode, ///
|
|
44
|
-
substitutionNode = null,
|
|
45
|
-
frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode);
|
|
45
|
+
return metavariableName;
|
|
46
|
+
}
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
setSubstitutionNode() {
|
|
49
|
+
this.substitutionNode = substitutionNodeFromSubstitutionTokens(this.substitutionTokens);
|
|
50
|
+
}
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
setSubstitutionTokens() {
|
|
53
|
+
const frameMetavariableNode = frameMetavariableNodeQuery(this.frameNode),
|
|
54
|
+
frameMetavariableName = metavariableNameFromMetavariableNode(frameMetavariableNode),
|
|
55
|
+
metavariableName = metavariableNameFromMetavariableNode(this.metavariableNode),
|
|
56
|
+
substitutionString = `[[${frameMetavariableName}] for [${metavariableName}]]`;
|
|
57
|
+
|
|
58
|
+
this.substitutionTokens = substitutionTokensFromSubstitutionString(substitutionString);
|
|
51
59
|
}
|
|
52
60
|
|
|
53
61
|
isEqualTo(substitution) {
|
|
54
62
|
let equalTo = false;
|
|
55
63
|
|
|
56
64
|
const frameNode = substitution.getFrameNode(),
|
|
57
|
-
|
|
65
|
+
metavariableName = substitution.getMetavariableName();
|
|
58
66
|
|
|
59
|
-
if ((frameNode !== null) && (
|
|
67
|
+
if ((frameNode !== null) && (metavariableName !== null)) {
|
|
60
68
|
const frameNodeMatches = this.matchFrameNode(frameNode),
|
|
61
|
-
|
|
69
|
+
metavariableNameMatches = this.matchMetavariableName(metavariableName);
|
|
62
70
|
|
|
63
|
-
equalTo = (frameNodeMatches &&
|
|
71
|
+
equalTo = (frameNodeMatches && metavariableNameMatches);
|
|
64
72
|
}
|
|
65
73
|
|
|
66
74
|
return equalTo;
|
|
@@ -72,24 +80,42 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
72
80
|
return frameNodeMatches;
|
|
73
81
|
}
|
|
74
82
|
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
matchMetavariableName(metavariableName) {
|
|
84
|
+
let metavariableNameMatches;
|
|
85
|
+
|
|
86
|
+
const metavariableNameA = metavariableName; ///
|
|
87
|
+
|
|
88
|
+
metavariableName = metavariableNameFromMetavariableNode(this.metavariableNode);
|
|
89
|
+
|
|
90
|
+
const metavariableNameB = metavariableName; ///
|
|
77
91
|
|
|
78
|
-
|
|
92
|
+
metavariableNameMatches = (metavariableNameA === metavariableNameB);
|
|
93
|
+
|
|
94
|
+
return metavariableNameMatches;
|
|
79
95
|
}
|
|
80
96
|
|
|
81
97
|
matchSubstitutionNode(substitutionNode) {
|
|
82
|
-
|
|
98
|
+
let substitutionNodeMatches;
|
|
99
|
+
|
|
100
|
+
if ((substitutionNode === null) && (this.substitutionNode === null)) {
|
|
101
|
+
substitutionNodeMatches = true;
|
|
102
|
+
} else if ((substitutionNode === null) && (this.substitutionNode !== null)) {
|
|
103
|
+
substitutionNodeMatches = false;
|
|
104
|
+
} else if ((substitutionNode !== null) && (this.substitutionNode === null)) {
|
|
105
|
+
substitutionNodeMatches = false;
|
|
106
|
+
} else {
|
|
107
|
+
substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
|
|
108
|
+
}
|
|
83
109
|
|
|
84
110
|
return substitutionNodeMatches;
|
|
85
111
|
}
|
|
86
112
|
|
|
87
|
-
|
|
88
|
-
const
|
|
113
|
+
matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
|
|
114
|
+
const metavariableNameMatches = this.matchMetavariableName(metavariableName),
|
|
89
115
|
substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
|
|
90
|
-
|
|
116
|
+
metavariableNameAndSubstitutionNodeMatches = (metavariableNameMatches && substitutionNodeMatches);
|
|
91
117
|
|
|
92
|
-
return
|
|
118
|
+
return metavariableNameAndSubstitutionNodeMatches;
|
|
93
119
|
}
|
|
94
120
|
|
|
95
121
|
static fromStatementNode(statementNode, localContext) {
|
|
@@ -98,18 +124,17 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
98
124
|
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
99
125
|
|
|
100
126
|
if (substitutionNode !== null) {
|
|
101
|
-
|
|
127
|
+
const frameNode = frameNodeQuery(substitutionNode),
|
|
128
|
+
metavariableNode = metavariableNodeQuery(substitutionNode);
|
|
102
129
|
|
|
103
|
-
if (
|
|
130
|
+
if ((frameNode !== null) && (metavariableNode !== null)) {
|
|
104
131
|
const { Frame, Metavariable } = shim,
|
|
105
|
-
|
|
106
|
-
metavariableNode = substitutionMetavariableNode, ///
|
|
107
|
-
frameNode = substitutionFrameNode, ///
|
|
108
|
-
frame = Frame.fromTermNode(frameNode, localContext),
|
|
132
|
+
frame = Frame.fromFrameNode(frameNode, localContext),
|
|
109
133
|
variable = Metavariable.fromMetavariableNode(metavariableNode, localContext),
|
|
110
|
-
string = stringFromFrameAndMetavariable(frame, variable, localContext)
|
|
134
|
+
string = stringFromFrameAndMetavariable(frame, variable, localContext),
|
|
135
|
+
substitutionTokens = localContext.nodeAsTokens(substitutionNode);
|
|
111
136
|
|
|
112
|
-
frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode);
|
|
137
|
+
frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode, substitutionTokens);
|
|
113
138
|
}
|
|
114
139
|
}
|
|
115
140
|
|
|
@@ -121,57 +146,13 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
121
146
|
frameNode = frame.getNode(),
|
|
122
147
|
metavariableNode = metavariable.getNode(),
|
|
123
148
|
substitutionNode = null,
|
|
124
|
-
|
|
149
|
+
substitutionTokens = null,
|
|
150
|
+
statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode, substitutionTokens);
|
|
125
151
|
|
|
126
152
|
return statementForMetavariableSubstitution;
|
|
127
153
|
}
|
|
128
154
|
}
|
|
129
155
|
|
|
130
|
-
function transformFrameNode(frameNode, substitutions) {
|
|
131
|
-
let transformedFrameNode = null;
|
|
132
|
-
|
|
133
|
-
const frameMetavariableNode = frameMetavariableNodeQuery(frameNode);
|
|
134
|
-
|
|
135
|
-
if (frameMetavariableNode !== null) {
|
|
136
|
-
const metavariableNode = frameMetavariableNode; ///
|
|
137
|
-
|
|
138
|
-
substitutions.someSubstitution((substitution) => {
|
|
139
|
-
const metavariableNodeMatches = substitution.matchMetavariableNode(metavariableNode);
|
|
140
|
-
|
|
141
|
-
if (metavariableNodeMatches) {
|
|
142
|
-
const frameNode = substitution.getFrameNode();
|
|
143
|
-
|
|
144
|
-
transformedFrameNode = frameNode; ////
|
|
145
|
-
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return transformedFrameNode;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function transformMetavariableNode(metavariableNode, substitutions) {
|
|
155
|
-
let transformedMetavariableNode = null;
|
|
156
|
-
|
|
157
|
-
substitutions.someSubstitution((substitution) => {
|
|
158
|
-
const metavariableNodeMatches = substitution.matchMetavariableNode(metavariableNode);
|
|
159
|
-
|
|
160
|
-
if (metavariableNodeMatches) {
|
|
161
|
-
const frameNode = substitution.getFrameNode(),
|
|
162
|
-
frameMetavariableNode = frameMetavariableNodeQuery(frameNode);
|
|
163
|
-
|
|
164
|
-
if (frameMetavariableNode !== null) {
|
|
165
|
-
transformedMetavariableNode = frameMetavariableNode; ///
|
|
166
|
-
|
|
167
|
-
return true;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
return transformedMetavariableNode;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
156
|
function stringFromFrameAndMetavariable(frame, metavariable, localContext) {
|
|
176
157
|
const frameNode = frame.getNode(),
|
|
177
158
|
frameString = localContext.nodeAsString(frameNode),
|
|
@@ -2,7 +2,9 @@
|
|
|
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
9
|
import { stripBracketsFromStatement } from "../utilities/brackets";
|
|
8
10
|
|
|
@@ -39,76 +41,105 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
39
41
|
return metavariableNode;
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
getMetavariableName() {
|
|
45
|
+
const metavariableName = this.metavariable.getName();
|
|
46
|
+
|
|
47
|
+
return metavariableName;
|
|
48
|
+
}
|
|
49
|
+
|
|
42
50
|
isSimple() {
|
|
43
51
|
const simple = (this.substitution === null);
|
|
44
52
|
|
|
45
53
|
return simple;
|
|
46
54
|
}
|
|
47
55
|
|
|
48
|
-
resolve(substitutions,
|
|
56
|
+
resolve(substitutions, localContextA, localContextB) {
|
|
49
57
|
let resolved = false;
|
|
50
58
|
|
|
51
59
|
const substitutionString = this.string;
|
|
52
60
|
|
|
53
|
-
|
|
61
|
+
localContextB.trace(`Resolving the ${substitutionString} substitution...`);
|
|
54
62
|
|
|
55
|
-
const
|
|
56
|
-
simpleSubstitution = substitutions.
|
|
63
|
+
const metavariableName = this.getMetavariableName(),
|
|
64
|
+
simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableName(metavariableName);
|
|
57
65
|
|
|
58
66
|
if (simpleSubstitution !== null) {
|
|
59
67
|
const substitution = simpleSubstitution, ///
|
|
60
|
-
substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions,
|
|
68
|
+
substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, localContextA, localContextB);
|
|
61
69
|
|
|
62
70
|
resolved = substitutionResolved; ///
|
|
63
71
|
}
|
|
64
72
|
|
|
65
73
|
if (resolved) {
|
|
66
|
-
|
|
74
|
+
localContextB.debug(`...resolved the ${substitutionString} substitution.`);
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
return resolved;
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
resolveSubstitution(substitution, statement, substitutions,
|
|
80
|
+
resolveSubstitution(substitution, statement, substitutions, localContextA, localContextB) {
|
|
73
81
|
let substitutionResolved = false;
|
|
74
82
|
|
|
75
83
|
const substitutionString = substitution.getString();
|
|
76
84
|
|
|
77
|
-
|
|
85
|
+
localContextB.trace(`Resolving the ${substitutionString} substitution...`);
|
|
78
86
|
|
|
79
|
-
const
|
|
87
|
+
const substitutionA = substitution; ///
|
|
80
88
|
|
|
81
|
-
|
|
82
|
-
const transformedSubstitutionString = transformedSubstitution.getString();
|
|
89
|
+
substitution = this.unifyStatement(statement, localContextA, localContextB);
|
|
83
90
|
|
|
84
|
-
|
|
91
|
+
if (substitution !== null) {
|
|
92
|
+
substitutions.snapshot();
|
|
85
93
|
|
|
86
|
-
|
|
94
|
+
const substitutionTokens = substitution.getSubstitutionTokens(),
|
|
95
|
+
tokens = substitutionTokens; ///
|
|
87
96
|
|
|
88
|
-
|
|
89
|
-
localContextB = localContext, ///
|
|
90
|
-
statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
|
|
97
|
+
localContextB = LocalContext.fromLocalContextAndTokens(localContextB, tokens); ///
|
|
91
98
|
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
const substitutionB = substitution, ///
|
|
100
|
+
nodeA = substitutionA.getSubstitutionNode(), ///
|
|
101
|
+
nodeB = substitutionB.getSubstitutionNode(), ///
|
|
102
|
+
unifiedAtMetaLevel = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
|
|
94
103
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
substitutionEqualToTransformedSubstitution = substitution.isEqualTo(transformedSubstitution);
|
|
104
|
+
unifiedAtMetaLevel ?
|
|
105
|
+
substitutions.continue() :
|
|
106
|
+
substitutions.rollback(localContextB);
|
|
99
107
|
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
}
|
|
108
|
+
substitutionResolved = unifiedAtMetaLevel; ///
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
if (substitutionResolved) {
|
|
106
|
-
|
|
112
|
+
localContextB.debug(`...resolved the ${substitutionString} substitution.`);
|
|
107
113
|
}
|
|
108
114
|
|
|
109
115
|
return substitutionResolved;
|
|
110
116
|
}
|
|
111
117
|
|
|
118
|
+
unifyStatement(statement, localContextA, localContextB) {
|
|
119
|
+
let substitution = null;
|
|
120
|
+
|
|
121
|
+
localContextA = localContextB; ///
|
|
122
|
+
|
|
123
|
+
const substitutions = Substitutions.fromNothing(),
|
|
124
|
+
statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
|
|
125
|
+
|
|
126
|
+
if (statementUnified) {
|
|
127
|
+
const substitutionsLength = substitutions.getLength();
|
|
128
|
+
|
|
129
|
+
if (substitutionsLength === 1) {
|
|
130
|
+
const firstSubstitution = substitutions.getFirstSubstitution();
|
|
131
|
+
|
|
132
|
+
substitution = firstSubstitution; ///
|
|
133
|
+
|
|
134
|
+
substitution.setSubstitutionTokens();
|
|
135
|
+
|
|
136
|
+
substitution.setSubstitutionNode();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return substitution;
|
|
141
|
+
}
|
|
142
|
+
|
|
112
143
|
matchStatementNode(statementNode) {
|
|
113
144
|
statementNode = stripBracketsFromStatement(statementNode); ///
|
|
114
145
|
|
|
@@ -117,7 +148,7 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
117
148
|
return statementNodeMatches;
|
|
118
149
|
}
|
|
119
150
|
|
|
120
|
-
|
|
151
|
+
matchMetavariableName(metavariableName) { return this.metavariable.matchMetavariableName(metavariableName); }
|
|
121
152
|
|
|
122
153
|
matchSubstitutionNode(substitutionNode) {
|
|
123
154
|
let substitutionNodeMatches;
|
|
@@ -135,12 +166,12 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
135
166
|
return substitutionNodeMatches;
|
|
136
167
|
}
|
|
137
168
|
|
|
138
|
-
|
|
139
|
-
const
|
|
169
|
+
matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
|
|
170
|
+
const metavariableNameMatches = this.matchMetavariableName(metavariableName),
|
|
140
171
|
substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode),
|
|
141
|
-
|
|
172
|
+
metavariableNameAndSubstitutionNodeMatches = (metavariableNameMatches && substitutionNodeMatches);
|
|
142
173
|
|
|
143
|
-
return
|
|
174
|
+
return metavariableNameAndSubstitutionNodeMatches;
|
|
144
175
|
}
|
|
145
176
|
|
|
146
177
|
static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
|
|
@@ -175,4 +206,4 @@ function stringFromStatementMetavariableAndSubstitution(statement, metavariable,
|
|
|
175
206
|
}
|
|
176
207
|
|
|
177
208
|
return string;
|
|
178
|
-
}
|
|
209
|
+
}
|
|
@@ -5,19 +5,23 @@ import Substitution from "../substitution";
|
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
import { stripBracketsFromTerm } from "../utilities/brackets";
|
|
8
|
+
import { variableNameFromVariableNode } from "../utilities/name";
|
|
9
|
+
import { substitutionNodeFromSubstitutionTokens } from "../utilities/node";
|
|
10
|
+
import { substitutionTokensFromSubstitutionString } from "../utilities/tokens";
|
|
8
11
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
const termNodeQuery = nodeQuery("/substitution/term[0]"),
|
|
13
|
+
variableNodeQuery = nodeQuery("/substitution/term[1]/variable!"),
|
|
14
|
+
termVariableNodeQuery = nodeQuery("/term/variable"),
|
|
15
|
+
substitutionNodeQuery = nodeQuery("/statement/substitution");
|
|
13
16
|
|
|
14
17
|
export default class TermForVariableSubstitution extends Substitution {
|
|
15
|
-
constructor(string, termNode, variableNode, substitutionNode) {
|
|
18
|
+
constructor(string, termNode, variableNode, substitutionNode, substitutionTokens) {
|
|
16
19
|
super(string);
|
|
17
20
|
|
|
18
21
|
this.termNode = termNode;
|
|
19
22
|
this.variableNode = variableNode;
|
|
20
23
|
this.substitutionNode = substitutionNode;
|
|
24
|
+
this.substitutionTokens = substitutionTokens;
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
getTermNode() {
|
|
@@ -32,25 +36,27 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
32
36
|
return this.substitutionNode;
|
|
33
37
|
}
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
getSubstitutionTokens() {
|
|
40
|
+
return this.substitutionTokens;
|
|
41
|
+
}
|
|
37
42
|
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
getVariableName() {
|
|
44
|
+
const variableName = variableNameFromVariableNode(this.variableNode);
|
|
40
45
|
|
|
41
|
-
|
|
42
|
-
|
|
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);
|
|
46
|
+
return variableName;
|
|
47
|
+
}
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
setSubstitutionNode() {
|
|
50
|
+
this.substitutionNode = substitutionNodeFromSubstitutionTokens(this.substitutionTokens);
|
|
51
|
+
}
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
setSubstitutionTokens() {
|
|
54
|
+
const termVariableNode = termVariableNodeQuery(this.termNode),
|
|
55
|
+
termVariableName = variableNameFromVariableNode(termVariableNode),
|
|
56
|
+
variableName = variableNameFromVariableNode(this.variableNode),
|
|
57
|
+
substitutionString = `[${termVariableName} for ${variableName}]`;
|
|
58
|
+
|
|
59
|
+
this.substitutionTokens = substitutionTokensFromSubstitutionString(substitutionString);
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
isEqualTo(substitution) {
|
|
@@ -77,14 +83,32 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
77
83
|
return termNodeMatches;
|
|
78
84
|
}
|
|
79
85
|
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
matchVariableName(variableName) {
|
|
87
|
+
let variableNameMatches;
|
|
88
|
+
|
|
89
|
+
const variableNameA = variableName; ///
|
|
90
|
+
|
|
91
|
+
variableName = variableNameFromVariableNode(this.variableNode);
|
|
92
|
+
|
|
93
|
+
const variableNameB = variableName; ///
|
|
82
94
|
|
|
83
|
-
|
|
95
|
+
variableNameMatches = (variableNameA === variableNameB);
|
|
96
|
+
|
|
97
|
+
return variableNameMatches;
|
|
84
98
|
}
|
|
85
99
|
|
|
86
100
|
matchSubstitutionNode(substitutionNode) {
|
|
87
|
-
|
|
101
|
+
let substitutionNodeMatches;
|
|
102
|
+
|
|
103
|
+
if ((substitutionNode === null) && (this.substitutionNode === null)) {
|
|
104
|
+
substitutionNodeMatches = true;
|
|
105
|
+
} else if ((substitutionNode === null) && (this.substitutionNode !== null)) {
|
|
106
|
+
substitutionNodeMatches = false;
|
|
107
|
+
} else if ((substitutionNode !== null) && (this.substitutionNode === null)) {
|
|
108
|
+
substitutionNodeMatches = false;
|
|
109
|
+
} else {
|
|
110
|
+
substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
|
|
111
|
+
}
|
|
88
112
|
|
|
89
113
|
return substitutionNodeMatches;
|
|
90
114
|
}
|
|
@@ -111,18 +135,17 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
111
135
|
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
112
136
|
|
|
113
137
|
if (substitutionNode !== null) {
|
|
114
|
-
|
|
138
|
+
const termNode = termNodeQuery(substitutionNode),
|
|
139
|
+
variableNode = variableNodeQuery(substitutionNode);
|
|
115
140
|
|
|
116
|
-
if (
|
|
141
|
+
if ((termNode !== null) && (variableNode !== null)) {
|
|
117
142
|
const { Term, Variable } = shim,
|
|
118
|
-
substitutionVariableNode = substitutionsVariableNodeQuery(substitutionNode),
|
|
119
|
-
variableNode = substitutionVariableNode, ///
|
|
120
|
-
termNode = substitutionTermNode, ///
|
|
121
143
|
term = Term.fromTermNode(termNode, localContext),
|
|
122
144
|
variable = Variable.fromVariableNode(variableNode, localContext),
|
|
123
|
-
string = stringFromTermAndVariable(term, variable, localContext)
|
|
145
|
+
string = stringFromTermAndVariable(term, variable, localContext),
|
|
146
|
+
substitutionTokens = localContext.nodeAsTokens(substitutionNode);
|
|
124
147
|
|
|
125
|
-
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode);
|
|
148
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode, substitutionTokens);
|
|
126
149
|
}
|
|
127
150
|
}
|
|
128
151
|
|
|
@@ -137,57 +160,13 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
137
160
|
const string = stringFromTermAndVariable(term, variable, localContext),
|
|
138
161
|
variableNode = variable.getNode(),
|
|
139
162
|
substitutionNode = null,
|
|
140
|
-
|
|
163
|
+
substitutionTokens = null,
|
|
164
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode, substitutionTokens);
|
|
141
165
|
|
|
142
166
|
return termForVariableSubstitution;
|
|
143
167
|
}
|
|
144
168
|
}
|
|
145
169
|
|
|
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
170
|
function stringFromTermAndVariable(term, variable, localContext) {
|
|
192
171
|
const termNode = term.getNode(),
|
|
193
172
|
termString = localContext.nodeAsString(termNode),
|
package/src/substitution.js
CHANGED
|
@@ -27,22 +27,22 @@ export default class Substitution {
|
|
|
27
27
|
return statementNode;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
const
|
|
30
|
+
getSubstitutionNode() {
|
|
31
|
+
const substitutionNode = null;
|
|
32
32
|
|
|
33
|
-
return
|
|
33
|
+
return substitutionNode;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
const
|
|
36
|
+
getVariableName() {
|
|
37
|
+
const variableName = null;
|
|
38
38
|
|
|
39
|
-
return
|
|
39
|
+
return variableName;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
const
|
|
42
|
+
getMetavariableName() {
|
|
43
|
+
const metavariableName = null;
|
|
44
44
|
|
|
45
|
-
return
|
|
45
|
+
return metavariableName;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
isSimple() {
|
|
@@ -82,28 +82,28 @@ export default class Substitution {
|
|
|
82
82
|
return frameNodeMatches;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
matchVariableNode(variableNode) {
|
|
86
|
-
const variableNodeMatches = false;
|
|
87
|
-
|
|
88
|
-
return variableNodeMatches;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
85
|
matchStatementNode(statementNode) {
|
|
92
86
|
const statementNodeMatches = false;
|
|
93
87
|
|
|
94
88
|
return statementNodeMatches;
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
|
|
98
|
-
const
|
|
91
|
+
matchVariableName(variableName) {
|
|
92
|
+
const variableNameMatches = false;
|
|
93
|
+
|
|
94
|
+
return variableNameMatches;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
matchMetavariableName(metavariableName) {
|
|
98
|
+
const metavariableNameMatches = false;
|
|
99
99
|
|
|
100
|
-
return
|
|
100
|
+
return metavariableNameMatches;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
const
|
|
103
|
+
matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
|
|
104
|
+
const metavariableNameAndSubstitutionNodeMatches = false;
|
|
105
105
|
|
|
106
|
-
return
|
|
106
|
+
return metavariableNameAndSubstitutionNodeMatches;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
|