occam-verify-cli 0.0.869 → 0.0.870

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 (89) hide show
  1. package/lib/conclusion.js +3 -3
  2. package/lib/equality.js +2 -4
  3. package/lib/equivalence.js +1 -1
  4. package/lib/premise.js +4 -4
  5. package/lib/ruleNames.js +1 -29
  6. package/lib/substitution/metastatementForMetavariable.js +3 -2
  7. package/lib/substitution/statementForMetavariable.js +27 -64
  8. package/lib/substitution/termForVariable.js +5 -5
  9. package/lib/utilities/verifier.js +86 -0
  10. package/lib/verifier/node/metastatement.js +41 -28
  11. package/lib/verifier/node/statementAsCombinator.js +41 -28
  12. package/lib/verifier/node/termAsConstructor.js +30 -22
  13. package/lib/verifier/nodes/equality.js +27 -32
  14. package/lib/verifier/nodes/intrinsicLevel.js +25 -34
  15. package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
  16. package/lib/verifier/nodes/metaLevel.js +25 -34
  17. package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
  18. package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
  19. package/lib/verify/argumentAgainstArgument.js +24 -0
  20. package/lib/verify/containment.js +5 -5
  21. package/lib/verify/equality.js +9 -9
  22. package/lib/verify/metaDerivation.js +19 -19
  23. package/lib/verify/metaLemma.js +1 -1
  24. package/lib/verify/metaproof.js +4 -6
  25. package/lib/verify/metavariable.js +7 -5
  26. package/lib/verify/metavariableAgainstMetastatement.js +44 -0
  27. package/lib/verify/metavariableAgainstStatement.js +65 -0
  28. package/lib/verify/statement.js +4 -4
  29. package/lib/verify/statementAgainstMetaType.js +24 -0
  30. package/lib/verify/statementAtainstStatement.js +52 -0
  31. package/lib/verify/term.js +7 -8
  32. package/lib/verify/termAgainstTerm.js +22 -0
  33. package/lib/verify/termAgainstType.js +26 -0
  34. package/lib/verify/terms.js +2 -3
  35. package/lib/verify/type.js +7 -5
  36. package/lib/verify/typeAssertion.js +45 -40
  37. package/lib/verify/variable.js +7 -5
  38. package/lib/verify/variableAgainstTerm.js +70 -0
  39. package/package.json +4 -4
  40. package/src/conclusion.js +2 -2
  41. package/src/equality.js +3 -9
  42. package/src/equivalence.js +1 -1
  43. package/src/premise.js +3 -3
  44. package/src/ruleNames.js +0 -7
  45. package/src/substitution/metastatementForMetavariable.js +3 -1
  46. package/src/substitution/statementForMetavariable.js +32 -74
  47. package/src/substitution/termForVariable.js +3 -3
  48. package/src/utilities/verifier.js +46 -0
  49. package/src/verifier/node/metastatement.js +41 -34
  50. package/src/verifier/node/statementAsCombinator.js +39 -32
  51. package/src/verifier/node/termAsConstructor.js +30 -25
  52. package/src/verifier/nodes/equality.js +31 -36
  53. package/src/verifier/nodes/intrinsicLevel.js +30 -38
  54. package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
  55. package/src/verifier/nodes/metaLevel.js +30 -38
  56. package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
  57. package/src/verifier/nodes/termAgainstConstructor.js +30 -71
  58. package/src/verify/argumentAgainstArgument.js +15 -0
  59. package/src/verify/containment.js +4 -4
  60. package/src/verify/equality.js +8 -8
  61. package/src/verify/metaDerivation.js +18 -18
  62. package/src/verify/metaLemma.js +2 -2
  63. package/src/verify/metaproof.js +3 -6
  64. package/src/verify/metavariable.js +7 -5
  65. package/src/verify/metavariableAgainstMetastatement.js +42 -0
  66. package/src/verify/metavariableAgainstStatement.js +77 -0
  67. package/src/verify/statement.js +5 -5
  68. package/src/verify/statementAgainstMetaType.js +21 -0
  69. package/src/verify/statementAtainstStatement.js +60 -0
  70. package/src/verify/term.js +13 -17
  71. package/src/verify/termAgainstTerm.js +20 -0
  72. package/src/verify/termAgainstType.js +28 -0
  73. package/src/verify/terms.js +1 -3
  74. package/src/verify/type.js +7 -5
  75. package/src/verify/typeAssertion.js +56 -55
  76. package/src/verify/variable.js +7 -5
  77. package/src/verify/variableAgainstTerm.js +86 -0
  78. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
  79. package/lib/verifier/nodes/substitution.js +0 -223
  80. package/lib/verify/givenMetavariable.js +0 -31
  81. package/lib/verify/givenType.js +0 -31
  82. package/lib/verify/givenVariable.js +0 -31
  83. package/lib/verify/termAndGivenType.js +0 -39
  84. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
  85. package/src/verifier/nodes/substitution.js +0 -125
  86. package/src/verify/givenMetavariable.js +0 -31
  87. package/src/verify/givenType.js +0 -31
  88. package/src/verify/givenVariable.js +0 -31
  89. package/src/verify/termAndGivenType.js +0 -37
