occam-verify-cli 0.0.526 → 0.0.529

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 (221) hide show
  1. package/README.md +4 -0
  2. package/bin/abbreviations.js +5 -1
  3. package/bin/action/help.js +4 -0
  4. package/bin/action/verify.js +35 -13
  5. package/bin/actions.js +11 -6
  6. package/bin/defaults.js +4 -0
  7. package/bin/options.js +4 -0
  8. package/bin/utilities/releaseContext.js +5 -7
  9. package/lib/assertion/type.js +10 -40
  10. package/lib/axiom.js +8 -8
  11. package/lib/axiomLemmaTheoremConjecture.js +190 -0
  12. package/lib/combinator.js +4 -3
  13. package/lib/conclusion.js +8 -7
  14. package/lib/conjecture.js +141 -0
  15. package/lib/consequence.js +6 -5
  16. package/lib/constants.js +11 -27
  17. package/lib/constructor.js +5 -4
  18. package/lib/context/file.js +88 -73
  19. package/lib/context/metaproof.js +51 -20
  20. package/lib/context/proof.js +48 -114
  21. package/lib/context/release/directory.js +25 -6
  22. package/lib/context/release/file.js +38 -25
  23. package/lib/context/release.js +32 -51
  24. package/lib/equality.js +79 -51
  25. package/lib/index.js +4 -16
  26. package/lib/kinds.js +5 -1
  27. package/lib/label.js +4 -3
  28. package/lib/lemma.js +8 -8
  29. package/lib/log.js +146 -0
  30. package/lib/matcher.js +25 -75
  31. package/lib/metaTypeNames.js +13 -0
  32. package/lib/mixins/file.js +62 -2
  33. package/lib/mixins/logging.js +13 -13
  34. package/lib/node/metastatement/bracketed.js +16 -0
  35. package/lib/node/statement/bracketed.js +16 -0
  36. package/lib/node/statement/combinator/bracketed.js +17 -0
  37. package/lib/node/statement/combinator/equality.js +17 -0
  38. package/lib/node/statement/equality.js +16 -0
  39. package/lib/ocmbinator/bracketed.js +3 -4
  40. package/lib/ocmbinator/equality.js +3 -4
  41. package/lib/premise.js +13 -12
  42. package/lib/rule.js +5 -5
  43. package/lib/ruleNames.js +1 -9
  44. package/lib/step/metaproof.js +28 -25
  45. package/lib/step/proof.js +23 -1
  46. package/lib/substitution/metastatementForMetavariable.js +16 -13
  47. package/lib/substitution/statementForMetavariable.js +16 -13
  48. package/lib/substitution/termForVariable.js +76 -0
  49. package/lib/supposition.js +7 -6
  50. package/lib/theorem.js +8 -8
  51. package/lib/type.js +12 -5
  52. package/lib/utilities/metaproof.js +60 -0
  53. package/lib/utilities/node.js +56 -0
  54. package/lib/utilities/proof.js +60 -0
  55. package/lib/utilities/releaseContext.js +24 -12
  56. package/lib/utilities/string.js +3 -38
  57. package/lib/variable.js +4 -38
  58. package/lib/{matcher → verifier}/metastatementForMetavariable/conclusion.js +12 -12
  59. package/lib/{matcher → verifier}/metastatementForMetavariable/premise.js +12 -12
  60. package/lib/verifier/metastatementForMetavariable.js +198 -0
  61. package/lib/{matcher → verifier}/statementForMetavariable/conclusion.js +12 -12
  62. package/lib/{matcher → verifier}/statementForMetavariable/premise.js +12 -12
  63. package/lib/verifier/statementForMetavariable.js +203 -0
  64. package/lib/{matcher/statementForVariable → verifier/termForVariable}/consequence.js +13 -13
  65. package/lib/{matcher/statementForVariable → verifier/termForVariable}/supposition.js +13 -13
  66. package/lib/verifier/termForVariable.js +198 -0
  67. package/lib/verifier.js +92 -0
  68. package/lib/verify/assertion/type.js +62 -41
  69. package/lib/verify/axiom.js +3 -6
  70. package/lib/verify/conclusion.js +2 -4
  71. package/lib/verify/conjecture.js +54 -0
  72. package/lib/verify/consequence.js +2 -4
  73. package/lib/verify/declaration/combinator.js +1 -3
  74. package/lib/verify/declaration/constructor.js +1 -3
  75. package/lib/verify/declaration/topLevel.js +7 -5
  76. package/lib/verify/declaration/type.js +1 -3
  77. package/lib/verify/declaration/variable.js +1 -3
  78. package/lib/verify/derivation.js +1 -5
  79. package/lib/verify/label.js +1 -3
  80. package/lib/verify/lemma.js +3 -6
  81. package/lib/verify/metastatement/qualified.js +2 -5
  82. package/lib/verify/metastatement/unqualified.js +2 -5
  83. package/lib/verify/metastatement.js +1 -3
  84. package/lib/verify/premise.js +2 -4
  85. package/lib/verify/proof.js +3 -5
  86. package/lib/verify/rule.js +3 -6
  87. package/lib/verify/ruleDerivation.js +1 -5
  88. package/lib/verify/ruleProof.js +3 -5
  89. package/lib/verify/statement/qualified.js +40 -13
  90. package/lib/verify/statement/unqualified.js +2 -5
  91. package/lib/verify/statement.js +56 -62
  92. package/lib/verify/statementAsCombinator.js +4 -6
  93. package/lib/verify/supposition.js +2 -4
  94. package/lib/verify/term.js +4 -10
  95. package/lib/verify/termAsConstructor.js +6 -9
  96. package/lib/verify/theorem.js +3 -6
  97. package/lib/verify/type.js +5 -9
  98. package/lib/verify/variable.js +5 -9
  99. package/package.json +1 -1
  100. package/src/assertion/type.js +7 -32
  101. package/src/axiom.js +4 -4
  102. package/src/{axiomLemmaTheorem.js → axiomLemmaTheoremConjecture.js} +9 -9
  103. package/src/combinator.js +3 -3
  104. package/src/conclusion.js +7 -7
  105. package/src/conjecture.js +13 -0
  106. package/src/consequence.js +5 -5
  107. package/src/constants.js +3 -7
  108. package/src/constructor.js +4 -4
  109. package/src/context/file.js +85 -65
  110. package/src/context/metaproof.js +55 -15
  111. package/src/context/proof.js +53 -50
  112. package/src/context/release/directory.js +31 -7
  113. package/src/context/release/file.js +47 -31
  114. package/src/context/release.js +23 -32
  115. package/src/equality.js +108 -61
  116. package/src/index.js +2 -4
  117. package/src/kinds.js +1 -0
  118. package/src/label.js +3 -3
  119. package/src/lemma.js +4 -4
  120. package/src/log.js +116 -0
  121. package/src/matcher.js +32 -24
  122. package/src/metaTypeNames.js +3 -0
  123. package/src/mixins/file.js +46 -1
  124. package/src/mixins/logging.js +6 -6
  125. package/src/node/metastatement/bracketed.js +9 -0
  126. package/src/node/statement/bracketed.js +9 -0
  127. package/src/node/statement/combinator/bracketed.js +10 -0
  128. package/src/node/statement/combinator/equality.js +11 -0
  129. package/src/node/statement/equality.js +10 -0
  130. package/src/ocmbinator/bracketed.js +2 -5
  131. package/src/ocmbinator/equality.js +2 -5
  132. package/src/premise.js +13 -13
  133. package/src/rule.js +4 -4
  134. package/src/ruleNames.js +0 -2
  135. package/src/step/metaproof.js +32 -29
  136. package/src/step/proof.js +28 -0
  137. package/src/substitution/metastatementForMetavariable.js +10 -15
  138. package/src/substitution/statementForMetavariable.js +11 -16
  139. package/src/substitution/termForVariable.js +36 -0
  140. package/src/supposition.js +6 -6
  141. package/src/theorem.js +4 -4
  142. package/src/type.js +17 -7
  143. package/src/utilities/metaproof.js +62 -0
  144. package/src/utilities/node.js +73 -0
  145. package/src/utilities/proof.js +62 -0
  146. package/src/utilities/releaseContext.js +30 -12
  147. package/src/utilities/string.js +4 -53
  148. package/src/variable.js +4 -37
  149. package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
  150. package/src/verifier/metastatementForMetavariable/premise.js +9 -0
  151. package/src/verifier/metastatementForMetavariable.js +89 -0
  152. package/src/verifier/statementForMetavariable/conclusion.js +9 -0
  153. package/src/verifier/statementForMetavariable/premise.js +9 -0
  154. package/src/verifier/statementForMetavariable.js +105 -0
  155. package/src/verifier/termForVariable/consequence.js +9 -0
  156. package/src/verifier/termForVariable/supposition.js +9 -0
  157. package/src/verifier/termForVariable.js +89 -0
  158. package/src/verifier.js +74 -0
  159. package/src/verify/assertion/type.js +74 -74
  160. package/src/verify/axiom.js +2 -9
  161. package/src/verify/conclusion.js +1 -7
  162. package/src/verify/conjecture.js +67 -0
  163. package/src/verify/consequence.js +1 -7
  164. package/src/verify/declaration/combinator.js +0 -6
  165. package/src/verify/declaration/constructor.js +0 -6
  166. package/src/verify/declaration/topLevel.js +7 -6
  167. package/src/verify/declaration/type.js +0 -6
  168. package/src/verify/declaration/variable.js +0 -6
  169. package/src/verify/derivation.js +0 -12
  170. package/src/verify/label.js +0 -6
  171. package/src/verify/lemma.js +4 -11
  172. package/src/verify/metastatement/qualified.js +1 -8
  173. package/src/verify/metastatement/unqualified.js +1 -8
  174. package/src/verify/metastatement.js +0 -6
  175. package/src/verify/premise.js +1 -7
  176. package/src/verify/proof.js +1 -7
  177. package/src/verify/rule.js +2 -9
  178. package/src/verify/ruleDerivation.js +0 -12
  179. package/src/verify/ruleProof.js +1 -7
  180. package/src/verify/statement/qualified.js +54 -20
  181. package/src/verify/statement/unqualified.js +1 -8
  182. package/src/verify/statement.js +65 -95
  183. package/src/verify/statementAsCombinator.js +3 -9
  184. package/src/verify/supposition.js +1 -7
  185. package/src/verify/term.js +3 -21
  186. package/src/verify/termAsConstructor.js +5 -13
  187. package/src/verify/theorem.js +2 -9
  188. package/src/verify/type.js +4 -13
  189. package/src/verify/variable.js +4 -13
  190. package/bin/callbacks.js +0 -48
  191. package/lib/axiomLemmaTheorem.js +0 -190
  192. package/lib/callbacks.js +0 -75
  193. package/lib/context/release/combinator.js +0 -64
  194. package/lib/jsonTypes.js +0 -30
  195. package/lib/matcher/metastatementForMetavariable.js +0 -201
  196. package/lib/matcher/statementForMetavariable.js +0 -201
  197. package/lib/matcher/statementForVariable.js +0 -201
  198. package/lib/mixins/callbacks.js +0 -27
  199. package/lib/substitution/statementForVariable.js +0 -86
  200. package/lib/utilities/json.js +0 -187
  201. package/lib/utilities/substitution.js +0 -61
  202. package/lib/utilities/version.js +0 -32
  203. package/lib/versionChanges.js +0 -34
  204. package/src/callbacks.js +0 -39
  205. package/src/context/release/combinator.js +0 -39
  206. package/src/jsonTypes.js +0 -6
  207. package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
  208. package/src/matcher/metastatementForMetavariable/premise.js +0 -9
  209. package/src/matcher/metastatementForMetavariable.js +0 -99
  210. package/src/matcher/statementForMetavariable/conclusion.js +0 -9
  211. package/src/matcher/statementForMetavariable/premise.js +0 -9
  212. package/src/matcher/statementForMetavariable.js +0 -99
  213. package/src/matcher/statementForVariable/consequence.js +0 -9
  214. package/src/matcher/statementForVariable/supposition.js +0 -9
  215. package/src/matcher/statementForVariable.js +0 -99
  216. package/src/mixins/callbacks.js +0 -15
  217. package/src/substitution/statementForVariable.js +0 -64
  218. package/src/utilities/json.js +0 -264
  219. package/src/utilities/substitution.js +0 -79
  220. package/src/utilities/version.js +0 -30
  221. package/src/versionChanges.js +0 -11
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ import { statementNodeFromStatementString } from "../../utilities/node";
4
+
5
+ const bracketedStatementString = "(n=m)";
6
+
7
+ const bracketedStatementNode = statementNodeFromStatementString(bracketedStatementString);
8
+
9
+ export default bracketedStatementNode;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ import { STATEMENT_META_TYPE_NAME } from "../../../metaTypeNames";
4
+ import { statementNodeFromStatementString } from "../../../utilities/node";
5
+
6
+ const bracketedCombinatorStatementString = `(${STATEMENT_META_TYPE_NAME})`;
7
+
8
+ const bracketedCombinatorStatementNode = statementNodeFromStatementString(bracketedCombinatorStatementString);
9
+
10
+ export default bracketedCombinatorStatementNode;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import { OBJECT_TYPE_NAME } from "../../../typeNames";
4
+ import { statementNodeFromStatementString } from "../../../utilities/node";
5
+
6
+ const equalityCombinatorStatementString = `${OBJECT_TYPE_NAME} = ${OBJECT_TYPE_NAME}`;
7
+
8
+ const equalityCombinatorStatementNode = statementNodeFromStatementString(equalityCombinatorStatementString);
9
+
10
+ export default equalityCombinatorStatementNode;
11
+
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ import { statementNodeFromStatementString } from "../../utilities/node";
4
+
5
+ const equalityStatementString = "n=m";
6
+
7
+ const equalityStatementNode = statementNodeFromStatementString(equalityStatementString);
8
+
9
+ export default equalityStatementNode;
10
+
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  import Combinator from "../combinator";
4
- import combinatorReleaseContext from "../context/release/combinator";
5
4
 
