occam-verify-cli 0.0.1068 → 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/subproof.js +3 -3
- package/lib/axiom.js +11 -6
- package/lib/combinator.js +9 -9
- package/lib/conclusion.js +10 -7
- package/lib/conjecture.js +11 -6
- package/lib/consequent.js +10 -7
- 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 +50 -43
- package/lib/equivalence.js +2 -2
- package/lib/frame.js +100 -80
- package/lib/index.js +22 -6
- package/lib/judgement.js +3 -3
- package/lib/label.js +12 -8
- package/lib/lemma.js +12 -12
- package/lib/metaLemma.js +120 -8
- package/lib/metatheorem.js +145 -9
- package/lib/metavariable.js +39 -22
- package/lib/mixins/statement/qualified/unify.js +6 -10
- package/lib/mixins/statement/unify.js +3 -3
- package/lib/mixins/term/unify.js +2 -2
- package/lib/premise.js +12 -8
- package/lib/reference.js +7 -9
- package/lib/rule.js +24 -39
- package/lib/ruleNames.js +1 -5
- package/lib/statement/unqualified.js +9 -8
- package/lib/statement.js +4 -4
- package/lib/substitution/frameForMetavariable.js +30 -26
- package/lib/substitution/statementForMetavariable.js +44 -26
- package/lib/substitution/termForVariable.js +33 -37
- package/lib/substitution.js +24 -21
- package/lib/substitutions.js +7 -1
- package/lib/supposition.js +12 -8
- 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/metaLevel.js +3 -3
- 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 +15 -22
- package/lib/utilities/release.js +53 -0
- package/lib/utilities/releaseContext.js +4 -15
- package/lib/utilities/tokens.js +7 -7
- package/lib/variable.js +6 -11
- package/lib/verifier/topLevel.js +5 -5
- package/package.json +1 -1
- package/src/assertion/subproof.js +2 -3
- package/src/axiom.js +14 -6
- package/src/combinator.js +12 -13
- package/src/conclusion.js +12 -9
- package/src/conjecture.js +14 -6
- package/src/consequent.js +12 -9
- 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 +72 -44
- package/src/equivalence.js +2 -2
- package/src/frame.js +111 -86
- package/src/index.js +17 -1
- package/src/judgement.js +2 -2
- package/src/label.js +15 -10
- package/src/lemma.js +17 -10
- package/src/metaLemma.js +102 -1
- package/src/metatheorem.js +143 -2
- package/src/metavariable.js +50 -30
- package/src/mixins/statement/qualified/unify.js +7 -19
- package/src/mixins/statement/unify.js +2 -2
- package/src/mixins/term/unify.js +1 -1
- package/src/premise.js +18 -10
- package/src/reference.js +7 -11
- package/src/rule.js +33 -57
- package/src/ruleNames.js +0 -1
- package/src/statement/unqualified.js +10 -10
- package/src/statement.js +3 -2
- package/src/substitution/frameForMetavariable.js +39 -33
- package/src/substitution/statementForMetavariable.js +64 -31
- package/src/substitution/termForVariable.js +47 -37
- package/src/substitution.js +18 -16
- package/src/substitutions.js +2 -0
- package/src/supposition.js +18 -10
- 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/metaLevel.js +2 -2
- package/src/unifier/metavariable.js +5 -5
- package/src/unifier/statementWithCombinator.js +18 -18
- 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 +15 -26
- package/src/{verify → utilities}/release.js +5 -1
- package/src/utilities/releaseContext.js +2 -2
- package/src/utilities/tokens.js +10 -7
- package/src/variable.js +4 -14
- package/src/verifier/topLevel.js +6 -4
- package/lib/argument.js +0 -106
- package/lib/metaTypes.js +0 -19
- package/lib/unify/statementWithSttaemetnGivenEquivalences.js +0 -45
- package/lib/verify/metaLemma.js +0 -49
- package/lib/verify/metatheorem.js +0 -48
- package/lib/verify/release.js +0 -50
- package/src/argument.js +0 -79
- package/src/metaTypes.js +0 -11
- package/src/unify/statementWithSttaemetnGivenEquivalences.js +0 -51
- package/src/verify/metaLemma.js +0 -72
- package/src/verify/metatheorem.js +0 -67
|
@@ -4,31 +4,32 @@ import shim from "../shim";
|
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import { substitutionNodeFromUnqualifiedStatementNode,
|
|
8
|
+
unqualifiedStatementStringFromSubstitutionString,
|
|
9
|
+
unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
|
|
10
|
+
import { unqualifiedStatementTokensFromUnqualifiedStatementString,
|
|
11
|
+
substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
|
|
10
12
|
|
|
11
13
|
const frameNodeQuery = nodeQuery("/substitution/frame[0]"),
|
|
12
14
|
metavariableNodeQuery = nodeQuery("/substitution/frame[1]/metavariable!"),
|
|
13
|
-
substitutionNodeQuery = nodeQuery("/statement/substitution")
|
|
14
|
-
frameMetavariableNodeQuery = nodeQuery("/frame/metavariable");
|
|
15
|
+
substitutionNodeQuery = nodeQuery("/statement/substitution");
|
|
15
16
|
|
|
16
17
|
export default class FrameForMetavariableSubstitution extends Substitution {
|
|
17
|
-
constructor(string,
|
|
18
|
+
constructor(string, frame, metavariable, substitutionNode, substitutionTokens) {
|
|
18
19
|
super(string);
|
|
19
20
|
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
21
|
+
this.frame = frame;
|
|
22
|
+
this.metavariable = metavariable;
|
|
22
23
|
this.substitutionNode = substitutionNode;
|
|
23
24
|
this.substitutionTokens = substitutionTokens;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
return this.
|
|
27
|
+
getFrame() {
|
|
28
|
+
return this.frame;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
return this.
|
|
31
|
+
getMetavariable() {
|
|
32
|
+
return this.metavariable;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
getSubstitutionNode() {
|
|
@@ -40,22 +41,33 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
getMetavariableName() {
|
|
43
|
-
const metavariableName =
|
|
44
|
+
const metavariableName = this.metavariable.getName();
|
|
44
45
|
|
|
45
46
|
return metavariableName;
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
getSubstitutionString() {
|
|
50
|
+
const frameString = this.frame.getString(),
|
|
51
|
+
metavariableString = this.metavariable.getString(),
|
|
52
|
+
substitutionString = `[[${frameString}] for [${metavariableString}]]`;
|
|
53
|
+
|
|
54
|
+
return substitutionString;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
setSubstitutionNodeAndTokens(localContext) {
|
|
58
|
+
const lexer = localContext.getLexer(),
|
|
59
|
+
parser = localContext.getParser(),
|
|
60
|
+
substitutionString = this.getSubstitutionString(),
|
|
61
|
+
unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
|
|
62
|
+
unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
63
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
|
|
64
|
+
|
|
65
|
+
this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
|
|
66
|
+
|
|
67
|
+
this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
|
|
68
|
+
}
|
|
57
69
|
|
|
58
|
-
|
|
70
|
+
setSubstitutionTokens(localContext) {
|
|
59
71
|
}
|
|
60
72
|
|
|
61
73
|
isEqualTo(substitution) {
|
|
@@ -74,18 +86,14 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
74
86
|
return equalTo;
|
|
75
87
|
}
|
|
76
88
|
|
|
77
|
-
matchFrameNode(frameNode) {
|
|
78
|
-
const frameNodeMatches = this.frameNode.match(frameNode);
|
|
79
|
-
|
|
80
|
-
return frameNodeMatches;
|
|
81
|
-
}
|
|
89
|
+
matchFrameNode(frameNode) { return this.frame.matchFrameNode(frameNode); }
|
|
82
90
|
|
|
83
91
|
matchMetavariableName(metavariableName) {
|
|
84
92
|
let metavariableNameMatches;
|
|
85
93
|
|
|
86
94
|
const metavariableNameA = metavariableName; ///
|
|
87
95
|
|
|
88
|
-
metavariableName =
|
|
96
|
+
metavariableName = this.metavariable.getName();
|
|
89
97
|
|
|
90
98
|
const metavariableNameB = metavariableName; ///
|
|
91
99
|
|
|
@@ -130,11 +138,11 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
130
138
|
if ((frameNode !== null) && (metavariableNode !== null)) {
|
|
131
139
|
const { Frame, Metavariable } = shim,
|
|
132
140
|
frame = Frame.fromFrameNode(frameNode, localContext),
|
|
133
|
-
|
|
134
|
-
string = stringFromFrameAndMetavariable(frame,
|
|
141
|
+
metavariable = Metavariable.fromMetavariableNode(metavariableNode, localContext),
|
|
142
|
+
string = stringFromFrameAndMetavariable(frame, metavariable, localContext),
|
|
135
143
|
substitutionTokens = localContext.nodeAsTokens(substitutionNode);
|
|
136
144
|
|
|
137
|
-
frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string,
|
|
145
|
+
frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens);
|
|
138
146
|
}
|
|
139
147
|
}
|
|
140
148
|
|
|
@@ -143,11 +151,9 @@ export default class FrameForMetavariableSubstitution extends Substitution {
|
|
|
143
151
|
|
|
144
152
|
static fromFrameAndMetavariable(frame, metavariable, localContext) {
|
|
145
153
|
const string = stringFromFrameAndMetavariable(frame, metavariable, localContext),
|
|
146
|
-
frameNode = frame.getNode(),
|
|
147
|
-
metavariableNode = metavariable.getNode(),
|
|
148
154
|
substitutionNode = null,
|
|
149
155
|
substitutionTokens = null,
|
|
150
|
-
statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string,
|
|
156
|
+
statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens);
|
|
151
157
|
|
|
152
158
|
return statementForMetavariableSubstitution;
|
|
153
159
|
}
|
|
@@ -6,7 +6,8 @@ import LocalContext from "../context/local";
|
|
|
6
6
|
import Substitutions from "../substitutions";
|
|
7
7
|
import metaLevelUnifier from "../unifier/metaLevel";
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { stripBracketsFromStatementNode } from "../utilities/brackets";
|
|
10
|
+
import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
|
|
10
11
|
|
|
11
12
|
export default class StatementForMetavariableSubstitution extends Substitution {
|
|
12
13
|
constructor(string, statement, metavariable, substitution) {
|
|
@@ -29,18 +30,6 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
29
30
|
return this.substitution;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
getStatementNode() {
|
|
33
|
-
const statementNode = this.statement.getNode();
|
|
34
|
-
|
|
35
|
-
return statementNode;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getMetavariableNode() {
|
|
39
|
-
const metavariableNode = this.metavariable.getNode();
|
|
40
|
-
|
|
41
|
-
return metavariableNode;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
33
|
getMetavariableName() {
|
|
45
34
|
const metavariableName = this.metavariable.getName();
|
|
46
35
|
|
|
@@ -84,20 +73,17 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
84
73
|
|
|
85
74
|
localContextB.trace(`Resolving the ${substitutionString} substitution...`);
|
|
86
75
|
|
|
87
|
-
const substitutionA = substitution
|
|
88
|
-
|
|
89
|
-
substitution = this.unifyStatement(statement, localContextA, localContextB);
|
|
76
|
+
const substitutionA = substitution, ///
|
|
77
|
+
substitutionB = this.unifyStatement(statement, localContextB, localContextB); ///
|
|
90
78
|
|
|
91
|
-
if (
|
|
92
|
-
|
|
79
|
+
if (substitutionB !== null) {
|
|
80
|
+
localContextA = localContextFromLocalContextAndSubstitution(localContextA, substitutionA); ///
|
|
93
81
|
|
|
94
|
-
|
|
95
|
-
tokens = substitutionTokens; ///
|
|
82
|
+
localContextB = localContextFromLocalContextAndSubstitution(localContextB, substitutionB); ///
|
|
96
83
|
|
|
97
|
-
|
|
84
|
+
substitutions.snapshot();
|
|
98
85
|
|
|
99
|
-
const
|
|
100
|
-
nodeA = substitutionA.getSubstitutionNode(), ///
|
|
86
|
+
const nodeA = substitutionA.getSubstitutionNode(), ///
|
|
101
87
|
nodeB = substitutionB.getSubstitutionNode(), ///
|
|
102
88
|
unifiedAtMetaLevel = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
|
|
103
89
|
|
|
@@ -118,8 +104,6 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
118
104
|
unifyStatement(statement, localContextA, localContextB) {
|
|
119
105
|
let substitution = null;
|
|
120
106
|
|
|
121
|
-
localContextA = localContextB; ///
|
|
122
|
-
|
|
123
107
|
const substitutions = Substitutions.fromNothing(),
|
|
124
108
|
statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
|
|
125
109
|
|
|
@@ -130,10 +114,6 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
130
114
|
const firstSubstitution = substitutions.getFirstSubstitution();
|
|
131
115
|
|
|
132
116
|
substitution = firstSubstitution; ///
|
|
133
|
-
|
|
134
|
-
substitution.setSubstitutionTokens();
|
|
135
|
-
|
|
136
|
-
substitution.setSubstitutionNode();
|
|
137
117
|
}
|
|
138
118
|
}
|
|
139
119
|
|
|
@@ -141,7 +121,7 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
141
121
|
}
|
|
142
122
|
|
|
143
123
|
matchStatementNode(statementNode) {
|
|
144
|
-
statementNode =
|
|
124
|
+
statementNode = stripBracketsFromStatementNode(statementNode); ///
|
|
145
125
|
|
|
146
126
|
const statementNodeMatches = this.statement.matchStatementNode(statementNode);
|
|
147
127
|
|
|
@@ -174,10 +154,51 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
174
154
|
return metavariableNameAndSubstitutionNodeMatches;
|
|
175
155
|
}
|
|
176
156
|
|
|
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;
|
|
196
|
+
}
|
|
197
|
+
|
|
177
198
|
static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
|
|
178
199
|
let statementNode = statement.getNode();
|
|
179
200
|
|
|
180
|
-
statementNode =
|
|
201
|
+
statementNode = stripBracketsFromStatementNode(statementNode); ///
|
|
181
202
|
|
|
182
203
|
const { Statement } = shim;
|
|
183
204
|
|
|
@@ -190,6 +211,18 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
190
211
|
}
|
|
191
212
|
}
|
|
192
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
|
+
|
|
193
226
|
function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
|
|
194
227
|
let string;
|
|
195
228
|
|
|
@@ -4,32 +4,33 @@ import shim from "../shim";
|
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
import { stripBracketsFromTermNode } from "../utilities/brackets";
|
|
8
|
+
import { substitutionNodeFromUnqualifiedStatementNode,
|
|
9
|
+
unqualifiedStatementStringFromSubstitutionString,
|
|
10
|
+
unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
|
|
11
|
+
import { unqualifiedStatementTokensFromUnqualifiedStatementString,
|
|
12
|
+
substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
|
|
11
13
|
|
|
12
14
|
const termNodeQuery = nodeQuery("/substitution/term[0]"),
|
|
13
15
|
variableNodeQuery = nodeQuery("/substitution/term[1]/variable!"),
|
|
14
|
-
termVariableNodeQuery = nodeQuery("/term/variable"),
|
|
15
16
|
substitutionNodeQuery = nodeQuery("/statement/substitution");
|
|
16
17
|
|
|
17
18
|
export default class TermForVariableSubstitution extends Substitution {
|
|
18
|
-
constructor(string,
|
|
19
|
+
constructor(string, term, variable, substitutionNode, substitutionTokens) {
|
|
19
20
|
super(string);
|
|
20
21
|
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
22
|
+
this.term = term;
|
|
23
|
+
this.variable = variable;
|
|
23
24
|
this.substitutionNode = substitutionNode;
|
|
24
25
|
this.substitutionTokens = substitutionTokens;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
return this.
|
|
28
|
+
getTerm() {
|
|
29
|
+
return this.term;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
return this.
|
|
32
|
+
getVariable() {
|
|
33
|
+
return this.variable;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
getSubstitutionNode() {
|
|
@@ -40,33 +41,37 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
40
41
|
return this.substitutionTokens;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
const
|
|
44
|
+
getSubstitutionString() {
|
|
45
|
+
const termString = this.term.getString(),
|
|
46
|
+
variableString = this.variable.getString(),
|
|
47
|
+
substitutionString = `[${termString} for ${variableString}]`;
|
|
45
48
|
|
|
46
|
-
return
|
|
49
|
+
return substitutionString;
|
|
47
50
|
}
|
|
48
51
|
|
|
49
|
-
|
|
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);
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
const termVariableNode = termVariableNodeQuery(this.termNode),
|
|
55
|
-
termVariableName = variableNameFromVariableNode(termVariableNode),
|
|
56
|
-
variableName = variableNameFromVariableNode(this.variableNode),
|
|
57
|
-
substitutionString = `[${termVariableName} for ${variableName}]`;
|
|
60
|
+
this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
|
|
58
61
|
|
|
59
|
-
this.substitutionTokens =
|
|
62
|
+
this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
isEqualTo(substitution) {
|
|
63
66
|
let equalTo = false;
|
|
64
67
|
|
|
65
|
-
const
|
|
66
|
-
|
|
68
|
+
const term = substitution.getTerm(),
|
|
69
|
+
variable = substitution.getVariable();
|
|
67
70
|
|
|
68
|
-
if ((
|
|
69
|
-
const
|
|
71
|
+
if ((term !== null) && (variable !== null)) {
|
|
72
|
+
const termNode = term.getNode(),
|
|
73
|
+
variableNode = variable.getNode(),
|
|
74
|
+
termNodeMatches = this.matchTermNode(termNode),
|
|
70
75
|
variableNodeMatches = this.matchVariableNode(variableNode);
|
|
71
76
|
|
|
72
77
|
equalTo = (termNodeMatches && variableNodeMatches);
|
|
@@ -76,9 +81,9 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
matchTermNode(termNode) {
|
|
79
|
-
termNode =
|
|
84
|
+
termNode = stripBracketsFromTermNode(termNode); ///
|
|
80
85
|
|
|
81
|
-
const termNodeMatches = this.
|
|
86
|
+
const termNodeMatches = this.term.matchTermNode(termNode);
|
|
82
87
|
|
|
83
88
|
return termNodeMatches;
|
|
84
89
|
}
|
|
@@ -88,7 +93,7 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
88
93
|
|
|
89
94
|
const variableNameA = variableName; ///
|
|
90
95
|
|
|
91
|
-
variableName =
|
|
96
|
+
variableName = this.variable.getName();
|
|
92
97
|
|
|
93
98
|
const variableNameB = variableName; ///
|
|
94
99
|
|
|
@@ -116,10 +121,12 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
116
121
|
unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
|
|
117
122
|
let unifiedWithEquivalence;
|
|
118
123
|
|
|
119
|
-
const
|
|
124
|
+
const termNode = this.term.getNode(),
|
|
125
|
+
equivalenceMatchesTermNode = equivalence.matchTermNode(termNode);
|
|
120
126
|
|
|
121
127
|
if (equivalenceMatchesTermNode) {
|
|
122
|
-
const
|
|
128
|
+
const variableNode = this.variable.getNode(),
|
|
129
|
+
equivalenceMatchesVariableNode = equivalence.matchVariableNode(variableNode);
|
|
123
130
|
|
|
124
131
|
if (equivalenceMatchesVariableNode) {
|
|
125
132
|
unifiedWithEquivalence = true;
|
|
@@ -145,7 +152,7 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
145
152
|
string = stringFromTermAndVariable(term, variable, localContext),
|
|
146
153
|
substitutionTokens = localContext.nodeAsTokens(substitutionNode);
|
|
147
154
|
|
|
148
|
-
termForVariableSubstitution = new TermForVariableSubstitution(string,
|
|
155
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
|
|
149
156
|
}
|
|
150
157
|
}
|
|
151
158
|
|
|
@@ -155,13 +162,16 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
155
162
|
static fromTernAndVariable(term, variable, localContext) {
|
|
156
163
|
let termNode = term.getNode();
|
|
157
164
|
|
|
158
|
-
termNode =
|
|
165
|
+
termNode = stripBracketsFromTermNode(termNode); ///
|
|
166
|
+
|
|
167
|
+
const { Term } = shim;
|
|
168
|
+
|
|
169
|
+
term = Term.fromTermNode(termNode, localContext);
|
|
159
170
|
|
|
160
171
|
const string = stringFromTermAndVariable(term, variable, localContext),
|
|
161
|
-
variableNode = variable.getNode(),
|
|
162
172
|
substitutionNode = null,
|
|
163
173
|
substitutionTokens = null,
|
|
164
|
-
termForVariableSubstitution = new TermForVariableSubstitution(string,
|
|
174
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
|
|
165
175
|
|
|
166
176
|
return termForVariableSubstitution;
|
|
167
177
|
}
|
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,22 +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
|
|
29
|
+
return statement;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
getSubstitutionNode() {
|
|
@@ -33,12 +35,6 @@ export default class Substitution {
|
|
|
33
35
|
return substitutionNode;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
getVariableName() {
|
|
37
|
-
const variableName = null;
|
|
38
|
-
|
|
39
|
-
return variableName;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
38
|
getMetavariableName() {
|
|
43
39
|
const metavariableName = null;
|
|
44
40
|
|
|
@@ -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;
|
package/src/substitutions.js
CHANGED
|
@@ -54,6 +54,8 @@ export default class Substitutions {
|
|
|
54
54
|
return metavariableNames;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
mapSubstitution(callback) { return this.array.map(callback); }
|
|
58
|
+
|
|
57
59
|
findSubstitution(callback) { return this.array.find(callback) || null; } ///
|
|
58
60
|
|
|
59
61
|
someSubstitution(callback) { return this.array.some(callback); }
|
package/src/supposition.js
CHANGED
|
@@ -7,10 +7,11 @@ import UnqualifiedStatement from "./statement/unqualified";
|
|
|
7
7
|
|
|
8
8
|
import { nodeQuery } from "./utilities/query";
|
|
9
9
|
import { assignAssignments } from "./utilities/assignments";
|
|
10
|
+
import { unqualifiedStatementFromJSON, unqualifiedStatementToUnqualifiedStatementJSON } from "./utilities/json";
|
|
10
11
|
|
|
11
12
|
const unqualifiedStatementNodeQuery = nodeQuery("/supposition/unqualifiedStatement");
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
class Supposition {
|
|
14
15
|
constructor(fileContext, unqualifiedStatement) {
|
|
15
16
|
this.fileContext = fileContext;
|
|
16
17
|
this.unqualifiedStatement = unqualifiedStatement;
|
|
@@ -71,7 +72,13 @@ export default class Supposition {
|
|
|
71
72
|
|
|
72
73
|
const statement = this.unqualifiedStatement.getStatement(),
|
|
73
74
|
statementNode = statement.getNode(),
|
|
74
|
-
|
|
75
|
+
statementTokens = statement.getTokens(),
|
|
76
|
+
context = this.fileContext, ///
|
|
77
|
+
tokens = statementTokens; ///
|
|
78
|
+
|
|
79
|
+
localContext = LocalContext.fromContextAndTokens(context, tokens); ///
|
|
80
|
+
|
|
81
|
+
const subproofAssertion = SubproofAssertion.fromStatementNode(statementNode, localContext);
|
|
75
82
|
|
|
76
83
|
if (subproofAssertion !== null) {
|
|
77
84
|
subproofUnified = subproofAssertion.unifySubproof(subproof, substitutions, this.fileContext, localContext);
|
|
@@ -131,7 +138,7 @@ export default class Supposition {
|
|
|
131
138
|
}
|
|
132
139
|
|
|
133
140
|
toJSON() {
|
|
134
|
-
const unqualifiedStatementJSON = this.unqualifiedStatement
|
|
141
|
+
const unqualifiedStatementJSON = unqualifiedStatementToUnqualifiedStatementJSON(this.unqualifiedStatement),
|
|
135
142
|
unqualifiedStatement = unqualifiedStatementJSON, ///
|
|
136
143
|
json = {
|
|
137
144
|
unqualifiedStatement
|
|
@@ -141,13 +148,8 @@ export default class Supposition {
|
|
|
141
148
|
}
|
|
142
149
|
|
|
143
150
|
static fromJSON(json, fileContext) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
json = unqualifiedStatement; ///
|
|
147
|
-
|
|
148
|
-
unqualifiedStatement = UnqualifiedStatement.fromJSON(json, fileContext);
|
|
149
|
-
|
|
150
|
-
const supposition = new Supposition(fileContext, unqualifiedStatement);
|
|
151
|
+
const unqualifiedStatement = unqualifiedStatementFromJSON(json, fileContext),
|
|
152
|
+
supposition = new Supposition(fileContext, unqualifiedStatement);
|
|
151
153
|
|
|
152
154
|
return supposition;
|
|
153
155
|
}
|
|
@@ -160,3 +162,9 @@ export default class Supposition {
|
|
|
160
162
|
return supposition
|
|
161
163
|
}
|
|
162
164
|
}
|
|
165
|
+
|
|
166
|
+
Object.assign(shim, {
|
|
167
|
+
Supposition
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
export default Supposition;
|
package/src/term.js
CHANGED
|
@@ -11,6 +11,7 @@ import { objectType } from "./type";
|
|
|
11
11
|
import { nodeQuery, nodesQuery } from "./utilities/query"
|
|
12
12
|
import { termNodeFromTermString } from "./utilities/node";
|
|
13
13
|
import { variableNameFromVariableNode } from "./utilities/name";
|
|
14
|
+
import { typeFromJSON, typeToTypeJSON } from "./utilities/json";
|
|
14
15
|
|
|
15
16
|
const { filter } = arrayUtilities;
|
|
16
17
|
|
|
@@ -236,12 +237,12 @@ class Term {
|
|
|
236
237
|
}
|
|
237
238
|
|
|
238
239
|
toJSON() {
|
|
239
|
-
const typeJSON = this.type
|
|
240
|
+
const typeJSON = typeToTypeJSON(this.type),
|
|
240
241
|
string = this.string,
|
|
241
242
|
type = typeJSON, ///
|
|
242
243
|
json = {
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
type,
|
|
245
|
+
string
|
|
245
246
|
};
|
|
246
247
|
|
|
247
248
|
return json;
|
|
@@ -249,9 +250,9 @@ class Term {
|
|
|
249
250
|
|
|
250
251
|
static fromJSON(json, fileContext) {
|
|
251
252
|
const { string } = json,
|
|
252
|
-
termString = string, ///
|
|
253
253
|
lexer = fileContext.getLexer(),
|
|
254
254
|
parser = fileContext.getParser(),
|
|
255
|
+
termString = string, ///
|
|
255
256
|
termNode = termNodeFromTermString(termString, lexer, parser),
|
|
256
257
|
node = termNode, ///
|
|
257
258
|
type = typeFromJSON(json, fileContext),
|
|
@@ -328,14 +329,3 @@ Object.assign(shim, {
|
|
|
328
329
|
});
|
|
329
330
|
|
|
330
331
|
export default Term;
|
|
331
|
-
|
|
332
|
-
function typeFromJSON(json, fileContext) {
|
|
333
|
-
let { type } = json;
|
|
334
|
-
|
|
335
|
-
const { name } = type,
|
|
336
|
-
typeName = name; ///
|
|
337
|
-
|
|
338
|
-
type = fileContext.findTypeByTypeName(typeName);
|
|
339
|
-
|
|
340
|
-
return type;
|
|
341
|
-
}
|