@@ -1,89 +1,86 @@
1
1
  "use strict";
2
2
 
3
3
  import NodesVerifier from "../../verifier/nodes";
4
- import termAgainstConstructorNodesVerifier from "../../verifier/nodes/termAgainstConstructor";
4
+ import verifyArgumentAgainstArgument from "../../verify/argumentAgainstArgument";
5
+ import verifyStatementAgainstMetaType from "../../verify/statementAgainstMetaType";
5
6
 
6
7
  import { nodeQuery } from "../../utilities/query";
7
- import { STATEMENT_META_TYPE_NAME } from "../../metaTypeNames";
8
- import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
8
+ import { verifyNodes } from "../../utilities/verifier";
9
9
 
10
- const metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
11
- statementNodeQuery = nodeQuery("/metaArgument/statement!"),
12
- metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
10
+ const argumentNodeQuery = nodeQuery("/argument!"),
11
+ metaArgumentMetaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
12
+ metaArgumentStatementNodeQuery = nodeQuery("/metaArgument/statement!");
13
13
 
14
14
  class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
15
15
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
16
- let nonTerminalNodeVerified = false;
16
+ let nonTerminalNodeVerified;
17
17
 
18
- const nonTerminalNode = nonTerminalNodeA, ///
19
- combinatorNonTerminalNode = nonTerminalNodeB, ///
20
- ruleName = nonTerminalNode.getRuleName(), ///
21
- combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
18
+ const nodeQueryMaps = [
19
+ {
20
+ nodeQueryA: metaArgumentStatementNodeQuery,
21
+ nodeQueryB: metaArgumentMetaTypeNodeQuery,
22
+ verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
23
+ let nonTerminalNodeVerified;
22
24
 
23
- if (ruleName === combinatorRuleName) {
24
- switch (ruleName) {
25
- case META_ARGUMENT_RULE_NAME: {
26
- const metaArgumentNode = nonTerminalNode, ///
27
- combinatorMetaargumentNode = combinatorNonTerminalNode, ///
28
- metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead);
25
+ const metaArgumentMetaTypeNodeB = nodeB, ///
26
+ metaArgumentStatementNodeA = nodeA, ///
27
+ metaArgumentStatementVerifiedAgainstMetaArgumentMetaType =
29
28
 
30
- nonTerminalNodeVerified = metaArgumentNodeVerified; ///
29
+ this.verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead);
31
30
 
32
- break;
33
- }
31
+ nonTerminalNodeVerified = metaArgumentStatementVerifiedAgainstMetaArgumentMetaType; ///
34
32
 
35
- case ARGUMENT_RULE_NAME: {
36
- const argumentNode = nonTerminalNode, ///
37
- constructorArgumentNode = combinatorNonTerminalNode, ///
38
- argumentNodeVerified = termAgainstConstructorNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
33
+ return nonTerminalNodeVerified;
34
+ }
35
+ },
36
+ {
37
+ nodeQueryA: argumentNodeQuery,
38
+ nodeQueryB: argumentNodeQuery,
39
+ verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
40
+ let nonTerminalNodeVerified;
39
41
 
40
- nonTerminalNodeVerified = argumentNodeVerified; ///
42
+ const argumentNodeA = nodeA, ///
43
+ argumentNodeB = nodeB, ///
44
+ argumentNodeVerifiedAgainstArgumentNode =
41
45
 
42
- break;
43
- }
46
+ this.verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead);
44
47
 
