occam-verify-cli 0.0.967 → 0.0.971

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 (146) hide show
  1. package/bin/action/verify.js +6 -22
  2. package/bin/main.js +27 -0
  3. package/lib/constants.js +5 -1
  4. package/lib/context/file.js +48 -53
  5. package/lib/context/local.js +45 -39
  6. package/lib/context/release.js +3 -3
  7. package/lib/declaration.js +9 -7
  8. package/lib/equivalence.js +23 -21
  9. package/lib/judgement.js +3 -3
  10. package/lib/label.js +3 -3
  11. package/lib/log.js +3 -3
  12. package/lib/metaType.js +7 -7
  13. package/lib/metavariable.js +12 -43
  14. package/lib/node/term/bracketed.js +16 -0
  15. package/lib/proofStep.js +3 -29
  16. package/lib/releaseContext/initialise.js +11 -17
  17. package/lib/resolve/substitutions.js +99 -0
  18. package/lib/rule.js +10 -6
  19. package/lib/substitution/statementForMetavariable.js +93 -98
  20. package/lib/substitution/termForVariable.js +45 -54
  21. package/lib/substitution.js +51 -9
  22. package/lib/substitutions.js +165 -12
  23. package/lib/term.js +8 -1
  24. package/lib/topLevelAssertion.js +10 -6
  25. package/lib/type.js +5 -5
  26. package/lib/unifier/metaLevel.js +10 -3
  27. package/lib/unifier/statementWithCombinator.js +6 -6
  28. package/lib/unifier.js +2 -2
  29. package/lib/unify/metavariableWithStatement.js +13 -48
  30. package/lib/unify/metavariableWithStatementGivenSubstitution.js +39 -0
  31. package/lib/unify/premiseWithProofStep.js +3 -3
  32. package/lib/unify/statement/qualified.js +117 -0
  33. package/lib/unify/statement/unqualified.js +25 -0
  34. package/lib/unify/statementWithBracketedCombinator.js +3 -3
  35. package/lib/unify/statementWithCombinators.js +5 -5
  36. package/lib/unify/statementWithMetaType.js +3 -3
  37. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +45 -0
  38. package/lib/unify/suppositionWithProffStep.js +3 -3
  39. package/lib/unify/variableWithTerm.js +11 -26
  40. package/lib/utilities/array.js +5 -14
  41. package/lib/utilities/assertion.js +24 -0
  42. package/lib/utilities/brackets.js +60 -0
  43. package/lib/utilities/message.js +52 -0
  44. package/lib/utilities/name.js +7 -7
  45. package/lib/utilities/node.js +10 -17
  46. package/lib/utilities/string.js +1 -7
  47. package/lib/utilities/subproof.js +19 -0
  48. package/lib/utilities/unify.js +30 -11
  49. package/lib/variable.js +8 -8
  50. package/lib/verifier/metaLevel.js +6 -6
  51. package/lib/verifier/statementAsCombinator.js +2 -2
  52. package/lib/verify/assertion/contained.js +62 -34
  53. package/lib/verify/assertion/defined.js +53 -48
  54. package/lib/verify/assertion/subproof.js +9 -9
  55. package/lib/verify/assertion/type.js +11 -11
  56. package/lib/verify/conclusion.js +6 -6
  57. package/lib/verify/consequent.js +6 -6
  58. package/lib/verify/declaration/metavariable.js +2 -2
  59. package/lib/verify/declaration.js +34 -20
  60. package/lib/verify/equality.js +13 -13
  61. package/lib/verify/frame.js +38 -24
  62. package/lib/verify/judgement.js +13 -13
  63. package/lib/verify/metavariable.js +2 -2
  64. package/lib/verify/premise.js +5 -5
  65. package/lib/verify/proofStep.js +15 -24
  66. package/lib/verify/statement/qualified.js +15 -124
  67. package/lib/verify/statement/unqualified.js +23 -24
  68. package/lib/verify/statement.js +24 -24
  69. package/lib/verify/statementGivenMetaType.js +18 -9
  70. package/lib/verify/supposition.js +5 -5
  71. package/package.json +2 -2
  72. package/src/constants.js +1 -0
  73. package/src/context/file.js +49 -55
  74. package/src/context/local.js +34 -31
  75. package/src/context/release.js +2 -2
  76. package/src/declaration.js +12 -10
  77. package/src/equivalence.js +27 -26
  78. package/src/judgement.js +2 -2
  79. package/src/label.js +2 -2
  80. package/src/log.js +1 -1
  81. package/src/metaType.js +7 -7
  82. package/src/metavariable.js +10 -49
  83. package/src/node/term/bracketed.js +9 -0
  84. package/src/proofStep.js +3 -48
  85. package/src/releaseContext/initialise.js +13 -24
  86. package/src/resolve/substitutions.js +134 -0
  87. package/src/rule.js +10 -5
  88. package/src/substitution/statementForMetavariable.js +99 -85
  89. package/src/substitution/termForVariable.js +50 -65
  90. package/src/substitution.js +46 -8
  91. package/src/substitutions.js +176 -10
  92. package/src/term.js +6 -0
  93. package/src/topLevelAssertion.js +10 -5
  94. package/src/type.js +4 -4
  95. package/src/unifier/metaLevel.js +11 -3
  96. package/src/unifier/statementWithCombinator.js +5 -5
  97. package/src/unifier.js +1 -1
  98. package/src/unify/metavariableWithStatement.js +17 -71
  99. package/src/unify/metavariableWithStatementGivenSubstitution.js +39 -0
  100. package/src/unify/premiseWithProofStep.js +1 -1
  101. package/src/unify/statement/qualified.js +183 -0
  102. package/src/unify/statement/unqualified.js +24 -0
  103. package/src/unify/statementWithBracketedCombinator.js +2 -2
  104. package/src/unify/statementWithCombinators.js +4 -4
  105. package/src/unify/statementWithMetaType.js +2 -2
  106. package/src/unify/statementWithSttaemetnGivenEquivalences.js +51 -0
  107. package/src/unify/suppositionWithProffStep.js +1 -1
  108. package/src/unify/variableWithTerm.js +14 -35
  109. package/src/utilities/array.js +1 -16
  110. package/src/utilities/assertion.js +19 -0
  111. package/src/utilities/brackets.js +56 -0
  112. package/src/utilities/name.js +8 -8
  113. package/src/utilities/node.js +14 -17
  114. package/src/utilities/string.js +2 -2
  115. package/src/utilities/subproof.js +18 -0
  116. package/src/utilities/unify.js +24 -12
  117. package/src/variable.js +11 -11
  118. package/src/verifier/metaLevel.js +5 -5
  119. package/src/verifier/statementAsCombinator.js +2 -2
  120. package/src/verify/assertion/contained.js +80 -40
  121. package/src/verify/assertion/defined.js +66 -57
  122. package/src/verify/assertion/subproof.js +8 -8
  123. package/src/verify/assertion/type.js +11 -11
  124. package/src/verify/conclusion.js +8 -8
  125. package/src/verify/consequent.js +8 -8
  126. package/src/verify/declaration/metavariable.js +4 -3
  127. package/src/verify/declaration.js +46 -23
  128. package/src/verify/equality.js +13 -13
  129. package/src/verify/frame.js +48 -28
  130. package/src/verify/judgement.js +13 -13
  131. package/src/verify/metavariable.js +3 -3
  132. package/src/verify/premise.js +6 -6
  133. package/src/verify/proofStep.js +14 -31
  134. package/src/verify/statement/qualified.js +18 -199
  135. package/src/verify/statement/unqualified.js +25 -31
  136. package/src/verify/statement.js +23 -23
  137. package/src/verify/statementGivenMetaType.js +23 -12
  138. package/src/verify/supposition.js +6 -6
  139. package/lib/unify/statementAtainstStatement.js +0 -49
  140. package/lib/utilities/lineIndex.js +0 -52
  141. package/lib/utilities/match.js +0 -59
  142. package/lib/utilities/verify.js +0 -19
  143. package/src/unify/statementAtainstStatement.js +0 -56
  144. package/src/utilities/match.js +0 -53
  145. package/src/utilities/verify.js +0 -14
  146. /package/src/utilities/{lineIndex.js → message.js} +0 -0
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ import bracketedTermNode from "../node/term/bracketed";
4
+ import bracketedStatementNode from "../node/statement/bracketed";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { BRACKETED_TERM_DEPTH, BRACKETED_STATEMENT_DEPTH } from "../constants";
8
+
9
+ const bracketedTermChildNodeQuery = nodeQuery("/term/argument/term!"),
10
+ bracketedStatementChildNodeQuery = nodeQuery("/statement/metaArgument/statement!");
11
+
12
+ export function stripBracketsFromTerm(statementNode) {
13
+ const bracketedTermChildNode = bracketedTermChildNodeFromTermNode(statementNode);
14
+
15
+ if (bracketedTermChildNode !== null) {
16
+ statementNode = bracketedTermChildNode; ///
17
+ }
18
+
19
+ return statementNode;
20
+ }
21
+
22
+ export function stripBracketsFromStatement(statementNode) {
23
+ const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
24
+
25
+ if (bracketedStatementChildNode !== null) {
26
+ statementNode = bracketedStatementChildNode; ///
27
+ }
28
+
29
+ return statementNode;
30
+ }
31
+
32
+ function bracketedTermChildNodeFromTermNode(termNode) {
33
+ let bracketedTermChildNode = null;
34
+
35
+ const depth = BRACKETED_TERM_DEPTH,
36
+ termNodeMatchBracketedTermNode = termNode.match(bracketedTermNode, depth);
37
+
38
+ if (termNodeMatchBracketedTermNode) {
39
+ bracketedTermChildNode = bracketedTermChildNodeQuery(termNode);
40
+ }
41
+
42
+ return bracketedTermChildNode;
43
+ }
44
+
45
+ function bracketedStatementChildNodeFromStatementNode(statementNode) {
46
+ let bracketedStatementChildNode = null;
47
+
48
+ const depth = BRACKETED_STATEMENT_DEPTH,
49
+ statementNodeMatchBracketedStatementNode = statementNode.match(bracketedStatementNode, depth);
50
+
51
+ if (statementNodeMatchBracketedStatementNode) {
52
+ bracketedStatementChildNode = bracketedStatementChildNodeQuery(statementNode);
53
+ }
54
+
55
+ return bracketedStatementChildNode;
56
+ }
@@ -14,14 +14,6 @@ export function typeNameFromTypeNode(typeNode) {
14
14
  return typeName;
15
15
  }
