occam-verify-cli 0.0.959 → 0.0.960
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 +16 -5
- package/bin/utilities/releaseContext.js +5 -8
- package/lib/context/file.js +38 -14
- package/lib/context/release.js +82 -52
- package/lib/frame.js +3 -3
- package/lib/index.js +5 -5
- package/lib/metavariable.js +9 -9
- package/lib/proofStep.js +15 -15
- package/lib/releaseContext/create.js +8 -9
- package/lib/releaseContext/initialise.js +67 -0
- package/lib/rule.js +5 -5
- package/lib/substitution/statementForMetavariable.js +8 -8
- package/lib/substitution/termForVariable.js +6 -6
- package/lib/substitution.js +7 -7
- package/lib/substitutions.js +7 -7
- package/lib/topLevelAssertion.js +5 -5
- package/lib/unifier/equality.js +7 -7
- package/lib/unifier/intrinsicLevel.js +4 -4
- package/lib/unifier/metaLevel.js +10 -10
- package/lib/unifier/statementWithCombinator.js +147 -0
- package/lib/unifier/{termAgainstConstructor.js → termWithConstructor.js} +17 -17
- package/lib/unify/conclusionWithStatement.js +34 -0
- package/lib/unify/consequentWithStatement.js +34 -0
- package/lib/unify/metavariableWithStatement.js +74 -0
- package/lib/unify/premiseWithProofStep.js +41 -0
- package/lib/unify/premisesWithProofSteps.js +31 -0
- package/lib/unify/statementAtainstStatement.js +6 -6
- package/lib/unify/statementWithMetaType.js +48 -0
- package/lib/unify/suppositionWithProffStep.js +41 -0
- package/lib/unify/suppositionsWithProofSteps.js +31 -0
- package/lib/unify/termWithTerm.js +21 -0
- package/lib/unify/termWithType.js +32 -0
- package/lib/unify/variableWithTerm.js +54 -0
- package/lib/verify/error.js +2 -2
- package/lib/verify/judgement.js +3 -3
- package/lib/verify/metavariable.js +4 -4
- package/lib/verify/statement/qualified.js +51 -51
- package/lib/verify/statement.js +18 -18
- package/lib/verify/statementAsCombinator.js +2 -2
- package/lib/verify/term.js +25 -25
- package/package.json +1 -1
- package/src/context/file.js +42 -17
- package/src/context/release.js +84 -45
- package/src/frame.js +2 -2
- package/src/index.js +1 -1
- package/src/metavariable.js +6 -6
- package/src/proofStep.js +14 -14
- package/src/releaseContext/create.js +8 -16
- package/src/releaseContext/{verify.js → initialise.js} +32 -23
- package/src/rule.js +4 -4
- package/src/substitution/statementForMetavariable.js +7 -7
- package/src/substitution/termForVariable.js +4 -4
- package/src/substitution.js +5 -5
- package/src/substitutions.js +5 -5
- package/src/topLevelAssertion.js +4 -4
- package/src/unifier/equality.js +6 -6
- package/src/unifier/intrinsicLevel.js +3 -3
- package/src/unifier/metaLevel.js +9 -9
- package/src/unifier/{statementAgainstCombinator.js → statementWithCombinator.js} +12 -12
- package/src/unifier/{termAgainstConstructor.js → termWithConstructor.js} +9 -9
- package/src/unify/{conclusionAgainstStatement.js → conclusionWithStatement.js} +3 -3
- package/src/unify/{consequentAgainstStatement.js → consequentWithStatement.js} +3 -3
- package/src/unify/{metavariableAgainstStatement.js → metavariableWithStatement.js} +12 -12
- package/src/unify/{premiseAgainstProofStep.js → premiseWithProofStep.js} +5 -5
- package/src/unify/{premisesAgainstProofSteps.js → premisesWithProofSteps.js} +3 -3
- package/src/unify/statementAtainstStatement.js +4 -4
- package/src/unify/{statementAgainstMetaType.js → statementWithMetaType.js} +5 -5
- package/src/unify/{suppositionAgainstProofStep.js → suppositionWithProffStep.js} +5 -5
- package/src/unify/{suppositionsAgainstProofSteps.js → suppositionsWithProofSteps.js} +3 -3
- package/src/unify/{termAgainstTerm.js → termWithTerm.js} +4 -4
- package/src/unify/{termAgainstType.js → termWithType.js} +4 -4
- package/src/unify/{variableAgainstTerm.js → variableWithTerm.js} +5 -5
- package/src/verify/error.js +1 -1
- package/src/verify/judgement.js +3 -3
- package/src/verify/metavariable.js +3 -3
- package/src/verify/statement/qualified.js +50 -50
- package/src/verify/statement.js +17 -17
- package/src/verify/statementAsCombinator.js +1 -1
- package/src/verify/term.js +24 -24
- package/lib/releaseContext/verify.js +0 -66
- package/lib/unifier/statementAgainstCombinator.js +0 -147
- package/lib/unify/conclusionAgainstStatement.js +0 -34
- package/lib/unify/consequentAgainstStatement.js +0 -34
- package/lib/unify/metavariableAgainstStatement.js +0 -74
- package/lib/unify/premiseAgainstProofStep.js +0 -41
- package/lib/unify/premisesAgainstProofSteps.js +0 -31
- package/lib/unify/statementAgainstMetaType.js +0 -48
- package/lib/unify/suppositionAgainstProofStep.js +0 -41
- package/lib/unify/suppositionsAgainstProofSteps.js +0 -31
- package/lib/unify/termAgainstTerm.js +0 -21
- package/lib/unify/termAgainstType.js +0 -32
- package/lib/unify/variableAgainstTerm.js +0 -54
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export default function
|
|
4
|
-
let
|
|
3
|
+
export default function initialiseReleaseContext(dependency, dependentName, dependentReleased, context) {
|
|
4
|
+
let releaseContextInitialised = false;
|
|
5
5
|
|
|
6
6
|
const { releaseContextMap } = context,
|
|
7
7
|
dependencyName = dependency.getName(),
|
|
@@ -11,44 +11,37 @@ export default function verifyReleaseContext(dependency, dependentName, dependen
|
|
|
11
11
|
if (releaseContext === null) {
|
|
12
12
|
const { log } = context;
|
|
13
13
|
|
|
14
|
-
log.
|
|
14
|
+
log.warning(`Unable to initialise the '${dependencyName}' ontext because it has not been created.`);
|
|
15
15
|
} else {
|
|
16
|
-
|
|
16
|
+
releaseContextInitialised = releaseContext.isInitialised();
|
|
17
17
|
|
|
18
|
-
if (
|
|
19
|
-
releaseContextVerified = true;
|
|
20
|
-
} else {
|
|
18
|
+
if (!releaseContextInitialised) {
|
|
21
19
|
const released = releaseContext.isReleased();
|
|
22
20
|
|
|
23
21
|
if (!released && dependentReleased) {
|
|
24
22
|
const { log } = context;
|
|
25
23
|
|
|
26
|
-
log.
|
|
24
|
+
log.warning(`Unable to initialise the '${dependencyName}' dependency's context because its '${dependentName}' dependent is a package.`);
|
|
27
25
|
} else {
|
|
28
|
-
const
|
|
26
|
+
const dependencyReleaseContextsInitialised = initialiseDependencyReleaseContexts(dependency, releaseContext, released, context);
|
|
29
27
|
|
|
30
|
-
|
|
28
|
+
if (dependencyReleaseContextsInitialised) {
|
|
29
|
+
const { log } = context,
|
|
30
|
+
releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
log.debug(`Initialising the '${dependencyName}' context...`);
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
const releaseContextVerified = verifyReleaseContext(dependency, dependentName, dependentReleased, context);
|
|
34
|
+
releaseContextInitialised = releaseContext.initialise(releaseContexts);
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
if (releaseContextVerified) {
|
|
43
|
-
const releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
44
|
-
|
|
45
|
-
releaseContext.verify(releaseContexts);
|
|
36
|
+
releaseContextInitialised ?
|
|
37
|
+
log.info(`...initialised the '${dependencyName}' context.`) :
|
|
38
|
+
log.warning(`...unable to initialise the '${dependencyName}' context.`);
|
|
46
39
|
}
|
|
47
40
|
}
|
|
48
41
|
}
|
|
49
42
|
}
|
|
50
43
|
|
|
51
|
-
return
|
|
44
|
+
return releaseContextInitialised;
|
|
52
45
|
}
|
|
53
46
|
|
|
54
47
|
function retrieveReleaseContexts(releaseContext, releaseContextMap) {
|
|
@@ -87,3 +80,19 @@ function retrieveReleaseContexts(releaseContext, releaseContextMap) {
|
|
|
87
80
|
|
|
88
81
|
return releaseContexts;
|
|
89
82
|
}
|
|
83
|
+
|
|
84
|
+
function initialiseDependencyReleaseContexts(dependency, releaseContext, released, context) {
|
|
85
|
+
const dependencyName = dependency.getName(),
|
|
86
|
+
dependentName = dependencyName, ///
|
|
87
|
+
dependencies = releaseContext.getDependencies(),
|
|
88
|
+
dependentReleased = released, ///
|
|
89
|
+
dependencyReleaseContextsInitialised = dependencies.everyDependency((dependency) => { ///
|
|
90
|
+
const releaseContextInitialised = initialiseReleaseContext(dependency, dependentName, dependentReleased, context);
|
|
91
|
+
|
|
92
|
+
if (releaseContextInitialised) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return dependencyReleaseContextsInitialised;
|
|
98
|
+
}
|
package/src/rule.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Substitutions from "./substitutions";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import unifyPremisesWithProofSteps from "./unify/premisesWithProofSteps";
|
|
5
|
+
import unifyConclusionWithStatement from "./unify/conclusionWithStatement";
|
|
6
6
|
|
|
7
7
|
export default class Rule {
|
|
8
8
|
constructor(labels, premises, conclusion, fileContext) {
|
|
@@ -37,11 +37,11 @@ export default class Rule {
|
|
|
37
37
|
proofStepsB = proofSteps, ///
|
|
38
38
|
fileContextA = this.fileContext, ///
|
|
39
39
|
localContextB = localContext, ///
|
|
40
|
-
premisesUnified =
|
|
40
|
+
premisesUnified = unifyPremisesWithProofSteps(premisesA, proofStepsB, substitutions, fileContextA, localContextB);
|
|
41
41
|
|
|
42
42
|
if (premisesUnified) {
|
|
43
43
|
const conclusionA = this.conclusion, ///
|
|
44
|
-
conclusionUnified =
|
|
44
|
+
conclusionUnified = unifyConclusionWithStatement(conclusionA, statementNode, substitutions, fileContextA, localContextB);
|
|
45
45
|
|
|
46
46
|
statementUnified = conclusionUnified; ///
|
|
47
47
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Substitution from "../substitution";
|
|
5
5
|
import TermForVariableSubstitution from "./termForVariable";
|
|
6
|
-
import
|
|
6
|
+
import unifyStatementWithStatement from "../unify/statementAtainstStatement";
|
|
7
7
|
|
|
8
8
|
import { nodeQuery } from "../utilities/query";
|
|
9
9
|
import { matchStatementModuloBrackets, bracketedStatementChildNodeFromStatementNode } from "../utilities/match";
|
|
@@ -74,8 +74,8 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
74
74
|
return statementNodeMatches;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
let
|
|
77
|
+
unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
|
|
78
|
+
let unifiedWithEquivalence = false; ///
|
|
79
79
|
|
|
80
80
|
const metavariableNode = metavariableNodeQuery(this.statementNode);
|
|
81
81
|
|
|
@@ -89,10 +89,10 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
89
89
|
nodeB = metavariableNode, ///
|
|
90
90
|
unified = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
unifiedWithEquivalence = unified; ///
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
return
|
|
95
|
+
return unifiedWithEquivalence;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
asString(localContextA, localContextB) {
|
|
@@ -156,9 +156,9 @@ function unifyStatement(statementNodeA, statementNodeB, substitution, substituti
|
|
|
156
156
|
|
|
157
157
|
statementUnified = statementNodeAMatchesStatementNodeB; ///
|
|
158
158
|
} else {
|
|
159
|
-
const
|
|
159
|
+
const statementUnifiedWithStatement = unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB);
|
|
160
160
|
|
|
161
|
-
statementUnified =
|
|
161
|
+
statementUnified = statementUnifiedWithStatement; ///
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
return statementUnified;
|
|
@@ -51,8 +51,8 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
51
51
|
return matchesVariableNode;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
let
|
|
54
|
+
unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
|
|
55
|
+
let unifiedWithEquivalence;
|
|
56
56
|
|
|
57
57
|
const equivalenceMatchesVariableNode = equivalence.matchVariableNode(this.variableNode);
|
|
58
58
|
|
|
@@ -60,11 +60,11 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
60
60
|
const equivalenceMatchesTermNode = equivalence.matchTermNode(this.termNode);
|
|
61
61
|
|
|
62
62
|
if (equivalenceMatchesTermNode) {
|
|
63
|
-
|
|
63
|
+
unifiedWithEquivalence = true;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
return
|
|
67
|
+
return unifiedWithEquivalence;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
asString(localContextA, localContextB) {
|
package/src/substitution.js
CHANGED
|
@@ -25,15 +25,15 @@ export default class Substitution {
|
|
|
25
25
|
return matchesMetavariableNode;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
const
|
|
28
|
+
unifyWithEquivalences(equivalences, substitutions, localContextA, localContextB) {
|
|
29
|
+
const unifiedWithEquivalences = equivalences.some((equivalence) => {
|
|
30
|
+
const substitutionUnifiedWithEquivalence = this.unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB);
|
|
31
31
|
|
|
32
|
-
if (
|
|
32
|
+
if (substitutionUnifiedWithEquivalence) {
|
|
33
33
|
return true;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
return
|
|
37
|
+
return unifiedWithEquivalences;
|
|
38
38
|
}
|
|
39
39
|
}
|
package/src/substitutions.js
CHANGED
|
@@ -55,17 +55,17 @@ export default class Substitutions {
|
|
|
55
55
|
localContextB.trace(`Removed the '${substitutionString}' substitution.`, substitutionNode);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
const
|
|
58
|
+
unifyWithEquivalences(equivalences, localContextA, localContextB) {
|
|
59
|
+
const unifiedWithEquivalences = this.everySubstitution((substitution) => {
|
|
60
60
|
const substitutions = this, ///
|
|
61
|
-
|
|
61
|
+
substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalences(equivalences, substitutions, localContextA, localContextB);
|
|
62
62
|
|
|
63
|
-
if (
|
|
63
|
+
if (substitutionUnifiedWithEquivalence) {
|
|
64
64
|
return true;
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
|
|
68
|
-
return
|
|
68
|
+
return unifiedWithEquivalences;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
snapshot() {
|
package/src/topLevelAssertion.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Substitutions from "./substitutions";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import unifyConsequentWithStatement from "./unify/consequentWithStatement";
|
|
5
|
+
import unifySuppositionsWithProofSteps from "./unify/suppositionsWithProofSteps";
|
|
6
6
|
|
|
7
7
|
export default class TopLevelAssertion {
|
|
8
8
|
constructor(labels, suppositions, consequent, substitutions, fileContext) {
|
|
@@ -42,11 +42,11 @@ export default class TopLevelAssertion {
|
|
|
42
42
|
fileContextA = this.fileContext, ///
|
|
43
43
|
suppositionsA = this.suppositions, ///
|
|
44
44
|
localContextB = localContext, ///
|
|
45
|
-
suppositionsUnified =
|
|
45
|
+
suppositionsUnified = unifySuppositionsWithProofSteps(suppositionsA, proofStepsB, substitutions, fileContextA, localContextB);
|
|
46
46
|
|
|
47
47
|
if (suppositionsUnified) {
|
|
48
48
|
const consequentA = this.consequent, ///
|
|
49
|
-
consequentUnified =
|
|
49
|
+
consequentUnified = unifyConsequentWithStatement(consequentA, statementNode, substitutions, fileContextA, localContext);
|
|
50
50
|
|
|
51
51
|
statementUnified = consequentUnified; ///
|
|
52
52
|
}
|
package/src/unifier/equality.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Unifier from "../unifier";
|
|
4
|
-
import
|
|
4
|
+
import unifyTermWithTerm from "../unify/termWithTerm";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
|
|
@@ -25,14 +25,14 @@ class EqualityUnifier extends Unifier {
|
|
|
25
25
|
nodeQueryA: termNodeQuery,
|
|
26
26
|
nodeQueryB: termNodeQuery,
|
|
27
27
|
unify: (termNodeA, termNodeB, localContext) => {
|
|
28
|
-
let
|
|
28
|
+
let termUnifiedWithTerm;
|
|
29
29
|
|
|
30
30
|
const leftTermNode = termNodeA, ///
|
|
31
31
|
rightTermNode = termNodeB; ///
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
termUnifiedWithTerm = unifyTermWithTerm(leftTermNode, rightTermNode, localContext);
|
|
34
34
|
|
|
35
|
-
if (!
|
|
35
|
+
if (!termUnifiedWithTerm) {
|
|
36
36
|
const nonTerminalNodeA = termNodeA, ///
|
|
37
37
|
nonTerminalNodeB = termNodeB, ///
|
|
38
38
|
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
@@ -41,10 +41,10 @@ class EqualityUnifier extends Unifier {
|
|
|
41
41
|
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
42
42
|
childNodesVerified = equalityUnifier.unifyChildNodes(childNodesA, childNodesB, localContext);
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
termUnifiedWithTerm = childNodesVerified; ///
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
return
|
|
47
|
+
return termUnifiedWithTerm;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
];
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Unifier from "../unifier";
|
|
5
|
-
import
|
|
5
|
+
import unifyVariableWithTerm from "../unify/variableWithTerm";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
@@ -28,9 +28,9 @@ class IntrinsicLevelUnifier extends Unifier {
|
|
|
28
28
|
nodeQueryB: termNodeQuery,
|
|
29
29
|
unify: (termVariableNodeA, termNodeB, substitutions, localContextA, localContextB) => {
|
|
30
30
|
const variableNodeA = termVariableNodeA, ///
|
|
31
|
-
|
|
31
|
+
variableUnifiedWithTerm = unifyVariableWithTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB);
|
|
32
32
|
|
|
33
|
-
return
|
|
33
|
+
return variableUnifiedWithTerm;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
];
|
package/src/unifier/metaLevel.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Unifier from "../unifier";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import unifyVariableWithTerm from "../unify/variableWithTerm";
|
|
6
|
+
import unifyMetavariableWithStatement from "../unify/metavariableWithStatement";
|
|
7
7
|
|
|
8
8
|
import { nodeQuery } from "../utilities/query";
|
|
9
9
|
|
|
@@ -31,15 +31,15 @@ class MetaLevelUnifier extends Unifier {
|
|
|
31
31
|
nodeQueryA: statementNodeQuery,
|
|
32
32
|
nodeQueryB: statementNodeQuery,
|
|
33
33
|
unify: (statementNodeA, statementNodeB, substitutions, localContextA, localContextB) => {
|
|
34
|
-
let
|
|
34
|
+
let statementUnifiedWithStatement;
|
|
35
35
|
|
|
36
36
|
const metavariableNodeA = metavariableNodeQuery(statementNodeA);
|
|
37
37
|
|
|
38
38
|
if (metavariableNodeA !== null) {
|
|
39
39
|
const substitutionNodeA = substitutionNodeQuery(statementNodeA),
|
|
40
|
-
|
|
40
|
+
metavariableUnifiedWithStatement = unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB);
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
statementUnifiedWithStatement = metavariableUnifiedWithStatement; ///
|
|
43
43
|
} else {
|
|
44
44
|
const nonTerminalNodeA = statementNodeA, ///
|
|
45
45
|
nonTerminalNodeB = statementNodeB, ///
|
|
@@ -49,10 +49,10 @@ class MetaLevelUnifier extends Unifier {
|
|
|
49
49
|
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
50
50
|
childNodesVerified = metaLevelUnifier.unifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB);
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
statementUnifiedWithStatement = childNodesVerified; ///
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
return
|
|
55
|
+
return statementUnifiedWithStatement;
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
58
|
{
|
|
@@ -60,9 +60,9 @@ class MetaLevelUnifier extends Unifier {
|
|
|
60
60
|
nodeQueryB: termNodeQuery,
|
|
61
61
|
unify: (termVariableNodeA, termNodeB, substitutions, localContextA, localContextB) => {
|
|
62
62
|
const variableNodeA = termVariableNodeA, ///
|
|
63
|
-
|
|
63
|
+
variableUnifiedWithTerm = unifyVariableWithTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB);
|
|
64
64
|
|
|
65
|
-
return
|
|
65
|
+
return variableUnifiedWithTerm;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Unifier from "../unifier";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import unifyTermWithType from "../unify/termWithType";
|
|
5
|
+
import unifyStatementWithMetaType from "../unify/statementWithMetaType";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
@@ -11,17 +11,17 @@ const termNodeQuery = nodeQuery("/term!"),
|
|
|
11
11
|
metaTypeNodeQuery = nodeQuery("/metaType!"),
|
|
12
12
|
statementNodeQuery = nodeQuery("/statement!");
|
|
13
13
|
|
|
14
|
-
class
|
|
14
|
+
class StatementWithCombinatorUnifier extends Unifier {
|
|
15
15
|
unify(statementNode, combinatorStatementNode, localContext) {
|
|
16
|
-
let
|
|
16
|
+
let statementUnifiedWithCombinator;
|
|
17
17
|
|
|
18
18
|
const nonTerminalNodeA = statementNode, ///
|
|
19
19
|
nonTerminalNodeB = combinatorStatementNode, ///
|
|
20
20
|
nonTerminalNodeUnified = this.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext);
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
statementUnifiedWithCombinator = nonTerminalNodeUnified; ///
|
|
23
23
|
|
|
24
|
-
return
|
|
24
|
+
return statementUnifiedWithCombinator;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
static maps = [
|
|
@@ -31,9 +31,9 @@ class StatementAgainstCombinatorUnifier extends Unifier {
|
|
|
31
31
|
unify: (statementNodeA, metaTypeNodeB, localContext) => {
|
|
32
32
|
const metaTypeNode = metaTypeNodeB, ///
|
|
33
33
|
statementNode = statementNodeA, ///
|
|
34
|
-
|
|
34
|
+
statementUnifiedWithMetaType = unifyStatementWithMetaType(statementNode, metaTypeNode, localContext);
|
|
35
35
|
|
|
36
|
-
return
|
|
36
|
+
return statementUnifiedWithMetaType;
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
{
|
|
@@ -42,14 +42,14 @@ class StatementAgainstCombinatorUnifier extends Unifier {
|
|
|
42
42
|
unify: (termNodeA, typeNodeB, localContext) => {
|
|
43
43
|
const termNode = termNodeA, ///
|
|
44
44
|
typeNode = typeNodeB, ///
|
|
45
|
-
|
|
45
|
+
termUnifiedWithType = unifyTermWithType(termNode, typeNode, localContext);
|
|
46
46
|
|
|
47
|
-
return
|
|
47
|
+
return termUnifiedWithType;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
];
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
const
|
|
53
|
+
const statementWithCombinatorUnifier = new StatementWithCombinatorUnifier();
|
|
54
54
|
|
|
55
|
-
export default
|
|
55
|
+
export default statementWithCombinatorUnifier;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Unifier from "../unifier";
|
|
4
|
-
import
|
|
4
|
+
import unifyTermWithType from "../unify/termWithType";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
|
|
8
8
|
const termNodeQuery = nodeQuery("/term"),
|
|
9
9
|
typeNodeQuery = nodeQuery("/type");
|
|
10
10
|
|
|
11
|
-
class
|
|
11
|
+
class TermWithConstructorUnifier extends Unifier {
|
|
12
12
|
unify(termNode, constructorTermNode, localContext) {
|
|
13
|
-
let
|
|
13
|
+
let termUnifiedWithConstructor;
|
|
14
14
|
|
|
15
15
|
const nonTerminalNodeA = termNode, ///
|
|
16
16
|
nonTerminalNodeB = constructorTermNode, ///
|
|
17
17
|
nonTerminalNodeUnified = this.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext);
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
termUnifiedWithConstructor = nonTerminalNodeUnified; ///
|
|
20
20
|
|
|
21
|
-
return
|
|
21
|
+
return termUnifiedWithConstructor;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
static maps = [
|
|
@@ -28,14 +28,14 @@ class TermAgainstConstructorUnifier extends Unifier {
|
|
|
28
28
|
unify: (termNodeA, typeNodeB, localContext) => {
|
|
29
29
|
const termNode = termNodeA, ///
|
|
30
30
|
typeNode = typeNodeB, ///
|
|
31
|
-
|
|
31
|
+
termUnifiedWithType = unifyTermWithType(termNode, typeNode, localContext);
|
|
32
32
|
|
|
33
|
-
return
|
|
33
|
+
return termUnifiedWithType;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
];
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
const
|
|
39
|
+
const termWithConstructorUnifier = new TermWithConstructorUnifier();
|
|
40
40
|
|
|
41
|
-
export default
|
|
41
|
+
export default termWithConstructorUnifier;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import LocalContext from "../context/local";
|
|
4
4
|
|
|
5
|
-
export default function
|
|
5
|
+
export default function unifyConclusionWithStatement(conclusionA, statementNodeB, substitutions, fileContextA, localContextB) {
|
|
6
6
|
let conclusionUnified = false;
|
|
7
7
|
|
|
8
8
|
const conclusionAStatementNode = conclusionA.getStatementNode();
|
|
@@ -15,7 +15,7 @@ export default function unifyConclusionAgainstStatement(conclusionA, statementNo
|
|
|
15
15
|
|
|
16
16
|
substitutions.snapshot();
|
|
17
17
|
|
|
18
|
-
localContextB.trace(`Unifying the '${statementStringB}' statement
|
|
18
|
+
localContextB.trace(`Unifying the '${statementStringB}' statement with the conclusion's '${statementStringA}' statement...`, statementNodeB);
|
|
19
19
|
|
|
20
20
|
const statementUnified = conclusionA.unifyStatement(statementNodeB, substitutions, localContextA, localContextB);
|
|
21
21
|
|
|
@@ -26,7 +26,7 @@ export default function unifyConclusionAgainstStatement(conclusionA, statementNo
|
|
|
26
26
|
substitutions.rollback(localContextA, localContextB);
|
|
27
27
|
|
|
28
28
|
if (conclusionUnified) {
|
|
29
|
-
localContextB.debug(`...unified the '${statementStringB}' statement
|
|
29
|
+
localContextB.debug(`...unified the '${statementStringB}' statement with the conclusion's '${statementStringA}' statement.`, statementNodeB);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import LocalContext from "../context/local";
|
|
4
4
|
|
|
5
|
-
export default function
|
|
5
|
+
export default function unifyConsequentWithStatement(consequentA, statementNodeB, substitutions, fileContextA, localContextB) {
|
|
6
6
|
let consequentUnified = false;
|
|
7
7
|
|
|
8
8
|
const consequentAStatementNode = consequentA.getStatementNode();
|
|
@@ -15,7 +15,7 @@ export default function unifyConsequentAgainstStatement(consequentA, statementNo
|
|
|
15
15
|
|
|
16
16
|
substitutions.snapshot();
|
|
17
17
|
|
|
18
|
-
localContextB.trace(`Unifying the '${statementStringB}' statement
|
|
18
|
+
localContextB.trace(`Unifying the '${statementStringB}' statement with the consequent's '${statementStringA}' statement...`, statementNodeB);
|
|
19
19
|
|
|
20
20
|
const statementUnified = consequentA.unifyStatement(statementNodeB, substitutions, localContextA, localContextB);
|
|
21
21
|
|
|
@@ -26,7 +26,7 @@ export default function unifyConsequentAgainstStatement(consequentA, statementNo
|
|
|
26
26
|
substitutions.rollback(localContextA, localContextB);
|
|
27
27
|
|
|
28
28
|
if (consequentUnified) {
|
|
29
|
-
localContextB.debug(`...unified the '${statementStringB}' statement
|
|
29
|
+
localContextB.debug(`...unified the '${statementStringB}' statement with the consequent's '${statementStringA}' statement.`, statementNodeB);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import TermForVariableSubstitution from "../substitution/termForVariable";
|
|
4
|
-
import
|
|
4
|
+
import unifyStatementWithStatement from "../unify/statementAtainstStatement";
|
|
5
5
|
import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
9
9
|
const metavariableNodeQuery = nodeQuery("/statement/metavariable");
|
|
10
10
|
|
|
11
|
-
export default function
|
|
12
|
-
let
|
|
11
|
+
export default function unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB) {
|
|
12
|
+
let metavariableUnifiedWithStatement = false;
|
|
13
13
|
|
|
14
14
|
const substitution = substitutions.findSubstitution((substitution) => {
|
|
15
15
|
const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNodeA);
|
|
@@ -28,10 +28,10 @@ export default function unifyMetavariableAgainstStatement(metavariableNodeA, sta
|
|
|
28
28
|
localContext = localContextB, ///
|
|
29
29
|
substitution = termForVariableSubstitution, ///
|
|
30
30
|
statementNodeA = substitutionStatementNode, ///
|
|
31
|
-
|
|
31
|
+
statementUnifiedWithStatement = unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
|
|
32
32
|
|
|
33
|
-
if (
|
|
34
|
-
|
|
33
|
+
if (statementUnifiedWithStatement) {
|
|
34
|
+
metavariableUnifiedWithStatement = true;
|
|
35
35
|
}
|
|
36
36
|
} else {
|
|
37
37
|
const substitutionSubstitution = substitution.getSubstitution();
|
|
@@ -43,16 +43,16 @@ export default function unifyMetavariableAgainstStatement(metavariableNodeA, sta
|
|
|
43
43
|
|
|
44
44
|
const localContext = localContextB, ///
|
|
45
45
|
substitution = substitutionSubstitution,
|
|
46
|
-
|
|
46
|
+
statementUnifiedWithStatement = unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
|
|
47
47
|
|
|
48
|
-
if (
|
|
49
|
-
|
|
48
|
+
if (statementUnifiedWithStatement) {
|
|
49
|
+
metavariableUnifiedWithStatement = true;
|
|
50
50
|
}
|
|
51
51
|
} else {
|
|
52
52
|
const substitutionMatchesStatementNodeB = substitution.matchStatementNode(statementNodeB);
|
|
53
53
|
|
|
54
54
|
if (substitutionMatchesStatementNodeB) {
|
|
55
|
-
|
|
55
|
+
metavariableUnifiedWithStatement = true;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -72,11 +72,11 @@ export default function unifyMetavariableAgainstStatement(metavariableNodeA, sta
|
|
|
72
72
|
substitutions.addSubstitution(substitution, localContextA, localContextB);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
metavariableUnifiedWithStatement = true;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
return
|
|
79
|
+
return metavariableUnifiedWithStatement;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
function metavariableFromStatementNode(statementNode, localContext) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { subproofNodeAsSubproofString } from "../utilities/unify";
|
|
4
4
|
|
|
5
|
-
export default function
|
|
5
|
+
export default function unifyPremiseWithProofStep(premiseA, proofStepB, substitutions, localContextA, localContextB) {
|
|
6
6
|
let premiseUnified = false;
|
|
7
7
|
|
|
8
8
|
const premiseAStatementNode = premiseA.getStatementNode();
|
|
@@ -20,12 +20,12 @@ export default function unifyPremiseAgainstProofStep(premiseA, proofStepB, subst
|
|
|
20
20
|
if (subproofNodeB !== null) {
|
|
21
21
|
const subproofStringB = subproofNodeAsSubproofString(subproofNodeB, localContextB);
|
|
22
22
|
|
|
23
|
-
localContextB.trace(`Unifying the '${subproofStringB}' subproof
|
|
23
|
+
localContextB.trace(`Unifying the '${subproofStringB}' subproof with the premise's '${statementStringA}' statement...`, subproofNodeB);
|
|
24
24
|
|
|
25
25
|
const subproofUnified = premiseA.unifySubproof(subproofNodeB, substitutions, localContextA, localContextB);
|
|
26
26
|
|
|
27
27
|
if (subproofUnified) {
|
|
28
|
-
localContextB.debug(`...unified the '${subproofStringB}' subproof
|
|
28
|
+
localContextB.debug(`...unified the '${subproofStringB}' subproof with the premise's '${statementStringA}' statement.`, subproofNodeB);
|
|
29
29
|
|
|
30
30
|
premiseUnified = true;
|
|
31
31
|
}
|
|
@@ -34,12 +34,12 @@ export default function unifyPremiseAgainstProofStep(premiseA, proofStepB, subst
|
|
|
34
34
|
if (statementNodeB !== null) {
|
|
35
35
|
const statementStringB = localContextB.nodeAsString(statementNodeB);
|
|
36
36
|
|
|
37
|
-
localContextB.trace(`Unifying the '${statementStringB}' statement
|
|
37
|
+
localContextB.trace(`Unifying the '${statementStringB}' statement with the premise's '${statementStringA}' statement...`, statementNodeB);
|
|
38
38
|
|
|
39
39
|
const statementUnified = premiseA.unifyStatement(statementNodeB, substitutions, localContextA, localContextB);
|
|
40
40
|
|
|
41
41
|
if (statementUnified) {
|
|
42
|
-
localContextB.debug(`...unified the '${statementStringB}' statement
|
|
42
|
+
localContextB.debug(`...unified the '${statementStringB}' statement with the premise's '${statementStringA}' statement.`, statementNodeB);
|
|
43
43
|
|
|
44
44
|
premiseUnified = true;
|
|
45
45
|
}
|