45
- default: {
46
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
48
+ nonTerminalNodeVerified = argumentNodeVerifiedAgainstArgumentNode; ///
47
49
 
48
- break;
50
+ return nonTerminalNodeVerified;
49
51
  }
50
52
  }
51
- }
53
+ ];
54
+
55
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
56
+
57
+ nonTerminalNodeVerified = nodesVerified ?
58
+ true :
59
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
52
60
 
53
61
  return nonTerminalNodeVerified;
54
62
  }
55
63
 
56
- verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead) {
57
- let metaArgumentNodeVerified = false;
64
+ verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead) {
65
+ let metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = false;
58
66
 
59
- const metaArgumentString = localContext.nodeAsString(metaArgumentNode);
67
+ const metaTypeNode = metaArgumentMetaTypeNodeB, ///
68
+ statementNode = metaArgumentStatementNodeA, ///
69
+ statementVerifiedAgainstMetaType = verifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, verifyAhead);
60
70
 
61
- const statementNode = statementNodeQuery(metaArgumentNode),
62
- combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
71
+ metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = statementVerifiedAgainstMetaType; ///
63
72
 
64
- if (statementNode === null) {
65
- localContext.debug(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
66
- } else {
67
- if (combinatorMetaTYpeNode === null) {
68
- const combinatorMetaargumentString = localContext.nodeAsString(combinatorMetaargumentNode);
73
+ return metaArgumentStatementVerifiedAgainstMetaArgumentMetaType;
74
+ }
69
75
 
70
- localContext.debug(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
71
- } else {
72
- const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
73
- content = combinatorMetaTypeTerminalNode.getContent(),
74
- contentStatementMetaType = (content === STATEMENT_META_TYPE_NAME);
76
+ verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead) {
77
+ let argumentNodeVerifiedAgainstArgumentNode;
75
78
 
76
- if (!contentStatementMetaType) {
77
- localContext.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE_NAME}' but got '${content}' instead.`, metaArgumentNode);
78
- } else {
79
- const verifiedAhead = verifyAhead();
79
+ const argumentVerifiedAgainstArgument = verifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, verifyAhead);
80
80
 
81
- metaArgumentNodeVerified = verifiedAhead; ///
82
- }
83
- }
84
- }
81
+ argumentNodeVerifiedAgainstArgumentNode = argumentVerifiedAgainstArgument; ///
85
82
 
86
- return metaArgumentNodeVerified;
83
+ return argumentNodeVerifiedAgainstArgumentNode;
87
84
  }
88
85
  }
89
86
 
@@ -1,102 +1,61 @@
1
1
  "use strict";
2
2
 
3
3
  import NodesVerifier from "../../verifier/nodes";
4
+ import verifyTermAgainstType from "../../verify/termAgainstType";
4
5
 
5
- import { first } from "../../utilities/array";
6
6
  import { nodeQuery } from "../../utilities/query";
7
- import { ARGUMENT_RULE_NAME } from "../../ruleNames";
7
+ import { verifyNodes } from "../../utilities/verifier";
8
8
 
9
9
  const termNodeQuery = nodeQuery("/argument/term!"),
10
10
  typeNodeQuery = nodeQuery("/argument/type!");
11
11
 
