occam-verify-cli 0.0.932 → 0.0.933

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 (103) hide show
  1. package/lib/conclusion.js +4 -4
  2. package/lib/consequent.js +4 -4
  3. package/lib/context/local.js +181 -3
  4. package/lib/equality.js +4 -4
  5. package/lib/metaLemma.js +4 -4
  6. package/lib/metatheorem.js +4 -4
  7. package/lib/premise.js +6 -6
  8. package/lib/substitution/statementForMetavariable.js +2 -2
  9. package/lib/supposition.js +6 -6
  10. package/lib/unifier/equality.js +216 -0
  11. package/lib/unifier/metaLevel.js +231 -0
  12. package/lib/unifier/statementAgainstCombinator.js +231 -0
  13. package/lib/unifier/termAgainstConstructor.js +211 -0
  14. package/lib/unifier.js +201 -0
  15. package/lib/unify/argumentAgainstArgument.js +24 -0
  16. package/lib/unify/metavariableAgainstStatement.js +66 -0
  17. package/lib/unify/statementAgainstMetaType.js +28 -0
  18. package/lib/unify/statementAtainstStatement.js +52 -0
  19. package/lib/unify/termAgainstTerm.js +22 -0
  20. package/lib/unify/termAgainstType.js +26 -0
  21. package/lib/unify/variableAgainstTerm.js +70 -0
  22. package/lib/verifier/metaLevel.js +236 -0
  23. package/lib/verifier/statementAsCombinator.js +236 -0
  24. package/lib/verifier/termAsConstructor.js +219 -0
  25. package/lib/verifier.js +182 -0
  26. package/lib/verify/assertion/contained.js +2 -2
  27. package/lib/verify/assertion/defined.js +2 -2
  28. package/lib/verify/declaration.js +3 -3
  29. package/lib/verify/frame.js +9 -12
  30. package/lib/verify/judgement.js +2 -2
  31. package/lib/verify/statement/qualified.js +6 -3
  32. package/lib/verify/statement/unqualified.js +2 -1
  33. package/lib/verify/statement.js +26 -19
  34. package/lib/verify/statementAsCombinator.js +2 -2
  35. package/lib/verify/term.js +6 -6
  36. package/lib/verify/termAsConstructor.js +2 -2
  37. package/package.json +2 -2
  38. package/src/conclusion.js +3 -3
  39. package/src/consequent.js +3 -3
  40. package/src/context/local.js +60 -3
  41. package/src/equality.js +3 -3
  42. package/src/metaLemma.js +1 -1
  43. package/src/metatheorem.js +1 -1
  44. package/src/premise.js +5 -5
  45. package/src/substitution/statementForMetavariable.js +2 -2
  46. package/src/supposition.js +5 -5
  47. package/src/unifier/equality.js +84 -0
  48. package/src/unifier/metaLevel.js +109 -0
  49. package/src/unifier/statementAgainstCombinator.js +104 -0
  50. package/src/unifier/termAgainstConstructor.js +76 -0
  51. package/src/unifier.js +133 -0
  52. package/src/unify/argumentAgainstArgument.js +15 -0
  53. package/src/{verify → unify}/metavariableAgainstStatement.js +18 -18
  54. package/src/{verify → unify}/statementAgainstMetaType.js +4 -4
  55. package/src/{verify → unify}/statementAtainstStatement.js +7 -7
  56. package/src/{verify → unify}/termAgainstTerm.js +5 -5
  57. package/src/{verify → unify}/termAgainstType.js +7 -7
  58. package/src/{verify → unify}/variableAgainstTerm.js +6 -6
  59. package/src/verifier/{node/metaLevel.js → metaLevel.js} +14 -14
  60. package/src/verifier/{node/statementAsCombinator.js → statementAsCombinator.js} +14 -14
  61. package/src/verifier/{node/termAsConstructor.js → termAsConstructor.js} +12 -12
  62. package/src/{verifier/node.js → verifier.js} +19 -1
  63. package/src/verify/assertion/contained.js +2 -2
  64. package/src/verify/assertion/defined.js +2 -2
  65. package/src/verify/declaration.js +3 -3
  66. package/src/verify/frame.js +10 -13
  67. package/src/verify/judgement.js +1 -1
  68. package/src/verify/statement/qualified.js +12 -3
  69. package/src/verify/statement/unqualified.js +2 -1
  70. package/src/verify/statement.js +30 -25
  71. package/src/verify/statementAsCombinator.js +2 -2
  72. package/src/verify/term.js +6 -6
  73. package/src/verify/termAsConstructor.js +2 -2
  74. package/lib/mixins/context.js +0 -135
  75. package/lib/mixins/nodesVerifier/intrinsiclevel.js +0 -59
  76. package/lib/mixins/nodesVerifier/metaLevel.js +0 -40
  77. package/lib/utilities/verifier.js +0 -80
  78. package/lib/verifier/node/metaLevel.js +0 -201
  79. package/lib/verifier/node/statementAsCombinator.js +0 -201
  80. package/lib/verifier/node/termAsConstructor.js +0 -184
  81. package/lib/verifier/node.js +0 -157
  82. package/lib/verifier/nodes/equality.js +0 -176
  83. package/lib/verifier/nodes/metaLevel.js +0 -191
  84. package/lib/verifier/nodes/statementAgainstCombinator.js +0 -191
  85. package/lib/verifier/nodes/termAgainstConstructor.js +0 -171
  86. package/lib/verifier/nodes.js +0 -175
  87. package/lib/verify/argumentAgainstArgument.js +0 -24
  88. package/lib/verify/metavariableAgainstStatement.js +0 -66
  89. package/lib/verify/statementAgainstMetaType.js +0 -28
  90. package/lib/verify/statementAtainstStatement.js +0 -52
  91. package/lib/verify/termAgainstTerm.js +0 -22
  92. package/lib/verify/termAgainstType.js +0 -26
  93. package/lib/verify/variableAgainstTerm.js +0 -70
  94. package/src/mixins/context.js +0 -96
  95. package/src/mixins/nodesVerifier/intrinsiclevel.js +0 -73
  96. package/src/mixins/nodesVerifier/metaLevel.js +0 -39
  97. package/src/utilities/verifier.js +0 -38
  98. package/src/verifier/nodes/equality.js +0 -84
  99. package/src/verifier/nodes/metaLevel.js +0 -109
  100. package/src/verifier/nodes/statementAgainstCombinator.js +0 -105
  101. package/src/verifier/nodes/termAgainstConstructor.js +0 -76
  102. package/src/verifier/nodes.js +0 -114
  103. package/src/verify/argumentAgainstArgument.js +0 -15
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ import Unifier from "../unifier";
4
+ import unifyVariableAgainstTerm from "../unify/variableAgainstTerm";
5
+ import unifyMetavariableAgainstStatement from "../unify/metavariableAgainstStatement";
6
+
7
+ import { unify } from "../unifier";
8
+ import { nodeQuery } from "../utilities/query";
9
+
10
+ const termNodeQuery = nodeQuery("/term!"),
11
+ statementNodeQuery = nodeQuery("/statement!"),
12
+ nonTerminalNodeQuery = nodeQuery("/*"),
13
+ termVariableNodeQuery = nodeQuery("/term/variable!"),
14
+ statementSubstitutionNodeQuery = nodeQuery("/statement/substitution!"),
15
+ statementMetavariableNodeQuery = nodeQuery("/statement/metavariable!");
16
+
17
+ class MetaLevelUnifier extends Unifier {
18
+ unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, unifyAhead) {
19
+ let nonTerminalNodeUnified;
20
+
21
+ const nodeQueryMaps = [
22
+ {
23
+ nodeQueryA: statementMetavariableNodeQuery,
24
+ nodeQueryB: statementNodeQuery,
25
+ unify: (nodeA, nodeB, substitutions, localContextA, localContextB, unifyAhead) => {
26
+ let nonTerminalNodeUnified;
27
+
28
+ const statementNodeA = nonTerminalNodeA, ///
29
+ statementNodeB = nodeB, ///
30
+ statementMetavariableNodeA = nodeA, ///
31
+ statementSubstitutionNodeA = statementSubstitutionNodeQuery(statementNodeA),
32
+ metavariableNodeUnifiedAgainstStatementNode =
33
+
34
+ this.unifyStatementMetavariableNodeAgainstStatementNode(statementMetavariableNodeA, statementSubstitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, unifyAhead);
35
+
36
+ nonTerminalNodeUnified = metavariableNodeUnifiedAgainstStatementNode; ///
37
+
38
+ return nonTerminalNodeUnified;
39
+ }
40
+ },
41
+ {
42
+ nodeQueryA: termVariableNodeQuery,
43
+ nodeQueryB: termNodeQuery,
44
+ unify: (nodeA, nodeB, substitutions, localContextA, localContextB, unifyAhead) => {
45
+ let nonTerminalNodeUnified;
46
+
47
+ const termNodeB = nodeB, ///
48
+ termVariableNodeA = nodeA, ///
49
+ termVariableNodeUnifiedAgainstTermNode =
50
+
51
+ this.unifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead);
52
+
53
+ nonTerminalNodeUnified = termVariableNodeUnifiedAgainstTermNode; ///
54
+
55
+ return nonTerminalNodeUnified;
56
+ }
57
+ },
58
+ {
59
+ nodeQueryA: nonTerminalNodeQuery,
60
+ nodeQueryB: nonTerminalNodeQuery,
61
+ unify: (nodeA, nodeB, substitutions, localContextA, localContextB, unifyAhead) => {
62
+ let nonTerminalNodeUnified;
63
+
64
+ const nonTerminalNodeA = nodeA, ///
65
+ nonTerminalNodeB = nodeB; ///
66
+
67
+ nonTerminalNodeUnified =
68
+
69
+ super.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, unifyAhead);
70
+
71
+ return nonTerminalNodeUnified;
72
+ }
73
+ }
74
+ ];
75
+
76
+ const nodesUnified = unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, unifyAhead);
77
+
78
+ nonTerminalNodeUnified = nodesUnified; ///
79
+
80
+ return nonTerminalNodeUnified;
81
+ }
82
+
83
+ unifyStatementMetavariableNodeAgainstStatementNode(statementMetavariableNodeA, statementSubstitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, unifyAhead) {
84
+ let metavariableNodeUnifiedAgainstStatementNode;
85
+
86
+ const substitutionNode = statementSubstitutionNodeA, ///
87
+ metavariableNodeA = statementMetavariableNodeA, ///
88
+ metavariableUnifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, unifyAhead);
89
+
90
+ metavariableNodeUnifiedAgainstStatementNode = metavariableUnifiedAgainstStatement; ///
91
+
92
+ return metavariableNodeUnifiedAgainstStatementNode;
93
+ }
94
+
95
+ unifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead) {
96
+ let termVariableNodeUnifiedAgainstTermNode;
97
+
98
+ const variableNodeA = termVariableNodeA, ///
99
+ termUnifiedAgainstVariable = unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB, unifyAhead);
100
+
101
+ termVariableNodeUnifiedAgainstTermNode = termUnifiedAgainstVariable; ///
102
+
103
+ return termVariableNodeUnifiedAgainstTermNode;
104
+ }
105
+ }
106
+
107
+ const metaLevelUnifier = new MetaLevelUnifier();
108
+
109
+ export default metaLevelUnifier;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ import Unifier from "../unifier";
4
+ import unifyArgumentAgainstArgument from "../unify/argumentAgainstArgument";
5
+ import unifyStatementAgainstMetaType from "../unify/statementAgainstMetaType";
6
+
7
+ import { unify } from "../unifier";
8
+ import { nodeQuery } from "../utilities/query";
9
+
10
+ const argumentNodeQuery = nodeQuery("/argument!"),
11
+ metaTypeNodeQuery = nodeQuery("/metaType!"),
12
+ statementNodeQuery = nodeQuery("/statement!"),
13
+ nonTerminalNodeQuery = nodeQuery("/*");
14
+
15
+ class StatementAgainstCombinatorUnifier extends Unifier {
16
+ unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead) {
17
+ let nonTerminalNodeUnified;
18
+
19
+ const nodeQueryMaps = [
20
+ {
21
+ nodeQueryA: statementNodeQuery,
22
+ nodeQueryB: metaTypeNodeQuery,
23
+ unify: (nodeA, nodeB, localContext, unifyAhead) => {
24
+ let nonTerminalNodeUnified;
25
+
26
+ const metaTypeNodeB = nodeB, ///
27
+ statementNodeA = nodeA, ///
28
+ statementUnifiedAgainstMetaType =
29
+
30
+ this.unifyMetaArgumentStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead);
31
+
32
+ nonTerminalNodeUnified = statementUnifiedAgainstMetaType; ///
33
+
34
+ return nonTerminalNodeUnified;
35
+ }
36
+ },
37
+ {
38
+ nodeQueryA: argumentNodeQuery,
39
+ nodeQueryB: argumentNodeQuery,
40
+ unify: (nodeA, nodeB, localContext, unifyAhead) => {
41
+ let nonTerminalNodeUnified;
42
+
43
+ const argumentNodeA = nodeA, ///
44
+ argumentNodeB = nodeB, ///
45
+ argumentNodeUnifiedAgainstArgumentNode =
46
+
47
+ this.unifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, unifyAhead);
48
+
49
+ nonTerminalNodeUnified = argumentNodeUnifiedAgainstArgumentNode; ///
50
+
51
+ return nonTerminalNodeUnified;
52
+ }
53
+ },
54
+ {
55
+ nodeQueryA: nonTerminalNodeQuery,
56
+ nodeQueryB: nonTerminalNodeQuery,
57
+ unify: (nodeA, nodeB, localContext, unifyAhead) => {
58
+ let nonTerminalNodeUnified;
59
+
60
+ const nonTerminalNodeA = nodeA, ///
61
+ nonTerminalNodeB = nodeB; ///
62
+
63
+ nonTerminalNodeUnified =
64
+
65
+ super.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
66
+
67
+ return nonTerminalNodeUnified;
68
+ }
69
+ }
70
+ ];
71
+
72
+ const nodesUnified = unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
73
+
74
+ nonTerminalNodeUnified = nodesUnified; ///
75
+
76
+ return nonTerminalNodeUnified;
77
+ }
78
+
79
+ unifyMetaArgumentStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead) {
80
+ let statementUnifiedAgainstMetaType;
81
+
82
+ const { verifyStatement } = this,
83
+ metaTypeNode = metaTypeNodeB, ///
84
+ statementNode = statementNodeA; ///
85
+
86
+ statementUnifiedAgainstMetaType = unifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, unifyAhead, verifyStatement);
87
+
88
+ return statementUnifiedAgainstMetaType;
89
+ }
90
+
91
+ unifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, unifyAhead) {
92
+ let argumentNodeUnifiedAgainstArgumentNode;
93
+
94
+ const argumentUnifiedAgainstArgument = unifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, unifyAhead);
95
+
96
+ argumentNodeUnifiedAgainstArgumentNode = argumentUnifiedAgainstArgument; ///
97
+
98
+ return argumentNodeUnifiedAgainstArgumentNode;
99
+ }
100
+ }
101
+
102
+ const statementAgainstCombinatorUnifier = new StatementAgainstCombinatorUnifier();
103
+
104
+ export default statementAgainstCombinatorUnifier;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ import Unifier from "../unifier";
4
+ import unifyTermAgainstType from "../unify/termAgainstType";
5
+
6
+ import { unify } from "../unifier";
7
+ import { nodeQuery } from "../utilities/query";
8
+
9
+ const termNodeQuery = nodeQuery("/argument/term!"),
10
+ typeNodeQuery = nodeQuery("/argument/type!"),
11
+ nonTerminalNodeQuery = nodeQuery("/*");
12
+
13
+ class TermAgainstConstructorUnifier extends Unifier {
14
+ unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead) {
15
+ let nonTerminalNodUnified;
16
+
17
+ const nodeQueryMaps = [
18
+ {
19
+ nodeQueryA: termNodeQuery,
20
+ nodeQueryB: typeNodeQuery,
21
+ unify: (nodeA, nodeB, localContext, unifyAhead) => {
22
+ let nonTerminalNodUnified;
23
+
24
+ const termNodeA = nodeA, ///
25
+ typeNodeB = nodeB, ///
26
+ termNodUnifiedAgainstTypeNode =
27
+
28
+ this.unifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, unifyAhead);
29
+
30
+ nonTerminalNodUnified = termNodUnifiedAgainstTypeNode; ///
31
+
32
+ return nonTerminalNodUnified;
33
+ }
34
+ },
35
+ {
36
+ nodeQueryA: nonTerminalNodeQuery,
37
+ nodeQueryB: nonTerminalNodeQuery,
38
+ unify: (nodeA, nodeB, localContext, unifyAhead) => {
39
+ let nonTerminalNodUnified;
40
+
41
+ const nonTerminalNodeA = nodeA, ///
42
+ nonTerminalNodeB = nodeB; ///
43
+
44
+ nonTerminalNodUnified =
45
+
46
+ super.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
47
+
48
+ return nonTerminalNodUnified;
49
+ }
50
+ }
51
+ ];
52
+
53
+ const nodesVerified = unify(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
54
+
55
+ nonTerminalNodUnified = nodesVerified; ///
56
+
57
+ return nonTerminalNodUnified;
58
+ }
59
+
60
+ unifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, unifyAhead) {
61
+ let termNodUnifiedAgainstTypeNode;
62
+
63
+ const { verifyTerm } = this,
64
+ termNode = termNodeA, ///
65
+ typeNode = typeNodeB, ///
66
+ typeUnifiedAgainstTerm = unifyTermAgainstType(termNode, typeNode, localContext, unifyAhead, verifyTerm);
67
+
68
+ termNodUnifiedAgainstTypeNode = typeUnifiedAgainstTerm; ///
69
+
70
+ return termNodUnifiedAgainstTypeNode;
71
+ }
72
+ }
73
+
74
+ const termAgainstConstructorUnifier = new TermAgainstConstructorUnifier();
75
+
76
+ export default termAgainstConstructorUnifier;
package/src/unifier.js ADDED
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual } from "./utilities/terminalNodes";
4
+
5
+ export default class Unifier {
6
+ unifyNode(nodeA, nodeB, ...remainingArguments) {
7
+ let nodeUnified = false;
8
+
9
+ const nodeATerminalNode = nodeA.isTerminalNode(),
10
+ nodeBTerminalNode = nodeB.isTerminalNode(),
11
+ nodeANonTerminalNode = nodeA.isNonTerminalNode(),
12
+ nodeBNonTerminalNode = nodeB.isNonTerminalNode();
13
+
14
+ if (false) {
15
+ ///
16
+ } else if (nodeATerminalNode && nodeBTerminalNode) {
17
+ const terminalNodeA = nodeA, ///
18
+ terminalNodeB = nodeB, ///
19
+ terminalNodeUnified = this.unifyTerminalNode(terminalNodeA, terminalNodeB, ...remainingArguments);
20
+
21
+ nodeUnified = terminalNodeUnified; ///
22
+ } else if (nodeANonTerminalNode && nodeBNonTerminalNode) {
23
+ const nonTerminalNodeA = nodeA, ///
24
+ nonTerminalNodeB = nodeB, ///
25
+ nonTerminalNodeUnified = this.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments);
26
+
27
+ nodeUnified = nonTerminalNodeUnified; ///
28
+ }
29
+
30
+ return nodeUnified;
31
+ }
32
+
33
+ unifyChildNodes(childNodesA, childNodesB, ...remainingArguments) {
34
+ let childNodesUnified = false;
35
+
36
+ const childNodesALength = childNodesA.length,
37
+ childNodesBLength = childNodesB.length;
38
+
39
+ if (childNodesALength === childNodesBLength) {
40
+ const childTerminalNodeMapA = terminalNodeMapFromNodes(childNodesA),
41
+ childTerminalNodeMapB = terminalNodeMapFromNodes(childNodesB),
42
+ terminalNodeMapsEqual = areTerminalNodeMapsEqual(childTerminalNodeMapA, childTerminalNodeMapB);
43
+
44
+ if (terminalNodeMapsEqual) {
45
+ const index = 0,
46
+ childNodesVerifyAhead = this.unifyChildNodesAhead(index, childNodesA, childNodesB, ...remainingArguments);
47
+
48
+ childNodesUnified = childNodesVerifyAhead; ///
49
+ }
50
+ }
51
+
52
+ return childNodesUnified;
53
+ }
54
+
55
+ unifyTerminalNode(terminalNodeA, terminalNodeB, ...remainingArguments) { ///
56
+ let terminalNodeUnified;
57
+
58
+ const unifyAhead = remainingArguments.pop(),
59
+ unifyiedAhead = unifyAhead();
60
+
61
+ terminalNodeUnified = unifyiedAhead; ///
62
+
63
+ return terminalNodeUnified;
64
+ }
65
+
66
+ unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
67
+ let nonTerminalNodeUnified = false;
68
+
69
+ const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
70
+ nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
71
+
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);
78
+
79
+ nonTerminalNodeUnified = childNodesUnified; ///
80
+ }
81
+
82
+ return nonTerminalNodeUnified;
83
+ }
84
+
85
+ unifyChildNodesAhead(index, childNodesA, childNodesB, ...remainingArguments) {
86
+ let childNodesUnified;
87
+
88
+ const unifyAhead = remainingArguments.pop(), ///
89
+ childNodesALength = childNodesA.length;
90
+
91
+ if (index === childNodesALength) {
92
+ const unifyiedAhead = unifyAhead();
93
+
94
+ childNodesUnified = unifyiedAhead; ///
95
+ } else {
96
+ const childNodeA = childNodesA[index],
97
+ childNodeB = childNodesB[index],
98
+ nodeA = childNodeA, ///
99
+ nodeB = childNodeB, ///
100
+ nodeUnified = this.unifyNode(nodeA, nodeB, ...remainingArguments, () => {
101
+ remainingArguments.push(unifyAhead); ///
102
+
103
+ const aheadIndex = index + 1,
104
+ childNodesVerifyAhead = this.unifyChildNodesAhead(aheadIndex, childNodesA, childNodesB, ...remainingArguments);
105
+
106
+ return childNodesVerifyAhead;
107
+ });
108
+
109
+ childNodesUnified = nodeUnified; ///
110
+ }
111
+
112
+ return childNodesUnified;
113
+ }
114
+ }
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
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ import termAgainstConstructorUnifier from "../unifier/termAgainstConstructor";
4
+
5
+ export default function unifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, unifyAhead) {
6
+ let argumentUnifiedAgainstArgument;
7
+
8
+ const nonTerminalNodeA = argumentNodeA, ///
9
+ nonTerminalNodeB = argumentNodeB, ///
10
+ nonTerminalNodeVerified = termAgainstConstructorUnifier.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, unifyAhead);
11
+
12
+ argumentUnifiedAgainstArgument = nonTerminalNodeVerified; ///
13
+
14
+ return argumentUnifiedAgainstArgument;
15
+ }
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  import TermForVariableSubstitution from "../substitution/termForVariable";
4
- import verifyStatementAgainstStatement from "../verify/statementAtainstStatement";
4
+ import unifyStatementAgainstStatement from "../unify/statementAtainstStatement";
5
5
  import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
