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.
- package/README.md +4 -0
- package/bin/abbreviations.js +5 -1
- package/bin/action/help.js +4 -0
- package/bin/action/verify.js +35 -13
- package/bin/actions.js +11 -6
- package/bin/defaults.js +4 -0
- package/bin/options.js +4 -0
- package/bin/utilities/releaseContext.js +5 -7
- package/lib/axiom.js +3 -3
- package/lib/axiomLemmaTheoremConjecture.js +5 -5
- package/lib/combinator.js +4 -3
- package/lib/conclusion.js +8 -7
- package/lib/conjecture.js +3 -3
- package/lib/consequence.js +6 -5
- package/lib/constants.js +8 -12
- package/lib/constructor.js +5 -4
- package/lib/context/file.js +13 -35
- package/lib/context/metaproof.js +12 -11
- package/lib/context/proof.js +11 -10
- package/lib/context/release/directory.js +6 -6
- package/lib/context/release/file.js +15 -26
- package/lib/context/release.js +32 -51
- package/lib/equality.js +5 -4
- package/lib/index.js +4 -4
- package/lib/label.js +4 -3
- package/lib/lemma.js +3 -3
- package/lib/log.js +146 -0
- package/lib/matcher.js +14 -23
- package/lib/metaTypeNames.js +13 -0
- package/lib/mixins/logging.js +13 -13
- package/lib/node/metastatement/bracketed.js +16 -0
- package/lib/node/statement/bracketed.js +16 -0
- package/lib/node/statement/combinator/bracketed.js +17 -0
- package/lib/node/statement/combinator/equality.js +17 -0
- package/lib/node/statement/equality.js +16 -0
- package/lib/ocmbinator/bracketed.js +3 -4
- package/lib/ocmbinator/equality.js +3 -4
- package/lib/premise.js +10 -9
- package/lib/rule.js +5 -5
- package/lib/step/metaproof.js +28 -25
- package/lib/step/proof.js +15 -14
- package/lib/substitution/metastatementForMetavariable.js +16 -13
- package/lib/substitution/statementForMetavariable.js +17 -18
- package/lib/substitution/termForVariable.js +8 -18
- package/lib/supposition.js +7 -6
- package/lib/theorem.js +3 -3
- package/lib/type.js +5 -5
- package/lib/utilities/metaproof.js +60 -0
- package/lib/utilities/node.js +56 -0
- package/lib/utilities/proof.js +60 -0
- package/lib/utilities/releaseContext.js +24 -12
- package/lib/utilities/string.js +1 -32
- package/lib/{matcher → verifier}/metastatementForMetavariable/conclusion.js +12 -12
- package/lib/{matcher → verifier}/metastatementForMetavariable/premise.js +12 -12
- package/lib/verifier/metastatementForMetavariable.js +198 -0
- package/lib/{matcher → verifier}/statementForMetavariable/conclusion.js +12 -12
- package/lib/{matcher → verifier}/statementForMetavariable/premise.js +12 -12
- package/lib/verifier/statementForMetavariable.js +203 -0
- package/lib/{matcher → verifier}/termForVariable/consequence.js +12 -12
- package/lib/{matcher → verifier}/termForVariable/supposition.js +12 -12
- package/lib/verifier/termForVariable.js +198 -0
- package/lib/verifier.js +92 -0
- package/lib/verify/assertion/type.js +6 -8
- package/lib/verify/axiom.js +3 -5
- package/lib/verify/conclusion.js +2 -4
- package/lib/verify/conjecture.js +3 -5
- package/lib/verify/consequence.js +2 -4
- package/lib/verify/declaration/combinator.js +1 -3
- package/lib/verify/declaration/constructor.js +1 -3
- package/lib/verify/declaration/topLevel.js +1 -3
- package/lib/verify/declaration/type.js +1 -3
- package/lib/verify/declaration/variable.js +1 -3
- package/lib/verify/derivation.js +1 -5
- package/lib/verify/label.js +1 -3
- package/lib/verify/lemma.js +3 -5
- package/lib/verify/metastatement/qualified.js +2 -4
- package/lib/verify/metastatement/unqualified.js +2 -4
- package/lib/verify/metastatement.js +1 -3
- package/lib/verify/premise.js +2 -4
- package/lib/verify/proof.js +3 -5
- package/lib/verify/rule.js +3 -5
- package/lib/verify/ruleDerivation.js +1 -5
- package/lib/verify/ruleProof.js +3 -5
- package/lib/verify/statement/qualified.js +2 -4
- package/lib/verify/statement/unqualified.js +2 -4
- package/lib/verify/statement.js +14 -17
- package/lib/verify/statementAsCombinator.js +4 -6
- package/lib/verify/supposition.js +2 -4
- package/lib/verify/term.js +4 -10
- package/lib/verify/termAsConstructor.js +6 -9
- package/lib/verify/theorem.js +3 -5
- package/lib/verify/type.js +5 -9
- package/lib/verify/variable.js +5 -9
- package/package.json +1 -1
- package/src/axiom.js +1 -1
- package/src/axiomLemmaTheoremConjecture.js +4 -4
- package/src/combinator.js +3 -3
- package/src/conclusion.js +7 -7
- package/src/conjecture.js +1 -1
- package/src/consequence.js +5 -5
- package/src/constants.js +2 -3
- package/src/constructor.js +4 -4
- package/src/context/file.js +6 -30
- package/src/context/metaproof.js +13 -10
- package/src/context/proof.js +11 -9
- package/src/context/release/directory.js +7 -7
- package/src/context/release/file.js +17 -32
- package/src/context/release.js +23 -32
- package/src/equality.js +6 -8
- package/src/index.js +2 -1
- package/src/label.js +3 -3
- package/src/lemma.js +1 -1
- package/src/log.js +116 -0
- package/src/matcher.js +11 -9
- package/src/metaTypeNames.js +3 -0
- package/src/mixins/logging.js +6 -6
- package/src/node/metastatement/bracketed.js +9 -0
- package/src/node/statement/bracketed.js +9 -0
- package/src/node/statement/combinator/bracketed.js +10 -0
- package/src/node/statement/combinator/equality.js +11 -0
- package/src/node/statement/equality.js +10 -0
- package/src/ocmbinator/bracketed.js +2 -5
- package/src/ocmbinator/equality.js +2 -5
- package/src/premise.js +9 -9
- package/src/rule.js +4 -4
- package/src/step/metaproof.js +32 -29
- package/src/step/proof.js +15 -14
- package/src/substitution/metastatementForMetavariable.js +10 -15
- package/src/substitution/statementForMetavariable.js +12 -24
- package/src/substitution/termForVariable.js +2 -30
- package/src/supposition.js +6 -6
- package/src/theorem.js +1 -1
- package/src/type.js +4 -4
- package/src/utilities/metaproof.js +62 -0
- package/src/utilities/node.js +73 -0
- package/src/utilities/proof.js +62 -0
- package/src/utilities/releaseContext.js +30 -12
- package/src/utilities/string.js +0 -47
- package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
- package/src/verifier/metastatementForMetavariable/premise.js +9 -0
- package/src/{matcher → verifier}/metastatementForMetavariable.js +2 -2
- package/src/verifier/statementForMetavariable/conclusion.js +9 -0
- package/src/verifier/statementForMetavariable/premise.js +9 -0
- package/src/{matcher → verifier}/statementForMetavariable.js +2 -2
- package/src/verifier/termForVariable/consequence.js +9 -0
- package/src/verifier/termForVariable/supposition.js +9 -0
- package/src/{matcher → verifier}/termForVariable.js +2 -2
- package/src/verifier.js +74 -0
- package/src/verify/assertion/type.js +5 -11
- package/src/verify/axiom.js +2 -8
- package/src/verify/conclusion.js +1 -7
- package/src/verify/conjecture.js +2 -8
- package/src/verify/consequence.js +1 -7
- package/src/verify/declaration/combinator.js +0 -6
- package/src/verify/declaration/constructor.js +0 -6
- package/src/verify/declaration/topLevel.js +0 -6
- package/src/verify/declaration/type.js +0 -6
- package/src/verify/declaration/variable.js +0 -6
- package/src/verify/derivation.js +0 -12
- package/src/verify/label.js +0 -6
- package/src/verify/lemma.js +4 -10
- package/src/verify/metastatement/qualified.js +1 -7
- package/src/verify/metastatement/unqualified.js +1 -7
- package/src/verify/metastatement.js +0 -6
- package/src/verify/premise.js +1 -7
- package/src/verify/proof.js +1 -7
- package/src/verify/rule.js +2 -8
- package/src/verify/ruleDerivation.js +0 -12
- package/src/verify/ruleProof.js +1 -7
- package/src/verify/statement/qualified.js +1 -7
- package/src/verify/statement/unqualified.js +1 -7
- package/src/verify/statement.js +24 -34
- package/src/verify/statementAsCombinator.js +3 -9
- package/src/verify/supposition.js +1 -7
- package/src/verify/term.js +3 -21
- package/src/verify/termAsConstructor.js +5 -13
- package/src/verify/theorem.js +2 -8
- package/src/verify/type.js +4 -13
- package/src/verify/variable.js +4 -13
- package/bin/callbacks.js +0 -48
- package/lib/callbacks.js +0 -75
- package/lib/context/release/combinator.js +0 -64
- package/lib/matcher/metastatementForMetavariable.js +0 -198
- package/lib/matcher/statementForMetavariable.js +0 -203
- package/lib/matcher/termForVariable.js +0 -198
- package/lib/mixins/callbacks.js +0 -27
- package/lib/utilities/substitution.js +0 -60
- package/src/callbacks.js +0 -39
- package/src/context/release/combinator.js +0 -39
- package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
- package/src/matcher/metastatementForMetavariable/premise.js +0 -9
- package/src/matcher/statementForMetavariable/conclusion.js +0 -9
- package/src/matcher/statementForMetavariable/premise.js +0 -9
- package/src/matcher/termForVariable/consequence.js +0 -9
- package/src/matcher/termForVariable/supposition.js +0 -9
- package/src/mixins/callbacks.js +0 -15
- package/src/utilities/substitution.js +0 -81
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import ReleaseContext from "../../context/release";
|
|
4
4
|
|
|
5
|
-
import { rewriteNodes } from "occam-grammar-utilities";
|
|
6
|
-
|
|
7
5
|
import Rule from "../../rule";
|
|
8
6
|
import Type from "../../type";
|
|
9
7
|
import Axiom from "../../axiom";
|
|
@@ -18,8 +16,8 @@ import { customGrammarFromNameAndEntries } from "../../utilities/customGrammar";
|
|
|
18
16
|
import { RULE_KIND, TYPE_KIND, AXIOM_KIND, LEMMA_KIND, THEOREM_KIND, CONJECTURE_KIND, COMBINATOR_KIND, CONSTRUCTOR_KIND } from "../../kinds";
|
|
19
17
|
|
|
20
18
|
export default class FileReleaseContext extends ReleaseContext {
|
|
21
|
-
constructor(log, name, entries,
|
|
22
|
-
super(log, name, entries,
|
|
19
|
+
constructor(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors, contextJSON) {
|
|
20
|
+
super(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts);
|
|
23
21
|
|
|
24
22
|
this.types = types;
|
|
25
23
|
this.rules = rules;
|
|
@@ -29,7 +27,6 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
29
27
|
this.conjectures = conjectures;
|
|
30
28
|
this.combinators = combinators;
|
|
31
29
|
this.constructors = constructors;
|
|
32
|
-
|
|
33
30
|
this.contextJSON = contextJSON;
|
|
34
31
|
}
|
|
35
32
|
|
|
@@ -213,29 +210,17 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
213
210
|
return constructors;
|
|
214
211
|
}
|
|
215
212
|
|
|
216
|
-
nodeFromContentAndRuleName(content, ruleName) {
|
|
217
|
-
const ruleMap = this.florenceParser.getRuleMap(),
|
|
218
|
-
rule = ruleMap[ruleName],
|
|
219
|
-
tokens = this.florenceLexer.tokenise(content),
|
|
220
|
-
node = this.florenceParser.parse(tokens, rule);
|
|
221
|
-
|
|
222
|
-
if (node !== null) {
|
|
223
|
-
rewriteNodes(node);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return node;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
213
|
fromJSON() {
|
|
230
214
|
const jsonArray = this.contextJSON,
|
|
231
|
-
|
|
215
|
+
lexer = this.getLexer(),
|
|
216
|
+
parser = this.getParser();
|
|
232
217
|
|
|
233
218
|
jsonArray.forEach((json) => {
|
|
234
219
|
const { kind } = json;
|
|
235
220
|
|
|
236
221
|
switch (kind) {
|
|
237
222
|
case TYPE_KIND: {
|
|
238
|
-
const type = Type.fromJSON(json,
|
|
223
|
+
const type = Type.fromJSON(json, lexer, parser);
|
|
239
224
|
|
|
240
225
|
this.types.push(type);
|
|
241
226
|
|
|
@@ -243,7 +228,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
243
228
|
}
|
|
244
229
|
|
|
245
230
|
case RULE_KIND: {
|
|
246
|
-
const rule = Rule.fromJSON(json,
|
|
231
|
+
const rule = Rule.fromJSON(json, lexer, parser);
|
|
247
232
|
|
|
248
233
|
this.rules.push(rule);
|
|
249
234
|
|
|
@@ -251,7 +236,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
251
236
|
}
|
|
252
237
|
|
|
253
238
|
case AXIOM_KIND: {
|
|
254
|
-
const axiom = Axiom.fromJSON(json,
|
|
239
|
+
const axiom = Axiom.fromJSON(json, lexer, parser);
|
|
255
240
|
|
|
256
241
|
this.axioms.push(axiom);
|
|
257
242
|
|
|
@@ -259,7 +244,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
259
244
|
}
|
|
260
245
|
|
|
261
246
|
case LEMMA_KIND: {
|
|
262
|
-
const lemma = Lemma.fromJSON(json,
|
|
247
|
+
const lemma = Lemma.fromJSON(json, lexer, parser);
|
|
263
248
|
|
|
264
249
|
this.lemmas.push(lemma);
|
|
265
250
|
|
|
@@ -267,7 +252,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
267
252
|
}
|
|
268
253
|
|
|
269
254
|
case THEOREM_KIND: {
|
|
270
|
-
const theorem = Theorem.fromJSON(json,
|
|
255
|
+
const theorem = Theorem.fromJSON(json, lexer, parser);
|
|
271
256
|
|
|
272
257
|
this.theorems.push(theorem);
|
|
273
258
|
|
|
@@ -275,7 +260,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
275
260
|
}
|
|
276
261
|
|
|
277
262
|
case CONJECTURE_KIND: {
|
|
278
|
-
const conjecture = Conjecture.fromJSON(json,
|
|
263
|
+
const conjecture = Conjecture.fromJSON(json, lexer, parser);
|
|
279
264
|
|
|
280
265
|
this.conjectures.push(conjecture);
|
|
281
266
|
|
|
@@ -283,7 +268,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
283
268
|
}
|
|
284
269
|
|
|
285
270
|
case COMBINATOR_KIND: {
|
|
286
|
-
const combinator = Combinator.fromJSON(json,
|
|
271
|
+
const combinator = Combinator.fromJSON(json, lexer, parser);
|
|
287
272
|
|
|
288
273
|
this.combinators.push(combinator);
|
|
289
274
|
|
|
@@ -291,7 +276,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
291
276
|
}
|
|
292
277
|
|
|
293
278
|
case CONSTRUCTOR_KIND: {
|
|
294
|
-
const constructor = Constructor.fromJSON(json,
|
|
279
|
+
const constructor = Constructor.fromJSON(json, lexer, parser);
|
|
295
280
|
|
|
296
281
|
this.constructors.push(constructor);
|
|
297
282
|
|
|
@@ -307,11 +292,11 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
307
292
|
this.fromJSON();
|
|
308
293
|
}
|
|
309
294
|
|
|
310
|
-
static
|
|
311
|
-
const
|
|
295
|
+
static fromLogNameEntriesAndContextJSON(log, name, entries, contextJSON) {
|
|
296
|
+
const lexer = null,
|
|
297
|
+
parser = null,
|
|
298
|
+
verified = true,
|
|
312
299
|
customGrammar = customGrammarFromNameAndEntries(name, entries),
|
|
313
|
-
florenceLexer = null,
|
|
314
|
-
florenceParser = null,
|
|
315
300
|
dependencyReleaseContexts = null,
|
|
316
301
|
types = [],
|
|
317
302
|
rules = [],
|
|
@@ -321,7 +306,7 @@ export default class FileReleaseContext extends ReleaseContext {
|
|
|
321
306
|
conjectures = [],
|
|
322
307
|
combinators = [],
|
|
323
308
|
constructors = [],
|
|
324
|
-
releaseContext = new FileReleaseContext(log, name, entries,
|
|
309
|
+
releaseContext = new FileReleaseContext(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, types, rules, axioms, lemmas, theorems, conjectures, combinators, constructors, contextJSON);
|
|
325
310
|
|
|
326
311
|
return releaseContext;
|
|
327
312
|
}
|
package/src/context/release.js
CHANGED
|
@@ -8,20 +8,19 @@ const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
|
|
|
8
8
|
{ florenceParserFromCombinedCustomGrammar } = parsersUtilities;
|
|
9
9
|
|
|
10
10
|
export default class ReleaseContext {
|
|
11
|
-
constructor(log, name, entries,
|
|
11
|
+
constructor(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts) {
|
|
12
12
|
this.log = log;
|
|
13
13
|
this.name = name;
|
|
14
14
|
this.entries = entries;
|
|
15
|
-
this.
|
|
15
|
+
this.lexer = lexer;
|
|
16
|
+
this.parser = parser;
|
|
16
17
|
this.verified = verified;
|
|
17
18
|
this.customGrammar = customGrammar;
|
|
18
|
-
this.florenceLexer = florenceLexer;
|
|
19
|
-
this.florenceParser = florenceParser;
|
|
20
19
|
this.dependencyReleaseContexts = dependencyReleaseContexts;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
getLog() {
|
|
24
|
-
return
|
|
23
|
+
return log;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
getName() {
|
|
@@ -32,8 +31,12 @@ export default class ReleaseContext {
|
|
|
32
31
|
return this.entries;
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
return this.
|
|
34
|
+
getLexer() {
|
|
35
|
+
return this.lexer;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getParser() {
|
|
39
|
+
return this.parser;
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
isVerified() {
|
|
@@ -44,14 +47,6 @@ export default class ReleaseContext {
|
|
|
44
47
|
return this.customGrammar;
|
|
45
48
|
}
|
|
46
49
|
|
|
47
|
-
getFlorenceLexer() {
|
|
48
|
-
return this.florenceLexer;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
getFlorenceParser() {
|
|
52
|
-
return this.florenceParser;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
50
|
getDependencyReleaseContexts() {
|
|
56
51
|
return this.dependencyReleaseContexts;
|
|
57
52
|
}
|
|
@@ -96,27 +91,21 @@ export default class ReleaseContext {
|
|
|
96
91
|
this.verified = verified;
|
|
97
92
|
}
|
|
98
93
|
|
|
99
|
-
tokenise(content) { return this.
|
|
100
|
-
|
|
101
|
-
parse(tokens) { return this.florenceParser.parse(tokens); }
|
|
102
|
-
|
|
103
|
-
trace(message) { this.log.trace(message); }
|
|
104
|
-
|
|
105
|
-
debug(message) { this.log.debug(message); }
|
|
94
|
+
tokenise(content) { return this.lexer.tokenise(content); }
|
|
106
95
|
|
|
107
|
-
|
|
96
|
+
parse(tokens) { return this.parser.parse(tokens); }
|
|
108
97
|
|
|
109
|
-
|
|
98
|
+
trace(message, node = null, tokens = null, filePath = null) { this.log.trace(message, node, tokens, filePath); }
|
|
110
99
|
|
|
111
|
-
|
|
100
|
+
debug(message, node = null, tokens = null, filePath = null) { this.log.debug(message, node, tokens, filePath); }
|
|
112
101
|
|
|
113
|
-
|
|
102
|
+
info(message, node = null, tokens = null, filePath = null) { this.log.info(message, node, tokens, filePath); }
|
|
114
103
|
|
|
115
|
-
|
|
104
|
+
warning(message, node = null, tokens = null, filePath = null) { this.log.warning(message, node, tokens, filePath); }
|
|
116
105
|
|
|
117
|
-
|
|
106
|
+
error(message, node = null, tokens = null, filePath = null) { this.log.error(message, node, tokens, filePath); }
|
|
118
107
|
|
|
119
|
-
|
|
108
|
+
fatal(message, node = null, tokens = null, filePath = null) { this.log.fatal(message, node, tokens, filePath); }
|
|
120
109
|
|
|
121
110
|
initialise(dependencyReleaseContexts) {
|
|
122
111
|
const releaseContext = this, ///
|
|
@@ -124,11 +113,13 @@ export default class ReleaseContext {
|
|
|
124
113
|
releaseContext,
|
|
125
114
|
...dependencyReleaseContexts
|
|
126
115
|
],
|
|
127
|
-
combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts)
|
|
116
|
+
combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts),
|
|
117
|
+
florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar),
|
|
118
|
+
florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
|
|
128
119
|
|
|
129
|
-
this.
|
|
120
|
+
this.lexer = florenceLexer; ///
|
|
130
121
|
|
|
131
|
-
this.
|
|
122
|
+
this.parser = florenceParser; ///
|
|
132
123
|
|
|
133
124
|
this.dependencyReleaseContexts = dependencyReleaseContexts;
|
|
134
125
|
}
|
package/src/equality.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import matcher from "./matcher";
|
|
3
4
|
import verifyTerm from "./verify/term";
|
|
4
5
|
import equalityCombinator from "./ocmbinator/equality";
|
|
6
|
+
import equalityStatementNode from "./node/statement/equality";
|
|
5
7
|
|
|
6
|
-
import { matcher } from "./matcher";
|
|
7
8
|
import { nodeQuery } from "./utilities/query";
|
|
8
9
|
import { first, second } from "./utilities/array";
|
|
9
10
|
import { EQUALITY_DEPTH } from "./constants";
|
|
@@ -93,13 +94,10 @@ export default class Equality {
|
|
|
93
94
|
const statementNode = proofStep.getStatementNode();
|
|
94
95
|
|
|
95
96
|
if (statementNode !== null) {
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
substitutions = null,
|
|
97
|
+
const nodeA = statementNode, ///
|
|
98
|
+
nodeB = equalityStatementNode, ///
|
|
99
99
|
depth = EQUALITY_DEPTH,
|
|
100
|
-
|
|
101
|
-
nodeB = combinatorStatementNode, ///
|
|
102
|
-
nodeMatches = matcher.matchNode(nodeA, nodeB, substitutions, depth);
|
|
100
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB, depth);
|
|
103
101
|
|
|
104
102
|
if (nodeMatches) {
|
|
105
103
|
const leftTermNode = leftTermNodeQuery(statementNode),
|
|
@@ -271,7 +269,7 @@ function equalityFromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, c
|
|
|
271
269
|
leftTermTypeName = leftTermType.getName(),
|
|
272
270
|
rightTermTypeName = rightTermType.getName();
|
|
273
271
|
|
|
274
|
-
context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to the right '${rightTermString}' term's '${rightTermTypeName}' type.'
|
|
272
|
+
context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to the right '${rightTermString}' term's '${rightTermTypeName}' type.'`, leftTermNode);
|
|
275
273
|
}
|
|
276
274
|
}
|
|
277
275
|
|
package/src/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export { default as
|
|
3
|
+
export { default as Log } from "./log";
|
|
4
|
+
|
|
4
5
|
export { default as verifyRelease } from "./verify/release";
|
|
5
6
|
export { default as ReleaseContext } from "./context/release";
|
|
6
7
|
export { default as FileReleaseContext } from "./context/release/file";
|
package/src/label.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
4
|
import { labelNameFromLabelNode } from "./utilities/query";
|
|
5
|
-
import { labelNodeFromLabelString } from "./utilities/
|
|
5
|
+
import { labelNodeFromLabelString } from "./utilities/node";
|
|
6
6
|
|
|
7
7
|
export default class Label {
|
|
8
8
|
constructor(node) {
|
|
@@ -34,9 +34,9 @@ export default class Label {
|
|
|
34
34
|
return json;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
static fromJSON(json,
|
|
37
|
+
static fromJSON(json, lexer, parser) {
|
|
38
38
|
const labelString = json, ///
|
|
39
|
-
labelNode = labelNodeFromLabelString(labelString,
|
|
39
|
+
labelNode = labelNodeFromLabelString(labelString, lexer, parser),
|
|
40
40
|
node = labelNode, ///
|
|
41
41
|
label = new Label(node);
|
|
42
42
|
|
package/src/lemma.js
CHANGED
|
@@ -7,7 +7,7 @@ import { LEMMA_KIND } from "./kinds";
|
|
|
7
7
|
export default class Lemma extends AxiomLemmaTheoremConjecture {
|
|
8
8
|
static kind = LEMMA_KIND;
|
|
9
9
|
|
|
10
|
-
static fromJSON(json,
|
|
10
|
+
static fromJSON(json, lexer, parser) { return AxiomLemmaTheoremConjecture.fromJSON(Lemma, json, lexer, parser); }
|
|
11
11
|
|
|
12
12
|
static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Lemma, labels, suppositions, consequence); }
|
|
13
13
|
}
|
package/src/log.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { levels } from "necessary";
|
|
4
|
+
|
|
5
|
+
import { leastLineIndexFromNodeAndTokens, greatestLineIndexFromNodeAndTokens } from "./utilities/tokens";
|
|
6
|
+
|
|
7
|
+
const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL, FATAL_LEVEL } = levels;
|
|
8
|
+
|
|
9
|
+
export default class Log {
|
|
10
|
+
constructor(messages, logLevel, follow) {
|
|
11
|
+
this.messages = messages;
|
|
12
|
+
this.logLevel = logLevel;
|
|
13
|
+
this.follow = follow;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getMessages() {
|
|
17
|
+
return this.messages;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getLogLevel() {
|
|
21
|
+
return this.logLevel;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getFollow() {
|
|
25
|
+
return this.follow;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
trace(message, node, tokens, filePath) {
|
|
29
|
+
const level = TRACE_LEVEL;
|
|
30
|
+
|
|
31
|
+
this.write(level, message, node, tokens, filePath);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
debug(message, node, tokens, filePath) {
|
|
35
|
+
const level = DEBUG_LEVEL;
|
|
36
|
+
|
|
37
|
+
this.write(level, message, node, tokens, filePath);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
info(message, node, tokens, filePath) {
|
|
41
|
+
const level = INFO_LEVEL;
|
|
42
|
+
|
|
43
|
+
this.write(level, message, node, tokens, filePath);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
warning(message, node, tokens, filePath) {
|
|
47
|
+
const level = WARNING_LEVEL;
|
|
48
|
+
|
|
49
|
+
this.write(level, message, node, tokens, filePath);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
error(message, node, tokens, filePath) {
|
|
53
|
+
const level = ERROR_LEVEL;
|
|
54
|
+
|
|
55
|
+
this.write(level, message, node, tokens, filePath);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
fatal(message, node, tokens, filePath) {
|
|
59
|
+
const level = FATAL_LEVEL;
|
|
60
|
+
|
|
61
|
+
this.write(level, message, node, tokens, filePath);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
write(level, message, node, tokens, filePath) {
|
|
65
|
+
const levels = [
|
|
66
|
+
TRACE_LEVEL,
|
|
67
|
+
DEBUG_LEVEL,
|
|
68
|
+
INFO_LEVEL,
|
|
69
|
+
WARNING_LEVEL,
|
|
70
|
+
ERROR_LEVEL,
|
|
71
|
+
FATAL_LEVEL,
|
|
72
|
+
],
|
|
73
|
+
levelIndex = levels.indexOf(level),
|
|
74
|
+
logLevelIndex = levels.indexOf(this.logLevel);
|
|
75
|
+
|
|
76
|
+
if (levelIndex < logLevelIndex) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
message = formatMessage(level, message, node, tokens, filePath); ///
|
|
81
|
+
|
|
82
|
+
this.follow ?
|
|
83
|
+
console.log(message) :
|
|
84
|
+
this.messages.push(message);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static followAndLogLevel(follow, logLevel) {
|
|
88
|
+
const messages = follow ?
|
|
89
|
+
null :
|
|
90
|
+
[],
|
|
91
|
+
log = new Log(messages, logLevel, follow);
|
|
92
|
+
|
|
93
|
+
return log;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function formatMessage(level, message, node, tokens, filePath) {
|
|
98
|
+
const upperCaseLevel = level.toUpperCase();
|
|
99
|
+
|
|
100
|
+
if (node === null) {
|
|
101
|
+
message = `${upperCaseLevel}: ${message}`;
|
|
102
|
+
} else {
|
|
103
|
+
const leastLineIndex = leastLineIndexFromNodeAndTokens(node, tokens),
|
|
104
|
+
greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens);
|
|
105
|
+
|
|
106
|
+
if (leastLineIndex === greatestLineIndex) {
|
|
107
|
+
const lineIndex = leastLineIndex; ///
|
|
108
|
+
|
|
109
|
+
message = `${upperCaseLevel}: ${filePath} (${lineIndex}) - ${message}`;
|
|
110
|
+
} else {
|
|
111
|
+
message = `${upperCaseLevel}: ${filePath} (${leastLineIndex}-${greatestLineIndex}) - ${message}`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return message;
|
|
116
|
+
}
|
package/src/matcher.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
matchNode(nodeA, nodeB,
|
|
3
|
+
class Matcher {
|
|
4
|
+
matchNode(nodeA, nodeB, depth = Infinity) {
|
|
5
5
|
let nodeMatches = false;
|
|
6
6
|
|
|
7
7
|
if (depth === 0) {
|
|
@@ -20,7 +20,7 @@ export default class Matcher {
|
|
|
20
20
|
} else {
|
|
21
21
|
const nonTerminalNodeA = nodeA, ///
|
|
22
22
|
nonTerminalNodeB = nodeB, ///
|
|
23
|
-
nonTerminalNodeMatches = this.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
23
|
+
nonTerminalNodeMatches = this.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, depth);
|
|
24
24
|
|
|
25
25
|
nodeMatches = nonTerminalNodeMatches; ///
|
|
26
26
|
}
|
|
@@ -30,7 +30,7 @@ export default class Matcher {
|
|
|
30
30
|
return nodeMatches;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
matchNodes(nodesA, nodesB,
|
|
33
|
+
matchNodes(nodesA, nodesB, depth) {
|
|
34
34
|
let nodesMatch = false;
|
|
35
35
|
|
|
36
36
|
const nodesALength = nodesA.length,
|
|
@@ -41,7 +41,7 @@ export default class Matcher {
|
|
|
41
41
|
|
|
42
42
|
nodesMatch = nodesA.every((nodeA, index) => {
|
|
43
43
|
const nodeB = nodesB[index],
|
|
44
|
-
nodeMatches = this.matchNode(nodeA, nodeB,
|
|
44
|
+
nodeMatches = this.matchNode(nodeA, nodeB, depth);
|
|
45
45
|
|
|
46
46
|
if (nodeMatches) {
|
|
47
47
|
return true;
|
|
@@ -52,14 +52,14 @@ export default class Matcher {
|
|
|
52
52
|
return nodesMatch;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
matchTerminalNode(terminalNodeA, terminalNodeB,
|
|
55
|
+
matchTerminalNode(terminalNodeA, terminalNodeB, depth) {
|
|
56
56
|
const matches = terminalNodeA.match(terminalNodeB),
|
|
57
57
|
terminalNodeMatches = matches; ///
|
|
58
58
|
|
|
59
59
|
return terminalNodeMatches;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
62
|
+
matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, depth) {
|
|
63
63
|
let nonTerminalNodeMatches = false;
|
|
64
64
|
|
|
65
65
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
@@ -70,7 +70,7 @@ export default class Matcher {
|
|
|
70
70
|
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
71
71
|
nodesA = nonTerminalNodeAChildNodes, ///
|
|
72
72
|
nodesB = nonTerminalNodeBChildNodes, ///
|
|
73
|
-
nodesMatch = this.matchNodes(nodesA, nodesB,
|
|
73
|
+
nodesMatch = this.matchNodes(nodesA, nodesB, depth);
|
|
74
74
|
|
|
75
75
|
nonTerminalNodeMatches = nodesMatch; ///
|
|
76
76
|
}
|
|
@@ -79,4 +79,6 @@ export default class Matcher {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
const matcher = new Matcher();
|
|
83
|
+
|
|
84
|
+
export default matcher;
|
package/src/mixins/logging.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function trace(message) { this.context.trace(message); }
|
|
3
|
+
function trace(node, message) { this.context.trace(node, message); }
|
|
4
4
|
|
|
5
|
-
function debug(message) { this.context.debug(message); }
|
|
5
|
+
function debug(node, message) { this.context.debug(node, message); }
|
|
6
6
|
|
|
7
|
-
function info(message) { this.context.info(message); }
|
|
7
|
+
function info(node, message) { this.context.info(node, message); }
|
|
8
8
|
|
|
9
|
-
function warning(message) { this.context.warning(message); }
|
|
9
|
+
function warning(node, message) { this.context.warning(node, message); }
|
|
10
10
|
|
|
11
|
-
function error(message) { this.context.error(message); }
|
|
11
|
+
function error(node, message) { this.context.error(node, message); }
|
|
12
12
|
|
|
13
|
-
function fatal(message) { this.context.fatal(message); }
|
|
13
|
+
function fatal(node, message) { this.context.fatal(node, message); }
|
|
14
14
|
|
|
15
15
|
const loggingMixins = {
|
|
16
16
|
trace,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { metastatementNodeFromMetastatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const bracketedMetastatementString = "(A)";
|
|
6
|
+
|
|
7
|
+
const bracketedMetastatementNode = metastatementNodeFromMetastatementString(bracketedMetastatementString);
|
|
8
|
+
|
|
9
|
+
export default bracketedMetastatementNode;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { statementNodeFromStatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const bracketedStatementString = "(n=m)";
|
|
6
|
+
|
|
7
|
+
const bracketedStatementNode = statementNodeFromStatementString(bracketedStatementString);
|
|
8
|
+
|
|
9
|
+
export default bracketedStatementNode;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { STATEMENT_META_TYPE_NAME } from "../../../metaTypeNames";
|
|
4
|
+
import { statementNodeFromStatementString } from "../../../utilities/node";
|
|
5
|
+
|
|
6
|
+
const bracketedCombinatorStatementString = `(${STATEMENT_META_TYPE_NAME})`;
|
|
7
|
+
|
|
8
|
+
const bracketedCombinatorStatementNode = statementNodeFromStatementString(bracketedCombinatorStatementString);
|
|
9
|
+
|
|
10
|
+
export default bracketedCombinatorStatementNode;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { OBJECT_TYPE_NAME } from "../../../typeNames";
|
|
4
|
+
import { statementNodeFromStatementString } from "../../../utilities/node";
|
|
5
|
+
|
|
6
|
+
const equalityCombinatorStatementString = `${OBJECT_TYPE_NAME} = ${OBJECT_TYPE_NAME}`;
|
|
7
|
+
|
|
8
|
+
const equalityCombinatorStatementNode = statementNodeFromStatementString(equalityCombinatorStatementString);
|
|
9
|
+
|
|
10
|
+
export default equalityCombinatorStatementNode;
|
|
11
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { statementNodeFromStatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const equalityStatementString = "n=m";
|
|
6
|
+
|
|
7
|
+
const equalityStatementNode = statementNodeFromStatementString(equalityStatementString);
|
|
8
|
+
|
|
9
|
+
export default equalityStatementNode;
|
|
10
|
+
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Combinator from "../combinator";
|
|
4
|
-
import combinatorReleaseContext from "../context/release/combinator";
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
import bracketedCombinatorStatementNode from "../node/statement/combinator/bracketed";
|
|
7
6
|
|
|
8
7
|
class BracketedCombinator extends Combinator {
|
|
9
8
|
static fromNothing() {
|
|
10
|
-
const
|
|
11
|
-
releaseContext = combinatorReleaseContext, ///
|
|
12
|
-
statementNode = statementNodeFromStatementString(statementString, releaseContext),
|
|
9
|
+
const statementNode = bracketedCombinatorStatementNode, ///
|
|
13
10
|
bracketedCombinator = new BracketedCombinator(statementNode);
|
|
14
11
|
|
|
15
12
|
return bracketedCombinator;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Combinator from "../combinator";
|
|
4
|
-
import CombinatorReleaseContext from "../context/release/combinator";
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
import equalityCombinatorStatementNode from "../node/statement/combinator/equality";
|
|
7
6
|
|
|
8
7
|
class EqualityCombinator extends Combinator {
|
|
9
8
|
static fromNothing() {
|
|
10
|
-
const
|
|
11
|
-
releaseContext = CombinatorReleaseContext, ///
|
|
12
|
-
statementNode = statementNodeFromStatementString(statementString, releaseContext),
|
|
9
|
+
const statementNode = equalityCombinatorStatementNode, ///
|
|
13
10
|
equalityCombinator = new EqualityCombinator(statementNode);
|
|
14
11
|
|
|
15
12
|
return equalityCombinator;
|