occam-verify-cli 1.0.448 → 1.0.472
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/lib/constants.js +13 -5
- package/lib/context/ephemeral.js +270 -0
- package/lib/context/file.js +136 -128
- package/lib/context/liminal.js +120 -0
- package/lib/context/literal.js +92 -0
- package/lib/context/nominal.js +15 -1
- package/lib/context/release.js +68 -9
- package/lib/context/scoped.js +322 -0
- package/lib/context/synthetic.js +133 -0
- package/lib/element/assertion/contained.js +66 -66
- package/lib/element/assertion/defined.js +32 -32
- package/lib/element/assertion/property.js +39 -39
- package/lib/element/assertion/satisfies.js +22 -22
- package/lib/element/assumption.js +71 -87
- package/lib/element/combinator/bracketed.js +1 -10
- package/lib/element/conclusion.js +19 -15
- package/lib/element/constructor/bracketed.js +1 -10
- package/lib/element/constructor.js +2 -2
- package/lib/element/declaration/combinator.js +1 -2
- package/lib/element/declaration/metavariable.js +3 -3
- package/lib/element/declaration/variable.js +3 -3
- package/lib/element/deduction.js +26 -20
- package/lib/element/derivation.js +3 -3
- package/lib/element/equality.js +5 -5
- package/lib/element/equivalence.js +112 -107
- package/lib/element/equivalences.js +24 -10
- package/lib/element/error.js +3 -3
- package/lib/element/frame.js +73 -62
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +40 -60
- package/lib/element/metaType.js +4 -4
- package/lib/element/metavariable.js +49 -38
- package/lib/element/parameter.js +13 -5
- package/lib/element/procedureCall.js +16 -16
- package/lib/element/proof.js +14 -13
- package/lib/element/proofAssertion/premise.js +319 -0
- package/lib/element/proofAssertion/step.js +309 -0
- package/lib/element/proofAssertion/supposition.js +333 -0
- package/lib/element/proofAssertion.js +20 -10
- package/lib/element/propertyRelation.js +2 -2
- package/lib/element/reference.js +72 -30
- package/lib/element/rule.js +26 -28
- package/lib/element/section.js +5 -5
- package/lib/element/signature.js +9 -6
- package/lib/element/statement.js +44 -36
- package/lib/element/subproof.js +18 -17
- package/lib/element/substitution/frame.js +86 -49
- package/lib/element/substitution/reference.js +101 -19
- package/lib/element/substitution/statement.js +128 -105
- package/lib/element/substitution/term.js +93 -57
- package/lib/element/substitution.js +20 -69
- package/lib/element/substitutions.js +49 -34
- package/lib/element/term.js +41 -30
- package/lib/element/topLevelAssertion/axiom.js +331 -0
- package/lib/element/{conjecture.js → topLevelAssertion/conjecture.js} +10 -10
- package/lib/element/{lemma.js → topLevelAssertion/lemma.js} +9 -9
- package/lib/element/{theorem.js → topLevelAssertion/theorem.js} +8 -8
- package/lib/element/topLevelAssertion.js +434 -0
- package/lib/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +8 -8
- package/lib/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +8 -8
- package/lib/element/topLevelMetaAssertion.js +293 -0
- package/lib/element/type.js +4 -4
- package/lib/element/variable.js +48 -40
- package/lib/index.js +3 -3
- package/lib/main.js +3 -3
- package/lib/metaTypes.js +18 -15
- package/lib/node/frame.js +2 -2
- package/lib/node/metavariable.js +4 -4
- package/lib/node/parameter.js +28 -7
- package/lib/node/proofAssertion/premise.js +116 -0
- package/lib/node/proofAssertion/step.js +152 -0
- package/lib/node/proofAssertion/supposition.js +116 -0
- package/lib/node/{premise.js → proofAssertion.js} +11 -18
- package/lib/node/statement.js +2 -2
- package/lib/node/substitution/frame.js +9 -31
- package/lib/node/substitution/reference.js +137 -0
- package/lib/node/substitution/statement.js +9 -31
- package/lib/node/substitution/term.js +9 -23
- package/lib/node/{axiom.js → topLevelAssertion/axiom.js} +7 -7
- package/lib/node/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
- package/lib/node/{lemma.js → topLevelAssertion/lemma.js} +7 -7
- package/lib/node/{theorem.js → topLevelAssertion/theorem.js} +7 -7
- package/lib/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +9 -9
- package/lib/node/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
- package/lib/node/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
- package/lib/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +9 -9
- package/lib/nonTerminalNodeMap.js +15 -14
- package/lib/preamble.js +10 -10
- package/lib/process/instantiate.js +6 -21
- package/lib/process/unify.js +11 -10
- package/lib/tokenTypes.js +22 -0
- package/lib/types.js +3 -3
- package/lib/utilities/bnf.js +5 -5
- package/lib/utilities/context.js +63 -0
- package/lib/utilities/element.js +235 -408
- package/lib/utilities/instance.js +12 -34
- package/lib/utilities/json.js +3 -2
- package/lib/utilities/string.js +56 -21
- package/lib/utilities/unification.js +38 -32
- package/lib/utilities/validation.js +47 -50
- package/package.json +2 -2
- package/src/constants.js +12 -1
- package/src/context/ephemeral.js +257 -0
- package/src/context/file.js +108 -116
- package/src/context/liminal.js +67 -0
- package/src/context/literal.js +51 -0
- package/src/context/nominal.js +12 -0
- package/src/context/release.js +48 -8
- package/src/context/{local.js → scoped.js} +43 -125
- package/src/context/synthetic.js +60 -0
- package/src/element/assertion/contained.js +49 -47
- package/src/element/assertion/defined.js +29 -27
- package/src/element/assertion/property.js +35 -35
- package/src/element/assertion/satisfies.js +19 -18
- package/src/element/assumption.js +71 -93
- package/src/element/combinator/bracketed.js +0 -7
- package/src/element/conclusion.js +25 -24
- package/src/element/constructor/bracketed.js +0 -7
- package/src/element/constructor.js +1 -1
- package/src/element/declaration/combinator.js +0 -1
- package/src/element/declaration/metavariable.js +2 -2
- package/src/element/declaration/variable.js +5 -5
- package/src/element/deduction.js +33 -31
- package/src/element/derivation.js +2 -2
- package/src/element/equality.js +4 -4
- package/src/element/equivalence.js +115 -135
- package/src/element/equivalences.js +9 -7
- package/src/element/error.js +4 -2
- package/src/element/frame.js +80 -65
- package/src/element/hypothesis.js +1 -1
- package/src/element/judgement.js +42 -62
- package/src/element/metaType.js +3 -4
- package/src/element/metavariable.js +59 -56
- package/src/element/parameter.js +10 -5
- package/src/element/procedureCall.js +20 -18
- package/src/element/proof.js +14 -16
- package/src/element/{premise.js → proofAssertion/premise.js} +57 -53
- package/src/element/{step.js → proofAssertion/step.js} +59 -62
- package/src/element/{supposition.js → proofAssertion/supposition.js} +67 -56
- package/src/element/proofAssertion.js +24 -13
- package/src/element/propertyRelation.js +1 -1
- package/src/element/reference.js +87 -37
- package/src/element/rule.js +31 -37
- package/src/element/section.js +5 -5
- package/src/element/signature.js +8 -8
- package/src/element/statement.js +52 -48
- package/src/element/subproof.js +16 -18
- package/src/element/substitution/frame.js +104 -50
- package/src/element/substitution/reference.js +120 -20
- package/src/element/substitution/statement.js +169 -130
- package/src/element/substitution/term.js +104 -63
- package/src/element/substitution.js +16 -58
- package/src/element/substitutions.js +43 -41
- package/src/element/term.js +47 -41
- package/src/element/{axiom.js → topLevelAssertion/axiom.js} +22 -20
- package/src/element/{conjecture.js → topLevelAssertion/conjecture.js} +5 -6
- package/src/element/{lemma.js → topLevelAssertion/lemma.js} +5 -6
- package/src/element/{theorem.js → topLevelAssertion/theorem.js} +5 -5
- package/src/element/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +37 -33
- package/src/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +5 -6
- package/src/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +5 -6
- package/src/element/{metaLemmaMetatheorem.js → topLevelMetaAssertion.js} +19 -17
- package/src/element/type.js +2 -4
- package/src/element/variable.js +47 -48
- package/src/index.js +2 -1
- package/src/main.js +2 -1
- package/src/metaTypes.js +25 -9
- package/src/node/frame.js +1 -1
- package/src/node/metavariable.js +3 -3
- package/src/node/parameter.js +32 -5
- package/src/node/proofAssertion/premise.js +16 -0
- package/src/node/{step.js → proofAssertion/step.js} +4 -18
- package/src/node/proofAssertion/supposition.js +16 -0
- package/src/node/proofAssertion.js +23 -0
- package/src/node/statement.js +1 -1
- package/src/node/substitution/frame.js +6 -32
- package/src/node/substitution/reference.js +38 -0
- package/src/node/substitution/statement.js +6 -32
- package/src/node/substitution/term.js +6 -22
- package/src/node/topLevelAssertion/axiom.js +13 -0
- package/src/node/topLevelAssertion/conjecture.js +13 -0
- package/src/node/topLevelAssertion/lemma.js +13 -0
- package/src/node/topLevelAssertion/theorem.js +13 -0
- package/src/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +1 -1
- package/src/node/topLevelMetaAssertion/metaLemma.js +13 -0
- package/src/node/topLevelMetaAssertion/metatheorem.js +13 -0
- package/src/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +1 -1
- package/src/nonTerminalNodeMap.js +15 -12
- package/src/preamble.js +9 -9
- package/src/process/instantiate.js +27 -36
- package/src/process/unify.js +10 -9
- package/src/tokenTypes.js +4 -0
- package/src/types.js +4 -2
- package/src/utilities/bnf.js +3 -2
- package/src/utilities/context.js +46 -0
- package/src/utilities/element.js +302 -509
- package/src/utilities/instance.js +19 -42
- package/src/utilities/json.js +3 -1
- package/src/utilities/string.js +69 -28
- package/src/utilities/unification.js +41 -38
- package/src/utilities/validation.js +66 -75
- package/lib/context/local.js +0 -605
- package/lib/context/temporary.js +0 -752
- package/lib/element/axiom.js +0 -329
- package/lib/element/axiomLemmaTheoremConjecture.js +0 -427
- package/lib/element/metaLemmaMetatheorem.js +0 -289
- package/lib/element/premise.js +0 -307
- package/lib/element/step.js +0 -311
- package/lib/element/supposition.js +0 -320
- package/lib/log.js +0 -150
- package/lib/node/step.js +0 -166
- package/lib/node/supposition.js +0 -130
- package/src/context/temporary.js +0 -476
- package/src/log.js +0 -118
- package/src/node/axiom.js +0 -13
- package/src/node/conjecture.js +0 -13
- package/src/node/lemma.js +0 -13
- package/src/node/metaLemma.js +0 -13
- package/src/node/metatheorem.js +0 -13
- package/src/node/premise.js +0 -30
- package/src/node/supposition.js +0 -30
- package/src/node/theorem.js +0 -13
package/src/context/file.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
|
+
import { contextUtilities } from "occam-furtle";
|
|
4
5
|
|
|
5
6
|
import elements from "../elements";
|
|
6
7
|
|
|
8
|
+
import { LEVELS } from "../constants";
|
|
7
9
|
import { verifyFile } from "../process/verify";
|
|
8
10
|
import { baseTypeFromNothing } from "../types";
|
|
9
11
|
import { nodeAsString, nodesAsString } from "../utilities/node";
|
|
@@ -32,11 +34,13 @@ import { typesFromJSON,
|
|
|
32
34
|
metatheoremsToMetatheoremsJSON,
|
|
33
35
|
metavariablesToMetavariablesJSON } from "../utilities/json";
|
|
34
36
|
|
|
35
|
-
const { push, filter } = arrayUtilities
|
|
37
|
+
const { push, filter } = arrayUtilities,
|
|
38
|
+
{ chainContext, lineIndexFromNodeAndTokens } = contextUtilities,
|
|
39
|
+
[ TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL ] = LEVELS;
|
|
36
40
|
|
|
37
41
|
export default class FileContext {
|
|
38
|
-
constructor(
|
|
39
|
-
this.
|
|
42
|
+
constructor(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
|
|
43
|
+
this.context = context;
|
|
40
44
|
this.filePath = filePath;
|
|
41
45
|
this.lineIndex = lineIndex;
|
|
42
46
|
this.tokens = tokens;
|
|
@@ -54,10 +58,12 @@ export default class FileContext {
|
|
|
54
58
|
this.constructors = constructors;
|
|
55
59
|
this.metatheorems = metatheorems;
|
|
56
60
|
this.metavariables = metavariables;
|
|
61
|
+
|
|
62
|
+
return chainContext(this);
|
|
57
63
|
}
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
return this.
|
|
65
|
+
getContext() {
|
|
66
|
+
return this.context;
|
|
61
67
|
}
|
|
62
68
|
|
|
63
69
|
getFilePath() {
|
|
@@ -76,14 +82,6 @@ export default class FileContext {
|
|
|
76
82
|
return this.node;
|
|
77
83
|
}
|
|
78
84
|
|
|
79
|
-
getLexer() { return this.releaseContext.getLexer(); }
|
|
80
|
-
|
|
81
|
-
getParser() { return this.releaseContext.getParser(); }
|
|
82
|
-
|
|
83
|
-
getMetaTypes() { return this.releaseContext.getMetaTypes(); }
|
|
84
|
-
|
|
85
|
-
getTypePrefix() { return this.releaseContext.getTypePrefix(); }
|
|
86
|
-
|
|
87
85
|
getJudgements() {
|
|
88
86
|
const judgements = [];
|
|
89
87
|
|
|
@@ -92,7 +90,7 @@ export default class FileContext {
|
|
|
92
90
|
|
|
93
91
|
getEquivalences() {
|
|
94
92
|
const { Equivalences } = elements,
|
|
95
|
-
equivalences = Equivalences.fromNothing();
|
|
93
|
+
equivalences = Equivalences.fromNothing(context);
|
|
96
94
|
|
|
97
95
|
return equivalences;
|
|
98
96
|
}
|
|
@@ -107,7 +105,7 @@ export default class FileContext {
|
|
|
107
105
|
const labels = [];
|
|
108
106
|
|
|
109
107
|
if (includeRelease) {
|
|
110
|
-
const releaseContextLabels = this.
|
|
108
|
+
const releaseContextLabels = this.context.getLabels();
|
|
111
109
|
|
|
112
110
|
push(labels, releaseContextLabels);
|
|
113
111
|
} else {
|
|
@@ -153,7 +151,7 @@ export default class FileContext {
|
|
|
153
151
|
|
|
154
152
|
getTypes(includeRelease = true, includeDependencies = true) {
|
|
155
153
|
const types = includeRelease ?
|
|
156
|
-
this.
|
|
154
|
+
this.context.getTypes(includeDependencies) :
|
|
157
155
|
this.types;
|
|
158
156
|
|
|
159
157
|
return types;
|
|
@@ -161,7 +159,7 @@ export default class FileContext {
|
|
|
161
159
|
|
|
162
160
|
getRules(includeRelease = true) {
|
|
163
161
|
const rules = includeRelease ?
|
|
164
|
-
this.
|
|
162
|
+
this.context.getRules() :
|
|
165
163
|
this.rules;
|
|
166
164
|
|
|
167
165
|
return rules;
|
|
@@ -169,7 +167,7 @@ export default class FileContext {
|
|
|
169
167
|
|
|
170
168
|
getAxioms(includeRelease = true) {
|
|
171
169
|
const axioms = includeRelease ?
|
|
172
|
-
this.
|
|
170
|
+
this.context.getAxioms() :
|
|
173
171
|
this.axioms;
|
|
174
172
|
|
|
175
173
|
return axioms;
|
|
@@ -177,7 +175,7 @@ export default class FileContext {
|
|
|
177
175
|
|
|
178
176
|
getLemmas(includeRelease = true) {
|
|
179
177
|
const lemmas = includeRelease ?
|
|
180
|
-
this.
|
|
178
|
+
this.context.getLemmas() :
|
|
181
179
|
this.lemmas;
|
|
182
180
|
|
|
183
181
|
return lemmas;
|
|
@@ -185,7 +183,7 @@ export default class FileContext {
|
|
|
185
183
|
|
|
186
184
|
getTheorems(includeRelease = true) {
|
|
187
185
|
const theorems = includeRelease ?
|
|
188
|
-
this.
|
|
186
|
+
this.context.getTheorems() :
|
|
189
187
|
this.theorems;
|
|
190
188
|
|
|
191
189
|
return theorems;
|
|
@@ -197,7 +195,7 @@ export default class FileContext {
|
|
|
197
195
|
|
|
198
196
|
getProcedures(includeRelease = true) {
|
|
199
197
|
const procedures = includeRelease ?
|
|
200
|
-
this.
|
|
198
|
+
this.context.getProcedures() :
|
|
201
199
|
null; ///
|
|
202
200
|
|
|
203
201
|
return procedures;
|
|
@@ -205,7 +203,7 @@ export default class FileContext {
|
|
|
205
203
|
|
|
206
204
|
getMetaLemmas(includeRelease = true) {
|
|
207
205
|
const metaLemmas = includeRelease ?
|
|
208
|
-
this.
|
|
206
|
+
this.context.getMetaLemmas() :
|
|
209
207
|
this.metaLemmas;
|
|
210
208
|
|
|
211
209
|
return metaLemmas;
|
|
@@ -213,7 +211,7 @@ export default class FileContext {
|
|
|
213
211
|
|
|
214
212
|
getConjectures(includeRelease = true) {
|
|
215
213
|
const conjectures = includeRelease ?
|
|
216
|
-
this.
|
|
214
|
+
this.context.getConjectures() :
|
|
217
215
|
this.conjectures;
|
|
218
216
|
|
|
219
217
|
return conjectures;
|
|
@@ -221,7 +219,7 @@ export default class FileContext {
|
|
|
221
219
|
|
|
222
220
|
getCombinators(includeRelease = true) {
|
|
223
221
|
const combinators = includeRelease ?
|
|
224
|
-
this.
|
|
222
|
+
this.context.getCombinators() :
|
|
225
223
|
this.combinators;
|
|
226
224
|
|
|
227
225
|
return combinators;
|
|
@@ -229,7 +227,7 @@ export default class FileContext {
|
|
|
229
227
|
|
|
230
228
|
getTypePrefixes(includeRelease = true) {
|
|
231
229
|
const typePrefixes = includeRelease ?
|
|
232
|
-
this.
|
|
230
|
+
this.context.getTypePrefixes() :
|
|
233
231
|
this.typePrefixes;
|
|
234
232
|
|
|
235
233
|
return typePrefixes;
|
|
@@ -237,7 +235,7 @@ export default class FileContext {
|
|
|
237
235
|
|
|
238
236
|
getConstructors(includeRelease = true) {
|
|
239
237
|
const constructors = includeRelease ?
|
|
240
|
-
this.
|
|
238
|
+
this.context.getConstructors() :
|
|
241
239
|
this.constructors;
|
|
242
240
|
|
|
243
241
|
return constructors;
|
|
@@ -245,7 +243,7 @@ export default class FileContext {
|
|
|
245
243
|
|
|
246
244
|
getMetatheorems(includeRelease = true) {
|
|
247
245
|
const metatheorems = includeRelease ?
|
|
248
|
-
this.
|
|
246
|
+
this.context.getMetatheorems() :
|
|
249
247
|
this.metatheorems;
|
|
250
248
|
|
|
251
249
|
return metatheorems;
|
|
@@ -255,12 +253,6 @@ export default class FileContext {
|
|
|
255
253
|
return this.metavariables;
|
|
256
254
|
}
|
|
257
255
|
|
|
258
|
-
getFileContext() {
|
|
259
|
-
const fileContext = this; ///
|
|
260
|
-
|
|
261
|
-
return fileContext;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
256
|
addType(type) {
|
|
265
257
|
this.types.push(type);
|
|
266
258
|
}
|
|
@@ -440,10 +432,10 @@ export default class FileContext {
|
|
|
440
432
|
|
|
441
433
|
filter(metaLemmas, (metaLemma) => {
|
|
442
434
|
const context = this, ///
|
|
443
|
-
|
|
444
|
-
|
|
435
|
+
topLevelMetaAssertion = metaLemma, ///
|
|
436
|
+
topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
|
|
445
437
|
|
|
446
|
-
if (
|
|
438
|
+
if (topLevelMetaAssertionUnifies) {
|
|
447
439
|
return true;
|
|
448
440
|
}
|
|
449
441
|
});
|
|
@@ -456,10 +448,10 @@ export default class FileContext {
|
|
|
456
448
|
|
|
457
449
|
filter(metatheorems, (metatheorem) => {
|
|
458
450
|
const context = this, ///
|
|
459
|
-
|
|
460
|
-
|
|
451
|
+
topLevelMetaAssertion = metatheorem, ///
|
|
452
|
+
topLevelMetaAssertionUnifies = reference.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
|
|
461
453
|
|
|
462
|
-
if (
|
|
454
|
+
if (topLevelMetaAssertionUnifies) {
|
|
463
455
|
return true;
|
|
464
456
|
}
|
|
465
457
|
});
|
|
@@ -467,33 +459,33 @@ export default class FileContext {
|
|
|
467
459
|
return metatheorems;
|
|
468
460
|
}
|
|
469
461
|
|
|
470
|
-
|
|
462
|
+
findTopLevelMetaAssertionByReference(reference) {
|
|
471
463
|
const metaLemma = this.findMetaLemmaByReference(reference),
|
|
472
464
|
metatheorem = this.findMetatheoremByReference(reference),
|
|
473
|
-
|
|
465
|
+
topLevelMetaAssertion = (metaLemma || metatheorem); ///
|
|
474
466
|
|
|
475
|
-
return
|
|
467
|
+
return topLevelMetaAssertion;
|
|
476
468
|
}
|
|
477
469
|
|
|
478
|
-
|
|
470
|
+
findTopLevelMetaAssertionsByReference(reference) {
|
|
479
471
|
const metaLemmas = this.findMetaLemmasByReference(reference),
|
|
480
472
|
metatheorems = this.findMetatheoremsByReference(reference),
|
|
481
|
-
|
|
473
|
+
topLevelMetaAssertions = [
|
|
482
474
|
...metaLemmas,
|
|
483
475
|
...metatheorems
|
|
484
476
|
];
|
|
485
477
|
|
|
486
|
-
return
|
|
478
|
+
return topLevelMetaAssertions;
|
|
487
479
|
}
|
|
488
480
|
|
|
489
|
-
|
|
481
|
+
findTopLevelAssertionByReference(reference) {
|
|
490
482
|
const axiom = this.findAxiomByReference(reference),
|
|
491
483
|
lemma = this.findLemmaByReference(reference),
|
|
492
484
|
theorem = this.findTheoremByReference(reference),
|
|
493
485
|
conjecture = this.findConjectureByReference(reference),
|
|
494
|
-
|
|
486
|
+
topLevelAssertion = (axiom || lemma || theorem || conjecture);
|
|
495
487
|
|
|
496
|
-
return
|
|
488
|
+
return topLevelAssertion;
|
|
497
489
|
}
|
|
498
490
|
|
|
499
491
|
findMetavariable(metavariable) {
|
|
@@ -501,12 +493,9 @@ export default class FileContext {
|
|
|
501
493
|
specificMetavariable = metavariable; ///
|
|
502
494
|
|
|
503
495
|
metavariable = metavariables.find((metavariable) => {
|
|
504
|
-
const generalMetavariable = metavariable; ///
|
|
505
|
-
|
|
506
|
-
metavariable = specificMetavariable; ///
|
|
507
|
-
|
|
508
496
|
const context = this, ///
|
|
509
|
-
|
|
497
|
+
generalMetavariable = metavariable, ///
|
|
498
|
+
metavariableUnifies = generalMetavariable.unifyMetavariable(specificMetavariable, context);
|
|
510
499
|
|
|
511
500
|
if (metavariableUnifies) {
|
|
512
501
|
return true;
|
|
@@ -742,10 +731,8 @@ export default class FileContext {
|
|
|
742
731
|
isLabelPresentByReference(reference) {
|
|
743
732
|
const labels = this.getLabels(),
|
|
744
733
|
labelPresent = labels.some((label) => {
|
|
745
|
-
const
|
|
746
|
-
|
|
747
|
-
substitutions = Substitutions.fromNothing(),
|
|
748
|
-
labelUnifies = reference.unifyLabel(label, substitutions, context);
|
|
734
|
+
const context = this, ///
|
|
735
|
+
labelUnifies = reference.unifyLabel(label, context);
|
|
749
736
|
|
|
750
737
|
if (labelUnifies) {
|
|
751
738
|
return true;
|
|
@@ -776,11 +763,25 @@ export default class FileContext {
|
|
|
776
763
|
return metavariablePresent;
|
|
777
764
|
}
|
|
778
765
|
|
|
779
|
-
|
|
780
|
-
const
|
|
781
|
-
|
|
766
|
+
isTopLevelMetaAssertionPresentByReference(reference) {
|
|
767
|
+
const topLevelMetaAssertion = this.findTopLevelMetaAssertionByReference(reference),
|
|
768
|
+
topLevelMetaAssertionPresent = (topLevelMetaAssertion !== null);
|
|
782
769
|
|
|
783
|
-
return
|
|
770
|
+
return topLevelMetaAssertionPresent;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
getFileContext() {
|
|
774
|
+
const fileContext = this; ///
|
|
775
|
+
|
|
776
|
+
return fileContext;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
getDepth() {
|
|
780
|
+
let depth = this.context.getDepth();
|
|
781
|
+
|
|
782
|
+
depth++;
|
|
783
|
+
|
|
784
|
+
return depth;
|
|
784
785
|
}
|
|
785
786
|
|
|
786
787
|
nodeAsString(node) {
|
|
@@ -795,36 +796,45 @@ export default class FileContext {
|
|
|
795
796
|
return string;
|
|
796
797
|
}
|
|
797
798
|
|
|
798
|
-
findFile(filePath) { return this.releaseContext.findFile(filePath); }
|
|
799
|
-
|
|
800
799
|
trace(message, node = null) {
|
|
801
|
-
|
|
800
|
+
const level = TRACE_LEVEL;
|
|
802
801
|
|
|
803
|
-
this.
|
|
802
|
+
this.writeToLog(level, message, node);
|
|
804
803
|
}
|
|
805
804
|
|
|
806
805
|
debug(message, node = null) {
|
|
807
|
-
|
|
806
|
+
const level = DEBUG_LEVEL;
|
|
808
807
|
|
|
809
|
-
this.
|
|
808
|
+
this.writeToLog(level, message, node);
|
|
810
809
|
}
|
|
811
810
|
|
|
812
811
|
info(message, node = null) {
|
|
813
|
-
|
|
812
|
+
const level = INFO_LEVEL;
|
|
814
813
|
|
|
815
|
-
this.
|
|
814
|
+
this.writeToLog(level, message, node);
|
|
816
815
|
}
|
|
817
816
|
|
|
818
817
|
warning(message, node = null) {
|
|
819
|
-
|
|
818
|
+
const level = WARNING_LEVEL;
|
|
820
819
|
|
|
821
|
-
this.
|
|
820
|
+
this.writeToLog(level, message, node);
|
|
822
821
|
}
|
|
823
822
|
|
|
824
823
|
error(message, node = null) {
|
|
825
|
-
|
|
824
|
+
const level = ERROR_LEVEL;
|
|
825
|
+
|
|
826
|
+
this.writeToLog(level, message, node);
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
writeToLog(level, message, node) {
|
|
830
|
+
const lineIndex = lineIndexFromNodeAndTokens(node, this.tokens, this.lineIndex),
|
|
831
|
+
filePath = (lineIndex === null) ?
|
|
832
|
+
this.filePath :
|
|
833
|
+
null;
|
|
826
834
|
|
|
827
|
-
this.
|
|
835
|
+
this.context.writeToLog(level, message, filePath, lineIndex);
|
|
836
|
+
|
|
837
|
+
this.lineIndex = lineIndex;
|
|
828
838
|
}
|
|
829
839
|
|
|
830
840
|
verify() {
|
|
@@ -842,9 +852,9 @@ export default class FileContext {
|
|
|
842
852
|
|
|
843
853
|
verifies = verifyFile(fileNode, context);
|
|
844
854
|
|
|
845
|
-
|
|
846
|
-
this.
|
|
847
|
-
|
|
855
|
+
verifies ?
|
|
856
|
+
this.complete() :
|
|
857
|
+
this.clear();
|
|
848
858
|
|
|
849
859
|
if (verifies) {
|
|
850
860
|
this.info(`...verified the '${this.filePath}' file.`);
|
|
@@ -854,7 +864,24 @@ export default class FileContext {
|
|
|
854
864
|
return verifies;
|
|
855
865
|
}
|
|
856
866
|
|
|
867
|
+
prepare() {
|
|
868
|
+
if (this.tokens !== null) {
|
|
869
|
+
return;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
const file = this.findFile(this.filePath),
|
|
873
|
+
lexer = this.getLexer(),
|
|
874
|
+
parser = this.getParser(),
|
|
875
|
+
content = file.getContent();
|
|
876
|
+
|
|
877
|
+
this.tokens = lexer.tokenise(content);
|
|
878
|
+
|
|
879
|
+
this.node = parser.parse(this.tokens);
|
|
880
|
+
}
|
|
881
|
+
|
|
857
882
|
clear() {
|
|
883
|
+
this.lineIndex = null;
|
|
884
|
+
|
|
858
885
|
this.types = [];
|
|
859
886
|
this.rules = [];
|
|
860
887
|
this.axioms = [];
|
|
@@ -870,21 +897,8 @@ export default class FileContext {
|
|
|
870
897
|
this.metavariables = [];
|
|
871
898
|
}
|
|
872
899
|
|
|
873
|
-
|
|
900
|
+
complete() {
|
|
874
901
|
this.lineIndex = null;
|
|
875
|
-
|
|
876
|
-
if (this.tokens !== null) {
|
|
877
|
-
return;
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
const file = this.findFile(this.filePath),
|
|
881
|
-
lexer = this.getLexer(),
|
|
882
|
-
parser = this.getParser(),
|
|
883
|
-
content = file.getContent();
|
|
884
|
-
|
|
885
|
-
this.tokens = lexer.tokenise(content);
|
|
886
|
-
|
|
887
|
-
this.node = parser.parse(this.tokens);
|
|
888
902
|
}
|
|
889
903
|
|
|
890
904
|
initialise(json) {
|
|
@@ -961,7 +975,7 @@ export default class FileContext {
|
|
|
961
975
|
return json;
|
|
962
976
|
}
|
|
963
977
|
|
|
964
|
-
static fromFile(file,
|
|
978
|
+
static fromFile(file, context) {
|
|
965
979
|
const filePath = file.getPath(),
|
|
966
980
|
lineIndex = null,
|
|
967
981
|
tokens = null,
|
|
@@ -979,12 +993,12 @@ export default class FileContext {
|
|
|
979
993
|
constructors = [],
|
|
980
994
|
metatheorems = [],
|
|
981
995
|
metavariables = [],
|
|
982
|
-
fileContext = new FileContext(
|
|
996
|
+
fileContext = new FileContext(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
|
|
983
997
|
|
|
984
998
|
return fileContext;
|
|
985
999
|
}
|
|
986
1000
|
|
|
987
|
-
static fromFilePath(filePath,
|
|
1001
|
+
static fromFilePath(filePath, context) {
|
|
988
1002
|
const lineIndex = null,
|
|
989
1003
|
tokens = null,
|
|
990
1004
|
node = null,
|
|
@@ -1001,30 +1015,8 @@ export default class FileContext {
|
|
|
1001
1015
|
constructors = null,
|
|
1002
1016
|
metatheorems = null,
|
|
1003
1017
|
metavariables = null,
|
|
1004
|
-
fileContext = new FileContext(
|
|
1018
|
+
fileContext = new FileContext(context, filePath, lineIndex, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables);
|
|
1005
1019
|
|
|
1006
1020
|
return fileContext;
|
|
1007
1021
|
}
|
|
1008
1022
|
}
|
|
1009
|
-
|
|
1010
|
-
function lineIndexFromNodeAndTokens(node, tokens, lineIndex) {
|
|
1011
|
-
if (node !== null) {
|
|
1012
|
-
lineIndex = 0;
|
|
1013
|
-
|
|
1014
|
-
const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens);
|
|
1015
|
-
|
|
1016
|
-
tokens.some((token, tokenIndex) => {
|
|
1017
|
-
const tokenEndOfLineToken = token.isEndOfLineToken();
|
|
1018
|
-
|
|
1019
|
-
if (tokenEndOfLineToken) {
|
|
1020
|
-
lineIndex += 1;
|
|
1021
|
-
}
|
|
1022
|
-
|
|
1023
|
-
if (tokenIndex === firstSignificantTokenIndex) {
|
|
1024
|
-
return true;
|
|
1025
|
-
}
|
|
1026
|
-
});
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
return lineIndex;
|
|
1030
|
-
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { arrayUtilities } from "necessary";
|
|
4
|
+
import { contextUtilities } from "occam-furtle";
|
|
5
|
+
|
|
6
|
+
const { extract } = arrayUtilities,
|
|
7
|
+
{ chainContext } = contextUtilities;
|
|
8
|
+
|
|
9
|
+
export default class LiminalContext {
|
|
10
|
+
constructor(context, substitutions) {
|
|
11
|
+
this.context = context;
|
|
12
|
+
this.substitutions = substitutions;
|
|
13
|
+
|
|
14
|
+
return chainContext(this);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getContext() {
|
|
18
|
+
return this.context;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getSubstitutions() {
|
|
22
|
+
let substitutions = this.context.getSubstitutions();
|
|
23
|
+
|
|
24
|
+
substitutions = [ ///
|
|
25
|
+
...this.substitutions,
|
|
26
|
+
...substitutions
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
return substitutions;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
addSubstitution(substitution) {
|
|
33
|
+
const context = this, ///
|
|
34
|
+
substitutionA = substitution, ///
|
|
35
|
+
substitutionString = substitution.getString();
|
|
36
|
+
|
|
37
|
+
extract(this.substitutions, (substitution) => {
|
|
38
|
+
const substitutionB = substitution, ///
|
|
39
|
+
substitutionAEqualToAssertionB = substitutionA.isEqualTo(substitutionB);
|
|
40
|
+
|
|
41
|
+
if (substitutionAEqualToAssertionB) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
context.trace(`Added the '${substitutionString}' substitution to the context.`);
|
|
47
|
+
|
|
48
|
+
this.substitutions.push(substitution);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
getFileContext() { return this.context.getFileContext(); }
|
|
52
|
+
|
|
53
|
+
getDepth() {
|
|
54
|
+
let depth = this.context.getDepth();
|
|
55
|
+
|
|
56
|
+
depth++;
|
|
57
|
+
|
|
58
|
+
return depth;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static fromNothing(context) {
|
|
62
|
+
const substitutions = [],
|
|
63
|
+
emphemeralContext = new LiminalContext(context, substitutions);
|
|
64
|
+
|
|
65
|
+
return emphemeralContext;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { contextUtilities } from "occam-furtle";
|
|
4
|
+
|
|
5
|
+
import { nodeAsString } from "../utilities/node";
|
|
6
|
+
|
|
7
|
+
const { chainContext } = contextUtilities;
|
|
8
|
+
|
|
9
|
+
export default class LiteralContext {
|
|
10
|
+
constructor(context, tokens) {
|
|
11
|
+
this.context = context;
|
|
12
|
+
this.tokens = tokens;
|
|
13
|
+
|
|
14
|
+
return chainContext(this);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getContext() {
|
|
18
|
+
return this.context;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getTokens() {
|
|
22
|
+
return this.tokens;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setTokens(tokens) {
|
|
26
|
+
this.tokens = tokens;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
nodeAsString(node) {
|
|
30
|
+
const string = nodeAsString(node, this.tokens);
|
|
31
|
+
|
|
32
|
+
return string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getFileContext() { return this.context.getFileContext(); }
|
|
36
|
+
|
|
37
|
+
getDepth() {
|
|
38
|
+
let depth = this.context.getDepth();
|
|
39
|
+
|
|
40
|
+
depth++;
|
|
41
|
+
|
|
42
|
+
return depth;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static fromNothing(context) {
|
|
46
|
+
const tokens = null,
|
|
47
|
+
literalContext = new LiteralContext(context, tokens);
|
|
48
|
+
|
|
49
|
+
return literalContext;
|
|
50
|
+
}
|
|
51
|
+
}
|
package/src/context/nominal.js
CHANGED
|
@@ -16,6 +16,18 @@ class NominalContext {
|
|
|
16
16
|
return this.parser;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
getFileContext() {
|
|
20
|
+
const fileContext = null;
|
|
21
|
+
|
|
22
|
+
return fileContext;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getDepth() {
|
|
26
|
+
const depth = -1;
|
|
27
|
+
|
|
28
|
+
return depth;
|
|
29
|
+
}
|
|
30
|
+
|
|
19
31
|
static fromNothing() {
|
|
20
32
|
const lexer = nominalLexer, ///
|
|
21
33
|
parser = nominalParser, ///
|