occam-verify-cli 0.0.932 → 0.0.934

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 (115) hide show
  1. package/lib/conclusion.js +4 -4
  2. package/lib/consequent.js +4 -4
  3. package/lib/context/local.js +188 -9
  4. package/lib/declaration.js +2 -2
  5. package/lib/equality.js +4 -4
  6. package/lib/equivalence.js +16 -1
  7. package/lib/metaLemma.js +4 -4
  8. package/lib/metatheorem.js +4 -4
  9. package/lib/premise.js +6 -6
  10. package/lib/proofStep.js +43 -6
  11. package/lib/shim.js +14 -0
  12. package/lib/substitution/statementForMetavariable.js +46 -2
  13. package/lib/substitution/termForVariable.js +15 -1
  14. package/lib/supposition.js +6 -6
  15. package/lib/unifier/equality.js +216 -0
  16. package/lib/unifier/metaLevel.js +235 -0
  17. package/lib/unifier/statementAgainstCombinator.js +232 -0
  18. package/lib/unifier/termAgainstConstructor.js +212 -0
  19. package/lib/unifier.js +201 -0
  20. package/lib/unify/argumentAgainstArgument.js +24 -0
  21. package/lib/unify/metavariableAgainstStatement.js +66 -0
  22. package/lib/unify/statementAgainstMetaType.js +28 -0
  23. package/lib/unify/statementAtainstStatement.js +52 -0
  24. package/lib/unify/termAgainstTerm.js +22 -0
  25. package/lib/unify/termAgainstType.js +26 -0
  26. package/lib/unify/variableAgainstTerm.js +70 -0
  27. package/lib/verifier/metaLevel.js +236 -0
  28. package/lib/verifier/statementAsCombinator.js +236 -0
  29. package/lib/verifier/termAsConstructor.js +219 -0
  30. package/lib/verifier.js +182 -0
  31. package/lib/verify/assertion/contained.js +2 -2
  32. package/lib/verify/assertion/defined.js +2 -2
  33. package/lib/verify/declaration.js +18 -18
  34. package/lib/verify/frame.js +9 -12
  35. package/lib/verify/proofStep.js +3 -3
  36. package/lib/verify/statement/qualified.js +61 -10
  37. package/lib/verify/statement/unqualified.js +62 -50
  38. package/lib/verify/statement.js +36 -41
  39. package/lib/verify/statementAsCombinator.js +2 -2
  40. package/lib/verify/subDerivation.js +8 -2
  41. package/lib/verify/term.js +8 -7
  42. package/lib/verify/termAsConstructor.js +2 -2
  43. package/package.json +2 -2
  44. package/src/conclusion.js +3 -3
  45. package/src/consequent.js +3 -3
  46. package/src/context/local.js +68 -8
  47. package/src/declaration.js +2 -2
  48. package/src/equality.js +3 -3
  49. package/src/equivalence.js +19 -0
  50. package/src/metaLemma.js +1 -1
  51. package/src/metatheorem.js +1 -1
  52. package/src/premise.js +5 -5
  53. package/src/proofStep.js +57 -4
  54. package/src/shim.js +5 -0
  55. package/src/substitution/statementForMetavariable.js +33 -2
  56. package/src/substitution/termForVariable.js +16 -0
  57. package/src/supposition.js +5 -5
  58. package/src/unifier/equality.js +84 -0
  59. package/src/unifier/metaLevel.js +114 -0
  60. package/src/unifier/statementAgainstCombinator.js +105 -0
  61. package/src/unifier/termAgainstConstructor.js +77 -0
  62. package/src/unifier.js +133 -0
  63. package/src/unify/argumentAgainstArgument.js +15 -0
  64. package/src/{verify → unify}/metavariableAgainstStatement.js +18 -18
  65. package/src/{verify → unify}/statementAgainstMetaType.js +4 -4
  66. package/src/{verify → unify}/statementAtainstStatement.js +7 -7
  67. package/src/{verify → unify}/termAgainstTerm.js +5 -5
  68. package/src/{verify → unify}/termAgainstType.js +7 -7
  69. package/src/{verify → unify}/variableAgainstTerm.js +6 -6
  70. package/src/verifier/{node/metaLevel.js → metaLevel.js} +14 -14
  71. package/src/verifier/{node/statementAsCombinator.js → statementAsCombinator.js} +14 -14
  72. package/src/verifier/{node/termAsConstructor.js → termAsConstructor.js} +12 -12
  73. package/src/{verifier/node.js → verifier.js} +19 -1
  74. package/src/verify/assertion/contained.js +2 -2
  75. package/src/verify/assertion/defined.js +2 -2
  76. package/src/verify/declaration.js +20 -23
  77. package/src/verify/frame.js +10 -13
  78. package/src/verify/proofStep.js +2 -2
  79. package/src/verify/statement/qualified.js +95 -10
  80. package/src/verify/statement/unqualified.js +85 -11
  81. package/src/verify/statement.js +47 -45
  82. package/src/verify/statementAsCombinator.js +2 -2
  83. package/src/verify/subDerivation.js +3 -1
  84. package/src/verify/term.js +7 -6
  85. package/src/verify/termAsConstructor.js +2 -2
  86. package/lib/mixins/context.js +0 -135
  87. package/lib/mixins/nodesVerifier/intrinsiclevel.js +0 -59
  88. package/lib/mixins/nodesVerifier/metaLevel.js +0 -40
  89. package/lib/utilities/verifier.js +0 -80
  90. package/lib/verifier/node/metaLevel.js +0 -201
  91. package/lib/verifier/node/statementAsCombinator.js +0 -201
  92. package/lib/verifier/node/termAsConstructor.js +0 -184
  93. package/lib/verifier/node.js +0 -157
  94. package/lib/verifier/nodes/equality.js +0 -176
  95. package/lib/verifier/nodes/metaLevel.js +0 -191
  96. package/lib/verifier/nodes/statementAgainstCombinator.js +0 -191
  97. package/lib/verifier/nodes/termAgainstConstructor.js +0 -171
  98. package/lib/verifier/nodes.js +0 -175
  99. package/lib/verify/argumentAgainstArgument.js +0 -24
  100. package/lib/verify/metavariableAgainstStatement.js +0 -66
  101. package/lib/verify/statementAgainstMetaType.js +0 -28
  102. package/lib/verify/statementAtainstStatement.js +0 -52
  103. package/lib/verify/termAgainstTerm.js +0 -22
  104. package/lib/verify/termAgainstType.js +0 -26
  105. package/lib/verify/variableAgainstTerm.js +0 -70
  106. package/src/mixins/context.js +0 -96
  107. package/src/mixins/nodesVerifier/intrinsiclevel.js +0 -73
  108. package/src/mixins/nodesVerifier/metaLevel.js +0 -39
  109. package/src/utilities/verifier.js +0 -38
  110. package/src/verifier/nodes/equality.js +0 -84
  111. package/src/verifier/nodes/metaLevel.js +0 -109
  112. package/src/verifier/nodes/statementAgainstCombinator.js +0 -105
  113. package/src/verifier/nodes/termAgainstConstructor.js +0 -76
  114. package/src/verifier/nodes.js +0 -114
  115. package/src/verify/argumentAgainstArgument.js +0 -15
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
 
