occam-verify-cli 1.0.438 → 1.0.444
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/context/file.js +38 -35
- package/lib/context/local.js +10 -10
- package/lib/context/release.js +6 -6
- package/lib/context/temporary.js +14 -14
- package/lib/element/assertion/contained.js +45 -45
- package/lib/element/assertion/defined.js +13 -13
- package/lib/element/assertion/property.js +23 -22
- package/lib/element/assertion/satisfies.js +7 -6
- package/lib/element/assertion/subproof.js +20 -17
- package/lib/element/assertion/type.js +3 -2
- package/lib/element/assertion.js +1 -23
- package/lib/element/assumption.js +24 -22
- package/lib/element/axiom.js +9 -12
- package/lib/element/axiomLemmaTheoremConjecture.js +32 -32
- package/lib/element/{statement/combinator → combinator}/bracketed.js +16 -16
- package/lib/element/combinator.js +229 -0
- package/lib/element/conclusion.js +11 -9
- package/lib/element/{term/constructor → constructor}/bracketed.js +5 -5
- package/lib/element/constructor.js +232 -0
- package/lib/element/declaration/combinator.js +2 -16
- package/lib/element/declaration/complexType.js +12 -12
- package/lib/element/declaration/constructor.js +13 -11
- package/lib/element/declaration/simpleType.js +4 -4
- package/lib/element/declaration/typePrefix.js +2 -2
- package/lib/element/declaration/variable.js +3 -3
- package/lib/element/deduction.js +11 -9
- package/lib/element/derivation.js +7 -10
- package/lib/element/equivalence.js +10 -10
- package/lib/element/equivalences.js +5 -5
- package/lib/element/frame.js +32 -38
- package/lib/element/hypothesis.js +3 -3
- package/lib/element/judgement.js +6 -4
- package/lib/element/label.js +8 -8
- package/lib/element/metaLemmaMetatheorem.js +5 -5
- package/lib/element/metaType.js +17 -80
- package/lib/element/metavariable.js +34 -34
- package/lib/element/parameter.js +3 -3
- package/lib/element/premise.js +49 -58
- package/lib/element/property.js +9 -9
- package/lib/element/propertyRelation.js +13 -13
- package/lib/element/reference.js +14 -17
- package/lib/element/rule.js +21 -21
- package/lib/element/signature.js +11 -11
- package/lib/element/statement.js +18 -18
- package/lib/element/step.js +83 -55
- package/lib/element/subDerivation.js +7 -10
- package/lib/element/subproof.js +6 -14
- package/lib/element/substitution/frame.js +1 -7
- package/lib/element/substitution/reference.js +2 -3
- package/lib/element/substitution/statement.js +44 -15
- package/lib/element/substitution/term.js +10 -57
- package/lib/element/substitution.js +5 -11
- package/lib/element/substitutions.js +29 -29
- package/lib/element/supposition.js +63 -55
- package/lib/element/term.js +21 -34
- package/lib/element/type.js +47 -60
- package/lib/element/typePrefix.js +5 -5
- package/lib/element/variable.js +9 -9
- package/lib/element.js +9 -3
- package/lib/metaTypes.js +52 -0
- package/lib/node/axiomLemmaTheoremConjecture.js +9 -9
- package/lib/node/body/axiom.js +2 -25
- package/lib/node/body/conjecture.js +2 -25
- package/lib/node/body/lemma.js +2 -25
- package/lib/node/body/metaLemma.js +2 -25
- package/lib/node/body/metatheorem.js +2 -25
- package/lib/node/body/rule.js +15 -1
- package/lib/node/body/theorem.js +2 -25
- package/lib/node/body.js +25 -2
- package/lib/node/combinator.js +11 -2
- package/lib/node/constructor.js +11 -2
- package/lib/node/declaration/combinator.js +5 -5
- package/lib/node/declaration/constructor.js +8 -8
- package/lib/node/declaration/property.js +15 -15
- package/lib/node/declaration/simpleType.js +31 -31
- package/lib/node/declaration/variable.js +8 -8
- package/lib/node/equality.js +8 -8
- package/lib/node/frame.js +20 -20
- package/lib/node/header.js +22 -22
- package/lib/node/metaLemmaMetaTheorem.js +16 -16
- package/lib/node/metavariable.js +15 -15
- package/lib/node/property.js +8 -8
- package/lib/node/propertyRelation.js +8 -8
- package/lib/node/rule.js +16 -16
- package/lib/node/statement.js +12 -12
- package/lib/node/step.js +22 -22
- package/lib/node/subproof.js +8 -8
- package/lib/node/substitution/frame.js +19 -19
- package/lib/node/substitution/statement.js +19 -19
- package/lib/node/substitution/term.js +19 -19
- package/lib/node/term.js +35 -35
- package/lib/preamble.js +5 -5
- package/lib/process/instantiate.js +20 -2
- package/lib/process/unify.js +39 -42
- package/lib/process/validate.js +431 -0
- package/lib/process/verify.js +44 -135
- package/lib/types.js +27 -0
- package/lib/utilities/brackets.js +4 -4
- package/lib/utilities/element.js +91 -55
- package/lib/utilities/instance.js +18 -18
- package/lib/utilities/statement.js +2 -2
- package/lib/utilities/string.js +21 -10
- package/lib/utilities/unification.js +237 -0
- package/lib/utilities/validation.js +251 -0
- package/package.json +6 -6
- package/src/context/file.js +37 -31
- package/src/context/local.js +8 -8
- package/src/context/release.js +9 -6
- package/src/context/temporary.js +11 -11
- package/src/element/assertion/contained.js +19 -20
- package/src/element/assertion/defined.js +11 -12
- package/src/element/assertion/property.js +20 -20
- package/src/element/assertion/satisfies.js +6 -6
- package/src/element/assertion/subproof.js +17 -15
- package/src/element/assertion/type.js +2 -2
- package/src/element/assertion.js +0 -2
- package/src/element/assumption.js +22 -19
- package/src/element/axiom.js +7 -11
- package/src/element/axiomLemmaTheoremConjecture.js +36 -36
- package/src/element/{statement/combinator → combinator}/bracketed.js +7 -7
- package/src/element/combinator.js +90 -0
- package/src/element/conclusion.js +12 -10
- package/src/element/{term/constructor → constructor}/bracketed.js +5 -5
- package/src/element/{term/constructor.js → constructor.js} +17 -25
- package/src/element/declaration/combinator.js +1 -22
- package/src/element/declaration/complexType.js +11 -11
- package/src/element/declaration/constructor.js +13 -10
- package/src/element/declaration/simpleType.js +3 -3
- package/src/element/declaration/typePrefix.js +1 -1
- package/src/element/declaration/variable.js +2 -2
- package/src/element/deduction.js +12 -9
- package/src/element/derivation.js +6 -10
- package/src/element/equivalence.js +8 -8
- package/src/element/equivalences.js +4 -4
- package/src/element/frame.js +28 -30
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +6 -3
- package/src/element/label.js +4 -4
- package/src/element/metaLemmaMetatheorem.js +4 -3
- package/src/element/metaType.js +9 -45
- package/src/element/metavariable.js +29 -31
- package/src/element/parameter.js +2 -2
- package/src/element/premise.js +55 -62
- package/src/element/property.js +6 -6
- package/src/element/propertyRelation.js +11 -11
- package/src/element/reference.js +12 -21
- package/src/element/rule.js +17 -16
- package/src/element/signature.js +10 -9
- package/src/element/statement.js +16 -18
- package/src/element/step.js +93 -55
- package/src/element/subDerivation.js +6 -10
- package/src/element/subproof.js +4 -12
- package/src/element/substitution/frame.js +0 -2
- package/src/element/substitution/reference.js +1 -5
- package/src/element/substitution/statement.js +44 -14
- package/src/element/substitution/term.js +10 -13
- package/src/element/substitution.js +3 -5
- package/src/element/substitutions.js +48 -30
- package/src/element/supposition.js +88 -70
- package/src/element/term.js +18 -28
- package/src/element/type.js +42 -36
- package/src/element/typePrefix.js +3 -3
- package/src/element/variable.js +7 -7
- package/src/element.js +3 -1
- package/src/metaTypes.js +42 -0
- package/src/node/axiomLemmaTheoremConjecture.js +6 -6
- package/src/node/body/axiom.js +0 -21
- package/src/node/body/conjecture.js +0 -23
- package/src/node/body/lemma.js +0 -23
- package/src/node/body/metaLemma.js +0 -23
- package/src/node/body/metatheorem.js +0 -23
- package/src/node/body/rule.js +12 -0
- package/src/node/body/theorem.js +0 -23
- package/src/node/body.js +23 -0
- package/src/node/combinator.js +9 -0
- package/src/node/constructor.js +9 -0
- package/src/node/declaration/combinator.js +5 -5
- package/src/node/declaration/constructor.js +8 -8
- package/src/node/declaration/property.js +14 -14
- package/src/node/declaration/simpleType.js +31 -31
- package/src/node/declaration/variable.js +7 -7
- package/src/node/equality.js +7 -7
- package/src/node/frame.js +21 -21
- package/src/node/header.js +22 -22
- package/src/node/metaLemmaMetaTheorem.js +14 -14
- package/src/node/metavariable.js +14 -14
- package/src/node/property.js +7 -7
- package/src/node/propertyRelation.js +7 -7
- package/src/node/rule.js +15 -15
- package/src/node/statement.js +12 -12
- package/src/node/step.js +21 -21
- package/src/node/subproof.js +7 -7
- package/src/node/substitution/frame.js +18 -18
- package/src/node/substitution/statement.js +18 -18
- package/src/node/substitution/term.js +18 -18
- package/src/node/term.js +34 -34
- package/src/preamble.js +4 -4
- package/src/process/instantiate.js +12 -0
- package/src/process/unify.js +53 -57
- package/src/process/validate.js +316 -0
- package/src/process/verify.js +50 -138
- package/src/types.js +18 -0
- package/src/utilities/brackets.js +10 -6
- package/src/utilities/element.js +125 -82
- package/src/utilities/instance.js +18 -18
- package/src/utilities/statement.js +2 -2
- package/src/utilities/string.js +34 -20
- package/src/{mixins/step/unify.js → utilities/unification.js} +82 -68
- package/src/{mixins/statement/validate.js → utilities/validation.js} +143 -69
- package/lib/element/statement/combinator.js +0 -105
- package/lib/element/term/constructor.js +0 -172
- package/lib/mixins/statement/validate.js +0 -198
- package/lib/mixins/step/unify.js +0 -228
- package/lib/mixins/term/verify.js +0 -65
- package/src/element/statement/combinator.js +0 -59
- package/src/mixins/term/verify.js +0 -81
package/src/element/step.js
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import Element from "../element";
|
|
4
4
|
import elements from "../elements";
|
|
5
|
-
import unifyMixins from "../mixins/step/unify";
|
|
6
5
|
import TemporaryContext from "../context/temporary";
|
|
7
6
|
|
|
8
7
|
import { define } from "../elements";
|
|
8
|
+
import { instantiateStep } from "../process/instantiate";
|
|
9
|
+
import { unifyStatements } from "../utilities/unification";
|
|
9
10
|
import { equateStatements } from "../process/equate";
|
|
11
|
+
import { stepFromStepNode } from "../utilities/element";
|
|
10
12
|
import { propertyAssertionFromStatement } from "../utilities/statement";
|
|
11
13
|
|
|
12
14
|
export default define(class Step extends Element {
|
|
@@ -55,96 +57,121 @@ export default define(class Step extends Element {
|
|
|
55
57
|
return step;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
let
|
|
60
|
+
compareTermAndPropertyRelation(term, propertyRelation, context) {
|
|
61
|
+
let comparesToTermAndPropertyRelation = false;
|
|
60
62
|
|
|
61
63
|
const propertyAssertion = propertyAssertionFromStatement(this.statement, context);
|
|
62
64
|
|
|
63
65
|
if (propertyAssertion !== null) {
|
|
64
|
-
|
|
66
|
+
comparesToTermAndPropertyRelation = propertyAssertion.compareTermAndPropertyRelation(term, propertyRelation, context);
|
|
65
67
|
}
|
|
66
68
|
|
|
67
|
-
return
|
|
69
|
+
return comparesToTermAndPropertyRelation;
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
|
|
71
|
-
let
|
|
72
|
+
verify(substitutions, assignments, context) {
|
|
73
|
+
let verifies = false;
|
|
72
74
|
|
|
73
75
|
const temporaryContext = TemporaryContext.fromNothing(context);
|
|
74
76
|
|
|
75
77
|
context = temporaryContext; ///
|
|
76
78
|
|
|
77
|
-
const
|
|
79
|
+
const node = this.getNode(),
|
|
80
|
+
stepString = this.getString(); ///
|
|
78
81
|
|
|
79
|
-
context.trace(`
|
|
82
|
+
context.trace(`Verifying the '${stepString}' step...`, node);
|
|
80
83
|
|
|
81
|
-
if (this.statement
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
if (this.statement === null) {
|
|
85
|
+
context.debug(`Unable to verify the '${stepString}' step because it is nonsense.`, node);
|
|
86
|
+
} else {
|
|
87
|
+
const referenceVerifies = this.verifyReference(context);
|
|
84
88
|
|
|
85
|
-
if (
|
|
86
|
-
const
|
|
87
|
-
satisfied = this.isSatisfied();
|
|
89
|
+
if (referenceVerifies) {
|
|
90
|
+
const satisfiesAssertioVeriries = this.verifySatisfiesAssertion(context);
|
|
88
91
|
|
|
89
|
-
if (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const referenceVerifies = this.reference.validate(context);
|
|
92
|
+
if (satisfiesAssertioVeriries) {
|
|
93
|
+
const stated = this.isStated(),
|
|
94
|
+
statementValidates = this.statement.validate(assignments, stated, context);
|
|
93
95
|
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
if (statementValidates) {
|
|
97
|
+
const statementUnifies = unifyStatements.some((unifyStatement) => {
|
|
98
|
+
const statementUnifies = unifyStatement(this.statement, this.reference, this.satisfiesAssertion, substitutions, context);
|
|
99
|
+
|
|
100
|
+
if (statementUnifies) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
if (statementUnifies) {
|
|
106
|
+
const { Step } = elements,
|
|
107
|
+
step = Step.fromStatement(this.statement, context),
|
|
108
|
+
stepOrSubproof = step; ///
|
|
109
|
+
|
|
110
|
+
context.addStepOrSubproof(stepOrSubproof);
|
|
111
|
+
|
|
112
|
+
this.setContext(context);
|
|
101
113
|
|
|
102
|
-
|
|
103
|
-
|
|
114
|
+
verifies = true;
|
|
115
|
+
}
|
|
104
116
|
}
|
|
105
|
-
} else {
|
|
106
|
-
validates = true;
|
|
107
117
|
}
|
|
108
118
|
}
|
|
109
|
-
} else {
|
|
110
|
-
context.debug(`Cannot validate the '${stepString}' step because it is nonsense.`, this.node);
|
|
111
119
|
}
|
|
112
120
|
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
context.debug(`...verified the '${stepString}' step.`, this.node);
|
|
121
|
+
if (verifies) {
|
|
122
|
+
context.debug(`...verified the '${stepString}' step.`, node);
|
|
117
123
|
}
|
|
118
124
|
|
|
119
|
-
return
|
|
125
|
+
return verifies;
|
|
120
126
|
}
|
|
121
127
|
|
|
122
|
-
|
|
123
|
-
let
|
|
128
|
+
verifyReference(context) {
|
|
129
|
+
let referenceVeriries;
|
|
124
130
|
|
|
125
|
-
|
|
131
|
+
const node = this.getNode(),
|
|
132
|
+
stepString = this.getString(); ///
|
|
126
133
|
|
|
127
|
-
|
|
134
|
+
context.trace(`Verifying the '${stepString}' step's reference... `, node);
|
|
128
135
|
|
|
129
|
-
|
|
136
|
+
if (this.reference !== null) {
|
|
137
|
+
referenceVeriries = this.reference.verify(context);
|
|
138
|
+
} else {
|
|
139
|
+
referenceVeriries = true;
|
|
140
|
+
}
|
|
130
141
|
|
|
131
|
-
|
|
132
|
-
|
|
142
|
+
if (referenceVeriries) {
|
|
143
|
+
context.debug(`...verified the '${stepString}' step's reference. `, node);
|
|
144
|
+
}
|
|
133
145
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
146
|
+
return referenceVeriries;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
verifySatisfiesAssertion(context) {
|
|
150
|
+
let satisfiesAssertionVerifies;
|
|
151
|
+
|
|
152
|
+
const node = this.getNode(),
|
|
153
|
+
stepString = this.getString(); ///
|
|
138
154
|
|
|
139
|
-
|
|
140
|
-
|
|
155
|
+
context.trace(`Verifying the '${stepString}' step's satisfies assertion... `, node);
|
|
156
|
+
|
|
157
|
+
if (this.satisfiesAssertion !== null) {
|
|
158
|
+
const stated = true,
|
|
159
|
+
assignments = null;
|
|
160
|
+
|
|
161
|
+
satisfiesAssertionVerifies = this.satisfiesAssertion.validate(assignments, stated, context);
|
|
162
|
+
} else {
|
|
163
|
+
satisfiesAssertionVerifies = true;
|
|
141
164
|
}
|
|
142
165
|
|
|
143
|
-
|
|
166
|
+
if (satisfiesAssertionVerifies) {
|
|
167
|
+
context.debug(`...verified the '${stepString}' step's satisfies assertion. `, node);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return satisfiesAssertionVerifies;
|
|
144
171
|
}
|
|
145
172
|
|
|
146
|
-
|
|
147
|
-
let
|
|
173
|
+
compareStatment(statement, context) {
|
|
174
|
+
let comparesToStatement;
|
|
148
175
|
|
|
149
176
|
const leftStatement = statement, ///
|
|
150
177
|
rightStatement = this.statement, ///
|
|
@@ -152,9 +179,9 @@ export default define(class Step extends Element {
|
|
|
152
179
|
rightStatementNode = rightStatement.getNode(),
|
|
153
180
|
statementsEquate = equateStatements(leftStatementNode, rightStatementNode, context);
|
|
154
181
|
|
|
155
|
-
|
|
182
|
+
comparesToStatement = statementsEquate; ///
|
|
156
183
|
|
|
157
|
-
return
|
|
184
|
+
return comparesToStatement;
|
|
158
185
|
}
|
|
159
186
|
|
|
160
187
|
unifyWithSatisfiesAssertion(satisfiesAssertion, context) {
|
|
@@ -191,4 +218,15 @@ export default define(class Step extends Element {
|
|
|
191
218
|
}
|
|
192
219
|
|
|
193
220
|
static name = "Step";
|
|
221
|
+
|
|
222
|
+
static fromStatement(statement, context) {
|
|
223
|
+
const statementString = statement.getString(),
|
|
224
|
+
stepString = statementString, ///
|
|
225
|
+
string = `${stepString}
|
|
226
|
+
`,
|
|
227
|
+
stepNode = instantiateStep(string, context),
|
|
228
|
+
step = stepFromStepNode(stepNode, context);
|
|
229
|
+
|
|
230
|
+
return step;;
|
|
231
|
+
}
|
|
194
232
|
});
|
|
@@ -32,19 +32,15 @@ export default define(class SubDerivation extends Element {
|
|
|
32
32
|
|
|
33
33
|
verifies = this.stepsOrSubproofs.every((stepOrSubproof) => { ///
|
|
34
34
|
const assignments = [],
|
|
35
|
-
|
|
35
|
+
stepOrSubproofVarifies = stepOrSubproof.verify(substitutions, assignments, context);
|
|
36
36
|
|
|
37
|
-
if (
|
|
38
|
-
const
|
|
37
|
+
if (stepOrSubproofVarifies) {
|
|
38
|
+
const assignmentsAssigned = assignAssignments(assignments, context);
|
|
39
39
|
|
|
40
|
-
if (
|
|
41
|
-
|
|
40
|
+
if (assignmentsAssigned) {
|
|
41
|
+
context.addStepOrSubproof(stepOrSubproof);
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
context.addStepOrSubproof(stepOrSubproof);
|
|
45
|
-
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
43
|
+
return true;
|
|
48
44
|
}
|
|
49
45
|
}
|
|
50
46
|
});
|
package/src/element/subproof.js
CHANGED
|
@@ -46,16 +46,8 @@ export default define(class Subproof extends Element {
|
|
|
46
46
|
return sStep;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
unify(substitutions, context) {
|
|
50
|
-
let unifies;
|
|
51
|
-
|
|
52
|
-
unifies = true; ///
|
|
53
|
-
|
|
54
|
-
return unifies;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
49
|
verify(substitutions, assignments, context) {
|
|
58
|
-
let
|
|
50
|
+
let verifies = false;
|
|
59
51
|
|
|
60
52
|
const localContext = LocalContext.fromNothing(context); ///
|
|
61
53
|
|
|
@@ -73,14 +65,14 @@ export default define(class Subproof extends Element {
|
|
|
73
65
|
const subDerivationVerifies = this.subDerivation.verify(substitutions, context);
|
|
74
66
|
|
|
75
67
|
if (subDerivationVerifies) {
|
|
76
|
-
|
|
68
|
+
verifies = true;
|
|
77
69
|
}
|
|
78
70
|
}
|
|
79
71
|
|
|
80
|
-
return
|
|
72
|
+
return verifies;
|
|
81
73
|
}
|
|
82
74
|
|
|
83
|
-
|
|
75
|
+
compareStatement(statement, context) {
|
|
84
76
|
const statementUnifies = false;
|
|
85
77
|
|
|
86
78
|
return statementUnifies;
|
|
@@ -33,8 +33,6 @@ export default define(class FrameSubstitution extends Substitution {
|
|
|
33
33
|
|
|
34
34
|
isMetavariableEqualToMetavariable(metavariable) { return this.metavariable.isEqualTo(metavariable); }
|
|
35
35
|
|
|
36
|
-
matchParameter(parameter) { return this.metavariable.matchParameter(parameter); }
|
|
37
|
-
|
|
38
36
|
verify(context) {
|
|
39
37
|
let verifies = false;
|
|
40
38
|
|
|
@@ -22,11 +22,7 @@ export default define(class ReferenceSubstitution extends Substitution {
|
|
|
22
22
|
return this.metavariable;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
isReferenceEqualToReference(reference) {
|
|
26
|
-
const referenceEqualToReference = this.reference.isEqualTo(reference);
|
|
27
|
-
|
|
28
|
-
return referenceEqualToReference;
|
|
29
|
-
}
|
|
25
|
+
isReferenceEqualToReference(reference) { return this.reference.isEqualTo(reference); }
|
|
30
26
|
|
|
31
27
|
static name = "ReferenceSubstitution";
|
|
32
28
|
|
|
@@ -43,18 +43,16 @@ export default define(class StatementSubstitution extends Substitution {
|
|
|
43
43
|
return replacementNode;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return simple;
|
|
46
|
+
setStatement(statement) {
|
|
47
|
+
this.statement = statement;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const statementEqualToStatement = this.statement.isEqualTo(statement);
|
|
50
|
+
setMetavariable(metavariable) {
|
|
51
|
+
this.metavariable = metavariable;
|
|
52
|
+
}
|
|
56
53
|
|
|
57
|
-
|
|
54
|
+
setSubstitution(substitution) {
|
|
55
|
+
this.substitution = substitution;
|
|
58
56
|
}
|
|
59
57
|
|
|
60
58
|
isMetavariableEqualToMetavariable(metavariable) { return this.metavariable.isEqualTo(metavariable); }
|
|
@@ -75,7 +73,19 @@ export default define(class StatementSubstitution extends Substitution {
|
|
|
75
73
|
return substitutionEqualToSubstitution;
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
|
|
76
|
+
isStatementEqualToStatement(statement, context) {
|
|
77
|
+
statement = stripBracketsFromStatement(statement, context); ///
|
|
78
|
+
|
|
79
|
+
const statementEqualToStatement = this.statement.isEqualTo(statement);
|
|
80
|
+
|
|
81
|
+
return statementEqualToStatement;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
isSimple() {
|
|
85
|
+
const simple = (this.substitution === null);
|
|
86
|
+
|
|
87
|
+
return simple;
|
|
88
|
+
}
|
|
79
89
|
|
|
80
90
|
unifyStatement(statement, context) {
|
|
81
91
|
let substitution = null;
|
|
@@ -205,8 +215,17 @@ export default define(class StatementSubstitution extends Substitution {
|
|
|
205
215
|
statement = stripBracketsFromStatement(statement, context); ///
|
|
206
216
|
|
|
207
217
|
const string = stringFromStatementAndMetavariable(statement, metavariable),
|
|
208
|
-
statementSubstitutionNode = instantiateStatementSubstitution(string, context)
|
|
209
|
-
|
|
218
|
+
statementSubstitutionNode = instantiateStatementSubstitution(string, context);
|
|
219
|
+
|
|
220
|
+
context = {
|
|
221
|
+
nodeAsString: () => string
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const statementSubstitution = statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context);
|
|
225
|
+
|
|
226
|
+
statementSubstitution.setStatement(statement);
|
|
227
|
+
|
|
228
|
+
statementSubstitution.setMetavariable(metavariable);
|
|
210
229
|
|
|
211
230
|
return statementSubstitution;
|
|
212
231
|
}
|
|
@@ -215,8 +234,19 @@ export default define(class StatementSubstitution extends Substitution {
|
|
|
215
234
|
statement = stripBracketsFromStatement(statement, context); ///
|
|
216
235
|
|
|
217
236
|
const string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context),
|
|
218
|
-
statementSubstitutionNode = instantiateStatementSubstitution(string, context)
|
|
219
|
-
|
|
237
|
+
statementSubstitutionNode = instantiateStatementSubstitution(string, context);
|
|
238
|
+
|
|
239
|
+
context = {
|
|
240
|
+
nodeAsString: () => string
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
const statementSubstitution = statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context);
|
|
244
|
+
|
|
245
|
+
statementSubstitution.setStatement(statement);
|
|
246
|
+
|
|
247
|
+
statementSubstitution.setMetavariable(metavariable);
|
|
248
|
+
|
|
249
|
+
statementSubstitution.setSubstitution(substitution);
|
|
220
250
|
|
|
221
251
|
return statementSubstitution;
|
|
222
252
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import elements from "../../elements";
|
|
4
3
|
import Substitution from "../substitution";
|
|
5
4
|
|
|
6
5
|
import { define } from "../../elements";
|
|
@@ -31,28 +30,26 @@ export default define(class TermSubstitution extends Substitution {
|
|
|
31
30
|
return replacementNode;
|
|
32
31
|
}
|
|
33
32
|
|
|
33
|
+
isTermEqualToTerm(term, context) {
|
|
34
|
+
term = stripBracketsFromTerm(term, context); ///
|
|
35
|
+
|
|
36
|
+
const termEqualToTerm = this.term.isEqualTo(term);
|
|
37
|
+
|
|
38
|
+
return termEqualToTerm;
|
|
39
|
+
}
|
|
40
|
+
|
|
34
41
|
isTrivial() {
|
|
35
42
|
let trivial = false;
|
|
36
43
|
|
|
37
|
-
const
|
|
44
|
+
const termComparesToVaraible = this.term.compareVariable(this.variable);
|
|
38
45
|
|
|
39
|
-
if (
|
|
46
|
+
if (termComparesToVaraible) {
|
|
40
47
|
trivial = true;
|
|
41
48
|
}
|
|
42
49
|
|
|
43
50
|
return trivial;
|
|
44
51
|
}
|
|
45
52
|
|
|
46
|
-
isTermEqualToTerm(term, context) {
|
|
47
|
-
term = stripBracketsFromTerm(term, context); ///
|
|
48
|
-
|
|
49
|
-
const termEqualToTerm = this.term.isEqualTo(term);
|
|
50
|
-
|
|
51
|
-
return termEqualToTerm;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
matchParameter(parameter) { return this.variable.matchParameter(parameter); }
|
|
55
|
-
|
|
56
53
|
verify(context) {
|
|
57
54
|
let verifies = false;
|
|
58
55
|
|
|
@@ -110,14 +110,12 @@ export default class Substitution extends Element {
|
|
|
110
110
|
return substitutionEqualToSubstitution;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
const
|
|
113
|
+
compareParameter(parameter) {
|
|
114
|
+
const comparesToParameter = false;
|
|
115
115
|
|
|
116
|
-
return
|
|
116
|
+
return comparesToParameter;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
matchSubstitutionNode(substitutionNode) { return this.node.match(substitutionNode); }
|
|
120
|
-
|
|
121
119
|
resolve(substitutions, context) {
|
|
122
120
|
const resolved = true;
|
|
123
121
|
|
|
@@ -6,6 +6,7 @@ import Element from "../element";
|
|
|
6
6
|
|
|
7
7
|
import { define } from "../elements";
|
|
8
8
|
import { EMPTY_STRING } from "../constants";
|
|
9
|
+
import { substitutionsStringFromSubstitutions } from "../utilities/string";
|
|
9
10
|
|
|
10
11
|
const { find, first, clear, prune, filter, compress, correlate } = arrayUtilities;
|
|
11
12
|
|
|
@@ -25,8 +26,6 @@ export default define(class Substitutions extends Element {
|
|
|
25
26
|
return this.savedArray;
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
getLength() { return this.array.length; }
|
|
29
|
-
|
|
30
29
|
getMetavariables() {
|
|
31
30
|
const metavariables = [];
|
|
32
31
|
|
|
@@ -75,6 +74,8 @@ export default define(class Substitutions extends Element {
|
|
|
75
74
|
return firstSubstitution;
|
|
76
75
|
}
|
|
77
76
|
|
|
77
|
+
getLength() { return this.array.length; }
|
|
78
|
+
|
|
78
79
|
mapSubstitution(callback) { return this.array.map(callback); }
|
|
79
80
|
|
|
80
81
|
findSubstitution(callback) { return this.array.find(callback) || null; } ///
|
|
@@ -200,9 +201,13 @@ export default define(class Substitutions extends Element {
|
|
|
200
201
|
addSubstitution(substitution, context) {
|
|
201
202
|
this.array.push(substitution);
|
|
202
203
|
|
|
203
|
-
const
|
|
204
|
+
const string = this.asString(),
|
|
205
|
+
substitutionString = substitution.getString(),
|
|
206
|
+
substitutionsString = string; ///
|
|
204
207
|
|
|
205
|
-
|
|
208
|
+
this.setString(string);
|
|
209
|
+
|
|
210
|
+
context.trace(`Added the '${substitutionString}' substitution to the '${substitutionsString}' substitutions.`);
|
|
206
211
|
}
|
|
207
212
|
|
|
208
213
|
removeSubstitution(substitution, context) {
|
|
@@ -216,9 +221,13 @@ export default define(class Substitutions extends Element {
|
|
|
216
221
|
}
|
|
217
222
|
});
|
|
218
223
|
|
|
219
|
-
const
|
|
224
|
+
const string = this.asString(),
|
|
225
|
+
substitutionString = substitution.getString(),
|
|
226
|
+
substitutionsString = string; ///
|
|
227
|
+
|
|
228
|
+
this.setString(string);
|
|
220
229
|
|
|
221
|
-
context.trace(`Removed the '${substitutionString}' substitution.`);
|
|
230
|
+
context.trace(`Removed the '${substitutionString}' substitution from the '${substitutionsString}' substitutions.`);
|
|
222
231
|
}
|
|
223
232
|
|
|
224
233
|
correlateSubstitutions(substitutions) {
|
|
@@ -236,16 +245,6 @@ export default define(class Substitutions extends Element {
|
|
|
236
245
|
return correlates;
|
|
237
246
|
}
|
|
238
247
|
|
|
239
|
-
removeTrivialSubstitutions() {
|
|
240
|
-
filter(this.array, (substitution) => {
|
|
241
|
-
const trivial = substitution.isTrivial();
|
|
242
|
-
|
|
243
|
-
if (!trivial) {
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
248
|
clear() {
|
|
250
249
|
clear(this.array);
|
|
251
250
|
|
|
@@ -318,6 +317,10 @@ export default define(class Substitutions extends Element {
|
|
|
318
317
|
];
|
|
319
318
|
|
|
320
319
|
this.savedArray = null;
|
|
320
|
+
|
|
321
|
+
const string = this.asString();
|
|
322
|
+
|
|
323
|
+
this.setString(string);
|
|
321
324
|
}
|
|
322
325
|
|
|
323
326
|
continue() {
|
|
@@ -332,15 +335,8 @@ export default define(class Substitutions extends Element {
|
|
|
332
335
|
if (length === 0) {
|
|
333
336
|
string = EMPTY_STRING;
|
|
334
337
|
} else {
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
substitutionsString = (substitutionsString === null) ?
|
|
339
|
-
substitutionString :
|
|
340
|
-
`${substitutionsString}, ${substitutionString}`;
|
|
341
|
-
|
|
342
|
-
return substitutionsString;
|
|
343
|
-
}, null);
|
|
338
|
+
const substitutions = this.array, ///
|
|
339
|
+
substitutionsString = substitutionsStringFromSubstitutions(substitutions);
|
|
344
340
|
|
|
345
341
|
string = substitutionsString; ///
|
|
346
342
|
}
|
|
@@ -349,16 +345,38 @@ export default define(class Substitutions extends Element {
|
|
|
349
345
|
}
|
|
350
346
|
|
|
351
347
|
static fromArray(array) {
|
|
352
|
-
|
|
353
|
-
|
|
348
|
+
let string;
|
|
349
|
+
|
|
350
|
+
const context = null;
|
|
351
|
+
|
|
352
|
+
string = null;
|
|
353
|
+
|
|
354
|
+
const node = null,
|
|
355
|
+
savedArray = [],
|
|
356
|
+
substitutions = new Substitutions(context, string, node, array, savedArray);
|
|
357
|
+
|
|
358
|
+
string = substitutions.asString();
|
|
359
|
+
|
|
360
|
+
substitutions.setString(string);
|
|
354
361
|
|
|
355
362
|
return substitutions;
|
|
356
363
|
}
|
|
357
364
|
|
|
358
365
|
static fromNothing() {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
366
|
+
let string;
|
|
367
|
+
|
|
368
|
+
const context = null;
|
|
369
|
+
|
|
370
|
+
string = null;
|
|
371
|
+
|
|
372
|
+
const node = null,
|
|
373
|
+
array = [],
|
|
374
|
+
savedArray = [],
|
|
375
|
+
substitutions = new Substitutions(context, string, node, array, savedArray);
|
|
376
|
+
|
|
377
|
+
string = substitutions.asString();
|
|
378
|
+
|
|
379
|
+
substitutions.setString(string);
|
|
362
380
|
|
|
363
381
|
return substitutions;
|
|
364
382
|
}
|