occam-verify-cli 0.0.1036 → 0.0.1038
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assertion/subproof.js +80 -49
- package/lib/assertion/type.js +5 -5
- package/lib/context/file.js +6 -20
- package/lib/context/release.js +24 -84
- package/lib/equality.js +5 -5
- package/lib/metavariable.js +92 -6
- package/lib/mixins/statement/verify.js +3 -3
- package/lib/premise.js +25 -34
- package/lib/ruleNames.js +5 -1
- package/lib/statement.js +17 -4
- package/lib/substitution/frameForMetavariable.js +4 -4
- package/lib/substitution/statement.js +139 -0
- package/lib/substitution/statementForMetavariable.js +39 -22
- package/lib/substitution/termForVariable.js +17 -16
- package/lib/supposition.js +48 -57
- package/lib/unifier/intrinsicLevel.js +4 -4
- package/lib/unifier/metaLevel.js +22 -20
- package/lib/unifier/statementWithCombinator.js +1 -2
- package/lib/utilities/node.js +15 -1
- package/lib/utilities/tokens.js +8 -1
- package/lib/variable.js +13 -6
- package/lib/verifier/intrinsicLevel.js +2 -2
- package/lib/verifier/metaLevel.js +2 -2
- package/lib/verify/assertion/subproof.js +1 -49
- package/package.json +1 -1
- package/src/assertion/subproof.js +102 -56
- package/src/assertion/type.js +4 -4
- package/src/context/file.js +2 -48
- package/src/context/release.js +27 -65
- package/src/equality.js +4 -4
- package/src/metavariable.js +115 -6
- package/src/mixins/statement/verify.js +3 -2
- package/src/premise.js +33 -47
- package/src/ruleNames.js +1 -0
- package/src/statement.js +21 -4
- package/src/substitution/frameForMetavariable.js +3 -2
- package/src/substitution/statement.js +52 -0
- package/src/substitution/statementForMetavariable.js +50 -22
- package/src/substitution/termForVariable.js +21 -19
- package/src/supposition.js +64 -78
- package/src/unifier/intrinsicLevel.js +6 -7
- package/src/unifier/metaLevel.js +33 -26
- package/src/unifier/statementWithCombinator.js +0 -1
- package/src/utilities/node.js +16 -0
- package/src/utilities/tokens.js +7 -0
- package/src/variable.js +12 -5
- package/src/verifier/intrinsicLevel.js +3 -3
- package/src/verifier/metaLevel.js +3 -3
- package/src/verify/assertion/subproof.js +0 -63
- package/lib/unify/conclusionWithStatement.js +0 -34
- package/lib/unify/consequentWithStatement.js +0 -34
- package/lib/unify/metavariableWithStatement.js +0 -40
- package/lib/unify/metavariableWithStatementGivenSubstitution.js +0 -40
- package/lib/unify/suppositionWithProffStep.js +0 -41
- package/lib/unify/suppositionsWithProofSteps.js +0 -31
- package/lib/unify/unqualifiedStatement.js +0 -25
- package/lib/verify/file.js +0 -35
- package/lib/verify/subDerivation.js +0 -31
- package/src/unify/conclusionWithStatement.js +0 -34
- package/src/unify/consequentWithStatement.js +0 -34
- package/src/unify/metavariableWithStatement.js +0 -40
- package/src/unify/metavariableWithStatementGivenSubstitution.js +0 -41
- package/src/unify/suppositionWithProffStep.js +0 -54
- package/src/unify/suppositionsWithProofSteps.js +0 -23
- package/src/unify/unqualifiedStatement.js +0 -24
- package/src/verify/file.js +0 -29
- package/src/verify/subDerivation.js +0 -24
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Substitution from "../substitution";
|
|
4
|
+
|
|
5
|
+
import { nodeQuery } from "../utilities/query";
|
|
6
|
+
import { substitutionNodeFromSubstitutionString } from "../utilities/node";
|
|
7
|
+
|
|
8
|
+
const substitutionNodeQuery = nodeQuery("/statement/substitution");
|
|
9
|
+
|
|
10
|
+
export default class StatementSubstitution extends Substitution {
|
|
11
|
+
constructor(string, node) {
|
|
12
|
+
super(string);
|
|
13
|
+
|
|
14
|
+
this.node = node;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getNode() {
|
|
18
|
+
return this.node;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static fromJSON(json, fileContext) {
|
|
22
|
+
let statementSubstitution = null;
|
|
23
|
+
|
|
24
|
+
if (json !== null) {
|
|
25
|
+
const { string } = json,
|
|
26
|
+
lexer = fileContext.getLexer(),
|
|
27
|
+
parser = fileContext.getParser(),
|
|
28
|
+
substitutionString = string, ///
|
|
29
|
+
substitutionNode = substitutionNodeFromSubstitutionString(substitutionString, lexer, parser),
|
|
30
|
+
node = substitutionNode;
|
|
31
|
+
|
|
32
|
+
statementSubstitution = new Substitution(string, node);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return statementSubstitution;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static fromStatementNode(statementNode, fileContext) {
|
|
39
|
+
let statementSubstitution = null;
|
|
40
|
+
|
|
41
|
+
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
42
|
+
|
|
43
|
+
if (substitutionNode) {
|
|
44
|
+
const node = substitutionNode,
|
|
45
|
+
string = fileContext.nodeAsString(substitutionNode);
|
|
46
|
+
|
|
47
|
+
statementSubstitution = new Substitution(string, node);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return statementSubstitution;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import Substitution from "../substitution";
|
|
4
5
|
import TermForVariableSubstitution from "../substitution/termForVariable";
|
|
5
6
|
import FrameForMetavariableSubstitution from "../substitution/frameForMetavariable";
|
|
@@ -53,50 +54,77 @@ export default class StatementForMetavariableSubstitution extends Substitution {
|
|
|
53
54
|
return metavariableNodeMatches;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
static
|
|
57
|
+
static fromStatementAndMetavariable(statement, metavariable, localContext) {
|
|
58
|
+
let statementNode = statement.getNode();
|
|
59
|
+
|
|
57
60
|
statementNode = stripBracketsFromStatement(statementNode); ///
|
|
58
61
|
|
|
59
|
-
const
|
|
60
|
-
|
|
62
|
+
const { Statement } = shim;
|
|
63
|
+
|
|
64
|
+
statement = Statement.fromStatementNode(statementNode, localContext); ///
|
|
65
|
+
|
|
66
|
+
const string = stringFromStatementAndMetavariable(statement, metavariable),
|
|
67
|
+
substitution = null,
|
|
68
|
+
metavariableNode = metavariable.getNode(),
|
|
61
69
|
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statementNode, metavariableNode, substitution);
|
|
62
70
|
|
|
63
71
|
return statementForMetavariableSubstitution;
|
|
64
72
|
}
|
|
65
73
|
|
|
66
|
-
static
|
|
74
|
+
static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
|
|
75
|
+
let statementNode = statement.getNode();
|
|
76
|
+
|
|
67
77
|
statementNode = stripBracketsFromStatement(statementNode); ///
|
|
68
78
|
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
79
|
+
const { Statement } = shim;
|
|
80
|
+
|
|
81
|
+
statement = Statement.fromStatementNode(statementNode, localContext); ///
|
|
82
|
+
|
|
83
|
+
const metavariableNode = metavariable.getNode(),
|
|
84
|
+
string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext);
|
|
85
|
+
|
|
86
|
+
substitution = substitutionFromSubstitution(substitution, localContext);
|
|
87
|
+
|
|
88
|
+
const statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statementNode, metavariableNode, substitution);
|
|
72
89
|
|
|
73
90
|
return statementForMetavariableSubstitution;
|
|
74
91
|
}
|
|
75
92
|
}
|
|
76
93
|
|
|
77
|
-
function
|
|
78
|
-
|
|
94
|
+
function stringFromStatementAndMetavariable(statement, metavariable) {
|
|
95
|
+
const statementString = statement.getString(),
|
|
96
|
+
metavariableString = metavariable.getString(),
|
|
97
|
+
string = `[${statementString} for ${metavariableString}]`;
|
|
79
98
|
|
|
80
|
-
|
|
81
|
-
|
|
99
|
+
return string;
|
|
100
|
+
}
|
|
82
101
|
|
|
83
|
-
if (termForVariableSubstitution !== null) {
|
|
84
|
-
substitution = termForVariableSubstitution; ///
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
102
|
|
|
88
|
-
|
|
89
|
-
|
|
103
|
+
function substitutionFromSubstitution(substitution, localContextA, localContextB) {
|
|
104
|
+
// let substitution = null;
|
|
90
105
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
106
|
+
debugger
|
|
107
|
+
|
|
108
|
+
// if (substitution === null) {
|
|
109
|
+
// const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitution(substitutionNode, localContextA, localContextB);
|
|
110
|
+
//
|
|
111
|
+
// if (termForVariableSubstitution !== null) {
|
|
112
|
+
// substitution = termForVariableSubstitution; ///
|
|
113
|
+
// }
|
|
114
|
+
// }
|
|
115
|
+
//
|
|
116
|
+
// if (substitution === null) {
|
|
117
|
+
// const frameForMetavariableSubstitution = FrameForMetavariableSubstitution.fromSubstitution(substitutionNode, localContextA, localContextB);
|
|
118
|
+
//
|
|
119
|
+
// if (frameForMetavariableSubstitution !== null) {
|
|
120
|
+
// substitution = frameForMetavariableSubstitution; ///
|
|
121
|
+
// }
|
|
122
|
+
// }
|
|
95
123
|
|
|
96
124
|
return substitution;
|
|
97
125
|
}
|
|
98
126
|
|
|
99
|
-
function
|
|
127
|
+
function stringFromStatementMetavariableAndSubstitution(statementNode, metavariableNode, substitution, localContextA, localContextB) {
|
|
100
128
|
let string;
|
|
101
129
|
|
|
102
130
|
const statementNodeB = statementNode, ///
|
|
@@ -7,7 +7,7 @@ import { nodeQuery } from "../utilities/query";
|
|
|
7
7
|
import { stripBracketsFromTerm } from "../utilities/brackets";
|
|
8
8
|
|
|
9
9
|
const termVariableNodeQuery = nodeQuery("/term/variable!"),
|
|
10
|
-
|
|
10
|
+
substitutionTermNodeQuery = nodeQuery("/substitution/term!"),
|
|
11
11
|
substitutionsVariableNodeQuery = nodeQuery("/substitution/variable!");
|
|
12
12
|
|
|
13
13
|
export default class TermForVariableSubstitution extends Substitution {
|
|
@@ -83,26 +83,12 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
83
83
|
return unifiedWithEquivalence;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
static
|
|
87
|
-
let termNode = term.getNode();
|
|
88
|
-
|
|
89
|
-
termNode = stripBracketsFromTerm(termNode); ///
|
|
90
|
-
|
|
91
|
-
const { Term } = shim;
|
|
92
|
-
|
|
93
|
-
term = Term.fromTermNode(termNode, localContext)
|
|
94
|
-
|
|
95
|
-
const string = stringFromTermAndVariable(term, variable),
|
|
96
|
-
variableNode = variable.getNode(),
|
|
97
|
-
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode);
|
|
98
|
-
|
|
99
|
-
return termForVariableSubstitution;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
static fromSubstitutionNode(substitutionNode) {
|
|
86
|
+
static fromSubstitution(substitution) {
|
|
103
87
|
let termForVariableSubstitution = null;
|
|
104
88
|
|
|
105
|
-
|
|
89
|
+
const substitutionNode = substitution.getNode();
|
|
90
|
+
|
|
91
|
+
let substitutionTermNode = substitutionTermNodeQuery(substitutionNode);
|
|
106
92
|
|
|
107
93
|
if (substitutionTermNode !== null) {
|
|
108
94
|
let termNode = substitutionTermNode; ///
|
|
@@ -117,6 +103,22 @@ export default class TermForVariableSubstitution extends Substitution {
|
|
|
117
103
|
|
|
118
104
|
return termForVariableSubstitution;
|
|
119
105
|
}
|
|
106
|
+
|
|
107
|
+
static fromTernAndVariable(term, variable, localContext) {
|
|
108
|
+
let termNode = term.getNode();
|
|
109
|
+
|
|
110
|
+
termNode = stripBracketsFromTerm(termNode); ///
|
|
111
|
+
|
|
112
|
+
const { Term } = shim;
|
|
113
|
+
|
|
114
|
+
term = Term.fromTermNode(termNode, localContext); ///
|
|
115
|
+
|
|
116
|
+
const string = stringFromTermAndVariable(term, variable),
|
|
117
|
+
variableNode = variable.getNode(),
|
|
118
|
+
termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode);
|
|
119
|
+
|
|
120
|
+
return termForVariableSubstitution;
|
|
121
|
+
}
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
function transformTermNode(termNode, substitutions) {
|
package/src/supposition.js
CHANGED
|
@@ -12,9 +12,8 @@ import { assignAssignments } from "./utilities/assignments";
|
|
|
12
12
|
const unqualifiedStatementNodeQuery = nodeQuery("/supposition/unqualifiedStatement");
|
|
13
13
|
|
|
14
14
|
export default class Supposition {
|
|
15
|
-
constructor(fileContext,
|
|
15
|
+
constructor(fileContext, unqualifiedStatement) {
|
|
16
16
|
this.fileContext = fileContext;
|
|
17
|
-
this.subproofAssertion = subproofAssertion;
|
|
18
17
|
this.unqualifiedStatement = unqualifiedStatement;
|
|
19
18
|
}
|
|
20
19
|
|
|
@@ -22,10 +21,6 @@ export default class Supposition {
|
|
|
22
21
|
return this.fileContext;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
|
-
getSubproofAssertion() {
|
|
26
|
-
return this.subproofAssertion;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
24
|
getUnqualifiedStatement() {
|
|
30
25
|
return this.unqualifiedStatement;
|
|
31
26
|
}
|
|
@@ -34,6 +29,65 @@ export default class Supposition {
|
|
|
34
29
|
|
|
35
30
|
getStatement() { return this.unqualifiedStatement.getStatement(); }
|
|
36
31
|
|
|
32
|
+
verify(localContext) {
|
|
33
|
+
let verified = false;
|
|
34
|
+
|
|
35
|
+
const suppositionString = this.getString(); ///
|
|
36
|
+
|
|
37
|
+
if (this.unqualifiedStatement !== null) {
|
|
38
|
+
localContext.trace(`Verifying the '${suppositionString}' supposition...`);
|
|
39
|
+
|
|
40
|
+
const stated = true,
|
|
41
|
+
assignments = [],
|
|
42
|
+
unqualifiedStatementVerified = this.unqualifiedStatement.verify(assignments, stated, localContext);
|
|
43
|
+
|
|
44
|
+
if (unqualifiedStatementVerified) {
|
|
45
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
46
|
+
|
|
47
|
+
if (assignmentsAssigned) {
|
|
48
|
+
const { ProofStep } = shim,
|
|
49
|
+
proofStep = ProofStep.fromUnqualifiedStatement(this.unqualifiedStatement);
|
|
50
|
+
|
|
51
|
+
localContext.addProofStep(proofStep);
|
|
52
|
+
|
|
53
|
+
verified = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (verified) {
|
|
58
|
+
localContext.debug(`...verified the '${suppositionString}' supposition.`);
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
localContext.debug(`The '${suppositionString}' supposition cannot be verified because it is nonsense.`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return verified;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
unifySubproof(subproof, substitutions, localContext) {
|
|
68
|
+
let subproofUnified = false;
|
|
69
|
+
|
|
70
|
+
const supposition = this, ///
|
|
71
|
+
subproofString = subproof.getString(),
|
|
72
|
+
suppositionStatement = supposition.getStatement(),
|
|
73
|
+
suppositionStatementString = suppositionStatement.getString();
|
|
74
|
+
|
|
75
|
+
localContext.trace(`Unifying the '${subproofString}' subproof with the supposition's '${suppositionStatementString}' statement...`);
|
|
76
|
+
|
|
77
|
+
const statement = this.unqualifiedStatement.getStatement(),
|
|
78
|
+
subproofAssertion = SubproofAssertion.fromStatement(statement, this.fileContext);
|
|
79
|
+
|
|
80
|
+
if (subproofAssertion !== null) {
|
|
81
|
+
subproofUnified = subproofAssertion.unifySubproof(subproof, substitutions, this.fileContext, localContext);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (subproofUnified) {
|
|
85
|
+
localContext.debug(`...unified the '${subproofString}' subproof with the supposition's '${suppositionStatementString}' statement.`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return subproofUnified;
|
|
89
|
+
}
|
|
90
|
+
|
|
37
91
|
unifyProofStep(proofStep, substitutions, localContext) {
|
|
38
92
|
let proofStepUnified = false;
|
|
39
93
|
|
|
@@ -85,91 +139,24 @@ export default class Supposition {
|
|
|
85
139
|
return statementUnified;
|
|
86
140
|
}
|
|
87
141
|
|
|
88
|
-
unifySubproof(subproof, substitutions, localContext) {
|
|
89
|
-
let subproofUnified = false;
|
|
90
|
-
|
|
91
|
-
const supposition = this, ///
|
|
92
|
-
subproofString = subproof.getString(),
|
|
93
|
-
suppositionStatement = supposition.getStatement(),
|
|
94
|
-
suppositionStatementString = suppositionStatement.getString();
|
|
95
|
-
|
|
96
|
-
localContext.trace(`Unifying the '${subproofString}' subproof with the supposition's '${suppositionStatementString}' statement...`);
|
|
97
|
-
|
|
98
|
-
if (this.subproofAssertion !== null) {
|
|
99
|
-
subproofUnified = this.subproofAssertion.unifySubproof(subproof, substitutions, localContext);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (subproofUnified) {
|
|
103
|
-
localContext.debug(`...unified the '${subproofString}' subproof with the supposition's '${suppositionStatementString}' statement.`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return subproofUnified;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
verify(localContext) {
|
|
110
|
-
let verified = false;
|
|
111
|
-
|
|
112
|
-
const suppositionString = this.getString(); ///
|
|
113
|
-
|
|
114
|
-
if (this.unqualifiedStatement !== null) {
|
|
115
|
-
localContext.trace(`Verifying the '${suppositionString}' supposition...`);
|
|
116
|
-
|
|
117
|
-
const stated = true,
|
|
118
|
-
assignments = [],
|
|
119
|
-
unqualifiedStatementVerified = this.unqualifiedStatement.verify(assignments, stated, localContext);
|
|
120
|
-
|
|
121
|
-
if (unqualifiedStatementVerified) {
|
|
122
|
-
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
123
|
-
|
|
124
|
-
if (assignmentsAssigned) {
|
|
125
|
-
const { ProofStep } = shim,
|
|
126
|
-
proofStep = ProofStep.fromUnqualifiedStatement(this.unqualifiedStatement);
|
|
127
|
-
|
|
128
|
-
localContext.addProofStep(proofStep);
|
|
129
|
-
|
|
130
|
-
verified = true;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (verified) {
|
|
135
|
-
localContext.debug(`...verified the '${suppositionString}' supposition.`);
|
|
136
|
-
}
|
|
137
|
-
} else {
|
|
138
|
-
localContext.debug(`The '${suppositionString}' supposition cannot be verified because it is nonsense.`);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return verified;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
142
|
toJSON() {
|
|
145
143
|
const unqualifiedStatementJSON = this.unqualifiedStatement.toJSON(),
|
|
146
|
-
subproofAssertionJSON = (this.subproofAssertion !== null) ?
|
|
147
|
-
this.subproofAssertion.toJSON() :
|
|
148
|
-
null,
|
|
149
144
|
unqualifiedStatement = unqualifiedStatementJSON, ///
|
|
150
|
-
subproofAssertion = subproofAssertionJSON, ///
|
|
151
145
|
json = {
|
|
152
|
-
unqualifiedStatement
|
|
153
|
-
subproofAssertion
|
|
146
|
+
unqualifiedStatement
|
|
154
147
|
};
|
|
155
148
|
|
|
156
149
|
return json;
|
|
157
150
|
}
|
|
158
151
|
|
|
159
152
|
static fromJSON(json, fileContext) {
|
|
160
|
-
let {
|
|
153
|
+
let { unqualifiedStatement } = json;
|
|
161
154
|
|
|
162
155
|
json = unqualifiedStatement; ///
|
|
163
156
|
|
|
164
157
|
unqualifiedStatement = UnqualifiedStatement.fromJSON(json, fileContext);
|
|
165
158
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
subproofAssertion = (json !== null) ?
|
|
169
|
-
SubproofAssertion.fromJSON(json, fileContext) :
|
|
170
|
-
null;
|
|
171
|
-
|
|
172
|
-
const supposition = new Supposition(fileContext, subproofAssertion, unqualifiedStatement);
|
|
159
|
+
const supposition = new Supposition(fileContext, unqualifiedStatement);
|
|
173
160
|
|
|
174
161
|
return supposition;
|
|
175
162
|
}
|
|
@@ -177,8 +164,7 @@ export default class Supposition {
|
|
|
177
164
|
static fromSuppositionNode(suppositionNode, fileContext) {
|
|
178
165
|
const unqualifiedStatementNode = unqualifiedStatementNodeQuery(suppositionNode),
|
|
179
166
|
unqualifiedStatement = UnqualifiedStatement.fromUnqualifiedStatementNode(unqualifiedStatementNode, fileContext),
|
|
180
|
-
|
|
181
|
-
supposition = new Supposition(fileContext, subproofAssertion, unqualifiedStatement);
|
|
167
|
+
supposition = new Supposition(fileContext, unqualifiedStatement);
|
|
182
168
|
|
|
183
169
|
return supposition
|
|
184
170
|
}
|
|
@@ -29,16 +29,15 @@ class IntrinsicLevelUnifier extends Unifier {
|
|
|
29
29
|
unify: (termVariableNodeA, termNodeB, substitutions, localContextA, localContextB) => {
|
|
30
30
|
let termUnified = false;
|
|
31
31
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
const variableNode = termVariableNodeA, ///
|
|
33
|
+
variableName = variableNameFromVariableNode(variableNode),
|
|
34
|
+
variable = localContextA.findVariableByVariableName(variableName);
|
|
35
35
|
|
|
36
|
-
if (
|
|
36
|
+
if (variable !== null) {
|
|
37
37
|
const { Term } = shim,
|
|
38
|
-
termB = Term.fromTermNode(termNodeB, localContextB),
|
|
39
38
|
localContext = localContextB, ///
|
|
40
|
-
|
|
41
|
-
term =
|
|
39
|
+
termNode = termNodeB, ///
|
|
40
|
+
term = Term.fromTermNode(termNode, localContextB);
|
|
42
41
|
|
|
43
42
|
termUnified = variable.unifyTerm(term, substitutions, localContext);
|
|
44
43
|
}
|
package/src/unifier/metaLevel.js
CHANGED
|
@@ -3,18 +3,15 @@
|
|
|
3
3
|
import shim from "../shim";
|
|
4
4
|
import Unifier from "../unifier";
|
|
5
5
|
import unifyMetavariableWithFrame from "../unify/metavariableWithFrame";
|
|
6
|
-
import unifyMetavariableWithStatement from "../unify/metavariableWithStatement";
|
|
7
|
-
import unifyMetavariableWithStatementGivenSubstitution from "../unify/metavariableWithStatementGivenSubstitution";
|
|
8
6
|
|
|
9
7
|
import { nodeQuery } from "../utilities/query";
|
|
10
|
-
import { variableNameFromVariableNode } from "../utilities/name";
|
|
8
|
+
import { variableNameFromVariableNode, metavariableNameFromMetavariableNode } from "../utilities/name";
|
|
11
9
|
|
|
12
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
13
11
|
frameNodeQuery = nodeQuery("/frame!"),
|
|
14
12
|
statementNodeQuery = nodeQuery("/statement!"),
|
|
15
13
|
termVariableNodeQuery = nodeQuery("/term/variable!"),
|
|
16
14
|
frameMetavariableNodeQuery = nodeQuery("/frame/metavariable!"),
|
|
17
|
-
statementSubstitutionNodeQuery = nodeQuery("/statement/substitution!"),
|
|
18
15
|
statementMetavariableNodeQuery = nodeQuery("/statement/metavariable!");
|
|
19
16
|
|
|
20
17
|
class MetaLevelUnifier extends Unifier {
|
|
@@ -35,35 +32,46 @@ class MetaLevelUnifier extends Unifier {
|
|
|
35
32
|
nodeQueryA: statementNodeQuery,
|
|
36
33
|
nodeQueryB: statementNodeQuery,
|
|
37
34
|
unify: (statementNodeA, statementNodeB, substitutions, localContextA, localContextB) => {
|
|
38
|
-
let
|
|
35
|
+
let statementUnified;
|
|
39
36
|
|
|
40
37
|
const matches = statementNodeA.match(statementNodeB);
|
|
41
38
|
|
|
42
39
|
if (matches) {
|
|
43
|
-
|
|
40
|
+
statementUnified = true;
|
|
44
41
|
} else {
|
|
45
|
-
const
|
|
42
|
+
const { Statement } = shim,
|
|
43
|
+
statementB = Statement.fromStatementNode(statementNodeB, localContextB),
|
|
44
|
+
statementMetavariableNodeA = statementMetavariableNodeQuery(statementNodeA);
|
|
46
45
|
|
|
47
46
|
if (statementMetavariableNodeA !== null) {
|
|
48
|
-
|
|
49
|
-
statementSubstitutionNodeA = statementSubstitutionNodeQuery(statementNodeA);
|
|
47
|
+
let statement;
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
const metavariableUnifiedWithStatement = unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutions, localContextA, localContextB);
|
|
49
|
+
const statementA = Statement.fromStatementNode(statementNodeA, localContextA);
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
statement = statementA; ///
|
|
52
|
+
|
|
53
|
+
const substitution = statement.getSubstitution();
|
|
54
|
+
|
|
55
|
+
statement = statementB; ///
|
|
56
|
+
|
|
57
|
+
const localContext = localContextB, ///
|
|
58
|
+
metavariableNode = statementMetavariableNodeA, ///
|
|
59
|
+
metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
|
|
60
|
+
metavariable = localContextA.findMetavariableByMetavariableName(metavariableName);
|
|
61
|
+
|
|
62
|
+
if (substitution === null) {
|
|
63
|
+
statementUnified = metavariable.unifyStatement(statement, substitutions, localContext);
|
|
55
64
|
} else {
|
|
56
|
-
const
|
|
57
|
-
metavariableUnifiedWithStatementGivenSubstitution = unifyMetavariableWithStatementGivenSubstitution(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB);
|
|
65
|
+
const statementUnifiedGivenSubstitution = metavariableNode.unifyStatementGivenSubstitution(statement, substitution, substitutions, localContext);
|
|
58
66
|
|
|
59
|
-
|
|
67
|
+
statementUnified = statementUnifiedGivenSubstitution; ///
|
|
60
68
|
}
|
|
61
69
|
} else {
|
|
62
|
-
|
|
70
|
+
statementUnified = unifyStatementWithStatement(statementNodeA, statementNodeB, substitutions, localContextA, localContextB);
|
|
63
71
|
}
|
|
64
72
|
}
|
|
65
73
|
|
|
66
|
-
return
|
|
74
|
+
return statementUnified;
|
|
67
75
|
}
|
|
68
76
|
},
|
|
69
77
|
{
|
|
@@ -84,16 +92,15 @@ class MetaLevelUnifier extends Unifier {
|
|
|
84
92
|
unify: (termVariableNodeA, termNodeB, substitutions, localContextA, localContextB) => {
|
|
85
93
|
let termUnified = false;
|
|
86
94
|
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
const variableNode = termVariableNodeA, ///
|
|
96
|
+
variableName = variableNameFromVariableNode(variableNode),
|
|
97
|
+
variable = localContextA.findVariableByVariableName(variableName);
|
|
90
98
|
|
|
91
|
-
if (
|
|
99
|
+
if (variable !== null) {
|
|
92
100
|
const { Term } = shim,
|
|
93
|
-
termB = Term.fromTermNode(termNodeB, localContextB),
|
|
94
101
|
localContext = localContextB, ///
|
|
95
|
-
|
|
96
|
-
term =
|
|
102
|
+
termNode = termNodeB, ///
|
|
103
|
+
term = Term.fromTermNode(termNode, localContextB);
|
|
97
104
|
|
|
98
105
|
termUnified = variable.unifyTerm(term, substitutions, localContext);
|
|
99
106
|
}
|
|
@@ -116,7 +123,7 @@ function unifyStatementWithStatement(statementNodeA, statementNodeB, substitutio
|
|
|
116
123
|
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
117
124
|
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
118
125
|
childNodesVerified = metaLevelUnifier.unifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB),
|
|
119
|
-
|
|
126
|
+
statementUnified = childNodesVerified; ///
|
|
120
127
|
|
|
121
|
-
return
|
|
128
|
+
return statementUnified;
|
|
122
129
|
}
|
|
@@ -5,7 +5,6 @@ import Unifier from "../unifier";
|
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
import { typeNameFromTypeNode } from "../utilities/name";
|
|
8
|
-
import local from "../context/local";
|
|
9
8
|
|
|
10
9
|
const termNodeQuery = nodeQuery("/term!"),
|
|
11
10
|
typeNodeQuery = nodeQuery("/type!"),
|
package/src/utilities/node.js
CHANGED
|
@@ -6,10 +6,12 @@ import { nodeQuery } from "../utilities/query";
|
|
|
6
6
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
7
7
|
import { VARIABLE_RULE_NAME,
|
|
8
8
|
METAVARIABLE_RULE_NAME,
|
|
9
|
+
SUBSTITUTION_RULE_NAME,
|
|
9
10
|
UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
10
11
|
CONSTRUCTOR_DECLARATION_RULE_NAME } from "../ruleNames";
|
|
11
12
|
import { variableTokensFromVariableString,
|
|
12
13
|
metavariableTokensFromMetavariableString,
|
|
14
|
+
substitutionTokensFromSubstitutionString,
|
|
13
15
|
unqualifiedStatementTokensFromUnqualifiedStatementString,
|
|
14
16
|
constructorDeclarationTokensFromConstructorDeclarationString } from "../utilities/tokens";
|
|
15
17
|
|
|
@@ -55,6 +57,13 @@ export function metavariableNodeFromMetavariableString(metavariableString, lexer
|
|
|
55
57
|
return metavariableNode;
|
|
56
58
|
}
|
|
57
59
|
|
|
60
|
+
export function substitutionNodeFromSubstitutionString(substitutionString, lexer, parser) {
|
|
61
|
+
const substitutionTokens = substitutionTokensFromSubstitutionString(substitutionString, lexer),
|
|
62
|
+
substitutionNode = substitutionNodeFromSubstitutionTokens(substitutionTokens, parser);
|
|
63
|
+
|
|
64
|
+
return substitutionNode;
|
|
65
|
+
}
|
|
66
|
+
|
|
58
67
|
export function variableNodeFromVariableTokens(variableTokens, parser) {
|
|
59
68
|
const ruleName = VARIABLE_RULE_NAME,
|
|
60
69
|
variableNode = nodeFromTokensRuleNameAndParser(variableTokens, ruleName, parser);
|
|
@@ -69,6 +78,13 @@ export function metavariableNodeFromMetavariableTokens(metavariableTokens, parse
|
|
|
69
78
|
return metavariableNode;
|
|
70
79
|
}
|
|
71
80
|
|
|
81
|
+
export function substitutionNodeFromSubstitutionTokens(substitutionTokens, parser) {
|
|
82
|
+
const ruleName = SUBSTITUTION_RULE_NAME,
|
|
83
|
+
substitutionNode = nodeFromTokensRuleNameAndParser(substitutionTokens, ruleName, parser);
|
|
84
|
+
|
|
85
|
+
return substitutionNode;
|
|
86
|
+
}
|
|
87
|
+
|
|
72
88
|
export function unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
|
|
73
89
|
const tokens = unqualifiedStatementTokens, ///
|
|
74
90
|
ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
|
package/src/utilities/tokens.js
CHANGED
|
@@ -23,6 +23,13 @@ export function metavariableTokensFromMetavariableString(metavariableString, lex
|
|
|
23
23
|
return metavariableTokens;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
export function substitutionTokensFromSubstitutionString(substitutionString, lexer) {
|
|
27
|
+
const substitutionContent = `${substitutionString}`,
|
|
28
|
+
substitutionTokens = tokensFromContentAndLexer(substitutionContent, lexer);
|
|
29
|
+
|
|
30
|
+
return substitutionTokens;
|
|
31
|
+
}
|
|
32
|
+
|
|
26
33
|
export function unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer) {
|
|
27
34
|
const content = unqualifiedStatementString, ///
|
|
28
35
|
unqualifiedStatementTokens = tokensFromContentAndLexer(content, lexer);
|