occam-verify-cli 1.0.220 → 1.0.223
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/local.js +5 -43
- package/lib/dom/assertion/property.js +4 -2
- package/lib/dom/assertion/type.js +4 -2
- package/lib/dom/axiom.js +9 -9
- package/lib/dom/equality.js +21 -6
- package/lib/dom/judgement.js +4 -2
- package/lib/dom/rule.js +13 -5
- package/lib/dom/statement.js +7 -7
- package/lib/dom/step.js +18 -21
- package/lib/dom/subproof.js +12 -15
- package/lib/dom/substitution/term.js +2 -16
- package/lib/dom/substitution.js +1 -8
- package/lib/dom/topLevelAssertion.js +18 -31
- package/lib/dom/topLevelMetaAssertion.js +13 -5
- package/lib/dom/variable.js +3 -3
- package/lib/equivalence.js +54 -33
- package/lib/equivalences.js +57 -101
- package/lib/mixins/step/unify.js +42 -24
- package/lib/unifier/equantional.js +170 -0
- package/lib/utilities/brackets.js +2 -2
- package/lib/utilities/subproof.js +2 -2
- package/lib/utilities/unification.js +1 -11
- package/package.json +1 -1
- package/src/context/local.js +5 -48
- package/src/dom/assertion/property.js +3 -1
- package/src/dom/assertion/type.js +3 -1
- package/src/dom/axiom.js +12 -10
- package/src/dom/equality.js +26 -9
- package/src/dom/judgement.js +3 -1
- package/src/dom/rule.js +20 -5
- package/src/dom/statement.js +5 -5
- package/src/dom/step.js +28 -34
- package/src/dom/subproof.js +15 -25
- package/src/dom/substitution/term.js +1 -19
- package/src/dom/substitution.js +0 -6
- package/src/dom/topLevelAssertion.js +20 -41
- package/src/dom/topLevelMetaAssertion.js +20 -5
- package/src/dom/variable.js +3 -2
- package/src/equivalence.js +69 -46
- package/src/equivalences.js +53 -115
- package/src/mixins/step/unify.js +54 -33
- package/src/unifier/equantional.js +90 -0
- package/src/utilities/brackets.js +1 -1
- package/src/utilities/subproof.js +1 -1
- package/src/utilities/unification.js +0 -14
- package/lib/unifier/equality.js +0 -155
- package/src/unifier/equality.js +0 -70
package/src/equivalences.js
CHANGED
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const { push, compress, separate } = arrayUtilities;
|
|
5
|
+
const { push, separate } = arrayUtilities;
|
|
8
6
|
|
|
9
7
|
export default class Equivalences {
|
|
10
8
|
constructor(array) {
|
|
@@ -27,51 +25,21 @@ export default class Equivalences {
|
|
|
27
25
|
return types;
|
|
28
26
|
}
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
const array = equivalences.getArray();
|
|
32
|
-
|
|
33
|
-
push(this.array, array);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
forEachEquivalence(callback) { this.array.forEach(callback); }
|
|
37
|
-
|
|
38
|
-
separateEquivalences(equivalencesA, equivalencesB, callback) {
|
|
39
|
-
const arrayA = equivalencesA.getArray(),
|
|
40
|
-
arrayB = equivalencesB.getArray();
|
|
41
|
-
|
|
42
|
-
separate(this.array, arrayA, arrayB, callback);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
addEquivalence(equivalence, context) {
|
|
46
|
-
const equivalenceString = equivalence.asString();
|
|
47
|
-
|
|
48
|
-
context.trace(`Added the '${equivalenceString}' equivalence.`);
|
|
49
|
-
|
|
28
|
+
addEquivalence(equivalence) {
|
|
50
29
|
this.array.push(equivalence);
|
|
51
30
|
}
|
|
52
31
|
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
start = index, ///
|
|
56
|
-
deleteCount = 1,
|
|
57
|
-
equivalenceString = equivalence.asString();
|
|
58
|
-
|
|
59
|
-
context.trace(`Removed the '${equivalenceString}' equivalence.`);
|
|
32
|
+
addEquivalences(equivalences) {
|
|
33
|
+
const array = equivalences.getArray();
|
|
60
34
|
|
|
61
|
-
this.array
|
|
35
|
+
push(this.array, array);
|
|
62
36
|
}
|
|
63
37
|
|
|
64
|
-
|
|
65
|
-
const equivalence = this.array.find((equivalence) => {
|
|
66
|
-
const equivalenceMatchesType = equivalence.matchType(type);
|
|
38
|
+
someEquivalence(callback) { return this.array.some(callback); }
|
|
67
39
|
|
|
68
|
-
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
}) || null;
|
|
40
|
+
everyEquivalence(callback) { return this.array.every(callback); }
|
|
72
41
|
|
|
73
|
-
|
|
74
|
-
}
|
|
42
|
+
forEachEquivalence(callback) { this.array.forEach(callback); }
|
|
75
43
|
|
|
76
44
|
findEquivalenceByTerm(term) {
|
|
77
45
|
const equivalence = this.array.find((equivalence) => {
|
|
@@ -97,6 +65,45 @@ export default class Equivalences {
|
|
|
97
65
|
return equivalence;
|
|
98
66
|
}
|
|
99
67
|
|
|
68
|
+
mergedWith(equivalences) {
|
|
69
|
+
let mergedEquivalences = this.clone(); ///
|
|
70
|
+
|
|
71
|
+
equivalences.forEachEquivalence((equivalence) => {
|
|
72
|
+
mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
return mergedEquivalences;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
mergedWithEquivalence(equivalence) {
|
|
79
|
+
const equivalences = Equivalences.fromNothing();
|
|
80
|
+
|
|
81
|
+
let mergedEquivalence = equivalence; ///
|
|
82
|
+
|
|
83
|
+
this.forEachEquivalence((equivalence) => {
|
|
84
|
+
const mergedEquivalenceDisjointFromEquivalence = mergedEquivalence.isDisjointFrom(equivalence);
|
|
85
|
+
|
|
86
|
+
if (mergedEquivalenceDisjointFromEquivalence) {
|
|
87
|
+
equivalences.addEquivalence(equivalence);
|
|
88
|
+
} else {
|
|
89
|
+
mergedEquivalence = mergedEquivalence.mergedWith(equivalence);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
equivalence = mergedEquivalence; ///
|
|
94
|
+
|
|
95
|
+
equivalences.addEquivalence(equivalence);
|
|
96
|
+
|
|
97
|
+
return equivalences;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
separateEquivalences(equivalencesA, equivalencesB, callback) {
|
|
101
|
+
const equivalencesAArray = equivalencesA.getArray(),
|
|
102
|
+
equivalencesBArray = equivalencesB.getArray();
|
|
103
|
+
|
|
104
|
+
separate(this.array, equivalencesAArray, equivalencesBArray, callback);
|
|
105
|
+
}
|
|
106
|
+
|
|
100
107
|
separateInitiallyGroundedEquivalences(remainingEquivalences, initiallyGroundedEquivalences, context) {
|
|
101
108
|
this.separateEquivalences(remainingEquivalences, initiallyGroundedEquivalences, (equivalence) => {
|
|
102
109
|
const equivalenceInitiallyGrounded = equivalence.isInitiallyGrounded(context);
|
|
@@ -159,48 +166,18 @@ export default class Equivalences {
|
|
|
159
166
|
|
|
160
167
|
equivalences.separateImplicitlyGroundedEquivalences(remainingEquivalences, implicitlyGroundedEquivalences, definedVariables, context);
|
|
161
168
|
|
|
162
|
-
groundedEquivalences.
|
|
169
|
+
groundedEquivalences.addEquivalences(implicitlyGroundedEquivalences);
|
|
163
170
|
|
|
164
171
|
implicitlyGroundedEquivalencesLength = implicitlyGroundedEquivalences.getLength(); ///
|
|
165
172
|
}
|
|
166
173
|
}
|
|
167
174
|
}
|
|
168
175
|
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
return substitutionsUnified;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
unifySubstitution(substitution) {
|
|
182
|
-
const substitutionUnified = this.array.some((equivalence) => {
|
|
183
|
-
const substitutionUnifiedWithEquivalence = substitution.unifyWithEquivalence(equivalence);
|
|
184
|
-
|
|
185
|
-
if (substitutionUnifiedWithEquivalence) {
|
|
186
|
-
return true;
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
return substitutionUnified;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
mergedWith(equivalences) {
|
|
194
|
-
const equivalencesA = this, ///
|
|
195
|
-
equivalencesB = equivalences;
|
|
196
|
-
|
|
197
|
-
equivalences = mergeEquivalences(equivalencesA, equivalencesB); ///
|
|
198
|
-
|
|
199
|
-
return equivalences;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
static fromArray(array) {
|
|
203
|
-
const equivalences = new Equivalences(array);
|
|
176
|
+
clone() {
|
|
177
|
+
const array = [
|
|
178
|
+
...this.array
|
|
179
|
+
],
|
|
180
|
+
equivalences = new Equivalences(array);
|
|
204
181
|
|
|
205
182
|
return equivalences;
|
|
206
183
|
}
|
|
@@ -213,45 +190,6 @@ export default class Equivalences {
|
|
|
213
190
|
}
|
|
214
191
|
}
|
|
215
192
|
|
|
216
|
-
function mergeEquivalences(equivalencesA, equivalencesB) {
|
|
217
|
-
const typesA = equivalencesA.getTypes(),
|
|
218
|
-
typesB = equivalencesB.getTypes(),
|
|
219
|
-
types = [
|
|
220
|
-
...typesA,
|
|
221
|
-
...typesB
|
|
222
|
-
];
|
|
223
|
-
|
|
224
|
-
compress(types, (typeA, typeB) => {
|
|
225
|
-
if (typeA === typeB) {
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
const array = types.map((type) => {
|
|
231
|
-
let equivalence;
|
|
232
|
-
|
|
233
|
-
const equivalenceA = equivalencesA.findEquivalenceByType(type), ///
|
|
234
|
-
equivalenceB = equivalencesB.findEquivalenceByType(type); ///
|
|
235
|
-
|
|
236
|
-
if ((equivalenceA !== null) && (equivalenceB !== null)) {
|
|
237
|
-
const leftEquivalence = equivalenceA, ///
|
|
238
|
-
rightEquivalence = equivalenceB; ///
|
|
239
|
-
|
|
240
|
-
equivalence = Equivalence.merge(leftEquivalence, rightEquivalence);
|
|
241
|
-
} else if (equivalenceA !== null) {
|
|
242
|
-
equivalence = equivalenceA; ///
|
|
243
|
-
} else if (equivalenceB !== null) {
|
|
244
|
-
equivalence = equivalenceB; ///
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
return equivalence;
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
const equivalences = Equivalences.fromArray(array);
|
|
251
|
-
|
|
252
|
-
return equivalences;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
193
|
function definedVariablesFromGroundedTerms(groundedTerms, definedVariables, context) {
|
|
256
194
|
const terms = groundedTerms, ///
|
|
257
195
|
variables = definedVariables; ///
|
package/src/mixins/step/unify.js
CHANGED
|
@@ -28,7 +28,9 @@ function unifyWithRule(statement, reference, substitutions, context) {
|
|
|
28
28
|
const stepsOrSubproofs = context.getStepsOrSubproofs(),
|
|
29
29
|
statementAndStepsUnified = rule.unifyStatementAndStepsOrSubproofs(statement, stepsOrSubproofs, context);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
if (statementAndStepsUnified) {
|
|
32
|
+
unifiedWithRule = true;
|
|
33
|
+
}
|
|
32
34
|
|
|
33
35
|
if (unifiedWithRule) {
|
|
34
36
|
context.debug(`...unified the '${statementString}' statement with the '${ruleString}' rule.`);
|
|
@@ -110,7 +112,9 @@ function unifyAsSatisfiesAssertion(statement, reference, substitutions, context)
|
|
|
110
112
|
if (axiomLemmaTheoremConjectureUnified) {
|
|
111
113
|
const substitutionsMatch = satisfiesAssertion.matchSubstitutions(substitutions, context);
|
|
112
114
|
|
|
113
|
-
|
|
115
|
+
if (substitutionsMatch) {
|
|
116
|
+
unifiedAsSatisfiesAssertion = true;
|
|
117
|
+
}
|
|
114
118
|
}
|
|
115
119
|
}
|
|
116
120
|
}
|
|
@@ -166,8 +170,8 @@ function unifyWithAxiomLemmaTheoremOrConjecture(statement, reference, substituti
|
|
|
166
170
|
return unifiedWithAxiomLemmaTheoremOrConjecture;
|
|
167
171
|
}
|
|
168
172
|
|
|
169
|
-
function
|
|
170
|
-
let
|
|
173
|
+
function unifyAEquality(statement, reference, substitutions, context) {
|
|
174
|
+
let unifiedAEquality = false;
|
|
171
175
|
|
|
172
176
|
if (reference === null) {
|
|
173
177
|
const equality = equalityFromStatement(statement, context);
|
|
@@ -177,13 +181,19 @@ function unifyAsEquality(statement, reference, substitutions, context) {
|
|
|
177
181
|
|
|
178
182
|
context.trace(`Unifying the '${statementString}' statement as an equality...`);
|
|
179
183
|
|
|
180
|
-
|
|
184
|
+
const equalityEqual = equality.isEqual(context);
|
|
185
|
+
|
|
186
|
+
if (equalityEqual) {
|
|
187
|
+
unifiedAEquality = true;
|
|
188
|
+
}
|
|
181
189
|
|
|
182
|
-
|
|
190
|
+
if (unifiedAEquality) {
|
|
191
|
+
context.debug(`...unified the '${statementString}' statement as an equality.`);
|
|
192
|
+
}
|
|
183
193
|
}
|
|
184
194
|
}
|
|
185
195
|
|
|
186
|
-
return
|
|
196
|
+
return unifiedAEquality;
|
|
187
197
|
}
|
|
188
198
|
|
|
189
199
|
function unifyAsJudgement(statement, reference, substitutions, context) {
|
|
@@ -199,7 +209,9 @@ function unifyAsJudgement(statement, reference, substitutions, context) {
|
|
|
199
209
|
|
|
200
210
|
unifiedAsJudgement = true;
|
|
201
211
|
|
|
202
|
-
|
|
212
|
+
if (unifiedAsJudgement) {
|
|
213
|
+
context.debug(`...unified the '${statementString}' statement as a judgement.`);
|
|
214
|
+
}
|
|
203
215
|
}
|
|
204
216
|
}
|
|
205
217
|
|
|
@@ -241,7 +253,7 @@ function unifyAsPropertyAssertion(statement, reference, substitutions, context)
|
|
|
241
253
|
equivalence = context.findEquivalenceByTerm(term);
|
|
242
254
|
|
|
243
255
|
if (equivalence !== null) {
|
|
244
|
-
|
|
256
|
+
const propertyAssertionMatches = equivalence.someOtherTerm(term, (term) => { ///
|
|
245
257
|
const propertyRelation = propertyAssertion.getPropertyRelation(),
|
|
246
258
|
propertyAssertionMatches = context.matchTermAndPropertyRelation(term, propertyRelation);
|
|
247
259
|
|
|
@@ -249,6 +261,10 @@ function unifyAsPropertyAssertion(statement, reference, substitutions, context)
|
|
|
249
261
|
return true;
|
|
250
262
|
}
|
|
251
263
|
});
|
|
264
|
+
|
|
265
|
+
if (propertyAssertionMatches) {
|
|
266
|
+
unifiedAsPropertyAssertion = true;
|
|
267
|
+
}
|
|
252
268
|
}
|
|
253
269
|
|
|
254
270
|
if (unifiedAsPropertyAssertion) {
|
|
@@ -260,21 +276,8 @@ function unifyAsPropertyAssertion(statement, reference, substitutions, context)
|
|
|
260
276
|
return unifiedAsPropertyAssertion;
|
|
261
277
|
}
|
|
262
278
|
|
|
263
|
-
function unifyWithStepsOrSubproofs(statement, reference, substitutions, context) {
|
|
264
|
-
let unifiedWithStepOrSubproofs = false;
|
|
265
|
-
|
|
266
|
-
if (reference === null) {
|
|
267
|
-
const stepsOrSubproofs = context.getStepsOrSubproofs(),
|
|
268
|
-
statementUnifiedWithSteps = statement.unifyWithStepsOrSubproofs(stepsOrSubproofs, context);
|
|
269
|
-
|
|
270
|
-
unifiedWithStepOrSubproofs = statementUnifiedWithSteps; ///
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return unifiedWithStepOrSubproofs;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
279
|
function unifyWithSatisfiesAssertion(statement, reference, substitutions, context) {
|
|
277
|
-
let unifiedWithSatisfiesAssertion;
|
|
280
|
+
let unifiedWithSatisfiesAssertion = false;
|
|
278
281
|
|
|
279
282
|
const stepsOrSubproofs = context.getStepsOrSubproofs(),
|
|
280
283
|
satisfiesAssertions = stepsOrSubproofs.reduce((satisfiesAssertions, stepOrSubproof) => {
|
|
@@ -293,30 +296,48 @@ function unifyWithSatisfiesAssertion(statement, reference, substitutions, contex
|
|
|
293
296
|
}
|
|
294
297
|
|
|
295
298
|
return satisfiesAssertions;
|
|
296
|
-
}, [])
|
|
299
|
+
}, []),
|
|
300
|
+
statementUnified = backwardsSome(satisfiesAssertions, (satisfiesAssertion) => {
|
|
301
|
+
const statementUnified = satisfiesAssertion.unifyStatementAndStepsOrSubproofs(statement, stepsOrSubproofs, context);
|
|
297
302
|
|
|
298
|
-
|
|
299
|
-
|
|
303
|
+
if (statementUnified) {
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
300
307
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
});
|
|
308
|
+
if (statementUnified) {
|
|
309
|
+
unifiedWithSatisfiesAssertion = true;
|
|
310
|
+
}
|
|
305
311
|
|
|
306
312
|
return unifiedWithSatisfiesAssertion;
|
|
307
313
|
}
|
|
308
314
|
|
|
315
|
+
function equateWithStepsOrSubproofs(statement, reference, substitutions, context) {
|
|
316
|
+
let unifiedWithStepOrSubproofs = false;
|
|
317
|
+
|
|
318
|
+
if (reference === null) {
|
|
319
|
+
const stepsOrSubproofs = context.getStepsOrSubproofs(),
|
|
320
|
+
statementUnifiedWithSteps = statement.equateWithStepsOrSubproofs(stepsOrSubproofs, context);
|
|
321
|
+
|
|
322
|
+
if (statementUnifiedWithSteps) {
|
|
323
|
+
unifiedWithStepOrSubproofs = true;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return unifiedWithStepOrSubproofs;
|
|
328
|
+
}
|
|
329
|
+
|
|
309
330
|
const unifyMixins = [
|
|
310
331
|
unifyWithRule,
|
|
311
332
|
unifyWithReference,
|
|
312
333
|
unifyAsSatisfiesAssertion,
|
|
313
334
|
unifyWithAxiomLemmaTheoremOrConjecture,
|
|
314
|
-
|
|
335
|
+
unifyAEquality,
|
|
315
336
|
unifyAsJudgement,
|
|
316
337
|
unifyAsTypeAssertion,
|
|
317
338
|
unifyAsPropertyAssertion,
|
|
318
|
-
|
|
319
|
-
|
|
339
|
+
unifyWithSatisfiesAssertion,
|
|
340
|
+
equateWithStepsOrSubproofs
|
|
320
341
|
];
|
|
321
342
|
|
|
322
343
|
export default unifyMixins;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Unifier from "../unifier";
|
|
4
|
+
|
|
5
|
+
import { nodeQuery } from "../utilities/query";
|
|
6
|
+
|
|
7
|
+
const termNodeQuery = nodeQuery("/term");
|
|
8
|
+
|
|
9
|
+
class EquationalUnifier extends Unifier {
|
|
10
|
+
equateTerms(leftTermNode, rightTermNode, context) {
|
|
11
|
+
let termsEquated;
|
|
12
|
+
|
|
13
|
+
const generalNonTerminalNode = leftTermNode, ///
|
|
14
|
+
specificNonTerminalNode = rightTermNode, ///
|
|
15
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, context);
|
|
16
|
+
|
|
17
|
+
termsEquated = nonTerminalNodeUnified; ///
|
|
18
|
+
|
|
19
|
+
return termsEquated;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
equateStatements(statementANode, statementBNode, context) {
|
|
23
|
+
let statementsEquated;
|
|
24
|
+
|
|
25
|
+
const generalNonTerminalNode = statementANode, ///
|
|
26
|
+
specificNonTerminalNode = statementBNode, ///
|
|
27
|
+
nonTerminalNodeUnified = this.unifyNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, context);
|
|
28
|
+
|
|
29
|
+
statementsEquated = nonTerminalNodeUnified; ///
|
|
30
|
+
|
|
31
|
+
return statementsEquated;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
static maps = [
|
|
35
|
+
{
|
|
36
|
+
generalNodeQuery: termNodeQuery, ///
|
|
37
|
+
specificNodeQuery: termNodeQuery, ///
|
|
38
|
+
unify: (leftTermNode, rightTermNode, context) => {
|
|
39
|
+
let termUnified = false;
|
|
40
|
+
|
|
41
|
+
if (!termUnified) {
|
|
42
|
+
const depth = Infinity,
|
|
43
|
+
leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
|
|
44
|
+
|
|
45
|
+
if (leftTermNodeMatchesRightTermNode) {
|
|
46
|
+
termUnified = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!termUnified) {
|
|
51
|
+
const equivalences = context.getEquivalences(),
|
|
52
|
+
termNodes = [
|
|
53
|
+
leftTermNode,
|
|
54
|
+
rightTermNode
|
|
55
|
+
],
|
|
56
|
+
equivalence = equivalences.findEquivalenceByTermNodes(termNodes);
|
|
57
|
+
|
|
58
|
+
if (equivalence !== null) {
|
|
59
|
+
termUnified = true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!termUnified) {
|
|
64
|
+
const depth = 1,
|
|
65
|
+
leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
|
|
66
|
+
|
|
67
|
+
if (leftTermNodeMatchesRightTermNode) {
|
|
68
|
+
const leftNonTerminalNode = leftTermNode, ///
|
|
69
|
+
rightNonTerminalNode = rightTermNode, ///
|
|
70
|
+
leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
|
|
71
|
+
rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
|
|
72
|
+
leftChildNodes = leftNonTerminalNodeChildNodes, ///
|
|
73
|
+
rightChildNodes = rightNonTerminalNodeChildNodes, ///
|
|
74
|
+
childNodesUnified = equationalUnifier.unifyChildNodes(leftChildNodes, rightChildNodes, context);
|
|
75
|
+
|
|
76
|
+
if (childNodesUnified) {
|
|
77
|
+
termUnified = true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return termUnified;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const equationalUnifier = new EquationalUnifier();
|
|
89
|
+
|
|
90
|
+
export default equationalUnifier;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
export function subproofStringFromSubproofNode(subproofNode, fileContext) {
|
|
4
4
|
const suppositionStatementsOrNonsenseString = suppositionStatementOrNonsenseStringFromSubproofNode(subproofNode, fileContext),
|
|
5
5
|
lastStatementOrNonsenseString = lastStatementOrNonsenseStringFromSubproofNode(subproofNode, fileContext),
|
|
6
|
-
subproofString = `[${suppositionStatementsOrNonsenseString}]
|
|
6
|
+
subproofString = `[${suppositionStatementsOrNonsenseString}] ... ${lastStatementOrNonsenseString}`;
|
|
7
7
|
|
|
8
8
|
return subproofString;
|
|
9
9
|
}
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
"use string";
|
|
2
2
|
|
|
3
3
|
import LocalContext from "../context/local";
|
|
4
|
-
import equalityUnifier from "../unifier/equality";
|
|
5
4
|
import metaLevelUnifier from "../unifier/metaLevel";
|
|
6
5
|
import metavariableUnifier from "../unifier/metavariable";
|
|
7
6
|
import intrinsicLevelUnifier from "../unifier/intrinsicLevel";
|
|
8
7
|
import termWithConstructorUnifier from "../unifier/termWithConstructor";
|
|
9
8
|
import statementWithCombinatorUnifier from "../unifier/statementWithCombinator";
|
|
10
9
|
|
|
11
|
-
export function unifyEquality(equality, context) {
|
|
12
|
-
let equalityUnified;
|
|
13
|
-
|
|
14
|
-
const leftTerm = equality.getLeftTerm(),
|
|
15
|
-
rightTerm = equality.getRightTerm(),
|
|
16
|
-
leftTermNode = leftTerm.getNode(),
|
|
17
|
-
rightTermNode = rightTerm.getNode();
|
|
18
|
-
|
|
19
|
-
equalityUnified = equalityUnifier.unify(leftTermNode, rightTermNode, context);
|
|
20
|
-
|
|
21
|
-
return equalityUnified;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
10
|
export function unifyStatement(generalStatement, specificStatement, substitutions, generalContext, specificContext) {
|
|
25
11
|
let statementUnified;
|
|
26
12
|
|
package/lib/unifier/equality.js
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _unifier = /*#__PURE__*/ _interop_require_default(require("../unifier"));
|
|
12
|
-
var _query = require("../utilities/query");
|
|
13
|
-
function _assert_this_initialized(self) {
|
|
14
|
-
if (self === void 0) {
|
|
15
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
16
|
-
}
|
|
17
|
-
return self;
|
|
18
|
-
}
|
|
19
|
-
function _call_super(_this, derived, args) {
|
|
20
|
-
derived = _get_prototype_of(derived);
|
|
21
|
-
return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
|
|
22
|
-
}
|
|
23
|
-
function _class_call_check(instance, Constructor) {
|
|
24
|
-
if (!(instance instanceof Constructor)) {
|
|
25
|
-
throw new TypeError("Cannot call a class as a function");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function _defineProperties(target, props) {
|
|
29
|
-
for(var i = 0; i < props.length; i++){
|
|
30
|
-
var descriptor = props[i];
|
|
31
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
32
|
-
descriptor.configurable = true;
|
|
33
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
34
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
38
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
39
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
40
|
-
return Constructor;
|
|
41
|
-
}
|
|
42
|
-
function _define_property(obj, key, value) {
|
|
43
|
-
if (key in obj) {
|
|
44
|
-
Object.defineProperty(obj, key, {
|
|
45
|
-
value: value,
|
|
46
|
-
enumerable: true,
|
|
47
|
-
configurable: true,
|
|
48
|
-
writable: true
|
|
49
|
-
});
|
|
50
|
-
} else {
|
|
51
|
-
obj[key] = value;
|
|
52
|
-
}
|
|
53
|
-
return obj;
|
|
54
|
-
}
|
|
55
|
-
function _get_prototype_of(o) {
|
|
56
|
-
_get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
|
|
57
|
-
return o.__proto__ || Object.getPrototypeOf(o);
|
|
58
|
-
};
|
|
59
|
-
return _get_prototype_of(o);
|
|
60
|
-
}
|
|
61
|
-
function _inherits(subClass, superClass) {
|
|
62
|
-
if (typeof superClass !== "function" && superClass !== null) {
|
|
63
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
64
|
-
}
|
|
65
|
-
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
66
|
-
constructor: {
|
|
67
|
-
value: subClass,
|
|
68
|
-
writable: true,
|
|
69
|
-
configurable: true
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
if (superClass) _set_prototype_of(subClass, superClass);
|
|
73
|
-
}
|
|
74
|
-
function _interop_require_default(obj) {
|
|
75
|
-
return obj && obj.__esModule ? obj : {
|
|
76
|
-
default: obj
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
function _possible_constructor_return(self, call) {
|
|
80
|
-
if (call && (_type_of(call) === "object" || typeof call === "function")) {
|
|
81
|
-
return call;
|
|
82
|
-
}
|
|
83
|
-
return _assert_this_initialized(self);
|
|
84
|
-
}
|
|
85
|
-
function _set_prototype_of(o, p) {
|
|
86
|
-
_set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
|
|
87
|
-
o.__proto__ = p;
|
|
88
|
-
return o;
|
|
89
|
-
};
|
|
90
|
-
return _set_prototype_of(o, p);
|
|
91
|
-
}
|
|
92
|
-
function _type_of(obj) {
|
|
93
|
-
"@swc/helpers - typeof";
|
|
94
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
95
|
-
}
|
|
96
|
-
function _is_native_reflect_construct() {
|
|
97
|
-
try {
|
|
98
|
-
var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
|
|
99
|
-
} catch (_) {}
|
|
100
|
-
return (_is_native_reflect_construct = function() {
|
|
101
|
-
return !!result;
|
|
102
|
-
})();
|
|
103
|
-
}
|
|
104
|
-
var termNodeQuery = (0, _query.nodeQuery)("/term");
|
|
105
|
-
var EqualityUnifier = /*#__PURE__*/ function(Unifier) {
|
|
106
|
-
_inherits(EqualityUnifier, Unifier);
|
|
107
|
-
function EqualityUnifier() {
|
|
108
|
-
_class_call_check(this, EqualityUnifier);
|
|
109
|
-
return _call_super(this, EqualityUnifier, arguments);
|
|
110
|
-
}
|
|
111
|
-
_create_class(EqualityUnifier, [
|
|
112
|
-
{
|
|
113
|
-
key: "unify",
|
|
114
|
-
value: function unify(leftTermNode, rightTermNode, context) {
|
|
115
|
-
var equalityUnified;
|
|
116
|
-
var leftNonTerminalNode = leftTermNode, rightNonTerminalNode = rightTermNode, nonTerminalNodeUnified = this.unifyNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, context);
|
|
117
|
-
equalityUnified = nonTerminalNodeUnified; ///
|
|
118
|
-
return equalityUnified;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
]);
|
|
122
|
-
return EqualityUnifier;
|
|
123
|
-
}(_unifier.default);
|
|
124
|
-
_define_property(EqualityUnifier, "maps", [
|
|
125
|
-
{
|
|
126
|
-
generalNodeQuery: termNodeQuery,
|
|
127
|
-
specificNodeQuery: termNodeQuery,
|
|
128
|
-
unify: function(leftTermNode, rightTermNode, context) {
|
|
129
|
-
var termUnifiedWithTerm;
|
|
130
|
-
var leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode);
|
|
131
|
-
if (leftTermNodeMatchesRightTermNode) {
|
|
132
|
-
termUnifiedWithTerm = true;
|
|
133
|
-
} else {
|
|
134
|
-
var equivalences = context.getEquivalences(), termNodes = [
|
|
135
|
-
leftTermNode,
|
|
136
|
-
rightTermNode
|
|
137
|
-
], equivalence = equivalences.findEquivalenceByTermNodes(termNodes);
|
|
138
|
-
termUnifiedWithTerm = equivalence !== null;
|
|
139
|
-
}
|
|
140
|
-
if (!termUnifiedWithTerm) {
|
|
141
|
-
var childNodesUnified = unifyChildNodes(leftTermNode, rightTermNode, context);
|
|
142
|
-
termUnifiedWithTerm = childNodesUnified; ///
|
|
143
|
-
}
|
|
144
|
-
return termUnifiedWithTerm;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
]);
|
|
148
|
-
var equalityUnifier = new EqualityUnifier();
|
|
149
|
-
var _default = equalityUnifier;
|
|
150
|
-
function unifyChildNodes(leftTermNode, rightTermNode, context) {
|
|
151
|
-
var leftNonTerminalNode = leftTermNode, rightNonTerminalNode = rightTermNode, leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftChildNodes = leftNonTerminalNodeChildNodes, rightChildNodes = rightNonTerminalNodeChildNodes, childNodesUnified = equalityUnifier.unifyChildNodes(leftChildNodes, rightChildNodes, context);
|
|
152
|
-
return childNodesUnified;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bmlmaWVyL2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVW5pZmllciBmcm9tIFwiLi4vdW5pZmllclwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybVwiKTtcblxuY2xhc3MgRXF1YWxpdHlVbmlmaWVyIGV4dGVuZHMgVW5pZmllciB7XG4gIHVuaWZ5KGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkge1xuICAgIGxldCBlcXVhbGl0eVVuaWZpZWQ7XG5cbiAgICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlID0gbGVmdFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICByaWdodE5vblRlcm1pbmFsTm9kZSA9IHJpZ2h0VGVybU5vZGUsIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVVuaWZpZWQgPSB0aGlzLnVuaWZ5Tm9uVGVybWluYWxOb2RlKGxlZnROb25UZXJtaW5hbE5vZGUsIHJpZ2h0Tm9uVGVybWluYWxOb2RlLCBjb250ZXh0KTtcblxuICAgIGVxdWFsaXR5VW5pZmllZCA9IG5vblRlcm1pbmFsTm9kZVVuaWZpZWQ7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5VW5pZmllZDtcbiAgfTtcblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LCAgLy8vXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSwgLy8vXG4gICAgICB1bmlmeTogKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdGVybVVuaWZpZWRXaXRoVGVybTtcblxuICAgICAgICBjb25zdCBsZWZ0VGVybU5vZGVNYXRjaGVzUmlnaHRUZXJtTm9kZSA9IGxlZnRUZXJtTm9kZS5tYXRjaChyaWdodFRlcm1Ob2RlKTtcblxuICAgICAgICBpZiAobGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUpIHtcbiAgICAgICAgICB0ZXJtVW5pZmllZFdpdGhUZXJtID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgICAgICAgIHRlcm1Ob2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgIGxlZnRUZXJtTm9kZSxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0VGVybU5vZGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGVxdWl2YWxlbmNlID0gZXF1aXZhbGVuY2VzLmZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGVzKHRlcm1Ob2Rlcyk7XG5cbiAgICAgICAgICB0ZXJtVW5pZmllZFdpdGhUZXJtID0gKGVxdWl2YWxlbmNlICE9PSBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGVybVVuaWZpZWRXaXRoVGVybSkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXNVbmlmaWVkID0gdW5pZnlDaGlsZE5vZGVzKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICB0ZXJtVW5pZmllZFdpdGhUZXJtID0gY2hpbGROb2Rlc1VuaWZpZWQ7IC8vL1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRlcm1VbmlmaWVkV2l0aFRlcm07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBlcXVhbGl0eVVuaWZpZXIgPSBuZXcgRXF1YWxpdHlVbmlmaWVyKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGVxdWFsaXR5VW5pZmllcjtcblxuZnVuY3Rpb24gdW5pZnlDaGlsZE5vZGVzKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlID0gbGVmdFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGUgPSByaWdodFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgbGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBsZWZ0Tm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBsZWZ0Q2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgcmlnaHRDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgY2hpbGROb2Rlc1VuaWZpZWQgPSBlcXVhbGl0eVVuaWZpZXIudW5pZnlDaGlsZE5vZGVzKGxlZnRDaGlsZE5vZGVzLCByaWdodENoaWxkTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjaGlsZE5vZGVzVW5pZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ0ZXJtTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiRXF1YWxpdHlVbmlmaWVyIiwidW5pZnkiLCJsZWZ0VGVybU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiY29udGV4dCIsImVxdWFsaXR5VW5pZmllZCIsImxlZnROb25UZXJtaW5hbE5vZGUiLCJyaWdodE5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZVVuaWZpZWQiLCJ1bmlmeU5vblRlcm1pbmFsTm9kZSIsIlVuaWZpZXIiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwidGVybVVuaWZpZWRXaXRoVGVybSIsImxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJlcXVpdmFsZW5jZXMiLCJnZXRFcXVpdmFsZW5jZXMiLCJ0ZXJtTm9kZXMiLCJlcXVpdmFsZW5jZSIsImZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGVzIiwiY2hpbGROb2Rlc1VuaWZpZWQiLCJ1bmlmeUNoaWxkTm9kZXMiLCJlcXVhbGl0eVVuaWZpZXIiLCJsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJyaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJsZWZ0Q2hpbGROb2RlcyIsInJpZ2h0Q2hpbGROb2RlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBeURBOzs7ZUFBQTs7OzhEQXZEb0I7cUJBRU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTFCLElBQU1BLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQztBQUVoQyxJQUFBLEFBQU1DLGdDQUFOO2NBQU1BO2FBQUFBO2dDQUFBQTtRQUFOLE9BQUEsa0JBQU1BOztrQkFBQUE7O1lBQ0pDLEtBQUFBO21CQUFBQSxTQUFBQSxNQUFNQyxZQUFZLEVBQUVDLGFBQWEsRUFBRUMsT0FBTztnQkFDeEMsSUFBSUM7Z0JBRUosSUFBTUMsc0JBQXNCSixjQUN0QkssdUJBQXVCSixlQUN2QksseUJBQXlCLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNILHFCQUFxQkMsc0JBQXNCSDtnQkFFcEdDLGtCQUFrQkcsd0JBQXdCLEdBQUc7Z0JBRTdDLE9BQU9IO1lBQ1Q7OztXQVhJTDtFQUF3QlUsZ0JBQU87QUFhbkMsaUJBYklWLGlCQWFHVyxRQUFPO0lBQ1o7UUFDRUMsa0JBQWtCZDtRQUNsQmUsbUJBQW1CZjtRQUNuQkcsT0FBTyxTQUFDQyxjQUFjQyxlQUFlQztZQUNuQyxJQUFJVTtZQUVKLElBQU1DLG1DQUFtQ2IsYUFBYWMsS0FBSyxDQUFDYjtZQUU1RCxJQUFJWSxrQ0FBa0M7Z0JBQ3BDRCxzQkFBc0I7WUFDeEIsT0FBTztnQkFDTCxJQUFNRyxlQUFlYixRQUFRYyxlQUFlLElBQ3RDQyxZQUFZO29CQUNWakI7b0JBQ0FDO2lCQUNELEVBQ0RpQixjQUFjSCxhQUFhSSwwQkFBMEIsQ0FBQ0Y7Z0JBRTVETCxzQkFBdUJNLGdCQUFnQjtZQUN6QztZQUVBLElBQUksQ0FBQ04scUJBQXFCO2dCQUN4QixJQUFNUSxvQkFBb0JDLGdCQUFnQnJCLGNBQWNDLGVBQWVDO2dCQUV2RVUsc0JBQXNCUSxtQkFBbUIsR0FBRztZQUM5QztZQUVBLE9BQU9SO1FBQ1Q7SUFDRjtDQUNEO0FBR0gsSUFBTVUsa0JBQWtCLElBQUl4QjtJQUU1QixXQUFld0I7QUFFZixTQUFTRCxnQkFBZ0JyQixZQUFZLEVBQUVDLGFBQWEsRUFBRUMsT0FBTztJQUMzRCxJQUFNRSxzQkFBc0JKLGNBQ3RCSyx1QkFBdUJKLGVBQ3ZCc0IsZ0NBQWdDbkIsb0JBQW9Cb0IsYUFBYSxJQUNqRUMsaUNBQWlDcEIscUJBQXFCbUIsYUFBYSxJQUNuRUUsaUJBQWlCSCwrQkFDakJJLGtCQUFrQkYsZ0NBQ2xCTCxvQkFBb0JFLGdCQUFnQkQsZUFBZSxDQUFDSyxnQkFBZ0JDLGlCQUFpQnpCO0lBRTNGLE9BQU9rQjtBQUNUIn0=
|