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
@@ -2,7 +2,6 @@
2
2
 
3
3
  import Verifier from "../verifier";
4
4
 
5
- import { verify } from "../verifier";
6
5
  import { nodeQuery } from "../utilities/query";
7
6
  import { verifyStandaloneTerm } from "../verify/term";
8
7
  import { verifyStandaloneVariable } from "../verify/variable";
@@ -10,96 +9,53 @@ import { verifyStandaloneMetavariable } from "../verify/metavariable";
10
9
 
11
10
  const termNodeQuery = nodeQuery("/term!"),
12
11
  variableNodeQuery = nodeQuery("/variable!"),
13
- nonTerminalNodeQuery = nodeQuery("/*"),
14
12
  metavariableNodeQuery = nodeQuery("/metavariable!");
15
13
 
16
14
  class MetaLevelVerifier extends Verifier {
17
- verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
18
- let nonTerminalNodeVerified;
15
+ verify(node, localContext) {
16
+ let verified;
19
17
 
20
- const nodeQueryMaps = [
21
- {
22
- nodeQuery: termNodeQuery,
23
- verify: (node, localContext, verifyAhead) => {
24
- let nonTerminalNodeVerified;
18
+ const nonTerminalNode = node, ///
19
+ nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
20
+ const verifiedAhead = true;
25
21
 
26
- const termNode = node, ///
27
- termNodeVerified = this.verifyTermNode(termNode, localContext, verifyAhead);
22
+ return verifiedAhead;
23
+ });
28
24
 
29
- nonTerminalNodeVerified = termNodeVerified; ///
25
+ verified = nonTerminalNodeVerified; ///
30
26
 
31
- return nonTerminalNodeVerified;
32
- }
33
- },
34
- {
35
- nodeQuery: variableNodeQuery,
36
- verify: (node, localContext, verifyAhead) => {
37
- let nonTerminalNodeVerified;
38
-
39
- const variableNode = node, ///
40
- variableNodeVerified = this.verifyVariableNode(variableNode, localContext, verifyAhead);
41
-
42
- nonTerminalNodeVerified = variableNodeVerified; ///
43
-
44
- return nonTerminalNodeVerified;
45
- }
46
- },
47
- {
48
- nodeQuery: metavariableNodeQuery,
49
- verify: (node, localContext, verifyAhead) => {
50
- let nonTerminalNodeVerified;
51
-
52
- const metavariableNode = node, ///
53
- metavariableNodeVerified = this.verifyMetavariableNode(metavariableNode, localContext, verifyAhead);
54
-
55
- nonTerminalNodeVerified = metavariableNodeVerified; ///
56
-
57
- return nonTerminalNodeVerified;
58
- }
59
- },
60
- {
61
- nodeQuery: nonTerminalNodeQuery,
62
- verify: (node, localContext, verifyAhead) => {
63
- let nonTerminalNodeVerified;
64
-
65
- const nonTerminalNode = node; ///
66
-
67
- nonTerminalNodeVerified =
68
-
69
- super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
70
-
71
- return nonTerminalNodeVerified;
72
- }
73
- }
74
- ];
75
-
76
- const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
77
-
78
- nonTerminalNodeVerified = nodeVerified; ///
79
-
80
- return nonTerminalNodeVerified;
81
- }
82
-
83
- verifyMetavariableNode(metavariableNode, localContext, verifyAhead) {
84
- const standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localContext, verifyAhead),
85
- metavariableNodeVerified = standaloneMetavariableVerified; ///
86
-
87
- return metavariableNodeVerified;
88
- }
89
-
90
- verifyVariableNode(variableNode, localContext, verifyAhead) {
91
- const standaloneVariableVerified = verifyStandaloneVariable(variableNode, localContext, verifyAhead),
92
- variableNodeVerified = standaloneVariableVerified; ///
93
-
94
- return variableNodeVerified;
27
+ return verified;
95
28
  }
96
29
 
