occam-verify-cli 1.0.438 → 1.0.448
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file.js +42 -39
- package/lib/context/local.js +34 -34
- package/lib/context/release.js +3 -7
- package/lib/context/temporary.js +26 -26
- package/lib/element/assertion/contained.js +45 -45
- package/lib/element/assertion/defined.js +13 -13
- package/lib/element/assertion/property.js +23 -22
- package/lib/element/assertion/satisfies.js +7 -6
- package/lib/element/assertion/subproof.js +20 -17
- package/lib/element/assertion/type.js +3 -2
- package/lib/element/assertion.js +1 -23
- package/lib/element/assumption.js +24 -22
- package/lib/element/axiom.js +27 -30
- package/lib/element/axiomLemmaTheoremConjecture.js +50 -57
- package/lib/element/{statement/combinator → combinator}/bracketed.js +16 -16
- package/lib/element/combinator.js +229 -0
- package/lib/element/conclusion.js +11 -9
- package/lib/element/{term/constructor → constructor}/bracketed.js +5 -5
- package/lib/element/constructor.js +232 -0
- package/lib/element/declaration/combinator.js +2 -16
- package/lib/element/declaration/complexType.js +12 -12
- package/lib/element/declaration/constructor.js +13 -11
- package/lib/element/declaration/simpleType.js +4 -4
- package/lib/element/declaration/typePrefix.js +2 -2
- package/lib/element/declaration/variable.js +3 -3
- package/lib/element/deduction.js +11 -9
- package/lib/element/derivation.js +17 -20
- package/lib/element/equivalence.js +10 -10
- package/lib/element/equivalences.js +5 -5
- package/lib/element/frame.js +32 -38
- package/lib/element/hypothesis.js +16 -57
- package/lib/element/judgement.js +6 -4
- package/lib/element/label.js +8 -8
- package/lib/element/metaLemmaMetatheorem.js +6 -39
- package/lib/element/metaType.js +17 -80
- package/lib/element/metavariable.js +38 -34
- package/lib/element/parameter.js +3 -3
- package/lib/element/premise.js +92 -174
- package/lib/element/proof.js +7 -7
- package/lib/element/proofAssertion.js +203 -0
- package/lib/element/property.js +9 -9
- package/lib/element/propertyRelation.js +13 -13
- package/lib/element/reference.js +16 -17
- package/lib/element/rule.js +46 -46
- package/lib/element/signature.js +11 -11
- package/lib/element/statement.js +18 -18
- package/lib/element/step.js +73 -124
- package/lib/element/subDerivation.js +17 -20
- package/lib/element/subproof.js +16 -24
- package/lib/element/substitution/frame.js +1 -7
- package/lib/element/substitution/reference.js +2 -3
- package/lib/element/substitution/statement.js +44 -15
- package/lib/element/substitution/term.js +10 -57
- package/lib/element/substitution.js +5 -11
- package/lib/element/substitutions.js +29 -29
- package/lib/element/supposition.js +95 -177
- package/lib/element/term.js +21 -34
- package/lib/element/type.js +47 -60
- package/lib/element/typePrefix.js +5 -5
- package/lib/element/variable.js +9 -9
- package/lib/element.js +9 -3
- package/lib/metaTypes.js +63 -0
- package/lib/node/axiomLemmaTheoremConjecture.js +9 -9
- package/lib/node/body/axiom.js +2 -25
- package/lib/node/body/conjecture.js +2 -25
- package/lib/node/body/lemma.js +2 -25
- package/lib/node/body/metaLemma.js +2 -25
- package/lib/node/body/metatheorem.js +2 -25
- package/lib/node/body/rule.js +15 -1
- package/lib/node/body/theorem.js +2 -25
- package/lib/node/body.js +25 -2
- package/lib/node/combinator.js +11 -2
- package/lib/node/constructor.js +11 -2
- package/lib/node/declaration/combinator.js +5 -5
- package/lib/node/declaration/constructor.js +8 -8
- package/lib/node/declaration/property.js +15 -15
- package/lib/node/declaration/simpleType.js +31 -31
- package/lib/node/declaration/variable.js +8 -8
- package/lib/node/equality.js +8 -8
- package/lib/node/frame.js +20 -20
- package/lib/node/header.js +22 -22
- package/lib/node/metaLemmaMetaTheorem.js +16 -16
- package/lib/node/metavariable.js +15 -15
- package/lib/node/property.js +8 -8
- package/lib/node/propertyRelation.js +8 -8
- package/lib/node/rule.js +16 -16
- package/lib/node/statement.js +12 -12
- package/lib/node/step.js +22 -22
- package/lib/node/subDerivation.js +1 -8
- package/lib/node/subproof.js +5 -12
- package/lib/node/substitution/frame.js +19 -19
- package/lib/node/substitution/statement.js +19 -19
- package/lib/node/substitution/term.js +19 -19
- package/lib/node/term.js +35 -35
- package/lib/preamble.js +5 -5
- package/lib/process/instantiate.js +20 -2
- package/lib/process/unify.js +39 -42
- package/lib/process/validate.js +431 -0
- package/lib/process/verify.js +44 -135
- package/lib/types.js +27 -0
- package/lib/utilities/brackets.js +9 -14
- package/lib/utilities/element.js +91 -55
- package/lib/utilities/instance.js +41 -28
- package/lib/utilities/statement.js +2 -2
- package/lib/utilities/string.js +25 -14
- package/lib/utilities/unification.js +237 -0
- package/lib/utilities/validation.js +251 -0
- package/package.json +6 -6
- package/src/context/file.js +40 -34
- package/src/context/local.js +34 -34
- package/src/context/release.js +2 -6
- package/src/context/temporary.js +15 -15
- package/src/element/assertion/contained.js +19 -20
- package/src/element/assertion/defined.js +11 -12
- package/src/element/assertion/property.js +20 -20
- package/src/element/assertion/satisfies.js +6 -6
- package/src/element/assertion/subproof.js +17 -15
- package/src/element/assertion/type.js +2 -2
- package/src/element/assertion.js +0 -2
- package/src/element/assumption.js +22 -19
- package/src/element/axiom.js +33 -37
- package/src/element/axiomLemmaTheoremConjecture.js +54 -73
- package/src/element/{statement/combinator → combinator}/bracketed.js +7 -7
- package/src/element/combinator.js +90 -0
- package/src/element/conclusion.js +12 -10
- package/src/element/{term/constructor → constructor}/bracketed.js +5 -5
- package/src/element/{term/constructor.js → constructor.js} +17 -25
- package/src/element/declaration/combinator.js +1 -22
- package/src/element/declaration/complexType.js +11 -11
- package/src/element/declaration/constructor.js +13 -10
- package/src/element/declaration/simpleType.js +3 -3
- package/src/element/declaration/typePrefix.js +1 -1
- package/src/element/declaration/variable.js +2 -2
- package/src/element/deduction.js +12 -9
- package/src/element/derivation.js +15 -19
- package/src/element/equivalence.js +8 -8
- package/src/element/equivalences.js +4 -4
- package/src/element/frame.js +28 -30
- package/src/element/hypothesis.js +16 -18
- package/src/element/judgement.js +6 -3
- package/src/element/label.js +4 -4
- package/src/element/metaLemmaMetatheorem.js +5 -69
- package/src/element/metaType.js +9 -45
- package/src/element/metavariable.js +34 -31
- package/src/element/parameter.js +2 -2
- package/src/element/premise.js +124 -99
- package/src/element/proof.js +6 -6
- package/src/element/proofAssertion.js +76 -0
- package/src/element/property.js +6 -6
- package/src/element/propertyRelation.js +11 -11
- package/src/element/reference.js +14 -21
- package/src/element/rule.js +39 -38
- package/src/element/signature.js +10 -9
- package/src/element/statement.js +16 -18
- package/src/element/step.js +78 -78
- package/src/element/subDerivation.js +15 -19
- package/src/element/subproof.js +11 -19
- package/src/element/substitution/frame.js +0 -2
- package/src/element/substitution/reference.js +1 -5
- package/src/element/substitution/statement.js +44 -14
- package/src/element/substitution/term.js +10 -13
- package/src/element/substitution.js +3 -5
- package/src/element/substitutions.js +48 -30
- package/src/element/supposition.js +127 -108
- package/src/element/term.js +18 -28
- package/src/element/type.js +42 -36
- package/src/element/typePrefix.js +3 -3
- package/src/element/variable.js +7 -7
- package/src/element.js +3 -1
- package/src/metaTypes.js +55 -0
- package/src/node/axiomLemmaTheoremConjecture.js +6 -6
- package/src/node/body/axiom.js +0 -21
- package/src/node/body/conjecture.js +0 -23
- package/src/node/body/lemma.js +0 -23
- package/src/node/body/metaLemma.js +0 -23
- package/src/node/body/metatheorem.js +0 -23
- package/src/node/body/rule.js +12 -0
- package/src/node/body/theorem.js +0 -23
- package/src/node/body.js +23 -0
- package/src/node/combinator.js +9 -0
- package/src/node/constructor.js +9 -0
- package/src/node/declaration/combinator.js +5 -5
- package/src/node/declaration/constructor.js +8 -8
- package/src/node/declaration/property.js +14 -14
- package/src/node/declaration/simpleType.js +31 -31
- package/src/node/declaration/variable.js +7 -7
- package/src/node/equality.js +7 -7
- package/src/node/frame.js +21 -21
- package/src/node/header.js +22 -22
- package/src/node/metaLemmaMetaTheorem.js +14 -14
- package/src/node/metavariable.js +14 -14
- package/src/node/property.js +7 -7
- package/src/node/propertyRelation.js +7 -7
- package/src/node/rule.js +15 -15
- package/src/node/statement.js +12 -12
- package/src/node/step.js +21 -21
- package/src/node/subDerivation.js +0 -7
- package/src/node/subproof.js +4 -11
- package/src/node/substitution/frame.js +18 -18
- package/src/node/substitution/statement.js +18 -18
- package/src/node/substitution/term.js +18 -18
- package/src/node/term.js +34 -34
- package/src/preamble.js +4 -4
- package/src/process/instantiate.js +12 -0
- package/src/process/unify.js +53 -57
- package/src/process/validate.js +316 -0
- package/src/process/verify.js +50 -138
- package/src/types.js +18 -0
- package/src/utilities/brackets.js +15 -14
- package/src/utilities/element.js +125 -82
- package/src/utilities/instance.js +42 -24
- package/src/utilities/statement.js +2 -2
- package/src/utilities/string.js +38 -24
- package/src/{mixins/step/unify.js → utilities/unification.js} +99 -85
- package/src/{mixins/statement/validate.js → utilities/validation.js} +143 -69
- package/lib/element/statement/combinator.js +0 -105
- package/lib/element/term/constructor.js +0 -172
- package/lib/mixins/statement/validate.js +0 -198
- package/lib/mixins/step/unify.js +0 -228
- package/lib/mixins/term/verify.js +0 -65
- package/src/element/statement/combinator.js +0 -59
- package/src/mixins/term/verify.js +0 -81
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nodeQuery } from "../utilities/query";
|
|
4
|
+
import { isLastRemainingArgumentFunction } from "../utilities/pass";
|
|
5
|
+
import { termFromTermNode, statementFromStatementNode } from "../utilities/element";
|
|
6
|
+
|
|
7
|
+
const nonTerminalNodeQuery = nodeQuery("/*");
|
|
8
|
+
|
|
9
|
+
const termNodeQuery = nodeQuery("/term"),
|
|
10
|
+
typeNodeQuery = nodeQuery("/type"),
|
|
11
|
+
statementNodeQuery = nodeQuery("/statement");
|
|
12
|
+
|
|
13
|
+
class Pass {
|
|
14
|
+
run(node, ...remainingArguments) {
|
|
15
|
+
let success;
|
|
16
|
+
|
|
17
|
+
const visited = this.visitNode(node, ...remainingArguments);
|
|
18
|
+
|
|
19
|
+
success = visited; ///
|
|
20
|
+
|
|
21
|
+
return success;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
descend(childNodes, ...remainingArguments) {
|
|
25
|
+
let descended = false;
|
|
26
|
+
|
|
27
|
+
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
28
|
+
|
|
29
|
+
if (lastRemainingArgumentFunction) {
|
|
30
|
+
const index = 0;
|
|
31
|
+
|
|
32
|
+
descended = this.descendAhead(index, childNodes, ...remainingArguments); ///
|
|
33
|
+
} else {
|
|
34
|
+
const visited = childNodes.every((childNode) => {
|
|
35
|
+
const node = childNode, ///
|
|
36
|
+
visited = this.visitNode(node, ...remainingArguments);
|
|
37
|
+
|
|
38
|
+
if (visited) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (visited) {
|
|
44
|
+
descended = true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return descended;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
descendAhead(index, childNodes, ...remainingArguments) {
|
|
52
|
+
let descendedAhead = false;
|
|
53
|
+
|
|
54
|
+
const descendAhead = remainingArguments.pop(), ///
|
|
55
|
+
childNodesLength = childNodes.length;
|
|
56
|
+
|
|
57
|
+
if (index === childNodesLength) {
|
|
58
|
+
descendedAhead = descendAhead();
|
|
59
|
+
} else {
|
|
60
|
+
const childNode = childNodes[index],
|
|
61
|
+
node = childNode, ///
|
|
62
|
+
visited = this.visitNode(node, ...remainingArguments, () => {
|
|
63
|
+
remainingArguments.push(descendAhead);
|
|
64
|
+
|
|
65
|
+
const aheadIndex = index + 1,
|
|
66
|
+
descendedAhead = this.descendAhead(aheadIndex, childNodes, ...remainingArguments);
|
|
67
|
+
|
|
68
|
+
return descendedAhead;
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
if (visited) {
|
|
72
|
+
descendedAhead = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return descendedAhead;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
visitNode(node, ...remainingArguments) {
|
|
80
|
+
let visited;
|
|
81
|
+
|
|
82
|
+
const nodeTerminalNode = node.isTerminalNode();
|
|
83
|
+
|
|
84
|
+
if (nodeTerminalNode) {
|
|
85
|
+
const terminalNode = node; ///
|
|
86
|
+
|
|
87
|
+
visited = this.visitTerminalNode(terminalNode, ...remainingArguments);
|
|
88
|
+
} else {
|
|
89
|
+
const nonTerminalNode = node; ///
|
|
90
|
+
|
|
91
|
+
visited = this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return visited;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
visitTerminalNode(terminalNode, ...remainingArguments) {
|
|
98
|
+
let visited = false;
|
|
99
|
+
|
|
100
|
+
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
101
|
+
|
|
102
|
+
if (lastRemainingArgumentFunction) {
|
|
103
|
+
const descendAhead = remainingArguments.pop(), ///
|
|
104
|
+
descendedAhead = descendAhead();
|
|
105
|
+
|
|
106
|
+
if (descendedAhead) {
|
|
107
|
+
visited = true;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
remainingArguments.push(descendAhead);
|
|
111
|
+
} else {
|
|
112
|
+
visited = true;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return visited;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
visitNonTerminalNode(nonTerminalNode, ...remainingArguments) {
|
|
119
|
+
let visited = false;
|
|
120
|
+
|
|
121
|
+
let { maps } = this.constructor;
|
|
122
|
+
|
|
123
|
+
maps = [ ///
|
|
124
|
+
...maps,
|
|
125
|
+
{
|
|
126
|
+
nodeQuery: nonTerminalNodeQuery,
|
|
127
|
+
run: (node, ...remainingArguments) => {
|
|
128
|
+
let visited = false;
|
|
129
|
+
|
|
130
|
+
const childNodes = nonTerminalNode.getChildNodes(), ///
|
|
131
|
+
descended = this.descend(childNodes, ...remainingArguments);
|
|
132
|
+
|
|
133
|
+
if (descended) {
|
|
134
|
+
visited = true;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return visited;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
|
|
142
|
+
maps.some((map) => {
|
|
143
|
+
const { nodeQuery, run } = map;
|
|
144
|
+
|
|
145
|
+
const node = nodeQuery(nonTerminalNode);
|
|
146
|
+
|
|
147
|
+
if (node !== null) {
|
|
148
|
+
const success = run(node, ...remainingArguments);
|
|
149
|
+
|
|
150
|
+
visited = success;
|
|
151
|
+
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
return visited;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
class TermPass extends Pass {
|
|
161
|
+
run(statementNode, context) {
|
|
162
|
+
let success = false;
|
|
163
|
+
|
|
164
|
+
const nonTerminalNode = statementNode, ///
|
|
165
|
+
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
166
|
+
descended = this.descend(childNodes,context);
|
|
167
|
+
|
|
168
|
+
if (descended) {
|
|
169
|
+
success = true;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return success;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
static maps = [
|
|
176
|
+
{
|
|
177
|
+
nodeQuery: termNodeQuery,
|
|
178
|
+
run: (termNode, context, validateAhead) => {
|
|
179
|
+
let success = false;
|
|
180
|
+
|
|
181
|
+
const term = termFromTermNode(termNode, context),
|
|
182
|
+
termValidates = term.validate(context, validateAhead);
|
|
183
|
+
|
|
184
|
+
if (termValidates) {
|
|
185
|
+
success = true;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return success;
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
nodeQuery: typeNodeQuery,
|
|
193
|
+
run: (typeNode, context, validateAhead) => {
|
|
194
|
+
let success = false;
|
|
195
|
+
|
|
196
|
+
const nominalTypeName = typeNode.getNominalTypeName(),
|
|
197
|
+
typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
|
|
198
|
+
|
|
199
|
+
if (typePresent) {
|
|
200
|
+
const verifiesAhead = validateAhead();
|
|
201
|
+
|
|
202
|
+
if (verifiesAhead) {
|
|
203
|
+
success = true;
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
const typeString = nominalTypeName; ///
|
|
207
|
+
|
|
208
|
+
context.debug(`The '${typeString}' type is not present.`);
|
|
209
|
+
|
|
210
|
+
success = false;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return success;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
class StatementPass extends Pass {
|
|
220
|
+
run(statementNode, context) {
|
|
221
|
+
let success = false;
|
|
222
|
+
|
|
223
|
+
const nonTerminalNode = statementNode, ///
|
|
224
|
+
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
225
|
+
descended = this.descend(childNodes,context);
|
|
226
|
+
|
|
227
|
+
if (descended) {
|
|
228
|
+
success = true;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return success;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
static maps = [
|
|
235
|
+
{
|
|
236
|
+
nodeQuery: statementNodeQuery,
|
|
237
|
+
run: (statementNode, context) => {
|
|
238
|
+
let success = false;
|
|
239
|
+
|
|
240
|
+
const statement = statementFromStatementNode(statementNode, context),
|
|
241
|
+
assignments = null,
|
|
242
|
+
stated = false,
|
|
243
|
+
statementValidates = statement.validate(assignments, stated, context);
|
|
244
|
+
|
|
245
|
+
if (statementValidates) {
|
|
246
|
+
success = true;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return success;
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
nodeQuery: termNodeQuery,
|
|
254
|
+
run: (termNode, context) => {
|
|
255
|
+
let success = false;
|
|
256
|
+
|
|
257
|
+
const term = termFromTermNode(termNode, context),
|
|
258
|
+
termValidates = term.validate(context, () => {
|
|
259
|
+
const verifiesAhead = true;
|
|
260
|
+
|
|
261
|
+
return verifiesAhead;
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
if (termValidates) {
|
|
265
|
+
success = true;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return success;
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
nodeQuery: typeNodeQuery,
|
|
273
|
+
run: (typeNode, context) => {
|
|
274
|
+
let success = false;
|
|
275
|
+
|
|
276
|
+
const nominalTypeName = typeNode.getNominalTypeName(),
|
|
277
|
+
typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
|
|
278
|
+
|
|
279
|
+
if (typePresent) {
|
|
280
|
+
success = true;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return success;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
];
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const termPass = new TermPass(),
|
|
290
|
+
statementPass = new StatementPass();
|
|
291
|
+
|
|
292
|
+
export function validateTerm(termNode, context) {
|
|
293
|
+
let termValidates = false;
|
|
294
|
+
|
|
295
|
+
const node = termNode, ///
|
|
296
|
+
sucess = termPass.run(node, context);
|
|
297
|
+
|
|
298
|
+
if (sucess) {
|
|
299
|
+
termValidates = true;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return termValidates;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export function validateStatement(statementNode, context) {
|
|
306
|
+
let statementValidates = false;
|
|
307
|
+
|
|
308
|
+
const node = statementNode, ///
|
|
309
|
+
sucess = statementPass.run(node, context);
|
|
310
|
+
|
|
311
|
+
if (sucess) {
|
|
312
|
+
statementValidates = true;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
return statementValidates;
|
|
316
|
+
}
|
package/src/process/verify.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { nodeQuery } from "../utilities/query";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
ruleFromRuleNode,
|
|
4
|
+
import { termFromTermNode, statementFromStatementNode } from "../utilities/element";
|
|
5
|
+
import { ruleFromRuleNode,
|
|
7
6
|
errorFromErrorNode,
|
|
8
7
|
axiomFromAxiomNode,
|
|
9
8
|
lemmaFromLemmaNode,
|
|
10
9
|
sectionFromSectionNode,
|
|
11
10
|
theoremFromTheoremNode,
|
|
12
11
|
metaLemmaFromMetaLemmaNode,
|
|
13
|
-
statementFromStatementNode,
|
|
14
12
|
conjectureFromConjectureNode,
|
|
15
13
|
metatheoremFromMetatheoremNode,
|
|
16
14
|
variableDeclarationFromVariableDeclarationNode,
|
|
@@ -21,17 +19,18 @@ import { termFromTermNode,
|
|
|
21
19
|
complexTypeDeclarationFromComplexTypeDeclarationNode,
|
|
22
20
|
metavariableDeclarationFromMetavariableDeclarationNode } from "../utilities/element";
|
|
23
21
|
|
|
24
|
-
const nonTerminalNodeQuery = nodeQuery("/*")
|
|
22
|
+
const nonTerminalNodeQuery = nodeQuery("/*");
|
|
23
|
+
|
|
24
|
+
const ruleNodeQuery = nodeQuery("/rule"),
|
|
25
25
|
termNodeQuery = nodeQuery("/term"),
|
|
26
26
|
typeNodeQuery = nodeQuery("/type"),
|
|
27
|
-
ruleNodeQuery = nodeQuery("/rule"),
|
|
28
27
|
errorNodeQuery = nodeQuery("/error"),
|
|
29
28
|
axiomNodeQuery = nodeQuery("/axiom"),
|
|
30
29
|
lemmaNodeQuery = nodeQuery("/lemma"),
|
|
31
30
|
sectionNodeQuery = nodeQuery("/section"),
|
|
32
31
|
theoremNodeQuery = nodeQuery("/theorem"),
|
|
33
|
-
statementNodeQuery = nodeQuery("/statement"),
|
|
34
32
|
metaLemmaNodeQuery = nodeQuery("/metaLemma"),
|
|
33
|
+
statementNodeQuery = nodeQuery("/statement"),
|
|
35
34
|
conjectureNodeQuery = nodeQuery("/conjecture"),
|
|
36
35
|
metatheoremNodeQuery = nodeQuery("/metatheorem"),
|
|
37
36
|
variableDeclarationNodeQuery = nodeQuery("/variableDeclaration"),
|
|
@@ -42,7 +41,7 @@ const nonTerminalNodeQuery = nodeQuery("/*"),
|
|
|
42
41
|
complexTypeDeclarationNodeQuery = nodeQuery("/complexTypeDeclaration"),
|
|
43
42
|
metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration");
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
class Pass {
|
|
46
45
|
run(node, ...remainingArguments) {
|
|
47
46
|
let success;
|
|
48
47
|
|
|
@@ -54,58 +53,22 @@ export default class Pass {
|
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
descend(childNodes, ...remainingArguments) {
|
|
57
|
-
let
|
|
58
|
-
|
|
59
|
-
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
56
|
+
let descended = false;
|
|
60
57
|
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
descendedAhead = this.descendAhead(index, childNodes, ...remainingArguments); ///
|
|
65
|
-
} else {
|
|
66
|
-
const visited = childNodes.every((childNode) => {
|
|
67
|
-
const node = childNode, ///
|
|
68
|
-
visited = this.visitNode(node, ...remainingArguments);
|
|
69
|
-
|
|
70
|
-
if (visited) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
});
|
|
58
|
+
const visited = childNodes.every((childNode) => {
|
|
59
|
+
const node = childNode, ///
|
|
60
|
+
visited = this.visitNode(node, ...remainingArguments);
|
|
74
61
|
|
|
75
62
|
if (visited) {
|
|
76
|
-
|
|
63
|
+
return true;
|
|
77
64
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return descendedAhead;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
descendAhead(index, childNodes, ...remainingArguments) {
|
|
84
|
-
let descendedAhead = false;
|
|
85
|
-
|
|
86
|
-
const descendAhead = remainingArguments.pop(), ///
|
|
87
|
-
childNodesLength = childNodes.length;
|
|
88
|
-
|
|
89
|
-
if (index === childNodesLength) {
|
|
90
|
-
descendedAhead = descendAhead();
|
|
91
|
-
} else {
|
|
92
|
-
const childNode = childNodes[index],
|
|
93
|
-
node = childNode, ///
|
|
94
|
-
visited = this.visitNode(node, ...remainingArguments, () => {
|
|
95
|
-
remainingArguments.push(descendAhead);
|
|
96
|
-
|
|
97
|
-
const aheadIndex = index + 1,
|
|
98
|
-
descendedAhead = this.descendAhead(aheadIndex, childNodes, ...remainingArguments);
|
|
99
|
-
|
|
100
|
-
return descendedAhead;
|
|
101
|
-
});
|
|
65
|
+
});
|
|
102
66
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
67
|
+
if (visited) {
|
|
68
|
+
descended = true;
|
|
106
69
|
}
|
|
107
70
|
|
|
108
|
-
return
|
|
71
|
+
return descended;
|
|
109
72
|
}
|
|
110
73
|
|
|
111
74
|
visitNode(node, ...remainingArguments) {
|
|
@@ -127,22 +90,7 @@ export default class Pass {
|
|
|
127
90
|
}
|
|
128
91
|
|
|
129
92
|
visitTerminalNode(terminalNode, ...remainingArguments) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
133
|
-
|
|
134
|
-
if (lastRemainingArgumentFunction) {
|
|
135
|
-
const descendAhead = remainingArguments.pop(), ///
|
|
136
|
-
descendedAhead = descendAhead();
|
|
137
|
-
|
|
138
|
-
if (descendedAhead) {
|
|
139
|
-
visited = true;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
remainingArguments.push(descendAhead);
|
|
143
|
-
} else {
|
|
144
|
-
visited = true;
|
|
145
|
-
}
|
|
93
|
+
const visited = true;
|
|
146
94
|
|
|
147
95
|
return visited;
|
|
148
96
|
}
|
|
@@ -434,21 +382,7 @@ class TopLevelPass extends Pass {
|
|
|
434
382
|
];
|
|
435
383
|
}
|
|
436
384
|
|
|
437
|
-
class
|
|
438
|
-
run(statementNode, context) {
|
|
439
|
-
let success = false;
|
|
440
|
-
|
|
441
|
-
const nonTerminalNode = statementNode, ///
|
|
442
|
-
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
443
|
-
descended = this.descend(childNodes,context);
|
|
444
|
-
|
|
445
|
-
if (descended) {
|
|
446
|
-
success = true;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
return success;
|
|
450
|
-
}
|
|
451
|
-
|
|
385
|
+
class ConbinatorPass extends Pass {
|
|
452
386
|
static maps = [
|
|
453
387
|
{
|
|
454
388
|
nodeQuery: statementNodeQuery,
|
|
@@ -458,9 +392,9 @@ class CombinatorPass extends Pass {
|
|
|
458
392
|
const statement = statementFromStatementNode(statementNode, context),
|
|
459
393
|
assignments = null,
|
|
460
394
|
stated = false,
|
|
461
|
-
|
|
395
|
+
statementValidates = statement.validate(assignments, stated, context);
|
|
462
396
|
|
|
463
|
-
if (
|
|
397
|
+
if (statementValidates) {
|
|
464
398
|
success = true;
|
|
465
399
|
}
|
|
466
400
|
|
|
@@ -473,13 +407,13 @@ class CombinatorPass extends Pass {
|
|
|
473
407
|
let success = false;
|
|
474
408
|
|
|
475
409
|
const term = termFromTermNode(termNode, context),
|
|
476
|
-
|
|
410
|
+
termValidates = term.validate(context, () => {
|
|
477
411
|
const verifiesAhead = true;
|
|
478
412
|
|
|
479
413
|
return verifiesAhead;
|
|
480
414
|
});
|
|
481
415
|
|
|
482
|
-
if (
|
|
416
|
+
if (termValidates) {
|
|
483
417
|
success = true;
|
|
484
418
|
}
|
|
485
419
|
|
|
@@ -505,30 +439,20 @@ class CombinatorPass extends Pass {
|
|
|
505
439
|
}
|
|
506
440
|
|
|
507
441
|
class ConstructorPass extends Pass {
|
|
508
|
-
run(statementNode, context) {
|
|
509
|
-
let success = false;
|
|
510
|
-
|
|
511
|
-
const nonTerminalNode = statementNode, ///
|
|
512
|
-
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
513
|
-
descended = this.descend(childNodes,context);
|
|
514
|
-
|
|
515
|
-
if (descended) {
|
|
516
|
-
success = true;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
return success;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
442
|
static maps = [
|
|
523
443
|
{
|
|
524
444
|
nodeQuery: termNodeQuery,
|
|
525
|
-
run: (termNode, context
|
|
445
|
+
run: (termNode, context) => {
|
|
526
446
|
let success = false;
|
|
527
447
|
|
|
528
448
|
const term = termFromTermNode(termNode, context),
|
|
529
|
-
|
|
449
|
+
termValidates = term.validate(context, () => {
|
|
450
|
+
const verifiesAhead = true;
|
|
530
451
|
|
|
531
|
-
|
|
452
|
+
return verifiesAhead;
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
if (termValidates) {
|
|
532
456
|
success = true;
|
|
533
457
|
}
|
|
534
458
|
|
|
@@ -537,24 +461,14 @@ class ConstructorPass extends Pass {
|
|
|
537
461
|
},
|
|
538
462
|
{
|
|
539
463
|
nodeQuery: typeNodeQuery,
|
|
540
|
-
run: (typeNode, context
|
|
464
|
+
run: (typeNode, context) => {
|
|
541
465
|
let success = false;
|
|
542
466
|
|
|
543
467
|
const nominalTypeName = typeNode.getNominalTypeName(),
|
|
544
468
|
typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
|
|
545
469
|
|
|
546
470
|
if (typePresent) {
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
if (verifiesAhead) {
|
|
550
|
-
success = true;
|
|
551
|
-
}
|
|
552
|
-
} else {
|
|
553
|
-
const typeString = nominalTypeName; ///
|
|
554
|
-
|
|
555
|
-
context.debug(`The '${typeString}' type is not present.`);
|
|
556
|
-
|
|
557
|
-
success = false;
|
|
471
|
+
success = true;
|
|
558
472
|
}
|
|
559
473
|
|
|
560
474
|
return success;
|
|
@@ -564,7 +478,7 @@ class ConstructorPass extends Pass {
|
|
|
564
478
|
}
|
|
565
479
|
|
|
566
480
|
const topLevelPass = new TopLevelPass(),
|
|
567
|
-
combinatorPass = new
|
|
481
|
+
combinatorPass = new ConbinatorPass(),
|
|
568
482
|
constructorPass = new ConstructorPass();
|
|
569
483
|
|
|
570
484
|
export function verifyFile(fileNode, context) {
|
|
@@ -580,28 +494,26 @@ export function verifyFile(fileNode, context) {
|
|
|
580
494
|
return fileVerifies;
|
|
581
495
|
}
|
|
582
496
|
|
|
583
|
-
export function
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
497
|
+
export function verifyCombinator(combintot) {
|
|
498
|
+
const context = combintot.getContext(),
|
|
499
|
+
statement = combintot.getStatement(),
|
|
500
|
+
statementNode = statement.getNode(),
|
|
501
|
+
nonTerminalNode = statementNode, ///
|
|
502
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
503
|
+
descended = combinatorPass.descend(childNodes, context),
|
|
504
|
+
combinatorVerifies = descended; ///
|
|
588
505
|
|
|
589
|
-
|
|
590
|
-
termVerifies = true;
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
return termVerifies;
|
|
506
|
+
return combinatorVerifies;
|
|
594
507
|
}
|
|
595
508
|
|
|
596
|
-
export function
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
}
|
|
509
|
+
export function verifyConstrcctor(constructor) {
|
|
510
|
+
const context = constructor.getContext(),
|
|
511
|
+
term = constructor.getStatement(),
|
|
512
|
+
termNode = term.getNode(),
|
|
513
|
+
nonTerminalNode = termNode, ///
|
|
514
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
515
|
+
descended = constructorPass.descend(childNodes, context),
|
|
516
|
+
constrcctorVerifies = descended; ///
|
|
605
517
|
|
|
606
|
-
return
|
|
518
|
+
return constrcctorVerifies;
|
|
607
519
|
}
|
package/src/types.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import elements from "./elements";
|
|
4
|
+
|
|
5
|
+
import { BASE_TYPE_SYMBOL } from "./constants";
|
|
6
|
+
|
|
7
|
+
let baseType = null;
|
|
8
|
+
|
|
9
|
+
export function baseTypeFromNothing() {
|
|
10
|
+
if (baseType === null) {
|
|
11
|
+
const { Type } = elements,
|
|
12
|
+
name = BASE_TYPE_SYMBOL; ///
|
|
13
|
+
|
|
14
|
+
baseType = Type.fromName(name);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return baseType;
|
|
18
|
+
}
|