occam-verify-cli 0.0.865 → 0.0.866

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 (85) hide show
  1. package/lib/axiomLemmaTheoremConjecture.js +7 -7
  2. package/lib/context/file.js +128 -68
  3. package/lib/context/local.js +4 -4
  4. package/lib/context/release.js +13 -1
  5. package/lib/label.js +6 -6
  6. package/lib/metaConsequent.js +88 -0
  7. package/lib/metaLemma.js +126 -0
  8. package/lib/metaLemmaMetatheorem.js +196 -0
  9. package/lib/metaSupposition.js +140 -0
  10. package/lib/metaType.js +33 -3
  11. package/lib/metaTypeNames.js +13 -4
  12. package/lib/metaTypes.js +9 -4
  13. package/lib/metatheorem.js +9 -9
  14. package/lib/mixins/context.js +30 -22
  15. package/lib/rule.js +7 -7
  16. package/lib/ruleNames.js +5 -1
  17. package/lib/step/metaproof.js +18 -4
  18. package/lib/type.js +9 -1
  19. package/lib/utilities/name.js +52 -0
  20. package/lib/utilities/query.js +1 -38
  21. package/lib/verifier/node/metastatement.js +3 -3
  22. package/lib/verifier/nodes/statementAgainstCombinator.js +4 -4
  23. package/lib/verifier/nodes/termAgainstConstructor.js +3 -3
  24. package/lib/verify/declaration/topLevel.js +11 -3
  25. package/lib/verify/givenMetavariable.js +31 -0
  26. package/lib/verify/givenType.js +2 -3
  27. package/lib/verify/label.js +3 -4
  28. package/lib/verify/metaConsequent.js +36 -0
  29. package/lib/verify/metaDerivation.js +111 -0
  30. package/lib/verify/metaLemma.js +51 -0
  31. package/lib/verify/metaSupposition.js +40 -0
  32. package/lib/verify/metaSuppositions.js +28 -0
  33. package/lib/verify/metaproof.js +34 -0
  34. package/lib/verify/metastatement/qualified.js +2 -2
  35. package/lib/verify/metatheorem.js +50 -0
  36. package/lib/verify/metavariable.js +30 -10
  37. package/lib/verify/proof.js +3 -3
  38. package/lib/verify/statement/qualified.js +28 -28
  39. package/lib/verify/termAsConstructor.js +4 -5
  40. package/lib/verify/type.js +18 -20
  41. package/lib/verify/variable.js +13 -16
  42. package/package.json +4 -4
  43. package/src/axiomLemmaTheoremConjecture.js +6 -6
  44. package/src/context/file.js +132 -61
  45. package/src/context/local.js +1 -1
  46. package/src/context/release.js +13 -0
  47. package/src/label.js +4 -6
  48. package/src/metaConsequent.js +58 -0
  49. package/src/metaLemma.js +9 -0
  50. package/src/metaLemmaMetatheorem.js +194 -0
  51. package/src/metaSupposition.js +103 -0
  52. package/src/metaType.js +23 -3
  53. package/src/metaTypeNames.js +1 -0
  54. package/src/metaTypes.js +8 -1
  55. package/src/metatheorem.js +4 -4
  56. package/src/mixins/context.js +20 -14
  57. package/src/rule.js +6 -6
  58. package/src/ruleNames.js +1 -0
  59. package/src/step/metaproof.js +20 -4
  60. package/src/type.js +10 -0
  61. package/src/utilities/name.js +50 -0
  62. package/src/utilities/query.js +0 -47
  63. package/src/verifier/node/metastatement.js +2 -1
  64. package/src/verifier/nodes/statementAgainstCombinator.js +3 -3
  65. package/src/verifier/nodes/termAgainstConstructor.js +3 -4
  66. package/src/verify/declaration/topLevel.js +14 -0
  67. package/src/verify/givenMetavariable.js +31 -0
  68. package/src/verify/givenType.js +1 -4
  69. package/src/verify/label.js +2 -5
  70. package/src/verify/metaConsequent.js +36 -0
  71. package/src/verify/metaDerivation.js +151 -0
  72. package/src/verify/metaLemma.js +67 -0
  73. package/src/verify/metaSupposition.js +44 -0
  74. package/src/verify/metaSuppositions.js +17 -0
  75. package/src/verify/metaproof.js +32 -0
  76. package/src/verify/metastatement/qualified.js +2 -3
  77. package/src/verify/metatheorem.js +62 -0
  78. package/src/verify/metavariable.js +46 -16
  79. package/src/verify/proof.js +2 -2
  80. package/src/verify/statement/qualified.js +27 -23
  81. package/src/verify/termAsConstructor.js +4 -6
  82. package/src/verify/type.js +20 -22
  83. package/src/verify/variable.js +14 -17
  84. package/lib/ruleMetatheorem.js +0 -253
  85. package/src/ruleMetatheorem.js +0 -274
