occam-verify-cli 0.0.935 → 0.0.937

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.
Files changed (64) hide show
  1. package/lib/conclusion.js +3 -6
  2. package/lib/consequent.js +3 -6
  3. package/lib/context/local.js +1 -1
  4. package/lib/equality.js +2 -5
  5. package/lib/premise.js +5 -11
  6. package/lib/proofStep.js +3 -6
  7. package/lib/substitution/statementForMetavariable.js +3 -6
  8. package/lib/supposition.js +5 -11
  9. package/lib/unifier/equality.js +37 -107
  10. package/lib/unifier/metaLevel.js +48 -121
  11. package/lib/unifier/statementAgainstCombinator.js +41 -123
  12. package/lib/unifier/termAgainstConstructor.js +29 -103
  13. package/lib/unifier.js +60 -41
  14. package/lib/unify/metavariableAgainstStatement.js +5 -5
  15. package/lib/unify/statementAgainstMetaType.js +10 -4
  16. package/lib/unify/statementAtainstStatement.js +3 -6
  17. package/lib/unify/termAgainstTerm.js +1 -1
  18. package/lib/unify/termAgainstType.js +10 -4
  19. package/lib/utilities/unifier.js +51 -0
  20. package/lib/verifier/metaLevel.js +48 -128
  21. package/lib/verifier/statementAsCombinator.js +48 -128
  22. package/lib/verifier/termAsConstructor.js +42 -112
  23. package/lib/verifier.js +50 -33
  24. package/lib/verify/assertion/contained.js +2 -5
  25. package/lib/verify/assertion/defined.js +2 -5
  26. package/lib/verify/statement/qualified.js +2 -2
  27. package/lib/verify/statement.js +23 -13
  28. package/lib/verify/statementAsCombinator.js +4 -8
  29. package/lib/verify/term.js +5 -5
  30. package/lib/verify/termAsConstructor.js +30 -23
  31. package/package.json +4 -4
  32. package/src/conclusion.js +5 -9
  33. package/src/consequent.js +5 -9
  34. package/src/context/local.js +7 -7
  35. package/src/equality.js +2 -8
  36. package/src/premise.js +10 -18
  37. package/src/proofStep.js +5 -9
  38. package/src/substitution/statementForMetavariable.js +4 -8
  39. package/src/supposition.js +10 -18
  40. package/src/unifier/equality.js +31 -59
  41. package/src/unifier/metaLevel.js +50 -83
  42. package/src/unifier/statementAgainstCombinator.js +33 -83
  43. package/src/unifier/termAgainstConstructor.js +19 -57
  44. package/src/unifier.js +57 -31
  45. package/src/unify/metavariableAgainstStatement.js +5 -3
  46. package/src/unify/statementAgainstMetaType.js +8 -3
  47. package/src/unify/statementAtainstStatement.js +4 -8
  48. package/src/unify/termAgainstTerm.js +1 -1
  49. package/src/unify/termAgainstType.js +7 -3
  50. package/src/verifier/metaLevel.js +37 -81
  51. package/src/verifier/statementAsCombinator.js +39 -82
  52. package/src/verifier/termAsConstructor.js +33 -62
  53. package/src/verifier.js +47 -21
  54. package/src/verify/assertion/contained.js +1 -5
  55. package/src/verify/assertion/defined.js +1 -5
  56. package/src/verify/statement/qualified.js +2 -2
  57. package/src/verify/statement.js +31 -19
  58. package/src/verify/statementAsCombinator.js +3 -11
  59. package/src/verify/term.js +8 -8
  60. package/src/verify/termAsConstructor.js +40 -27
  61. package/lib/unify/argumentAgainstArgument.js +0 -24
  62. package/lib/utilities/terminalNodes.js +0 -51
  63. package/src/unify/argumentAgainstArgument.js +0 -15
  64. /package/src/utilities/{terminalNodes.js → unifier.js} +0 -0
@@ -5,104 +5,71 @@ import Unifier from "../unifier";
5
5
  import unifyVariableAgainstTerm from "../unify/variableAgainstTerm";
6
6
  import unifyMetavariableAgainstStatement from "../unify/metavariableAgainstStatement";
7
7
 
8
- import { unify } from "../unifier";
9
8
  import { nodeQuery } from "../utilities/query";
