occam-verify-cli 0.0.968 → 0.0.971
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/bin/action/verify.js +6 -8
- package/lib/constants.js +5 -1
- package/lib/context/file.js +48 -53
- package/lib/context/local.js +45 -39
- package/lib/context/release.js +3 -3
- package/lib/declaration.js +9 -7
- package/lib/equivalence.js +23 -21
- package/lib/judgement.js +3 -3
- package/lib/label.js +3 -3
- package/lib/log.js +3 -3
- package/lib/metaType.js +7 -7
- package/lib/metavariable.js +7 -7
- package/lib/node/term/bracketed.js +16 -0
- package/lib/proofStep.js +3 -29
- package/lib/releaseContext/initialise.js +11 -17
- package/lib/resolve/substitutions.js +99 -0
- package/lib/rule.js +10 -6
- package/lib/substitution/statementForMetavariable.js +93 -98
- package/lib/substitution/termForVariable.js +45 -54
- package/lib/substitution.js +51 -9
- package/lib/substitutions.js +165 -12
- package/lib/term.js +8 -1
- package/lib/topLevelAssertion.js +10 -6
- package/lib/type.js +5 -5
- package/lib/unifier/metaLevel.js +10 -3
- package/lib/unifier/statementWithCombinator.js +6 -6
- package/lib/unifier.js +2 -2
- package/lib/unify/metavariableWithStatement.js +13 -48
- package/lib/unify/metavariableWithStatementGivenSubstitution.js +39 -0
- package/lib/unify/premiseWithProofStep.js +3 -3
- package/lib/unify/statement/qualified.js +117 -0
- package/lib/unify/statement/unqualified.js +25 -0
- package/lib/unify/statementWithBracketedCombinator.js +3 -3
- package/lib/unify/statementWithCombinators.js +5 -5
- package/lib/unify/statementWithMetaType.js +3 -3
- package/lib/unify/statementWithSttaemetnGivenEquivalences.js +45 -0
- package/lib/unify/suppositionWithProffStep.js +3 -3
- package/lib/unify/variableWithTerm.js +11 -26
- package/lib/utilities/array.js +5 -14
- package/lib/utilities/assertion.js +24 -0
- package/lib/utilities/brackets.js +60 -0
- package/lib/utilities/message.js +52 -0
- package/lib/utilities/name.js +7 -7
- package/lib/utilities/node.js +10 -17
- package/lib/utilities/string.js +1 -7
- package/lib/utilities/subproof.js +19 -0
- package/lib/utilities/unify.js +30 -11
- package/lib/variable.js +8 -8
- package/lib/verifier/metaLevel.js +6 -6
- package/lib/verifier/statementAsCombinator.js +2 -2
- package/lib/verify/assertion/contained.js +66 -32
- package/lib/verify/assertion/defined.js +51 -46
- package/lib/verify/assertion/subproof.js +9 -9
- package/lib/verify/assertion/type.js +11 -11
- package/lib/verify/conclusion.js +6 -6
- package/lib/verify/consequent.js +6 -6
- package/lib/verify/declaration/metavariable.js +2 -2
- package/lib/verify/declaration.js +34 -20
- package/lib/verify/equality.js +13 -13
- package/lib/verify/frame.js +38 -24
- package/lib/verify/judgement.js +13 -13
- package/lib/verify/metavariable.js +2 -2
- package/lib/verify/premise.js +5 -5
- package/lib/verify/proofStep.js +15 -24
- package/lib/verify/statement/qualified.js +15 -124
- package/lib/verify/statement/unqualified.js +23 -24
- package/lib/verify/statement.js +24 -24
- package/lib/verify/statementGivenMetaType.js +3 -3
- package/lib/verify/supposition.js +5 -5
- package/package.json +2 -2
- package/src/constants.js +1 -0
- package/src/context/file.js +49 -55
- package/src/context/local.js +34 -31
- package/src/context/release.js +2 -2
- package/src/declaration.js +12 -10
- package/src/equivalence.js +27 -26
- package/src/judgement.js +2 -2
- package/src/label.js +2 -2
- package/src/log.js +1 -1
- package/src/metaType.js +7 -7
- package/src/metavariable.js +7 -7
- package/src/node/term/bracketed.js +9 -0
- package/src/proofStep.js +3 -48
- package/src/releaseContext/initialise.js +13 -24
- package/src/resolve/substitutions.js +134 -0
- package/src/rule.js +10 -5
- package/src/substitution/statementForMetavariable.js +99 -85
- package/src/substitution/termForVariable.js +50 -65
- package/src/substitution.js +46 -8
- package/src/substitutions.js +176 -10
- package/src/term.js +6 -0
- package/src/topLevelAssertion.js +10 -5
- package/src/type.js +4 -4
- package/src/unifier/metaLevel.js +11 -3
- package/src/unifier/statementWithCombinator.js +5 -5
- package/src/unifier.js +1 -1
- package/src/unify/metavariableWithStatement.js +17 -71
- package/src/unify/metavariableWithStatementGivenSubstitution.js +39 -0
- package/src/unify/premiseWithProofStep.js +1 -1
- package/src/unify/statement/qualified.js +183 -0
- package/src/unify/statement/unqualified.js +24 -0
- package/src/unify/statementWithBracketedCombinator.js +2 -2
- package/src/unify/statementWithCombinators.js +4 -4
- package/src/unify/statementWithMetaType.js +2 -2
- package/src/unify/statementWithSttaemetnGivenEquivalences.js +51 -0
- package/src/unify/suppositionWithProffStep.js +1 -1
- package/src/unify/variableWithTerm.js +14 -35
- package/src/utilities/array.js +1 -16
- package/src/utilities/assertion.js +19 -0
- package/src/utilities/brackets.js +56 -0
- package/src/utilities/name.js +8 -8
- package/src/utilities/node.js +14 -17
- package/src/utilities/string.js +2 -2
- package/src/utilities/subproof.js +18 -0
- package/src/utilities/unify.js +24 -12
- package/src/variable.js +11 -11
- package/src/verifier/metaLevel.js +5 -5
- package/src/verifier/statementAsCombinator.js +2 -2
- package/src/verify/assertion/contained.js +80 -38
- package/src/verify/assertion/defined.js +64 -55
- package/src/verify/assertion/subproof.js +8 -8
- package/src/verify/assertion/type.js +11 -11
- package/src/verify/conclusion.js +8 -8
- package/src/verify/consequent.js +8 -8
- package/src/verify/declaration/metavariable.js +4 -3
- package/src/verify/declaration.js +46 -23
- package/src/verify/equality.js +13 -13
- package/src/verify/frame.js +48 -28
- package/src/verify/judgement.js +13 -13
- package/src/verify/metavariable.js +3 -3
- package/src/verify/premise.js +6 -6
- package/src/verify/proofStep.js +14 -31
- package/src/verify/statement/qualified.js +18 -199
- package/src/verify/statement/unqualified.js +25 -31
- package/src/verify/statement.js +23 -23
- package/src/verify/statementGivenMetaType.js +2 -2
- package/src/verify/supposition.js +6 -6
- package/lib/unify/statementAtainstStatement.js +0 -49
- package/lib/utilities/lineIndex.js +0 -52
- package/lib/utilities/match.js +0 -59
- package/lib/utilities/verify.js +0 -19
- package/src/unify/statementAtainstStatement.js +0 -56
- package/src/utilities/match.js +0 -53
- package/src/utilities/verify.js +0 -14
- /package/src/utilities/{lineIndex.js → message.js} +0 -0
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyStatement from "../../verify/statement";
|
|
4
|
+
import unifyQualifiedStatement from "../../unify/statement/qualified";
|
|
4
5
|
|
|
5
6
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
+
import { assignAssignments } from "../../utilities/assignments";
|
|
6
8
|
|
|
7
|
-
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!")
|
|
8
|
-
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!");
|
|
9
|
+
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!");
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
unifyDerivedQualifiedStatementAWithAxiom,
|
|
13
|
-
unifyDerivedQualifiedStatementAWithLemma,
|
|
14
|
-
unifyDerivedQualifiedStatementAWithTheorem,
|
|
15
|
-
unifyDerivedQualifiedStatementAWithConjecture,
|
|
16
|
-
unifyDerivedQualifiedStatementAWithReference
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, derived, localContext) {
|
|
20
|
-
let qualifiedStatementVerified;
|
|
11
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, localContext) {
|
|
12
|
+
let qualifiedStatementVerified = false;
|
|
21
13
|
|
|
22
14
|
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
23
15
|
|
|
24
16
|
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
25
17
|
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
if (!qualifiedStatementVerified) {
|
|
19
|
+
const stated = true,
|
|
20
|
+
assignments = [],
|
|
21
|
+
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
22
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
|
|
23
|
+
|
|
24
|
+
if (statementVerified) {
|
|
25
|
+
const qualifiedStatementUnified = unifyQualifiedStatement(qualifiedStatementNode, substitutions, localContext);
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
if (qualifiedStatementUnified) {
|
|
28
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
qualifiedStatementVerified = assignmentsAssigned; ///
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
if (qualifiedStatementVerified) {
|
|
@@ -38,184 +38,3 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
38
38
|
|
|
39
39
|
return qualifiedStatementVerified;
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
function unifyDerivedQualifiedStatement(qualifiedStatementNode, substitutions, localContext) {
|
|
43
|
-
let derivedQualifiedStatementUnified;
|
|
44
|
-
|
|
45
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
46
|
-
|
|
47
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement...`, qualifiedStatementNode);
|
|
48
|
-
|
|
49
|
-
derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunctions.some((unifyDerivedQualifiedStatementFunction) => {
|
|
50
|
-
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
51
|
-
|
|
52
|
-
return derivedQualifiedStatementUnified;
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
if (derivedQualifiedStatementUnified) {
|
|
56
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement.`, qualifiedStatementNode);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return derivedQualifiedStatementUnified;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function unifyDerivedQualifiedStatementAWithRule(qualifiedStatementNode, substitutions, localContext) {
|
|
63
|
-
let derivedQualifiedStatementUnifiedWithRule = false;
|
|
64
|
-
|
|
65
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
66
|
-
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
67
|
-
|
|
68
|
-
if (rule !== null) {
|
|
69
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
70
|
-
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
71
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
72
|
-
|
|
73
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' rule...`, qualifiedStatementNode);
|
|
74
|
-
|
|
75
|
-
const statementUnified = rule.unifyStatement(statementNode, localContext);
|
|
76
|
-
|
|
77
|
-
derivedQualifiedStatementUnifiedWithRule = statementUnified; ///
|
|
78
|
-
|
|
79
|
-
if (derivedQualifiedStatementUnifiedWithRule) {
|
|
80
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' rule.`, qualifiedStatementNode);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return derivedQualifiedStatementUnifiedWithRule;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function unifyDerivedQualifiedStatementAWithAxiom(qualifiedStatementNode, substitutions, localContext) {
|
|
88
|
-
let derivedQualifiedStatementUnifiedWithAxiom = false;
|
|
89
|
-
|
|
90
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
91
|
-
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
92
|
-
|
|
93
|
-
if (axiom !== null) {
|
|
94
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
95
|
-
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
96
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
97
|
-
|
|
98
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' axiom...`, qualifiedStatementNode);
|
|
99
|
-
|
|
100
|
-
const statementUnified = axiom.unifyStatement(statementNode, localContext);
|
|
101
|
-
|
|
102
|
-
derivedQualifiedStatementUnifiedWithAxiom = statementUnified; ///
|
|
103
|
-
|
|
104
|
-
if (derivedQualifiedStatementUnifiedWithAxiom) {
|
|
105
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' axiom.`, qualifiedStatementNode);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return derivedQualifiedStatementUnifiedWithAxiom;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function unifyDerivedQualifiedStatementAWithLemma(qualifiedStatementNode, substitutions, localContext) {
|
|
113
|
-
let derivedQualifiedStatementUnifiedWithLemma = false;
|
|
114
|
-
|
|
115
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
116
|
-
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
117
|
-
|
|
118
|
-
if (lemma !== null) {
|
|
119
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
120
|
-
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
121
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
122
|
-
|
|
123
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' lemma...`, qualifiedStatementNode);
|
|
124
|
-
|
|
125
|
-
const statementUnified = lemma.unifyStatement(statementNode, localContext);
|
|
126
|
-
|
|
127
|
-
derivedQualifiedStatementUnifiedWithLemma = statementUnified; ///
|
|
128
|
-
|
|
129
|
-
if (derivedQualifiedStatementUnifiedWithLemma) {
|
|
130
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' lemma.`, qualifiedStatementNode);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return derivedQualifiedStatementUnifiedWithLemma;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function unifyDerivedQualifiedStatementAWithTheorem(qualifiedStatementNode, substitutions, localContext) {
|
|
138
|
-
let derivedQualifiedStatementUnifiedWithTheorem = false;
|
|
139
|
-
|
|
140
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
141
|
-
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
142
|
-
|
|
143
|
-
if (theorem !== null) {
|
|
144
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
145
|
-
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
146
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
147
|
-
|
|
148
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' theorem...`, qualifiedStatementNode);
|
|
149
|
-
|
|
150
|
-
const statementUnified = theorem.unifyStatement(statementNode, localContext);
|
|
151
|
-
|
|
152
|
-
derivedQualifiedStatementUnifiedWithTheorem = statementUnified; ///
|
|
153
|
-
|
|
154
|
-
if (derivedQualifiedStatementUnifiedWithTheorem) {
|
|
155
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' theorem.`, qualifiedStatementNode);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return derivedQualifiedStatementUnifiedWithTheorem;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function unifyDerivedQualifiedStatementAWithConjecture(qualifiedStatementNode, substitutions, localContext) {
|
|
163
|
-
let derivedQualifiedStatementUnifiedWithConjecture = false;
|
|
164
|
-
|
|
165
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
166
|
-
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
167
|
-
|
|
168
|
-
if (conjecture !== null) {
|
|
169
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
170
|
-
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
171
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
172
|
-
|
|
173
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' conjecture...`, qualifiedStatementNode);
|
|
174
|
-
|
|
175
|
-
const statementUnified = conjecture.unifyStatement(statementNode, localContext);
|
|
176
|
-
|
|
177
|
-
derivedQualifiedStatementUnifiedWithConjecture = statementUnified; ///
|
|
178
|
-
|
|
179
|
-
if (derivedQualifiedStatementUnifiedWithConjecture) {
|
|
180
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' conjecture.`, qualifiedStatementNode);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return derivedQualifiedStatementUnifiedWithConjecture;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function unifyDerivedQualifiedStatementAWithReference(qualifiedStatementNode, substitutions, localContext) {
|
|
188
|
-
let derivedQualifiedStatementUnifiedWithReference = false;
|
|
189
|
-
|
|
190
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
191
|
-
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
192
|
-
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
|
|
193
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
194
|
-
|
|
195
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
196
|
-
|
|
197
|
-
if (metavariablePresent) {
|
|
198
|
-
|
|
199
|
-
debugger
|
|
200
|
-
|
|
201
|
-
// const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
202
|
-
// localContextA = null,
|
|
203
|
-
// localContextB = localContext, ///
|
|
204
|
-
// statementNodeB = statementNode, ///
|
|
205
|
-
// substitutionNodeA = null,
|
|
206
|
-
// metavariableNodeA = metavariableNode, ///
|
|
207
|
-
// metavariableUnifiedWithStatement = unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
|
|
208
|
-
// const verifiedAhead = true;
|
|
209
|
-
//
|
|
210
|
-
// return verifiedAhead;
|
|
211
|
-
// });
|
|
212
|
-
//
|
|
213
|
-
// derivedQualifiedStatementUnifiedWithReference = metavariableUnifiedWithStatement; ///
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (derivedQualifiedStatementUnifiedWithReference) {
|
|
217
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
return derivedQualifiedStatementUnifiedWithReference;
|
|
221
|
-
}
|
|
@@ -1,35 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyStatement from "../../verify/statement";
|
|
4
|
+
import unifyUnqualifiedStatement from "../../unify/statement/unqualified";
|
|
4
5
|
|
|
5
6
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
+
import { assignAssignments } from "../../utilities/assignments";
|
|
6
8
|
import { verifyStatementTrivially } from "../../verify/statement";
|
|
7
9
|
|
|
8
10
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
9
11
|
|
|
10
|
-
export default function verifyUnqualifiedStatement(unqualifiedStatementNode,
|
|
11
|
-
let unqualifiedStatementVerified;
|
|
12
|
+
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, localContext) {
|
|
13
|
+
let unqualifiedStatementVerified = false;
|
|
12
14
|
|
|
13
15
|
const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
14
16
|
|
|
15
17
|
localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
if (!unqualifiedStatementVerified) {
|
|
20
|
+
const stated = true,
|
|
21
|
+
assignments = [],
|
|
22
|
+
statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
23
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
|
|
19
24
|
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
if (statementVerified) {
|
|
26
|
+
const unqualifiedStatementUnified = unifyUnqualifiedStatement(unqualifiedStatementNode, localContext);
|
|
27
|
+
|
|
28
|
+
unqualifiedStatementVerified = unqualifiedStatementUnified; ///
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!unqualifiedStatementVerified) {
|
|
33
|
+
const stated = false,
|
|
34
|
+
assignments = [],
|
|
35
|
+
statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
36
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
|
|
37
|
+
|
|
38
|
+
if (statementVerified) {
|
|
22
39
|
const statementVerifiedTrivially = verifyStatementTrivially(statementNode, localContext);
|
|
23
40
|
|
|
24
41
|
if (statementVerifiedTrivially) {
|
|
25
|
-
|
|
26
|
-
} else {
|
|
27
|
-
const derivedUnqualifiedStatementUnified = unifyDerivedUnqualifiedStatement(unqualifiedStatementNode, localContext);
|
|
42
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
28
43
|
|
|
29
|
-
unqualifiedStatementVerified =
|
|
44
|
+
unqualifiedStatementVerified = assignmentsAssigned; ///
|
|
30
45
|
}
|
|
31
|
-
} else {
|
|
32
|
-
unqualifiedStatementVerified = true;
|
|
33
46
|
}
|
|
34
47
|
}
|
|
35
48
|
|
|
@@ -39,22 +52,3 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
39
52
|
|
|
40
53
|
return unqualifiedStatementVerified;
|
|
41
54
|
}
|
|
42
|
-
|
|
43
|
-
function unifyDerivedUnqualifiedStatement(unqualifiedStatementNode, localContext) {
|
|
44
|
-
let derivedUnqualifiedStatementUnified;
|
|
45
|
-
|
|
46
|
-
const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
47
|
-
|
|
48
|
-
localContext.trace(`Unifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
49
|
-
|
|
50
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
51
|
-
statementUnified = localContext.unifyStatement(statementNode, localContext);
|
|
52
|
-
|
|
53
|
-
derivedUnqualifiedStatementUnified = statementUnified; ///
|
|
54
|
-
|
|
55
|
-
if (derivedUnqualifiedStatementUnified) {
|
|
56
|
-
localContext.debug(`...unified the '${unqualifiedStatementString}' derived unqualified statement.`, unqualifiedStatementNode);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return derivedUnqualifiedStatementUnified;
|
|
60
|
-
}
|
package/src/verify/statement.js
CHANGED
|
@@ -41,7 +41,7 @@ const unifyStatementFunctions = [
|
|
|
41
41
|
verifyStatementAsContainedAssertion
|
|
42
42
|
];
|
|
43
43
|
|
|
44
|
-
function verifyStatement(statementNode, assignments,
|
|
44
|
+
function verifyStatement(statementNode, assignments, stated, localContext) {
|
|
45
45
|
let statementVerified = false;
|
|
46
46
|
|
|
47
47
|
const statementString = localContext.nodeAsString(statementNode);
|
|
@@ -49,14 +49,14 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
49
49
|
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
50
50
|
|
|
51
51
|
if (!statementVerified) {
|
|
52
|
-
const statementVerifiedAsMetavariable = verifyStatementAsMetavariable(statementNode, assignments,
|
|
52
|
+
const statementVerifiedAsMetavariable = verifyStatementAsMetavariable(statementNode, assignments, stated, localContext);
|
|
53
53
|
|
|
54
54
|
statementVerified = statementVerifiedAsMetavariable; ///
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
if (!statementVerified) {
|
|
58
58
|
const statementUnified = unifyStatementFunctions.some((unifyStatementFunction) => {
|
|
59
|
-
const statementUnified = unifyStatementFunction(statementNode, assignments,
|
|
59
|
+
const statementUnified = unifyStatementFunction(statementNode, assignments, stated, localContext);
|
|
60
60
|
|
|
61
61
|
if (statementUnified) {
|
|
62
62
|
return true;
|
|
@@ -68,7 +68,7 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
68
68
|
|
|
69
69
|
if (!statementVerified) {
|
|
70
70
|
statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
71
|
-
const statementVerified = verifyStatementFunction(statementNode, assignments,
|
|
71
|
+
const statementVerified = verifyStatementFunction(statementNode, assignments, stated, localContext);
|
|
72
72
|
|
|
73
73
|
if (statementVerified) {
|
|
74
74
|
return true;
|
|
@@ -113,7 +113,7 @@ export function verifyStatementTrivially(statementNode, localContext) {
|
|
|
113
113
|
return statementVerifiedTrivially;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
function verifyStatementAsMetavariable(statementNode, assignments,
|
|
116
|
+
function verifyStatementAsMetavariable(statementNode, assignments, stated, localContext) {
|
|
117
117
|
let statementVerifiedAsMetavariable = false;
|
|
118
118
|
|
|
119
119
|
const metavariableNode = metavariableNodeQuery(statementNode);
|
|
@@ -135,7 +135,7 @@ function verifyStatementAsMetavariable(statementNode, assignments, derived, loca
|
|
|
135
135
|
return statementVerifiedAsMetavariable;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
function verifyStatementAsEquality(statementNode, assignments,
|
|
138
|
+
function verifyStatementAsEquality(statementNode, assignments, stated, localContext) {
|
|
139
139
|
let statementVerifiedAsEquality = false;
|
|
140
140
|
|
|
141
141
|
const equalityNode = equalityNodeQuery(statementNode);
|
|
@@ -145,7 +145,7 @@ function verifyStatementAsEquality(statementNode, assignments, derived, localCon
|
|
|
145
145
|
|
|
146
146
|
localContext.trace(`Verifying the '${statementString}' statement as an equality...`, statementNode);
|
|
147
147
|
|
|
148
|
-
const equalityVerified = verifyEquality(equalityNode, assignments,
|
|
148
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, stated, localContext);
|
|
149
149
|
|
|
150
150
|
statementVerifiedAsEquality = equalityVerified; ///
|
|
151
151
|
|
|
@@ -157,7 +157,7 @@ function verifyStatementAsEquality(statementNode, assignments, derived, localCon
|
|
|
157
157
|
return statementVerifiedAsEquality;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
function verifyStatementAsFrame(statementNode, assignments,
|
|
160
|
+
function verifyStatementAsFrame(statementNode, assignments, stated, localContext) {
|
|
161
161
|
let statementVerifiedAsFrame = false;
|
|
162
162
|
|
|
163
163
|
const frameNode = frameNodeQuery(statementNode);
|
|
@@ -167,7 +167,7 @@ function verifyStatementAsFrame(statementNode, assignments, derived, localContex
|
|
|
167
167
|
|
|
168
168
|
localContext.trace(`Verifying the '${statementString}' statement as a frame...`, statementNode);
|
|
169
169
|
|
|
170
|
-
const frameVerified = verifyFrame(frameNode, assignments,
|
|
170
|
+
const frameVerified = verifyFrame(frameNode, assignments, stated, localContext);
|
|
171
171
|
|
|
172
172
|
statementVerifiedAsFrame = frameVerified; ///
|
|
173
173
|
|
|
@@ -179,7 +179,7 @@ function verifyStatementAsFrame(statementNode, assignments, derived, localContex
|
|
|
179
179
|
return statementVerifiedAsFrame;
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
function verifyStatementAsJudgement(statementNode, assignments,
|
|
182
|
+
function verifyStatementAsJudgement(statementNode, assignments, stated, localContext) {
|
|
183
183
|
let statementVerifiedAsJudgement = false;
|
|
184
184
|
|
|
185
185
|
const judgementNode = judgementNodeQuery(statementNode);
|
|
@@ -189,7 +189,7 @@ function verifyStatementAsJudgement(statementNode, assignments, derived, localCo
|
|
|
189
189
|
|
|
190
190
|
localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
|
|
191
191
|
|
|
192
|
-
const judgementVerified = verifyJudgement(judgementNode, assignments,
|
|
192
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, stated, localContext);
|
|
193
193
|
|
|
194
194
|
statementVerifiedAsJudgement = judgementVerified; ///
|
|
195
195
|
|
|
@@ -201,7 +201,7 @@ function verifyStatementAsJudgement(statementNode, assignments, derived, localCo
|
|
|
201
201
|
return statementVerifiedAsJudgement;
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
-
function verifyStatementAsDeclaration(statementNode, assignments,
|
|
204
|
+
function verifyStatementAsDeclaration(statementNode, assignments, stated, localContext) {
|
|
205
205
|
let statementVerifiedAsDeclaration = false;
|
|
206
206
|
|
|
207
207
|
const declarationNode = declarationNodeQuery(statementNode);
|
|
@@ -211,7 +211,7 @@ function verifyStatementAsDeclaration(statementNode, assignments, derived, local
|
|
|
211
211
|
|
|
212
212
|
localContext.trace(`Verifying the '${statementString}' statement as a declaration...`, statementNode);
|
|
213
213
|
|
|
214
|
-
const declarationVerified = verifyDeclaration(declarationNode, assignments,
|
|
214
|
+
const declarationVerified = verifyDeclaration(declarationNode, assignments, stated, localContext);
|
|
215
215
|
|
|
216
216
|
statementVerifiedAsDeclaration = declarationVerified; ///
|
|
217
217
|
|
|
@@ -223,7 +223,7 @@ function verifyStatementAsDeclaration(statementNode, assignments, derived, local
|
|
|
223
223
|
return statementVerifiedAsDeclaration;
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
function verifyStatementAsSubstitution(statementNode, assignments,
|
|
226
|
+
function verifyStatementAsSubstitution(statementNode, assignments, stated, localContext) {
|
|
227
227
|
let statementVerifiedAsSubstitution = false;
|
|
228
228
|
|
|
229
229
|
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
@@ -233,7 +233,7 @@ function verifyStatementAsSubstitution(statementNode, assignments, derived, loca
|
|
|
233
233
|
|
|
234
234
|
localContext.trace(`Verifying the '${statementString}' statement as a substitution...`, statementNode);
|
|
235
235
|
|
|
236
|
-
const substitutionVerified = verifySubstitution(substitutionNode, assignments,
|
|
236
|
+
const substitutionVerified = verifySubstitution(substitutionNode, assignments, stated, localContext);
|
|
237
237
|
|
|
238
238
|
statementVerifiedAsSubstitution = substitutionVerified; ///
|
|
239
239
|
|
|
@@ -245,7 +245,7 @@ function verifyStatementAsSubstitution(statementNode, assignments, derived, loca
|
|
|
245
245
|
return statementVerifiedAsSubstitution;
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
function verifyStatementAsTypeAssertion(statementNode, assignments,
|
|
248
|
+
function verifyStatementAsTypeAssertion(statementNode, assignments, stated, localContext) {
|
|
249
249
|
let statementVerifiedAsTypeAssertion = false;
|
|
250
250
|
|
|
251
251
|
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
@@ -255,7 +255,7 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, loc
|
|
|
255
255
|
|
|
256
256
|
localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
|
|
257
257
|
|
|
258
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments,
|
|
258
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, stated, localContext);
|
|
259
259
|
|
|
260
260
|
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
261
261
|
|
|
@@ -267,7 +267,7 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, loc
|
|
|
267
267
|
return statementVerifiedAsTypeAssertion;
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
function verifyStatementAsDefinedAssertion(statementNode, assignments,
|
|
270
|
+
function verifyStatementAsDefinedAssertion(statementNode, assignments, stated, localContext) {
|
|
271
271
|
let statementVerifiedAsDefinedAssertion = false;
|
|
272
272
|
|
|
273
273
|
const definedAssertionNode = definedAssertionNodeQuery(statementNode);
|
|
@@ -277,7 +277,7 @@ function verifyStatementAsDefinedAssertion(statementNode, assignments, derived,
|
|
|
277
277
|
|
|
278
278
|
localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
|
|
279
279
|
|
|
280
|
-
const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments,
|
|
280
|
+
const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments, stated, localContext);
|
|
281
281
|
|
|
282
282
|
statementVerifiedAsDefinedAssertion = definedAssertionVerified; ///
|
|
283
283
|
|
|
@@ -289,7 +289,7 @@ function verifyStatementAsDefinedAssertion(statementNode, assignments, derived,
|
|
|
289
289
|
return statementVerifiedAsDefinedAssertion;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
function verifyStatementAsSubproofAssertion(statementNode, assignments,
|
|
292
|
+
function verifyStatementAsSubproofAssertion(statementNode, assignments, stated, localContext) {
|
|
293
293
|
let statementVerifiedAsSubproofAssertion = false;
|
|
294
294
|
|
|
295
295
|
const subproofAssertionNode = subproofAssertionNodeQuery(statementNode);
|
|
@@ -299,7 +299,7 @@ function verifyStatementAsSubproofAssertion(statementNode, assignments, derived,
|
|
|
299
299
|
|
|
300
300
|
localContext.trace(`Verifying the '${statementString}' statement as a subproof assertion...`, statementNode);
|
|
301
301
|
|
|
302
|
-
const subproofAssertionVerified = verifySubproofAssertion(subproofAssertionNode, assignments,
|
|
302
|
+
const subproofAssertionVerified = verifySubproofAssertion(subproofAssertionNode, assignments, stated, localContext);
|
|
303
303
|
|
|
304
304
|
statementVerifiedAsSubproofAssertion = subproofAssertionVerified; ///
|
|
305
305
|
|
|
@@ -311,7 +311,7 @@ function verifyStatementAsSubproofAssertion(statementNode, assignments, derived,
|
|
|
311
311
|
return statementVerifiedAsSubproofAssertion;
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
-
function verifyStatementAsContainedAssertion(statementNode, assignments,
|
|
314
|
+
function verifyStatementAsContainedAssertion(statementNode, assignments, stated, localContext) {
|
|
315
315
|
let statementVerifiedAsContainedAssertion = false;
|
|
316
316
|
|
|
317
317
|
const containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
@@ -321,7 +321,7 @@ function verifyStatementAsContainedAssertion(statementNode, assignments, derived
|
|
|
321
321
|
|
|
322
322
|
localContext.trace(`Verifying the '${statementString}' statement as a contained assertion...`, statementNode);
|
|
323
323
|
|
|
324
|
-
const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments,
|
|
324
|
+
const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, stated, localContext);
|
|
325
325
|
|
|
326
326
|
statementVerifiedAsContainedAssertion = containedAssertionVerified; ///
|
|
327
327
|
|
|
@@ -7,7 +7,7 @@ import { FRAME_META_TYPE_NAME, REFERENCE_META_TYPE_NAME, STATEMENT_META_TYPE_NAM
|
|
|
7
7
|
|
|
8
8
|
const metavariableNodeQuery = nodeQuery("/statement/metavariable!");
|
|
9
9
|
|
|
10
|
-
export default function verifyStatementGivenMetaType(statementNode, metaType, assignments,
|
|
10
|
+
export default function verifyStatementGivenMetaType(statementNode, metaType, assignments, stated, localContext) {
|
|
11
11
|
let statementVerifiedGivenMetaType;
|
|
12
12
|
|
|
13
13
|
const metaTypeName = metaType.getName();
|
|
@@ -36,7 +36,7 @@ export default function verifyStatementGivenMetaType(statementNode, metaType, as
|
|
|
36
36
|
|
|
37
37
|
case STATEMENT_META_TYPE_NAME: {
|
|
38
38
|
const { verifyStatement } = shim,
|
|
39
|
-
statementVerified = verifyStatement(statementNode, assignments,
|
|
39
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext)
|
|
40
40
|
|
|
41
41
|
statementVerifiedGivenMetaType = statementVerified; ///
|
|
42
42
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import ProofStep from "../proofStep";
|
|
4
4
|
import Supposition from "../supposition";
|
|
5
|
-
import
|
|
5
|
+
import verifyStatement from "../verify/statement";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
import { assignAssignments } from "../utilities/assignments";
|
|
@@ -20,16 +20,16 @@ export default function verifySupposition(suppositionNode, suppositions, localCo
|
|
|
20
20
|
const unqualifiedStatementNode = unqualifiedStatementNodeQuery(suppositionNode);
|
|
21
21
|
|
|
22
22
|
if (unqualifiedStatementNode !== null) {
|
|
23
|
-
const
|
|
23
|
+
const stated = true,
|
|
24
24
|
assignments = [],
|
|
25
|
-
|
|
25
|
+
statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
26
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
|
|
26
27
|
|
|
27
|
-
if (
|
|
28
|
+
if (statementVerified) {
|
|
28
29
|
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
29
30
|
|
|
30
31
|
if (assignmentsAssigned) {
|
|
31
|
-
const
|
|
32
|
-
supposition = Supposition.fromStatementNode(statementNode),
|
|
32
|
+
const supposition = Supposition.fromStatementNode(statementNode),
|
|
33
33
|
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
34
34
|
|
|
35
35
|
suppositions.push(supposition);
|
|
@@ -1,49 +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 unifyStatementWithStatement;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _substitutions = /*#__PURE__*/ _interop_require_default(require("../substitutions"));
|
|
12
|
-
var _metaLevel = /*#__PURE__*/ _interop_require_default(require("../unifier/metaLevel"));
|
|
13
|
-
var _termForVariable = /*#__PURE__*/ _interop_require_default(require("../substitution/termForVariable"));
|
|
14
|
-
var _array = require("../utilities/array");
|
|
15
|
-
function _interop_require_default(obj) {
|
|
16
|
-
return obj && obj.__esModule ? obj : {
|
|
17
|
-
default: obj
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
|
|
21
|
-
var statementUnifiedWithStatement = false;
|
|
22
|
-
var transformedSubstitutions = _substitutions.default.fromNothing(), transformedSubstitution = substitution.transformed(substitutions);
|
|
23
|
-
if (transformedSubstitution !== null) {
|
|
24
|
-
transformedSubstitutions.addSubstitution(transformedSubstitution, localContextA, localContextB);
|
|
25
|
-
}
|
|
26
|
-
var nodeA = statementNodeA, nodeB = statementNodeB, unified = _metaLevel.default.unify(nodeA, nodeB, transformedSubstitutions, localContextA, localContextB);
|
|
27
|
-
if (unified) {
|
|
28
|
-
if (transformedSubstitution === null) {
|
|
29
|
-
debugger;
|
|
30
|
-
var substitutionB = termForVariableSubstitution, substitutionsB = [
|
|
31
|
-
substitutionB
|
|
32
|
-
];
|
|
33
|
-
substitutionsA = transformSubstitutions(substitutionsA, substitutionsB);
|
|
34
|
-
(0, _array.push)(substitutions, substitutionsA);
|
|
35
|
-
}
|
|
36
|
-
statementUnifiedWithStatement = true;
|
|
37
|
-
}
|
|
38
|
-
return statementUnifiedWithStatement;
|
|
39
|
-
}
|
|
40
|
-
function transformSubstitutions(substitutionsA1, substitutionsB) {
|
|
41
|
-
substitutionsA1 = substitutionsA1.map(function(substitutionA) {
|
|
42
|
-
var substitution = substitutionA, substitutions = substitutionsB, termForVariableSubstitution1 = _termForVariable.default.fromSubstitutionAndSubstitutions(substitution, substitutions);
|
|
43
|
-
substitutionA = termForVariableSubstitution1; ///
|
|
44
|
-
return substitutionA;
|
|
45
|
-
});
|
|
46
|
-
return substitutionsA1;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bmlmeS9zdGF0ZW1lbnRBdGFpbnN0U3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9ucyBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IG1ldGFMZXZlbFVuaWZpZXIgZnJvbSBcIi4uL3VuaWZpZXIvbWV0YUxldmVsXCI7XG5pbXBvcnQgVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb24vdGVybUZvclZhcmlhYmxlXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aFN0YXRlbWVudChzdGF0ZW1lbnROb2RlQSwgc3RhdGVtZW50Tm9kZUIsIHN1YnN0aXR1dGlvbiwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICBsZXQgc3RhdGVtZW50VW5pZmllZFdpdGhTdGF0ZW1lbnQgPSBmYWxzZTtcblxuICBjb25zdCB0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCksXG4gICAgICAgIHRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLnRyYW5zZm9ybWVkKHN1YnN0aXR1dGlvbnMpO1xuXG4gIGlmICh0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgIHRyYW5zZm9ybWVkU3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24odHJhbnNmb3JtZWRTdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuICB9XG5cbiAgY29uc3Qgbm9kZUEgPSBzdGF0ZW1lbnROb2RlQSwgIC8vL1xuICAgICAgICBub2RlQiA9IHN0YXRlbWVudE5vZGVCLCAgLy8vXG4gICAgICAgIHVuaWZpZWQgPSBtZXRhTGV2ZWxVbmlmaWVyLnVuaWZ5KG5vZGVBLCBub2RlQiwgdHJhbnNmb3JtZWRTdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICBpZiAodW5pZmllZCkge1xuICAgIGlmICh0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuXG4gICAgICBkZWJ1Z2dlclxuXG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25CID0gdGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICBzdWJzdGl0dXRpb25zQiA9IFtcbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uQlxuICAgICAgICAgICAgXTtcblxuICAgICAgc3Vic3RpdHV0aW9uc0EgPSB0cmFuc2Zvcm1TdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnNBLCBzdWJzdGl0dXRpb25zQik7XG5cbiAgICAgIHB1c2goc3Vic3RpdHV0aW9ucywgc3Vic3RpdHV0aW9uc0EpO1xuICAgIH1cblxuICAgIHN0YXRlbWVudFVuaWZpZWRXaXRoU3RhdGVtZW50ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVkV2l0aFN0YXRlbWVudDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zQSwgc3Vic3RpdHV0aW9uc0IpIHtcbiAgc3Vic3RpdHV0aW9uc0EgPSBzdWJzdGl0dXRpb25zQS5tYXAoKHN1YnN0aXR1dGlvbkEpID0+IHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25BLCAgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNCLFxuICAgICAgICAgIHRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbiA9IFRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbi5mcm9tU3Vic3RpdHV0aW9uQW5kU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgc3Vic3RpdHV0aW9uQSA9IHRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uQTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbnNBO1xufVxuIl0sIm5hbWVzIjpbInVuaWZ5U3RhdGVtZW50V2l0aFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVBIiwic3RhdGVtZW50Tm9kZUIiLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25zIiwibG9jYWxDb250ZXh0QSIsImxvY2FsQ29udGV4dEIiLCJzdGF0ZW1lbnRVbmlmaWVkV2l0aFN0YXRlbWVudCIsInRyYW5zZm9ybWVkU3Vic3RpdHV0aW9ucyIsIlN1YnN0aXR1dGlvbnMiLCJmcm9tTm90aGluZyIsInRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uIiwidHJhbnNmb3JtZWQiLCJhZGRTdWJzdGl0dXRpb24iLCJub2RlQSIsIm5vZGVCIiwidW5pZmllZCIsIm1ldGFMZXZlbFVuaWZpZXIiLCJ1bmlmeSIsInN1YnN0aXR1dGlvbkIiLCJ0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25zQiIsInN1YnN0aXR1dGlvbnNBIiwidHJhbnNmb3JtU3Vic3RpdHV0aW9ucyIsInB1c2giLCJtYXAiLCJzdWJzdGl0dXRpb25BIiwiVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiZnJvbVN1YnN0aXR1dGlvbkFuZFN1YnN0aXR1dGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBd0JBOzs7b0VBTkU7Z0VBQ0c7c0VBQ1c7cUJBRW5COzs7Ozs7QUFFTixTQUFTQSw0QkFBNEJDLGNBQWMsRUFBRUMsY0FBYyxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxhQUFhO0lBQzNJLElBQUlDLGdDQUFnQztJQUVwQyxJQUFNQywyQkFBMkJDLHNCQUFhLENBQUNDLFdBQVcsSUFDcERDLDBCQUEwQlIsYUFBYVMsV0FBVyxDQUFDUjtJQUV6RCxJQUFJTyw0QkFBNEIsTUFBTTtRQUNwQ0gseUJBQXlCSyxlQUFlLENBQUNGLHlCQUF5Qk4sZUFBZUM7SUFDbkY7SUFFQSxJQUFNUSxRQUFRYixnQkFDUmMsUUFBUWIsZ0JBQ1JjLFVBQVVDLGtCQUFnQixDQUFDQyxLQUFLLENBQUNKLE9BQU9DLE9BQU9QLDBCQUEwQkgsZUFBZUM7SUFFOUYsSUFBSVUsU0FBUztRQUNYLElBQUlMLDRCQUE0QixNQUFNO1lBRXBDLFFBQVE7WUFFUixJQUFNUSxnQkFBZ0JDLDZCQUNoQkMsaUJBQWlCO2dCQUNmRjthQUNEO1lBRVBHLGlCQUFpQkMsdUJBQXVCRCxnQkFBZ0JEO1lBRXhERyxJQUFBQSxXQUFJLEVBQUNwQixlQUFla0I7UUFDdEI7UUFFQWYsZ0NBQWdDO0lBQ2xDO0lBRUEsT0FBT0E7QUFDVDtBQUVBLFNBQVNnQix1QkFBdUJELGVBQWMsRUFBRUQsY0FBYztJQUM1REMsa0JBQWlCQSxnQkFBZUcsR0FBRyxDQUFDLFNBQUNDO1FBQ25DLElBQU12QixlQUFldUIsZUFDZnRCLGdCQUFnQmlCLGdCQUNoQkQsK0JBQThCTyx3QkFBMkIsQ0FBQ0MsZ0NBQWdDLENBQUN6QixjQUFjQztRQUUvR3NCLGdCQUFnQk4sOEJBQTZCLEdBQUc7UUFFaEQsT0FBT007SUFDVDtJQUVBLE9BQU9KO0FBQ1QifQ==
|