16
16
 
17
- export function nameFromMetavariableNode(metavariableNode) {
18
- const nameTerminalNode = nameTerminalNodeQuery(metavariableNode),
19
- nameTerminalNodeContent = nameTerminalNode.getContent(),
20
- name = nameTerminalNodeContent; ///
21
-
22
- return name;
23
- }
24
-
25
17
  export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
26
18
  const metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
27
19
  metaTypeTerminalNodeContent = metaTypeTerminalNode.getContent(),
@@ -29,3 +21,11 @@ export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
29
21
 
30
22
  return metaTypeName;
31
23
  }
24
+
25
+ export function metavariableNameFromMetavariableNode(metavariableNode) {
26
+ const nameTerminalNode = nameTerminalNodeQuery(metavariableNode),
27
+ nameTerminalNodeContent = nameTerminalNode.getContent(),
28
+ metavariableName = nameTerminalNodeContent; ///
29
+
30
+ return metavariableName;
31
+ }
@@ -4,8 +4,8 @@ import { parsersUtilities } from "occam-custom-grammars";
4
4
 
5
5
  import { nodeQuery } from "../utilities/query";
6
6
  import { combinedCustomGrammarFromNothing } from "./customGrammar";
7
- import { unqualifiedStatementTokensFromStatementString } from "../utilities/tokens";
8
7
  import { UNQUALIFIED_STATEMENT_RULE_NAME, CONSTRUCTOR_DECLARATION_RULE_NAME } from "../ruleNames";
