occam-verify-cli 0.0.968 → 0.0.972

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 +35 -21
  59. package/lib/verify/equality.js +13 -13
  60. package/lib/verify/frame.js +38 -24
  61. package/lib/verify/judgement.js +14 -14
  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 +48 -25
  127. package/src/verify/equality.js +13 -13
  128. package/src/verify/frame.js +48 -28
  129. package/src/verify/judgement.js +14 -14
  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
@@ -1,76 +1,34 @@
1
1
  "use strict";
2
2
 
3
- import TermForVariableSubstitution from "../substitution/termForVariable";
4
- import unifyStatementWithStatement from "../unify/statementAtainstStatement";
5
3
  import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
6
4
 
7
- import { nodeQuery } from "../utilities/query";
5
+ import { metavariableFromStatementNode } from "../utilities/unify";
8
6
 
9
- const metavariableNodeQuery = nodeQuery("/statement/metavariable");
10
-
11
- export default function unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB) {
7
+ export default function unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutions, localContextA, localContextB) {
12
8
  let metavariableUnifiedWithStatement = false;
13
9
 
14
- const substitution = substitutions.findSubstitution((substitution) => {
15
- const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNodeA);
16
-
17
- if (substitutionMatchesMetavariableNodeA) {
18
- return true;
19
- }
20
- }) || null;
10
+ const simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNodeA),
11
+ substitution = simpleSubstitution; ///
21
12
 