97
- verifyTermNode(termNode, localContext, verifyAhead) {
98
- const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
99
- termNodeVerified = standaloneTermVerified; ///
30
+ static maps = [
31
+ {
32
+ nodeQuery: metavariableNodeQuery,
33
+ verify: (metavariableNode, localContext, verifyAhead) => {
34
+ const standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localContext, verifyAhead),
35
+ metavariableVerified = standaloneMetavariableVerified; ///
100
36
 
101
- return termNodeVerified;
102
- }
37
+ return metavariableVerified;
38
+ }
39
+ },
40
+ {
41
+ nodeQuery: variableNodeQuery,
42
+ verify: (variableNode, localContext, verifyAhead) => {
43
+ const standaloneVariableVerified = verifyStandaloneVariable(variableNode, localContext, verifyAhead),
44
+ variableVerified = standaloneVariableVerified; ///
45
+
46
+ return variableVerified;
47
+ }
48
+ },
49
+ {
50
+ nodeQuery: termNodeQuery,
51
+ verify: (termNode, localContext, verifyAhead) => {
52
+ const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
53
+ termVerified = standaloneTermVerified; ///
54
+
55
+ return termVerified;
56
+ }
57
+ }
58
+ ];
103
59
  }
104
60
 
105
61
  const metaLevelVerifier = new MetaLevelVerifier();
@@ -2,7 +2,6 @@
2
2
 
3
3
  import Verifier from "../verifier";
4
4
 
5
- import { verify } from "../verifier";
6
5
  import { nodeQuery } from "../utilities/query";
7
6
  import { verifyStandaloneType } from "../verify/type";
8
7
  import { verifyStandaloneTerm } from "../verify/term";
@@ -10,96 +9,54 @@ import { verifyStandaloneStatement } from "../verify/statement";
10
9
 
11
10
  const termNodeQuery = nodeQuery("/term!"),
12
11
  typeNodeQuery = nodeQuery("/type!"),
13
- statementNodeQuery = nodeQuery("/statement!"),
14
- nonTerminalNodeQuery = nodeQuery("/*");
12
+ statementNodeQuery = nodeQuery("/statement!");
15
13
 
16
14
  class StatementAsCombinatorVerifier extends Verifier {
17
- verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
18
- let nonTerminalNodeVerified;
15
+ verify(statementNode, fileContext) {
16
+ let statementVerifiedAsCombinator;
19
17
 
20
- const nodeQueryMaps = [
21
- {
22
- nodeQuery: termNodeQuery,
23
- verify: (node, localContext, verifyAhead) => {
24
- let nonTerminalNodeVerified;
18
+ const nonTerminalNode = statementNode, ///
19
+ childNodes = nonTerminalNode.getChildNodes(),
20
+ childNodesVerified = this.verifyChildNodes(childNodes, fileContext, () => {
21
+ const verifiedAhead = true;
25
22
 
26
- const termNode = node, ///
27
- termNodeVerified = this.verifyTermNode(termNode, localContext, verifyAhead);
23
+ return verifiedAhead;
24
+ });
28
25
 
29
- nonTerminalNodeVerified = termNodeVerified; ///
26
+ statementVerifiedAsCombinator = childNodesVerified; ///
30
27
 
31
- return nonTerminalNodeVerified;
32
- }
33
- },
34
- {
35
- nodeQuery: typeNodeQuery,
36
- verify: (node, localContext, verifyAhead) => {
37
- let nonTerminalNodeVerified;
38
-
39
- const typeNode = node, ///
40
- typeNodeVerified = this.verifyTypeNode(typeNode, localContext, verifyAhead);
41
-
42
- nonTerminalNodeVerified = typeNodeVerified; ///
43
-
44
- return nonTerminalNodeVerified;
45
- }
46
- },
47
- {
48
- nodeQuery: statementNodeQuery,
49
- verify: (node, localContext, verifyAhead) => {
50
- let nonTerminalNodeVerified;
51
-
52
- const statementNode = node, ///
53
- statementNodeVerified = this.verifyStatementNode(statementNode, localContext, verifyAhead);
54
-
55
- nonTerminalNodeVerified = statementNodeVerified; ///
56
-
57
- return nonTerminalNodeVerified;
58
- }
59
- },
60
- {
61
- nodeQuery: nonTerminalNodeQuery,
62
- verify: (node, localContext, verifyAhead) => {
63
- let nonTerminalNodeVerified;
64
-
65
- const nonTerminalNode = node; ///
66
-
67
- nonTerminalNodeVerified =
68
-
69
- super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
70
-
71
- return nonTerminalNodeVerified;
72
- }
73
- }
74
- ];
75
-
76
- const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
77
-
78
- nonTerminalNodeVerified = nodeVerified; ///
79
-
80
- return nonTerminalNodeVerified;
81
- }
82
-
83
- verifyStatementNode(statementNode, localContext, verifyAhead) {
84
- const standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
85
- statementNodeVerified = standaloneStatementVerified; ///
86
-
87
- return statementNodeVerified;
88
- }
89
-
90
- verifyTermNode(termNode, localContext, verifyAhead) {
91
- const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
92
- termNodeVerified = standaloneTermVerified; ///
93
-
94
- return termNodeVerified;
28
+ return statementVerifiedAsCombinator;
95
29
  }
96
30
 
97
- verifyTypeNode(typeNode, localContext, verifyAhead) {
98
- const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
99
- typeNodeVerified = standaloneTypeVerified; ///
31
+ static maps = [
32
+ {
33
+ nodeQuery: termNodeQuery,
34
+ verify: (termNode, localContext, verifyAhead) => {
35
+ const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
36
+ termVerified = standaloneTermVerified; ///
100
37
 
101
- return typeNodeVerified;
102
- }
38
+ return termVerified;
39
+ }
40
+ },
41
+ {
42
+ nodeQuery: typeNodeQuery,
43
+ verify: (typeNode, localContext, verifyAhead) => {
44
+ const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
45
+ typeVerified = standaloneTypeVerified; ///
46
+
47
+ return typeVerified;
48
+ }
49
+ },
50
+ {
51
+ nodeQuery: statementNodeQuery,
52
+ verify: (statementNode, localContext, verifyAhead) => {
53
+ const standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
54
+ statementVerified = standaloneStatementVerified; ///
55
+
56
+ return statementVerified;
57
+ }
58
+ }
59
+ ];
103
60
  }
