occam-verify-cli 1.0.438 → 1.0.448

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 (222) hide show
  1. package/lib/context/file.js +42 -39
  2. package/lib/context/local.js +34 -34
  3. package/lib/context/release.js +3 -7
  4. package/lib/context/temporary.js +26 -26
  5. package/lib/element/assertion/contained.js +45 -45
  6. package/lib/element/assertion/defined.js +13 -13
  7. package/lib/element/assertion/property.js +23 -22
  8. package/lib/element/assertion/satisfies.js +7 -6
  9. package/lib/element/assertion/subproof.js +20 -17
  10. package/lib/element/assertion/type.js +3 -2
  11. package/lib/element/assertion.js +1 -23
  12. package/lib/element/assumption.js +24 -22
  13. package/lib/element/axiom.js +27 -30
  14. package/lib/element/axiomLemmaTheoremConjecture.js +50 -57
  15. package/lib/element/{statement/combinator → combinator}/bracketed.js +16 -16
  16. package/lib/element/combinator.js +229 -0
  17. package/lib/element/conclusion.js +11 -9
  18. package/lib/element/{term/constructor → constructor}/bracketed.js +5 -5
  19. package/lib/element/constructor.js +232 -0
  20. package/lib/element/declaration/combinator.js +2 -16
  21. package/lib/element/declaration/complexType.js +12 -12
  22. package/lib/element/declaration/constructor.js +13 -11
  23. package/lib/element/declaration/simpleType.js +4 -4
  24. package/lib/element/declaration/typePrefix.js +2 -2
  25. package/lib/element/declaration/variable.js +3 -3
  26. package/lib/element/deduction.js +11 -9
  27. package/lib/element/derivation.js +17 -20
  28. package/lib/element/equivalence.js +10 -10
  29. package/lib/element/equivalences.js +5 -5
  30. package/lib/element/frame.js +32 -38
  31. package/lib/element/hypothesis.js +16 -57
  32. package/lib/element/judgement.js +6 -4
  33. package/lib/element/label.js +8 -8
  34. package/lib/element/metaLemmaMetatheorem.js +6 -39
  35. package/lib/element/metaType.js +17 -80
  36. package/lib/element/metavariable.js +38 -34
  37. package/lib/element/parameter.js +3 -3
  38. package/lib/element/premise.js +92 -174
  39. package/lib/element/proof.js +7 -7
  40. package/lib/element/proofAssertion.js +203 -0
  41. package/lib/element/property.js +9 -9
  42. package/lib/element/propertyRelation.js +13 -13
  43. package/lib/element/reference.js +16 -17
  44. package/lib/element/rule.js +46 -46
  45. package/lib/element/signature.js +11 -11
  46. package/lib/element/statement.js +18 -18
  47. package/lib/element/step.js +73 -124
  48. package/lib/element/subDerivation.js +17 -20
  49. package/lib/element/subproof.js +16 -24
  50. package/lib/element/substitution/frame.js +1 -7
  51. package/lib/element/substitution/reference.js +2 -3
  52. package/lib/element/substitution/statement.js +44 -15
  53. package/lib/element/substitution/term.js +10 -57
  54. package/lib/element/substitution.js +5 -11
  55. package/lib/element/substitutions.js +29 -29
  56. package/lib/element/supposition.js +95 -177
  57. package/lib/element/term.js +21 -34
  58. package/lib/element/type.js +47 -60
  59. package/lib/element/typePrefix.js +5 -5
  60. package/lib/element/variable.js +9 -9
  61. package/lib/element.js +9 -3
  62. package/lib/metaTypes.js +63 -0
  63. package/lib/node/axiomLemmaTheoremConjecture.js +9 -9
  64. package/lib/node/body/axiom.js +2 -25
  65. package/lib/node/body/conjecture.js +2 -25
  66. package/lib/node/body/lemma.js +2 -25
  67. package/lib/node/body/metaLemma.js +2 -25
  68. package/lib/node/body/metatheorem.js +2 -25
  69. package/lib/node/body/rule.js +15 -1
  70. package/lib/node/body/theorem.js +2 -25
  71. package/lib/node/body.js +25 -2
  72. package/lib/node/combinator.js +11 -2
  73. package/lib/node/constructor.js +11 -2
  74. package/lib/node/declaration/combinator.js +5 -5
  75. package/lib/node/declaration/constructor.js +8 -8
  76. package/lib/node/declaration/property.js +15 -15
  77. package/lib/node/declaration/simpleType.js +31 -31
  78. package/lib/node/declaration/variable.js +8 -8
  79. package/lib/node/equality.js +8 -8
  80. package/lib/node/frame.js +20 -20
  81. package/lib/node/header.js +22 -22
  82. package/lib/node/metaLemmaMetaTheorem.js +16 -16
  83. package/lib/node/metavariable.js +15 -15
  84. package/lib/node/property.js +8 -8
  85. package/lib/node/propertyRelation.js +8 -8
  86. package/lib/node/rule.js +16 -16
  87. package/lib/node/statement.js +12 -12
  88. package/lib/node/step.js +22 -22
  89. package/lib/node/subDerivation.js +1 -8
  90. package/lib/node/subproof.js +5 -12
  91. package/lib/node/substitution/frame.js +19 -19
  92. package/lib/node/substitution/statement.js +19 -19
  93. package/lib/node/substitution/term.js +19 -19
  94. package/lib/node/term.js +35 -35
  95. package/lib/preamble.js +5 -5
  96. package/lib/process/instantiate.js +20 -2
  97. package/lib/process/unify.js +39 -42
  98. package/lib/process/validate.js +431 -0
  99. package/lib/process/verify.js +44 -135
  100. package/lib/types.js +27 -0
  101. package/lib/utilities/brackets.js +9 -14
  102. package/lib/utilities/element.js +91 -55
  103. package/lib/utilities/instance.js +41 -28
  104. package/lib/utilities/statement.js +2 -2
  105. package/lib/utilities/string.js +25 -14
  106. package/lib/utilities/unification.js +237 -0
  107. package/lib/utilities/validation.js +251 -0
  108. package/package.json +6 -6
  109. package/src/context/file.js +40 -34
  110. package/src/context/local.js +34 -34
  111. package/src/context/release.js +2 -6
  112. package/src/context/temporary.js +15 -15
  113. package/src/element/assertion/contained.js +19 -20
  114. package/src/element/assertion/defined.js +11 -12
  115. package/src/element/assertion/property.js +20 -20
  116. package/src/element/assertion/satisfies.js +6 -6
  117. package/src/element/assertion/subproof.js +17 -15
  118. package/src/element/assertion/type.js +2 -2
  119. package/src/element/assertion.js +0 -2
  120. package/src/element/assumption.js +22 -19
  121. package/src/element/axiom.js +33 -37
  122. package/src/element/axiomLemmaTheoremConjecture.js +54 -73
  123. package/src/element/{statement/combinator → combinator}/bracketed.js +7 -7
  124. package/src/element/combinator.js +90 -0
  125. package/src/element/conclusion.js +12 -10
  126. package/src/element/{term/constructor → constructor}/bracketed.js +5 -5
  127. package/src/element/{term/constructor.js → constructor.js} +17 -25
  128. package/src/element/declaration/combinator.js +1 -22
  129. package/src/element/declaration/complexType.js +11 -11
  130. package/src/element/declaration/constructor.js +13 -10
  131. package/src/element/declaration/simpleType.js +3 -3
  132. package/src/element/declaration/typePrefix.js +1 -1
  133. package/src/element/declaration/variable.js +2 -2
  134. package/src/element/deduction.js +12 -9
  135. package/src/element/derivation.js +15 -19
  136. package/src/element/equivalence.js +8 -8
  137. package/src/element/equivalences.js +4 -4
  138. package/src/element/frame.js +28 -30
  139. package/src/element/hypothesis.js +16 -18
  140. package/src/element/judgement.js +6 -3
  141. package/src/element/label.js +4 -4
  142. package/src/element/metaLemmaMetatheorem.js +5 -69
  143. package/src/element/metaType.js +9 -45
  144. package/src/element/metavariable.js +34 -31
  145. package/src/element/parameter.js +2 -2
  146. package/src/element/premise.js +124 -99
  147. package/src/element/proof.js +6 -6
  148. package/src/element/proofAssertion.js +76 -0
  149. package/src/element/property.js +6 -6
  150. package/src/element/propertyRelation.js +11 -11
  151. package/src/element/reference.js +14 -21
  152. package/src/element/rule.js +39 -38
  153. package/src/element/signature.js +10 -9
  154. package/src/element/statement.js +16 -18
  155. package/src/element/step.js +78 -78
  156. package/src/element/subDerivation.js +15 -19
  157. package/src/element/subproof.js +11 -19
  158. package/src/element/substitution/frame.js +0 -2
  159. package/src/element/substitution/reference.js +1 -5
  160. package/src/element/substitution/statement.js +44 -14
  161. package/src/element/substitution/term.js +10 -13
  162. package/src/element/substitution.js +3 -5
  163. package/src/element/substitutions.js +48 -30
  164. package/src/element/supposition.js +127 -108
  165. package/src/element/term.js +18 -28
  166. package/src/element/type.js +42 -36
  167. package/src/element/typePrefix.js +3 -3
  168. package/src/element/variable.js +7 -7
  169. package/src/element.js +3 -1
  170. package/src/metaTypes.js +55 -0
  171. package/src/node/axiomLemmaTheoremConjecture.js +6 -6
  172. package/src/node/body/axiom.js +0 -21
  173. package/src/node/body/conjecture.js +0 -23
  174. package/src/node/body/lemma.js +0 -23
  175. package/src/node/body/metaLemma.js +0 -23
  176. package/src/node/body/metatheorem.js +0 -23
  177. package/src/node/body/rule.js +12 -0
  178. package/src/node/body/theorem.js +0 -23
  179. package/src/node/body.js +23 -0
  180. package/src/node/combinator.js +9 -0
  181. package/src/node/constructor.js +9 -0
  182. package/src/node/declaration/combinator.js +5 -5
  183. package/src/node/declaration/constructor.js +8 -8
  184. package/src/node/declaration/property.js +14 -14
  185. package/src/node/declaration/simpleType.js +31 -31
  186. package/src/node/declaration/variable.js +7 -7
  187. package/src/node/equality.js +7 -7
  188. package/src/node/frame.js +21 -21
  189. package/src/node/header.js +22 -22
  190. package/src/node/metaLemmaMetaTheorem.js +14 -14
  191. package/src/node/metavariable.js +14 -14
  192. package/src/node/property.js +7 -7
  193. package/src/node/propertyRelation.js +7 -7
  194. package/src/node/rule.js +15 -15
  195. package/src/node/statement.js +12 -12
  196. package/src/node/step.js +21 -21
  197. package/src/node/subDerivation.js +0 -7
  198. package/src/node/subproof.js +4 -11
  199. package/src/node/substitution/frame.js +18 -18
  200. package/src/node/substitution/statement.js +18 -18
  201. package/src/node/substitution/term.js +18 -18
  202. package/src/node/term.js +34 -34
  203. package/src/preamble.js +4 -4
  204. package/src/process/instantiate.js +12 -0
  205. package/src/process/unify.js +53 -57
  206. package/src/process/validate.js +316 -0
  207. package/src/process/verify.js +50 -138
  208. package/src/types.js +18 -0
  209. package/src/utilities/brackets.js +15 -14
  210. package/src/utilities/element.js +125 -82
  211. package/src/utilities/instance.js +42 -24
  212. package/src/utilities/statement.js +2 -2
  213. package/src/utilities/string.js +38 -24
  214. package/src/{mixins/step/unify.js → utilities/unification.js} +99 -85
  215. package/src/{mixins/statement/validate.js → utilities/validation.js} +143 -69
  216. package/lib/element/statement/combinator.js +0 -105
  217. package/lib/element/term/constructor.js +0 -172
  218. package/lib/mixins/statement/validate.js +0 -198
  219. package/lib/mixins/step/unify.js +0 -228
  220. package/lib/mixins/term/verify.js +0 -65
  221. package/src/element/statement/combinator.js +0 -59
  222. package/src/mixins/term/verify.js +0 -81
