occam-verify-cli 0.0.1089 → 0.0.1091
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 +2 -2
- package/lib/assertion/contained.js +35 -41
- package/lib/assertion/defined.js +24 -24
- package/lib/assertion/subproof.js +24 -24
- package/lib/assertion/type.js +23 -23
- package/lib/assignment/equality.js +4 -10
- package/lib/assignment/judgement.js +4 -4
- package/lib/assignment/variable.js +4 -4
- package/lib/combinator/bracketed.js +3 -3
- package/lib/conclusion.js +11 -13
- package/lib/consequent.js +11 -13
- package/lib/constructor/bracketed.js +3 -3
- package/lib/constructor.js +2 -2
- package/lib/context/file.js +28 -27
- package/lib/context/local.js +31 -32
- package/lib/context/release.js +6 -3
- package/lib/declaration.js +18 -18
- package/lib/derivation.js +3 -3
- package/lib/equality.js +24 -24
- package/lib/equivalence.js +13 -13
- package/lib/frame.js +43 -43
- package/lib/index.js +2 -1
- package/lib/judgement.js +20 -20
- package/lib/label.js +9 -1
- package/lib/metaType.js +2 -2
- package/lib/metavariable.js +40 -39
- package/lib/mixins/statement/qualified/unify.js +19 -19
- package/lib/mixins/statement/resolve.js +11 -11
- package/lib/mixins/statement/unify.js +12 -12
- package/lib/mixins/statement/verify.js +36 -36
- package/lib/mixins/term/verify.js +2 -2
- package/lib/premise.js +31 -40
- package/lib/proof.js +6 -5
- package/lib/proofStep.js +17 -17
- package/lib/reference.js +8 -8
- package/lib/rule.js +21 -21
- package/lib/statement/qualified.js +17 -17
- package/lib/statement/unqualified.js +19 -19
- package/lib/statement.js +52 -54
- package/lib/subDerivation.js +3 -3
- package/lib/subproof.js +6 -5
- package/lib/substitution/frameForMetavariable.js +16 -39
- package/lib/substitution/statementForMetavariable.js +88 -74
- package/lib/substitution/termForVariable.js +15 -41
- package/lib/substitution.js +20 -6
- package/lib/substitutions.js +13 -13
- package/lib/supposition.js +31 -40
- package/lib/term.js +28 -28
- package/lib/topLevelAssertion.js +33 -21
- package/lib/unifier/equality.js +8 -8
- package/lib/unifier/intrinsicLevel.js +149 -0
- package/lib/unifier/metaLevel.js +41 -31
- package/lib/unifier/metavariable.js +14 -8
- package/lib/unifier/statementWithCombinator.js +16 -16
- package/lib/unifier/termWithConstructor.js +6 -6
- package/lib/unifier.js +47 -47
- package/lib/utilities/assignments.js +3 -3
- package/lib/utilities/equivalences.js +14 -14
- package/lib/utilities/json.js +22 -21
- package/lib/utilities/unifier.js +7 -8
- package/lib/variable.js +33 -33
- package/lib/verifier/statementAsCombinator.js +2 -2
- package/lib/verifier/termAsConstructor.js +2 -2
- package/package.json +2 -2
- package/src/assertion/contained.js +37 -45
- package/src/assertion/defined.js +25 -25
- package/src/assertion/subproof.js +25 -28
- package/src/assertion/type.js +23 -23
- package/src/assignment/equality.js +4 -6
- package/src/assignment/judgement.js +4 -4
- package/src/assignment/variable.js +4 -4
- package/src/combinator/bracketed.js +2 -2
- package/src/conclusion.js +14 -15
- package/src/consequent.js +14 -15
- package/src/constructor/bracketed.js +2 -2
- package/src/constructor.js +3 -2
- package/src/context/file.js +26 -25
- package/src/context/local.js +21 -23
- package/src/context/release.js +5 -3
- package/src/declaration.js +20 -20
- package/src/derivation.js +2 -2
- package/src/equality.js +26 -26
- package/src/equivalence.js +12 -12
- package/src/frame.js +42 -42
- package/src/index.js +1 -0
- package/src/judgement.js +25 -25
- package/src/label.js +14 -0
- package/src/metaType.js +1 -1
- package/src/metavariable.js +51 -43
- package/src/mixins/statement/qualified/unify.js +21 -21
- package/src/mixins/statement/resolve.js +12 -12
- package/src/mixins/statement/unify.js +11 -11
- package/src/mixins/statement/verify.js +35 -35
- package/src/mixins/term/verify.js +1 -1
- package/src/premise.js +42 -53
- package/src/proof.js +6 -4
- package/src/proofStep.js +21 -21
- package/src/reference.js +12 -11
- package/src/rule.js +20 -20
- package/src/statement/qualified.js +18 -17
- package/src/statement/unqualified.js +19 -18
- package/src/statement.js +63 -66
- package/src/subDerivation.js +2 -3
- package/src/subproof.js +6 -4
- package/src/substitution/frameForMetavariable.js +29 -45
- package/src/substitution/statementForMetavariable.js +136 -86
- package/src/substitution/termForVariable.js +28 -49
- package/src/substitution.js +15 -5
- package/src/substitutions.js +12 -12
- package/src/supposition.js +41 -53
- package/src/term.js +27 -27
- package/src/topLevelAssertion.js +32 -19
- package/src/unifier/equality.js +7 -7
- package/src/unifier/intrinsicLevel.js +61 -0
- package/src/unifier/metaLevel.js +60 -46
- package/src/unifier/metavariable.js +22 -13
- package/src/unifier/statementWithCombinator.js +28 -28
- package/src/unifier/termWithConstructor.js +8 -8
- package/src/unifier.js +55 -55
- package/src/utilities/assignments.js +2 -2
- package/src/utilities/equivalences.js +13 -13
- package/src/utilities/json.js +76 -66
- package/src/utilities/unifier.js +10 -12
- package/src/variable.js +43 -40
- package/src/verifier/statementAsCombinator.js +2 -1
- package/src/verifier/termAsConstructor.js +2 -1
package/src/unifier/metaLevel.js
CHANGED
|
@@ -16,12 +16,12 @@ const termNodeQuery = nodeQuery("/term"),
|
|
|
16
16
|
statementMetavariableNodeQuery = nodeQuery("/statement/metavariable!");
|
|
17
17
|
|
|
18
18
|
class MetaLevelUnifier extends Unifier {
|
|
19
|
-
unify(
|
|
19
|
+
unify(generalNode, specificNode, substitutions, generalContext, specificContext) {
|
|
20
20
|
let unifiedAtMetaLevel;
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
nonTerminalNodeUnified = this.unifyNonTerminalNode(
|
|
22
|
+
const generalNonTerminalNode = generalNode, ///
|
|
23
|
+
specificNonTerminalNode = specificNode, ///
|
|
24
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, substitutions, generalContext, specificContext);
|
|
25
25
|
|
|
26
26
|
unifiedAtMetaLevel = nonTerminalNodeUnified; ///
|
|
27
27
|
|
|
@@ -30,43 +30,43 @@ class MetaLevelUnifier extends Unifier {
|
|
|
30
30
|
|
|
31
31
|
static maps = [
|
|
32
32
|
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
unify: (
|
|
33
|
+
generalNodeQuery: statementNodeQuery,
|
|
34
|
+
specificNodeQuery: statementNodeQuery,
|
|
35
|
+
unify: (generalStatementNode, specificStatementNode, substitutions, generalContext, specificContext) => {
|
|
36
36
|
let statementUnified;
|
|
37
37
|
|
|
38
|
-
const matches =
|
|
38
|
+
const matches = generalStatementNode.match(specificStatementNode);
|
|
39
39
|
|
|
40
40
|
if (matches) {
|
|
41
41
|
statementUnified = true;
|
|
42
42
|
} else {
|
|
43
|
-
let
|
|
43
|
+
let context,
|
|
44
44
|
statementNode;
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
context = generalContext; ///
|
|
47
47
|
|
|
48
|
-
statementNode =
|
|
48
|
+
statementNode = generalStatementNode; ///
|
|
49
49
|
|
|
50
50
|
const statementMetavariableNode = statementMetavariableNodeQuery(statementNode);
|
|
51
51
|
|
|
52
52
|
if (statementMetavariableNode !== null) {
|
|
53
|
-
const substitution = FrameForMetavariableSubstitution.fromStatementNode(statementNode,
|
|
54
|
-
TermForVariableSubstitution.fromStatementNode(statementNode,
|
|
53
|
+
const substitution = FrameForMetavariableSubstitution.fromStatementNode(statementNode, context) ||
|
|
54
|
+
TermForVariableSubstitution.fromStatementNode(statementNode, context) ||
|
|
55
55
|
null;
|
|
56
56
|
|
|
57
57
|
const { Statement } = shim,
|
|
58
58
|
metavariableNode = statementMetavariableNode, ///
|
|
59
|
-
metavariable =
|
|
59
|
+
metavariable = generalContext.findMetavariableByMetavariableNode(metavariableNode, specificContext);
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
context = specificContext; ///
|
|
62
62
|
|
|
63
|
-
statementNode =
|
|
63
|
+
statementNode = specificStatementNode; ///
|
|
64
64
|
|
|
65
|
-
const statement = Statement.fromStatementNode(statementNode,
|
|
65
|
+
const statement = Statement.fromStatementNode(statementNode, context);
|
|
66
66
|
|
|
67
|
-
statementUnified = metavariable.unifyStatement(statement, substitution, substitutions,
|
|
67
|
+
statementUnified = metavariable.unifyStatement(statement, substitution, substitutions, generalContext, specificContext);
|
|
68
68
|
} else {
|
|
69
|
-
statementUnified = unifyChildNodes(
|
|
69
|
+
statementUnified = unifyChildNodes(generalStatementNode, specificStatementNode, substitutions, generalContext, specificContext);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -74,45 +74,59 @@ class MetaLevelUnifier extends Unifier {
|
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
unify: (
|
|
77
|
+
generalNodeQuery: frameMetavariableNodeQuery,
|
|
78
|
+
specificNodeQuery: frameNodeQuery,
|
|
79
|
+
unify: (generalFrameMetavariableNode, specificFrameNode, substitutions, generalContext, specificContext) => {
|
|
80
80
|
let frameUnified = false;
|
|
81
81
|
|
|
82
|
-
const metavariableNode =
|
|
83
|
-
metavariablePresent =
|
|
82
|
+
const metavariableNode = generalFrameMetavariableNode, ///
|
|
83
|
+
metavariablePresent = generalContext.isMetavariablePresentByMetavariableNode(metavariableNode, generalContext, specificContext);
|
|
84
84
|
|
|
85
85
|
if (metavariablePresent) {
|
|
86
|
+
let context;
|
|
87
|
+
|
|
86
88
|
const { Frame, Metavariable } = shim,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
frameNode = specificFrameNode; ///
|
|
90
|
+
|
|
91
|
+
context = generalContext; ///
|
|
92
|
+
|
|
93
|
+
const metavariable = Metavariable.fromMetavariableNode(metavariableNode, context);
|
|
94
|
+
|
|
95
|
+
context = specificContext; ///
|
|
96
|
+
|
|
97
|
+
const frame = Frame.fromFrameNode(frameNode, context);
|
|
91
98
|
|
|
92
|
-
frameUnified = metavariable.unifyFrame(frame, substitutions,
|
|
99
|
+
frameUnified = metavariable.unifyFrame(frame, substitutions, generalContext, specificContext);
|
|
93
100
|
}
|
|
94
101
|
|
|
95
102
|
return frameUnified;
|
|
96
103
|
}
|
|
97
104
|
},
|
|
98
105
|
{
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
unify: (termVariableNodeA, termNodeB, substitutions,
|
|
106
|
+
generalNodeQuery: termVariableNodeQuery,
|
|
107
|
+
specificNodeQuery: termNodeQuery,
|
|
108
|
+
unify: (termVariableNodeA, termNodeB, substitutions, generalContext, specificContext) => {
|
|
102
109
|
let termUnified = false;
|
|
103
110
|
|
|
104
111
|
const variableNode = termVariableNodeA, ///
|
|
105
112
|
variableName = variableNameFromVariableNode(variableNode),
|
|
106
|
-
variablePresent =
|
|
113
|
+
variablePresent = generalContext.isVariablePresentByVariableName(variableName);
|
|
107
114
|
|
|
108
115
|
if (variablePresent) {
|
|
116
|
+
let context;
|
|
117
|
+
|
|
109
118
|
const { Term, Variable } = shim,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
119
|
+
termNode = termNodeB; ///
|
|
120
|
+
|
|
121
|
+
context = generalContext; ///
|
|
122
|
+
|
|
123
|
+
const variable = Variable.fromVariableNode(variableNode, context);
|
|
124
|
+
|
|
125
|
+
context = specificContext; ///
|
|
126
|
+
|
|
127
|
+
const term = Term.fromTermNode(termNode, context);
|
|
114
128
|
|
|
115
|
-
termUnified = variable.unifyTerm(term, substitutions,
|
|
129
|
+
termUnified = variable.unifyTerm(term, substitutions, generalContext, specificContext);
|
|
116
130
|
}
|
|
117
131
|
|
|
118
132
|
return termUnified;
|
|
@@ -125,14 +139,14 @@ const metaLevelUnifier = new MetaLevelUnifier();
|
|
|
125
139
|
|
|
126
140
|
export default metaLevelUnifier;
|
|
127
141
|
|
|
128
|
-
function unifyChildNodes(
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
childNodesVerified = metaLevelUnifier.unifyChildNodes(
|
|
142
|
+
function unifyChildNodes(generalStatementNode, specificStatementNode, substitutions, generalContext, specificContext) {
|
|
143
|
+
const generalNonTerminalNode = generalStatementNode, ///
|
|
144
|
+
specificNonTerminalNode = specificStatementNode, ///
|
|
145
|
+
generalNonTerminalNodeChildNodes = generalNonTerminalNode.getChildNodes(),
|
|
146
|
+
specificNonTerminalNodeChildNodes = specificNonTerminalNode.getChildNodes(),
|
|
147
|
+
generalChildNodes = generalNonTerminalNodeChildNodes, ///
|
|
148
|
+
specificChildNodes = specificNonTerminalNodeChildNodes, ///
|
|
149
|
+
childNodesVerified = metaLevelUnifier.unifyChildNodes(generalChildNodes, specificChildNodes, substitutions, generalContext, specificContext),
|
|
136
150
|
statementUnified = childNodesVerified; ///
|
|
137
151
|
|
|
138
152
|
return statementUnified;
|
|
@@ -10,12 +10,12 @@ const typeNodeQuery = nodeQuery("/type"),
|
|
|
10
10
|
termNodeQuery = nodeQuery("/term");
|
|
11
11
|
|
|
12
12
|
class MetavariableUnifier extends Unifier {
|
|
13
|
-
unify(
|
|
13
|
+
unify(generalMetavariableNode, specificMetavariableNode, generalContext, specificContext) {
|
|
14
14
|
let metavariableUnified;
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
nonTerminalNodeUnified = this.unifyNonTerminalNode(
|
|
16
|
+
const generalNonTerminalNode = generalMetavariableNode, ///
|
|
17
|
+
specificNonTerminalNode = specificMetavariableNode, ///
|
|
18
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, generalContext, specificContext);
|
|
19
19
|
|
|
20
20
|
metavariableUnified = nonTerminalNodeUnified; ///
|
|
21
21
|
|
|
@@ -24,20 +24,29 @@ class MetavariableUnifier extends Unifier {
|
|
|
24
24
|
|
|
25
25
|
static maps = [
|
|
26
26
|
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
unify: (
|
|
27
|
+
generalNodeQuery: typeNodeQuery,
|
|
28
|
+
specificNodeQuery: termNodeQuery,
|
|
29
|
+
unify: (generalTypeNode, specificTermNode, generalContext, specificContext) => {
|
|
30
30
|
let termUnified = false;
|
|
31
31
|
|
|
32
32
|
const { Term } = shim,
|
|
33
|
-
typeNode =
|
|
34
|
-
typeName = typeNameFromTypeNode(typeNode)
|
|
35
|
-
|
|
33
|
+
typeNode = generalTypeNode, ///
|
|
34
|
+
typeName = typeNameFromTypeNode(typeNode);
|
|
35
|
+
|
|
36
|
+
const type = generalContext.findTypeByTypeName(typeName);
|
|
36
37
|
|
|
37
38
|
if (type !== null) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
let context;
|
|
40
|
+
|
|
41
|
+
const termNode = specificTermNode; ///
|
|
42
|
+
|
|
43
|
+
context = generalContext; ///
|
|
44
|
+
|
|
45
|
+
const term = Term.fromTermNode(termNode, context);
|
|
46
|
+
|
|
47
|
+
context = specificContext; ///
|
|
48
|
+
|
|
49
|
+
const termVerifiedGivenType = term.verifyGivenType(type, context);
|
|
41
50
|
|
|
42
51
|
if (termVerifiedGivenType) {
|
|
43
52
|
termUnified = true;
|
|
@@ -13,12 +13,12 @@ const termNodeQuery = nodeQuery("/term"),
|
|
|
13
13
|
statementNodeQuery = nodeQuery("/statement");
|
|
14
14
|
|
|
15
15
|
class StatementWithCombinatorUnifier extends Unifier {
|
|
16
|
-
unify(combinatorStatementNode, statementNode, assignments, stated,
|
|
16
|
+
unify(combinatorStatementNode, statementNode, assignments, stated, context) {
|
|
17
17
|
let statementUnifiedWithCombinator;
|
|
18
18
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
nonTerminalNodeUnified = this.unifyNonTerminalNode(
|
|
19
|
+
const generalNonTerminalNode = combinatorStatementNode, ///
|
|
20
|
+
specificNonTerminalNode = statementNode, ///
|
|
21
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, assignments, stated, context);
|
|
22
22
|
|
|
23
23
|
statementUnifiedWithCombinator = nonTerminalNodeUnified; ///
|
|
24
24
|
|
|
@@ -27,17 +27,17 @@ class StatementWithCombinatorUnifier extends Unifier {
|
|
|
27
27
|
|
|
28
28
|
static maps = [
|
|
29
29
|
{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
unify: (
|
|
30
|
+
generalNodeQuery: metaTypeNodeQuery,
|
|
31
|
+
specificNodeQuery: statementNodeQuery,
|
|
32
|
+
unify: (generalMetaTypeNode, specificStatementNode, assignments, stated, context) => {
|
|
33
33
|
let unified;
|
|
34
34
|
|
|
35
35
|
const { Statement, MetaType } = shim,
|
|
36
|
-
metaTypeNode =
|
|
37
|
-
statementNode =
|
|
38
|
-
metaType = MetaType.fromMetaTypeNode(metaTypeNode,
|
|
39
|
-
statement = Statement.fromStatementNode(statementNode,
|
|
40
|
-
statementVerifiedGivenType = statement.verifyGivenMetaType(metaType, assignments, stated,
|
|
36
|
+
metaTypeNode = generalMetaTypeNode, ///
|
|
37
|
+
statementNode = specificStatementNode, ///
|
|
38
|
+
metaType = MetaType.fromMetaTypeNode(metaTypeNode, context),
|
|
39
|
+
statement = Statement.fromStatementNode(statementNode, context),
|
|
40
|
+
statementVerifiedGivenType = statement.verifyGivenMetaType(metaType, assignments, stated, context);
|
|
41
41
|
|
|
42
42
|
unified = statementVerifiedGivenType;
|
|
43
43
|
|
|
@@ -45,17 +45,17 @@ class StatementWithCombinatorUnifier extends Unifier {
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
unify: (
|
|
48
|
+
generalNodeQuery: metaTypeNodeQuery,
|
|
49
|
+
specificNodeQuery: frameNodeQuery,
|
|
50
|
+
unify: (generalMetaTypeNode, specificFrameNode, assignments, stated, context) => {
|
|
51
51
|
let unified;
|
|
52
52
|
|
|
53
53
|
const { Frame, MetaType } = shim,
|
|
54
|
-
metaTypeNode =
|
|
55
|
-
frameNode =
|
|
56
|
-
metaType = MetaType.fromMetaTypeNode(metaTypeNode,
|
|
57
|
-
frame = Frame.fromFrameNode(frameNode,
|
|
58
|
-
frameVerifiedGivenType = frame.verifyGivenMetaType(metaType, assignments, stated,
|
|
54
|
+
metaTypeNode = generalMetaTypeNode, ///
|
|
55
|
+
frameNode = specificFrameNode, ///
|
|
56
|
+
metaType = MetaType.fromMetaTypeNode(metaTypeNode, context),
|
|
57
|
+
frame = Frame.fromFrameNode(frameNode, context),
|
|
58
|
+
frameVerifiedGivenType = frame.verifyGivenMetaType(metaType, assignments, stated, context);
|
|
59
59
|
|
|
60
60
|
unified = frameVerifiedGivenType;
|
|
61
61
|
|
|
@@ -63,20 +63,20 @@ class StatementWithCombinatorUnifier extends Unifier {
|
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
unify: (
|
|
66
|
+
generalNodeQuery: typeNodeQuery,
|
|
67
|
+
specificNodeQuery: termNodeQuery,
|
|
68
|
+
unify: (generalTypeNode, specificTermNode, assignments, stated, context) => {
|
|
69
69
|
let unified = false;
|
|
70
70
|
|
|
71
71
|
const { Term } = shim,
|
|
72
|
-
typeNode =
|
|
72
|
+
typeNode = generalTypeNode, ///
|
|
73
73
|
typeName = typeNameFromTypeNode(typeNode),
|
|
74
|
-
type =
|
|
74
|
+
type = context.findTypeByTypeName(typeName);
|
|
75
75
|
|
|
76
76
|
if (type !== null) {
|
|
77
|
-
const termNode =
|
|
78
|
-
term = Term.fromTermNode(termNode,
|
|
79
|
-
termVerifiedGivenType = term.verifyGivenType(type,
|
|
77
|
+
const termNode = specificTermNode, ///
|
|
78
|
+
term = Term.fromTermNode(termNode, context),
|
|
79
|
+
termVerifiedGivenType = term.verifyGivenType(type, context);
|
|
80
80
|
|
|
81
81
|
if (termVerifiedGivenType) {
|
|
82
82
|
unified = true;
|
|
@@ -10,12 +10,12 @@ const termNodeQuery = nodeQuery("/term"),
|
|
|
10
10
|
typeNodeQuery = nodeQuery("/type");
|
|
11
11
|
|
|
12
12
|
class TermWithConstructorUnifier extends Unifier {
|
|
13
|
-
unify(constructorTermNode, termNode,
|
|
13
|
+
unify(constructorTermNode, termNode, context) {
|
|
14
14
|
let termUnifiedWithConstructor;
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
nonTerminalNodeUnified = this.unifyNonTerminalNode(
|
|
16
|
+
const generalNonTerminalNode = constructorTermNode, ///
|
|
17
|
+
specificNonTerminalNode = termNode, ///
|
|
18
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, context);
|
|
19
19
|
|
|
20
20
|
termUnifiedWithConstructor = nonTerminalNodeUnified; ///
|
|
21
21
|
|
|
@@ -26,18 +26,18 @@ class TermWithConstructorUnifier extends Unifier {
|
|
|
26
26
|
{
|
|
27
27
|
nodeQueryA: typeNodeQuery,
|
|
28
28
|
nodeQueryB: termNodeQuery,
|
|
29
|
-
unify: (typeNodeB, termNodeB,
|
|
29
|
+
unify: (typeNodeB, termNodeB, context) => {
|
|
30
30
|
let unified = false;
|
|
31
31
|
|
|
32
32
|
const { Term } = shim,
|
|
33
33
|
typeNode = typeNodeB, ///
|
|
34
34
|
typeName = typeNameFromTypeNode(typeNode),
|
|
35
|
-
type =
|
|
35
|
+
type = context.findTypeByTypeName(typeName);
|
|
36
36
|
|
|
37
37
|
if (type !== null) {
|
|
38
38
|
const termNode = termNodeB, ///
|
|
39
|
-
term = Term.fromTermNode(termNode,
|
|
40
|
-
termVerifiedGivenType = term.verifyGivenType(type,
|
|
39
|
+
term = Term.fromTermNode(termNode, context),
|
|
40
|
+
termVerifiedGivenType = term.verifyGivenType(type, context);
|
|
41
41
|
|
|
42
42
|
if (termVerifiedGivenType) {
|
|
43
43
|
unified = true;
|
package/src/unifier.js
CHANGED
|
@@ -7,36 +7,36 @@ import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual } from "./utilities/
|
|
|
7
7
|
const nonTerminalNodeQuery = nodeQuery("/*");
|
|
8
8
|
|
|
9
9
|
export default class Unifier {
|
|
10
|
-
unify(
|
|
10
|
+
unify(generalNode, specificNode, ...remainingArguments) {
|
|
11
11
|
let unified;
|
|
12
12
|
|
|
13
|
-
const nodeUnified = this.unifyNode(
|
|
13
|
+
const nodeUnified = this.unifyNode(generalNode, specificNode, ...remainingArguments);
|
|
14
14
|
|
|
15
15
|
unified = nodeUnified; ///
|
|
16
16
|
|
|
17
17
|
return unified;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
unifyNode(
|
|
20
|
+
unifyNode(generalNode, specificNode, ...remainingArguments) {
|
|
21
21
|
let nodeUnified = false;
|
|
22
22
|
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const generalNodeTerminalNode = generalNode.isTerminalNode(),
|
|
24
|
+
specificNodeTerminalNode = specificNode.isTerminalNode(),
|
|
25
|
+
generalNodeNonTerminalNode = generalNode.isNonTerminalNode(),
|
|
26
|
+
specificNodeNonTerminalNode = specificNode.isNonTerminalNode();
|
|
27
27
|
|
|
28
28
|
if (false) {
|
|
29
29
|
///
|
|
30
|
-
} else if (
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
terminalNodeUnified = this.unifyTerminalNode(
|
|
30
|
+
} else if (generalNodeTerminalNode && specificNodeTerminalNode) {
|
|
31
|
+
const generalTerminalNode = generalNode, ///
|
|
32
|
+
specificTerminalNode = specificNode, ///
|
|
33
|
+
terminalNodeUnified = this.unifyTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments);
|
|
34
34
|
|
|
35
35
|
nodeUnified = terminalNodeUnified; ///
|
|
36
|
-
} else if (
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
nonTerminalNodeUnified = this.unifyNonTerminalNode(
|
|
36
|
+
} else if (generalNodeNonTerminalNode && specificNodeNonTerminalNode) {
|
|
37
|
+
const generalNonTerminalNode = generalNode, ///
|
|
38
|
+
specificNonTerminalNode = specificNode, ///
|
|
39
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments);
|
|
40
40
|
|
|
41
41
|
nodeUnified = nonTerminalNodeUnified; ///
|
|
42
42
|
}
|
|
@@ -44,31 +44,31 @@ export default class Unifier {
|
|
|
44
44
|
return nodeUnified;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
unifyChildNodes(
|
|
47
|
+
unifyChildNodes(generalChildNodes, specificChildNodes, ...remainingArguments) {
|
|
48
48
|
let childNodesUnified = false;
|
|
49
49
|
|
|
50
|
-
const
|
|
51
|
-
|
|
50
|
+
const generalChildNodesLength = generalChildNodes.length,
|
|
51
|
+
specificChildNodesLength = specificChildNodes.length;
|
|
52
52
|
|
|
53
|
-
if (
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
terminalNodeMapsEqual = areTerminalNodeMapsEqual(
|
|
53
|
+
if (generalChildNodesLength === specificChildNodesLength) {
|
|
54
|
+
const specificTerminalNodeMap = terminalNodeMapFromNodes(specificChildNodes),
|
|
55
|
+
generalTerminalNodeMap = terminalNodeMapFromNodes(generalChildNodes),
|
|
56
|
+
terminalNodeMapsEqual = areTerminalNodeMapsEqual(generalTerminalNodeMap, specificTerminalNodeMap);
|
|
57
57
|
|
|
58
58
|
if (terminalNodeMapsEqual) {
|
|
59
59
|
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
60
60
|
|
|
61
61
|
if (lastRemainingArgumentFunction) {
|
|
62
62
|
const index = 0,
|
|
63
|
-
childNodesUnifiedAhead = this.unifyChildNodesAhead(index,
|
|
63
|
+
childNodesUnifiedAhead = this.unifyChildNodesAhead(index, generalChildNodes, specificChildNodes,...remainingArguments);
|
|
64
64
|
|
|
65
65
|
childNodesUnified = childNodesUnifiedAhead; ///
|
|
66
66
|
} else {
|
|
67
|
-
childNodesUnified =
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
nodeUnified = this.unifyNode(
|
|
67
|
+
childNodesUnified = generalChildNodes.every((generalChildNode, index) => {
|
|
68
|
+
const specificChildNode = specificChildNodes[index],
|
|
69
|
+
specificNode = specificChildNode, ///
|
|
70
|
+
generalNode = generalChildNode, ///
|
|
71
|
+
nodeUnified = this.unifyNode(generalNode, specificNode, ...remainingArguments);
|
|
72
72
|
|
|
73
73
|
if (nodeUnified) {
|
|
74
74
|
return true;
|
|
@@ -81,7 +81,7 @@ export default class Unifier {
|
|
|
81
81
|
return childNodesUnified;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
unifyTerminalNode(
|
|
84
|
+
unifyTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments) { ///
|
|
85
85
|
let terminalNodeUnified;
|
|
86
86
|
|
|
87
87
|
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
@@ -100,7 +100,7 @@ export default class Unifier {
|
|
|
100
100
|
return terminalNodeUnified;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
unifyNonTerminalNode(
|
|
103
|
+
unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments) {
|
|
104
104
|
let nonTerminalNodeUnified;
|
|
105
105
|
|
|
106
106
|
let { maps } = this.constructor;
|
|
@@ -108,20 +108,20 @@ export default class Unifier {
|
|
|
108
108
|
maps = [ ///
|
|
109
109
|
...maps,
|
|
110
110
|
{
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
unify: (
|
|
111
|
+
generalNodeQuery: nonTerminalNodeQuery,
|
|
112
|
+
specificNodeQuery: nonTerminalNodeQuery,
|
|
113
|
+
unify: (generalNode, specificNode, ...remainingArguments) => {
|
|
114
114
|
let nonTerminalNodeUnified;
|
|
115
115
|
|
|
116
|
-
const
|
|
117
|
-
|
|
116
|
+
const generalNonTerminalNodeRuleName = generalNonTerminalNode.getRuleName(), ///
|
|
117
|
+
specificNonTerminalNodeBRuleNam = specificNonTerminalNode.getRuleName(); ///
|
|
118
118
|
|
|
119
|
-
if (
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
childNodesUnified = this.unifyChildNodes(
|
|
119
|
+
if (generalNonTerminalNodeRuleName === specificNonTerminalNodeBRuleNam) {
|
|
120
|
+
const generalNonTerminalNodeChildNodes = generalNonTerminalNode.getChildNodes(),
|
|
121
|
+
specificNonTerminalNodeBChildNode = specificNonTerminalNode.getChildNodes(),
|
|
122
|
+
generalChildNodes = generalNonTerminalNodeChildNodes, ///
|
|
123
|
+
specificChildNodes = specificNonTerminalNodeBChildNode, ///
|
|
124
|
+
childNodesUnified = this.unifyChildNodes(generalChildNodes, specificChildNodes, ...remainingArguments);
|
|
125
125
|
|
|
126
126
|
nonTerminalNodeUnified = childNodesUnified; ///
|
|
127
127
|
}
|
|
@@ -134,13 +134,13 @@ export default class Unifier {
|
|
|
134
134
|
let nodeUnified = false;
|
|
135
135
|
|
|
136
136
|
maps.some((map) => {
|
|
137
|
-
const {
|
|
137
|
+
const { generalNodeQuery, specificNodeQuery, unify } = map;
|
|
138
138
|
|
|
139
|
-
const
|
|
140
|
-
|
|
139
|
+
const generalNode = generalNodeQuery(generalNonTerminalNode), ///
|
|
140
|
+
specificNode = specificNodeQuery(specificNonTerminalNode); ///
|
|
141
141
|
|
|
142
|
-
if ((
|
|
143
|
-
nodeUnified = unify(
|
|
142
|
+
if ((generalNode !== null) && (specificNode !== null)) {
|
|
143
|
+
nodeUnified = unify(generalNode, specificNode, ...remainingArguments);
|
|
144
144
|
|
|
145
145
|
return true;
|
|
146
146
|
}
|
|
@@ -151,26 +151,26 @@ export default class Unifier {
|
|
|
151
151
|
return nonTerminalNodeUnified;
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
unifyChildNodesAhead(index,
|
|
154
|
+
unifyChildNodesAhead(index, generalChildNodes, specificChildNodes, ...remainingArguments) {
|
|
155
155
|
let childNodesUnified;
|
|
156
156
|
|
|
157
157
|
const unifyAhead = remainingArguments.pop(), ///
|
|
158
|
-
|
|
158
|
+
generalChildNodesLength = generalChildNodes.length;
|
|
159
159
|
|
|
160
|
-
if (index ===
|
|
160
|
+
if (index === generalChildNodesLength) {
|
|
161
161
|
const unifiedAhead = unifyAhead();
|
|
162
162
|
|
|
163
163
|
childNodesUnified = unifiedAhead; ///
|
|
164
164
|
} else {
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
nodeUnified = this.unifyNode(
|
|
165
|
+
const generalChildNode = generalChildNodes[index],
|
|
166
|
+
specificChildNode = specificChildNodes[index],
|
|
167
|
+
generalNode = generalChildNode, ///
|
|
168
|
+
specificNode = specificChildNode, ///
|
|
169
|
+
nodeUnified = this.unifyNode(generalNode, specificNode, ...remainingArguments, () => {
|
|
170
170
|
remainingArguments.push(unifyAhead); ///
|
|
171
171
|
|
|
172
172
|
const aheadIndex = index + 1,
|
|
173
|
-
childNodesUnifiedAhead = this.unifyChildNodesAhead(aheadIndex,
|
|
173
|
+
childNodesUnifiedAhead = this.unifyChildNodesAhead(aheadIndex, generalChildNodes, specificChildNodes, ...remainingArguments);
|
|
174
174
|
|
|
175
175
|
return childNodesUnifiedAhead;
|
|
176
176
|
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export function assignAssignments(assignments,
|
|
3
|
+
export function assignAssignments(assignments, context) {
|
|
4
4
|
const assignmentsAssigned = assignments.every((assigment) => {
|
|
5
|
-
const assignmentAssigned = assigment.assign(
|
|
5
|
+
const assignmentAssigned = assigment.assign(context);
|
|
6
6
|
|
|
7
7
|
return assignmentAssigned
|
|
8
8
|
});
|