104
61
 
105
62
  const statementAsCombinatorVerifier = new StatementAsCombinatorVerifier();
@@ -1,83 +1,54 @@
1
1
  "use strict";
2
2
 
3
3
  import Verifier from "../verifier";
4
+ import LocalContext from "../context/local";
4
5
 
5
- import { verify } from "../verifier";
6
6
  import { nodeQuery } from "../utilities/query";
7
7
  import { verifyStandaloneType } from "../verify/type";
8
8
  import { verifyStandaloneTerm } from "../verify/term";
9
9
 
10
10
  const termNodeQuery = nodeQuery("/term!"),
11
- typeNodeQuery = nodeQuery("/type!"),
12
- nonTerminalNodeQuery = nodeQuery("/*");
11
+ typeNodeQuery = nodeQuery("/type!");
13
12
 
14
13
  class TermAsConstructorVerifier extends Verifier {
15
- verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
16
- let nonTerminalNodeVerified;
14
+ verify(termNode, fileContext) {
15
+ let termVerifiedAsConstructor;
17
16
 
18
- const nodeQueryMaps = [
19
- {
20
- nodeQuery: termNodeQuery,
21
- verify: (node, localContext, verifyAhead) => {
22
- let nonTerminalNodeVerified;
17
+ const nonTerminalNode = termNode, ///
18
+ childNodes = nonTerminalNode.getChildNodes(),
19
+ childNodesVerified = this.verifyChildNodes(childNodes, fileContext, () => {
20
+ const verifiedAhead = true;
23
21
 
24
- const termNode = node, ///
25
- termNodeVerified = this.verifyTermNode(termNode, localContext, verifyAhead);
22
+ return verifiedAhead;
23
+ });
26
24
 
27
- nonTerminalNodeVerified = termNodeVerified; ///
25
+ termVerifiedAsConstructor = childNodesVerified; ///
28
26
 
29
- return nonTerminalNodeVerified;
30
- }
31
- },
32
- {
33
- nodeQuery: typeNodeQuery,
34
- verify: (node, localContext, verifyAhead) => {
35
- let nonTerminalNodeVerified;
36
-
37
- const typeNode = node, ///
38
- typeNodeVerified = this.verifyTypeNode(typeNode, localContext, verifyAhead);
39
-
40
- nonTerminalNodeVerified = typeNodeVerified; ///
41
-
42
- return nonTerminalNodeVerified;
43
- }
44
- },
45
- {
46
- nodeQuery: nonTerminalNodeQuery,
47
- verify: (node, localContext, verifyAhead) => {
48
- let nonTerminalNodeVerified;
49
-
50
- const nonTerminalNode = node; ///
51
-
52
- nonTerminalNodeVerified =
53
-
54
- super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
55
-
56
- return nonTerminalNodeVerified;
57
- }
58
- }
59
- ];
60
-
61
- const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
62
-
63
- nonTerminalNodeVerified = nodeVerified; ///
64
-
65
- return nonTerminalNodeVerified;
66
- }
67
-
68
- verifyTermNode(termNode, localContext, verifyAhead) {
69
- const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
70
- termNodeVerified = standaloneTermVerified; ///
71
-
72
- return termNodeVerified;
27
+ return termVerifiedAsConstructor;
73
28
  }
74
29
 
75
- verifyTypeNode(typeNode, localContext, verifyAhead) {
76
- const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
77
- typeNodeVerified = standaloneTypeVerified; ///
30
+ static maps = [
31
+ {
32
+ nodeQuery: termNodeQuery,
33
+ verify: (termNode, fileContext, verifyAhead) => {
34
+ const localContext = LocalContext.fromFileContext(fileContext),
35
+ standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
36
+ termVerified = standaloneTermVerified; ///
78
37
 
79
- return typeNodeVerified;
80
- }
38
+ return termVerified;
39
+ }
40
+ },
41
+ {
42
+ nodeQuery: typeNodeQuery,
43
+ verify: (typeNode, fileContext, verifyAhead) => {
44
+ const localContext = LocalContext.fromFileContext(fileContext),
45
+ standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
46
+ typeVerified = standaloneTypeVerified; ///
47
+
48
+ return typeVerified;
49
+ }
50
+ }
51
+ ];
81
52
  }
