occam-verify-cli 0.0.527 → 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 (197) 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/axiom.js +3 -3
  10. package/lib/axiomLemmaTheoremConjecture.js +5 -5
  11. package/lib/combinator.js +4 -3
  12. package/lib/conclusion.js +8 -7
  13. package/lib/conjecture.js +3 -3
  14. package/lib/consequence.js +6 -5
  15. package/lib/constants.js +8 -12
  16. package/lib/constructor.js +5 -4
  17. package/lib/context/file.js +13 -35
  18. package/lib/context/metaproof.js +12 -11
  19. package/lib/context/proof.js +11 -10
  20. package/lib/context/release/directory.js +6 -6
  21. package/lib/context/release/file.js +15 -26
  22. package/lib/context/release.js +32 -51
  23. package/lib/equality.js +5 -4
  24. package/lib/index.js +4 -4
  25. package/lib/label.js +4 -3
  26. package/lib/lemma.js +3 -3
  27. package/lib/log.js +146 -0
  28. package/lib/matcher.js +14 -23
  29. package/lib/metaTypeNames.js +13 -0
  30. package/lib/mixins/logging.js +13 -13
  31. package/lib/node/metastatement/bracketed.js +16 -0
  32. package/lib/node/statement/bracketed.js +16 -0
  33. package/lib/node/statement/combinator/bracketed.js +17 -0
  34. package/lib/node/statement/combinator/equality.js +17 -0
  35. package/lib/node/statement/equality.js +16 -0
  36. package/lib/ocmbinator/bracketed.js +3 -4
  37. package/lib/ocmbinator/equality.js +3 -4
  38. package/lib/premise.js +10 -9
  39. package/lib/rule.js +5 -5
  40. package/lib/step/metaproof.js +28 -25
  41. package/lib/step/proof.js +15 -14
  42. package/lib/substitution/metastatementForMetavariable.js +16 -13
  43. package/lib/substitution/statementForMetavariable.js +17 -18
  44. package/lib/substitution/termForVariable.js +8 -18
  45. package/lib/supposition.js +7 -6
  46. package/lib/theorem.js +3 -3
  47. package/lib/type.js +5 -5
  48. package/lib/utilities/metaproof.js +60 -0
  49. package/lib/utilities/node.js +56 -0
  50. package/lib/utilities/proof.js +60 -0
  51. package/lib/utilities/releaseContext.js +24 -12
  52. package/lib/utilities/string.js +1 -32
  53. package/lib/{matcher → verifier}/metastatementForMetavariable/conclusion.js +12 -12
  54. package/lib/{matcher → verifier}/metastatementForMetavariable/premise.js +12 -12
  55. package/lib/verifier/metastatementForMetavariable.js +198 -0
  56. package/lib/{matcher → verifier}/statementForMetavariable/conclusion.js +12 -12
  57. package/lib/{matcher → verifier}/statementForMetavariable/premise.js +12 -12
  58. package/lib/verifier/statementForMetavariable.js +203 -0
  59. package/lib/{matcher → verifier}/termForVariable/consequence.js +12 -12
  60. package/lib/{matcher → verifier}/termForVariable/supposition.js +12 -12
  61. package/lib/verifier/termForVariable.js +198 -0
  62. package/lib/verifier.js +92 -0
  63. package/lib/verify/assertion/type.js +6 -8
  64. package/lib/verify/axiom.js +3 -5
  65. package/lib/verify/conclusion.js +2 -4
  66. package/lib/verify/conjecture.js +3 -5
  67. package/lib/verify/consequence.js +2 -4
  68. package/lib/verify/declaration/combinator.js +1 -3
  69. package/lib/verify/declaration/constructor.js +1 -3
  70. package/lib/verify/declaration/topLevel.js +1 -3
  71. package/lib/verify/declaration/type.js +1 -3
  72. package/lib/verify/declaration/variable.js +1 -3
  73. package/lib/verify/derivation.js +1 -5
  74. package/lib/verify/label.js +1 -3
  75. package/lib/verify/lemma.js +3 -5
  76. package/lib/verify/metastatement/qualified.js +2 -4
  77. package/lib/verify/metastatement/unqualified.js +2 -4
  78. package/lib/verify/metastatement.js +1 -3
  79. package/lib/verify/premise.js +2 -4
  80. package/lib/verify/proof.js +3 -5
  81. package/lib/verify/rule.js +3 -5
  82. package/lib/verify/ruleDerivation.js +1 -5
  83. package/lib/verify/ruleProof.js +3 -5
  84. package/lib/verify/statement/qualified.js +2 -4
  85. package/lib/verify/statement/unqualified.js +2 -4
  86. package/lib/verify/statement.js +14 -17
  87. package/lib/verify/statementAsCombinator.js +4 -6
  88. package/lib/verify/supposition.js +2 -4
  89. package/lib/verify/term.js +4 -10
  90. package/lib/verify/termAsConstructor.js +6 -9
  91. package/lib/verify/theorem.js +3 -5
  92. package/lib/verify/type.js +5 -9
  93. package/lib/verify/variable.js +5 -9
  94. package/package.json +1 -1
  95. package/src/axiom.js +1 -1
  96. package/src/axiomLemmaTheoremConjecture.js +4 -4
  97. package/src/combinator.js +3 -3
  98. package/src/conclusion.js +7 -7
  99. package/src/conjecture.js +1 -1
  100. package/src/consequence.js +5 -5
  101. package/src/constants.js +2 -3
  102. package/src/constructor.js +4 -4
  103. package/src/context/file.js +6 -30
  104. package/src/context/metaproof.js +13 -10
  105. package/src/context/proof.js +11 -9
  106. package/src/context/release/directory.js +7 -7
  107. package/src/context/release/file.js +17 -32
  108. package/src/context/release.js +23 -32
  109. package/src/equality.js +6 -8
  110. package/src/index.js +2 -1
  111. package/src/label.js +3 -3
  112. package/src/lemma.js +1 -1
  113. package/src/log.js +116 -0
  114. package/src/matcher.js +11 -9
  115. package/src/metaTypeNames.js +3 -0
  116. package/src/mixins/logging.js +6 -6
  117. package/src/node/metastatement/bracketed.js +9 -0
  118. package/src/node/statement/bracketed.js +9 -0
  119. package/src/node/statement/combinator/bracketed.js +10 -0
  120. package/src/node/statement/combinator/equality.js +11 -0
  121. package/src/node/statement/equality.js +10 -0
  122. package/src/ocmbinator/bracketed.js +2 -5
  123. package/src/ocmbinator/equality.js +2 -5
  124. package/src/premise.js +9 -9
  125. package/src/rule.js +4 -4
  126. package/src/step/metaproof.js +32 -29
  127. package/src/step/proof.js +15 -14
  128. package/src/substitution/metastatementForMetavariable.js +10 -15
  129. package/src/substitution/statementForMetavariable.js +12 -24
  130. package/src/substitution/termForVariable.js +2 -30
  131. package/src/supposition.js +6 -6
  132. package/src/theorem.js +1 -1
  133. package/src/type.js +4 -4
  134. package/src/utilities/metaproof.js +62 -0
  135. package/src/utilities/node.js +73 -0
  136. package/src/utilities/proof.js +62 -0
  137. package/src/utilities/releaseContext.js +30 -12
  138. package/src/utilities/string.js +0 -47
  139. package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
  140. package/src/verifier/metastatementForMetavariable/premise.js +9 -0
  141. package/src/{matcher → verifier}/metastatementForMetavariable.js +2 -2
  142. package/src/verifier/statementForMetavariable/conclusion.js +9 -0
  143. package/src/verifier/statementForMetavariable/premise.js +9 -0
  144. package/src/{matcher → verifier}/statementForMetavariable.js +2 -2
  145. package/src/verifier/termForVariable/consequence.js +9 -0
  146. package/src/verifier/termForVariable/supposition.js +9 -0
  147. package/src/{matcher → verifier}/termForVariable.js +2 -2
  148. package/src/verifier.js +74 -0
  149. package/src/verify/assertion/type.js +5 -11
  150. package/src/verify/axiom.js +2 -8
  151. package/src/verify/conclusion.js +1 -7
  152. package/src/verify/conjecture.js +2 -8
  153. package/src/verify/consequence.js +1 -7
  154. package/src/verify/declaration/combinator.js +0 -6
  155. package/src/verify/declaration/constructor.js +0 -6
  156. package/src/verify/declaration/topLevel.js +0 -6
  157. package/src/verify/declaration/type.js +0 -6
  158. package/src/verify/declaration/variable.js +0 -6
  159. package/src/verify/derivation.js +0 -12
  160. package/src/verify/label.js +0 -6
  161. package/src/verify/lemma.js +4 -10
  162. package/src/verify/metastatement/qualified.js +1 -7
  163. package/src/verify/metastatement/unqualified.js +1 -7
  164. package/src/verify/metastatement.js +0 -6
  165. package/src/verify/premise.js +1 -7
  166. package/src/verify/proof.js +1 -7
  167. package/src/verify/rule.js +2 -8
  168. package/src/verify/ruleDerivation.js +0 -12
  169. package/src/verify/ruleProof.js +1 -7
  170. package/src/verify/statement/qualified.js +1 -7
  171. package/src/verify/statement/unqualified.js +1 -7
  172. package/src/verify/statement.js +24 -34
  173. package/src/verify/statementAsCombinator.js +3 -9
  174. package/src/verify/supposition.js +1 -7
  175. package/src/verify/term.js +3 -21
  176. package/src/verify/termAsConstructor.js +5 -13
  177. package/src/verify/theorem.js +2 -8
  178. package/src/verify/type.js +4 -13
  179. package/src/verify/variable.js +4 -13
  180. package/bin/callbacks.js +0 -48
  181. package/lib/callbacks.js +0 -75
  182. package/lib/context/release/combinator.js +0 -64
  183. package/lib/matcher/metastatementForMetavariable.js +0 -198
  184. package/lib/matcher/statementForMetavariable.js +0 -203
  185. package/lib/matcher/termForVariable.js +0 -198
  186. package/lib/mixins/callbacks.js +0 -27
  187. package/lib/utilities/substitution.js +0 -60
  188. package/src/callbacks.js +0 -39
  189. package/src/context/release/combinator.js +0 -39
  190. package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
  191. package/src/matcher/metastatementForMetavariable/premise.js +0 -9
  192. package/src/matcher/statementForMetavariable/conclusion.js +0 -9
  193. package/src/matcher/statementForMetavariable/premise.js +0 -9
  194. package/src/matcher/termForVariable/consequence.js +0 -9
  195. package/src/matcher/termForVariable/supposition.js +0 -9
  196. package/src/mixins/callbacks.js +0 -15
  197. package/src/utilities/substitution.js +0 -81
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!"),
@@ -43,7 +43,7 @@ export default class Premise {
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
 
@@ -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,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import { matchBracketedNonTerminalNode } from "../utilities/substitution";
3
+ import { META_ARGUMENT_RULE_NAME } from "../ruleNames";
4
+ import { matchStatementModuloBrackets } from "../utilities/proof";
4
5
 
5
6
  export default class ProofStep {
6
7
  constructor(subproofNode, statementNode) {
@@ -16,29 +17,29 @@ export default class ProofStep {
16
17
  return this.statementNode;
17
18
  }
18
19
 
19
- matchStatement(statementNode) {
20
- let statementMatches;
20
+ match(statementNode) {
21
+ let matches;
21
22
 
22
- const statementsMatch = this.matchStatements(statementNode);
23
+ const matchesStatement = this.matchStatement(statementNode);
23
24
 
24
- statementMatches = statementsMatch; //
25
+ matches = matchesStatement; //
25
26
 
26
- return statementMatches;
27
+ return matches;
27
28
  }
28
29
 
29
- matchStatements(statementNode) {
30
- let statementsMatch = false;
30
+ matchStatement(statementNode) {
31
+ let matchesStatement = false;
31
32
 
32
33
  if (this.statementNode !== null) {
33
- const nonTerminalNodeA = statementNode, ///
34
- nonTerminalNodeB = this.statementNode, ///
35
- bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB),
36
- statementNodeMatches = bracketedNodeMatches; ///
34
+ const ruleName = META_ARGUMENT_RULE_NAME,
35
+ statementNodeA = statementNode, ///
36
+ statementNodeB = this.statementNode, ///
37
+ statementMatchesModuloBrackets = matchStatementModuloBrackets(statementNodeA, statementNodeB, ruleName);
37
38
 
38
- return statementNodeMatches;
39
+ matchesStatement = statementMatchesModuloBrackets; ///
39
40
  }
40
41
 
41
- return statementsMatch;
42
+ return matchesStatement;
42
43
  }
43
44
 
44
45
  static fromSubproofNode(subproofNode) {
@@ -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,11 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { matcher } from "../matcher";
4
- import { nodeQuery } from "../utilities/query";
5
- import { META_ARGUMENT_RULE_NAME } from "../ruleNames";
6
- import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
3
+ import matcher from "../matcher";
7
4
 
8
- const statementNodeQuery = nodeQuery('/metaArgument/statement!');
5
+ import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
9
6
 
10
7
  export default class StatementForMetavariableSubstitution {
11
8
  constructor(metavariableName, statementNode) {
@@ -31,21 +28,15 @@ export default class StatementForMetavariableSubstitution {
31
28
  matchesStatementNode = nodeMatches; ///
32
29
 
33
30
  if (!matchesStatementNode) {
34
- const nonTerminalNode = statementNode, ///
35
- childNodes = nonTerminalNode.getChildNodes(), ///
36
- ruleName = META_ARGUMENT_RULE_NAME,
37
- metaArgumentNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
31
+ const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
38
32
 
39
- if (metaArgumentNode !== null) {
40
- const statementNode = statementNodeQuery(metaArgumentNode);
33
+ if (bracketedStatementChildNode !== null) {
34
+ const statementNode = bracketedStatementChildNode, ///
35
+ nodeA = this.statementNode, ///
36
+ nodeB = statementNode,
37
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
41
38
 
42
- if (statementNode !== null) {
43
- const nodeA = this.statementNode, ///
44
- nodeB = statementNode,
45
- nodeMatches = matcher.matchNode(nodeA, nodeB);
46
-
47
- matchesStatementNode = nodeMatches; ///
48
- }
39
+ matchesStatementNode = nodeMatches; ///
49
40
  }
50
41
  }
51
42
 
@@ -55,14 +46,11 @@ export default class StatementForMetavariableSubstitution {
55
46
  static fromMetavariableNameAndStatementNode(metavariableName, statementNode) {
56
47
  let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
57
48
 
58
- const nonTerminalNode = statementNode, ///
59
- childNodes = nonTerminalNode.getChildNodes(),
60
- ruleName = META_ARGUMENT_RULE_NAME,
61
- metaArgumentNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
49
+ const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
62
50
 
63
- statementNode = statementNodeQuery(metaArgumentNode);
51
+ if (bracketedStatementChildNode !== null) {
52
+ const statementNode = bracketedStatementChildNode; ///
64
53
 
65
- if (statementNode !== null) {
66
54
  statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
67
55
  }
68
56
 
@@ -1,8 +1,6 @@
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";
6
4
 
7
5
  export default class TermForVariableSubstitution {
8
6
  constructor(variableName, termNode) {
@@ -27,37 +25,11 @@ export default class TermForVariableSubstitution {
27
25
 
28
26
  matchesTermNode = nodeMatches; ///
29
27
 
30
- if (!matchesTermNode) {
31
- const nonTerminalNode = termNode, ///
32
- childNodes = nonTerminalNode.getChildNodes(), ///
33
- ruleName = STATEMENT_RULE_NAME;
34
-
35
- termNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
36
-
37
- if (termNode !== null) {
38
- const nodeA = this.termNode, ///
39
- nodeB = termNode,
40
- nodeMatches = matcher.matchNode(nodeA, nodeB);
41
-
42
- matchesTermNode = nodeMatches; ///
43
- }
44
- }
45
-
46
28
  return matchesTermNode;
47
29
  }
48
30
 
49
31
  static fromVariableNameAndTermNode(variableName, termNode) {
50
- let termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
51
-
52
- const nonTerminalNode = termNode, ///
53
- childNodes = nonTerminalNode.getChildNodes(),
54
- ruleName = STATEMENT_RULE_NAME;
55
-
56
- termNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
57
-
58
- if (termNode !== null) {
59
- termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
60
- }
32
+ const termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
61
33
 
62
34
  return termForVariableSubstitution;
63
35
  }
@@ -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 { suppositionTermForVariableMatcher } from "./matcher/termForVariable/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 = suppositionTermForVariableMatcher.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 = suppositionTermForVariableMatcher.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
@@ -7,7 +7,7 @@ import { THEOREM_KIND } from "./kinds";
7
7
  export default class Theorem extends AxiomLemmaTheoremConjecture {
8
8
  static kind = THEOREM_KIND;
9
9
 
10
- static fromJSON(json, releaseContext) { return AxiomLemmaTheoremConjecture.fromJSON(Theorem, json, releaseContext); }
10
+ static fromJSON(json, lexer, parser) { return AxiomLemmaTheoremConjecture.fromJSON(Theorem, json, lexer, parser); }
11
11
 
12
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,7 +181,7 @@ 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
185
  let superType;
186
186
 
187
187
  const json = superTypeJSON, ///
@@ -195,7 +195,7 @@ function superTypeFromSuperTypeJSON(superTypeJSON, releaseContext) {
195
195
 
196
196
  superType = (type !== null) ?
197
197
  type : ///
198
- Type.fromJSON(json, releaseContext); ///
198
+ Type.fromJSON(json, lexer, parser); ///
199
199
  }
200
200
 
201
201
  return superType;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ import matcher from "../matcher";
4
+ import bracketedMetastatementNode from "../node/metastatement/bracketed";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { BRACKETED_METASTATEMENT_DEPTH } from "../constants";
8
+
9
+ const bracketedMetastatementChildNodeQuery = nodeQuery('/metastatement/metastatement!');
10
+
11
+ export function matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB) {
12
+ let metastatementMatchesModuloBrackets = false;
13
+
14
+ if (!metastatementMatchesModuloBrackets) {
15
+ const nodeA = metastatementNodeA, ///
16
+ nodeB = metastatementNodeB, ///
17
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
18
+
19
+ metastatementMatchesModuloBrackets = nodeMatches; ///
20
+ }
21
+
22
+ if (!metastatementMatchesModuloBrackets) {
23
+ const bracketedMetastatementChildNodeA = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNodeA);
24
+
25
+ if (bracketedMetastatementChildNodeA !== null) {
26
+ const nodeA = bracketedMetastatementChildNodeA, ///
27
+ nodeB = metastatementNodeB, ///
28
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
29
+
30
+ metastatementMatchesModuloBrackets = nodeMatches; ///
31
+ }
32
+ }
33
+
34
+ if (!metastatementMatchesModuloBrackets) {
35
+ const bracketedMetastatementChildNodeB = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNodeB);
36
+
37
+ if (bracketedMetastatementChildNodeB !== null) {
38
+ const nodeA = metastatementNodeA, ///
39
+ nodeB = bracketedMetastatementChildNodeB, ///
40
+ nodeMatches = matcher.matchNode(nodeA, nodeB);
41
+
42
+ metastatementMatchesModuloBrackets = nodeMatches; ///
43
+ }
44
+ }
45
+
46
+ return metastatementMatchesModuloBrackets;
47
+ }
48
+
49
+ export function bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode) {
50
+ let bracketedMetastatementChildNode = null;
51
+
52
+ const nodeA = metastatementNode, ///
53
+ nodeB = bracketedMetastatementNode, ///
54
+ depth = BRACKETED_METASTATEMENT_DEPTH,
55
+ nonTerminalNodeMatches = matcher.matchNode(nodeA, nodeB, depth);
56
+
57
+ if (nonTerminalNodeMatches) {
58
+ bracketedMetastatementChildNode = bracketedMetastatementChildNodeQuery(metastatementNode);
59
+ }
60
+
61
+ return bracketedMetastatementChildNode;
62
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ import { rewriteNodes } from "occam-grammar-utilities";
4
+ import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { LABEL_RULE_NAME, UNQUALIFIED_STATEMENT_RULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME, CONSTRUCTOR_DECLARATIONRULE_NAME } from "../ruleNames";
8
+
9
+ import { combinedCustomGrammarFromNothing } from "./customGrammar";
10
+
11
+ const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
12
+ { florenceParserFromCombinedCustomGrammar } = parsersUtilities;
13
+
14
+ const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
15
+ florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar),
16
+ florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
17
+
18
+ const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
19
+ statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
20
+ metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
21
+
22
+ export function termNodeFromTermString(termString, lexer, parser) {
23
+ const ruleName = CONSTRUCTOR_DECLARATIONRULE_NAME,
24
+ content = `Constructor ${termString}
25
+ `,
26
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
27
+ constructorDeclarationNode = node, ///
28
+ termNode = termNodeQuery(constructorDeclarationNode);
29
+
30
+ return termNode;
31
+ }
32
+
33
+ export function labelNodeFromLabelString(labelString, lexer, parser) {
34
+ const content = labelString, ///
35
+ ruleName = LABEL_RULE_NAME,
36
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
37
+ labelNode = node; ///
38
+
39
+ return labelNode;
40
+ }
41
+
42
+ export function statementNodeFromStatementString(statementString, lexer, parser) {
43
+ const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
44
+ content = `${statementString}
45
+ `,
46
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
47
+ unqualifiedStatementNode = node, ///
48
+ statementNode = statementNodeQuery(unqualifiedStatementNode);
49
+
50
+ return statementNode;
51
+ }
52
+
53
+ export function metastatementNodeFromMetastatementString(metastatementString, lexer, parser) {
54
+ const ruleName = UNQUALIFIED_METASTATEMENT_RULE_NAME,
55
+ content = `${metastatementString}
56
+ `,
57
+ node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
58
+ unqualifiedMetastatementNode = node, ///
59
+ metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
60
+
61
+ return metastatementNode;
62
+ }
63
+
64
+ function nodeFromContentAndRuleName(content, ruleName, lexer = florenceLexer, parser = florenceParser) {
65
+ const ruleMap = parser.getRuleMap(),
66
+ rule = ruleMap[ruleName],
67
+ tokens = lexer.tokenise(content),
68
+ node = parser.parse(tokens, rule);
69
+
70
+ rewriteNodes(node);
71
+
72
+ return node;
73
+ }