10
9
 
11
10
  const termNodeQuery = nodeQuery("/term!"),
12
11
  statementNodeQuery = nodeQuery("/statement!"),
13
- nonTerminalNodeQuery = nodeQuery("/*"),
14
12
  termVariableNodeQuery = nodeQuery("/term/variable!"),
15
- statementSubstitutionNodeQuery = nodeQuery("/statement/substitution!"),
16
- statementMetavariableNodeQuery = nodeQuery("/statement/metavariable!");
13
+ substitutionNodeQuery = nodeQuery("/statement/substitution!"),
14
+ metavariableNodeQuery = nodeQuery("/statement/metavariable!");
17
15
 
18
16
  class MetaLevelUnifier extends Unifier {
19
- unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, unifyAhead) {
20
- let nonTerminalNodeUnified;
17
+ unify(nodeA, nodeB, substitutions, localContextA, localContextB) {
18
+ let unified;
21
19
 
22
- const nodeQueryMaps = [
23
- {
24
- nodeQueryA: statementMetavariableNodeQuery,
25
- nodeQueryB: statementNodeQuery,
26
- unify: (nodeA, nodeB, substitutions, localContextA, localContextB, unifyAhead) => {
27
- let nonTerminalNodeUnified;
20
+ const nonTerminalNodeA = nodeA, ///
21
+ nonTerminalNodeB = nodeB, ///
22
+ nonTerminalNodeUnified = this.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, () => {
23
+ const unifiedAhead = true;
28
24
 
29
- const statementNodeA = nonTerminalNodeA, ///
30
- statementNodeB = nodeB, ///
31
- statementMetavariableNodeA = nodeA, ///
32
- statementSubstitutionNodeA = statementSubstitutionNodeQuery(statementNodeA),
33
- metavariableNodeUnifiedAgainstStatementNode =
25
+ return unifiedAhead;
26
+ });
34
27
 
35
- this.unifyStatementMetavariableNodeAgainstStatementNode(statementMetavariableNodeA, statementSubstitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, unifyAhead);
28
+ unified = nonTerminalNodeUnified; ///
36
29
 
37
- nonTerminalNodeUnified = metavariableNodeUnifiedAgainstStatementNode; ///
38
-
39
- return nonTerminalNodeUnified;
40
- }
41
- },
42
- {
43
- nodeQueryA: termVariableNodeQuery,
44
- nodeQueryB: termNodeQuery,
45
- unify: (nodeA, nodeB, substitutions, localContextA, localContextB, unifyAhead) => {
46
- let nonTerminalNodeUnified;
47
-
48
- const termNodeB = nodeB, ///
49
- termVariableNodeA = nodeA, ///
50
- termVariableNodeUnifiedAgainstTermNode =
51
-
52
- this.unifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead);
53
-
54
- nonTerminalNodeUnified = termVariableNodeUnifiedAgainstTermNode; ///
30
+ return unified;
31
+ }
55
32
 
56
- return nonTerminalNodeUnified;
33
+ static maps = [
34
+ {
35
+ nodeQueryA: statementNodeQuery,
36
+ nodeQueryB: statementNodeQuery,
37
+ unify: (statementNodeA, statementNodeB, substitutions, localContextA, localContextB, unifyAhead) => {
38
+ let statementVerifiedAgainstStatement;
39
+
40
+ const metavariableNodeA = metavariableNodeQuery(statementNodeA);
41
+
42
+ if (metavariableNodeA !== null) {
43
+ const substitutionNodeA = substitutionNodeQuery(statementNodeA),
44
+ metavariableUnifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, unifyAhead);
45
+
46
+ statementVerifiedAgainstStatement = metavariableUnifiedAgainstStatement; ///
47
+ } else {
48
+ const nonTerminalNodeA = statementNodeA, ///
49
+ nonTerminalNodeB = statementNodeB, ///
50
+ nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
51
+ nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
52
+ childNodesA = nonTerminalNodeAChildNodes, ///
53
+ childNodesB = nonTerminalNodeBChildNodes, ///
54
+ childNodesVerified = metaLevelUnifier.unifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB, unifyAhead);
55
+
56
+ statementVerifiedAgainstStatement = childNodesVerified; ///
57
57
  }
58
- },
59
- {
60
- nodeQueryA: nonTerminalNodeQuery,
61
- nodeQueryB: nonTerminalNodeQuery,
62
- unify: (nodeA, nodeB, substitutions, localContextA, localContextB, unifyAhead) => {
63
- let nonTerminalNodeUnified;
64
-
65
- const nonTerminalNodeA = nodeA, ///
66
- nonTerminalNodeB = nodeB; ///
67
58
 
68
- nonTerminalNodeUnified =
69
-
70
- super.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, unifyAhead);
71
-
72
- return nonTerminalNodeUnified;
73
- }
59
+ return statementVerifiedAgainstStatement;
74
60
  }
75
- ];
76
-
77
- const nodesUnified = unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, unifyAhead);
78
-
79
- nonTerminalNodeUnified = nodesUnified; ///
80
-
81
- return nonTerminalNodeUnified;
82
- }
83
-
84
- unifyStatementMetavariableNodeAgainstStatementNode(statementMetavariableNodeA, statementSubstitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, unifyAhead) {
85
- let metavariableNodeUnifiedAgainstStatementNode;
86
-
87
- const substitutionNode = statementSubstitutionNodeA, ///
88
- metavariableNodeA = statementMetavariableNodeA, ///
89
- metavariableUnifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, unifyAhead);
90
-
91
- metavariableNodeUnifiedAgainstStatementNode = metavariableUnifiedAgainstStatement; ///
92
-
93
- return metavariableNodeUnifiedAgainstStatementNode;
94
- }
95
-
96
- unifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead) {
97
- let termVariableNodeUnifiedAgainstTermNode;
98
-
99
- const variableNodeA = termVariableNodeA, ///
100
- termUnifiedAgainstVariable = unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead);
101
-
102
- termVariableNodeUnifiedAgainstTermNode = termUnifiedAgainstVariable; ///
103
-
104
- return termVariableNodeUnifiedAgainstTermNode;
105
- }
61
+ },
62
+ {
63
+ nodeQueryA: termVariableNodeQuery,
64
+ nodeQueryB: termNodeQuery,
65
+ unify: (termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead) => {
66
+ const variableNodeA = termVariableNodeA, ///
67
+ variableUnifiedAgainstTerm = unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead);
68
+
69
+ return variableUnifiedAgainstTerm;
70
+ }
71
+ }
72
+ ];
106
73
  }
