occam-verify-cli 0.0.1111 → 0.0.1112
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/combinator/bracketed.js +15 -65
- package/lib/combinator.js +4 -8
- package/lib/constructor/bracketed.js +24 -101
- package/lib/constructor.js +4 -8
- package/lib/context/file.js +41 -12
- package/lib/context/local.js +45 -25
- package/lib/context/release.js +2 -2
- package/lib/dom/assertion/contained.js +246 -0
- package/lib/dom/assertion/defined.js +266 -0
- package/lib/dom/assertion/subproof.js +210 -0
- package/lib/dom/assertion/type.js +240 -0
- package/lib/{axiom.js → dom/axiom.js} +18 -8
- package/lib/dom/conclusion.js +171 -0
- package/lib/{conjecture.js → dom/conjecture.js} +18 -8
- package/lib/dom/consequent.js +171 -0
- package/lib/dom/declaration/combinator.js +105 -0
- package/lib/dom/declaration/constructor.js +140 -0
- package/lib/dom/declaration/metavariable.js +154 -0
- package/lib/dom/declaration/type.js +140 -0
- package/lib/dom/declaration/variable.js +155 -0
- package/lib/{declaration.js → dom/declaration.js} +62 -18
- package/lib/dom/derivation.js +137 -0
- package/lib/dom/equality.js +260 -0
- package/lib/dom/error.js +85 -0
- package/lib/dom/frame.js +372 -0
- package/lib/dom/judgement.js +198 -0
- package/lib/dom/label.js +190 -0
- package/lib/{lemma.js → dom/lemma.js} +19 -9
- package/lib/{metaLemma.js → dom/metaLemma.js} +19 -9
- package/lib/dom/metaType.js +261 -0
- package/lib/dom/metatheorem.js +273 -0
- package/lib/dom/metavariable.js +463 -0
- package/lib/dom/premise.js +221 -0
- package/lib/dom/proof.js +154 -0
- package/lib/dom/proofStep.js +239 -0
- package/lib/dom/reference.js +218 -0
- package/lib/dom/rule.js +311 -0
- package/lib/dom/statement.js +379 -0
- package/lib/dom/subDerivation.js +137 -0
- package/lib/dom/subproof.js +211 -0
- package/lib/dom/supposition.js +221 -0
- package/lib/dom/term.js +354 -0
- package/lib/{theorem.js → dom/theorem.js} +18 -8
- package/lib/dom/topLevelAssertion.js +306 -0
- package/lib/dom/type.js +327 -0
- package/lib/dom/variable.js +328 -0
- package/lib/dom.js +27 -0
- package/lib/equivalences.js +307 -0
- package/lib/index.js +40 -35
- package/lib/mixins/proofStep/unify.js +86 -0
- package/lib/mixins/statement/verify.js +27 -2
- package/lib/mixins/term/verify.js +24 -4
- package/lib/substitution/frame.js +3 -3
- package/lib/substitution/statement.js +17 -16
- package/lib/substitution/term.js +10 -7
- package/lib/substitution.js +4 -31
- package/lib/substitutions.js +24 -56
- package/lib/unifier/equality.js +2 -3
- package/lib/unifier/label.js +3 -3
- package/lib/unifier/metaLevel.js +9 -8
- package/lib/unifier/metavariable.js +3 -3
- package/lib/unifier/statementWithCombinator.js +5 -5
- package/lib/unifier/termWithConstructor.js +3 -3
- package/lib/utilities/json.js +26 -40
- package/lib/utilities/string.js +6 -8
- package/lib/utilities/subproof.js +2 -2
- package/lib/utilities/substitutions.js +7 -6
- package/lib/utilities/verification.js +22 -14
- package/lib/verifier/combinator.js +4 -4
- package/lib/verifier/constructor.js +3 -3
- package/lib/verifier/topLevel.js +15 -21
- package/package.json +1 -1
- package/src/combinator/bracketed.js +11 -4
- package/src/combinator.js +3 -10
- package/src/constructor/bracketed.js +17 -5
- package/src/constructor.js +3 -9
- package/src/context/file.js +42 -11
- package/src/context/local.js +26 -34
- package/src/context/release.js +1 -1
- package/src/{assertion → dom/assertion}/contained.js +10 -8
- package/src/{assertion → dom/assertion}/defined.js +14 -11
- package/src/{assertion → dom/assertion}/subproof.js +11 -62
- package/src/{assertion → dom/assertion}/type.js +11 -8
- package/src/{axiom.js → dom/axiom.js} +6 -9
- package/src/dom/conclusion.js +95 -0
- package/src/{conjecture.js → dom/conjecture.js} +5 -8
- package/src/dom/consequent.js +95 -0
- package/src/{declaration → dom/declaration}/combinator.js +8 -5
- package/src/{declaration → dom/declaration}/constructor.js +8 -4
- package/src/{declaration → dom/declaration}/metavariable.js +8 -5
- package/src/{declaration → dom/declaration}/type.js +8 -4
- package/src/{declaration → dom/declaration}/variable.js +9 -6
- package/src/{declaration.js → dom/declaration.js} +11 -16
- package/src/{derivation.js → dom/derivation.js} +9 -12
- package/src/{equality.js → dom/equality.js} +11 -14
- package/src/{error.js → dom/error.js} +6 -3
- package/src/{frame.js → dom/frame.js} +14 -23
- package/src/{judgement.js → dom/judgement.js} +8 -11
- package/src/{label.js → dom/label.js} +9 -16
- package/src/{lemma.js → dom/lemma.js} +5 -9
- package/src/{metaLemma.js → dom/metaLemma.js} +6 -9
- package/src/{metaType.js → dom/metaType.js} +7 -10
- package/src/{metatheorem.js → dom/metatheorem.js} +6 -10
- package/src/{metavariable.js → dom/metavariable.js} +79 -77
- package/src/dom/premise.js +173 -0
- package/src/{proof.js → dom/proof.js} +8 -11
- package/src/dom/proofStep.js +173 -0
- package/src/{reference.js → dom/reference.js} +48 -20
- package/src/{rule.js → dom/rule.js} +13 -17
- package/src/{statement.js → dom/statement.js} +142 -71
- package/src/{subDerivation.js → dom/subDerivation.js} +9 -12
- package/src/{subproof.js → dom/subproof.js} +14 -47
- package/src/dom/supposition.js +173 -0
- package/src/{term.js → dom/term.js} +24 -45
- package/src/{theorem.js → dom/theorem.js} +5 -8
- package/src/{topLevelAssertion.js → dom/topLevelAssertion.js} +12 -14
- package/src/{type.js → dom/type.js} +9 -12
- package/src/{variable.js → dom/variable.js} +20 -28
- package/src/dom.js +13 -0
- package/src/equivalences.js +278 -0
- package/src/index.js +39 -34
- package/src/mixins/proofStep/unify.js +115 -0
- package/src/mixins/statement/verify.js +33 -1
- package/src/mixins/term/verify.js +33 -3
- package/src/substitution/frame.js +2 -2
- package/src/substitution/statement.js +20 -18
- package/src/substitution/term.js +12 -5
- package/src/substitution.js +4 -29
- package/src/substitutions.js +35 -73
- package/src/unifier/equality.js +1 -2
- package/src/unifier/label.js +2 -2
- package/src/unifier/metaLevel.js +9 -7
- package/src/unifier/metavariable.js +2 -2
- package/src/unifier/statementWithCombinator.js +4 -4
- package/src/unifier/termWithConstructor.js +2 -2
- package/src/utilities/json.js +23 -42
- package/src/utilities/string.js +8 -6
- package/src/utilities/subproof.js +2 -2
- package/src/utilities/substitutions.js +7 -5
- package/src/utilities/verification.js +29 -13
- package/src/verifier/combinator.js +3 -3
- package/src/verifier/constructor.js +3 -3
- package/src/verifier/topLevel.js +20 -21
- package/lib/assertion/contained.js +0 -232
- package/lib/assertion/defined.js +0 -211
- package/lib/assertion/subproof.js +0 -203
- package/lib/assertion/type.js +0 -185
- package/lib/conclusion.js +0 -130
- package/lib/consequent.js +0 -130
- package/lib/declaration/combinator.js +0 -90
- package/lib/declaration/constructor.js +0 -90
- package/lib/declaration/metavariable.js +0 -104
- package/lib/declaration/type.js +0 -90
- package/lib/declaration/variable.js +0 -105
- package/lib/derivation.js +0 -91
- package/lib/equality.js +0 -209
- package/lib/error.js +0 -70
- package/lib/frame.js +0 -331
- package/lib/judgement.js +0 -147
- package/lib/label.js +0 -141
- package/lib/metaType.js +0 -255
- package/lib/metatheorem.js +0 -263
- package/lib/metavariable.js +0 -399
- package/lib/mixins/statement/qualified/unify.js +0 -69
- package/lib/mixins/statement/unify.js +0 -42
- package/lib/mixins/statement/unifyIndependenntly.js +0 -46
- package/lib/mixins/term/unify.js +0 -40
- package/lib/premise.js +0 -184
- package/lib/proof.js +0 -103
- package/lib/proofStep.js +0 -179
- package/lib/reference.js +0 -145
- package/lib/rule.js +0 -259
- package/lib/shim.js +0 -14
- package/lib/statement/qualified.js +0 -152
- package/lib/statement/unqualified.js +0 -175
- package/lib/statement.js +0 -270
- package/lib/subDerivation.js +0 -91
- package/lib/subproof.js +0 -181
- package/lib/supposition.js +0 -184
- package/lib/term.js +0 -318
- package/lib/topLevelAssertion.js +0 -305
- package/lib/type.js +0 -321
- package/lib/utilities/equivalences.js +0 -178
- package/lib/variable.js +0 -281
- package/src/conclusion.js +0 -96
- package/src/consequent.js +0 -96
- package/src/mixins/statement/qualified/unify.js +0 -103
- package/src/mixins/statement/unify.js +0 -41
- package/src/mixins/statement/unifyIndependenntly.js +0 -58
- package/src/mixins/term/unify.js +0 -36
- package/src/premise.js +0 -183
- package/src/proofStep.js +0 -181
- package/src/shim.js +0 -5
- package/src/statement/qualified.js +0 -133
- package/src/statement/unqualified.js +0 -166
- package/src/supposition.js +0 -183
- package/src/utilities/equivalences.js +0 -183
package/src/index.js
CHANGED
|
@@ -1,39 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import Type from "./type";
|
|
4
|
-
import Term from "./term";
|
|
5
|
-
import Rule from "./rule";
|
|
6
|
-
import Label from "./label";
|
|
7
|
-
import Axiom from "./axiom";
|
|
8
|
-
import Lemma from "./lemma";
|
|
9
|
-
import Frame from "./frame";
|
|
10
|
-
import Proof from "./proof";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import ProofStep from "./proofStep";
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
-
import
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
import
|
|
28
|
-
import Supposition from "./supposition";
|
|
29
|
-
import Metatheorem from "./metatheorem";
|
|
30
|
-
import Metavariable from "./metavariable";
|
|
31
|
-
import
|
|
32
|
-
import
|
|
33
|
-
import
|
|
34
|
-
import
|
|
35
|
-
import
|
|
36
|
-
import
|
|
3
|
+
import Type from "./dom/type";
|
|
4
|
+
import Term from "./dom/term";
|
|
5
|
+
import Rule from "./dom/rule";
|
|
6
|
+
import Label from "./dom/label";
|
|
7
|
+
import Axiom from "./dom/axiom";
|
|
8
|
+
import Lemma from "./dom/lemma";
|
|
9
|
+
import Frame from "./dom/frame";
|
|
10
|
+
import Proof from "./dom/proof";
|
|
11
|
+
import Error from "./dom/error";
|
|
12
|
+
import Premise from "./dom/premise";
|
|
13
|
+
import Theorem from "./dom/theorem";
|
|
14
|
+
import Equality from "./dom/equality";
|
|
15
|
+
import MetaType from "./dom/metaType";
|
|
16
|
+
import Subproof from "./dom/subproof";
|
|
17
|
+
import Variable from "./dom/variable";
|
|
18
|
+
import ProofStep from "./dom/proofStep";
|
|
19
|
+
import Reference from "./dom/reference";
|
|
20
|
+
import Statement from "./dom/statement";
|
|
21
|
+
import Judgement from "./dom/judgement";
|
|
22
|
+
import MetaLemma from "./dom/metaLemma";
|
|
23
|
+
import Consequent from "./dom/consequent";
|
|
24
|
+
import Conjecture from "./dom/conjecture";
|
|
25
|
+
import Conclusion from "./dom/conclusion";
|
|
26
|
+
import Derivation from "./dom/derivation";
|
|
27
|
+
import Declaration from "./dom/declaration";
|
|
28
|
+
import Supposition from "./dom/supposition";
|
|
29
|
+
import Metatheorem from "./dom/metatheorem";
|
|
30
|
+
import Metavariable from "./dom/metavariable";
|
|
31
|
+
import SubDerivation from "./dom/subDerivation";
|
|
32
|
+
import TypeAssertion from "./dom/assertion/type";
|
|
33
|
+
import TypeDeclaration from "./dom/declaration/type";
|
|
34
|
+
import DefinedAssertion from "./dom/assertion/defined";
|
|
35
|
+
import SubproofAssertion from "./dom/assertion/subproof";
|
|
36
|
+
import ContainedAssertion from "./dom/assertion/contained";
|
|
37
|
+
import VariableDeclaration from "./dom/declaration/variable";
|
|
38
|
+
import CombinatorDeclaration from "./dom/declaration/combinator";
|
|
39
|
+
import ConstructorDeclaration from "./dom/declaration/constructor";
|
|
40
|
+
import MetavariableDeclaration from "./dom/declaration/metavariable";
|
|
41
|
+
import ConstructorBracketedContext from "./context/bracketed/constructor";
|
|
37
42
|
|
|
38
43
|
export { default as Log } from "./log";
|
|
39
44
|
export { default as ReleaseContext } from "./context/release";
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import StatementSubstitution from "../../substitution/statement";
|
|
4
|
+
|
|
5
|
+
function unifyAWithRule(statement, reference, substitutions, context) {
|
|
6
|
+
let unifiedWithRule = false;
|
|
7
|
+
|
|
8
|
+
if (reference !== null) {
|
|
9
|
+
const rule = context.findRuleByReference(reference);
|
|
10
|
+
|
|
11
|
+
if (rule !== null) {
|
|
12
|
+
const ruleString = rule.getString(),
|
|
13
|
+
statementString = statement.getString();
|
|
14
|
+
|
|
15
|
+
context.trace(`Unifying the '${statementString}' statement with the '${ruleString}' rule...`);
|
|
16
|
+
|
|
17
|
+
const proofSteps = context.getProofSteps(),
|
|
18
|
+
statementAndProofStepsUnified = rule.unifyStatementAndProofSteps(statement, proofSteps, context);
|
|
19
|
+
|
|
20
|
+
unifiedWithRule = statementAndProofStepsUnified; ///
|
|
21
|
+
|
|
22
|
+
if (unifiedWithRule) {
|
|
23
|
+
context.debug(`...unified the '${statementString}' statement with the '${ruleString}' rule.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return unifiedWithRule;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function unifyAWithReference(statement, reference, substitutions, context) {
|
|
32
|
+
let unifiedWithReference = false;
|
|
33
|
+
|
|
34
|
+
if (reference !== null) {
|
|
35
|
+
const metavariableVerified = reference.verifyMetavariable(context);
|
|
36
|
+
|
|
37
|
+
if (metavariableVerified) {
|
|
38
|
+
const statementString = statement.getString(),
|
|
39
|
+
referenceString = reference.getString();
|
|
40
|
+
|
|
41
|
+
context.trace(`Unifying the '${statementString}' statement with the '${referenceString}' reference...`);
|
|
42
|
+
|
|
43
|
+
const metavariable = reference.getMetavariable(),
|
|
44
|
+
statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
|
|
45
|
+
substitution = statementSubstitution; ///
|
|
46
|
+
|
|
47
|
+
substitutions.addSubstitution(substitution, context);
|
|
48
|
+
|
|
49
|
+
unifiedWithReference = true;
|
|
50
|
+
|
|
51
|
+
if (unifiedWithReference) {
|
|
52
|
+
context.debug(`...unified the '${statementString}' statement with the '${referenceString}' reference.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return unifiedWithReference;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function unifyAWithAxiomLemmaTheoremOrConjecture(statement, reference, substitutions, context) {
|
|
61
|
+
let unifiedWithAxiomLemmaTheoremOrConjecture = false;
|
|
62
|
+
|
|
63
|
+
if (reference !== null) {
|
|
64
|
+
const axiomLemmaTheoremConjecture = context.findAxiomLemmaTheoremConjectureByReference(reference);
|
|
65
|
+
|
|
66
|
+
if (axiomLemmaTheoremConjecture !== null) {
|
|
67
|
+
const statementString = statement.getString(),
|
|
68
|
+
axiomLemmaTheoremConjectureString = reference.getString();
|
|
69
|
+
|
|
70
|
+
context.trace(`Unifying the '${statementString}' statement with the '${axiomLemmaTheoremConjectureString}' axiom, lemma, theorem or conjecture...`);
|
|
71
|
+
|
|
72
|
+
const proofSteps = context.getProofSteps(),
|
|
73
|
+
statementAndProofStepsUnified = axiomLemmaTheoremConjecture.unifyStatementAndProofSteps(statement, proofSteps, context);
|
|
74
|
+
|
|
75
|
+
if (statementAndProofStepsUnified) {
|
|
76
|
+
const metavariable = reference.getMetavariable(),
|
|
77
|
+
statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
|
|
78
|
+
substitution = statementSubstitution; ///
|
|
79
|
+
|
|
80
|
+
substitutions.addSubstitution(substitution, context);
|
|
81
|
+
|
|
82
|
+
unifiedWithAxiomLemmaTheoremOrConjecture = true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (unifiedWithAxiomLemmaTheoremOrConjecture) {
|
|
86
|
+
context.debug(`...unified the '${statementString}' statement with the '${axiomLemmaTheoremConjectureString}' axiom, lemma, theorem or conjecture.`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return unifiedWithAxiomLemmaTheoremOrConjecture;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function unifyWithProofSteps(statement, reference, substitutions, context) {
|
|
95
|
+
let unifiedWithProofSteps = false;
|
|
96
|
+
|
|
97
|
+
if (reference === null) {
|
|
98
|
+
const proofSteps = context.getProofSteps(),
|
|
99
|
+
statementUnifiedWithProofSteps = statement.unifyWithProofSteps(proofSteps, context);
|
|
100
|
+
|
|
101
|
+
unifiedWithProofSteps = statementUnifiedWithProofSteps; ///
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return unifiedWithProofSteps;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const unifyMixins = [
|
|
108
|
+
unifyAWithRule,
|
|
109
|
+
unifyAWithReference,
|
|
110
|
+
unifyAWithAxiomLemmaTheoremOrConjecture,
|
|
111
|
+
unifyWithProofSteps
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
export default unifyMixins;
|
|
115
|
+
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import BracketedCombinator from "../../combinator/bracketed";
|
|
4
|
+
|
|
3
5
|
import { equalityFromStatement,
|
|
4
6
|
judgementFromStatement,
|
|
5
7
|
metavariableFromStatement,
|
|
@@ -162,6 +164,34 @@ function verifyAsSubproofAssertion(statement, assignments, stated, context) {
|
|
|
162
164
|
return verifiedAsSubproofAssertion;
|
|
163
165
|
}
|
|
164
166
|
|
|
167
|
+
function unifyWithBracketedCombinator(statement, assignments, stated, context) {
|
|
168
|
+
stated = true; ///
|
|
169
|
+
|
|
170
|
+
assignments = null; ///
|
|
171
|
+
|
|
172
|
+
const bracketedCombinator = BracketedCombinator.fromNothing(),
|
|
173
|
+
unifiedWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, assignments, stated, context);
|
|
174
|
+
|
|
175
|
+
return unifiedWithBracketedCombinator;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function unifyWithCombinators(statement, assignments, stated, context) {
|
|
179
|
+
stated = true; ///
|
|
180
|
+
|
|
181
|
+
assignments = null; ///
|
|
182
|
+
|
|
183
|
+
const combinators = context.getCombinators(),
|
|
184
|
+
unifiedWithCombinators = combinators.some((combinator) => {
|
|
185
|
+
const unifiedWithCombinator = combinator.unifyStatement(statement, assignments, stated, context);
|
|
186
|
+
|
|
187
|
+
if (unifiedWithCombinator) {
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
return unifiedWithCombinators;
|
|
193
|
+
}
|
|
194
|
+
|
|
165
195
|
const verifyMixins = [
|
|
166
196
|
verifyAsMetavariable,
|
|
167
197
|
verifyAsEquality,
|
|
@@ -169,7 +199,9 @@ const verifyMixins = [
|
|
|
169
199
|
verifyAsTypeAssertion,
|
|
170
200
|
verifyAsDefinedAssertion,
|
|
171
201
|
verifyAsSubproofAssertion,
|
|
172
|
-
verifyAsContainedAssertion
|
|
202
|
+
verifyAsContainedAssertion,
|
|
203
|
+
unifyWithBracketedCombinator,
|
|
204
|
+
unifyWithCombinators
|
|
173
205
|
];
|
|
174
206
|
|
|
175
207
|
export default verifyMixins;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import dom from "../../dom";
|
|
4
|
+
|
|
5
|
+
import BracketedConstructor from "../../constructor/bracketed";
|
|
4
6
|
|
|
5
7
|
import { nodeQuery } from "../../utilities/query";
|
|
6
8
|
|
|
@@ -9,7 +11,7 @@ const variableNodeQuery = nodeQuery("/term/variable!");
|
|
|
9
11
|
function verifyTermAsVariable(term, localContext, verifyAhead) {
|
|
10
12
|
let termVerifiedAsVariable = false;
|
|
11
13
|
|
|
12
|
-
const { Variable } =
|
|
14
|
+
const { Variable } = dom,
|
|
13
15
|
context = localContext, ///
|
|
14
16
|
termNode = term.getNode(),
|
|
15
17
|
variableNode = variableNodeQuery(termNode),
|
|
@@ -42,8 +44,36 @@ function verifyTermAsVariable(term, localContext, verifyAhead) {
|
|
|
42
44
|
return termVerifiedAsVariable;
|
|
43
45
|
}
|
|
44
46
|
|
|
47
|
+
function unifyWithBracketedConstructor(term, context, verifyAhead) {
|
|
48
|
+
let unifiedWithBracketedConstructor;
|
|
49
|
+
|
|
50
|
+
const bracketedConstructor = BracketedConstructor.fromNothing();
|
|
51
|
+
|
|
52
|
+
unifiedWithBracketedConstructor = bracketedConstructor.unifyTerm(term, context, verifyAhead);
|
|
53
|
+
|
|
54
|
+
return unifiedWithBracketedConstructor;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function unifyWithConstructors(term, context, verifyAhead) {
|
|
58
|
+
let unifiedWithConstructors;
|
|
59
|
+
|
|
60
|
+
const constructors = context.getConstructors();
|
|
61
|
+
|
|
62
|
+
unifiedWithConstructors = constructors.some((constructor) => {
|
|
63
|
+
const unifiedWithConstructor = constructor.unifyTerm(term, context, verifyAhead);
|
|
64
|
+
|
|
65
|
+
if (unifiedWithConstructor) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return unifiedWithConstructors;
|
|
71
|
+
}
|
|
72
|
+
|
|
45
73
|
const verifyMixins = [
|
|
46
|
-
verifyTermAsVariable
|
|
74
|
+
verifyTermAsVariable,
|
|
75
|
+
unifyWithBracketedConstructor,
|
|
76
|
+
unifyWithConstructors
|
|
47
77
|
];
|
|
48
78
|
|
|
49
79
|
export default verifyMixins;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import dom from "../dom";
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
5
|
import FrameSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/frame";
|
|
6
6
|
|
|
@@ -40,7 +40,7 @@ export default class FrameSubstitution extends Substitution {
|
|
|
40
40
|
metavariableNode = metavariableNodeQuery(frameSubstitutionNode);
|
|
41
41
|
|
|
42
42
|
if ((frameNode !== null) && (metavariableNode !== null)) {
|
|
43
|
-
const { Frame, Metavariable } =
|
|
43
|
+
const { Frame, Metavariable } = dom,
|
|
44
44
|
frame = Frame.fromFrameNode(frameNode, context),
|
|
45
45
|
metavariable = Metavariable.fromMetavariableNode(metavariableNode, context),
|
|
46
46
|
node = frameSubstitutionNode, ///
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import shim from "../shim";
|
|
4
3
|
import Substitution from "../substitution";
|
|
4
|
+
import Substitutions from "../substitutions";
|
|
5
5
|
import StatementSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/statement";
|
|
6
6
|
|
|
7
7
|
import { unifySubstitution } from "../utilities/unification";
|
|
8
8
|
import { stripBracketsFromStatement } from "../utilities/verification";
|
|
9
|
-
import { stripBracketsFromStatementNode } from "../utilities/brackets";
|
|
10
9
|
import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
|
|
11
10
|
|
|
12
|
-
class StatementSubstitution extends Substitution {
|
|
11
|
+
export default class StatementSubstitution extends Substitution {
|
|
13
12
|
constructor(string, node, tokens, resolved, statement, metavariable, substitution) {
|
|
14
13
|
super(string, node, tokens);
|
|
15
14
|
|
|
@@ -35,17 +34,27 @@ class StatementSubstitution extends Substitution {
|
|
|
35
34
|
return this.substitution;
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
isStatementEqualTo(statement) {
|
|
37
|
+
isStatementEqualTo(statement, context) {
|
|
38
|
+
statement = stripBracketsFromStatement(statement, context); ///
|
|
39
|
+
|
|
40
|
+
const statementEqualTo = this.statement.isEqualTo(statement);
|
|
41
|
+
|
|
42
|
+
return statementEqualTo;
|
|
43
|
+
}
|
|
39
44
|
|
|
40
45
|
isMetavariableEqualTo(metavariable) { return this.metavariable.isEqualTo(metavariable); }
|
|
41
46
|
|
|
42
47
|
isSubstitutionEqualTo(substitution) {
|
|
43
|
-
let substitutionEqualTo
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
let substitutionEqualTo;
|
|
49
|
+
|
|
50
|
+
if (false) {
|
|
51
|
+
///
|
|
52
|
+
} else if ((substitution === null) && (this.substitution === null)) {
|
|
53
|
+
substitutionEqualTo = true;
|
|
54
|
+
} else if ((substitution !== null) && (this.substitution === null)) {
|
|
55
|
+
substitutionEqualTo = false;
|
|
56
|
+
} else if ((substitution === null) && (this.substitution !== null)) {
|
|
57
|
+
substitutionEqualTo = false;
|
|
49
58
|
} else {
|
|
50
59
|
substitutionEqualTo = this.substitution.isEqualTo(substitution);
|
|
51
60
|
}
|
|
@@ -123,8 +132,7 @@ class StatementSubstitution extends Substitution {
|
|
|
123
132
|
unifyStatement(statement, generalContext, specificContext) {
|
|
124
133
|
let specificSubstitution = null;
|
|
125
134
|
|
|
126
|
-
const
|
|
127
|
-
substitutions = Substitutions.fromNothing(),
|
|
135
|
+
const substitutions = Substitutions.fromNothing(),
|
|
128
136
|
statementUnified = this.statement.unifyStatement(statement, substitutions, generalContext, specificContext);
|
|
129
137
|
|
|
130
138
|
if (statementUnified) {
|
|
@@ -198,12 +206,6 @@ class StatementSubstitution extends Substitution {
|
|
|
198
206
|
}
|
|
199
207
|
}
|
|
200
208
|
|
|
201
|
-
Object.assign(shim, {
|
|
202
|
-
StatementSubstitution
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
export default StatementSubstitution;
|
|
206
|
-
|
|
207
209
|
function stringFromStatementAndMetavariable(statement, metavariable) {
|
|
208
210
|
const statementString = statement.getString(),
|
|
209
211
|
metavariableString = metavariable.getString(),
|
package/src/substitution/term.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import dom from "../dom";
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
5
|
import TermSubstitutionNodeAndTokens from "../nodeAndTokens/substitution/term";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
|
+
import { stripBracketsFromTerm } from "../utilities/verification";
|
|
8
9
|
import { stripBracketsFromTermNode } from "../utilities/brackets";
|
|
9
10
|
|
|
10
11
|
const termNodeQuery = nodeQuery("/termSubstitution/term[0]"),
|
|
@@ -27,11 +28,17 @@ export default class TermSubstitution extends Substitution {
|
|
|
27
28
|
return this.variable;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
isTermEqualTo(term) {
|
|
31
|
+
isTermEqualTo(term, context) {
|
|
32
|
+
term = stripBracketsFromTerm(term); ///
|
|
33
|
+
|
|
34
|
+
const termEqualTo = this.term.isEqualTo(term);
|
|
35
|
+
|
|
36
|
+
return termEqualTo;
|
|
37
|
+
}
|
|
31
38
|
|
|
32
39
|
isVariableEqualTo(variable) { return this.variable.isEqualTo(variable); }
|
|
33
40
|
|
|
34
|
-
unifyWithEquivalence(equivalence
|
|
41
|
+
unifyWithEquivalence(equivalence) {
|
|
35
42
|
let unifiedWithEquivalence;
|
|
36
43
|
|
|
37
44
|
const termNode = this.term.getNode(),
|
|
@@ -59,7 +66,7 @@ export default class TermSubstitution extends Substitution {
|
|
|
59
66
|
variableNode = variableNodeQuery(termSubstitutionNode);
|
|
60
67
|
|
|
61
68
|
if ((termNode !== null) && (variableNode !== null)) {
|
|
62
|
-
const { Term, Variable } =
|
|
69
|
+
const { Term, Variable } = dom,
|
|
63
70
|
term = Term.fromTermNode(termNode, context),
|
|
64
71
|
variable = Variable.fromVariableNode(variableNode, context),
|
|
65
72
|
node = termSubstitutionNode, ///
|
|
@@ -78,7 +85,7 @@ export default class TermSubstitution extends Substitution {
|
|
|
78
85
|
|
|
79
86
|
termNode = stripBracketsFromTermNode(termNode); ///
|
|
80
87
|
|
|
81
|
-
const { Term } =
|
|
88
|
+
const { Term } = dom;
|
|
82
89
|
|
|
83
90
|
term = Term.fromTermNode(termNode, context);
|
|
84
91
|
|
package/src/substitution.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Substitution {
|
|
3
|
+
export default class Substitution {
|
|
6
4
|
constructor(string, node, tokens) {
|
|
7
5
|
this.string = string;
|
|
8
6
|
this.node = node;
|
|
@@ -71,13 +69,8 @@ class Substitution {
|
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
isEqualTo(substitution) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (substitution !== null) {
|
|
77
|
-
const substitutionString = substitution.getString();
|
|
78
|
-
|
|
79
|
-
equalTo = (substitutionString === this.string);
|
|
80
|
-
}
|
|
72
|
+
const substitutionString = substitution.getString(),
|
|
73
|
+
equalTo = (substitutionString === this.string);
|
|
81
74
|
|
|
82
75
|
return equalTo;
|
|
83
76
|
}
|
|
@@ -124,27 +117,9 @@ class Substitution {
|
|
|
124
117
|
return resolved;
|
|
125
118
|
}
|
|
126
119
|
|
|
127
|
-
unifyWithEquivalence(equivalence
|
|
120
|
+
unifyWithEquivalence(equivalence) {
|
|
128
121
|
let unifiedWithEquivalence = false;
|
|
129
122
|
|
|
130
123
|
return unifiedWithEquivalence;
|
|
131
124
|
}
|
|
132
|
-
|
|
133
|
-
unifyWithEquivalences(equivalences, substitutions, generalContext, specificContext) {
|
|
134
|
-
const unifiedWithEquivalences = equivalences.some((equivalence) => {
|
|
135
|
-
const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions, generalContext, specificContext);
|
|
136
|
-
|
|
137
|
-
if (substitutionUnifiedWithEquivalence) {
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
return unifiedWithEquivalences;
|
|
143
|
-
}
|
|
144
125
|
}
|
|
145
|
-
|
|
146
|
-
Object.assign(shim, {
|
|
147
|
-
Substitution
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
export default Substitution;
|
package/src/substitutions.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import shim from "./shim";
|
|
4
|
-
|
|
5
3
|
import { arrayUtilities } from "necessary";
|
|
6
4
|
|
|
7
5
|
import { EMPTY_STRING } from "./constants";
|
|
8
6
|
|
|
9
7
|
const { find, first, clear, prune, filter, compress } = arrayUtilities;
|
|
10
8
|
|
|
11
|
-
class Substitutions {
|
|
9
|
+
export default class Substitutions {
|
|
12
10
|
constructor(array, savedArray) {
|
|
13
11
|
this.array = array;
|
|
14
12
|
this.savedArray = savedArray;
|
|
@@ -75,13 +73,6 @@ class Substitutions {
|
|
|
75
73
|
return substitutions;
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
filterSubstitution(callback) {
|
|
79
|
-
const array = this.array.filter(callback),
|
|
80
|
-
substitutions = Substitutions.fromArray(array);
|
|
81
|
-
|
|
82
|
-
return substitutions;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
76
|
findSubstitutionByVariable(variable) {
|
|
86
77
|
const substitution = this.findSubstitution((substitution) => {
|
|
87
78
|
const substitutionVariable = substitution.getVariable();
|
|
@@ -98,18 +89,6 @@ class Substitutions {
|
|
|
98
89
|
return substitution;
|
|
99
90
|
}
|
|
100
91
|
|
|
101
|
-
findSubstitutionByMetavariable(metavariable) {
|
|
102
|
-
const substitution = this.findSubstitution((substitution) => {
|
|
103
|
-
const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
|
|
104
|
-
|
|
105
|
-
if (substitutionMetavariableEqualToMetavariable) {
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
return substitution;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
92
|
findSubstitutionsByMetavariable(metavariable) {
|
|
114
93
|
const substitutions = this.findSubstitutions((substitution) => {
|
|
115
94
|
const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
|
|
@@ -123,54 +102,54 @@ class Substitutions {
|
|
|
123
102
|
}
|
|
124
103
|
|
|
125
104
|
findSimpleSubstitutionByMetavariable(metavariable) {
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
const substitutionSimple = substitution.isSimple();
|
|
105
|
+
const simpleSubstitution = this.findSubstitution((substitution) => {
|
|
106
|
+
const substitutionSimple = substitution.isSimple();
|
|
129
107
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
108
|
+
if (substitutionSimple) {
|
|
109
|
+
const simpleSubstitution = substitution, ///
|
|
110
|
+
simpleSubstitutionMetavariableEqualToMetavariable = simpleSubstitution.isMetavariableEqualTo(metavariable);
|
|
111
|
+
|
|
112
|
+
if (simpleSubstitutionMetavariableEqualToMetavariable) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
136
117
|
|
|
137
118
|
return simpleSubstitution;
|
|
138
119
|
}
|
|
139
120
|
|
|
140
121
|
findComplexSubstitutionsByMetavariable(metavariable) {
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
const substitutionComplex = substitution.isComplex();
|
|
122
|
+
const complexSubstitutions = this.findSubstitutions((substitution) => {
|
|
123
|
+
const substitutionComplex = substitution.isComplex();
|
|
144
124
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
125
|
+
if (substitutionComplex) {
|
|
126
|
+
const complexSubstitution = substitution, ///
|
|
127
|
+
complexSubstitutionMetavariableEqualToMetavariable = complexSubstitution.isMetavariableEqualTo(metavariable);
|
|
128
|
+
|
|
129
|
+
if (complexSubstitutionMetavariableEqualToMetavariable) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
149
134
|
|
|
150
135
|
return complexSubstitutions;
|
|
151
136
|
}
|
|
152
137
|
|
|
153
138
|
findSubstitutionByMetavariableAndSubstitution(metavariable, substitution) {
|
|
154
|
-
const substitutionA = substitution
|
|
155
|
-
substitutions = this.findSubstitutions((substitution) => {
|
|
156
|
-
const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
|
|
157
|
-
|
|
158
|
-
if (substitutionMetavariableEqualToMetavariable) {
|
|
159
|
-
const substitutionSubstitution = substitution.getSubstitution();
|
|
139
|
+
const substitutionA = substitution; ///
|
|
160
140
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
substitutionBSubstitutionEqualToSubstitutionB = substitutionB.isSubstitutionEqualTo(substitutionA);
|
|
141
|
+
substitution = this.findSubstitution((substitution) => { ///
|
|
142
|
+
const substitutionMetavariableEqualToMetavariable = substitution.isMetavariableEqualTo(metavariable);
|
|
164
143
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}),
|
|
171
|
-
firstSubstitution = substitutions.getFirstSubstitution();
|
|
144
|
+
if (substitutionMetavariableEqualToMetavariable) {
|
|
145
|
+
const substitutionB = substitution, ///
|
|
146
|
+
substitutionBSubstitutionEqualToSubstitutionA = substitutionB.isSubstitutionEqualTo(substitutionA);
|
|
172
147
|
|
|
173
|
-
|
|
148
|
+
if (substitutionBSubstitutionEqualToSubstitutionA) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
174
153
|
|
|
175
154
|
return substitution;
|
|
176
155
|
}
|
|
@@ -221,19 +200,6 @@ class Substitutions {
|
|
|
221
200
|
context.trace(`Removed the ${substitutionString} substitution.`);
|
|
222
201
|
}
|
|
223
202
|
|
|
224
|
-
unifyWithEquivalences(equivalences, context) {
|
|
225
|
-
const unifiedWithEquivalences = this.everySubstitution((substitution) => {
|
|
226
|
-
const substitutions = this, ///
|
|
227
|
-
substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, context);
|
|
228
|
-
|
|
229
|
-
if (substitutionUnifiedWithEquivalence) {
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
return unifiedWithEquivalences;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
203
|
clear() {
|
|
238
204
|
clear(this.array);
|
|
239
205
|
|
|
@@ -248,7 +214,7 @@ class Substitutions {
|
|
|
248
214
|
complexSubstitutionsResolved = complexSubstitutions.everySubstitution((complexSubstitution) => {
|
|
249
215
|
let resolved;
|
|
250
216
|
|
|
251
|
-
const substitutions = this,
|
|
217
|
+
const substitutions = this, ///
|
|
252
218
|
substitution = complexSubstitution; ///
|
|
253
219
|
|
|
254
220
|
resolved = substitution.isResolved();
|
|
@@ -346,10 +312,6 @@ class Substitutions {
|
|
|
346
312
|
}
|
|
347
313
|
}
|
|
348
314
|
|
|
349
|
-
Object.assign(shim, {
|
|
350
|
-
Substitutions
|
|
351
|
-
});
|
|
352
|
-
|
|
353
315
|
function leftDifference(arrayA, arrayB) {
|
|
354
316
|
filter(arrayA, (elementA) => {
|
|
355
317
|
const arrayBIncludesElementA = arrayB.includes(elementA);
|