8
+ import { constructorDeclarationTokensFromTermString, unqualifiedStatementTokensFromStatementString } from "../utilities/tokens";
9
9
 
10
10
  const { florenceParserFromCombinedCustomGrammar } = parsersUtilities;
11
11
 
@@ -15,6 +15,13 @@ const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
15
15
  const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
16
16
  statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
17
17
 
18
+ export function termNodeFromTermString(termString, lexer, parser) {
19
+ const constructorDeclarationTokens = constructorDeclarationTokensFromTermString(termString, lexer),
20
+ termNode = termNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser);
21
+
22
+ return termNode;
23
+ }
24
+
18
25
  export function statementNodeFromStatementString(statementString, lexer, parser) {
19
26
  const unqualifiedStatementTokens = unqualifiedStatementTokensFromStatementString(statementString, lexer),
20
27
  statementNode = statementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
@@ -23,37 +30,27 @@ export function statementNodeFromStatementString(statementString, lexer, parser)
23
30
  }
24
31
 
25
32
  export function termNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser) {
26
- let termNode = null;
27
-
28
- const constructorDeclarationNode = constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser);
29
-
30
- if (constructorDeclarationNode !== null) {
31
- termNode = termNodeQuery(constructorDeclarationNode);
32
- }
33
+ const constructorDeclarationNode = constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser),
34
+ termNode = termNodeQuery(constructorDeclarationNode);
33
35
 