107
74
 
108
75
  const metaLevelUnifier = new MetaLevelUnifier();
@@ -1,103 +1,53 @@
1
1
  "use strict";
2
2
 
3
- import shim from "../shim";
4
3
  import Unifier from "../unifier";
5
- import unifyArgumentAgainstArgument from "../unify/argumentAgainstArgument";
4
+ import unifyTermAgainstType from "../unify/termAgainstType";
6
5
  import unifyStatementAgainstMetaType from "../unify/statementAgainstMetaType";
7
6
 
8
- import { unify } from "../unifier";
9
7
  import { nodeQuery } from "../utilities/query";
10
8
 
11
- const argumentNodeQuery = nodeQuery("/argument!"),
9
+ const termNodeQuery = nodeQuery("/term!"),
10
+ typeNodeQuery = nodeQuery("/type!"),
12
11
  metaTypeNodeQuery = nodeQuery("/metaType!"),
13
- statementNodeQuery = nodeQuery("/statement!"),
14
- nonTerminalNodeQuery = nodeQuery("/*");
12
+ statementNodeQuery = nodeQuery("/statement!");
15
13
 
16
14
  class StatementAgainstCombinatorUnifier extends Unifier {
17
- unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead) {
18
- let nonTerminalNodeUnified;
15
+ unify(statementNode, combinatorStatementNode, localContext) {
16
+ let statementUnifiedAgainstCombinator;
19
17
 
20
- const nodeQueryMaps = [
21
- {
22
- nodeQueryA: statementNodeQuery,
23
- nodeQueryB: metaTypeNodeQuery,
24
- unify: (nodeA, nodeB, localContext, unifyAhead) => {
25
- let nonTerminalNodeUnified;
18
+ const nonTerminalNodeA = statementNode, ///
19
+ nonTerminalNodeB = combinatorStatementNode, ///
20
+ nonTerminalNodeUnified = this.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, () => {
21
+ const unifiedAhead = true;
26
22
 
27
- const metaTypeNodeB = nodeB, ///
28
- statementNodeA = nodeA, ///
29
- statementUnifiedAgainstMetaType =
23
+ return unifiedAhead;
24
+ });
30
25
 
31
- this.unifyMetaArgumentStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead);
26
+ statementUnifiedAgainstCombinator = nonTerminalNodeUnified; ///
32
27
 
33
- nonTerminalNodeUnified = statementUnifiedAgainstMetaType; ///
28
+ return statementUnifiedAgainstCombinator;
29
+ };
34
30
 
35
- return nonTerminalNodeUnified;
36
- }
37
- },
38
- {
39
- nodeQueryA: argumentNodeQuery,
40
- nodeQueryB: argumentNodeQuery,
41
- unify: (nodeA, nodeB, localContext, unifyAhead) => {
42
- let nonTerminalNodeUnified;
31
+ static maps = [
32
+ {
33
+ nodeQueryA: statementNodeQuery,
34
+ nodeQueryB: metaTypeNodeQuery,
35
+ unify: (statementNodeA, metaTypeNodeB, localContext, unifyAhead) => {
36
+ const statementUnifiedAgainstMetaType = unifyStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead);
43
37
 
44
- const argumentNodeA = nodeA, ///
45
- argumentNodeB = nodeB, ///
46
- argumentNodeUnifiedAgainstArgumentNode =
47
-
48
- this.unifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, unifyAhead);
49
-
50
- nonTerminalNodeUnified = argumentNodeUnifiedAgainstArgumentNode; ///
51
-
52
- return nonTerminalNodeUnified;
53
- }
54
- },
55
- {
56
- nodeQueryA: nonTerminalNodeQuery,
57
- nodeQueryB: nonTerminalNodeQuery,
58
- unify: (nodeA, nodeB, localContext, unifyAhead) => {
59
- let nonTerminalNodeUnified;
60
-
61
- const nonTerminalNodeA = nodeA, ///
62
- nonTerminalNodeB = nodeB; ///
63
-
64
- nonTerminalNodeUnified =
65
-
66
- super.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
67
-
68
- return nonTerminalNodeUnified;
69
- }
38
+ return statementUnifiedAgainstMetaType;
70
39
  }
71
- ];
72
-
73
- const nodesUnified = unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
74
-
75
- nonTerminalNodeUnified = nodesUnified; ///
76
-
77
- return nonTerminalNodeUnified;
78
- }
79
-
80
- unifyMetaArgumentStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead) {
81
- let statementUnifiedAgainstMetaType;
82
-
83
- const { verifyStatement } = shim,
84
- metaTypeNode = metaTypeNodeB, ///
85
- statementNode = statementNodeA; ///
86
-
87
- statementUnifiedAgainstMetaType = unifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, unifyAhead, verifyStatement);
88
-
89
- return statementUnifiedAgainstMetaType;
90
- }
91
-
92
- unifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, unifyAhead) {
93
- let argumentNodeUnifiedAgainstArgumentNode;
94
-
95
- const argumentUnifiedAgainstArgument = unifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, unifyAhead);
96
-
97
- argumentNodeUnifiedAgainstArgumentNode = argumentUnifiedAgainstArgument; ///
98
-
99
- return argumentNodeUnifiedAgainstArgumentNode;
100
- }
40
+ },
41
+ {
42
+ nodeQueryA: termNodeQuery,
43
+ nodeQueryB: typeNodeQuery,
44
+ unify: (termNodeA, typeNodeB, localContext, unifyAhead) => {
45
+ const termUnifiedAgainstType = unifyTermAgainstType(termNodeA, typeNodeB, localContext, unifyAhead);
46
+
47
+ return termUnifiedAgainstType;
48
+ }
49
+ }
50
+ ];
101
51
  }
