occam-verify-cli 0.0.968 → 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 (145) hide show
  1. package/bin/action/verify.js +6 -8
  2. package/lib/constants.js +5 -1
  3. package/lib/context/file.js +48 -53
  4. package/lib/context/local.js +45 -39
  5. package/lib/context/release.js +3 -3
  6. package/lib/declaration.js +9 -7
  7. package/lib/equivalence.js +23 -21
  8. package/lib/judgement.js +3 -3
  9. package/lib/label.js +3 -3
  10. package/lib/log.js +3 -3
  11. package/lib/metaType.js +7 -7
  12. package/lib/metavariable.js +7 -7
  13. package/lib/node/term/bracketed.js +16 -0
  14. package/lib/proofStep.js +3 -29
  15. package/lib/releaseContext/initialise.js +11 -17
  16. package/lib/resolve/substitutions.js +99 -0
  17. package/lib/rule.js +10 -6
  18. package/lib/substitution/statementForMetavariable.js +93 -98
  19. package/lib/substitution/termForVariable.js +45 -54
  20. package/lib/substitution.js +51 -9
  21. package/lib/substitutions.js +165 -12
  22. package/lib/term.js +8 -1
  23. package/lib/topLevelAssertion.js +10 -6
  24. package/lib/type.js +5 -5
  25. package/lib/unifier/metaLevel.js +10 -3
  26. package/lib/unifier/statementWithCombinator.js +6 -6
  27. package/lib/unifier.js +2 -2
  28. package/lib/unify/metavariableWithStatement.js +13 -48
  29. package/lib/unify/metavariableWithStatementGivenSubstitution.js +39 -0
  30. package/lib/unify/premiseWithProofStep.js +3 -3
  31. package/lib/unify/statement/qualified.js +117 -0
  32. package/lib/unify/statement/unqualified.js +25 -0
  33. package/lib/unify/statementWithBracketedCombinator.js +3 -3
  34. package/lib/unify/statementWithCombinators.js +5 -5
  35. package/lib/unify/statementWithMetaType.js +3 -3
  36. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +45 -0
  37. package/lib/unify/suppositionWithProffStep.js +3 -3
  38. package/lib/unify/variableWithTerm.js +11 -26
  39. package/lib/utilities/array.js +5 -14
  40. package/lib/utilities/assertion.js +24 -0
  41. package/lib/utilities/brackets.js +60 -0
  42. package/lib/utilities/message.js +52 -0
  43. package/lib/utilities/name.js +7 -7
  44. package/lib/utilities/node.js +10 -17
  45. package/lib/utilities/string.js +1 -7
  46. package/lib/utilities/subproof.js +19 -0
  47. package/lib/utilities/unify.js +30 -11
  48. package/lib/variable.js +8 -8
  49. package/lib/verifier/metaLevel.js +6 -6
  50. package/lib/verifier/statementAsCombinator.js +2 -2
  51. package/lib/verify/assertion/contained.js +66 -32
  52. package/lib/verify/assertion/defined.js +51 -46
  53. package/lib/verify/assertion/subproof.js +9 -9
  54. package/lib/verify/assertion/type.js +11 -11
  55. package/lib/verify/conclusion.js +6 -6
  56. package/lib/verify/consequent.js +6 -6
  57. package/lib/verify/declaration/metavariable.js +2 -2
  58. package/lib/verify/declaration.js +34 -20
  59. package/lib/verify/equality.js +13 -13
  60. package/lib/verify/frame.js +38 -24
  61. package/lib/verify/judgement.js +13 -13
  62. package/lib/verify/metavariable.js +2 -2
  63. package/lib/verify/premise.js +5 -5
  64. package/lib/verify/proofStep.js +15 -24
  65. package/lib/verify/statement/qualified.js +15 -124
  66. package/lib/verify/statement/unqualified.js +23 -24
  67. package/lib/verify/statement.js +24 -24
  68. package/lib/verify/statementGivenMetaType.js +3 -3
  69. package/lib/verify/supposition.js +5 -5
  70. package/package.json +2 -2
  71. package/src/constants.js +1 -0
  72. package/src/context/file.js +49 -55
  73. package/src/context/local.js +34 -31
  74. package/src/context/release.js +2 -2
  75. package/src/declaration.js +12 -10
  76. package/src/equivalence.js +27 -26
  77. package/src/judgement.js +2 -2
  78. package/src/label.js +2 -2
  79. package/src/log.js +1 -1
  80. package/src/metaType.js +7 -7
  81. package/src/metavariable.js +7 -7
  82. package/src/node/term/bracketed.js +9 -0
  83. package/src/proofStep.js +3 -48
  84. package/src/releaseContext/initialise.js +13 -24
  85. package/src/resolve/substitutions.js +134 -0
  86. package/src/rule.js +10 -5
  87. package/src/substitution/statementForMetavariable.js +99 -85
  88. package/src/substitution/termForVariable.js +50 -65
  89. package/src/substitution.js +46 -8
  90. package/src/substitutions.js +176 -10
  91. package/src/term.js +6 -0
  92. package/src/topLevelAssertion.js +10 -5
  93. package/src/type.js +4 -4
  94. package/src/unifier/metaLevel.js +11 -3
  95. package/src/unifier/statementWithCombinator.js +5 -5
  96. package/src/unifier.js +1 -1
  97. package/src/unify/metavariableWithStatement.js +17 -71
  98. package/src/unify/metavariableWithStatementGivenSubstitution.js +39 -0
  99. package/src/unify/premiseWithProofStep.js +1 -1
  100. package/src/unify/statement/qualified.js +183 -0
  101. package/src/unify/statement/unqualified.js +24 -0
  102. package/src/unify/statementWithBracketedCombinator.js +2 -2
  103. package/src/unify/statementWithCombinators.js +4 -4
  104. package/src/unify/statementWithMetaType.js +2 -2
  105. package/src/unify/statementWithSttaemetnGivenEquivalences.js +51 -0
  106. package/src/unify/suppositionWithProffStep.js +1 -1
  107. package/src/unify/variableWithTerm.js +14 -35
  108. package/src/utilities/array.js +1 -16
  109. package/src/utilities/assertion.js +19 -0
  110. package/src/utilities/brackets.js +56 -0
  111. package/src/utilities/name.js +8 -8
  112. package/src/utilities/node.js +14 -17
  113. package/src/utilities/string.js +2 -2
  114. package/src/utilities/subproof.js +18 -0
  115. package/src/utilities/unify.js +24 -12
  116. package/src/variable.js +11 -11
  117. package/src/verifier/metaLevel.js +5 -5
  118. package/src/verifier/statementAsCombinator.js +2 -2
  119. package/src/verify/assertion/contained.js +80 -38
  120. package/src/verify/assertion/defined.js +64 -55
  121. package/src/verify/assertion/subproof.js +8 -8
  122. package/src/verify/assertion/type.js +11 -11
  123. package/src/verify/conclusion.js +8 -8
  124. package/src/verify/consequent.js +8 -8
  125. package/src/verify/declaration/metavariable.js +4 -3
  126. package/src/verify/declaration.js +46 -23
  127. package/src/verify/equality.js +13 -13
  128. package/src/verify/frame.js +48 -28
  129. package/src/verify/judgement.js +13 -13
  130. package/src/verify/metavariable.js +3 -3
  131. package/src/verify/premise.js +6 -6
  132. package/src/verify/proofStep.js +14 -31
  133. package/src/verify/statement/qualified.js +18 -199
  134. package/src/verify/statement/unqualified.js +25 -31
  135. package/src/verify/statement.js +23 -23
  136. package/src/verify/statementGivenMetaType.js +2 -2
  137. package/src/verify/supposition.js +6 -6
  138. package/lib/unify/statementAtainstStatement.js +0 -49
  139. package/lib/utilities/lineIndex.js +0 -52
  140. package/lib/utilities/match.js +0 -59
  141. package/lib/utilities/verify.js +0 -19
  142. package/src/unify/statementAtainstStatement.js +0 -56
  143. package/src/utilities/match.js +0 -53
  144. package/src/utilities/verify.js +0 -14
  145. /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
  }