82
53
 
83
54
  const termAsConstructorVerifier = new TermAsConstructorVerifier();
package/src/verifier.js CHANGED
@@ -1,6 +1,20 @@
1
1
  "use strict";
2
2
 
3
+ import { nodeQuery } from "./utilities/query";
4
+
5
+ const nonTerminalNodeQuery = nodeQuery("/*");
6
+
3
7
  export default class Verifier {
8
+ verify(node, ...remainingArguments) {
9
+ let verified;
10
+
11
+ const nodeVerified = this.verifyNode(node, ...remainingArguments);
12
+
13
+ verified = nodeVerified; ///
14
+
15
+ return verified;
16
+ }
17
+
4
18
  verifyNode(node, ...remainingArguments) {
5
19
  let nodeVerified;
6
20
 
@@ -46,10 +60,40 @@ export default class Verifier {
46
60
  verifyNonTerminalNode(nonTerminalNode, ...remainingArguments) {
47
61
  let nonTerminalNodeVerified;
48
62
 
49
- const childNodes = nonTerminalNode.getChildNodes(), ///
50
- childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
63
+ let { maps } = this.constructor;
64
+
65
+ maps = [ ///
66
+ ...maps,
67
+ {
68
+ nodeQuery: nonTerminalNodeQuery,
69
+ verify: (node, ...remainingArguments) => {
70
+ let nonTerminalNodeVerified;
71
+
72
+ const childNodes = nonTerminalNode.getChildNodes(), ///
73
+ childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
74
+
75
+ nonTerminalNodeVerified = childNodesVerify; ///
76
+
77
+ return nonTerminalNodeVerified;
78
+ }
79
+ }
80
+ ]
81
+
82
+ let nodeVerified = false;
51
83
 
52
- nonTerminalNodeVerified = childNodesVerify; ///
84
+ maps.some((map) => {
85
+ const { nodeQuery, verify } = map;
86
+
87
+ const node = nodeQuery(nonTerminalNode);
88
+
89
+ if (node !== null) {
90
+ nodeVerified = verify(node, ...remainingArguments);
91
+
92
+ return true;
93
+ }
94
+ });
95
+
96
+ nonTerminalNodeVerified = nodeVerified; ///
53
97
 
54
98
  return nonTerminalNodeVerified;
55
99
  }
@@ -82,21 +126,3 @@ export default class Verifier {
82
126
  return childNodesVerify;
83
127
  }
84
128
  }
85
-
86
- export function verify(nodeQueryMaps, nonTerminalNode, ...remainingArguments) {
87
- let nodeVerified = false;
88
-
89
- nodeVerified = nodeQueryMaps.some((nodeQueryMap) => {
90
- const { nodeQuery, verify } = nodeQueryMap;
91
-
92
- const node = nodeQuery(nonTerminalNode);
93
-
94
- if (node !== null) {
95
- nodeVerified = verify(node, ...remainingArguments);
96
-
97
- return true;
98
- }
99
- });
100
-
101
- return nodeVerified;
102
- }
@@ -84,11 +84,7 @@ function verifyStatedContainedAssertion(containedAssertionNode, assignments, der
84
84
  localContext.debug(`The '${containedAssertionString}' stated contained assertion cannot be verified.`, containedAssertionNode);
85
85
 
86
86
  const nonTerminalNode = containedAssertionNode, ///
87
- nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
88
- const verifiedAhead = true;
89
-
90
- return verifiedAhead;
91
- });
87
+ nonTerminalNodeVerified = metaLevelVerifier.verify(nonTerminalNode, localContext);
92
88
 
93
89
  statedContainedAssertionVerified = nonTerminalNodeVerified; ///
94
90
 
@@ -113,11 +113,7 @@ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived
113
113
  localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`, definedAssertionNode);
114
114
 
115
115
  const nonTerminalNode = definedAssertionNode, ///
116
- nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
117
- const verifiedAhead = true;
118
-
119
- return verifiedAhead;
120
- });
116
+ nonTerminalNodeVerified = metaLevelVerifier.verify(nonTerminalNode, localContext);
121
117
 
122
118
  statedDefinedAssertionVerified = nonTerminalNodeVerified; ///
123
119
 
@@ -192,9 +192,9 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
192
192
  localContextA = null,
193
193
  localContextB = localContext, ///
194
194
  statementNodeB = statementNode, ///
195
- substitutionNode = null,
195
+ substitutionNodeA = null,
196
196
  metavariableNodeA = metavariableNode, ///
197
- metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, () => {
197
+ metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
198
198
  const verifiedAhead = true;
199
199
 
200
200
  return verifiedAhead;
@@ -13,16 +13,17 @@ import statementAgainstCombinatorUnifier from "../unifier/statementAgainstCombin
13
13
  import { nodeQuery } from "../utilities/query";
14
14
  import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
15
15
 
16
- const variableNodeQuery = nodeQuery("/substitution/variable!"),
16
+ const variableNodeQuery = nodeQuery("/*/variable!"),
17
17
  equalityNodeQuery = nodeQuery("/statement/equality!"),
18
18
  judgementNodeQuery = nodeQuery("/statement/judgement!"),
19
- metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
19
+ metavariableNodeQuery = nodeQuery("/*/metavariable!"),
20
20
  substitutionNodeQuery = nodeQuery("/statement/substitution!"),
21
- typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
22
21
  termVariableNodeQuery = nodeQuery("/substitution/term/variable!"),
22
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
23
23
  definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
24
24
  subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
25
- containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
25
+ containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!"),
26
+ statementMetavariableNodeQuery = nodeQuery("/substitution/statement/metavariable!");
26
27
 
27
28
  function verifyStatement(statementNode, assignments, derived, localContext) {
28
29
  let statementVerified;
@@ -311,16 +312,9 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
311
312
 
312
313
  localContext.trace(`Verifying the '${statementString}' statement against the '${combinatorString}' combinator...`, statementNode);
313
314
 
314
- const combinatorStatementNode = combinator.getStatementNode(),
315
- nonTerminalNodeA = statementNode, ///
316
- nonTerminalNodeB = combinatorStatementNode, ///
317
- nonTerminalNodeUnify = statementAgainstCombinatorUnifier.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, () => {
318
- const verifiedAhead = true;
319
-
320
- return verifiedAhead;
321
- });
315
+ const combinatorStatementNode = combinator.getStatementNode();
322
316
 
323
- statementVerifiedAgainstCombinator = nonTerminalNodeUnify; ///
317
+ statementVerifiedAgainstCombinator = statementAgainstCombinatorUnifier.unify(statementNode, combinatorStatementNode, localContext);
324
318
 
325
319
  if (statementVerifiedAgainstCombinator) {
326
320
  localContext.debug(`...verified the '${statementString}' statement against the '${combinatorString}' combinator.`, statementNode);
@@ -352,15 +346,33 @@ function verifySubstitution(substitutionNode, localContext) {
352
346
  substitutionVerified = true;
353
347
  } else {
354
348
  const variableNode = variableNodeQuery(substitutionNode),
355
- variablePresent = localContext.isVariablePresentByVariableNode(variableNode);
349
+ metavariableNode = metavariableNodeQuery(substitutionNode);
350
+
351
+ if (variableNode !== null) {
352
+ const variablePresent = localContext.isVariablePresentByVariableNode(variableNode);
353
+
354
+ if (variablePresent) {
355
+ const termVariableNode = termVariableNodeQuery(substitutionNode);
356
+
357
+ if (termVariableNode !== null) {
358
+ const termVariablePresent = localContext.isVariablePresentByVariableNode(termVariableNode);
359
+
360
+ substitutionVerified = termVariablePresent; ///
361
+ }
362
+ }
363
+ }
364
+
365
+ if (metavariableNode !== null) {
366
+ const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode);
356
367
 
357
- if (variablePresent) {
358
- const termVariableNode = termVariableNodeQuery(substitutionNode);
368
+ if (metavariablePresent) {
369
+ const statementMetavariableNode = statementMetavariableNodeQuery(substitutionNode);
359
370
 
360
- if (termVariableNode !== null) {
361
- const termVariablePresent = localContext.isVariablePresentByVariableNode(termVariableNode);
371
+ if (statementMetavariableNode !== null) {
372
+ const statementMetavariablePresent = localContext.isMetavariablePresentByMetavariableNode(statementMetavariableNode);
362
373
 
363
- substitutionVerified = termVariablePresent; ///
374
+ substitutionVerified = statementMetavariablePresent; ///
375
+ }
364
376
  }
365
377
  }
366
378
  }
@@ -4,27 +4,19 @@ import Combinator from "../combinator";
4
4
  import statementAsCombinatorVerifier from "../verifier/statementAsCombinator";
5
5
 
6
6
  export default function verifyStatementAsCombinator(statementNode, fileContext) {
7
- let statementVerifiedAsCombinator = false;
7
+ let statementVerifiedAsCombinator;
8
8
 
9
9
  const statementString = fileContext.nodeAsString(statementNode);
10
10
 
11
11
  fileContext.trace(`Verifying the '${statementString}' statement as a combinator....`, statementNode);
12
12
 
13
- const nonTerminalNode = statementNode, ///
14
- childNodes = nonTerminalNode.getChildNodes(),
15
- childNodesVerified = statementAsCombinatorVerifier.verifyChildNodes(childNodes, fileContext, () => {
16
- const verifiedAhead = true;
13
+ statementVerifiedAsCombinator = statementAsCombinatorVerifier.verify(statementNode, fileContext);
17
14
 
18
- return verifiedAhead;
19
- });
20
-
21
- if (childNodesVerified) {
15
+ if (statementVerifiedAsCombinator) {
22
16
  const tokens = fileContext.getTokens(),
23
17
  combinator = Combinator.fromStatementNodeAndTokens(statementNode, tokens);
24
18
 
25
19
  fileContext.addCombinator(combinator);
26
-
27
- statementVerifiedAsCombinator = true;
28
20
  }
29
21
 
30
22
  if (statementVerifiedAsCombinator) {