12
12
  class TermAgainstConstructorNodesVerifier extends NodesVerifier {
13
13
  verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
14
- let nonTerminalNodeVerified = false;
14
+ let nonTerminalNodeVerified;
15
15
 
16
- const nonTerminalNode = nonTerminalNodeA, ///
17
- constructorNonTerminalNode = nonTerminalNodeB, ///
18
- ruleName = nonTerminalNode.getRuleName(), ///
19
- constructorRuleName = constructorNonTerminalNode.getRuleName(); ///
16
+ const nodeQueryMaps = [
17
+ {
18
+ nodeQueryA: termNodeQuery,
19
+ nodeQueryB: typeNodeQuery,
20
+ verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
21
+ let nonTerminalNodeVerified;
20
22
 
21
- if (ruleName === constructorRuleName) {
22
- switch (ruleName) {
23
- case ARGUMENT_RULE_NAME: {
24
- const argumentNode = nonTerminalNode, ///
25
- constructorArgumentNode = constructorNonTerminalNode, ///
26
- argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
23
+ const termNodeA = nodeA, ///
24
+ typeNodeB = nodeB, ///
25
+ termNodeVerifiedAgainstTypeNode =
27
26
 
28
- nonTerminalNodeVerified = argumentNodeVerified; ///
27
+ this.verifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, verifyAhead);
29
28
 
30
- break;
31
- }
32
-
33
- default: {
34
- nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode, localContext, verifyAhead);
29
+ nonTerminalNodeVerified = termNodeVerifiedAgainstTypeNode; ///
35
30
 
36
- break;
31
+ return nonTerminalNodeVerified;
37
32
  }
38
33
  }
39
- }
40
-
41
- return nonTerminalNodeVerified;
42
- }
34
+ ];
43
35
 
44
- verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead) {
45
- let argumentNodeVerified = false;
36
+ const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
46
37
 
47
- const argumentString = localContext.nodeAsString(argumentNode);
38
+ nonTerminalNodeVerified = nodesVerified ?
39
+ true :
40
+ super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
48
41
 
49
- const typeNode = typeNodeQuery(argumentNode);
50
-
51
- if (typeNode !== null) {
52
- localContext.debug(`The '${argumentString}' argument should be a term, not a type.`, argumentNode);
53
- } else {
54
- const termNode = termNodeQuery(argumentNode);
55
-
56
- if (!argumentNodeVerified) {
57
- const constructorTermNode = termNodeQuery(constructorArgumentNode);
58
-
59
- if (constructorTermNode !== null) {
60
- const node = termNode, ///
61
- constructorNode = constructorTermNode, ///
62
- nodeVerified = this.verifyNode(node, constructorNode, localContext, verifyAhead);
63
-
64
- argumentNodeVerified = nodeVerified; ///
65
- }
66
- }
67
-
68
- if (!argumentNodeVerified) {
69
- const constructorTypeNode = typeNodeQuery(constructorArgumentNode);
70
-
71
- if (constructorTypeNode !== null) {
72
- const { verifyTerm } = termAgainstConstructorNodesVerifier,
73
- terms = [],
74
- termVerified = verifyTerm(termNode, terms, localContext, () => {
75
- let verifiedAhead = false;
76
-
77
- const firstTerm = first(terms),
78
- term = firstTerm, ///
79
- termType = term.getType(),
80
- constructorType = localContext.findTypeByTypeNode(constructorTypeNode),
81
- termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(constructorType);
42
+ return nonTerminalNodeVerified;
43
+ }
82
44
 
83
- if (termTypeEqualToOrSubTypeOfType) {
84
- verifiedAhead = verifyAhead();
85
- }
45
+ verifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, verifyAhead) {
46
+ let termNodeVerifiedAgainstTypeNode;
86
47
 
87
- return verifiedAhead;
88
- });
48
+ const { verifyTerm } = termAgainstConstructorNodesVerifier,
49
+ termNode = termNodeA, ///
50
+ typeNode = typeNodeB, ///
51
+ typeVerifiedAgainstTerm = verifyTermAgainstType(termNode, typeNode, localContext, verifyAhead, verifyTerm);
89
52
 
90
- argumentNodeVerified = termVerified; ///
91
- }
92
- }
93
- }
53
+ termNodeVerifiedAgainstTypeNode = typeVerifiedAgainstTerm; ///
94
54
 
95
- return argumentNodeVerified;
55
+ return termNodeVerifiedAgainstTypeNode;
96
56
  }
97
57
  }
98
58
 
99
59
  const termAgainstConstructorNodesVerifier = new TermAgainstConstructorNodesVerifier();
100
60
 
101
61
  export default termAgainstConstructorNodesVerifier;