34
36
  return termNode;
35
37
  }
36
38
 
37
39
  export function statementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
38
- let statementNode = null;
39
-
40
- const unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
41
-
42
- if (unqualifiedStatementNode !== null) {
43
- statementNode = statementNodeQuery(unqualifiedStatementNode);
44
- }
40
+ const unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
41
+ statementNode = statementNodeQuery(unqualifiedStatementNode);
45
42
 
46
43
  return statementNode;
47
44
  }
48
45
 
49
- export function unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
46
+ function unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
50
47
  const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
51
48
  unqualifiedStatementNode = nodeFromTokensRuleNameAndParser(unqualifiedStatementTokens, ruleName, parser);
52
49
 
53
50
  return unqualifiedStatementNode;
54
51
  }
55
52
 
56
- export function constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser) {
53
+ function constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser) {
57
54
  const ruleName = CONSTRUCTOR_DECLARATION_RULE_NAME,
58
55
  constructorDeclarationNode = nodeFromTokensRuleNameAndParser(constructorDeclarationTokens, ruleName, parser);
59
56
 
@@ -36,14 +36,14 @@ export function nodesAsString(nodes, tokens) {
36
36
  return string;
37
37
  }
38
38
 
39
- export function terminalNodeAsString(terminalNode) {
39
+ function terminalNodeAsString(terminalNode) {
40
40
  const content = terminalNode.getContent(),
41
41
  string = content; ///
42
42
 
43
43
  return string;
44
44
  }
45
45
 
46
- export function nonTerminalNodeAsString(nonTerminalNode, tokens) {
46
+ function nonTerminalNodeAsString(nonTerminalNode, tokens) {
47
47
  const lastSignificantTokenIndex = nonTerminalNode.getLastSignificantTokenIndex(tokens),
48
48
  firstSignificantTokenIndex = nonTerminalNode.getFirstSignificantTokenIndex(tokens),
49
49
  start = firstSignificantTokenIndex, ///
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import { nodeQuery, nodesQuery } from "./query";
4
+ import { nodeAsString, nodesAsString } from "./string";
5
+
6
+ const subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement/statement!"),
7
+ subproofLastProofStepStatementNodeQuery = nodeQuery("/subproof/subDerivation/lastProofStep/unqualifiedStatement|qualifiedStatement/statement!");
8
+
9
+ export function subproofNodeAsSubproofString(subproofNode, localContext) {
10
+ const tokens = localContext.getTokens(),
11
+ subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
12
+ subproofLastProofStepStatementNode = subproofLastProofStepStatementNodeQuery(subproofNode),
13
+ subproofSuppositionStatementsString = nodesAsString(subproofSuppositionStatementNodes, tokens),
14
+ subproofLastProofStepStatementString = nodeAsString(subproofLastProofStepStatementNode, tokens),
15
+ subproofString = `[${subproofSuppositionStatementsString}]...${subproofLastProofStepStatementString}`;
16
+
17
+ return subproofString;
18
+ }
@@ -1,18 +1,30 @@
1
1
  "use strict";
2
2
 
3
- import { nodeQuery, nodesQuery } from "./query";
4
- import { nodeAsString, nodesAsString } from "./string";
3
+ import { nodeQuery } from "../utilities/query";
5
4
 
6
- const subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement/statement!"),
7
- subproofLastProofStepStatementNodeQuery = nodeQuery("/subproof/subDerivation/lastProofStep/unqualifiedStatement|qualifiedStatement/statement!");
5
+ const variableNodeQuery = nodeQuery("/term/variable"),
6
+ metavariableNodeQuery = nodeQuery("/statement/metavariable");
8
7
 
9
- export function subproofNodeAsSubproofString(subproofNode, localContext) {
10
- const tokens = localContext.getTokens(),
11
- subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
12
- subproofLastProofStepStatementNode = subproofLastProofStepStatementNodeQuery(subproofNode),
13
- subproofSuppositionStatementsString = nodesAsString(subproofSuppositionStatementNodes, tokens),
14
- subproofLastProofStepStatementString = nodeAsString(subproofLastProofStepStatementNode, tokens),
15
- subproofString = `[${subproofSuppositionStatementsString}]...${subproofLastProofStepStatementString}`;
8
+ export function variableFromTermNode(termNode, localContext) {
9
+ let variable = null;
16
10
 
17
- return subproofString;
11
+ const variableNode = variableNodeQuery(termNode);
12
+
13
+ if (variableNode !== null) {
14
+ variable = localContext.findVariableByVariableNode(variableNode);
15
+ }
16
+
17
+ return variable;
18
+ }
19
+
20
+ export function metavariableFromStatementNode(statementNode, localContext) {
21
+ let metavariable = null;
22
+
23
+ const metavariableNode = metavariableNodeQuery(statementNode)
24
+
25
+ if (metavariableNode !== null) {
26
+ metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
27
+ }
28
+
29
+ return metavariable;
18
30
  }
package/src/variable.js CHANGED
@@ -19,31 +19,31 @@ export default class Variable {
19
19
  match(variable) {
20
20
  const type = variable.getType(),
21
21
  node = variable.getNode(),
22
- matchesType = this.matchType(type),
23
- matchesNode = this.matchNode(node),
24
- matches = matchesNode && matchesType;
22
+ typeMatches = this.matchType(type),
23
+ nodeMatches = this.matchNode(node),
24
+ matches = nodeMatches && typeMatches;
25
25
 
26
26
  return matches;
27
27
  }
28
28
 
29
29
  matchNode(node) {
30
- const matchesNode = this.node.match(node);
30
+ const nodeMatches = this.node.match(node);
31
31
 
32
- return matchesNode;
32
+ return nodeMatches;
33
33
  }
34
34
 
35
35
  matchType(type) {
36
- const matchesType = this.type.match(type);
36
+ const typeMatches = this.type.match(type);
37
37
 
38
- return matchesType;
38
+ return typeMatches;
39
39
  }
40
40
 
41
41
  matchNodeAndType(node, type) {
42
- const matchesNode = this.matchNode(node),
43
- matchesType = this.matchType(type),
44
- matchesNodeAndType = matchesNode && matchesType;
42
+ const nodeMatches = this.matchNode(node),
43
+ typeNatches = this.matchType(type),
44
+ nodeAndTypeMatch = (nodeMatches && typeNatches);
45
45
 
46
- return matchesNodeAndType;
46
+ return nodeAndTypeMatch;
47
47
  }
48
48
 
49
49
  asString(tokens) {
@@ -9,12 +9,12 @@ const termNodeQuery = nodeQuery("/term!"),
9
9
  statementNodeQuery = nodeQuery("/statement!");
10
10
 
11
11
  class MetaLevelVerifier extends Verifier {
12
- verify(node, assignments, derived, localContext) {
12
+ verify(node, assignments, stated, localContext) {
13
13
  let verified;
14
14
 
15
15
  const nonTerminalNode = node, ///
16
16
  childNodes = nonTerminalNode.getChildNodes(),
17
- nonTerminalNodeVerified = this.verifyChildNodes(childNodes, assignments, derived, localContext);
17
+ nonTerminalNodeVerified = this.verifyChildNodes(childNodes, assignments, stated, localContext);
18
18
 
19
19
  verified = nonTerminalNodeVerified; ///
20
20
 
@@ -24,16 +24,16 @@ class MetaLevelVerifier extends Verifier {
24
24
  static maps = [
25
25
  {
26
26
  nodeQuery: statementNodeQuery,
27
- verify: (statementNode, assignments, derived, localContext) => {
27
+ verify: (statementNode, assignments, stated, localContext) => {
28
28
  const { verifyStatement } = shim,
29
- statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
29
+ statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
30
30
 
31
31
  return statementVerified;
32
32
  }
33
33
  },
34
34
  {
35
35
  nodeQuery: termNodeQuery,
36
- verify: (termNode, assignments, derived, localContext) => {
36
+ verify: (termNode, assignments, stated, localContext) => {
37
37
  const { verifyTerm } = shim,
38
38
  terms = [],
39
39
  termVerified = verifyTerm(termNode, terms, localContext, () => {
@@ -29,10 +29,10 @@ class StatementAsCombinatorVerifier extends Verifier {
29
29
  nodeQuery: statementNodeQuery,
30
30
  verify: (statementNode, fileContext) => {
31
31
  const { verifyStatement } = shim,
32
- derived = true, ///
32
+ stated = false, ///
33
33
  assignments = [],
34
34
  localContext = LocalContext.fromFileContext(fileContext),
35
- statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
35
+ statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
36
36
 
37
37
  return statementVerified;
38
38
  }
@@ -2,31 +2,44 @@
2
2
 
3
3
  import metaLevelVerifier from "../../verifier/metaLevel";
4
4
 
5
- import { isAssertionNegated } from "../../utilities/verify";
5
+ import { isAssertionNegated } from "../../utilities/assertion";
6
6
  import { nodeQuery, nodesQuery } from "../../utilities/query";
7
7
 
8
- const termNodeQuery = nodeQuery("/statement/term!"),
9
- statementTermNodesQuery = nodesQuery("/statement/metaArgument/statement//term");
8
+ const variableNodeQuery = nodeQuery("/containedAssertion/variable!"),
9
+ metavariableNodeQuery = nodeQuery("/containedAssertion/metavariable"),
10
+ statementVariableNodesQuery = nodesQuery("/containedAssertion/statement//variable"),
11
+ statementMetavariableNodesQuery = nodesQuery("/containedAssertion/statement//metavariable");
10
12
 
11
- export default function verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
12
- let containedAssertionVerified;
13
+ const verifyContainedAssertionFunctions = [
14
+ verifyDerivedContainedAssertion,
15
+ verifyStatedContainedAssertion
16
+ ];
13
17
 
14
- const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
18
+ export default function verifyContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
19
+ let containedAssertionVerified = false;
20
+
21
+ const containedAssertionString = localContext.nodeAsString(containedAssertionNode),
22
+ savedStated = stated; ///
15
23
 
16
24
  localContext.trace(`Verifying the '${containedAssertionString}' contained assertion...`, containedAssertionNode);
17
25
 
18
- const verifyContainedAssertionFunctions = [
19
- verifyDerivedContainedAssertion,
20
- verifyStatedContainedAssertion
21
- ];
26
+ assignments = []; ///
22
27
 
23
- containedAssertionVerified = verifyContainedAssertionFunctions.some((verifyContainedAssertionFunction) => {
24
- const containedAssertionVerified = verifyContainedAssertionFunction(containedAssertionNode, assignments, derived, localContext);
28
+ stated = true; ///
25
29
 
26
- if (containedAssertionVerified) {
27
- return true;
28
- }
29
- });
30
+ const verified = metaLevelVerifier.verify(containedAssertionNode, assignments, stated, localContext);
31
+
32
+ stated = savedStated; ///
33
+
34
+ if (verified) {
35
+ containedAssertionVerified = verifyContainedAssertionFunctions.some((verifyContainedAssertionFunction) => {
36
+ const containedAssertionVerified = verifyContainedAssertionFunction(containedAssertionNode, assignments, stated, localContext);
37
+
38
+ if (containedAssertionVerified) {
39
+ return true;
40
+ }
41
+ });
42
+ }
30
43
 
31
44
  if (containedAssertionVerified) {
32
45
  localContext.debug(`...verified the '${containedAssertionString}' contained assertion.`, containedAssertionNode);
@@ -35,35 +48,62 @@ export default function verifyContainedAssertion(containedAssertionNode, assignm
35
48
  return containedAssertionVerified;
36
49
  }
37
50
 
38
- function verifyDerivedContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
51
+ function verifyDerivedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
39
52
  let derivedContainedAssertionVerified = false;
40
53
 
41
- if (derived) {
54
+ if (!stated) {
42
55
  const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
43
56
 
44
57
  localContext.trace(`Verifying the '${containedAssertionString}' derived contained assertion...`, containedAssertionNode);
45
58
 
46
59
  const assertionNegated = isAssertionNegated(containedAssertionNode),
47
- termNode = termNodeQuery(containedAssertionNode),
48
- negated = assertionNegated, ///
49
- statementTermNodes = statementTermNodesQuery(containedAssertionNode),
50
- termNodeMatchesMetaArgumentVariableNode = statementTermNodes.some((statementTermNode) => {
51
- const termNodeMatchesMetaArgumentVariableNode = termNode.match(statementTermNode);
52
-
53
- if (termNodeMatchesMetaArgumentVariableNode) {
54
- return true;
55
- }
56
- });
57
-
58
- if (!negated) {
59
- if (termNodeMatchesMetaArgumentVariableNode) {
60
- derivedContainedAssertionVerified = true;
60
+ metavariableNode = metavariableNodeQuery(containedAssertionNode),
61
+ variableNode = variableNodeQuery(containedAssertionNode),
62
+ negated = assertionNegated; ///
63
+
64
+ if (false) {
65
+ ///
66
+ } else if (metavariableNode !== null) {
67
+ const statementMetavariableNodes = statementMetavariableNodesQuery(containedAssertionNode),
68
+ variableNodeMatchesStatementMetavariableNode = statementMetavariableNodes.some((statementMetavariableNode) => {
69
+ const variableNodeMatchesStatementMetavariableNode = variableNode.match(statementMetavariableNode);
70
+
71
+ if (variableNodeMatchesStatementMetavariableNode) {
72
+ return true;
73
+ }
74
+ });
75
+
76
+ if (!negated) {
77
+ if (variableNodeMatchesStatementMetavariableNode) {
78
+ derivedContainedAssertionVerified = true;
79
+ }
80
+ }
81
+
82
+ if (negated) {
83
+ if (!variableNodeMatchesStatementMetavariableNode) {
84
+ derivedContainedAssertionVerified = true;
85
+ }
86
+ }
87
+ } else if (variableNode !== null) {
88
+ const statementVariableNodes = statementVariableNodesQuery(containedAssertionNode),
89
+ variableNodeMatchesStatementVariableNode = statementVariableNodes.some((statementVariableNode) => {
90
+ const variableNodeMatchesStatementVariableNode = variableNode.match(statementVariableNode);
91
+
92
+ if (variableNodeMatchesStatementVariableNode) {
93
+ return true;
94
+ }
95
+ });
96
+
97
+ if (!negated) {
98
+ if (variableNodeMatchesStatementVariableNode) {
99
+ derivedContainedAssertionVerified = true;
100
+ }
61
101
  }
62
- }
63
102
 
64
- if (negated) {
65
- if (!termNodeMatchesMetaArgumentVariableNode) {
66
- derivedContainedAssertionVerified = true;
103
+ if (negated) {
104
+ if (!variableNodeMatchesStatementVariableNode) {
105
+ derivedContainedAssertionVerified = true;
106
+ }
67
107
  }
68
108
  }
69
109
 
@@ -75,15 +115,15 @@ function verifyDerivedContainedAssertion(containedAssertionNode, assignments, de
75
115
  return derivedContainedAssertionVerified;
76
116
  }
77
117
 
78
- function verifyStatedContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
79
- let statedContainedAssertionVerified = false;
118
+ function verifyStatedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
119
+ let statedContainedAssertionVerified;
80
120
 
81
- if (!derived) {
121
+ if (stated) {
82
122
  const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
83
123
 
84
124
  localContext.trace(`Verifying the '${containedAssertionString}' stated contained assertion...`, containedAssertionNode);
85
125
 
86
- debugger
126
+ statedContainedAssertionVerified = true;
87
127
 
88
128
  if (statedContainedAssertionVerified) {
89
129
  localContext.debug(`...verified the '${containedAssertionString}' stated contained assertion.`, containedAssertionNode);