3
- import NodeVerifier from "../../verifier/node";
3
+ import Verifier from "../verifier";
4
4
 
5
- import { nodeQuery } from "../../utilities/query";
6
- import { verifyNode } from "../../utilities/verifier";
7
- import { verifyStandaloneType } from "./../../verify/type";
8
- import { verifyStandaloneTerm } from "./../../verify/term";
9
- import { verifyStandaloneStatement } from "../../verify/statement";
5
+ import { verify } from "../verifier";
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { verifyStandaloneType } from "../verify/type";
8
+ import { verifyStandaloneTerm } from "../verify/term";
9
+ import { verifyStandaloneStatement } from "../verify/statement";
10
10
 
11
11
  const termNodeQuery = nodeQuery("/term!"),
12
12
  typeNodeQuery = nodeQuery("/type!"),
13
13
  statementNodeQuery = nodeQuery("/statement!"),
14
14
  nonTerminalNodeQuery = nodeQuery("/*");
15
15
 
16
- class StatementAsCombinatorNodeVerifier extends NodeVerifier {
16
+ class StatementAsCombinatorVerifier extends Verifier {
17
17
  verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
18
18
  let nonTerminalNodeVerified;
19
19
 
20
20
  const nodeQueryMaps = [
21
21
  {
22
22
  nodeQuery: termNodeQuery,
23
- verifyNode: (node, localContext, verifyAhead) => {
23
+ verify: (node, localContext, verifyAhead) => {
24
24
  let nonTerminalNodeVerified;
25
25
 
26
26
  const termNode = node, ///
@@ -33,7 +33,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
33
33
  },
34
34
  {
35
35
  nodeQuery: typeNodeQuery,
36
- verifyNode: (node, localContext, verifyAhead) => {
36
+ verify: (node, localContext, verifyAhead) => {
37
37
  let nonTerminalNodeVerified;
38
38
 
39
39
  const typeNode = node, ///
@@ -46,7 +46,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
46
46
  },
47
47
  {
48
48
  nodeQuery: statementNodeQuery,
49
- verifyNode: (node, localContext, verifyAhead) => {
49
+ verify: (node, localContext, verifyAhead) => {
50
50
  let nonTerminalNodeVerified;
51
51
 
52
52
  const statementNode = node, ///
@@ -59,7 +59,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
59
59
  },
60
60
  {
61
61
  nodeQuery: nonTerminalNodeQuery,
62
- verifyNode: (node, localContext, verifyAhead) => {
62
+ verify: (node, localContext, verifyAhead) => {
63
63
  let nonTerminalNodeVerified;
64
64
 
65
65
  const nonTerminalNode = node; ///
@@ -73,7 +73,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
73
73
  }
74
74
  ];
75
75
 
76
- const nodeVerified = verifyNode(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
76
+ const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
77
77
 
78
78
  nonTerminalNodeVerified = nodeVerified; ///
79
79
 
@@ -102,6 +102,6 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
102
102
  }
103
103
  }
104
104
 
105
- const statementAsCombinatorNodeVerifier = new StatementAsCombinatorNodeVerifier();
105
+ const statementAsCombinatorVerifier = new StatementAsCombinatorVerifier();
106
106
 
107
- export default statementAsCombinatorNodeVerifier;
107
+ export default statementAsCombinatorVerifier;
@@ -1,24 +1,24 @@
1
1
  "use strict";
2
2
 
3
- import NodeVerifier from "../../verifier/node";
3
+ import Verifier from "../verifier";
4
4
 
5
- import { nodeQuery } from "../../utilities/query";
6
- import { verifyNode } from "../../utilities/verifier";
7
- import { verifyStandaloneType } from "../../verify/type";
8
- import { verifyStandaloneTerm } from "../../verify/term";
5
+ import { verify } from "../verifier";
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { verifyStandaloneType } from "../verify/type";
8
+ import { verifyStandaloneTerm } from "../verify/term";
9
9
 
10
10
  const termNodeQuery = nodeQuery("/term!"),
11
11
  typeNodeQuery = nodeQuery("/type!"),
12
12
  nonTerminalNodeQuery = nodeQuery("/*");
13
13
 
14
- class TermAsConstructorNodeVerifier extends NodeVerifier {
14
+ class TermAsConstructorVerifier extends Verifier {
15
15
  verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
16
16
  let nonTerminalNodeVerified;
17
17
 
18
18
  const nodeQueryMaps = [
19
19
  {
20
20
  nodeQuery: termNodeQuery,
21
- verifyNode: (node, localContext, verifyAhead) => {
21
+ verify: (node, localContext, verifyAhead) => {
22
22
  let nonTerminalNodeVerified;
23
23
 
24
24
  const termNode = node, ///
@@ -31,7 +31,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
31
31
  },
32
32
  {
33
33
  nodeQuery: typeNodeQuery,
34
- verifyNode: (node, localContext, verifyAhead) => {
34
+ verify: (node, localContext, verifyAhead) => {
35
35
  let nonTerminalNodeVerified;
36
36
 
37
37
  const typeNode = node, ///
@@ -44,7 +44,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
44
44
  },
45
45
  {
46
46
  nodeQuery: nonTerminalNodeQuery,
47
- verifyNode: (node, localContext, verifyAhead) => {
47
+ verify: (node, localContext, verifyAhead) => {
48
48
  let nonTerminalNodeVerified;
49
49
 
50
50
  const nonTerminalNode = node; ///
@@ -58,7 +58,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
58
58
  }
59
59
  ];
60
60
 
61
- const nodeVerified = verifyNode(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
61
+ const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
62
62
 
63
63
  nonTerminalNodeVerified = nodeVerified; ///
64
64
 
@@ -80,6 +80,6 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
80
80
  }
81
81
  }
82
82
 
83
- const termAsConstructorNodeVerifier = new TermAsConstructorNodeVerifier();
83
+ const termAsConstructorVerifier = new TermAsConstructorVerifier();
84
84
 
85
- export default termAsConstructorNodeVerifier;
85
+ export default termAsConstructorVerifier;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- export default class NodeVerifier {
3
+ export default class Verifier {
4
4
  verifyNode(node, ...remainingArguments) {
5
5
  let nodeVerified;
6
6
 
@@ -82,3 +82,21 @@ export default class NodeVerifier {
82
82
  return childNodesVerify;
83
83
  }
84
84
  }
85
+
86
+ export function verify(nodeQueryMaps, nonTerminalNode, ...remainingArguments) {
87
+ let nodeVerified = false;
88
+
89
+ nodeVerified = nodeQueryMaps.some((nodeQueryMap) => {
90
+ const { nodeQuery, verifyNode } = nodeQueryMap;
91
+
92
+ const node = nodeQuery(nonTerminalNode);
93
+
94
+ if (node !== null) {
95
+ nodeVerified = verifyNode(node, ...remainingArguments);
96
+
97
+ return true;
98
+ }
99
+ });
100
+
101
+ return nodeVerified;
102
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import metaLevelNodeVerifier from "../../verifier/node/metaLevel";
3
+ import metaLevelVerifier from "../../verifier/metaLevel";
4
4
 
5
5
  import { isAssertionNegated } from "../../utilities/verify";
6
6
  import { nodeQuery, nodesQuery } from "../../utilities/query";
@@ -84,7 +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 = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
87
+ nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
88
88
  const verifiedAhead = true;
89
89
 
90
90
  return verifiedAhead;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import verifyTerm from "../../verify/term";
4
- import metaLevelNodeVerifier from "../../verifier/node/metaLevel";
4
+ import metaLevelVerifier from "../../verifier/metaLevel";
5
5
 
6
6
  import { first } from "../../utilities/array";
7
7
  import { nodeQuery } from "../../utilities/query";
@@ -113,7 +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 = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
116
+ nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
117
117
  const verifiedAhead = true;
118
118
 
119
119
  return verifiedAhead;
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ import shim from "../shim";
3
4
  import Declaration from "../declaration"
4
5
  import referenceMetaType from "../metaType/reference";
5
- import metaLevelNodeVerifier from "../verifier/node/metaLevel";
6
6
 
7
7
  import { nodeQuery } from "../utilities/query";
8
8
 
9
- const referenceNodeQuery = nodeQuery("/declaration/reference!"),
10
- statementNodeQuery = nodeQuery("/declaration/statement!"),
11
- metavariableNodeQuery = nodeQuery("/reference/metavariable!");
9
+ const statementNodeQuery = nodeQuery("/declaration/statement!"),
10
+ metavariableNodeQuery = nodeQuery("/declaration/metavariable!");
12
11
 
13
12
  export default function verifyDeclaration(declarationNode, declarations, localContext) {
14
13
  let declarationVerified = false;
@@ -17,20 +16,19 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
17
16
 
18
17
  localContext.trace(`Verifying the '${declarationString}' declaration...`, declarationNode);
19
18
 
20
- const referenceNode = referenceNodeQuery(declarationNode),
21
- referenceVerified = verifyReference(referenceNode, localContext);
19
+ const metavariableNode = metavariableNodeQuery(declarationNode),
20
+ metavariableVerified = verifyMetavariable(metavariableNode, localContext);
22
21
 
23
- if (referenceVerified) {
22
+ if (metavariableVerified) {
24
23
  const statementNode = statementNodeQuery(declarationNode);
25
24
 
26
- const { verifyStatement } = metaLevelNodeVerifier,
25
+ const { verifyStatement } = shim,
27
26
  derived = false,
28
27
  assignments = [],
29
28
  statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
30
29
 
31
30
  if (statementVerified) {
32
- const metavariableNode = metavariableNodeQuery(referenceNode),
33
- declaration = Declaration.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode);
31
+ const declaration = Declaration.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode);
34
32
 
35
33
  declarations.push(declaration);
36
34
 
@@ -45,34 +43,33 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
45
43
  return declarationVerified;
46
44
  }
47
45
 
48
- function verifyReference(referenceNode, localContext) {
49
- let referenceVerified = false;
46
+ function verifyMetavariable(metavariableNode, localContext) {
47
+ let metavariableVerified = false;
50
48
 
51
- const referenceString = localContext.nodeAsString(referenceNode);
49
+ const metavariableString = localContext.nodeAsString(metavariableNode);
52
50
 
53
- localContext.trace(`Verifying the '${referenceString}' reference...`, referenceNode);
51
+ localContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
54
52
 
55
- const metavariableNode = metavariableNodeQuery(referenceNode),
56
- metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
53
+ const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
57
54
 
58
55
  if (metavariable !== null) {
59
56
  const metaType = metavariable.getMetaType();
60
57
 
61
58
  if (metaType === referenceMetaType) {
62
- referenceVerified = true;
59
+ metavariableVerified = true;
63
60
  } else {
64
61
  const referenceMetaTypeName = referenceMetaType.getName(),
65
62
  metaTypeString = metaType.asString();
66
63
 
67
- localContext.debug(`The '${referenceString}' metavariable's meta-type is '${metaTypeString}' when it should be '${referenceMetaTypeName}'.`, referenceNode);
64
+ localContext.debug(`The '${metavariableString}' metavariable's meta-type is '${metaTypeString}' when it should be '${referenceMetaTypeName}'.`, metavariableNode);
68
65
  }
69
66
  } else {
70
- localContext.debug(`The '${referenceString}' metavariable is not present'.`, referenceNode);
67
+ localContext.debug(`The '${metavariableString}' metavariable is not present'.`, metavariableNode);
71
68
  }
72
69
 
73
- if (referenceVerified) {
74
- localContext.debug(`...verified the '${referenceString}' reference.`, referenceNode);
70
+ if (metavariableVerified) {
71
+ localContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
75
72
  }
76
73
 
77
- return referenceVerified;
78
- }
74
+ return metavariableVerified;
75
+ }
@@ -19,27 +19,24 @@ export default function verifyFrame(frameNode, frames, assignments, derived, loc
19
19
 
20
20
  const declarations = [],
21
21
  declarationNodes = declarationNodesQuery(frameNode),
22
+ metavariableNodes = metavariableNodesQuery(frameNode),
22
23
  declarationsVerified = declarationNodes.every((declarationNode) => {
23
24
  const declarationVerified = verifyDeclaration(declarationNode, declarations, localContext);
24
25
 
25
26
  return declarationVerified;
26
- });
27
-
28
- if (declarationsVerified) {
29
- const metavariableNodes = metavariableNodesQuery(frameNode),
30
- metavariablesVerified = metavariableNodes.every((metavariableNode) => {
31
- const metavariableVerified = verifyMetavariable(metavariableNode, declarations, localContext);
27
+ }),
28
+ metavariablesVerified = metavariableNodes.every((metavariableNode) => {
29
+ const metavariableVerified = verifyMetavariable(metavariableNode, declarations, localContext);
32
30
 
33
- return metavariableVerified;
34
- });
31
+ return metavariableVerified;
32
+ });
35
33
 
36
- if (metavariablesVerified) {
37
- const frame = Frame.fromDeclarations(declarations);
34
+ if (declarationsVerified && metavariablesVerified) {
35
+ const frame = Frame.fromDeclarations(declarations);
38
36
 
39
- frames.push(frame);
37
+ frames.push(frame);
40
38
 
41
- frameVerified = true;
42
- }
39
+ frameVerified = true;
43
40
  }
44
41
 
45
42
  if (frameVerified) {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ import shim from "../shim";
3
4
  import ProofStep from "../proofStep";
4
5
  import verifySubproof from "../verify/subproof";
5
- import verifySubDerivation from "../verify/subDerivation";
6
6
  import verifyQualifiedStatement from "../verify/statement/qualified";
7
7
  import verifyUnqualifiedStatement from "../verify/statement/unqualified";
8
8
 
@@ -83,6 +83,6 @@ export default function verifyProofStep(proofStepNode, substitutions, localConte
83
83
  return proofStepVerified;
84
84
  }
85
85
 
86
- Object.assign(verifySubDerivation, {
86
+ Object.assign(shim, {
87
87
  verifyProofStep
88
88
  });
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
 
3
+ import verifyEquality from "../equality";
4
+ import verifyJudgement from "../judgement";
5
+ import verifyTypeAssertion from "../assertion/type";
6
+ import unifyMetavariableAgainstStatement from "../../unify/metavariableAgainstStatement";
7
+
3
8
  import { nodeQuery } from "../../utilities/query";
4
- import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
5
9
 
6
10
  const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
7
- metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!");
8
-
9
- import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
11
+ equalityNodeQuery = nodeQuery("/statement/equality!"),
12
+ judgementNodeQuery = nodeQuery("/statement/judgement!"),
13
+ metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!"),
14
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
10
15
 
11
16
  export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
12
17
  let qualifiedStatementVerified;
@@ -184,7 +189,16 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
184
189
 
185
190
  if (metavariablePresent) {
186
191
  const statementNode = statementNodeQuery(qualifiedStatementNode),
187
- metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead);
192
+ localContextA = null,
193
+ localContextB = localContext, ///
194
+ statementNodeB = statementNode, ///
195
+ substitutionNode = null,
196
+ metavariableNodeA = metavariableNode, ///
197
+ metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, () => {
198
+ const verifiedAhead = true;
199
+
200
+ return verifiedAhead;
201
+ });
188
202
 
189
203
  qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
190
204
  }
@@ -203,13 +217,14 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
203
217
 
204
218
  localContext.trace(`Verifying the '${statementString}' stated statement...`, statementNode);
205
219
 
206
- const verifyStatementFunctions = [
207
- verifyStatementAsEquality,
208
- verifyStatementAsTypeAssertion
220
+ const verifyStatedStatementFunctions = [
221
+ verifyStatedStatementAsEquality,
222
+ verifyStatedStatementAsJudgement,
223
+ verifyStatedStatementAsTypeAssertion
209
224
  ];
210
225
 
211
- verifyStatementFunctions.some((verifyStatementFunction) => {
212
- const statedStatementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
226
+ verifyStatedStatementFunctions.every((verifyStatedStatementFunction) => { ///
227
+ const statedStatementVerified = verifyStatedStatementFunction(statementNode, assignments, derived, localContext);
213
228
 
214
229
  if (statedStatementVerified) {
215
230
  return true;
@@ -224,3 +239,73 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
224
239
 
225
240
  return statedStatementVerified;
226
241
  }
242
+
243
+ function verifyStatedStatementAsEquality(statementNode, assignments, derived, localContext) {
244
+ let statedStatementVerifiedAsEquality = true; ///
245
+
246
+ const equalityNode = equalityNodeQuery(statementNode);
247
+
248
+ if (equalityNode !== null) {
249
+ const statementString = localContext.nodeAsString(statementNode);
250
+
251
+ localContext.trace(`Verifying the '${statementString}' stated statement as an equality...`, statementNode);
252
+
253
+ const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
254
+ const verifiedAhead = true;
255
+
256
+ return verifiedAhead;
257
+ });
258
+
259
+ statedStatementVerifiedAsEquality = equalityVerified; ///
260
+
261
+ if (statedStatementVerifiedAsEquality) {
262
+ localContext.debug(`...verified the '${statementString}' stated statement as an equality.`, statementNode);
263
+ }
264
+ }
265
+
266
+ return statedStatementVerifiedAsEquality;
267
+ }
268
+
269
+ function verifyStatedStatementAsJudgement(statementNode, assignments, derived, localContext) {
270
+ let statedStatementVerifiedAsJudgement = true;
271
+
272
+ const judgementNode = judgementNodeQuery(statementNode);
273
+
274
+ if (judgementNode !== null) {
275
+ const statementString = localContext.nodeAsString(statementNode);
276
+
277
+ localContext.trace(`Verifying the '${statementString}' stated statement as a judgement...`, statementNode);
278
+
279
+ const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
280
+
281
+ statedStatementVerifiedAsJudgement = judgementVerified; ///
282
+
283
+ if (statedStatementVerifiedAsJudgement) {
284
+ localContext.debug(`...verified the '${statementString}' stated statement as a judgement.`, statementNode);
285
+ }
286
+ }
287
+
288
+ return statedStatementVerifiedAsJudgement;
289
+ }
290
+
291
+ function verifyStatedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
292
+ let statementVerifiedAsTypeAssertion = true; ///
293
+
294
+ const typeAssertionNode = typeAssertionNodeQuery(statementNode);
295
+
296
+ if (typeAssertionNode !== null) {
297
+ const statementString = localContext.nodeAsString(statementNode);
298
+
299
+ localContext.trace(`Verifying the '${statementString}' stated statement as a type assertion...`, statementNode);
300
+
301
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
302
+
303
+ statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
304
+
305
+ if (statementVerifiedAsTypeAssertion) {
306
+ localContext.debug(`...verified the '${statementString}' stated statement as a type assertion.`, statementNode);
307
+ }
308
+ }
309
+
310
+ return statementVerifiedAsTypeAssertion;
311
+ }
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ import verifyEquality from "../../verify/equality";
4
+ import verifyJudgement from "../../verify/judgement";
3
5
  import verifyStatement from "../../verify/statement";
6
+ import verifyTypeAssertion from "../assertion/type";
4
7
 
5
8
  import { nodeQuery } from "../../utilities/query";
6
- import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
7
9
 
8
- const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
10
+ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
11
+ equalityNodeQuery = nodeQuery("/statement/equality!"),
12
+ judgementNodeQuery = nodeQuery("/statement/judgement!"),
13
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
9
14
 
10
15
  export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
11
16
  let unqualifiedStatementVerified;
@@ -43,9 +48,9 @@ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments
43
48
 
44
49
  localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
45
50
 
46
- const matchesStatementNode = localContext.matchStatementNode(statementNode);
51
+ const statementUnified = localContext.unifyStatement(statementNode);
47
52
 
48
- if (matchesStatementNode) {
53
+ if (statementUnified) {
49
54
  derivedUnqualifiedStatementVerified = true;
50
55
  } else {
51
56
  const statementNode = statementNodeQuery(unqualifiedStatementNode),
@@ -90,24 +95,93 @@ function verifyDerivedStatement(statementNode, assignments, derived, localContex
90
95
 
91
96
  localContext.trace(`Verifying the '${statementString}' derived statement...`, statementNode);
92
97
 
93
- const verifyStatementFunctions = [
94
- verifyStatementAsEquality,
95
- verifyStatementAsTypeAssertion
98
+ const verifyDerivedStatementFunctions = [
99
+ verifyDerivedStatementAsEquality,
100
+ verifyDerivedStatementAsJudgement,
101
+ verifyDerivedStatementAsTypeAssertion
96
102
  ];
97
103
 
98
- verifyStatementFunctions.some((verifyStatementFunction) => {
99
- const derivedStatementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
104
+ derivedStatementVerified = verifyDerivedStatementFunctions.every((verifyDerivedStatementFunction) => { ///
105
+ const derivedStatementVerified = verifyDerivedStatementFunction(statementNode, assignments, derived, localContext);
100
106
 
101
107
  if (derivedStatementVerified) {
102
108
  return true;
103
109
  }
104
110
  });
105
111
 
106
- derivedStatementVerified = true; ///
107
-
108
112
  if (derivedStatementVerified) {
109
113
  localContext.debug(`...verified the '${statementString}' derived statement.`, statementNode);
110
114
  }
111
115
 
112
116
  return derivedStatementVerified;
113
117
  }
118
+
119
+ function verifyDerivedStatementAsEquality(statementNode, assignments, derived, localContext) {
120
+ let derivedStatementVerifiedAsEquality = true; ///
121
+
122
+ const equalityNode = equalityNodeQuery(statementNode);
123
+
124
+ if (equalityNode !== null) {
125
+ const statementString = localContext.nodeAsString(statementNode);
126
+
127
+ localContext.trace(`Verifying the '${statementString}' derived statement as an equality...`, statementNode);
128
+
129
+ const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
130
+ const verifiedAhead = true;
131
+
132
+ return verifiedAhead;
133
+ });
134
+
135
+ derivedStatementVerifiedAsEquality = equalityVerified; ///
136
+
137
+ if (derivedStatementVerifiedAsEquality) {
138
+ localContext.debug(`...verified the '${statementString}' derived statement as an equality.`, statementNode);
139
+ }
140
+ }
141
+
142
+ return derivedStatementVerifiedAsEquality;
143
+ }
144
+
145
+ function verifyDerivedStatementAsJudgement(statementNode, assignments, derived, localContext) {
146
+ let derivedStatementVerifiedAsJudgement = true;
147
+
148
+ const judgementNode = judgementNodeQuery(statementNode);
149
+
150
+ if (judgementNode !== null) {
151
+ const statementString = localContext.nodeAsString(statementNode);
152
+
153
+ localContext.trace(`Verifying the '${statementString}' derived statement as a judgement...`, statementNode);
154
+
155
+ const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
156
+
157
+ derivedStatementVerifiedAsJudgement = judgementVerified; ///
158
+
159
+ if (derivedStatementVerifiedAsJudgement) {
160
+ localContext.debug(`...verified the '${statementString}' derived statement as a judgement.`, statementNode);
161
+ }
162
+ }
163
+
164
+ return derivedStatementVerifiedAsJudgement;
165
+ }
166
+
167
+ function verifyDerivedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
168
+ let statementVerifiedAsTypeAssertion = true; ///
169
+
170
+ const typeAssertionNode = typeAssertionNodeQuery(statementNode);
171
+
172
+ if (typeAssertionNode !== null) {
173
+ const statementString = localContext.nodeAsString(statementNode);
174
+
175
+ localContext.trace(`Verifying the '${statementString}' derived statement as a type assertion...`, statementNode);
176
+
177
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
178
+
179
+ statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
180
+
181
+ if (statementVerifiedAsTypeAssertion) {
182
+ localContext.debug(`...verified the '${statementString}' derived statement as a type assertion.`, statementNode);
183
+ }
184
+ }
185
+
186
+ return statementVerifiedAsTypeAssertion;
187
+ }