occam-verify-cli 0.0.942 → 0.0.944

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 (99) hide show
  1. package/lib/conclusion.js +3 -4
  2. package/lib/consequent.js +3 -4
  3. package/lib/constants.js +5 -1
  4. package/lib/context/file.js +1 -1
  5. package/lib/context/local.js +15 -5
  6. package/lib/equality.js +14 -1
  7. package/lib/metavariable.js +12 -4
  8. package/lib/premise.js +11 -12
  9. package/lib/proofStep.js +13 -18
  10. package/lib/rule.js +5 -38
  11. package/lib/substitution/statementForMetavariable.js +17 -3
  12. package/lib/substitution/termForVariable.js +16 -2
  13. package/lib/substitution.js +14 -1
  14. package/lib/substitutions.js +28 -10
  15. package/lib/supposition.js +11 -12
  16. package/lib/topLevelAssertion.js +5 -38
  17. package/lib/unifier/equality.js +6 -8
  18. package/lib/unifier/metaLevel.js +7 -10
  19. package/lib/unifier/statementAgainstCombinator.js +6 -9
  20. package/lib/unifier/termAgainstConstructor.js +5 -5
  21. package/lib/unifier.js +34 -13
  22. package/lib/unify/conclusionAgainstStatement.js +34 -0
  23. package/lib/unify/consequentAgainstStatement.js +34 -0
  24. package/lib/unify/metavariableAgainstStatement.js +23 -15
  25. package/lib/unify/premiseAgainstProofStep.js +41 -0
  26. package/lib/unify/premisesAgainstProofSteps.js +31 -0
  27. package/lib/unify/statementAgainstMetaType.js +5 -9
  28. package/lib/unify/suppositionAgainstProofStep.js +41 -0
  29. package/lib/unify/suppositionsAgainstProofSteps.js +31 -0
  30. package/lib/unify/termAgainstTerm.js +4 -5
  31. package/lib/unify/termAgainstType.js +7 -7
  32. package/lib/unify/variableAgainstTerm.js +11 -27
  33. package/lib/utilities/arguments.js +27 -0
  34. package/lib/utilities/array.js +5 -2
  35. package/lib/utilities/unify.js +19 -0
  36. package/lib/verifier/metaLevel.js +8 -11
  37. package/lib/verifier/statementAsCombinator.js +13 -22
  38. package/lib/verifier/topLevel.js +3 -6
  39. package/lib/verifier.js +28 -8
  40. package/lib/verify/assertion/type.js +3 -7
  41. package/lib/verify/declaration/metavariable.js +1 -1
  42. package/lib/verify/equality.js +12 -25
  43. package/lib/verify/metavariable.js +26 -63
  44. package/lib/verify/statement/qualified.js +55 -58
  45. package/lib/verify/statement/unqualified.js +3 -6
  46. package/lib/verify/statement.js +36 -34
  47. package/lib/verify/term.js +26 -32
  48. package/lib/verify/type.js +4 -7
  49. package/lib/verify/variable.js +3 -4
  50. package/package.json +1 -1
  51. package/src/conclusion.js +2 -6
  52. package/src/consequent.js +2 -6
  53. package/src/constants.js +1 -0
  54. package/src/context/file.js +5 -5
  55. package/src/context/local.js +20 -9
  56. package/src/equality.js +22 -0
  57. package/src/metavariable.js +1 -1
  58. package/src/premise.js +18 -24
  59. package/src/proofStep.js +16 -21
  60. package/src/rule.js +11 -65
  61. package/src/substitution/statementForMetavariable.js +17 -3
  62. package/src/substitution/termForVariable.js +17 -1
  63. package/src/substitution.js +12 -0
  64. package/src/substitutions.js +41 -7
  65. package/src/supposition.js +18 -24
  66. package/src/topLevelAssertion.js +11 -65
  67. package/src/unifier/equality.js +7 -8
  68. package/src/unifier/metaLevel.js +6 -10
  69. package/src/unifier/statementAgainstCombinator.js +9 -9
  70. package/src/unifier/termAgainstConstructor.js +6 -4
  71. package/src/unifier.js +35 -11
  72. package/src/unify/conclusionAgainstStatement.js +34 -0
  73. package/src/unify/consequentAgainstStatement.js +34 -0
  74. package/src/unify/metavariableAgainstStatement.js +32 -22
  75. package/src/unify/premiseAgainstProofStep.js +54 -0
  76. package/src/unify/premisesAgainstProofSteps.js +23 -0
  77. package/src/unify/statementAgainstMetaType.js +3 -11
  78. package/src/unify/suppositionAgainstProofStep.js +54 -0
  79. package/src/unify/suppositionsAgainstProofSteps.js +23 -0
  80. package/src/unify/termAgainstTerm.js +3 -7
  81. package/src/unify/termAgainstType.js +5 -6
  82. package/src/unify/variableAgainstTerm.js +17 -47
  83. package/src/utilities/arguments.js +18 -0
  84. package/src/utilities/array.js +1 -1
  85. package/src/utilities/unify.js +18 -0
  86. package/src/verifier/metaLevel.js +7 -11
  87. package/src/verifier/statementAsCombinator.js +15 -28
  88. package/src/verifier/topLevel.js +13 -17
  89. package/src/verifier.js +28 -6
  90. package/src/verify/assertion/type.js +2 -6
  91. package/src/verify/declaration/metavariable.js +9 -9
  92. package/src/verify/equality.js +12 -40
  93. package/src/verify/metavariable.js +31 -91
  94. package/src/verify/statement/qualified.js +54 -58
  95. package/src/verify/statement/unqualified.js +2 -6
  96. package/src/verify/statement.js +38 -36
  97. package/src/verify/term.js +25 -31
  98. package/src/verify/type.js +3 -7
  99. package/src/verify/variable.js +2 -4
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
 