102
52
 
103
53
  const statementAgainstCombinatorUnifier = new StatementAgainstCombinatorUnifier();
@@ -1,75 +1,37 @@
1
1
  "use strict";
2
2
 
3
- import shim from "../shim";
4
3
  import Unifier from "../unifier";
5
4
  import unifyTermAgainstType from "../unify/termAgainstType";
6
5
 
7
- import { unify } from "../unifier";
8
6
  import { nodeQuery } from "../utilities/query";
9
7
 
10
- const termNodeQuery = nodeQuery("/argument/term!"),
11
- typeNodeQuery = nodeQuery("/argument/type!"),
12
- nonTerminalNodeQuery = nodeQuery("/*");
8
+ const termNodeQuery = nodeQuery("/term"),
9
+ typeNodeQuery = nodeQuery("/type");
13
10
 
14
11
  class TermAgainstConstructorUnifier extends Unifier {
15
- unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead) {
16
- let nonTerminalNodUnified;
12
+ unify(termNode, constructorTermNode, localContext, unifyAhead) {
13
+ let termUnifiedAgainstConstructor;
17
14
 
18
- const nodeQueryMaps = [
19
- {
20
- nodeQueryA: termNodeQuery,
21
- nodeQueryB: typeNodeQuery,
22
- unify: (nodeA, nodeB, localContext, unifyAhead) => {
23
- let nonTerminalNodUnified;
15
+ const nonTerminalNodeA = termNode, ///
16
+ nonTerminalNodeB = constructorTermNode, ///
17
+ nonTerminalNodeUnified = this.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
24
18
 
25
- const termNodeA = nodeA, ///
26
- typeNodeB = nodeB, ///
27
- termNodUnifiedAgainstTypeNode =
19
+ termUnifiedAgainstConstructor = nonTerminalNodeUnified; ///
28
20
 
29
- this.unifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, unifyAhead);
21
+ return termUnifiedAgainstConstructor;
22
+ };
30
23
 
31
- nonTerminalNodUnified = termNodUnifiedAgainstTypeNode; ///
24
+ static maps = [
25
+ {
26
+ nodeQueryA: termNodeQuery,
27
+ nodeQueryB: typeNodeQuery,
28
+ unify: (termNodeA, typeNodeB, localContext, unifyAhead) => {
29
+ const termUnifiedAgainstType = unifyTermAgainstType(termNodeA, typeNodeB, localContext, unifyAhead);
32
30
 
33
- return nonTerminalNodUnified;
34
- }
35
- },
36
- {
37
- nodeQueryA: nonTerminalNodeQuery,
38
- nodeQueryB: nonTerminalNodeQuery,
39
- unify: (nodeA, nodeB, localContext, unifyAhead) => {
40
- let nonTerminalNodUnified;
41
-
42
- const nonTerminalNodeA = nodeA, ///
43
- nonTerminalNodeB = nodeB; ///
44
-
45
- nonTerminalNodUnified =
46
-
47
- super.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
48
-
49
- return nonTerminalNodUnified;
50
- }
31
+ return termUnifiedAgainstType;
51
32
  }
52
- ];
53
-
54
- const nodesVerified = unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
55
-
56
- nonTerminalNodUnified = nodesVerified; ///
57
-
58
- return nonTerminalNodUnified;
59
- }
60
-
61
- unifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, unifyAhead) {
62
- let termNodUnifiedAgainstTypeNode;
63
-
64
- const { verifyTerm } = shim,
65
- termNode = termNodeA, ///
66
- typeNode = typeNodeB, ///
67
- typeUnifiedAgainstTerm = unifyTermAgainstType(termNode, typeNode, localContext, unifyAhead, verifyTerm);
68
-
69
- termNodUnifiedAgainstTypeNode = typeUnifiedAgainstTerm; ///
70
-
71
- return termNodUnifiedAgainstTypeNode;
72
- }
33
+ }
34
+ ];
73
35
  }