@@ -5,13 +5,6 @@ import SubstitutionNode from "../../node/substitution";
5
5
  import { FRAME_RULE_NAME } from "../../ruleNames";
6
6
 
7
7
  export default class FrameSubstitutionNode extends SubstitutionNode {
8
- getMetavariableNode() {
9
- const lastMetavariableNode = this.getLastMetavariableNode(),
10
- metavariableNode = lastMetavariableNode; ///
11
-
12
- return metavariableNode;
13
- }
14
-
15
8
  getFrameNode() {
16
9
  const firstFrameNode = this.getFirstFrameNode(),
17
10
  frameNode = firstFrameNode; ///
@@ -19,18 +12,11 @@ export default class FrameSubstitutionNode extends SubstitutionNode {
19
12
  return frameNode;
20
13
  }
21
14
 
22
- getLastFrameNode() {
23
- const ruleName = FRAME_RULE_NAME,
24
- lastFrameNode = this.getLastNodeByRuleName(ruleName);
25
-
26
- return lastFrameNode;
27
- }
28
-
29
- getFirstFrameNode() {
30
- const ruleName = FRAME_RULE_NAME,
31
- firstFrameNode = this.getFirstNodeByRuleName(ruleName);
15
+ getMetavariableNode() {
16
+ const lastMetavariableNode = this.getLastMetavariableNode(),
17
+ metavariableNode = lastMetavariableNode; ///
32
18
 
33
- return firstFrameNode;
19
+ return metavariableNode;
34
20
  }
35
21
 
36
22
  getLastMetavariableNode() {
@@ -59,5 +45,19 @@ export default class FrameSubstitutionNode extends SubstitutionNode {
59
45
  return firstMetavariableNode;
60
46
  }
61
47
 
48
+ getLastFrameNode() {
49
+ const ruleName = FRAME_RULE_NAME,
50
+ lastFrameNode = this.getLastNodeByRuleName(ruleName);
51
+
52
+ return lastFrameNode;
53
+ }
54
+
55
+ getFirstFrameNode() {
56
+ const ruleName = FRAME_RULE_NAME,
57
+ firstFrameNode = this.getFirstNodeByRuleName(ruleName);
58
+
59
+ return firstFrameNode;
60
+ }
61
+
62
62
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return SubstitutionNode.fromRuleNameChildNodesOpacityAndPrecedence(FrameSubstitutionNode, ruleName, childNodes, opacity, precedence); }
63
63
  }
@@ -5,13 +5,6 @@ import SubstitutionNode from "../../node/substitution";
5
5
  import { STATEMENT_RULE_NAME } from "../../ruleNames";
6
6
 
7
7
  export default class StatementSubstitutionNode extends SubstitutionNode {
8
- getMetavariableNode() {
9
- const lastMetavariableNode = this.getLastVariableNode(),
10
- metavariableNode = lastMetavariableNode; ///
11
-
12
- return metavariableNode;
13
- }
14
-
15
8
  getStatementNode() {
16
9
  const firstStatementNode = this.getFirstStatementNode(),
17
10
  statementNode = firstStatementNode; ///
@@ -19,18 +12,11 @@ export default class StatementSubstitutionNode extends SubstitutionNode {
19
12
  return statementNode;
20
13
  }
21
14
 
22
- getLastStatementNode() {
23
- const ruleName = STATEMENT_RULE_NAME,
24
- lastStatementNode = this.getLastNodeByRuleName(ruleName);
25
-
26
- return lastStatementNode;
27
- }
28
-
29
- getFirstStatementNode() {
30
- const ruleName = STATEMENT_RULE_NAME,
31
- firstStatementNode = this.getFirstNodeByRuleName(ruleName);
15
+ getMetavariableNode() {
16
+ const lastMetavariableNode = this.getLastVariableNode(),
17
+ metavariableNode = lastMetavariableNode; ///
32
18
 
33
- return firstStatementNode;
19
+ return metavariableNode;
34
20
  }
35
21
 
36
22
  getLastMetavariableNode() {
@@ -59,5 +45,19 @@ export default class StatementSubstitutionNode extends SubstitutionNode {
59
45
  return firstMetavariableNode;
60
46
  }
61
47
 
48
+ getLastStatementNode() {
49
+ const ruleName = STATEMENT_RULE_NAME,
50
+ lastStatementNode = this.getLastNodeByRuleName(ruleName);
51
+
52
+ return lastStatementNode;
53
+ }
54
+
55
+ getFirstStatementNode() {
56
+ const ruleName = STATEMENT_RULE_NAME,
57
+ firstStatementNode = this.getFirstNodeByRuleName(ruleName);
58
+
59
+ return firstStatementNode;
60
+ }
61
+
62
62
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return SubstitutionNode.fromRuleNameChildNodesOpacityAndPrecedence(StatementSubstitutionNode, ruleName, childNodes, opacity, precedence); }
63
63
  }
@@ -5,13 +5,6 @@ import SubstitutionNode from "../../node/substitution";
5
5
  import { TERM_RULE_NAME } from "../../ruleNames";
6
6
 
7
7
  export default class TermSubstitutionNode extends SubstitutionNode {
8
- getVariableNode() {
9
- const lastVariableNode = this.getLastVariableNode(),
10
- variableNode = lastVariableNode; ///
11
-
12
- return variableNode;
13
- }
14
-
15
8
  getTermNode() {
16
9
  const firstTermNode = this.getFirstTermNode(),
17
10
  termNode = firstTermNode; ///
@@ -19,18 +12,11 @@ export default class TermSubstitutionNode extends SubstitutionNode {
19
12
  return termNode;
20
13
  }
21
14
 
22
- getLastTermNode() {
23
- const ruleName = TERM_RULE_NAME,
24
- lastTermNode = this.getLastNodeByRuleName(ruleName);
25
-
26
- return lastTermNode;
27
- }
28
-
29
- getFirstTermNode() {
30
- const ruleName = TERM_RULE_NAME,
31
- firstTermNode = this.getFirstNodeByRuleName(ruleName);
15
+ getVariableNode() {
16
+ const lastVariableNode = this.getLastVariableNode(),
17
+ variableNode = lastVariableNode; ///
32
18
 
33
- return firstTermNode;
19
+ return variableNode;
34
20
  }
35
21
 
36
22
  getLastVariableNode() {
@@ -49,6 +35,20 @@ export default class TermSubstitutionNode extends SubstitutionNode {
49
35
  return firstVariableNode;
50
36
  }
51
37
 
38
+ getLastTermNode() {
39
+ const ruleName = TERM_RULE_NAME,
40
+ lastTermNode = this.getLastNodeByRuleName(ruleName);
41
+
42
+ return lastTermNode;
43
+ }
44
+
45
+ getFirstTermNode() {
46
+ const ruleName = TERM_RULE_NAME,
47
+ firstTermNode = this.getFirstNodeByRuleName(ruleName);
48
+
49
+ return firstTermNode;
50
+ }
51
+
52
52
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return SubstitutionNode.fromRuleNameChildNodesOpacityAndPrecedence(TermSubstitutionNode, ruleName, childNodes, opacity, precedence); }
53
53
  }
54
54
 
package/src/node/term.js CHANGED
@@ -5,27 +5,6 @@ import NonTerminalNode from "../nonTerminalNode";
5
5
  import { ARGUMENT_RULE_NAME, VARIABLE_RULE_NAME } from "../ruleNames";
6
6
 
7
7
  export default class TermNode extends NonTerminalNode {
8
- getVariableIdentifier() {
9
- let variableIdentifier = null;
10
-
11
- const singular = this.isSingular();
12
-
13
- if (singular) {
14
- const singularVariableNode = this.getSingularVariableNode();
15
-
16
- variableIdentifier = singularVariableNode.getVariableIdentifier();
17
- }
18
-
19
- return variableIdentifier;
20
- }
21
-
22
- getVariableNode() {
23
- const singularVariableNode = this.getSingularVariableNode(),
24
- variableNode = singularVariableNode; //
25
-
26
- return variableNode;
27
- }
28
-
29
8
  isSingular() {
30
9
  let singular = false;
31
10
 
@@ -38,11 +17,11 @@ export default class TermNode extends NonTerminalNode {
38
17
  return singular;
39
18
  }
40
19
 
41
- getVariableNodes() {
42
- const ruleName = VARIABLE_RULE_NAME,
43
- variableNodes = this.getNodesByRuleName(ruleName);
20
+ getVariableNode() {
21
+ const singularVariableNode = this.getSingularVariableNode(),
22
+ variableNode = singularVariableNode; //
44
23
 
45
- return variableNodes;
24
+ return variableNode;
46
25
  }
47
26
 
48
27
  getSingularTermNode() {
@@ -57,18 +36,18 @@ export default class TermNode extends NonTerminalNode {
57
36
  return singularTermNode;
58
37
  }
59
38
 
60
- getSingularArgumentNode() {
61
- const ruleName = ARGUMENT_RULE_NAME,
62
- singularArgumentNode = this.getSingularNodeByRuleName(ruleName);
39
+ getVariableIdentifier() {
40
+ let variableIdentifier = null;
63
41
 
64
- return singularArgumentNode;
65
- }
42
+ const singular = this.isSingular();
66
43
 
67
- getSingularVariableNode() {
68
- const ruleName = VARIABLE_RULE_NAME,
69
- singularVariableNode = this.getSingularNodeByRuleName(ruleName);
44
+ if (singular) {
45
+ const singularVariableNode = this.getSingularVariableNode();
70
46
 
71
- return singularVariableNode;
47
+ variableIdentifier = singularVariableNode.getVariableIdentifier();
48
+ }
49
+
50
+ return variableIdentifier;
72
51
  }
73
52
 
74
53
  getSingularVariableIdentifier() {
@@ -85,5 +64,26 @@ export default class TermNode extends NonTerminalNode {
85
64
  return singularVariableIdentifier;
86
65
  }
87
66
 
67
+ getVariableNodes() {
68
+ const ruleName = VARIABLE_RULE_NAME,
69
+ variableNodes = this.getNodesByRuleName(ruleName);
70
+
71
+ return variableNodes;
72
+ }
73
+
74
+ getSingularArgumentNode() {
75
+ const ruleName = ARGUMENT_RULE_NAME,
76
+ singularArgumentNode = this.getSingularNodeByRuleName(ruleName);
77
+
78
+ return singularArgumentNode;
79
+ }
80
+
81
+ getSingularVariableNode() {
82
+ const ruleName = VARIABLE_RULE_NAME,
83
+ singularVariableNode = this.getSingularNodeByRuleName(ruleName);
84
+
85
+ return singularVariableNode;
86
+ }
87
+
88
88
  static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TermNode, ruleName, childNodes, opacity, precedence); }
89
89
  }
package/src/preamble.js CHANGED
@@ -31,6 +31,8 @@ import Conclusion from "./element/conclusion";
31
31
  import Derivation from "./element/derivation";
32
32
  import Hypothesis from "./element/hypothesis";
33
33
  import Assumption from "./element/assumption";
34
+ import Combinator from "./element/combinator";
35
+ import Constructor from "./element/constructor";
34
36
  import Supposition from "./element/supposition";
35
37
  import Metatheorem from "./element/metatheorem";
36
38
  import Equivalence from "./element/equivalence";
@@ -40,7 +42,6 @@ import Substitutions from "./element/substitutions";
40
42
  import ProcedureCall from "./element/procedureCall";
41
43
  import SubDerivation from "./element/subDerivation";
42
44
  import TypeAssertion from "./element/assertion/type";
43
- import ConstructorTerm from "./element/term/constructor";
44
45
  import PropertyRelation from "./element/propertyRelation";
45
46
  import DefinedAssertion from "./element/assertion/defined";
46
47
  import TermSubstitution from "./element/substitution/term";
@@ -51,7 +52,8 @@ import ProcedureReference from "./element/procedureReference";
51
52
  import ContainedAssertion from "./element/assertion/contained";
52
53
  import SatisfiesAssertion from "./element/assertion/satisfies";
53
54
  import VariableDeclaration from "./element/declaration/variable";
54
- import CombinatorStatement from "./element/statement/combinator";
55
+ import BracketedCombinator from "./element/combinator/bracketed";
56
+ import BracketedConstructor from "./element/constructor/bracketed";
55
57
  import SimpleTypeDeclaration from "./element/declaration/simpleType";
56
58
  import StatementSubstitution from "./element/substitution/statement";
57
59
  import ReferenceSubstitution from "./element/substitution/reference";
@@ -60,5 +62,3 @@ import TypePrefixDeclaration from "./element/declaration/typePrefix";
60
62
  import ConstructorDeclaration from "./element/declaration/constructor";
61
63
  import ComplexTypeDeclaration from "./element/declaration/complexType";
62
64
  import MetavariableDeclaration from "./element/declaration/metavariable";
63
- import BracketedConstructorTerm from "./element/term/constructor/bracketed";
64
- import BracketedCombinatorStatement from "./element/statement/combinator/bracketed";
@@ -3,9 +3,12 @@
3
3
  import { ruleFromBNF } from "../utilities/bnf";
4
4
 
5
5
  const termPlaceholderBNF = ` _ ::= term... <END_OF_LINE> ; `,
6
+ stepPlaceholderBNF = ` _ ::= step... <END_OF_LINE> ; `,
6
7
  variablePlaceholderBNF = ` _ ::= variable... <END_OF_LINE> ; `,
7
8
  referencePlaceholderBNF = ` _ ::= reference... <END_OF_LINE> ; `,
8
9
  statementPlaceholderBNF = ` _ ::= statement... <END_OF_LINE> ; `,
10
+ combinatorPlaceholderBNF = ` _ ::= combinator... <END_OF_LINE> ; `,
11
+ constructorPlaceholderBNF = ` _ ::= constructor... <END_OF_LINE> ; `,
9
12
  equivalencePlaceholderBNF = ` _ ::= equivalence... <END_OF_LINE> ; `,
10
13
  metavariablePlaceholderBNF = ` _ ::= metavariable... <END_OF_LINE> ; `,
11
14
  termSubstitutionPlaceholderBNF = ` _ ::= termSubstitution... <END_OF_LINE> ; `,
@@ -13,9 +16,12 @@ const termPlaceholderBNF = ` _ ::= term... <END_OF_LINE> ; `,
13
16
  statementSubstitutionPlaceholderBNF = ` _ ::= statementSubstitution... <END_OF_LINE> ; `,
14
17
  referenceSubstitutionPlaceholderBNF = ` _ ::= referenceSubstitution... <END_OF_LINE> ; `,
15
18
  termPlaceholderRule = ruleFromBNF(termPlaceholderBNF),
19
+ stepPlaceholderRule = ruleFromBNF(stepPlaceholderBNF),
16
20
  variablePlaceholderRule = ruleFromBNF(variablePlaceholderBNF),
17
21
  referencePlaceholderRule = ruleFromBNF(referencePlaceholderBNF),
18
22
  statementPlaceholderRule = ruleFromBNF(statementPlaceholderBNF),
23
+ combinatorPlaceholderRule = ruleFromBNF(combinatorPlaceholderBNF),
24
+ constructorPlaceholderRule = ruleFromBNF(constructorPlaceholderBNF),
19
25
  equivalencePlaceholderRule = ruleFromBNF(equivalencePlaceholderBNF),
20
26
  metavariablePlaceholderRule = ruleFromBNF(metavariablePlaceholderBNF),
21
27
  termSubstitutionPlaceholderRule = ruleFromBNF(termSubstitutionPlaceholderBNF),
@@ -25,12 +31,18 @@ const termPlaceholderBNF = ` _ ::= term... <END_OF_LINE> ; `,
25
31
 
26
32
  export function instantiateTerm(string, context) { return instantiate(termPlaceholderRule, string, context); }
27
33
 
34
+ export function instantiateStep(string, context) { return instantiate(stepPlaceholderRule, string, context); }
35
+
28
36
  export function instantiateVariable(string, context) { return instantiate(variablePlaceholderRule, string, context); }
29
37
 
30
38
  export function instantiateReference(string, context) { return instantiate(referencePlaceholderRule, string, context); }
31
39
 
32
40
  export function instantiateStatement(string, context) { return instantiate(statementPlaceholderRule, string, context); }
33
41
 
42
+ export function instantiateCombinator(string, context) { return instantiate(combinatorPlaceholderRule, string, context); }
43
+
44
+ export function instantiateConstructor(string, context) { return instantiate(constructorPlaceholderRule, string, context); }
45
+
34
46
  export function instantiateEquivalence(string, context) { return instantiate(equivalencePlaceholderRule, string, context); }
35
47
 
36
48
  export function instantiateMetavariable(string, context) { return instantiate(metavariablePlaceholderRule, string, context); }
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import elements from "../elements";
4
-
5
3
  import { nodeQuery } from "../utilities/query";
4
+ import { termFromTermNode, frameFromFrameNode, statementFromStatementNode } from "../utilities/element";
6
5
  import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual, isLastRemainingArgumentFunction } from "../utilities/pass";
7
6
 
8
7
  const nonTerminalNodeQuery = nodeQuery("/*");
@@ -29,7 +28,7 @@ class Pass {
29
28
  }
30
29
 
31
30
  descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
32
- let descendedAhead = false;
31
+ let descended = false;
33
32
 
34
33
  const generalChildNodesLength = generalChildNodes.length,
35
34
  specificChildNodesLength = specificChildNodes.length;
@@ -43,9 +42,12 @@ class Pass {
43
42
  const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
44
43
 
45
44
  if (lastRemainingArgumentFunction) {
46
- const index = 0;
45
+ const index = 0,
46
+ descendedAhead = this.descendAhead(index, generalChildNodes, specificChildNodes,...remainingArguments);
47
47
 
48
- descendedAhead = this.descendAhead(index, generalChildNodes, specificChildNodes,...remainingArguments);
48
+ if (descendedAhead) {
49
+ descended = true;
50
+ }
49
51
  } else {
50
52
  const visited = generalChildNodes.every((generalChildNode, index) => {
51
53
  const specificChildNode = specificChildNodes[index],
@@ -59,13 +61,13 @@ class Pass {
59
61
  });
60
62
 
61
63
  if (visited) {
62
- descendedAhead = true;
64
+ descended = true;
63
65
  }
64
66
  }
65
67
  }
66
68
  }
67
69
 
68
- return descendedAhead;
70
+ return descended;
69
71
  }
70
72
 
71
73
  descendAhead(index, generalChildNodes, specificChildNodes, ...remainingArguments) {
@@ -346,11 +348,10 @@ class CombinatorPass extends Pass {
346
348
 
347
349
  context = specificContext; ///
348
350
 
349
- const { Statement } = elements,
350
- statement = Statement.fromStatementNode(statementNode, context),
351
- statementVerifiesGivenType = statement.verifyGivenMetaType(metaType, assignments, stated, context);
351
+ const statement = statementFromStatementNode(statementNode, context),
352
+ statementValidatesGivenType = statement.validateGivenMetaType(metaType, assignments, stated, context);
352
353
 
353
- if (statementVerifiesGivenType) {
354
+ if (statementValidatesGivenType) {
354
355
  success = true;
355
356
  }
356
357
 
@@ -375,11 +376,10 @@ class CombinatorPass extends Pass {
375
376
 
376
377
  context = specificContext; ///
377
378
 
378
- const { Frame } = elements,
379
- frame = Frame.fromFrameNode(frameNode, context),
380
- frameVerifiesGivenType = frame.verifyGivenMetaType(metaType, assignments, stated, context);
379
+ const frame = frameFromFrameNode(frameNode, context),
380
+ frameValidatesGivenMetaType = frame.validateGivenMetaType(metaType, assignments, stated, context);
381
381
 
382
- if (frameVerifiesGivenType) {
382
+ if (frameValidatesGivenMetaType) {
383
383
  success = true;
384
384
  }
385
385
 
@@ -405,11 +405,10 @@ class CombinatorPass extends Pass {
405
405
  if (type !== null) {
406
406
  context = specificContext; ///
407
407
 
408
- const { Term } = elements,
409
- term = Term.fromTermNode(termNode, context),
410
- termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
408
+ const term = termFromTermNode(termNode, context),
409
+ termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
411
410
 
412
- if (termVerifiesGivenType) {
411
+ if (termValidatesGivenType) {
413
412
  success = true;
414
413
  }
415
414
  }
@@ -441,11 +440,10 @@ class ConstructorPass extends Pass {
441
440
  if (type !== null) {
442
441
  context = specificContext; ///
443
442
 
444
- const { Term } = elements,
445
- term = Term.fromTermNode(termNode, context),
446
- termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
443
+ const term = termFromTermNode(termNode, context),
444
+ termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
447
445
 
448
- if (termVerifiesGivenType) {
446
+ if (termValidatesGivenType) {
449
447
  success = true;
450
448
  }
451
449
  }
@@ -470,9 +468,9 @@ class MetavariablePass extends Pass {
470
468
  type = generalContext.findTypeByNominalTypeName(nominalTypeName),
471
469
  context = specificContext, ///
472
470
  term = context.findTermByTermNode(termNode),
473
- termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
471
+ termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
474
472
 
475
- if (termVerifiesGivenType) {
473
+ if (termValidatesGivenType) {
476
474
  success = true;
477
475
  }
478
476
 
@@ -567,6 +565,21 @@ export function unifyMetavariable(generalMetavariable, specificMetavariable, gen
567
565
  return metavariableUnifies;
568
566
  }
569
567
 
568
+ export function unifyTermWithConstructor(term, constructor, generalContext, specificContext) {
569
+ let termUnifiesWithConstructor = false;
570
+
571
+ const termNode = term.getNode(),
572
+ constructorTerm = constructor.getTerm(),
573
+ constructorTermNode = constructorTerm.getNode(),
574
+ success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
575
+
576
+ if (success) {
577
+ termUnifiesWithConstructor = true;
578
+ }
579
+
580
+ return termUnifiesWithConstructor;
581
+ }
582
+
570
583
  export function unifyStatementIntrinsically(generalStatement, specificStatement, substitutions, generalContext, specificContext) {
571
584
  let statementUnifiesIntrinsically = false;
572
585
 
@@ -583,6 +596,21 @@ export function unifyStatementIntrinsically(generalStatement, specificStatement,
583
596
  return statementUnifiesIntrinsically;
584
597
  }
585
598
 
599
+ export function unifyStatementWithCombinator(statement, combinator, assignments, stated, generalContext, specificContext) {
600
+ let statementUnifiesWithCombinator = false;
601
+
602
+ const statementNode = statement.getNode(),
603
+ combinatorStatement = combinator.getStatement(),
604
+ combinatorStatementNode = combinatorStatement.getNode(),
605
+ success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
606
+
607
+ if (success) {
608
+ statementUnifiesWithCombinator = true;
609
+ }
610
+
611
+ return statementUnifiesWithCombinator;
612
+ }
613
+
586
614
  export function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext) {
587
615
  let metavariableUnifiesIntrinsically = false;
588
616
 
@@ -598,35 +626,3 @@ export function unifyMetavariableIntrinsically(generalMetavariable, specificMeta
598
626
 
599
627
  return metavariableUnifiesIntrinsically;
600
628
  }
601
-
602
- export function unifyTermWithConstructorTerm(term, constructorTerm, context) {
603
- let termUnifiesWithConstructor = false;
604
-
605
- const termNode = term.getNode(),
606
- generalContext = context, ///
607
- specificContext = context, ///
608
- constructorTermNode = constructorTerm.getNode(),
609
- success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
610
-
611
- if (success) {
612
- termUnifiesWithConstructor = true;
613
- }
614
-
615
- return termUnifiesWithConstructor;
616
- }
617
-
618
- export function unifyStatementWithCombinatorStatement(statement, combinatorStatement, assignments, stated, context) {
619
- let statementUnifiesWithCombinator = false;
620
-
621
- const statementNode = statement.getNode(),
622
- generalContext = context, ///
623
- specificContext = context, ///
624
- combinatorStatementNode = combinatorStatement.getNode(),
625
- success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
626
-
627
- if (success) {
628
- statementUnifiesWithCombinator = true;
629
- }
630
-
631
- return statementUnifiesWithCombinator;
632
- }