@@ -1,253 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return RuleMetatheorem;
9
- }
10
- });
11
- var _label = /*#__PURE__*/ _interop_require_default(require("./label"));
12
- var _premise = /*#__PURE__*/ _interop_require_default(require("./premise"));
13
- var _conclusion = /*#__PURE__*/ _interop_require_default(require("./conclusion"));
14
- var _array = require("./utilities/array");
15
- function _class_call_check(instance, Constructor) {
16
- if (!(instance instanceof Constructor)) {
17
- throw new TypeError("Cannot call a class as a function");
18
- }
19
- }
20
- function _defineProperties(target, props) {
21
- for(var i = 0; i < props.length; i++){
22
- var descriptor = props[i];
23
- descriptor.enumerable = descriptor.enumerable || false;
24
- descriptor.configurable = true;
25
- if ("value" in descriptor) descriptor.writable = true;
26
- Object.defineProperty(target, descriptor.key, descriptor);
27
- }
28
- }
29
- function _create_class(Constructor, protoProps, staticProps) {
30
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
31
- if (staticProps) _defineProperties(Constructor, staticProps);
32
- return Constructor;
33
- }
34
- function _interop_require_default(obj) {
35
- return obj && obj.__esModule ? obj : {
36
- default: obj
37
- };
38
- }
39
- var RuleMetatheorem = /*#__PURE__*/ function() {
40
- function RuleMetatheorem(labels, premises, conclusion, fileContext) {
41
- _class_call_check(this, RuleMetatheorem);
42
- this.labels = labels;
43
- this.premises = premises;
44
- this.conclusion = conclusion;
45
- this.fileContext = fileContext;
46
- }
47
- _create_class(RuleMetatheorem, [
48
- {
49
- key: "getLabels",
50
- value: function getLabels() {
51
- return this.labels;
52
- }
53
- },
54
- {
55
- key: "getPremises",
56
- value: function getPremises() {
57
- return this.premises;
58
- }
59
- },
60
- {
61
- key: "getConclusion",
62
- value: function getConclusion() {
63
- return this.conclusion;
64
- }
65
- },
66
- {
67
- key: "getFileContext",
68
- value: function getFileContext() {
69
- return this.fileContext;
70
- }
71
- },
72
- {
73
- key: "matchLabelName",
74
- value: function matchLabelName(labelName) {
75
- var labelNameMatches = this.labels.some(function(label) {
76
- var name = labelName, labelMatchesName = label.matchName(name);
77
- if (labelMatchesName) {
78
- return true;
79
- }
80
- });
81
- return labelNameMatches;
82
- }
83
- },
84
- {
85
- key: "matchStatement",
86
- value: function matchStatement(statementNode, statementLocalContext) {
87
- var _this = this;
88
- var statementNatches;
89
- var premisesLength = this.premises.length;
90
- if (premisesLength === 0) {
91
- var substitutions = [], conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions, this.fileContext, statementLocalContext);
92
- statementNatches = conclusionMatches; ///
93
- } else {
94
- var proofSteps = statementLocalContext.getProofSteps();
95
- statementNatches = (0, _array.someSubArray)(proofSteps, premisesLength, function(proofSteps) {
96
- var premisesMatchConclusion = false;
97
- var substitutions = [], premisesMatch = matchPremises(_this.premises, proofSteps, substitutions, _this.fileContext, statementLocalContext);
98
- if (premisesMatch) {
99
- var conclusionMatches = matchConclusion(_this.conclusion, statementNode, substitutions, _this.fileContext, statementLocalContext);
100
- premisesMatchConclusion = conclusionMatches; ///
101
- }
102
- if (premisesMatchConclusion) {
103
- return true;
104
- }
105
- });
106
- }
107
- return statementNatches;
108
- }
109
- },
110
- {
111
- key: "matchMetastatement",
112
- value: function matchMetastatement(metastatementNode, metastatementLocalMetaContext) {
113
- var _this = this;
114
- var metastatementNatches;
115
- var premisesLength = this.premises.length;
116
- if (premisesLength === 0) {
117
- var substitutions = [], conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions, this.fileContext, metastatementLocalMetaContext);
118
- metastatementNatches = conclusionMatches; ///
119
- } else {
120
- var metaproofSteps = metastatementLocalMetaContext.getMetaproofSteps();
121
- metastatementNatches = (0, _array.someSubArray)(metaproofSteps, premisesLength, function(metaproofSteps) {
122
- var premisesMatchConclusion = false;
123
- var substitutions = [], premisesMatch = metaMatchPremises(_this.premises, metaproofSteps, substitutions, _this.fileContext, metastatementLocalMetaContext);
124
- if (premisesMatch) {
125
- var conclusionMatches = metaMatchConclusion(_this.conclusion, metastatementNode, substitutions, _this.fileContext, metastatementLocalMetaContext);
126
- premisesMatchConclusion = conclusionMatches; ///
127
- }
128
- if (premisesMatchConclusion) {
129
- return true;
130
- }
131
- });
132
- }
133
- return metastatementNatches;
134
- }
135
- },
136
- {
137
- key: "toJSON",
138
- value: function toJSON(tokens) {
139
- var labelsJSON = this.labels.map(function(label) {
140
- var labelJSON = label.toJSON(tokens);
141
- return labelJSON;
142
- }), premisesJSON = this.premises.map(function(premise) {
143
- var premiseJSON = premise.toJSON(tokens);
144
- return premiseJSON;
145
- }), conclusionJSON = this.conclusion.toJSON(tokens), labels = labelsJSON, premises = premisesJSON, conclusion = conclusionJSON, json = {
146
- labels: labels,
147
- premises: premises,
148
- conclusion: conclusion
149
- };
150
- return json;
151
- }
152
- }
153
- ], [
154
- {
155
- key: "fromJSONAndFileContext",
156
- value: function fromJSONAndFileContext(json, fileContext) {
157
- var rule;
158
- var labels = json.labels;
159
- var labelsJSON = labels; ///
160
- labels = labelsJSON.map(function(labelJSON) {
161
- var _$json = labelJSON, label = _label.default.fromJSONAndFileContext(_$json, fileContext);
162
- return label;
163
- });
164
- var premises = json.premises;
165
- var premisesJSON = premises; ///
166
- premises = premisesJSON.map(function(premiseJSON) {
167
- var _$json = premiseJSON, premise = _premise.default.fromJSONAndFileContext(_$json, fileContext);
168
- return premise;
169
- });
170
- var conclusion = json.conclusion;
171
- var conclusionJSON = conclusion; ///
172
- json = conclusionJSON; ///
173
- conclusion = _conclusion.default.fromJSONAndFileContext(json, fileContext);
174
- rule = new Rule(labels, premises, conclusion, fileContext);
175
- return rule;
176
- }
177
- },
178
- {
179
- key: "fromLabelsPremisesConclusionAndFileContext",
180
- value: function fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext) {
181
- var rule = new Rule(labels, premises, conclusion, fileContext);
182
- return rule;
183
- }
184
- }
185
- ]);
186
- return RuleMetatheorem;
187
- }();
188
- function matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
189
- var proofStep = (0, _array.prune)(proofSteps, function(proofStep) {
190
- var subproofNode = proofStep.getSubproofNode(), statementNode = proofStep.getStatementNode();
191
- if (subproofNode !== null) {
192
- var subProofNodeMatches = premise.matchSubproofNode(subproofNode, substitutions, fileContext, statementLocalContext);
193
- if (!subProofNodeMatches) {
194
- return true;
195
- }
196
- }
197
- if (statementNode !== null) {
198
- var statementNodeMatches = premise.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext);
199
- if (!statementNodeMatches) {
200
- return true;
201
- }
202
- }
203
- }) || null;
204
- var premiseMatches = proofStep !== null;
205
- return premiseMatches;
206
- }
207
- function matchPremises(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
208
- var premisesMatch = premise.every(function(premise) {
209
- var premiseMatches = matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext);
210
- if (premiseMatches) {
211
- return true;
212
- }
213
- });
214
- return premisesMatch;
215
- }
216
- function matchConclusion(conclusion, statementNode, substitutions, fileContext, statementLocalContext) {
217
- var statementNodeMatches = conclusion.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext), conclusionMatches = statementNodeMatches; ///
218
- return conclusionMatches;
219
- }
220
- function metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
221
- var metaproofStep = (0, _array.prune)(metaproofSteps, function(metaproofStep) {
222
- var ruleSubproofNode = metaproofStep.getRuleSubproofNode(), metastatementNode = metaproofStep.getMetastatementNode();
223
- if (ruleSubproofNode !== null) {
224
- var ruleSubProofNodeMatches = premise.matchRuleSubproofNode(ruleSubproofNode, substitutions, fileContext, metastatementLocalMetaContext);
225
- if (!ruleSubProofNodeMatches) {
226
- return true;
227
- }
228
- }
229
- if (metastatementNode !== null) {
230
- var metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext);
231
- if (!metastatementNodeMatches) {
232
- return true;
233
- }
234
- }
235
- }) || null;
236
- var premiseMatches = metaproofStep !== null;
237
- return premiseMatches;
238
- }
239
- function metaMatchPremises(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
240
- var premisesMatch = premise.every(function(premise) {
241
- var premiseMatches = metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext);
242
- if (premiseMatches) {
243
- return true;
244
- }
245
- });
246
- return premisesMatch;
247
- }
248
- function metaMatchConclusion(conclusion, metastatementNode, substitutions, fileContext, metastatementLocalMetaContext) {
249
- var metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext), conclusionMatches = metastatementNodeMatches; ///
250
- return conclusionMatches;
251
- }
252
-
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ydWxlTWV0YXRoZW9yZW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBMYWJlbCBmcm9tIFwiLi9sYWJlbFwiO1xuaW1wb3J0IFByZW1pc2UgZnJvbSBcIi4vcHJlbWlzZVwiO1xuaW1wb3J0IENvbmNsdXNpb24gZnJvbSBcIi4vY29uY2x1c2lvblwiO1xuXG5pbXBvcnQgeyBwcnVuZSB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgc29tZVN1YkFycmF5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVNZXRhdGhlb3JlbSB7XG4gIGNvbnN0cnVjdG9yKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24sIGZpbGVDb250ZXh0KSB7XG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5wcmVtaXNlcyA9IHByZW1pc2VzO1xuICAgIHRoaXMuY29uY2x1c2lvbiA9IGNvbmNsdXNpb247XG4gICAgdGhpcy5maWxlQ29udGV4dCA9IGZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFByZW1pc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByZW1pc2VzO1xuICB9XG5cbiAgZ2V0Q29uY2x1c2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25jbHVzaW9uO1xuICB9XG5cbiAgZ2V0RmlsZUNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZUNvbnRleHQ7XG4gIH1cblxuICBtYXRjaExhYmVsTmFtZShsYWJlbE5hbWUpIHtcbiAgICBjb25zdCBsYWJlbE5hbWVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBsYWJlbE5hbWUsIC8vL1xuICAgICAgICAgICAgbGFiZWxNYXRjaGVzTmFtZSA9IGxhYmVsLm1hdGNoTmFtZShuYW1lKTtcblxuICAgICAgaWYgKGxhYmVsTWF0Y2hlc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIHN0YXRlbWVudExvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnROYXRjaGVzO1xuXG4gICAgY29uc3QgcHJlbWlzZXNMZW5ndGggPSB0aGlzLnByZW1pc2VzLmxlbmd0aDtcblxuICAgIGlmIChwcmVtaXNlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgICAgY29uY2x1c2lvbk1hdGNoZXMgPSBtYXRjaENvbmNsdXNpb24odGhpcy5jb25jbHVzaW9uLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgICBzdGF0ZW1lbnROYXRjaGVzID0gY29uY2x1c2lvbk1hdGNoZXM7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcm9vZlN0ZXBzID0gc3RhdGVtZW50TG9jYWxDb250ZXh0LmdldFByb29mU3RlcHMoKTtcblxuICAgICAgc3RhdGVtZW50TmF0Y2hlcyA9IHNvbWVTdWJBcnJheShwcm9vZlN0ZXBzLCBwcmVtaXNlc0xlbmd0aCwgKHByb29mU3RlcHMpID0+IHtcbiAgICAgICAgbGV0IHByZW1pc2VzTWF0Y2hDb25jbHVzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgICAgICBwcmVtaXNlc01hdGNoID0gbWF0Y2hQcmVtaXNlcyh0aGlzLnByZW1pc2VzLCBwcm9vZlN0ZXBzLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgICAgIGlmIChwcmVtaXNlc01hdGNoKSB7XG4gICAgICAgICAgY29uc3QgY29uY2x1c2lvbk1hdGNoZXMgPSBtYXRjaENvbmNsdXNpb24odGhpcy5jb25jbHVzaW9uLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgICAgICAgcHJlbWlzZXNNYXRjaENvbmNsdXNpb24gPSBjb25jbHVzaW9uTWF0Y2hlczsgIC8vL1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZW1pc2VzTWF0Y2hDb25jbHVzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnROYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhc3RhdGVtZW50KG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCkge1xuICAgIGxldCBtZXRhc3RhdGVtZW50TmF0Y2hlcztcblxuICAgIGNvbnN0IHByZW1pc2VzTGVuZ3RoID0gdGhpcy5wcmVtaXNlcy5sZW5ndGg7XG5cbiAgICBpZiAocHJlbWlzZXNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgIGNvbmNsdXNpb25NYXRjaGVzID0gbWV0YU1hdGNoQ29uY2x1c2lvbih0aGlzLmNvbmNsdXNpb24sIG1ldGFzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCk7XG5cbiAgICAgIG1ldGFzdGF0ZW1lbnROYXRjaGVzID0gY29uY2x1c2lvbk1hdGNoZXM7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXRhcHJvb2ZTdGVwcyA9IG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0LmdldE1ldGFwcm9vZlN0ZXBzKCk7XG5cbiAgICAgIG1ldGFzdGF0ZW1lbnROYXRjaGVzID0gc29tZVN1YkFycmF5KG1ldGFwcm9vZlN0ZXBzLCBwcmVtaXNlc0xlbmd0aCwgKG1ldGFwcm9vZlN0ZXBzKSA9PiB7XG4gICAgICAgIGxldCBwcmVtaXNlc01hdGNoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgcHJlbWlzZXNNYXRjaCA9IG1ldGFNYXRjaFByZW1pc2VzKHRoaXMucHJlbWlzZXMsIG1ldGFwcm9vZlN0ZXBzLCBzdWJzdGl0dXRpb25zLCB0aGlzLmZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHByZW1pc2VzTWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBjb25jbHVzaW9uTWF0Y2hlcyA9IG1ldGFNYXRjaENvbmNsdXNpb24odGhpcy5jb25jbHVzaW9uLCBtZXRhc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgdGhpcy5maWxlQ29udGV4dCwgbWV0YXN0YXRlbWVudExvY2FsTWV0YUNvbnRleHQpO1xuXG4gICAgICAgICAgcHJlbWlzZXNNYXRjaENvbmNsdXNpb24gPSBjb25jbHVzaW9uTWF0Y2hlczsgIC8vL1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZW1pc2VzTWF0Y2hDb25jbHVzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhc3RhdGVtZW50TmF0Y2hlcztcbiAgfVxuXG4gIHRvSlNPTih0b2tlbnMpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gdGhpcy5sYWJlbHMubWFwKChsYWJlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWwudG9KU09OKHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbEpTT047XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJlbWlzZXNKU09OID0gdGhpcy5wcmVtaXNlcy5tYXAoKHByZW1pc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZW1pc2VKU09OID0gcHJlbWlzZS50b0pTT04odG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHByZW1pc2VKU09OO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmNsdXNpb25KU09OID0gdGhpcy5jb25jbHVzaW9uLnRvSlNPTih0b2tlbnMpLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBwcmVtaXNlcyxcbiAgICAgICAgICAgIGNvbmNsdXNpb25cbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT05BbmRGaWxlQ29udGV4dChqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGxldCBydWxlO1xuXG4gICAgbGV0IHsgbGFiZWxzIH0gPSBqc29uO1xuXG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsczsgIC8vL1xuXG4gICAgbGFiZWxzID0gbGFiZWxzSlNPTi5tYXAoKGxhYmVsSlNPTikgPT4ge1xuICAgICAgY29uc3QganNvbiA9IGxhYmVsSlNPTiwgLy8vXG4gICAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21KU09OQW5kRmlsZUNvbnRleHQoanNvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfSk7XG5cbiAgICBsZXQgeyBwcmVtaXNlcyB9ID0ganNvbjtcblxuICAgIGNvbnN0IHByZW1pc2VzSlNPTiA9IHByZW1pc2VzOyAgLy8vXG5cbiAgICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTi5tYXAoKHByZW1pc2VKU09OKSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gcHJlbWlzZUpTT04sIC8vL1xuICAgICAgICAgICAgcHJlbWlzZSA9IFByZW1pc2UuZnJvbUpTT05BbmRGaWxlQ29udGV4dChqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICAgIHJldHVybiBwcmVtaXNlO1xuICAgIH0pO1xuXG4gICAgbGV0IHsgY29uY2x1c2lvbiB9ID0ganNvbjtcblxuICAgIGNvbnN0IGNvbmNsdXNpb25KU09OID0gY29uY2x1c2lvbjsgIC8vL1xuXG4gICAganNvbiA9IGNvbmNsdXNpb25KU09OOyAgLy8vXG5cbiAgICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tSlNPTkFuZEZpbGVDb250ZXh0KGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHJ1bGUgPSBuZXcgUnVsZShsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uLCBmaWxlQ29udGV4dCk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTGFiZWxzUHJlbWlzZXNDb25jbHVzaW9uQW5kRmlsZUNvbnRleHQobGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUobGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiwgZmlsZUNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hQcmVtaXNlKHByZW1pc2UsIHByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpIHtcbiAgY29uc3QgcHJvb2ZTdGVwID0gcHJ1bmUocHJvb2ZTdGVwcywgKHByb29mU3RlcCkgPT4ge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHByb29mU3RlcC5nZXRTdWJwcm9vZk5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gcHJvb2ZTdGVwLmdldFN0YXRlbWVudE5vZGUoKVxuXG4gICAgaWYgKHN1YnByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3ViUHJvb2ZOb2RlTWF0Y2hlcyA9IHByZW1pc2UubWF0Y2hTdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBzdWJzdGl0dXRpb25zLCBmaWxlQ29udGV4dCwgc3RhdGVtZW50TG9jYWxDb250ZXh0KTtcblxuICAgICAgaWYgKCFzdWJQcm9vZk5vZGVNYXRjaGVzKSB7ICAvLy9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gcHJlbWlzZS5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIHN0YXRlbWVudExvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmICghc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHsgIC8vL1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pIHx8IG51bGw7XG5cbiAgY29uc3QgcHJlbWlzZU1hdGNoZXMgPSAocHJvb2ZTdGVwICE9PSBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUHJlbWlzZXMocHJlbWlzZSwgcHJvb2ZTdGVwcywgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIHN0YXRlbWVudExvY2FsQ29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlc01hdGNoID0gcHJlbWlzZS5ldmVyeSgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VNYXRjaGVzID0gbWF0Y2hQcmVtaXNlKHByZW1pc2UsIHByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKHByZW1pc2VNYXRjaGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlc01hdGNoO1xufVxuXG5mdW5jdGlvbiBtYXRjaENvbmNsdXNpb24oY29uY2x1c2lvbiwgc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIHN0YXRlbWVudExvY2FsQ29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGNvbmNsdXNpb24ubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uTWF0Y2hlcyA9IHN0YXRlbWVudE5vZGVNYXRjaGVzOyAvLy9cblxuICByZXR1cm4gY29uY2x1c2lvbk1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2UocHJlbWlzZSwgbWV0YXByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCkge1xuICBjb25zdCBtZXRhcHJvb2ZTdGVwID0gcHJ1bmUobWV0YXByb29mU3RlcHMsIChtZXRhcHJvb2ZTdGVwKSA9PiB7XG4gICAgY29uc3QgcnVsZVN1YnByb29mTm9kZSA9IG1ldGFwcm9vZlN0ZXAuZ2V0UnVsZVN1YnByb29mTm9kZSgpLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXByb29mU3RlcC5nZXRNZXRhc3RhdGVtZW50Tm9kZSgpXG5cbiAgICBpZiAocnVsZVN1YnByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN1YlByb29mTm9kZU1hdGNoZXMgPSBwcmVtaXNlLm1hdGNoUnVsZVN1YnByb29mTm9kZShydWxlU3VicHJvb2ZOb2RlLCBzdWJzdGl0dXRpb25zLCBmaWxlQ29udGV4dCwgbWV0YXN0YXRlbWVudExvY2FsTWV0YUNvbnRleHQpO1xuXG4gICAgICBpZiAoIXJ1bGVTdWJQcm9vZk5vZGVNYXRjaGVzKSB7ICAvLy9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGFzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBwcmVtaXNlLm1hdGNoTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCk7XG5cbiAgICAgIGlmICghbWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzKSB7ICAvLy9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KSB8fCBudWxsO1xuXG4gIGNvbnN0IHByZW1pc2VNYXRjaGVzID0gKG1ldGFwcm9vZlN0ZXAgIT09IG51bGwpO1xuXG4gIHJldHVybiBwcmVtaXNlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZXMocHJlbWlzZSwgbWV0YXByb29mU3RlcHMsIHN1YnN0aXR1dGlvbnMsIGZpbGVDb250ZXh0LCBtZXRhc3RhdGVtZW50TG9jYWxNZXRhQ29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlc01hdGNoID0gcHJlbWlzZS5ldmVyeSgocHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZShwcmVtaXNlLCBtZXRhcHJvb2ZTdGVwcywgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0KTtcblxuICAgIGlmIChwcmVtaXNlTWF0Y2hlcykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXNNYXRjaDtcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoQ29uY2x1c2lvbihjb25jbHVzaW9uLCBtZXRhc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGNvbmNsdXNpb24ubWF0Y2hNZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgZmlsZUNvbnRleHQsIG1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbk1hdGNoZXMgPSBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7IC8vL1xuXG4gIHJldHVybiBjb25jbHVzaW9uTWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6WyJSdWxlTWV0YXRoZW9yZW0iLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJmaWxlQ29udGV4dCIsImdldExhYmVscyIsImdldFByZW1pc2VzIiwiZ2V0Q29uY2x1c2lvbiIsImdldEZpbGVDb250ZXh0IiwibWF0Y2hMYWJlbE5hbWUiLCJsYWJlbE5hbWUiLCJsYWJlbE5hbWVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwibmFtZSIsImxhYmVsTWF0Y2hlc05hbWUiLCJtYXRjaE5hbWUiLCJtYXRjaFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRMb2NhbENvbnRleHQiLCJzdGF0ZW1lbnROYXRjaGVzIiwicHJlbWlzZXNMZW5ndGgiLCJsZW5ndGgiLCJzdWJzdGl0dXRpb25zIiwiY29uY2x1c2lvbk1hdGNoZXMiLCJtYXRjaENvbmNsdXNpb24iLCJwcm9vZlN0ZXBzIiwiZ2V0UHJvb2ZTdGVwcyIsInNvbWVTdWJBcnJheSIsInByZW1pc2VzTWF0Y2hDb25jbHVzaW9uIiwicHJlbWlzZXNNYXRjaCIsIm1hdGNoUHJlbWlzZXMiLCJtYXRjaE1ldGFzdGF0ZW1lbnQiLCJtZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnRMb2NhbE1ldGFDb250ZXh0IiwibWV0YXN0YXRlbWVudE5hdGNoZXMiLCJtZXRhTWF0Y2hDb25jbHVzaW9uIiwibWV0YXByb29mU3RlcHMiLCJnZXRNZXRhcHJvb2ZTdGVwcyIsIm1ldGFNYXRjaFByZW1pc2VzIiwidG9KU09OIiwidG9rZW5zIiwibGFiZWxzSlNPTiIsIm1hcCIsImxhYmVsSlNPTiIsInByZW1pc2VzSlNPTiIsInByZW1pc2UiLCJwcmVtaXNlSlNPTiIsImNvbmNsdXNpb25KU09OIiwianNvbiIsImZyb21KU09OQW5kRmlsZUNvbnRleHQiLCJydWxlIiwiTGFiZWwiLCJQcmVtaXNlIiwiQ29uY2x1c2lvbiIsIlJ1bGUiLCJmcm9tTGFiZWxzUHJlbWlzZXNDb25jbHVzaW9uQW5kRmlsZUNvbnRleHQiLCJtYXRjaFByZW1pc2UiLCJwcm9vZlN0ZXAiLCJwcnVuZSIsInN1YnByb29mTm9kZSIsImdldFN1YnByb29mTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzdWJQcm9vZk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJwcm9vZk5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsInByZW1pc2VNYXRjaGVzIiwiZXZlcnkiLCJtZXRhTWF0Y2hQcmVtaXNlIiwibWV0YXByb29mU3RlcCIsInJ1bGVTdWJwcm9vZk5vZGUiLCJnZXRSdWxlU3VicHJvb2ZOb2RlIiwiZ2V0TWV0YXN0YXRlbWVudE5vZGUiLCJydWxlU3ViUHJvb2ZOb2RlTWF0Y2hlcyIsIm1hdGNoUnVsZVN1YnByb29mTm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBU3FCQTs7OzREQVBIOzhEQUNFO2lFQUNHO3FCQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR1AsSUFBQSxBQUFNQSxnQ0FBRCxBQUFMO2FBQU1BLGdCQUNQQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFB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
@@ -1,274 +0,0 @@
1
- "use strict";
2
-
3
- import Label from "./label";
4
- import Premise from "./premise";
5
- import Conclusion from "./conclusion";
6
-
7
- import { prune } from "./utilities/array";
8
- import { someSubArray } from "./utilities/array";
9
-
10
- export default class RuleMetatheorem {
11
- constructor(labels, premises, conclusion, fileContext) {
12
- this.labels = labels;
13
- this.premises = premises;
14
- this.conclusion = conclusion;
15
- this.fileContext = fileContext;
16
- }
17
-
18
- getLabels() {
19
- return this.labels;
20
- }
21
-
22
- getPremises() {
23
- return this.premises;
24
- }
25
-
26
- getConclusion() {
27
- return this.conclusion;
28
- }
29
-
30
- getFileContext() {
31
- return this.fileContext;
32
- }
33
-
34
- matchLabelName(labelName) {
35
- const labelNameMatches = this.labels.some((label) => {
36
- const name = labelName, ///
37
- labelMatchesName = label.matchName(name);
38
-
39
- if (labelMatchesName) {
40
- return true;
41
- }
42
- });
43
-
44
- return labelNameMatches;
45
- }
46
-
47
- matchStatement(statementNode, statementLocalContext) {
48
- let statementNatches;
49
-
50
- const premisesLength = this.premises.length;
51
-
52
- if (premisesLength === 0) {
53
- const substitutions = [],
54
- conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions, this.fileContext, statementLocalContext);
55
-
56
- statementNatches = conclusionMatches; ///
57
- } else {
58
- const proofSteps = statementLocalContext.getProofSteps();
59
-
60
- statementNatches = someSubArray(proofSteps, premisesLength, (proofSteps) => {
61
- let premisesMatchConclusion = false;
62
-
63
- const substitutions = [],
64
- premisesMatch = matchPremises(this.premises, proofSteps, substitutions, this.fileContext, statementLocalContext);
65
-
66
- if (premisesMatch) {
67
- const conclusionMatches = matchConclusion(this.conclusion, statementNode, substitutions, this.fileContext, statementLocalContext);
68
-
69
- premisesMatchConclusion = conclusionMatches; ///
70
- }
71
-
72
- if (premisesMatchConclusion) {
73
- return true;
74
- }
75
- });
76
- }
77
-
78
- return statementNatches;
79
- }
80
-
81
- matchMetastatement(metastatementNode, metastatementLocalMetaContext) {
82
- let metastatementNatches;
83
-
84
- const premisesLength = this.premises.length;
85
-
86
- if (premisesLength === 0) {
87
- const substitutions = [],
88
- conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions, this.fileContext, metastatementLocalMetaContext);
89
-
90
- metastatementNatches = conclusionMatches; ///
91
- } else {
92
- const metaproofSteps = metastatementLocalMetaContext.getMetaproofSteps();
93
-
94
- metastatementNatches = someSubArray(metaproofSteps, premisesLength, (metaproofSteps) => {
95
- let premisesMatchConclusion = false;
96
-
97
- const substitutions = [],
98
- premisesMatch = metaMatchPremises(this.premises, metaproofSteps, substitutions, this.fileContext, metastatementLocalMetaContext);
99
-
100
- if (premisesMatch) {
101
- const conclusionMatches = metaMatchConclusion(this.conclusion, metastatementNode, substitutions, this.fileContext, metastatementLocalMetaContext);
102
-
103
- premisesMatchConclusion = conclusionMatches; ///
104
- }
105
-
106
- if (premisesMatchConclusion) {
107
- return true;
108
- }
109
- });
110
- }
111
-
112
- return metastatementNatches;
113
- }
114
-
115
- toJSON(tokens) {
116
- const labelsJSON = this.labels.map((label) => {
117
- const labelJSON = label.toJSON(tokens);
118
-
119
- return labelJSON;
120
- }),
121
- premisesJSON = this.premises.map((premise) => {
122
- const premiseJSON = premise.toJSON(tokens);
123
-
124
- return premiseJSON;
125
- }),
126
- conclusionJSON = this.conclusion.toJSON(tokens),
127
- labels = labelsJSON, ///
128
- premises = premisesJSON, ///
129
- conclusion = conclusionJSON, ///
130
- json = {
131
- labels,
132
- premises,
133
- conclusion
134
- };
135
-
136
- return json;
137
- }
138
-
139
- static fromJSONAndFileContext(json, fileContext) {
140
- let rule;
141
-
142
- let { labels } = json;
143
-
144
- const labelsJSON = labels; ///
145
-
146
- labels = labelsJSON.map((labelJSON) => {
147
- const json = labelJSON, ///
148
- label = Label.fromJSONAndFileContext(json, fileContext);
149
-
150
- return label;
151
- });
152
-
153
- let { premises } = json;
154
-
155
- const premisesJSON = premises; ///
156
-
157
- premises = premisesJSON.map((premiseJSON) => {
158
- const json = premiseJSON, ///
159
- premise = Premise.fromJSONAndFileContext(json, fileContext);
160
-
161
- return premise;
162
- });
163
-
164
- let { conclusion } = json;
165
-
166
- const conclusionJSON = conclusion; ///
167
-
168
- json = conclusionJSON; ///
169
-
170
- conclusion = Conclusion.fromJSONAndFileContext(json, fileContext);
171
-
172
- rule = new Rule(labels, premises, conclusion, fileContext);
173
-
174
- return rule;
175
- }
176
-
177
- static fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext) {
178
- const rule = new Rule(labels, premises, conclusion, fileContext);
179
-
180
- return rule;
181
- }
182
- }
183
-
184
- function matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
185
- const proofStep = prune(proofSteps, (proofStep) => {
186
- const subproofNode = proofStep.getSubproofNode(),
187
- statementNode = proofStep.getStatementNode()
188
-
189
- if (subproofNode !== null) {
190
- const subProofNodeMatches = premise.matchSubproofNode(subproofNode, substitutions, fileContext, statementLocalContext);
191
-
192
- if (!subProofNodeMatches) { ///
193
- return true;
194
- }
195
- }
196
-
197
- if (statementNode !== null) {
198
- const statementNodeMatches = premise.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext);
199
-
200
- if (!statementNodeMatches) { ///
201
- return true;
202
- }
203
- }
204
- }) || null;
205
-
206
- const premiseMatches = (proofStep !== null);
207
-
208
- return premiseMatches;
209
- }
210
-
211
- function matchPremises(premise, proofSteps, substitutions, fileContext, statementLocalContext) {
212
- const premisesMatch = premise.every((premise) => {
213
- const premiseMatches = matchPremise(premise, proofSteps, substitutions, fileContext, statementLocalContext);
214
-
215
- if (premiseMatches) {
216
- return true;
217
- }
218
- });
219
-
220
- return premisesMatch;
221
- }
222
-
223
- function matchConclusion(conclusion, statementNode, substitutions, fileContext, statementLocalContext) {
224
- const statementNodeMatches = conclusion.matchStatementNode(statementNode, substitutions, fileContext, statementLocalContext),
225
- conclusionMatches = statementNodeMatches; ///
226
-
227
- return conclusionMatches;
228
- }
229
-
230
- function metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
231
- const metaproofStep = prune(metaproofSteps, (metaproofStep) => {
232
- const ruleSubproofNode = metaproofStep.getRuleSubproofNode(),
233
- metastatementNode = metaproofStep.getMetastatementNode()
234
-
235
- if (ruleSubproofNode !== null) {
236
- const ruleSubProofNodeMatches = premise.matchRuleSubproofNode(ruleSubproofNode, substitutions, fileContext, metastatementLocalMetaContext);
237
-
238
- if (!ruleSubProofNodeMatches) { ///
239
- return true;
240
- }
241
- }
242
-
243
- if (metastatementNode !== null) {
244
- const metastatementNodeMatches = premise.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext);
245
-
246
- if (!metastatementNodeMatches) { ///
247
- return true;
248
- }
249
- }
250
- }) || null;
251
-
252
- const premiseMatches = (metaproofStep !== null);
253
-
254
- return premiseMatches;
255
- }
256
-
257
- function metaMatchPremises(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext) {
258
- const premisesMatch = premise.every((premise) => {
259
- const premiseMatches = metaMatchPremise(premise, metaproofSteps, substitutions, fileContext, metastatementLocalMetaContext);
260
-
261
- if (premiseMatches) {
262
- return true;
263
- }
264
- });
265
-
266
- return premisesMatch;
267
- }
268
-
269
- function metaMatchConclusion(conclusion, metastatementNode, substitutions, fileContext, metastatementLocalMetaContext) {
270
- const metastatementNodeMatches = conclusion.matchMetastatementNode(metastatementNode, substitutions, fileContext, metastatementLocalMetaContext),
271
- conclusionMatches = metastatementNodeMatches; ///
272
-
273
- return conclusionMatches;
274
- }