@@ -1,30 +1,45 @@
1
1
  "use strict";
2
2
 
3
- import { isAssertionNegated } from "../../utilities/verify";
3
+ import metaLevelVerifier from "../../verifier/metaLevel";
4
+
5
+ import { isAssertionNegated } from "../../utilities/assertion";
4
6
  import { nodeQuery, nodesQuery } from "../../utilities/query";
5
7
 
6
- const termNodeQuery = nodeQuery("/statement/term!"),
7
- 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");
12
+
13
+ const verifyContainedAssertionFunctions = [
14
+ verifyDerivedContainedAssertion,
15
+ verifyStatedContainedAssertion
16
+ ];
8
17
 
9
- export default function verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
10
- let containedAssertionVerified;
18
+ export default function verifyContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
19
+ let containedAssertionVerified = false;
11
20
 
12
- const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
21
+ const containedAssertionString = localContext.nodeAsString(containedAssertionNode),
22
+ savedStated = stated; ///
13
23
 
14
24
  localContext.trace(`Verifying the '${containedAssertionString}' contained assertion...`, containedAssertionNode);
15
25
 
16
- const verifyContainedAssertionFunctions = [
17
- verifyDerivedContainedAssertion,
18
- verifyStatedContainedAssertion
19
- ];
26
+ assignments = []; ///
20
27
 