6
- import { statementNodeFromStatementString } from "../utilities/string";
5
+ import bracketedCombinatorStatementNode from "../node/statement/combinator/bracketed";
7
6
 
8
7
  class BracketedCombinator extends Combinator {
9
8
  static fromNothing() {
10
- const statementString = "(Statement)",
11
- releaseContext = combinatorReleaseContext, ///
12
- statementNode = statementNodeFromStatementString(statementString, releaseContext),
9
+ const statementNode = bracketedCombinatorStatementNode, ///
13
10
  bracketedCombinator = new BracketedCombinator(statementNode);
14
11
 
15
12
  return bracketedCombinator;
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  import Combinator from "../combinator";
4
- import CombinatorReleaseContext from "../context/release/combinator";
5
4
 
6
- import { statementNodeFromStatementString } from "../utilities/string";
5
+ import equalityCombinatorStatementNode from "../node/statement/combinator/equality";
7
6
 
8
7
  class EqualityCombinator extends Combinator {
9
8
  static fromNothing() {
10
- const statementString = "Object = Object",
11
- releaseContext = CombinatorReleaseContext, ///
12
- statementNode = statementNodeFromStatementString(statementString, releaseContext),
9
+ const statementNode = equalityCombinatorStatementNode, ///
13
10
  equalityCombinator = new EqualityCombinator(statementNode);
14
11
 
15
12
  return equalityCombinator;
package/src/premise.js CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { nodeAsString } from "./utilities/string";
4
4
  import { nodeQuery, nodesQuery } from "./utilities/query";
5
- import { premiseStatementForMetavariableMatcher } from "./matcher/statementForMetavariable/premise";
6
- import { metastatementNodeFromMetastatementString } from "./utilities/string";
7
- import { premiseMetastatementForMetavariableMatcher } from "./matcher/metastatementForMetavariable/premise";
5
+ import { premiseStatementForMetavariableVerifier } from "./verifier/statementForMetavariable/premise";
6
+ import { metastatementNodeFromMetastatementString } from "./utilities/node";
7
+ import { premiseMetastatementForMetavariableVerifier } from "./verifier/metastatementForMetavariable/premise";
8
8
 
9
9
  const ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
10
10
  ruleSubproofPremiseMetastatementQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
@@ -34,16 +34,16 @@ export default class Premise {
34
34
  ...subproofSuppositionStatementNodes,
35
35
  subproofSubDerivationLastStatementNode
36
36
  ],
37
- ruleSubproofAssertionMetaSubproofStatementNodes = ruleSubproofAssertionMetaSubproofStatementNodesQuery(subproofAssertionNode),
37
+ ruleSubproofAssertionMetastatementNodes = ruleSubproofAssertionMetastatementNodesQuery(subproofAssertionNode),
38
38
  subproofStatementNodesLength = subproofStatementNodes.length,
39
- ruleSubproofAssertionMetaSubproofStatementNodesLength = ruleSubproofAssertionMetaSubproofStatementNodes.length;
39
+ ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
40
40
 
41
- if (subproofStatementNodesLength === ruleSubproofAssertionMetaSubproofStatementNodesLength) {
42
- subproofNodeMatches = ruleSubproofAssertionMetaSubproofStatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
41
+ if (subproofStatementNodesLength === ruleSubproofAssertionMetastatementNodesLength) {
42
+ subproofNodeMatches = ruleSubproofAssertionMetastatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
43
43
  const subproofStatementNode = subproofStatementNodes[index],
44
44
  nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
45
45
  nonTerminalNodeB = subproofStatementNode, ///
46
- nonTerminalNodeMatches = premiseStatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
46
+ nonTerminalNodeMatches = premiseStatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
47
47
 
48
48
  if (nonTerminalNodeMatches) {
49
49
  return true;
@@ -58,7 +58,7 @@ export default class Premise {
58
58
  matchStatementNode(statementNode, substitutions) {
59
59
  const nonTerminalNodeA = this.metastatementNode, ///
60
60
  nonTerminalNodeB = statementNode, ///
61
- nonTerminalNodeMatches = premiseStatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
61
+ nonTerminalNodeMatches = premiseStatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
62
62
  statementNodeMatches = nonTerminalNodeMatches; ///
63
63
 
64
64
  return statementNodeMatches;
@@ -85,7 +85,7 @@ export default class Premise {
85
85
  const ruleSubproofMetastatementNode = ruleSubproofMetastatementNodes[index],
86
86
  nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
87
87
  nonTerminalNodeB = ruleSubproofMetastatementNode, ///
88
- nonTerminalNodeMatches = premiseMetastatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
88
+ nonTerminalNodeMatches = premiseMetastatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
89
89
 
90
90
  if (nonTerminalNodeMatches) {
91
91
  return true;
@@ -100,7 +100,7 @@ export default class Premise {
100
100
  matchMetastatementNode(metastatementNode, substitutions) {
101
101
  const nonTerminalNodeA = this.metastatementNode, ///
102
102
  nonTerminalNodeB = metastatementNode, ///
103
- nonTerminalNodeMatches = premiseMetastatementForMetavariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
103
+ nonTerminalNodeMatches = premiseMetastatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
104
104
  metastatementNodeMatches = nonTerminalNodeMatches; ///
105
105
 
106
106
  return metastatementNodeMatches;
@@ -116,10 +116,10 @@ export default class Premise {
116
116
  return json;
117
117
  }
118
118
 
119
- static fromJSON(json, releaseContext) {
119
+ static fromJSON(json, lexer, parser) {
120
120
  const { metastatement } = json,
121
121
  metastatementString = metastatement, ///
122
- metastatementNode = metastatementNodeFromMetastatementString(metastatementString, releaseContext),
122
+ metastatementNode = metastatementNodeFromMetastatementString(metastatementString, lexer, parser),
123
123
  premise = new Premise(metastatementNode);
124
124
 
125
125
  return premise;
package/src/rule.js CHANGED
@@ -134,7 +134,7 @@ export default class Rule {
134
134
  return json;
135
135
  }
136
136
 
137
- static fromJSON(json, releaseContext) {
137
+ static fromJSON(json, lexer, parser) {
138
138
  let rule;
139
139
 
140
140
  let { labels } = json;
@@ -143,7 +143,7 @@ export default class Rule {
143
143
 
144
144
  labels = labelsJSON.map((labelJSON) => {
145
145
  const json = labelJSON, ///
146
- label = Label.fromJSON(json, releaseContext);
146
+ label = Label.fromJSON(json, lexer, parser);
147
147
 
148
148
  return label;
149
149
  });
@@ -154,7 +154,7 @@ export default class Rule {
154
154
 
155
155
  premises = premisesJSON.map((premiseJSON) => {
156
156
  const json = premiseJSON, ///
157
- premise = Premise.fromJSON(json, releaseContext);
157
+ premise = Premise.fromJSON(json, lexer, parser);
158
158
 
159
159
  return premise;
160
160
  });
@@ -165,7 +165,7 @@ export default class Rule {
165
165
 
166
166
  json = conclusionJSON; ///
167
167
 
168
- conclusion = Conclusion.fromJSON(json, releaseContext);
168
+ conclusion = Conclusion.fromJSON(json, lexer, parser);
169
169
 
170
170
  rule = new Rule(labels, premises, conclusion);
171
171
 
package/src/ruleNames.js CHANGED
@@ -5,9 +5,7 @@ export const TYPE_RULE_NAME = "type";
5
5
  export const LABEL_RULE_NAME = "label";
6
6
  export const ARGUMENT_RULE_NAME = "argument";
7
7
  export const SUBPROOF_RULE_NAME = "subproof";
8
- export const VARIABLE_RULE_NAME = "variable";
9
8
  export const STATEMENT_RULE_NAME = "statement";
10
- export const METAVARIABLE_RULE_NAME = "metavariable";
11
9
  export const METASTATEMENT_RULE_NAME = "metastatement";
12
10
  export const RULE_SUBPROOF_RULE_NAME = "ruleSubproof";
13
11
  export const META_ARGUMENT_RULE_NAME = "metaArgument";
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { first, second } from "../utilities/array";
4
4
  import { nodeQuery, nodesQuery } from "../utilities/query";
5
- import { matchBracketedNonTerminalNode } from "../utilities/substitution";
5
+ import { matchMetastatementModuloBrackets } from "../utilities/metaproof";
6
6
 
7
7
  const metastatementNodesQuery = nodesQuery("/ruleSubproofAssertion/metastatement"),
8
8
  ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion"),
@@ -22,41 +22,44 @@ export default class MetaproofStep {
22
22
  return this.metastatementNode;
23
23
  }
24
24
 
25
- matchMetastatement(metastatementNode) {
26
- let metastatementMatches;
25
+ match(metastatementNode) {
26
+ let matches = false;
27
27
 
28
- const ruleSubproofAssertionNode = ruleSubproofAssertionNodeQuery(metastatementNode);
28
+ if (!matches) {
29
+ const ruleSubproofAssertionNode = ruleSubproofAssertionNodeQuery(metastatementNode);
29
30
 
30
- if (ruleSubproofAssertionNode !== null) {
31
- const ruleSubproofAssertionMatches = this.matchRuleSubproofAssertion(ruleSubproofAssertionNode);
31
+ if (ruleSubproofAssertionNode !== null) {
32
+ const matchesRuleSubproofAssertion = this.matchRuleSubproofAssertion(ruleSubproofAssertionNode);
32
33
 
33
- metastatementMatches = ruleSubproofAssertionMatches; ///
34
- } else {
35
- const metastatementsMatch = this.matchMetastatements(metastatementNode);
34
+ matches = matchesRuleSubproofAssertion; ///
35
+ }
36
+ }
36
37
 
37
- metastatementMatches = metastatementsMatch; //
38
+ if (!matches) {
39
+ const matchesMetastatement = this.matchMetastatement(metastatementNode);
40
+
41
+ matches = matchesMetastatement; ///
38
42
  }
39
43
 
40
- return metastatementMatches;
44
+ return matches;
41
45
  }
42
46
 
43
- matchMetastatements(metastatementNode) {
44
- let metastatementsMatch = false;
47
+ matchMetastatement(metastatementNode) {
48
+ let matchesMetastatement = false;
45
49
 
46
50
  if (this.metastatementNode !== null) {
47
- const nonTerminalNodeA = metastatementNode, ///
48
- nonTerminalNodeB = this.metastatementNode, ///
49
- bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB),
50
- metastatementNodeMatches = bracketedNodeMatches; ///
51
+ const metastatementNodeA = metastatementNode, ///
52
+ metastatementNodeB = this.metastatementNode, ///
53
+ metastatementMatchesModuloBrackets = matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB);
51
54
 
52
- return metastatementNodeMatches;
55
+ matchesMetastatement = metastatementMatchesModuloBrackets; ///
53
56
  }
54
57
 
55
- return metastatementsMatch;
58
+ return matchesMetastatement;
56
59
  }
57
60
 
58
61
  matchRuleSubproofAssertion(ruleSubproofAssertionNode) {
59
- let ruleSubproofAssertionMatches = false;
62
+ let matchesRuleSubproofAssertion = false;
60
63
 
61
64
  if (this.ruleSubproofNode !== null) {
62
65
  const ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(ruleSubproofAssertionNode),
@@ -64,23 +67,23 @@ export default class MetaproofStep {
64
67
  qualifiedOrUnqualifiedMetastatementMetastatementNodes = qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery(this.ruleSubproofNode),
65
68
  firstQualifiedOrUnqualifiedMetastatementMetastatementNode = first(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
66
69
 
67
- const nonTerminalNodeA = firstRuleSubproofAssertionMetastatementNode, ///
68
- nonTerminalNodeB = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
69
- bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
70
+ const metastatementNodeA = firstRuleSubproofAssertionMetastatementNode, ///
71
+ metastatementNodeB = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
72
+ metastatementMatchesModuloBrackets = matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB);
70
73
 
71
- if (bracketedNodeMatches) {
74
+ if (metastatementMatchesModuloBrackets) {
72
75
  const secondRuleSubproofAssertionMetastatementNode = second(ruleSubproofAssertionMetastatementNodes),
73
76
  secondQualifiedOrUnqualifiedMetastatementMetastatementNode = second(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
74
77
 
75
- const nonTerminalNodeA = secondRuleSubproofAssertionMetastatementNode, ///
76
- nonTerminalNodeB = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
77
- bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
78
+ const metastatementNodeA = secondRuleSubproofAssertionMetastatementNode, ///
79
+ metastatementNodeB = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
80
+ metastatementMatchesModuloBrackets = matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB);
78
81
 
79
- ruleSubproofAssertionMatches = bracketedNodeMatches; ///
82
+ matchesRuleSubproofAssertion = metastatementMatchesModuloBrackets; ///
80
83
  }
81
84
  }
82
85
 
83
- return ruleSubproofAssertionMatches;
86
+ return matchesRuleSubproofAssertion;
84
87
  }
85
88
 
86
89
  static fromRuleSubproofNode(ruleSubproofNode) {
package/src/step/proof.js CHANGED
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ import { META_ARGUMENT_RULE_NAME } from "../ruleNames";
4
+ import { matchStatementModuloBrackets } from "../utilities/proof";
5
+
3
6
  export default class ProofStep {
4
7
  constructor(subproofNode, statementNode) {
5
8
  this.subproofNode = subproofNode;
@@ -14,6 +17,31 @@ export default class ProofStep {
14
17
  return this.statementNode;
15
18
  }
16
19
 
20
+ match(statementNode) {
21
+ let matches;
22
+
23
+ const matchesStatement = this.matchStatement(statementNode);
24
+
25
+ matches = matchesStatement; //
26
+
27
+ return matches;
28
+ }
29
+
30
+ matchStatement(statementNode) {
31
+ let matchesStatement = false;
32
+
33
+ if (this.statementNode !== null) {
34
+ const ruleName = META_ARGUMENT_RULE_NAME,
35
+ statementNodeA = statementNode, ///
36
+ statementNodeB = this.statementNode, ///
37
+ statementMatchesModuloBrackets = matchStatementModuloBrackets(statementNodeA, statementNodeB, ruleName);
38
+
39
+ matchesStatement = statementMatchesModuloBrackets; ///
40
+ }
41
+
42
+ return matchesStatement;
43
+ }
44
+
17
45
  static fromSubproofNode(subproofNode) {
18
46
  const statementNode = null,
19
47
  metaProofStep = new ProofStep(subproofNode, statementNode);
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { matcher } from "../matcher";
4
- import { METASTATEMENT_RULE_NAME } from "../ruleNames";
5
- import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
3
+ import matcher from "../matcher";
4
+
5
+ import { bracketedMetastatementChildNodeFromMetastatementNode } from "../utilities/metaproof";
6
6
 
7
7
  export default class MetastatementForMetavariableSubstitution {
8
8
  constructor(metavariableName, metastatementNode) {
@@ -28,14 +28,11 @@ export default class MetastatementForMetavariableSubstitution {
28
28
  matchesMetastatementNode = nodeMatches; ///
29
29
 
30
30
  if (!matchesMetastatementNode) {
31
- const nonTerminalNode = metastatementNode, ///
32
- childNodes = nonTerminalNode.getChildNodes(), ///
33
- ruleName = METASTATEMENT_RULE_NAME;
34
-
35
- metastatementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
31
+ const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode);
36
32
 
37
- if (metastatementNode !== null) {
38
- const nodeA = this.metastatementNode, ///
33
+ if (bracketedMetastatementChildNode !== null) {
34
+ const metastatementNode = bracketedMetastatementChildNode, ///
35
+ nodeA = this.metastatementNode, ///
39
36
  nodeB = metastatementNode,
40
37
  nodeMatches = matcher.matchNode(nodeA, nodeB);
41
38
 
@@ -49,13 +46,11 @@ export default class MetastatementForMetavariableSubstitution {
49
46
  static fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode) {
50
47
  let metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
51
48
 
52
- const nonTerminalNode = metastatementNode, ///
53
- childNodes = nonTerminalNode.getChildNodes(),
54
- ruleName = METASTATEMENT_RULE_NAME;
49
+ const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode);
55
50
 
56
- metastatementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
51
+ if (bracketedMetastatementChildNode !== null) {
52
+ const metastatementNode = bracketedMetastatementChildNode; ///
57
53
 
58
- if (metastatementNode !== null) {
59
54
  metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
60
55
  }
61
56
 
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { matcher } from "../matcher";
4
- import { STATEMENT_RULE_NAME } from "../ruleNames";
5
- import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
3
+ import matcher from "../matcher";
4
+
5
+ import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
6
6
 
7
7
  export default class StatementForMetavariableSubstitution {
8
8
  constructor(metavariableName, statementNode) {
@@ -28,16 +28,13 @@ export default class StatementForMetavariableSubstitution {
28
28
  matchesStatementNode = nodeMatches; ///
29
29
 
30
30
  if (!matchesStatementNode) {
31
- const nonTerminalNode = statementNode, ///
32
- childNodes = nonTerminalNode.getChildNodes(), ///
33
- ruleName = STATEMENT_RULE_NAME;
34
-
35
- statementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
31
+ const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
36
32
 
37
- if (statementNode !== null) {
38
- const nodeA = this.statementNode, ///
33
+ if (bracketedStatementChildNode !== null) {
34
+ const statementNode = bracketedStatementChildNode, ///
35
+ nodeA = this.statementNode, ///
39
36
  nodeB = statementNode,
40
- nodeMatches = matchNode(nodeA, nodeB);
37
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
41
38
 
42
39
  matchesStatementNode = nodeMatches; ///
43
40
  }
@@ -49,13 +46,11 @@ export default class StatementForMetavariableSubstitution {
49
46
  static fromMetavariableNameAndStatementNode(metavariableName, statementNode) {
50
47
  let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
51
48
 
52
- const nonTerminalNode = statementNode, ///
53
- childNodes = nonTerminalNode.getChildNodes(),
54
- ruleName = STATEMENT_RULE_NAME;
49
+ const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
55
50
 
56
- statementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
51
+ if (bracketedStatementChildNode !== null) {
52
+ const statementNode = bracketedStatementChildNode; ///
57
53
 
58
- if (statementNode !== null) {
59
54
  statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
60
55
  }
61
56
 
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ import matcher from "../matcher";
4
+
5
+ export default class TermForVariableSubstitution {
6
+ constructor(variableName, termNode) {
7
+ this.variableName = variableName;
8
+ this.termNode = termNode;
9
+ }
10
+
11
+ getVariableName() {
12
+ return this.variableName;
13
+ }
14
+
15
+ getTermNode() {
16
+ return this.termNode;
17
+ }
18
+
19
+ matchTermNode(termNode) {
20
+ let matchesTermNode;
21
+
22
+ const nodeA = this.termNode, ///
23
+ nodeB = termNode,
24
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
25
+
26
+ matchesTermNode = nodeMatches; ///
27
+
28
+ return matchesTermNode;
29
+ }
30
+
31
+ static fromVariableNameAndTermNode(variableName, termNode) {
32
+ const termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
33
+
34
+ return termForVariableSubstitution;
35
+ }
36
+ }
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { nodeAsString } from "./utilities/string";
4
4
  import { nodeQuery, nodesQuery } from "./utilities/query";
5
- import { statementNodeFromStatementString } from "./utilities/string";
6
- import { suppositionStatementForVariableMatcher } from "./matcher/statementForVariable/supposition";
5
+ import { statementNodeFromStatementString } from "./utilities/node";
6
+ import { suppositionTermForVariableVerifier } from "./verifier/termForVariable/supposition";
7
7
 
8
8
  const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
9
9
  subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
@@ -40,7 +40,7 @@ export default class Supposition {
40
40
  const subproofStatementNode = subproofStatementNodes[index],
41
41
  nonTerminalNodeA = subproofAssertionStatementNode, ///
42
42
  nonTerminalNodeB = subproofStatementNode, ///
43
- nonTerminalNodeMatches = suppositionStatementForVariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
43
+ nonTerminalNodeMatches = suppositionTermForVariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
44
44
 
45
45
  if (nonTerminalNodeMatches) {
46
46
  return true;
@@ -55,7 +55,7 @@ export default class Supposition {
55
55
  matchStatementNode(statementNode, substitutions) {
56
56
  const nonTerminalNodeA = this.statementNode, ///
57
57
  nonTerminalNodeB = statementNode, ///
58
- nonTerminalNodeMatches = suppositionStatementForVariableMatcher.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
58
+ nonTerminalNodeMatches = suppositionTermForVariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
59
59
  statementNodeMatches = nonTerminalNodeMatches; ///
60
60
 
61
61
  return statementNodeMatches;
@@ -71,10 +71,10 @@ export default class Supposition {
71
71
  return json;
72
72
  }
73
73
 
74
- static fromJSON(json, releaseContext) {
74
+ static fromJSON(json, lexer, parser) {
75
75
  const { statement } = json,
76
76
  statementString = statement, ///
77
- statementNode = statementNodeFromStatementString(statementString, releaseContext),
77
+ statementNode = statementNodeFromStatementString(statementString, lexer, parser),
78
78
  supposition = new Supposition(statementNode);
79
79
 
80
80
  return supposition;
package/src/theorem.js CHANGED
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import AxiomLemmaTheorem from "./axiomLemmaTheorem";
3
+ import AxiomLemmaTheoremConjecture from "./axiomLemmaTheoremConjecture";
4
4
 
5
5
  import { THEOREM_KIND } from "./kinds";
6
6
 
7
- export default class Theorem extends AxiomLemmaTheorem {
7
+ export default class Theorem extends AxiomLemmaTheoremConjecture {
8
8
  static kind = THEOREM_KIND;
9
9
 
10
- static fromJSON(json, releaseContext) { return AxiomLemmaTheorem.fromJSON(Theorem, json, releaseContext); }
10
+ static fromJSON(json, lexer, parser) { return AxiomLemmaTheoremConjecture.fromJSON(Theorem, json, lexer, parser); }
11
11
 
12
- static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheorem.fromLabelsSuppositionsAndConsequence(Theorem, labels, suppositions, consequence); }
12
+ static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Theorem, labels, suppositions, consequence); }
13
13
  }
package/src/type.js CHANGED
@@ -124,14 +124,14 @@ export default class Type {
124
124
  return json;
125
125
  }
126
126
 
127
- static fromJSON(json, releaseContext) {
127
+ static fromJSON(json, lexer, parser) {
128
128
  let type;
129
129
 
130
130
  let { superType } = json;
131
131
 
132
132
  const superTypeJSON = superType; ///
133
133
 
134
- superType = superTypeFromSuperTypeJSON(superTypeJSON, releaseContext);
134
+ superType = superTypeFromSuperTypeJSON(superTypeJSON, lexer, parser);
135
135
 
136
136
  const { name } = json;
137
137
 
@@ -181,12 +181,22 @@ class ObjectType extends Type {
181
181
 
182
182
  export const objectType = ObjectType.fromNothing();
183
183
 
184
- function superTypeFromSuperTypeJSON(superTypeJSON, releaseContext) {
184
+ function superTypeFromSuperTypeJSON(superTypeJSON, lexer, parser) {
185
+ let superType;
186
+
185
187
  const json = superTypeJSON, ///
186
- { name } = json,
187
- superType = (name === OBJECT_TYPE_NAME) ?
188
- objectType :
189
- Type.fromJSON(json, releaseContext);
188
+ { name } = json;
189
+
190
+ if (name === OBJECT_TYPE_NAME) {
191
+ superType = objectType; ///
192
+ } else {
193
+ const typeName = name, ///
194
+ type = releaseContext.findTypeByTypeName(typeName);
195
+
196
+ superType = (type !== null) ?
197
+ type : ///
198
+ Type.fromJSON(json, lexer, parser); ///
199
+ }
190
200
 
191
201
  return superType;
192
202
  }