6
6
 
7
- export default function verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead) {
8
- let metavariableVerifiedAgainstStatement = false;
7
+ export default function unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, unifyAhead) {
8
+ let metavariableUnifiedAgainstStatement = false;
9
9
 
10
10
  const substitution = substitutions.find((substitution) => {
11
11
  const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNodeA);
@@ -23,12 +23,12 @@ export default function verifyMetavariableAgainstStatement(metavariableNodeA, st
23
23
  localContext = localContextB, ///
24
24
  substitution = termForVariableSubstitution, ///
25
25
  statementNodeA = substitutionStatementNode, ///
26
- statementVerifiedAgainstStatement = verifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
26
+ statementUnifiedAgainstStatement = unifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
27
27
 
28
- if (statementVerifiedAgainstStatement) {
29
- const verifiedAhead = verifyAhead();
28
+ if (statementUnifiedAgainstStatement) {
29
+ const unifiedAhead = unifyAhead();
30
30
 
31
- metavariableVerifiedAgainstStatement = verifiedAhead; ///
31
+ metavariableUnifiedAgainstStatement = unifiedAhead; ///
32
32
  }
33
33
  } else {
34
34
  const substitutionSubstitution = substitution.getSubstitution();
@@ -40,25 +40,25 @@ export default function verifyMetavariableAgainstStatement(metavariableNodeA, st
40
40
 
41
41
  const localContext = localContextB, ///
42
42
  substitution = substitutionSubstitution,
43
- statementVerifiedAgainstStatement = verifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
43
+ statementUnifiedAgainstStatement = unifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
44
44
 
45
- if (statementVerifiedAgainstStatement) {
46
- const verifiedAhead = verifyAhead();
45
+ if (statementUnifiedAgainstStatement) {
46
+ const unifiedAhead = unifyAhead();
47
47
 
48
- metavariableVerifiedAgainstStatement = verifiedAhead; ///
48
+ metavariableUnifiedAgainstStatement = unifiedAhead; ///
49
49
  }
50
50
  } else {
51
51
  const substitutionMatchesStatementNodeB = substitution.matchStatementNode(statementNodeB);
52
52
 
53
53
  if (substitutionMatchesStatementNodeB) {
54
- const verifiedAhead = verifyAhead();
54
+ const unifiedAhead = unifyAhead();
55
55
 
56
- metavariableVerifiedAgainstStatement = verifiedAhead; ///
56
+ metavariableUnifiedAgainstStatement = unifiedAhead; ///
57
57
  }
58
58
  }
59
59
  }
60
60
  } else {
61
- let verifiedAhead;
61
+ let unifiedAhead;
62
62
 
63
63
  const statementNode = statementNodeB, ///
64
64
  metavariableNode = metavariableNodeA, ///
@@ -67,14 +67,14 @@ export default function verifyMetavariableAgainstStatement(metavariableNodeA, st
67
67
 
68
68
  substitutions.push(substitution);
69
69
 
70
- verifiedAhead = verifyAhead();
70
+ unifiedAhead = unifyAhead();
71
71
 
72
- if (!verifiedAhead) {
72
+ if (!unifiedAhead) {
73
73
  substitutions.pop();
74
74
  }
75
75
 
76
- metavariableVerifiedAgainstStatement = verifiedAhead; ///
76
+ metavariableUnifiedAgainstStatement = unifiedAhead; ///
77
77
  }
78
78
 
79
- return metavariableVerifiedAgainstStatement;
79
+ return metavariableUnifiedAgainstStatement;
80
80
  }
@@ -5,24 +5,24 @@ import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
5
5
 
6
6
  const metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type!");
7
7
 
8
- export default function verifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, verifyAhead, verifyStatement) {
8
+ export default function unifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, unifyAhead, verifyStatement) {
9
9
  let statementVerifiedAgainstMetaType = false;
10
10
 
11
11
  const metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
12
12
  content = metaTypeTerminalNode.getContent();
13
13
 
14
14
  if (content === STATEMENT_META_TYPE_NAME) {
15
- let verifiedAhead = false;
15
+ let unifiedAhead = false;
16
16
 
17
17
  const derived = false,
18
18
  assignments = [],
19
19
  statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
20
20
 
21
21
  if (statementVerified) {
22
- verifiedAhead = verifyAhead();
22
+ unifiedAhead = unifyAhead();
23
23
  }
24
24
 
25
- statementVerifiedAgainstMetaType = verifiedAhead; ///
25
+ statementVerifiedAgainstMetaType = unifiedAhead; ///
26
26
  }
27
27
 
28
28
  return statementVerifiedAgainstMetaType;
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
 
3
- import metaLevelNodesVerifier from "../verifier/nodes/metaLevel";
3
+ import metaLevelUnifier from "../unifier/metaLevel";
4
4
  import TermForVariableSubstitution from "../substitution/termForVariable";
5
5
 
6
6
  import { push } from "../utilities/array";
7
7
 
8
- export default function verifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
9
- let statementVerifiedAgainstStatement = false;
8
+ export default function unifyStatementAgainstStatement(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
9
+ let statementUnifiedAgainstStatement = false;
10
10
 
11
11
  const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions),
12
12
  transformed = termForVariableSubstitution.isTransformed(substitution);
@@ -21,13 +21,13 @@ export default function verifyStatementAgainstStatement(statementNodeA, statemen
21
21
 
22
22
  const nonTerminalNodeA = statementNodeA, ///
23
23
  nonTerminalNodeB = statementNodeB, ///
24
- nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
24
+ nonTerminalNodeUnified = metaLevelUnifier.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
25
25
  const verifiedAhead = true;
26
26
 
27
27
  return verifiedAhead;
28
28
  });
29
29
 
30
- if (nonTerminalNodeVerified) {
30
+ if (nonTerminalNodeUnified) {
31
31
  if (!transformed) {
32
32
  const substitutionB = termForVariableSubstitution, ///
33
33
  substitutionsB = [
@@ -39,10 +39,10 @@ export default function verifyStatementAgainstStatement(statementNodeA, statemen
39
39
  push(substitutions, substitutionsA);
40
40
  }
41
41
 
42
- statementVerifiedAgainstStatement = true;
42
+ statementUnifiedAgainstStatement = true;
43
43
  }
44
44
 
45
- return statementVerifiedAgainstStatement;
45
+ return statementUnifiedAgainstStatement;
46
46
  }
47
47
 
48
48
  function transformSubstitutions(substitutionsA, substitutionsB) {
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { areTermNodesEqual } from "../utilities/equivalences";
4
4
 
5
- export default function verifyTermAgainstTerm(termNodeA, termNodeB, localContext, verifyAhead) {
6
- let termVerifiedAgainstTerm = false;
5
+ export default function unifyTermAgainstTerm(termNodeA, termNodeB, localContext, unifyAhead) {
6
+ let termUnifiedAgainstTerm = false;
7
7
 
8
8
  const leftTermNode = termNodeA, ///
9
9
  rightTermNode = termNodeB, ///
@@ -11,10 +11,10 @@ export default function verifyTermAgainstTerm(termNodeA, termNodeB, localContext
11
11
  termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, equivalences);
12
12
 
13
13
  if (termNodesEqual) {
14
- const verifiedAhead = verifyAhead();
14
+ const unifiedAhead = unifyAhead();
15
15
 
16
- termVerifiedAgainstTerm = verifiedAhead; ///
16
+ termUnifiedAgainstTerm = unifiedAhead; ///
17
17
  }
18
18
 
19
- return termVerifiedAgainstTerm;
19
+ return termUnifiedAgainstTerm;
20
20
  }
@@ -2,12 +2,12 @@
2
2
 
3
3
  import { first } from "../utilities/array";
4
4
 
5
- export default function verifyTermAgainstType(termNode, typeNode, localContext, verifyAhead, verifyTerm) {
6
- let termVerifiedAgainstType;
5
+ export default function unifyTermAgainstType(termNode, typeNode, localContext, unifyAhead, verifyTerm) {
6
+ let termUnifiedAgainstType;
7
7
 
8
8
  const terms = [],
9
9
  termVerified = verifyTerm(termNode, terms, localContext, () => {
10
- let verifiedAhead = false;
10
+ let unifiedAhead = false;
11
11
 
12
12
  const firstTerm = first(terms),
13
13
  term = firstTerm, ///
@@ -16,13 +16,13 @@ export default function verifyTermAgainstType(termNode, typeNode, localContext,
16
16
  termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
17
17
 
18
18
  if (termTypeEqualToOrSubTypeOfType) {
19
- verifiedAhead = verifyAhead();
19
+ unifiedAhead = unifyAhead();
20
20
  }
21
21
 
22
- return verifiedAhead;
22
+ return unifiedAhead;
23
23
  });
24
24
 
25
- termVerifiedAgainstType = termVerified; ///
25
+ termUnifiedAgainstType = termVerified; ///
26
26
 
27
- return termVerifiedAgainstType;
27
+ return termUnifiedAgainstType;
28
28
  }