74
36
 
75
37
  const termAgainstConstructorUnifier = new TermAgainstConstructorUnifier();
package/src/unifier.js CHANGED
@@ -1,8 +1,21 @@
1
1
  "use strict";
2
2
 
3
- import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual } from "./utilities/terminalNodes";
3
+ import { nodeQuery } from "./utilities/query";
4
+ import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual } from "./utilities/unifier";
5
+
6
+ const nonTerminalNodeQuery = nodeQuery("/*");
4
7
 
5
8
  export default class Unifier {
9
+ unify(nodeA, nodeB, ...remainingArguments) {
10
+ let unified;
11
+
12
+ const nodeUnified = this.unifyNode(nodeA, nodeB, ...remainingArguments);
13
+
14
+ unified = nodeUnified; ///
15
+
16
+ return unified;
17
+ }
18
+
6
19
  unifyNode(nodeA, nodeB, ...remainingArguments) {
7
20
  let nodeUnified = false;
8
21
 
@@ -64,20 +77,52 @@ export default class Unifier {
64
77
  }
65
78
 
66
79
  unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
67
- let nonTerminalNodeUnified = false;
80
+ let nonTerminalNodeUnified;
68
81
 
69
- const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
70
- nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
82
+ let { maps } = this.constructor;
71
83
 
72
- if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
73
- const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
74
- nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
75
- childNodesA = nonTerminalNodeAChildNodes, ///
76
- childNodesB = nonTerminalNodeBChildNodes, ///
77
- childNodesUnified = this.unifyChildNodes(childNodesA, childNodesB, ...remainingArguments);
84
+ maps = [ ///
85
+ ...maps,
86
+ {
87
+ nodeQueryA: nonTerminalNodeQuery,
88
+ nodeQueryB: nonTerminalNodeQuery,
89
+ unify: (nodeA, nobeB, ...remainingArguments) => {
90
+ let nonTerminalNodeUnified;
78
91
 
79
- nonTerminalNodeUnified = childNodesUnified; ///
80
- }
92
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
93
+ nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
94
+
95
+ if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
96
+ const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
97
+ nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
98
+ childNodesA = nonTerminalNodeAChildNodes, ///
99
+ childNodesB = nonTerminalNodeBChildNodes, ///
100
+ childNodesUnified = this.unifyChildNodes(childNodesA, childNodesB, ...remainingArguments);
101
+
102
+ nonTerminalNodeUnified = childNodesUnified; ///
103
+ }
104
+
105
+ return nonTerminalNodeUnified;
106
+ }
107
+ }
108
+ ]
109
+
110
+ let nodeUnified = false;
111
+
112
+ maps.some((map) => {
113
+ const { nodeQueryA, nodeQueryB, unify } = map;
114
+
115
+ const nodeA = nodeQueryA(nonTerminalNodeA), ///
116
+ nodeB = nodeQueryB(nonTerminalNodeB); ///
117
+
118
+ if ((nodeA !== null) && (nodeB !== null)) {
119
+ nodeUnified = unify(nodeA, nodeB, ...remainingArguments);
120
+
121
+ return true;
122
+ }
123
+ });
124
+
125
+ nonTerminalNodeUnified = nodeUnified; ///
81
126
 