22
13
  if (substitution !== null) {
23
- const substitutionStatementNode = substitution.getStatementNode();
24
-
25
- if (substitutionNodeA !== null) {
26
- const substitutionNode = substitutionNodeA, ///
27
- termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionNode(substitutionNode),
28
- localContext = localContextB, ///
29
- substitution = termForVariableSubstitution, ///
30
- statementNodeA = substitutionStatementNode, ///
31
- statementUnifiedWithStatement = unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
32
-
33
- if (statementUnifiedWithStatement) {
34
- metavariableUnifiedWithStatement = true;
35
- }
36
- } else {
37
- const substitutionSubstitution = substitution.getSubstitution();
38
-
39
- if (substitutionSubstitution !== null) {
40
- const statementNodeA = statementNodeB; ///
41
-
42
- statementNodeB = substitutionStatementNode; ///
43
-
44
- const localContext = localContextB, ///
45
- substitution = substitutionSubstitution,
46
- statementUnifiedWithStatement = unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContext, localContext);
47
-
48
- if (statementUnifiedWithStatement) {
49
- metavariableUnifiedWithStatement = true;
50
- }
51
- } else {
52
- const substitutionMatchesStatementNodeB = substitution.matchStatementNode(statementNodeB);
14
+ const statementNodeMatches = substitution.matchStatementNode(statementNodeB);
53
15
 
54
- if (substitutionMatchesStatementNodeB) {
55
- metavariableUnifiedWithStatement = true;
56
- }
57
- }
16
+ if (statementNodeMatches) {
17
+ metavariableUnifiedWithStatement = true;
58
18
  }
59
19
  } else {
60
- const metavariableA = localContextA.findMetavariableByMetavariableNode(metavariableNodeA);
61
-
62
- if (metavariableA !== null) {
63
- const metavariableB = metavariableFromStatementNode(statementNodeB, localContextB);
20
+ const metavariableA = localContextA.findMetavariableByMetavariableNode(metavariableNodeA),
21
+ metavariableB = metavariableFromStatementNode(statementNodeB, localContextB);
64
22
 
65
- if (metavariableA !== metavariableB) {
66
- const statementNode = statementNodeB, ///
67
- substitutionNode = substitutionNodeA, ///
68
- metavariableNode = metavariableNodeA, ///
69
- statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeStatementNodeAndSubstitutionNode(metavariableNode, statementNode, substitutionNode),
70
- substitution = statementForMetavariableSubstitution; ///
23
+ if (metavariableA === metavariableB) {
24
+ metavariableUnifiedWithStatement = true;
25
+ } else {
26
+ const statementNode = statementNodeB, ///
27
+ metavariableNode = metavariableNodeA, ///
28
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeAndMetavariableNode(statementNode, metavariableNode),
29
+ substitution = statementForMetavariableSubstitution; ///
71
30
 
72
- substitutions.addSubstitution(substitution, localContextA, localContextB);
73
- }
31
+ substitutions.addSubstitution(substitution, localContextA, localContextB);
74
32
 
75
33
  metavariableUnifiedWithStatement = true;
76
34
  }
@@ -78,15 +36,3 @@ export default function unifyMetavariableWithStatement(metavariableNodeA, statem
78
36
 
79
37
  return metavariableUnifiedWithStatement;
80
38
  }
81
-
82
- function metavariableFromStatementNode(statementNode, localContext) {
83
- let metavariable = null;
84
-
85
- const metavariableNode = metavariableNodeQuery(statementNode)
86
-
87
- if (metavariableNode !== null) {
88
- metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
89
- }
90
-
91
- return metavariable;
92
- }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ import StatementForMetavariableSubstitution from "../substitution/statementForMetavariable";
4
+
5
+ import { metavariableFromStatementNode } from "../utilities/unify";
6
+
7
+ export default function unifyMetavariableWithStatementGivenSubstitution(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB) {
8
+ let metavariableUnifiedWithStatementGivenSubstitution = false;
9
+
10
+ const complexSubstitution = substitutions.findComplexSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNodeA, substitutionNodeA),
11
+ substitution = complexSubstitution; ///
12
+
13
+ if (substitution !== null) {
14
+ const statementNodeMatches = substitution.matchStatementNode(statementNodeB);
15
+
16
+ if (statementNodeMatches) {
17
+ metavariableUnifiedWithStatementGivenSubstitution = true;
18
+ }
19
+ } else {
20
+ const metavariableA = localContextA.findMetavariableByMetavariableNode(metavariableNodeA),
21
+ metavariableB = metavariableFromStatementNode(statementNodeB, localContextB);
22
+
23
+ if (metavariableA === metavariableB) {
24
+ metavariableUnifiedWithStatementGivenSubstitution = false; ///
25
+ } else {
26
+ const statementNode = statementNodeB, ///
27
+ substitutionNode = substitutionNodeA, ///
28
+ metavariableNode = metavariableNodeA, ///
29
+ statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromStatementNodeMetavariableNodeAndSubstitutionNode(statementNode, metavariableNode, substitutionNode),
30
+ substitution = statementForMetavariableSubstitution; ///
31
+
32
+ substitutions.addSubstitution(substitution, localContextA, localContextB);
33
+
34
+ metavariableUnifiedWithStatementGivenSubstitution = true;
35
+ }
36
+ }
37
+
38
+ return metavariableUnifiedWithStatementGivenSubstitution;
39
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { subproofNodeAsSubproofString } from "../utilities/unify";
3
+ import { subproofNodeAsSubproofString } from "../utilities/subproof";
4
4
 
5
5
  export default function unifyPremiseWithProofStep(premiseA, proofStepB, substitutions, localContextA, localContextB) {
6
6
  let premiseUnified = false;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ import { nodeQuery } from "../../utilities/query";
4
+
5
+ const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
6
+ metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!");
7
+
8
+ const unifyQualifiedStatementFunctions = [
9
+ unifyQualifiedStatementAWithRule,
10
+ unifyQualifiedStatementAWithAxiom,
11
+ unifyQualifiedStatementAWithLemma,
12
+ unifyQualifiedStatementAWithTheorem,
13
+ unifyQualifiedStatementAWithConjecture,
14
+ unifyQualifiedStatementAWithReference
15
+ ];
16
+
17
+ export default function unifyQualifiedStatement(qualifiedStatementNode, substitutions, localContext) {
18
+ let qualifiedStatementUnified;
19
+
20
+ const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
21
+
22
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
23
+
24
+ qualifiedStatementUnified = unifyQualifiedStatementFunctions.some((unifyQualifiedStatementFunction) => {
25
+ const qualifiedStatementUnified = unifyQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
26
+
27
+ return qualifiedStatementUnified;
28
+ });
29
+
30
+ if (qualifiedStatementUnified) {
31
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
32
+ }
33
+
34
+ return qualifiedStatementUnified;
35
+ }
36
+
37
+ function unifyQualifiedStatementAWithRule(qualifiedStatementNode, substitutions, localContext) {
38
+ let qualifiedStatementUnifiedWithRule = false;
39
+
40
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
41
+ rule = localContext.findRuleByMetavariableNode(metavariableNode);
42
+
43
+ if (rule !== null) {
44
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
45
+ metavariableString = localContext.nodeAsString(metavariableNode),
46
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
47
+
48
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' rule...`, qualifiedStatementNode);
49
+
50
+ const statementUnified = rule.unifyStatement(statementNode, localContext);
51
+
52
+ qualifiedStatementUnifiedWithRule = statementUnified; ///
53
+
54
+ if (qualifiedStatementUnifiedWithRule) {
55
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' rule.`, qualifiedStatementNode);
56
+ }
57
+ }
58
+
59
+ return qualifiedStatementUnifiedWithRule;
60
+ }
61
+
62
+ function unifyQualifiedStatementAWithAxiom(qualifiedStatementNode, substitutions, localContext) {
63
+ let qualifiedStatementUnifiedWithAxiom = false;
64
+
65
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
66
+ axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
67
+
68
+ if (axiom !== null) {
69
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
70
+ metavariableString = localContext.nodeAsString(metavariableNode),
71
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
72
+
73
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' axiom...`, qualifiedStatementNode);
74
+
75
+ const statementUnified = axiom.unifyStatement(statementNode, localContext);
76
+
77
+ qualifiedStatementUnifiedWithAxiom = statementUnified; ///
78
+
79
+ if (qualifiedStatementUnifiedWithAxiom) {
80
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' axiom.`, qualifiedStatementNode);
81
+ }
82
+ }
83
+
84
+ return qualifiedStatementUnifiedWithAxiom;
85
+ }
86
+
87
+ function unifyQualifiedStatementAWithLemma(qualifiedStatementNode, substitutions, localContext) {
88
+ let qualifiedStatementUnifiedWithLemma = false;
89
+
90
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
91
+ lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
92
+
93
+ if (lemma !== null) {
94
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
95
+ metavariableString = localContext.nodeAsString(metavariableNode),
96
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
97
+
98
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' lemma...`, qualifiedStatementNode);
99
+
100
+ const statementUnified = lemma.unifyStatement(statementNode, localContext);
101
+
102
+ qualifiedStatementUnifiedWithLemma = statementUnified; ///
103
+
104
+ if (qualifiedStatementUnifiedWithLemma) {
105
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' lemma.`, qualifiedStatementNode);
106
+ }
107
+ }
108
+
109
+ return qualifiedStatementUnifiedWithLemma;
110
+ }
111
+
112
+ function unifyQualifiedStatementAWithTheorem(qualifiedStatementNode, substitutions, localContext) {
113
+ let qualifiedStatementUnifiedWithTheorem = false;
114
+
115
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
116
+ theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
117
+
118
+ if (theorem !== null) {
119
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
120
+ metavariableString = localContext.nodeAsString(metavariableNode),
121
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
122
+
123
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' theorem...`, qualifiedStatementNode);
124
+
125
+ const statementUnified = theorem.unifyStatement(statementNode, localContext);
126
+
127
+ qualifiedStatementUnifiedWithTheorem = statementUnified; ///
128
+
129
+ if (qualifiedStatementUnifiedWithTheorem) {
130
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' theorem.`, qualifiedStatementNode);
131
+ }
132
+ }
133
+
134
+ return qualifiedStatementUnifiedWithTheorem;
135
+ }
136
+
137
+ function unifyQualifiedStatementAWithConjecture(qualifiedStatementNode, substitutions, localContext) {
138
+ let qualifiedStatementUnifiedWithConjecture = false;
139
+
140
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
141
+ conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
142
+
143
+ if (conjecture !== null) {
144
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
145
+ metavariableString = localContext.nodeAsString(metavariableNode),
146
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
147
+
148
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' conjecture...`, qualifiedStatementNode);
149
+
150
+ const statementUnified = conjecture.unifyStatement(statementNode, localContext);
151
+
152
+ qualifiedStatementUnifiedWithConjecture = statementUnified; ///
153
+
154
+ if (qualifiedStatementUnifiedWithConjecture) {
155
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' conjecture.`, qualifiedStatementNode);
156
+ }
157
+ }
158
+
159
+ return qualifiedStatementUnifiedWithConjecture;
160
+ }
161
+
162
+ function unifyQualifiedStatementAWithReference(qualifiedStatementNode, substitutions, localContext) {
163
+ let qualifiedStatementUnifiedWithReference = false;
164
+
165
+ const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
166
+ metavariableString = localContext.nodeAsString(metavariableNode),
167
+ metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
168
+ qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
169
+
170
+ localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' reference...`, qualifiedStatementNode);
171
+
172
+ if (metavariablePresent) {
173
+
174
+ debugger
175
+
176
+ }
177
+
178
+ if (qualifiedStatementUnifiedWithReference) {
179
+ localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' reference.`, qualifiedStatementNode);
180
+ }
181
+
182
+ return qualifiedStatementUnifiedWithReference;
183
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ import { nodeQuery } from "../../utilities/query";
4
+
5
+ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
6
+
7
+ export default function unifyUnqualifiedStatement(unqualifiedStatementNode, localContext) {
8
+ let unqualifiedStatementUnified;
9
+
10
+ const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
11
+
12
+ localContext.trace(`Unifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
13
+
14
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
15
+ statementUnified = localContext.unifyStatement(statementNode, localContext);
16
+
17
+ unqualifiedStatementUnified = statementUnified; ///
18
+
19
+ if (unqualifiedStatementUnified) {
20
+ localContext.debug(`...unified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
21
+ }
22
+
23
+ return unqualifiedStatementUnified;
24
+ }
@@ -3,7 +3,7 @@
3
3
  import bracketedCombinator from "../ocmbinator/bracketed";
4
4
  import statementWithCombinatorUnifier from "../unifier/statementWithCombinator";
5
5
 
6
- export default function unifyStatementWithBracketedCombinator(statementNode, assignments, derived, localContext) {
6
+ export default function unifyStatementWithBracketedCombinator(statementNode, assignments, stated, localContext) {
7
7
  let statementUnifiedWithBracketedCombinator;
8
8
 
9
9
  const statementString = localContext.nodeAsString(statementNode);
@@ -12,7 +12,7 @@ export default function unifyStatementWithBracketedCombinator(statementNode, ass
12
12
 
13
13
  const bracketedCombinatorStatementNode = bracketedCombinator.getStatementNode();
14
14
 
15
- statementUnifiedWithBracketedCombinator = statementWithCombinatorUnifier.unify(statementNode, bracketedCombinatorStatementNode, assignments, derived, localContext);
15
+ statementUnifiedWithBracketedCombinator = statementWithCombinatorUnifier.unify(statementNode, bracketedCombinatorStatementNode, assignments, stated, localContext);
16
16
 
17
17
  if (statementUnifiedWithBracketedCombinator) {
18
18
  localContext.debug(`...unified the '${statementString}' statement with the bracketed combinator.`, statementNode);
@@ -2,13 +2,13 @@
2
2
 
3
3
  import statementWithCombinatorUnifier from "../unifier/statementWithCombinator";
4
4
 
5
- export default function unifyStatementWithCombinators(statementNode, assignments, derived, localContext) {
5
+ export default function unifyStatementWithCombinators(statementNode, assignments, stated, localContext) {
6
6
  let statementUnifiedWithCombinators;
7
7
 
8
8
  const combinators = localContext.getCombinators();
9
9
 
10
10
  statementUnifiedWithCombinators = combinators.some((combinator) => {
11
- const statementUnifiedWithCombinator = unifyStatementWithCombinator(statementNode, combinator, assignments, derived, localContext);
11
+ const statementUnifiedWithCombinator = unifyStatementWithCombinator(statementNode, combinator, assignments, stated, localContext);
12
12
 
13
13
  if (statementUnifiedWithCombinator) {
14
14
  return true;
@@ -18,7 +18,7 @@ export default function unifyStatementWithCombinators(statementNode, assignments
18
18
  return statementUnifiedWithCombinators;
19
19
  }
20
20
 
21
- function unifyStatementWithCombinator(statementNode, combinator, assignments, derived, localContext) {
21
+ function unifyStatementWithCombinator(statementNode, combinator, assignments, stated, localContext) {
22
22
  let statementUnifiedWithCombinator;
23
23
 
24
24
  const statementString = localContext.nodeAsString(statementNode),
@@ -28,7 +28,7 @@ function unifyStatementWithCombinator(statementNode, combinator, assignments, de
28
28
 
29
29
  const combinatorStatementNode = combinator.getStatementNode();
30
30
 
31
- statementUnifiedWithCombinator = statementWithCombinatorUnifier.unify(statementNode, combinatorStatementNode, assignments, derived, localContext);
31
+ statementUnifiedWithCombinator = statementWithCombinatorUnifier.unify(statementNode, combinatorStatementNode, assignments, stated, localContext);
32
32
 
33
33
  if (statementUnifiedWithCombinator) {
34
34
  localContext.debug(`...unified the '${statementString}' statement with the '${combinatorString}' combinator.`, statementNode);
@@ -2,11 +2,11 @@
2
2
 
3
3
  import verifyStatementGivenMetaType from "../verify/statementGivenMetaType";
4
4
 
5
- export default function unifyStatementWithMetaType(statementNode, metaTypeNode, assignments, derived, localContext) {
5
+ export default function unifyStatementWithMetaType(statementNode, metaTypeNode, assignments, stated, localContext) {
6
6
  let statementUnifiedWithMetaType;
7
7
 
8
8
  const metaType = localContext.findMetaTypeByMetaTypeNode(metaTypeNode),
9
- statementVerifiedGivenMetaType = verifyStatementGivenMetaType(statementNode, metaType, assignments, derived, localContext);
9
+ statementVerifiedGivenMetaType = verifyStatementGivenMetaType(statementNode, metaType, assignments, stated, localContext);
10
10
 
11
11
  statementUnifiedWithMetaType = statementVerifiedGivenMetaType; ///
12
12
 
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import Substitutions from "../substitutions";
4
+ import intrinsicLevelUnifier from "../unifier/intrinsicLevel";
5
+
6
+ export default function unifyStatementWithStatementGivenEquivalences(statementNodeA, statementNodeB, equivalences, localContextA, localContextB) {
7
+ let statementUnifiedWithStatementGivenEquivalences = false;
8
+
9
+ const statementStringA = localContextA.nodeAsString(statementNodeA),
10
+ statementStringB = localContextB.nodeAsString(statementNodeB);
11
+
12
+ localContextB.trace(`Unifying the '${statementStringB}' statement with the '${statementStringA}' statement given equivalences...`, statementNodeB);
13
+
14
+ if (!statementUnifiedWithStatementGivenEquivalences) {
15
+ const substitutions = Substitutions.fromNothing(),
16
+ nodeA = statementNodeA, ///
17
+ nodeB = statementNodeB, ///
18
+ unified = intrinsicLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
19
+
20
+ if (unified) {
21
+ const substitutionsUnifiedWithEquivalences = substitutions.unifyWithEquivalences(equivalences, localContextA, localContextB);
22
+
23
+ statementUnifiedWithStatementGivenEquivalences = substitutionsUnifiedWithEquivalences; ///
24
+ }
25
+ }
26
+
27
+ if (!statementUnifiedWithStatementGivenEquivalences) {
28
+ const localContext = localContextA; ///
29
+
30
+ localContextA = localContextB; ///
31
+
32
+ localContextB = localContext; ///
33
+
34
+ const substitutions = Substitutions.fromNothing(),
35
+ nodeA = statementNodeB, ///
36
+ nodeB = statementNodeA, ///
37
+ unified = intrinsicLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
38
+
39
+ if (unified) {
40
+ const substitutionsUnifiedWithEquivalences = substitutions.unifyWithEquivalences(equivalences, localContextA, localContextB);
41
+
42
+ statementUnifiedWithStatementGivenEquivalences = substitutionsUnifiedWithEquivalences; ///
43
+ }
44
+ }
45
+
46
+ if (statementUnifiedWithStatementGivenEquivalences) {
47
+ localContextB.debug(`...unified the '${statementStringB}' statement with the '${statementStringA}' statement given equivalences.`, statementNodeB);
48
+ }
49
+
50
+ return statementUnifiedWithStatementGivenEquivalences;
51
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { subproofNodeAsSubproofString } from "../utilities/unify";
3
+ import { subproofNodeAsSubproofString } from "../utilities/subproof";
4
4
 
5
5
  export default function unifySuppositionWithProofStep(suppositionA, proofStepB, substitutions, localContextA, localContextB) {
6
6
  let suppositionUnified = false;
@@ -2,41 +2,32 @@
2
2
 
3
3
  import TermForVariableSubstitution from "../substitution/termForVariable";
4
4
 
5
- import { nodeQuery } from "../utilities/query";
6
-
7
- const variableNodeQuery = nodeQuery("/term/variable");
5
+ import { variableFromTermNode } from "../utilities/unify";
8
6
 
9
7
  export default function unifyVariableWithTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB) {
10
8
  let variableUnifiedWithTerm = false;
11
9
 
12
- const substitution = substitutions.findSubstitution((substitution) => {
13
- const substitutionMatchesVariableNodeA = substitution.matchVariableNode(variableNodeA);
14
-
15
- if (substitutionMatchesVariableNodeA) {
16
- return true;
17
- }
18
- }) || null;
10
+ const substitution = substitutions.findSubstitutionByVariableNode(variableNodeA);
19
11
 
20
12
  if (substitution !== null) {
21
- const substitutionMatchesTermNodeB = substitution.matchTermNode(termNodeB);
13
+ const termNodeMatches = substitution.matchTermNode(termNodeB);
22
14
 
23
- if (substitutionMatchesTermNodeB) {
15
+ if (termNodeMatches) {
24
16
  variableUnifiedWithTerm = true;
25
17
  }
26
18
  } else {
27
- const variableA = localContextA.findVariableByVariableNode(variableNodeA);
19
+ const variableA = localContextA.findVariableByVariableNode(variableNodeA),
20
+ variableB = variableFromTermNode(termNodeB, localContextB);
28
21
 
29
- if (variableA !== null) {
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; ///
22
+ if (variableA === variableB) {
23
+ variableUnifiedWithTerm = true;
24
+ } else {
25
+ const termNode = termNodeB, ///
26
+ variableNode = variableNodeA, ///
27
+ termForVariableSubstitution = TermForVariableSubstitution.fromTernNodeAndVariableNode(termNode, variableNode),
28
+ substitution = termForVariableSubstitution; ///
37
29
 
38
- substitutions.addSubstitution(substitution, localContextA, localContextB);
39
- }
30
+ substitutions.addSubstitution(substitution, localContextA, localContextB);
40
31
 
41
32
  variableUnifiedWithTerm = true;
42
33
  }
@@ -44,15 +35,3 @@ export default function unifyVariableWithTerm(variableNodeA, termNodeB, substitu
44
35
 
45
36
  return variableUnifiedWithTerm;
46
37
  }
47
-
48
- function variableFromTermNode(termNode, localContext) {
49
- let variable = null;
50
-
51
- const variableNode = variableNodeQuery(termNode);
52
-
53
- if (variableNode !== null) {
54
- variable = localContext.findVariableByVariableNode(variableNode);
55
- }
56
-
57
- return variable;
58
- }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- export const { first, second, last, extract, tail, push, match, prune, filter, compress, separate } = arrayUtilities;
5
+ export const { first, second, last, extract, tail, push, find, match, prune, filter, compress, separate } = arrayUtilities;
6
6
 
7
7
  export function reverse(array) {
8
8
  array = [ ///
@@ -12,21 +12,6 @@ export function reverse(array) {
12
12
  return array;
13
13
  }
14
14
 
15
- export function compare(arrayA, arrayB) {
16
- let compares = false;
17
-
18
- const arrayALength = arrayA.length,
19
- arrayBLength = arrayB.length;
20
-
21
- if (arrayALength === arrayBLength) {
22
- const correlates = correlate(arrayA, arrayB);
23
-
24
- compares = correlates; ///
25
- }
26
-
27
- return compares;
28
- }
29
-
30
15
  export function correlate(arrayA, arrayB, callback) {
31
16
  arrayB = [ ///
32
17
  ...arrayB
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ import { NOT } from "../constants";
4
+ import { nodesQuery } from "../utilities/query";
5
+
6
+ const operatorTerminalNodesQuery = nodesQuery("/*/@operator");
7
+
8
+ export function isAssertionNegated(assertionNode) {
9
+ const operatorTerminalNodes = operatorTerminalNodesQuery(assertionNode),
10
+ assertionNegated = operatorTerminalNodes.some((operatorTerminalNode) => {
11
+ const content = operatorTerminalNode.getContent();
12
+
13
+ if (content === NOT) {
14
+ return true;
15
+ }
16
+ });
17
+
18
+ return assertionNegated;
19
+ }