102
-
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ import termAgainstConstructorNodesVerifier from "../verifier/nodes/termAgainstConstructor";
4
+
5
+ export default function verifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, verifyAhead) {
6
+ let argumentVerifiedAgainstArgument;
7
+
8
+ const nonTerminalNodeA = argumentNodeA, ///
9
+ nonTerminalNodeB = argumentNodeB, ///
10
+ nonTerminalNodeVerified = termAgainstConstructorNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
11
+
12
+ argumentVerifiedAgainstArgument = nonTerminalNodeVerified; ///
13
+
14
+ return argumentVerifiedAgainstArgument;
15
+ }
@@ -6,9 +6,9 @@ import { nodeQuery, nodesQuery } from "../utilities/query";
6
6
 
7
7
  const variableNodeQuery = nodeQuery("/term/variable!"),
8
8
  metaArgumentTermNodesQuery = nodesQuery("/metaArgument//term"),
9
- metaArgumentVariableNodesQuery = nodesQuery("/metaArgument//variable");
9
+ metastatementVariableNodesQuery = nodesQuery("/metastatement//variable");
10
10
 
11
- export default function verifyContainment(termNode, containmentNode, metaArgumentNode, localContext) {
11
+ export default function verifyContainment(termNode, containmentNode, metastatementNode, localContext) {
12
12
  let containmentVerified = false;
13
13
 
14
14
  const contained = containedFromContainmentNode(containmentNode),
@@ -17,7 +17,7 @@ export default function verifyContainment(termNode, containmentNode, metaArgumen
17
17
  if (false) {
18
18
  ///
19
19
  } else if (variableNode !== null) {
20
- const metaArgumentVariableNodes = metaArgumentVariableNodesQuery(metaArgumentNode),
20
+ const metaArgumentVariableNodes = metastatementVariableNodesQuery(metastatementNode),
21
21
  variableNodeMatchesMetaArgumentVariableNode = metaArgumentVariableNodes.some((metaArgumentVariableNode) => {
22
22
  const variableNodeMatchesMetaArgumentVariableNode = variableNode.match(metaArgumentVariableNode);
23
23
 
@@ -38,7 +38,7 @@ export default function verifyContainment(termNode, containmentNode, metaArgumen
38
38
  }
39
39
  }
40
40
  } else if (termNode !== null) {
41
- const metaArgumentTermNodes = metaArgumentTermNodesQuery(metaArgumentNode),
41
+ const metaArgumentTermNodes = metaArgumentTermNodesQuery(metastatementNode),
42
42
  termNodeMatchesMetaArgumentTermNode = metaArgumentTermNodes.some((metaArgumentTermNode) => {
43
43
  const termNodeMatchesMetaArgumentTermNode = termNode.match(metaArgumentTermNode);
44
44
 
@@ -19,7 +19,7 @@ export default function verifyEquality(equalityNode, assignments, derived, local
19
19
 
20
20
  const verifyEqualityFunctions = [
21
21
  verifyDerivedEquality,
22
- verifyGivenEquality
22
+ verifyStatedEquality
23
23
  ];
24
24
 
25
25
  equalityVerified = verifyEqualityFunctions.some((verifyEqualityFunction) => {
@@ -91,13 +91,13 @@ function verifyDerivedEquality(equalityNode, assignments, derived, localContext,
91
91
  return derivedEqualityVerified;
92
92
  }
93
93
 
94
- function verifyGivenEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
95
- let givenEqualityVerified = false;
94
+ function verifyStatedEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
95
+ let statedEqualityVerified = false;
96
96
 
97
97
  if (!derived) {
98
98
  const equalityString = localContext.nodeAsString(equalityNode);
99
99
 
100
- localContext.trace(`Verifying the '${equalityString}' given equality...`, equalityNode);
100
+ localContext.trace(`Verifying the '${equalityString}' stated equality...`, equalityNode);
101
101
 
102
102
  const terms = [],
103
103
  leftTermNode = leftTermNodeQuery(equalityNode),
@@ -131,12 +131,12 @@ function verifyGivenEquality(equalityNode, assignments, derived, localContext, v
131
131
  return verifiedAhead;
132
132
  });
133
133
 
134
- givenEqualityVerified = termsVerified; ///
134
+ statedEqualityVerified = termsVerified; ///
135
135
 
136
- if (givenEqualityVerified) {
137
- localContext.trace(`...verified the '${equalityString}' given equality.`, equalityNode);
136
+ if (statedEqualityVerified) {
137
+ localContext.trace(`...verified the '${equalityString}' stated equality.`, equalityNode);
138
138
  }
139
139
  }
140
140
 
141
- return givenEqualityVerified;
141
+ return statedEqualityVerified;
142
142
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import LocalContext from "../context/local";
4
3
  import MetaproofStep from "../step/metaproof";
4
+ import LocalMetaContext from "../context/localMeta";
5
5
  import verifyMetaSuppositions from "../verify/metaSuppositions";
6
6
  import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
7
7
  import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
@@ -15,13 +15,13 @@ const childNodesQuery = nodesQuery("/metaDerivation|metaSubDerivation/*"),
15
15
  metaSuppositionNodesQuery = nodesQuery("/metaSubproof/metaSupposition"),
16
16
  metaSubDerivationNodeQuery = nodeQuery("/metaSubproof/metaSubDerivation");
17
17
 
18
- export default function verifyMetaDerivation(metaDerivationNode, localContext) {
18
+ export default function verifyMetaDerivation(metaDerivationNode, localMetaContext) {
19
19
  let metaDerivationVerified;
20
20
 
21
21
  const childNodes = childNodesQuery(metaDerivationNode);
22
22
 
23
23
  metaDerivationVerified = childNodes.every((childNode) => {
24
- const childVerified = verifyChild(childNode, localContext);
24
+ const childVerified = verifyChild(childNode, localMetaContext);
25
25
 
26
26
  if (childVerified) {
27
27
  return true;
@@ -31,13 +31,13 @@ export default function verifyMetaDerivation(metaDerivationNode, localContext) {
31
31
  return metaDerivationVerified;
32
32
  }
33
33
 
34
- function verifyMetaSubDerivation(metaSubDerivationNode, localContext) {
34
+ function verifyMetaSubDerivation(metaSubDerivationNode, localMetaContext) {
35
35
  let metaSubDerivationVerified;
36
36
 
37
37
  const childNodes = childNodesQuery(metaSubDerivationNode);
38
38
 
39
39
  metaSubDerivationVerified = childNodes.every((childNode) => {
40
- const childVerified = verifyChild(childNode, localContext);
40
+ const childVerified = verifyChild(childNode, localMetaContext);
41
41
 
42
42
  if (childVerified) {
43
43
  return true;
@@ -47,18 +47,18 @@ function verifyMetaSubDerivation(metaSubDerivationNode, localContext) {
47
47
  return metaSubDerivationVerified;
48
48
  }
49
49
 
50
- function verifyMetaSubproof(metaSubproofNode, localContext) {
50
+ function verifyMetaSubproof(metaSubproofNode, localMetaContext) {
51
51
  let metaSubproofVerified = false;
52
52
 
53
- localContext = LocalContext.fromLocalContext(localContext); ///
53
+ localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
54
54
 
55
55
  const metaSuppositions = [],
56
56
  metaSuppositionNodes = metaSuppositionNodesQuery(metaSubproofNode),
57
- metaSuppositionsVerified = verifyMetaSuppositions(metaSuppositionNodes, metaSuppositions, localContext);
57
+ metaSuppositionsVerified = verifyMetaSuppositions(metaSuppositionNodes, metaSuppositions, localMetaContext);
58
58
 
59
59
  if (metaSuppositionsVerified) {
60
60
  const metaSubDerivationNode = metaSubDerivationNodeQuery(metaSubproofNode),
61
- metaSubDerivationVerified = verifyMetaSubDerivation(metaSubDerivationNode, localContext);
61
+ metaSubDerivationVerified = verifyMetaSubDerivation(metaSubDerivationNode, localMetaContext);
62
62
 
63
63
  if (metaSubDerivationVerified) {
64
64
  metaSubproofVerified = true;
@@ -68,7 +68,7 @@ function verifyMetaSubproof(metaSubproofNode, localContext) {
68
68
  return metaSubproofVerified;
69
69
  }
70
70
 
71
- function verifyChild(childNode, localContext) {
71
+ function verifyChild(childNode, localMetaContext) {
72
72
  let childVerified = false;
73
73
 
74
74
  const childNodeRuleName = childNode.getRuleName();
@@ -79,12 +79,12 @@ function verifyChild(childNode, localContext) {
79
79
 
80
80
  const metaSubproofNode = childNode; ///
81
81
 
82
- metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, localContext);
82
+ metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, localMetaContext);
83
83
 
84
84
  if (metaSubproofVerified) {
85
85
  const metaproofStep = MetaproofStep.fromMetaSubproofNode(metaSubproofNode);
86
86
 
87
- localContext.addMetaproofStep(metaproofStep);
87
+ localMetaContext.addMetaproofStep(metaproofStep);
88
88
 
89
89
  childVerified = true;
90
90
  }
@@ -99,10 +99,10 @@ function verifyChild(childNode, localContext) {
99
99
  assignments = [],
100
100
  qualifiedMetastatementNode = childNode; ///
101
101
 
102
- qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, assignments, derived, localContext);
102
+ qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, assignments, derived, localMetaContext);
103
103
 
104
104
  if (qualifiedMetastatementVerified) {
105
- const assignmentAssigned = assignAssignment(assignments, localContext);
105
+ const assignmentAssigned = assignAssignment(assignments, localMetaContext);
106
106
 
107
107
  qualifiedMetastatementVerified = assignmentAssigned; ///
108
108
  }
@@ -111,7 +111,7 @@ function verifyChild(childNode, localContext) {
111
111
  const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
112
112
  metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
113
113
 
114
- localContext.addMetaproofStep(metaproofStep);
114
+ localMetaContext.addMetaproofStep(metaproofStep);
115
115
 
116
116
  childVerified = true; ///
117
117
  }
@@ -126,10 +126,10 @@ function verifyChild(childNode, localContext) {
126
126
  assignments = [],
127
127
  unqualifiedMetastatementNode = childNode; ///
128
128
 
129
- unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localContext);
129
+ unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext);
130
130
 
131
131
  if (unqualifiedMetastatementVerified) {
132
- const assignmentAssigned = assignAssignment(assignments, localContext);
132
+ const assignmentAssigned = assignAssignment(assignments, localMetaContext);
133
133
 
134
134
  unqualifiedMetastatementVerified = assignmentAssigned; ///
135
135
  }
@@ -138,7 +138,7 @@ function verifyChild(childNode, localContext) {
138
138
  const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
139
139
  metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
140
140
 
141
- localContext.addMetaproofStep(metaproofStep);
141
+ localMetaContext.addMetaproofStep(metaproofStep);
142
142
 
143
143
  childVerified = true;
144
144
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import MetaLemma from "../metaLemma";
4
4
  import verifyLabels from "../verify/labels";
5
- import verifyMetaProof from "../verify/metaproof";
5
+ import verifyMetaproof from "../verify/metaproof";
6
6
  import LocalMetaContext from "../context/localMeta";
7
7
  import verifyMetaConsequent from "../verify/metaConsequent";
8
8
  import verifyMetaSuppositions from "../verify/metaSuppositions";
@@ -44,7 +44,7 @@ export default function verifyMetaLemma(metaLemmaNode, fileContext) {
44
44
  const metaproofNode = metaproofNodeQuery(metaLemmaNode),
45
45
  firstMetaConsequent = first(metaConsequents),
46
46
  metaConsequent = firstMetaConsequent, ///
47
- metaproofVerified = verifyMetaProof(metaproofNode, metaConsequent, localMetaContext);
47
+ metaproofVerified = verifyMetaproof(metaproofNode, metaConsequent, localMetaContext);
48
48
 
49
49
  if (metaproofVerified) {
50
50
  const metaLemma = MetaLemma.fromLabelsMetaSuppositionsMetaConsequentAndLocalMetaContext(labels, metaSuppositions, metaConsequent, localMetaContext);
@@ -1,22 +1,19 @@
1
1
  "use strict";
2
2
 
3
- import LocalContext from "../context/local";
4
3
  import verifyMetaDerivation from "../verify/metaDerivation";
5
4
 
6
5
  import { nodeQuery } from "../utilities/query";
7
6
 
8
7
  const metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!");
9
8
 
10
- export default function verifyMetaproof(metaproofNode, conclusion, localContext) {
9
+ export default function verifyMetaproof(metaproofNode, conclusion, localMetaproof) {
11
10
  let metaproofVerified = false;
12
11
 
13
- localContext = LocalContext.fromLocalContext(localContext); ///
14
-
15
12
  const metaDerivationNode = metaDerivationNodeQuery(metaproofNode),
16
- metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, localContext);
13
+ metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, localMetaproof);
17
14
 
18
15
  if (metaDerivationVerified) {
19
- const lastMetaproofStep = localContext.getLastMetaproofStep();
16
+ const lastMetaproofStep = localMetaproof.getLastMetaproofStep();
20
17
 
21
18
  if (lastMetaproofStep !== null) {
22
19
  const metaproofStep = lastMetaproofStep, ///
@@ -2,7 +2,6 @@
2
2
 
3
3
  import Metavariable from "../metavariable";
4
4
  import MetavariableAssignment from "../assignment/metavariable";
5
- import verifyGivenMetavariable from "../verify/givenMetavariable";
6
5
 
7
6
  import { nodeQuery } from "../utilities/query";
8
7
 
@@ -44,16 +43,19 @@ export default function verifyMetavariable(metavariableNode, metaTypeNode, fileC
44
43
  }
45
44
 
46
45
  export function verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead) {
47
- let standaloneMetavariableVerified;
46
+ let standaloneMetavariableVerified = false;
48
47
 
49
48
  const metavariableString = localMetaContext.nodeAsString(metavariableNode);
50
49
 
51
50
  localMetaContext.trace(`Verifying the '${metavariableString}' standalone metavariable...`, metavariableNode);
52
51
 
53
- const metavariables = [],
54
- givenMetavariableVerified = verifyGivenMetavariable(metavariableNode, metavariables, localMetaContext, verifyAhead);
52
+ const metavariablePresent = localMetaContext.isMetavariablePresentByMetavariableNode(metavariableNode);
55
53
 
56
- standaloneMetavariableVerified = givenMetavariableVerified; ///
54
+ if (metavariablePresent) {
55
+ const verifiedAhead = verifyAhead();
56
+
57
+ standaloneMetavariableVerified = verifiedAhead; ///
58
+ }
57
59
 
58
60
  if (standaloneMetavariableVerified) {
59
61
  localMetaContext.debug(`...verified the '${metavariableString}' standalone metavariable.`, metavariableNode);
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ import MetastatementForMetavariableSubstitution from "../substitution/metastatementForMetavariable";
4
+
5
+ export default function verifyMetavariableAgainstMetastatement(metavariableNode, metastatementNode, substitutions, localContextA, localMetaContextB, verifyAhead) {
6
+ let metavariableVerifiedAgainstMetastatement = false;
7
+
8
+ const substitution = substitutions.find((substitution) => {
9
+ const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNode);
10
+
11
+ if (substitutionMatchesMetavariableNodeA) {
12
+ return true;
13
+ }
14
+ }) || null;
15
+
16
+ if (substitution !== null) {
17
+ const metastatementNodeMatches = substitution.matchMetastatementNode(metastatementNode);
18
+
19
+ if (metastatementNodeMatches) {
20
+ const verifiedAhead = verifyAhead();
21
+
22
+ metavariableVerifiedAgainstMetastatement = verifiedAhead; ///
23
+ }
24
+ } else {
25
+ let verifiedAhead;
26
+
27
+ const metastatementForMetavariableSubstitution = MetastatementForMetavariableSubstitution.fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode),
28
+ substitution = metastatementForMetavariableSubstitution; ///
29
+
30
+ substitutions.push(substitution);
31
+
32
+ verifiedAhead = verifyAhead();
33
+
34
+ if (!verifiedAhead) {
35
+ substitutions.pop();
36
+ }
37
+
38
+ metavariableVerifiedAgainstMetastatement = verifiedAhead; ///
39
+ }
40
+
41
+ return metavariableVerifiedAgainstMetastatement;
42
+ }