82
127
  return nonTerminalNodeUnified;
83
128
  }
@@ -112,22 +157,3 @@ export default class Unifier {
112
157
  return childNodesUnified;
113
158
  }
114
159
  }
115
-
116
- export function unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
117
- let unified = false;
118
-
119
- nodeQueryMaps.some((nodeQueryMap) => {
120
- const { nodeQueryA, nodeQueryB, unify } = nodeQueryMap;
121
-
122
- const nodeA = nodeQueryA(nonTerminalNodeA), ///
123
- nodeB = nodeQueryB(nonTerminalNodeB); ///
124
-
125
- if ((nodeA !== null) && (nodeB !== null)) {
126
- unified = unify(nodeA, nodeB, ...remainingArguments);
127
-
128
- return true;
129
- }
130
- });
131
-
132
- return unified;
133
- }
@@ -4,7 +4,7 @@ import TermForVariableSubstitution from "../substitution/termForVariable";
4
4
  import unifyStatementAgainstStatement from "../unify/statementAtainstStatement";
5
5
  import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
6
6
 
7
- export default function unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, unifyAhead) {
7
+ export default function unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, unifyAhead) {
8
8
  let metavariableUnifiedAgainstStatement = false;
9
9
 
10
10
  const substitution = substitutions.find((substitution) => {
@@ -18,8 +18,9 @@ export default function unifyMetavariableAgainstStatement(metavariableNodeA, sta
18
18
  if (substitution !== null) {
19
19
  const substitutionStatementNode = substitution.getStatementNode();
20
20
 
21
- if (substitutionNode !== null) {
22
- const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionNode(substitutionNode),
21
+ if (substitutionNodeA !== null) {
22
+ const substitutionNode = substitutionNodeA, ///
23
+ termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionNode(substitutionNode),
23
24
  localContext = localContextB, ///
24
25
  substitution = termForVariableSubstitution, ///
25
26
  statementNodeA = substitutionStatementNode, ///
@@ -61,6 +62,7 @@ export default function unifyMetavariableAgainstStatement(metavariableNodeA, sta
61
62
  let unifiedAhead;
62
63
 
63
64
  const statementNode = statementNodeB, ///
65
+ substitutionNode = substitutionNodeA, ///
64
66
  metavariableNode = metavariableNodeA, ///
65
67
  statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeStatementNodeAndSubstitutionNode(metavariableNode, statementNode, substitutionNode),
66
68
  substitution = statementForMetavariableSubstitution; ///
@@ -1,21 +1,26 @@
1
1
  "use strict";
2
2
 
3
+ import shim from "../shim";
4
+
3
5
  import { nodeQuery } from "../utilities/query";
4
6
  import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
5
7
 
6
8
  const metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type!");
7
9
 
8
- export default function unifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, unifyAhead, verifyStatement) {
10
+ export default function unifyStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead) {
9
11
  let statementVerifiedAgainstMetaType = false;
10
12
 
11
- const metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
13
+ const metaTypeNode = metaTypeNodeB, ///
14
+ metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
12
15
  content = metaTypeTerminalNode.getContent();
13
16
 
14
17
  if (content === STATEMENT_META_TYPE_NAME) {
15
18
  let unifiedAhead = false;
16
19
 
17
- const derived = false,
20
+ const { verifyStatement } = shim,
21
+ derived = false,
18
22
  assignments = [],
23
+ statementNode = statementNodeA, ///
19
24
  statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
20
25
 
21
26
  if (statementVerified) {
@@ -19,15 +19,11 @@ export default function unifyStatementAgainstStatement(statementNodeA, statement
19
19
  substitutionsA.push(substitutionA);
20
20
  }
21
21
 
22
- const nonTerminalNodeA = statementNodeA, ///
23
- nonTerminalNodeB = statementNodeB, ///
24
- nonTerminalNodeUnified = metaLevelUnifier.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
25
- const verifiedAhead = true;
22
+ const nodeA = statementNodeA, ///
23
+ nodeB = statementNodeB, ///
24
+ unified = metaLevelUnifier.unify(nodeA, nodeB, substitutionsA, localContextA, localContextB);
26
25
 
27
- return verifiedAhead;
28
- });
29
-
30
- if (nonTerminalNodeUnified) {
26
+ if (unified) {
31
27
  if (!transformed) {
32
28
  const substitutionB = termForVariableSubstitution, ///
33
29
  substitutionsB = [
@@ -6,7 +6,7 @@ export default function unifyTermAgainstTerm(termNodeA, termNodeB, localContext,
6
6
  let termUnifiedAgainstTerm = false;
7
7
 
8
8
  const leftTermNode = termNodeA, ///
9
- rightTermNode = termNodeB, ///
9
+ rightTermNode = termNodeB, ///
10
10
  equivalences = localContext.getEquivalences(),
11
11
  termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, equivalences);
12
12
 
@@ -1,17 +1,21 @@
1
1
  "use strict";
2
2
 
3
+ import shim from "../shim";
4
+
3
5
  import { first } from "../utilities/array";
4
6
 
5
- export default function unifyTermAgainstType(termNode, typeNode, localContext, unifyAhead, verifyTerm) {
7
+ export default function unifyTermAgainstType(termNodeA, typeNodeB, localContext, unifyAhead) {
6
8
  let termUnifiedAgainstType;
7
9
 
8
- const terms = [],
9
- termVerified = verifyTerm(termNode, terms, localContext, () => {
10
+ const { verifyTerm } = shim,
11
+ terms = [],
12
+ termVerified = verifyTerm(termNodeA, terms, localContext, () => {
10
13
  let unifiedAhead = false;
11
14
 
12
15
  const firstTerm = first(terms),
13
16
  term = firstTerm, ///
14
17
  termType = term.getType(),
18
+ typeNode = typeNodeB, ///
15
19
  type = localContext.findTypeByTypeNode(typeNode),
16
20
  termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
17
21