3
- import verifyTerm from "../verify/term";
4
3
  import TermForVariableSubstitution from "../substitution/termForVariable";
5
4
 
6
- import { first } from "../utilities/array";
7
5
  import { nodeQuery } from "../utilities/query";
8
6
 
9
7
  const variableNodeQuery = nodeQuery("/term/variable");
10
8
 
11
- export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
9
+ export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB) {
12
10
  let variableUnifiedAgainstTerm = false;
13
11
 
14
12
  const substitution = substitutions.findSubstitution((substitution) => {
@@ -23,66 +21,38 @@ export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, subst
23
21
  const substitutionMatchesTermNodeB = substitution.matchTermNode(termNodeB);
24
22
 
25
23
  if (substitutionMatchesTermNodeB) {
26
- const verifiedAhead = verifyAhead();
27
-
28
- variableUnifiedAgainstTerm = verifiedAhead; ///
24
+ variableUnifiedAgainstTerm = true;
29
25
  }
30
26
  } else {
31
27
  const variableA = localContextA.findVariableByVariableNode(variableNodeA);
32
28
 
33
29
  if (variableA !== null) {
34
- const terms = [],
35
- termUnified = verifyTerm(termNodeB, terms, localContextB, () => {
36
- let verifiedAhead = false;
37
-
38
- const firstTerm = first(terms),
39
- termB = firstTerm, ///
40
- variableB = variableFromTerm(termB, localContextB);
41
-
42
- if (variableA === variableB) {
43
- verifiedAhead = verifyAhead();
44
- } else {
45
- const term = termB, ///
46
- variable = variableA, ///
47
- termType = term.getType(),
48
- variableType = variable.getType(),
49
- variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
50
-
51
- if (variableTypeEqualToOrSuperTypeOfTermType) {
52
- const termNode = termNodeB, ///
53
- variableNode = variableNodeA, ///
54
- termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
55
- substitution = termForVariableSubstitution; ///
56
-
57
- substitutions.addSubstitution(substitution);
58
-
59
- verifiedAhead = verifyAhead();
60
-
61
- if (!verifiedAhead) {
62
- substitutions.removeSubstitution(substitution);
63
- }
64
- }
65
- }
66
-
67
- return verifiedAhead;
68
- });
69
-
70
- variableUnifiedAgainstTerm = termUnified; ///
30
+ const variableB = variableFromTermNode(termNodeB, localContextB);
31
+
32
+ if (variableA !== variableB) {
33
+ const termNode = termNodeB, ///
34
+ variableNode = variableNodeA, ///
35
+ termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
36
+ substitution = termForVariableSubstitution; ///
37
+
38
+ substitutions.addSubstitution(substitution, localContextA, localContextB);
39
+ }
40
+
41
+ variableUnifiedAgainstTerm = true;
71
42
  }
72
43
  }
73
44
 
74
45
  return variableUnifiedAgainstTerm;
75
46
  }
76
47
 
77
- function variableFromTerm(term, localContext) {
48
+ function variableFromTermNode(termNode, localContext) {
78
49
  let variable = null;
79
50
 
80
- const termNode = term.getNode(),
81
- variableNode = variableNodeQuery(termNode);
51
+ const variableNode = variableNodeQuery(termNode);
82
52
 
83
53
  if (variableNode !== null) {
84
54
  variable = localContext.findVariableByVariableNode(variableNode);
85
55
  }
86
56
 
87
57
  return variable;
88
- }
58
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import { last } from "./array";
4
+ import { FUNCTION } from "../constants";
5
+
6
+ export function isLastRemainingArgumentFunction(remainingArguments) {
7
+ let lastRemainingArgumentFunction = false;
8
+
9
+ const remainingArgumentsLength = remainingArguments.length;
10
+
11
+ if (remainingArgumentsLength > 0) {
12
+ const lastRemainingArgument = last(remainingArguments);
13
+
14
+ lastRemainingArgumentFunction = (typeof lastRemainingArgument === FUNCTION);
15
+ }
16
+
17
+ return lastRemainingArgumentFunction;
18
+ }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- export const { first, second, last, extract, push, match, filter, compress, separate } = arrayUtilities;
5
+ export const { first, second, last, extract, push, match, prune, filter, compress, separate } = arrayUtilities;
6
6
 
7
7
  export function reverse(array) {
8
8
  array = [ ///
@@ -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
+ }
@@ -16,11 +16,7 @@ class MetaLevelVerifier extends Verifier {
16
16
  let verified;
17
17
 
18
18
  const nonTerminalNode = node, ///
19
- nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
20
- const verifiedAhead = true;
21
-
22
- return verifiedAhead;
23
- });
19
+ nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, localContext);
24
20
 
25
21
  verified = nonTerminalNodeVerified; ///
26
22
 
@@ -30,25 +26,25 @@ class MetaLevelVerifier extends Verifier {
30
26
  static maps = [
31
27
  {
32
28
  nodeQuery: metavariableNodeQuery,
33
- verify: (metavariableNode, localContext, verifyAhead) => {
34
- const metavariableVerified = verifyMetavariable(metavariableNode, localContext, verifyAhead);
29
+ verify: (metavariableNode, localContext) => {
30
+ const metavariableVerified = verifyMetavariable(metavariableNode, localContext);
35
31
 
36
32
  return metavariableVerified;
37
33
  }
38
34
  },
39
35
  {
40
36
  nodeQuery: variableNodeQuery,
41
- verify: (variableNode, localContext, verifyAhead) => {
42
- const variableVerified = verifyVariable(variableNode, localContext, verifyAhead);
37
+ verify: (variableNode, localContext) => {
38
+ const variableVerified = verifyVariable(variableNode, localContext);
43
39
 
44
40
  return variableVerified;
45
41
  }
46
42
  },
47
43
  {
48
44
  nodeQuery: termNodeQuery,
49
- verify: (termNode, localContext, verifyAhead) => {
45
+ verify: (termNode, localContext) => {
50
46
  const terms = [],
51
- termVerified = verifyTerm(termNode, terms, localContext, verifyAhead);
47
+ termVerified = verifyTerm(termNode, terms, localContext);
52
48
 
53
49
  return termVerified;
54
50
  }
@@ -17,11 +17,7 @@ class StatementAsCombinatorVerifier extends Verifier {
17
17
 
18
18
  const nonTerminalNode = statementNode, ///
19
19
  childNodes = nonTerminalNode.getChildNodes(),
20
- childNodesVerified = this.verifyChildNodes(childNodes, fileContext, () => {
21
- const verifiedAhead = true;
22
-
23
- return verifiedAhead;
24
- });
20
+ childNodesVerified = this.verifyChildNodes(childNodes, fileContext);
25
21
 
26
22
  statementVerifiedAsCombinator = childNodesVerified; ///
27
23
 
@@ -29,41 +25,32 @@ class StatementAsCombinatorVerifier extends Verifier {
29
25
  }
30
26
 
31
27
  static maps = [
28
+ {
29
+ nodeQuery: statementNodeQuery,
30
+ verify: (statementNode, localContext) => {
31
+ const derived = false,
32
+ assignments = [],
33
+ statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
34
+
35
+ return statementVerified;
36
+ }
37
+ },
32
38
  {
33
39
  nodeQuery: termNodeQuery,
34
- verify: (termNode, localContext, verifyAhead) => {
40
+ verify: (termNode, localContext) => {
35
41
  const terms = [],
36
- termVerified = verifyTerm(termNode, terms, localContext, verifyAhead);
42
+ termVerified = verifyTerm(termNode, terms, localContext);
37
43
 
38
44
  return termVerified;
39
45
  }
40
46
  },
41
47
  {
42
48
  nodeQuery: typeNodeQuery,
43
- verify: (typeNode, localContext, verifyAhead) => {
44
- const typeVerified = verifyType(typeNode, localContext, verifyAhead);
49
+ verify: (typeNode, localContext) => {
50
+ const typeVerified = verifyType(typeNode, localContext);
45
51
 
46
52
  return typeVerified;
47
53
  }
48
- },
49
- {
50
- nodeQuery: statementNodeQuery,
51
- verify: (statementNode, localContext, verifyAhead) => {
52
- let statementVerified;
53
-
54
- const derived = false,
55
- assignments = [];
56
-
57
- statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
58
-
59
- if (statementVerified) {
60
- const verifiedAhead = verifyAhead();
61
-
62
- statementVerified = verifiedAhead; ///
63
- }
64
-
65
- return statementVerified;
66
- }
67
54
  }
68
55
  ];
69
56
  }
@@ -18,29 +18,25 @@ import verifyMetavariableDeclaration from "../verify/declaration/metavariable";
18
18
  import { nodeQuery } from "../utilities/query";
19
19
 
20
20
  const errorNodeQuery = nodeQuery("/error"),
21
- ruleNodeQuery = nodeQuery("/rule!"),
22
- axiomNodeQuery = nodeQuery("/axiom!"),
23
- lemmaNodeQuery = nodeQuery("/lemma!"),
24
- theoremNodeQuery = nodeQuery("/theorem!"),
25
- metaLemmaNodeQuery = nodeQuery("/metaLemma!"),
26
- conjectureNodeQuery = nodeQuery("/conjecture!"),
27
- metatheoremNodeQuery = nodeQuery("/metatheorem!"),
28
- typeDeclarationNodeQuery = nodeQuery("/typeDeclaration!"),
29
- variableDeclarationNodeQuery = nodeQuery("/variableDeclaration!"),
30
- combinatorDeclarationNodeQuery = nodeQuery("/combinatorDeclaration!"),
31
- constructorDeclarationNodeQuery = nodeQuery("/constructorDeclaration!"),
32
- metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration!");
21
+ ruleNodeQuery = nodeQuery("/rule"),
22
+ axiomNodeQuery = nodeQuery("/axiom"),
23
+ lemmaNodeQuery = nodeQuery("/lemma"),
24
+ theoremNodeQuery = nodeQuery("/theorem"),
25
+ metaLemmaNodeQuery = nodeQuery("/metaLemma"),
26
+ conjectureNodeQuery = nodeQuery("/conjecture"),
27
+ metatheoremNodeQuery = nodeQuery("/metatheorem"),
28
+ typeDeclarationNodeQuery = nodeQuery("/typeDeclaration"),
29
+ variableDeclarationNodeQuery = nodeQuery("/variableDeclaration"),
30
+ combinatorDeclarationNodeQuery = nodeQuery("/combinatorDeclaration"),
31
+ constructorDeclarationNodeQuery = nodeQuery("/constructorDeclaration"),
32
+ metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration");
33
33
 
34
34
  class TopLevelVerifier extends Verifier {
35
35
  verify(node, fileContext) {
36
36
  let verified;
37
37
 
38
38
  const nonTerminalNode = node, ///
39
- nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, fileContext, () => {
40
- const verifiedAhead = true;
41
-
42
- return verifiedAhead;
43
- });
39
+ nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, fileContext);
44
40
 
45
41
  verified = nonTerminalNodeVerified; ///
46
42
 
package/src/verifier.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { nodeQuery } from "./utilities/query";
4
+ import { isLastRemainingArgumentFunction } from "./utilities/arguments";
4
5
 
5
6
  const nonTerminalNodeQuery = nodeQuery("/*");
6
7
 
@@ -38,10 +39,23 @@ export default class Verifier {
38
39
  verifyChildNodes(childNodes, ...remainingArguments) {
39
40
  let childNodesVerify;
40
41
 
41
- const index = 0,
42
- childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodes, ...remainingArguments);
42
+ const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
43
43
 
44
- childNodesVerify = childNodesVerifyAhead; ///
44
+ if (lastRemainingArgumentFunction) {
45
+ const index = 0,
46
+ childNodesVerifyAhead = this.verifyChildNodesAhead(index, childNodes, ...remainingArguments);
47
+
48
+ childNodesVerify = childNodesVerifyAhead; ///
49
+ } else {
50
+ childNodesVerify = childNodes.every((childNode) => {
51
+ const node = childNode,
52
+ nodeVerified = this.verifyNode(node, ...remainingArguments);
53
+
54
+ if (nodeVerified) {
55
+ return true;
56
+ }
57
+ });
58
+ }
45
59
 
46
60
  return childNodesVerify;
47
61
  }
@@ -49,10 +63,18 @@ export default class Verifier {
49
63
  verifyTerminalNode(terminalNode, ...remainingArguments) {
50
64
  let terminalNodeVerified;
51
65
 
52
- const verifyAhead = remainingArguments.pop(), ///
53
- verifiedAhead = verifyAhead(); ///
66
+ const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
67
+
68
+ if (lastRemainingArgumentFunction) {
69
+ const verifyAhead = remainingArguments.pop(), ///
70
+ verifiedAhead = verifyAhead();
71
+
72
+ terminalNodeVerified = verifiedAhead; ///
54
73
 
55
- terminalNodeVerified = verifiedAhead; ///
74
+ remainingArguments.push(verifyAhead);
75
+ } else {
76
+ terminalNodeVerified = true;
77
+ }
56
78
 
57
79
  return terminalNodeVerified;
58
80
  }
@@ -77,9 +77,7 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
77
77
 
78
78
  verifiedAhead = true;
79
79
 
80
- if (!verifiedAhead) {
81
- assignments.pop();
82
- }
80
+ assignments.pop();
83
81
  }
84
82
  }
85
83
  }
@@ -136,9 +134,7 @@ function verifyStatedTypeAssertion(typeAssertionNode, assignments, derived, loca
136
134
 
137
135
  verifiedAhead = true;
138
136
 
139
- if (!verifiedAhead) {
140
- assignments.pop();
141
- }
137
+ assignments.pop();
142
138
  }
143
139
  }
144
140
  }
@@ -47,14 +47,14 @@ function verifyMetavariable(metavariableNode, metaTypeNode, fileContext) {
47
47
  fileContext.debug(`The metavariable '${metavariableString}' is already present.`, metavariableNode);
48
48
  } else {
49
49
  const termTypes = [],
50
- metaTypes = [],
51
- argumentNode = argumentNodeQuery(metavariableNode),
52
- argumentVerified = verifyArgument(argumentNode, termTypes, fileContext),
53
- metaTypeVerified = verifyMetaType(metaTypeNode, metaTypes, fileContext);
50
+ metaTypes = [],
51
+ argumentNode = argumentNodeQuery(metavariableNode),
52
+ argumentVerified = verifyArgument(argumentNode, termTypes, fileContext),
53
+ metaTypeVerified = verifyMetaType(metaTypeNode, metaTypes, fileContext);
54
54
 
55
55
  if (argumentVerified && metaTypeVerified) {
56
56
  let termType,
57
- metaType;
57
+ metaType;
58
58
 
59
59
  const firstMetaType = first(metaTypes);
60
60
 
@@ -71,10 +71,10 @@ function verifyMetavariable(metavariableNode, metaTypeNode, fileContext) {
71
71
  }
72
72
 
73
73
  const node = metavariableNode, ///
74
- name = nameFromMetavariableNode(metavariableNode),
75
- metavariable = Metavariable.fromNodeNameTermTypeAndMetaType(node, name, termType, metaType),
76
- metavariableAssignment = MetavariableAssignment.fromMetavariable(metavariable),
77
- metavariableAssigned = metavariableAssignment.assign(fileContext);
74
+ name = nameFromMetavariableNode(metavariableNode),
75
+ metavariable = Metavariable.fromNodeNameTermTypeAndMetaType(node, name, termType, metaType),
76
+ metavariableAssignment = MetavariableAssignment.fromMetavariable(metavariable),
77
+ metavariableAssigned = metavariableAssignment.assign(fileContext);
78
78
 
79
79
  if (metavariableAssigned) {
80
80
  metavariableVerified = true;
@@ -4,13 +4,11 @@ import Equality from "../equality";
4
4
  import verifyTerms from "../verify/terms";
5
5
  import EqualityAssignment from "../assignment/equality";
6
6
 
7
- import { nodeQuery } from "../utilities/query";
8
- import { first, second } from "../utilities/array";
7
+ import { nodesQuery } from "../utilities/query";
9
8
 
10
- const leftTermNodeQuery = nodeQuery("/equality/term[0]"),
11
- rightTermNodeQuery = nodeQuery("/equality/term[1]");
9
+ const termNodesQuery = nodesQuery("/equality/term");
12
10
 
13
- export default function verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
11
+ export default function verifyEquality(equalityNode, assignments, derived, localContext) {
14
12
  let equalityVerified;
15
13
 
16
14
  const equalityString = localContext.nodeAsString(equalityNode);
@@ -23,7 +21,7 @@ export default function verifyEquality(equalityNode, assignments, derived, local
23
21
  ];
24
22
 
25
23
  equalityVerified = verifyEqualityFunctions.some((verifyEqualityFunction) => {
26
- const equalityVerified = verifyEqualityFunction(equalityNode, assignments, derived, localContext, verifyAhead);
24
+ const equalityVerified = verifyEqualityFunction(equalityNode, assignments, derived, localContext);
27
25
 
28
26
  if (equalityVerified) {
29
27
  return true;
@@ -37,7 +35,7 @@ export default function verifyEquality(equalityNode, assignments, derived, local
37
35
  return equalityVerified;
38
36
  }
39
37
 
40
- function verifyDerivedEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
38
+ function verifyDerivedEquality(equalityNode, assignments, derived, localContext) {
41
39
  let derivedEqualityVerified = false;
42
40
 
43
41
  if (derived) {
@@ -46,20 +44,11 @@ function verifyDerivedEquality(equalityNode, assignments, derived, localContext,
46
44
  localContext.trace(`Verifying the '${equalityString}' derived equality...`, equalityNode);
47
45
 
48
46
  const terms = [],
49
- leftTermNode = leftTermNodeQuery(equalityNode),
50
- rightTermNode = rightTermNodeQuery(equalityNode),
51
- termNodes = [
52
- leftTermNode,
53
- rightTermNode
54
- ],
47
+ termNodes = termNodesQuery(equalityNode),
55
48
  termsVerified = verifyTerms(termNodes, terms, localContext, () => {
56
49
  let verifiedAhead = false;
57
50
 
58
- const firstTerm = first(terms),
59
- secondTerm = second(terms),
60
- leftTerm = firstTerm, ///
61
- rightTerm = secondTerm, ///
62
- equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
51
+ const equality = Equality.fromTermsAndEqualityNode(terms, equalityNode);
63
52
 
64
53
  if (equality !== null) {
65
54
  const equalityEqual = equality.isEqual(localContext);
@@ -70,11 +59,7 @@ function verifyDerivedEquality(equalityNode, assignments, derived, localContext,
70
59
 
71
60
  assignments.push(assignment);
72
61
 
73
- verifiedAhead = verifyAhead();
74
-
75
- if (!verifiedAhead) {
76
- assignments.pop();
77
- }
62
+ verifiedAhead = true;
78
63
  }
79
64
  }
80
65
 
@@ -91,7 +76,7 @@ function verifyDerivedEquality(equalityNode, assignments, derived, localContext,
91
76
  return derivedEqualityVerified;
92
77
  }
93
78
 
94
- function verifyStatedEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
79
+ function verifyStatedEquality(equalityNode, assignments, derived, localContext) {
95
80
  let statedEqualityVerified = false;
96
81
 
97
82
  if (!derived) {
@@ -100,20 +85,11 @@ function verifyStatedEquality(equalityNode, assignments, derived, localContext,
100
85
  localContext.trace(`Verifying the '${equalityString}' stated equality...`, equalityNode);
101
86
 
102
87
  const terms = [],
103
- leftTermNode = leftTermNodeQuery(equalityNode),
104
- rightTermNode = rightTermNodeQuery(equalityNode),
105
- termNodes = [
106
- leftTermNode,
107
- rightTermNode
108
- ],
88
+ termNodes = termNodesQuery(equalityNode),
109
89
  termsVerified = verifyTerms(termNodes, terms, localContext, () => {
110
90
  let verifiedAhead = false;
111
91
 
112
- const firstTerm = first(terms),
113
- secondTerm = second(terms),
114
- leftTerm = firstTerm, ///
115
- rightTerm = secondTerm, ///
116
- equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
92
+ const equality = Equality.fromTermsAndEqualityNode(terms, equalityNode);
117
93
 
118
94
  if (equality !== null) {
119
95
  const equalityAssignment = EqualityAssignment.fromEquality(equality),
@@ -121,11 +97,7 @@ function verifyStatedEquality(equalityNode, assignments, derived, localContext,
121
97
 
122
98
  assignments.push(assignment);
123
99
 
124
- verifiedAhead = verifyAhead();
125
-
126
- if (!verifiedAhead) {
127
- assignments.pop();
128
- }
100
+ verifiedAhead = true;
129
101
  }
130
102
 
131
103
  return verifiedAhead;