21
- containedAssertionVerified = verifyContainedAssertionFunctions.some((verifyContainedAssertionFunction) => {
22
- const containedAssertionVerified = verifyContainedAssertionFunction(containedAssertionNode, assignments, derived, localContext);
28
+ stated = true; ///
23
29
 
24
- if (containedAssertionVerified) {
25
- return true;
26
- }
27
- });
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
+ }
28
43
 
29
44
  if (containedAssertionVerified) {
30
45
  localContext.debug(`...verified the '${containedAssertionString}' contained assertion.`, containedAssertionNode);
@@ -33,35 +48,62 @@ export default function verifyContainedAssertion(containedAssertionNode, assignm
33
48
  return containedAssertionVerified;
34
49
  }
35
50
 
36
- function verifyDerivedContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
51
+ function verifyDerivedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
37
52
  let derivedContainedAssertionVerified = false;
38
53
 
39
- if (derived) {
54
+ if (!stated) {
40
55
  const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
41
56
 
42
57
  localContext.trace(`Verifying the '${containedAssertionString}' derived contained assertion...`, containedAssertionNode);
43
58
 
44
59
  const assertionNegated = isAssertionNegated(containedAssertionNode),
45
- termNode = termNodeQuery(containedAssertionNode),
46
- negated = assertionNegated, ///
47
- statementTermNodes = statementTermNodesQuery(containedAssertionNode),
48
- termNodeMatchesMetaArgumentVariableNode = statementTermNodes.some((statementTermNode) => {
49
- const termNodeMatchesMetaArgumentVariableNode = termNode.match(statementTermNode);
50
-
51
- if (termNodeMatchesMetaArgumentVariableNode) {
52
- return true;
53
- }
54
- });
55
-
56
- if (!negated) {
57
- if (termNodeMatchesMetaArgumentVariableNode) {
58
- 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
+ }
59
101
  }
60
- }
61
102
 
62
- if (negated) {
63
- if (!termNodeMatchesMetaArgumentVariableNode) {
64
- derivedContainedAssertionVerified = true;
103
+ if (negated) {
104
+ if (!variableNodeMatchesStatementVariableNode) {
105
+ derivedContainedAssertionVerified = true;
106
+ }
65
107
  }
66
108
  }
67
109
 
@@ -73,10 +115,10 @@ function verifyDerivedContainedAssertion(containedAssertionNode, assignments, de
73
115
  return derivedContainedAssertionVerified;
74
116
  }
75
117
 
76
- function verifyStatedContainedAssertion(containedAssertionNode, assignments, derived, localContext) {
118
+ function verifyStatedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
77
119
  let statedContainedAssertionVerified;
78
120
 
79
- if (!derived) {
121
+ if (stated) {
80
122
  const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
81
123
 
82
124
  localContext.trace(`Verifying the '${containedAssertionString}' stated contained assertion...`, containedAssertionNode);
@@ -1,33 +1,40 @@
1
1
  "use strict";
2
2
 
3
3
  import verifyTerm from "../../verify/term";
4
+ import metaLevelVerifier from "../../verifier/metaLevel";
4
5
 
5
6
  import { first } from "../../utilities/array";
6
7
  import { nodeQuery } from "../../utilities/query";
7
- import { isAssertionNegated } from "../../utilities/verify";
8
+ import { isAssertionNegated } from "../../utilities/assertion";
8
9
 
9
- const termNodeQuery = nodeQuery("/statement/term!"),
10
- variableNodeQuery = nodeQuery("/statement/term/variable!");
10
+ const variableNodeQuery = nodeQuery("/definedAssertion/variable!"),
11
+ metavariableNodeQuery = nodeQuery("/definedAssertion/metavariable!");
11
12
 
12
- export default function verifyDefinedAssertion(definedAssertionNode, assignments, derived, localContext) {
13
+ const verifyDefinedAssertionFunctions = [
14
+ verifyDerivedDefinedAssertion,
15
+ verifyStatedDefinedAssertion
16
+ ];
17
+
18
+ export default function verifyDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
13
19
  let definedAssertionVerified;
14
20
 
15
21
  const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
16
22
 
17
23
  localContext.trace(`Verifying the '${definedAssertionString}' defined assertion...`, definedAssertionNode);
18
24
 
19
- const verifyDefinedAssertionFunctions = [
20
- verifyDerivedDefinedAssertion,
21
- verifyStatedDefinedAssertion
22
- ];
25
+ assignments = []; ///
23
26
 
24
- definedAssertionVerified = verifyDefinedAssertionFunctions.some((verifyDefinedAssertionFunction) => {
25
- const definedAssertionVerified = verifyDefinedAssertionFunction(definedAssertionNode, assignments, derived, localContext);
27
+ const verified = metaLevelVerifier.verify(definedAssertionNode, assignments, stated, localContext);
26
28
 
27
- if (definedAssertionVerified) {
28
- return true;
29
- }
30
- });
29
+ if (verified) {
30
+ definedAssertionVerified = verifyDefinedAssertionFunctions.some((verifyDefinedAssertionFunction) => {
31
+ const definedAssertionVerified = verifyDefinedAssertionFunction(definedAssertionNode, assignments, stated, localContext);
32
+
33
+ if (definedAssertionVerified) {
34
+ return true;
35
+ }
36
+ });
37
+ }
31
38
 
32
39
  if (definedAssertionVerified) {
33
40
  localContext.debug(`...verified the '${definedAssertionString}' defined assertion.`, definedAssertionNode);
@@ -36,61 +43,48 @@ export default function verifyDefinedAssertion(definedAssertionNode, assignments
36
43
  return definedAssertionVerified;
37
44
  }
38
45
 
39
- function verifyDerivedDefinedAssertion(definedAssertionNode, assignments, derived, localContext) {
46
+ function verifyDerivedDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
40
47
  let derivedDefinedAssertionVerified = false;
41
48
 
42
- if (derived) {
49
+ if (!stated) {
43
50
  const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
44
51
 
45
52
  localContext.trace(`Verifying the '${definedAssertionString}' derived defined assertion...`, definedAssertionNode);
46
53
 
47
- const statementNegated = isAssertionNegated(definedAssertionNode),
48
- variableNode = variableNodeQuery(definedAssertionNode),
49
- termNode = termNodeQuery(definedAssertionNode);
54
+ const assertionNegated = isAssertionNegated(definedAssertionNode),
55
+ metavariableNode = metavariableNodeQuery(definedAssertionNode),
56
+ variableNode = variableNodeQuery(definedAssertionNode);
50
57
 
51
58
  if (false) {
52
59
  ///
53
- } else if (variableNode !== null) {
54
- const variable = localContext.findVariableByVariableNode(variableNode);
55
-
56
- if (variable !== null) {
57
- const variableDefined = localContext.isVariableDefined(variable);
60
+ } else if (metavariableNode !== null) {
61
+ const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode),
62
+ metavariableDefined = localContext.isMetavariableDefined(metavariable);
58
63
 
59
- if (!statementNegated) {
60
- if (variableDefined) {
61
- derivedDefinedAssertionVerified = true;
62
- }
64
+ if (!assertionNegated) {
65
+ if (metavariableDefined) {
66
+ derivedDefinedAssertionVerified = true;
63
67
  }
68
+ }
64
69
 
65
- if (statementNegated) {
66
- if (!variableDefined) {
67
- derivedDefinedAssertionVerified = true;
68
- }
70
+ if (assertionNegated) {
71
+ if (!metavariableDefined) {
72
+ derivedDefinedAssertionVerified = true;
69
73
  }
70
74
  }
71
- } else if (termNode !== null) {
72
- const terms = [],
73
- termVerified = verifyTerm(termNode, terms, localContext, () => {
74
- const verifiedAhead = true;
75
-
76
- return verifiedAhead;
77
- });
78
-
79
- if (termVerified) {
80
- const firstTerm = first(terms),
81
- term = firstTerm, ///
82
- termGrounded = localContext.isTermGrounded(term);
83
-
84
- if (!statementNegated) {
85
- if (termGrounded) {
86
- derivedDefinedAssertionVerified = true;
87
- }
75
+ } else if (variableNode !== null) {
76
+ const variable = localContext.findVariableByVariableNode(variableNode),
77
+ variableDefined = localContext.isVariableDefined(variable);
78
+
79
+ if (!assertionNegated) {
80
+ if (variableDefined) {
81
+ derivedDefinedAssertionVerified = true;
88
82
  }
83
+ }
89
84
 
90
- if (statementNegated) {
91
- if (!termGrounded) {
92
- derivedDefinedAssertionVerified = true;
93
- }
85
+ if (assertionNegated) {
86
+ if (!variableDefined) {
87
+ derivedDefinedAssertionVerified = true;
94
88
  }
95
89
  }
96
90
  }
@@ -103,10 +97,10 @@ function verifyDerivedDefinedAssertion(definedAssertionNode, assignments, derive
103
97
  return derivedDefinedAssertionVerified;
104
98
  }
105
99
 
106
- function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived, localContext) {
100
+ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
107
101
  let statedDefinedAssertionVerified;
108
102
 
109
- if (!derived) {
103
+ if (stated) {
110
104
  const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
111
105
 
112
106
  localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`, definedAssertionNode);
@@ -120,3 +114,18 @@ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived
120
114
 
121
115
  return statedDefinedAssertionVerified;
122
116
  }
117
+
118
+ function termFromTermNode(termNode, localContext) {
119
+ const terms = [];
120
+
121
+ verifyTerm(termNode, terms, localContext, () => {
122
+ const verifiedAhead = true;
123
+
124
+ return verifiedAhead;
125
+ });
126
+
127
+ const firstTerm = first(terms),
128
+ term = firstTerm; ///
129
+
130
+ return term;
131
+ }