@stevenvo780/st-lang 4.7.0 → 4.8.0
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/dist/namespaces/reasoning.d.ts +2 -1
- package/dist/namespaces/reasoning.d.ts.map +1 -1
- package/dist/namespaces/reasoning.js +3 -1
- package/dist/namespaces/reasoning.js.map +1 -1
- package/dist/reasoning/combinatorial-games/index.d.ts +105 -0
- package/dist/reasoning/combinatorial-games/index.d.ts.map +1 -0
- package/dist/reasoning/combinatorial-games/index.js +377 -0
- package/dist/reasoning/combinatorial-games/index.js.map +1 -0
- package/dist/reasoning/mechanism-design/auctions.d.ts +49 -0
- package/dist/reasoning/mechanism-design/auctions.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/auctions.js +179 -0
- package/dist/reasoning/mechanism-design/auctions.js.map +1 -0
- package/dist/reasoning/mechanism-design/index.d.ts +5 -0
- package/dist/reasoning/mechanism-design/index.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/index.js +39 -0
- package/dist/reasoning/mechanism-design/index.js.map +1 -0
- package/dist/reasoning/mechanism-design/myerson.d.ts +64 -0
- package/dist/reasoning/mechanism-design/myerson.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/myerson.js +253 -0
- package/dist/reasoning/mechanism-design/myerson.js.map +1 -0
- package/dist/reasoning/mechanism-design/types.d.ts +44 -0
- package/dist/reasoning/mechanism-design/types.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/types.js +22 -0
- package/dist/reasoning/mechanism-design/types.js.map +1 -0
- package/dist/reasoning/mechanism-design/vcg.d.ts +29 -0
- package/dist/reasoning/mechanism-design/vcg.d.ts.map +1 -0
- package/dist/reasoning/mechanism-design/vcg.js +305 -0
- package/dist/reasoning/mechanism-design/vcg.js.map +1 -0
- package/dist/reasoning/probabilistic/distributions.d.ts +44 -0
- package/dist/reasoning/probabilistic/distributions.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/distributions.js +207 -0
- package/dist/reasoning/probabilistic/distributions.js.map +1 -0
- package/dist/reasoning/probabilistic/examples.d.ts +31 -0
- package/dist/reasoning/probabilistic/examples.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/examples.js +85 -0
- package/dist/reasoning/probabilistic/examples.js.map +1 -0
- package/dist/reasoning/probabilistic/index.d.ts +6 -0
- package/dist/reasoning/probabilistic/index.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/index.js +42 -0
- package/dist/reasoning/probabilistic/index.js.map +1 -0
- package/dist/reasoning/probabilistic/inference.d.ts +45 -0
- package/dist/reasoning/probabilistic/inference.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/inference.js +579 -0
- package/dist/reasoning/probabilistic/inference.js.map +1 -0
- package/dist/reasoning/probabilistic/types.d.ts +153 -0
- package/dist/reasoning/probabilistic/types.d.ts.map +1 -0
- package/dist/reasoning/probabilistic/types.js +37 -0
- package/dist/reasoning/probabilistic/types.js.map +1 -0
- package/dist/solver/smt-z3/index.d.ts +3 -0
- package/dist/solver/smt-z3/index.d.ts.map +1 -0
- package/dist/solver/smt-z3/index.js +11 -0
- package/dist/solver/smt-z3/index.js.map +1 -0
- package/dist/solver/smt-z3/types.d.ts +52 -0
- package/dist/solver/smt-z3/types.d.ts.map +1 -0
- package/dist/solver/smt-z3/types.js +6 -0
- package/dist/solver/smt-z3/types.js.map +1 -0
- package/dist/solver/smt-z3/z3-wasm-backend.d.ts +88 -0
- package/dist/solver/smt-z3/z3-wasm-backend.d.ts.map +1 -0
- package/dist/solver/smt-z3/z3-wasm-backend.js +437 -0
- package/dist/solver/smt-z3/z3-wasm-backend.js.map +1 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts +2 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts.map +1 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js +203 -0
- package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js.map +1 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts +2 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts.map +1 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js +290 -0
- package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js.map +1 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts +2 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts.map +1 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.js +370 -0
- package/dist/tests/reasoning/probabilistic/probabilistic.test.js.map +1 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts +2 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts.map +1 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js +394 -0
- package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/features.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/features.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/features.test.js +72 -0
- package/dist/tests/tooling/proof-guidance/features.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/model.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/model.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/model.test.js +165 -0
- package/dist/tests/tooling/proof-guidance/model.test.js.map +1 -0
- package/dist/tests/tooling/proof-guidance/search.test.d.ts +2 -0
- package/dist/tests/tooling/proof-guidance/search.test.d.ts.map +1 -0
- package/dist/tests/tooling/proof-guidance/search.test.js +238 -0
- package/dist/tests/tooling/proof-guidance/search.test.js.map +1 -0
- package/dist/tests/type-theory/cubical/cubical.test.d.ts +2 -0
- package/dist/tests/type-theory/cubical/cubical.test.d.ts.map +1 -0
- package/dist/tests/type-theory/cubical/cubical.test.js +207 -0
- package/dist/tests/type-theory/cubical/cubical.test.js.map +1 -0
- package/dist/tooling/proof-guidance/features.d.ts +10 -0
- package/dist/tooling/proof-guidance/features.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/features.js +97 -0
- package/dist/tooling/proof-guidance/features.js.map +1 -0
- package/dist/tooling/proof-guidance/index.d.ts +5 -0
- package/dist/tooling/proof-guidance/index.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/index.js +25 -0
- package/dist/tooling/proof-guidance/index.js.map +1 -0
- package/dist/tooling/proof-guidance/model.d.ts +42 -0
- package/dist/tooling/proof-guidance/model.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/model.js +149 -0
- package/dist/tooling/proof-guidance/model.js.map +1 -0
- package/dist/tooling/proof-guidance/search.d.ts +7 -0
- package/dist/tooling/proof-guidance/search.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/search.js +102 -0
- package/dist/tooling/proof-guidance/search.js.map +1 -0
- package/dist/tooling/proof-guidance/types.d.ts +77 -0
- package/dist/tooling/proof-guidance/types.d.ts.map +1 -0
- package/dist/tooling/proof-guidance/types.js +8 -0
- package/dist/tooling/proof-guidance/types.js.map +1 -0
- package/dist/type-theory/cubical/equality.d.ts +4 -0
- package/dist/type-theory/cubical/equality.d.ts.map +1 -0
- package/dist/type-theory/cubical/equality.js +78 -0
- package/dist/type-theory/cubical/equality.js.map +1 -0
- package/dist/type-theory/cubical/index.d.ts +14 -0
- package/dist/type-theory/cubical/index.d.ts.map +1 -0
- package/dist/type-theory/cubical/index.js +71 -0
- package/dist/type-theory/cubical/index.js.map +1 -0
- package/dist/type-theory/cubical/infer.d.ts +18 -0
- package/dist/type-theory/cubical/infer.d.ts.map +1 -0
- package/dist/type-theory/cubical/infer.js +241 -0
- package/dist/type-theory/cubical/infer.js.map +1 -0
- package/dist/type-theory/cubical/interval.d.ts +12 -0
- package/dist/type-theory/cubical/interval.d.ts.map +1 -0
- package/dist/type-theory/cubical/interval.js +118 -0
- package/dist/type-theory/cubical/interval.js.map +1 -0
- package/dist/type-theory/cubical/normalize.d.ts +5 -0
- package/dist/type-theory/cubical/normalize.d.ts.map +1 -0
- package/dist/type-theory/cubical/normalize.js +191 -0
- package/dist/type-theory/cubical/normalize.js.map +1 -0
- package/dist/type-theory/cubical/path-algebra.d.ts +12 -0
- package/dist/type-theory/cubical/path-algebra.d.ts.map +1 -0
- package/dist/type-theory/cubical/path-algebra.js +109 -0
- package/dist/type-theory/cubical/path-algebra.js.map +1 -0
- package/dist/type-theory/cubical/substitute.d.ts +3 -0
- package/dist/type-theory/cubical/substitute.d.ts.map +1 -0
- package/dist/type-theory/cubical/substitute.js +109 -0
- package/dist/type-theory/cubical/substitute.js.map +1 -0
- package/dist/type-theory/cubical/types.d.ts +77 -0
- package/dist/type-theory/cubical/types.d.ts.map +1 -0
- package/dist/type-theory/cubical/types.js +258 -0
- package/dist/type-theory/cubical/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Cubical — Inferencia / chequeo de tipos
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Reglas principales del subset CTT-Lite:
|
|
7
|
+
//
|
|
8
|
+
// ── (I-form) i0 : I i1 : I iVar i : I
|
|
9
|
+
//
|
|
10
|
+
// Γ ⊢ r : I Γ ⊢ s : I
|
|
11
|
+
// ── (∧, ∨) r ∧ s : I r ∨ s : I
|
|
12
|
+
//
|
|
13
|
+
// Γ ⊢ r : I
|
|
14
|
+
// ── (~) ~ r : I
|
|
15
|
+
//
|
|
16
|
+
// Γ ⊢ A : I → Type Γ ⊢ x : A i0 Γ ⊢ y : A i1
|
|
17
|
+
// ── (PathP) PathP A x y : Type
|
|
18
|
+
//
|
|
19
|
+
// Γ, i : I ⊢ t : A i
|
|
20
|
+
// ── (pLam) λi. t : PathP (λi. A i) (t[i := i0]) (t[i := i1])
|
|
21
|
+
//
|
|
22
|
+
// Γ ⊢ p : PathP A x y Γ ⊢ r : I
|
|
23
|
+
// ── (pApp) p @ r : A r
|
|
24
|
+
// con (p @ i0) ≡ x y (p @ i1) ≡ y
|
|
25
|
+
//
|
|
26
|
+
// Γ ⊢ e : A ≃ B (codificado como Σ)
|
|
27
|
+
// Γ ⊢ partial : algún término candidato
|
|
28
|
+
// ── (glue) glue(e, partial) : PathP _ A B (precursor de ua)
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.cArrow = exports.intervalType = void 0;
|
|
31
|
+
exports.isInferErrorCubical = isInferErrorCubical;
|
|
32
|
+
exports.makeContext = makeContext;
|
|
33
|
+
exports.inferType = inferType;
|
|
34
|
+
exports.checkType = checkType;
|
|
35
|
+
const types_1 = require("./types");
|
|
36
|
+
Object.defineProperty(exports, "cArrow", { enumerable: true, get: function () { return types_1.cArrow; } });
|
|
37
|
+
const substitute_1 = require("./substitute");
|
|
38
|
+
const normalize_1 = require("./normalize");
|
|
39
|
+
const equality_1 = require("./equality");
|
|
40
|
+
const intervalType = () => ({ kind: 'var', name: '__I__' });
|
|
41
|
+
exports.intervalType = intervalType;
|
|
42
|
+
function isInferErrorCubical(r) {
|
|
43
|
+
return typeof r === 'object' && r !== null && 'error' in r && typeof r.error === 'string';
|
|
44
|
+
}
|
|
45
|
+
function makeContext() {
|
|
46
|
+
return { termVars: new Map(), intervalVars: new Set() };
|
|
47
|
+
}
|
|
48
|
+
function extendTerm(ctx, name, type) {
|
|
49
|
+
const next = {
|
|
50
|
+
termVars: new Map(ctx.termVars),
|
|
51
|
+
intervalVars: new Set(ctx.intervalVars),
|
|
52
|
+
};
|
|
53
|
+
next.termVars.set(name, type);
|
|
54
|
+
return next;
|
|
55
|
+
}
|
|
56
|
+
function extendInterval(ctx, name) {
|
|
57
|
+
const next = {
|
|
58
|
+
termVars: new Map(ctx.termVars),
|
|
59
|
+
intervalVars: new Set(ctx.intervalVars),
|
|
60
|
+
};
|
|
61
|
+
next.intervalVars.add(name);
|
|
62
|
+
return next;
|
|
63
|
+
}
|
|
64
|
+
function inferType(term, ctx = makeContext()) {
|
|
65
|
+
switch (term.kind) {
|
|
66
|
+
case 'i0':
|
|
67
|
+
case 'i1':
|
|
68
|
+
return (0, exports.intervalType)();
|
|
69
|
+
case 'iVar':
|
|
70
|
+
if (ctx.intervalVars.has(term.name))
|
|
71
|
+
return (0, exports.intervalType)();
|
|
72
|
+
return { error: `variable de intervalo libre: ${term.name}` };
|
|
73
|
+
case 'iNeg': {
|
|
74
|
+
if (!checkInterval(term.arg, ctx)) {
|
|
75
|
+
return { error: `~: argumento no es I: ${(0, types_1.termToStringCubical)(term.arg)}` };
|
|
76
|
+
}
|
|
77
|
+
return (0, exports.intervalType)();
|
|
78
|
+
}
|
|
79
|
+
case 'iMin':
|
|
80
|
+
case 'iMax': {
|
|
81
|
+
if (!checkInterval(term.left, ctx) || !checkInterval(term.right, ctx)) {
|
|
82
|
+
return { error: `${term.kind === 'iMin' ? '∧' : '∨'}: ambos lados deben ser I` };
|
|
83
|
+
}
|
|
84
|
+
return (0, exports.intervalType)();
|
|
85
|
+
}
|
|
86
|
+
case 'var': {
|
|
87
|
+
const t = ctx.termVars.get(term.name);
|
|
88
|
+
if (!t)
|
|
89
|
+
return { error: `variable libre sin tipo: ${term.name}` };
|
|
90
|
+
return t;
|
|
91
|
+
}
|
|
92
|
+
case 'universe':
|
|
93
|
+
return (0, types_1.cUniverse)(term.level + 1);
|
|
94
|
+
case 'pi': {
|
|
95
|
+
const domT = inferType(term.domain, ctx);
|
|
96
|
+
if (isInferErrorCubical(domT))
|
|
97
|
+
return domT;
|
|
98
|
+
const i = universeLevel(domT);
|
|
99
|
+
if (i === null) {
|
|
100
|
+
return {
|
|
101
|
+
error: `dominio de Π no es universo: ${(0, types_1.termToStringCubical)(term.domain)}`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const newCtx = extendTerm(ctx, term.bind, term.domain);
|
|
105
|
+
const codT = inferType(term.codomain, newCtx);
|
|
106
|
+
if (isInferErrorCubical(codT))
|
|
107
|
+
return codT;
|
|
108
|
+
const j = universeLevel(codT);
|
|
109
|
+
if (j === null) {
|
|
110
|
+
return {
|
|
111
|
+
error: `codominio de Π no es universo: ${(0, types_1.termToStringCubical)(term.codomain)}`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return (0, types_1.cUniverse)(Math.max(i, j));
|
|
115
|
+
}
|
|
116
|
+
case 'lam': {
|
|
117
|
+
const domT = inferType(term.domain, ctx);
|
|
118
|
+
if (isInferErrorCubical(domT))
|
|
119
|
+
return domT;
|
|
120
|
+
if (universeLevel(domT) === null) {
|
|
121
|
+
return {
|
|
122
|
+
error: `anotación de λ no es un tipo: ${(0, types_1.termToStringCubical)(term.domain)}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const newCtx = extendTerm(ctx, term.bind, term.domain);
|
|
126
|
+
const bodyT = inferType(term.body, newCtx);
|
|
127
|
+
if (isInferErrorCubical(bodyT))
|
|
128
|
+
return bodyT;
|
|
129
|
+
return { kind: 'pi', bind: term.bind, domain: term.domain, codomain: bodyT };
|
|
130
|
+
}
|
|
131
|
+
case 'app': {
|
|
132
|
+
const fnT = inferType(term.fn, ctx);
|
|
133
|
+
if (isInferErrorCubical(fnT))
|
|
134
|
+
return fnT;
|
|
135
|
+
const fnTNorm = (0, normalize_1.normalizeCubical)(fnT);
|
|
136
|
+
if (fnTNorm.kind !== 'pi') {
|
|
137
|
+
return { error: `aplicación requiere Π, encontré: ${(0, types_1.termToStringCubical)(fnTNorm)}` };
|
|
138
|
+
}
|
|
139
|
+
const argT = inferType(term.arg, ctx);
|
|
140
|
+
if (isInferErrorCubical(argT))
|
|
141
|
+
return argT;
|
|
142
|
+
if (!(0, equality_1.alphaBetaEqCubical)(fnTNorm.domain, argT)) {
|
|
143
|
+
return {
|
|
144
|
+
error: `tipo de argumento no coincide: esperaba ${(0, types_1.termToStringCubical)(fnTNorm.domain)}, obtuve ${(0, types_1.termToStringCubical)(argT)}`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return (0, substitute_1.substituteCubical)(fnTNorm.codomain, fnTNorm.bind, term.arg);
|
|
148
|
+
}
|
|
149
|
+
case 'pathP': {
|
|
150
|
+
// family : I → Type
|
|
151
|
+
const famT = inferType(term.family, ctx);
|
|
152
|
+
if (isInferErrorCubical(famT))
|
|
153
|
+
return famT;
|
|
154
|
+
const famTNorm = (0, normalize_1.normalizeCubical)(famT);
|
|
155
|
+
if (famTNorm.kind !== 'pi' || !isIntervalTypeMark(famTNorm.domain)) {
|
|
156
|
+
return {
|
|
157
|
+
error: `PathP: family debe ser I → Type, recibí: ${(0, types_1.termToStringCubical)(famTNorm)}`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// left : A i0, right : A i1
|
|
161
|
+
const leftT = inferType(term.left, ctx);
|
|
162
|
+
if (isInferErrorCubical(leftT))
|
|
163
|
+
return leftT;
|
|
164
|
+
const rightT = inferType(term.right, ctx);
|
|
165
|
+
if (isInferErrorCubical(rightT))
|
|
166
|
+
return rightT;
|
|
167
|
+
const expectedLeft = (0, normalize_1.normalizeCubical)((0, types_1.cApp)(term.family, (0, types_1.cI0)()));
|
|
168
|
+
const expectedRight = (0, normalize_1.normalizeCubical)((0, types_1.cApp)(term.family, (0, types_1.cI1)()));
|
|
169
|
+
if (!(0, equality_1.alphaBetaEqCubical)(leftT, expectedLeft)) {
|
|
170
|
+
return {
|
|
171
|
+
error: `PathP: left tiene tipo ${(0, types_1.termToStringCubical)(leftT)}, esperaba ${(0, types_1.termToStringCubical)(expectedLeft)}`,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
if (!(0, equality_1.alphaBetaEqCubical)(rightT, expectedRight)) {
|
|
175
|
+
return {
|
|
176
|
+
error: `PathP: right tiene tipo ${(0, types_1.termToStringCubical)(rightT)}, esperaba ${(0, types_1.termToStringCubical)(expectedRight)}`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const codLevel = universeLevel(famTNorm.codomain);
|
|
180
|
+
return (0, types_1.cUniverse)(codLevel ?? 0);
|
|
181
|
+
}
|
|
182
|
+
case 'pLam': {
|
|
183
|
+
// λi. t : PathP (λi. infer(t)) (t[i:=i0]) (t[i:=i1])
|
|
184
|
+
const innerCtx = extendInterval(ctx, term.bind);
|
|
185
|
+
const bodyT = inferType(term.body, innerCtx);
|
|
186
|
+
if (isInferErrorCubical(bodyT))
|
|
187
|
+
return bodyT;
|
|
188
|
+
const left = (0, normalize_1.normalizeCubical)((0, substitute_1.substituteCubical)(term.body, term.bind, (0, types_1.cI0)()));
|
|
189
|
+
const right = (0, normalize_1.normalizeCubical)((0, substitute_1.substituteCubical)(term.body, term.bind, (0, types_1.cI1)()));
|
|
190
|
+
const family = (0, types_1.cPLam)(term.bind, bodyT);
|
|
191
|
+
return (0, types_1.cPathP)(family, left, right);
|
|
192
|
+
}
|
|
193
|
+
case 'pApp': {
|
|
194
|
+
const pT = inferType(term.path, ctx);
|
|
195
|
+
if (isInferErrorCubical(pT))
|
|
196
|
+
return pT;
|
|
197
|
+
const pTNorm = (0, normalize_1.normalizeCubical)(pT);
|
|
198
|
+
if (pTNorm.kind !== 'pathP') {
|
|
199
|
+
return { error: `p @ r requiere PathP, recibí: ${(0, types_1.termToStringCubical)(pTNorm)}` };
|
|
200
|
+
}
|
|
201
|
+
if (!checkInterval(term.arg, ctx)) {
|
|
202
|
+
return { error: `p @ r: r debe ser I, recibí: ${(0, types_1.termToStringCubical)(term.arg)}` };
|
|
203
|
+
}
|
|
204
|
+
// tipo resultado = family @ r (que puede ser pApp o app dependiendo de la forma)
|
|
205
|
+
return (0, normalize_1.normalizeCubical)({ kind: 'pApp', path: pTNorm.family, arg: term.arg });
|
|
206
|
+
}
|
|
207
|
+
case 'glue': {
|
|
208
|
+
// Sintáctica: aceptamos equiv : Σ_A,B y devolvemos un PathP universo
|
|
209
|
+
const eT = inferType(term.equiv, ctx);
|
|
210
|
+
if (isInferErrorCubical(eT))
|
|
211
|
+
return eT;
|
|
212
|
+
// partial: opcional, contribuye sólo al término
|
|
213
|
+
const pT = inferType(term.partial, ctx);
|
|
214
|
+
if (isInferErrorCubical(pT))
|
|
215
|
+
return pT;
|
|
216
|
+
// glue introduce un path en el universo entre el dominio y codominio
|
|
217
|
+
// del par de tipos codificado en equiv. Sin estructura formal en este
|
|
218
|
+
// subset, devolvemos una marca de PathP genérica.
|
|
219
|
+
const family = (0, types_1.cPLam)('i', (0, types_1.cUniverse)(0));
|
|
220
|
+
return (0, types_1.cPathP)(family, term.equiv, term.equiv);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function checkInterval(t, ctx) {
|
|
225
|
+
const r = inferType(t, ctx);
|
|
226
|
+
return !isInferErrorCubical(r) && isIntervalTypeMark(r);
|
|
227
|
+
}
|
|
228
|
+
function isIntervalTypeMark(t) {
|
|
229
|
+
return t.kind === 'var' && t.name === '__I__';
|
|
230
|
+
}
|
|
231
|
+
function universeLevel(t) {
|
|
232
|
+
const n = (0, normalize_1.normalizeCubical)(t);
|
|
233
|
+
return n.kind === 'universe' ? n.level : null;
|
|
234
|
+
}
|
|
235
|
+
function checkType(term, expected, ctx = makeContext()) {
|
|
236
|
+
const inferred = inferType(term, ctx);
|
|
237
|
+
if (isInferErrorCubical(inferred))
|
|
238
|
+
return false;
|
|
239
|
+
return (0, equality_1.alphaBetaEqCubical)(inferred, expected);
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=infer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer.js","sourceRoot":"","sources":["../../../src/type-theory/cubical/infer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CubicalTerm } from './types';
|
|
2
|
+
export type IntervalValue = 0 | 1 | 'gen';
|
|
3
|
+
export declare function evalInterval(t: CubicalTerm, env?: Map<string, 0 | 1>): IntervalValue;
|
|
4
|
+
/**
|
|
5
|
+
* Normaliza algebraicamente una expresión de intervalo aplicando las
|
|
6
|
+
* leyes del retículo + involución. Si la expresión colapsa a un
|
|
7
|
+
* extremo, retorna i0 o i1; en caso contrario reescribe lo posible.
|
|
8
|
+
* No hace simplificaciones avanzadas (idempotencia, distributividad)
|
|
9
|
+
* para mantener el módulo predecible.
|
|
10
|
+
*/
|
|
11
|
+
export declare function normalizeInterval(t: CubicalTerm): CubicalTerm;
|
|
12
|
+
//# sourceMappingURL=interval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval.d.ts","sourceRoot":"","sources":["../../../src/type-theory/cubical/interval.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1C,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,GAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAa,GAAG,aAAa,CAwC/F;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAiC7D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Cubical — Álgebra del intervalo I
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// El intervalo formal I tiene dos extremos (i0, i1) y forma un
|
|
7
|
+
// retículo distributivo con involución 1 - (·):
|
|
8
|
+
//
|
|
9
|
+
// 0 ∧ i ≡ 0 1 ∧ i ≡ i i ∧ j ≡ j ∧ i
|
|
10
|
+
// 0 ∨ i ≡ i 1 ∨ i ≡ 1 i ∨ j ≡ j ∨ i
|
|
11
|
+
// 1 - 0 ≡ 1 1 - 1 ≡ 0 1 - (1 - i) ≡ i
|
|
12
|
+
//
|
|
13
|
+
// `evalInterval` interpreta una expresión bajo un environment de
|
|
14
|
+
// asignaciones concretas {i ↦ 0 ó 1}. Cuando una variable libre del
|
|
15
|
+
// intervalo no está en el environment, devolvemos 'gen' (genérico).
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.evalInterval = evalInterval;
|
|
18
|
+
exports.normalizeInterval = normalizeInterval;
|
|
19
|
+
function evalInterval(t, env = new Map()) {
|
|
20
|
+
switch (t.kind) {
|
|
21
|
+
case 'i0':
|
|
22
|
+
return 0;
|
|
23
|
+
case 'i1':
|
|
24
|
+
return 1;
|
|
25
|
+
case 'iVar': {
|
|
26
|
+
const v = env.get(t.name);
|
|
27
|
+
return v === undefined ? 'gen' : v;
|
|
28
|
+
}
|
|
29
|
+
case 'iNeg': {
|
|
30
|
+
const a = evalInterval(t.arg, env);
|
|
31
|
+
if (a === 0)
|
|
32
|
+
return 1;
|
|
33
|
+
if (a === 1)
|
|
34
|
+
return 0;
|
|
35
|
+
return 'gen';
|
|
36
|
+
}
|
|
37
|
+
case 'iMin': {
|
|
38
|
+
const l = evalInterval(t.left, env);
|
|
39
|
+
const r = evalInterval(t.right, env);
|
|
40
|
+
// 0 ∧ x ≡ 0
|
|
41
|
+
if (l === 0 || r === 0)
|
|
42
|
+
return 0;
|
|
43
|
+
// 1 ∧ x ≡ x
|
|
44
|
+
if (l === 1)
|
|
45
|
+
return r;
|
|
46
|
+
if (r === 1)
|
|
47
|
+
return l;
|
|
48
|
+
return 'gen';
|
|
49
|
+
}
|
|
50
|
+
case 'iMax': {
|
|
51
|
+
const l = evalInterval(t.left, env);
|
|
52
|
+
const r = evalInterval(t.right, env);
|
|
53
|
+
// 1 ∨ x ≡ 1
|
|
54
|
+
if (l === 1 || r === 1)
|
|
55
|
+
return 1;
|
|
56
|
+
// 0 ∨ x ≡ x
|
|
57
|
+
if (l === 0)
|
|
58
|
+
return r;
|
|
59
|
+
if (r === 0)
|
|
60
|
+
return l;
|
|
61
|
+
return 'gen';
|
|
62
|
+
}
|
|
63
|
+
default:
|
|
64
|
+
// No es expresión de intervalo: tratamos como genérica.
|
|
65
|
+
return 'gen';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Normaliza algebraicamente una expresión de intervalo aplicando las
|
|
70
|
+
* leyes del retículo + involución. Si la expresión colapsa a un
|
|
71
|
+
* extremo, retorna i0 o i1; en caso contrario reescribe lo posible.
|
|
72
|
+
* No hace simplificaciones avanzadas (idempotencia, distributividad)
|
|
73
|
+
* para mantener el módulo predecible.
|
|
74
|
+
*/
|
|
75
|
+
function normalizeInterval(t) {
|
|
76
|
+
switch (t.kind) {
|
|
77
|
+
case 'i0':
|
|
78
|
+
case 'i1':
|
|
79
|
+
case 'iVar':
|
|
80
|
+
return t;
|
|
81
|
+
case 'iNeg': {
|
|
82
|
+
const a = normalizeInterval(t.arg);
|
|
83
|
+
if (a.kind === 'i0')
|
|
84
|
+
return { kind: 'i1' };
|
|
85
|
+
if (a.kind === 'i1')
|
|
86
|
+
return { kind: 'i0' };
|
|
87
|
+
// involución: ~ ~ x ≡ x
|
|
88
|
+
if (a.kind === 'iNeg')
|
|
89
|
+
return a.arg;
|
|
90
|
+
return { kind: 'iNeg', arg: a };
|
|
91
|
+
}
|
|
92
|
+
case 'iMin': {
|
|
93
|
+
const l = normalizeInterval(t.left);
|
|
94
|
+
const r = normalizeInterval(t.right);
|
|
95
|
+
if (l.kind === 'i0' || r.kind === 'i0')
|
|
96
|
+
return { kind: 'i0' };
|
|
97
|
+
if (l.kind === 'i1')
|
|
98
|
+
return r;
|
|
99
|
+
if (r.kind === 'i1')
|
|
100
|
+
return l;
|
|
101
|
+
return { kind: 'iMin', left: l, right: r };
|
|
102
|
+
}
|
|
103
|
+
case 'iMax': {
|
|
104
|
+
const l = normalizeInterval(t.left);
|
|
105
|
+
const r = normalizeInterval(t.right);
|
|
106
|
+
if (l.kind === 'i1' || r.kind === 'i1')
|
|
107
|
+
return { kind: 'i1' };
|
|
108
|
+
if (l.kind === 'i0')
|
|
109
|
+
return r;
|
|
110
|
+
if (r.kind === 'i0')
|
|
111
|
+
return l;
|
|
112
|
+
return { kind: 'iMax', left: l, right: r };
|
|
113
|
+
}
|
|
114
|
+
default:
|
|
115
|
+
return t;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=interval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval.js","sourceRoot":"","sources":["../../../src/type-theory/cubical/interval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CubicalTerm } from './types';
|
|
2
|
+
export declare function reduceStepCubical(term: CubicalTerm): CubicalTerm;
|
|
3
|
+
export declare function normalizeCubical(term: CubicalTerm, maxSteps?: number): CubicalTerm;
|
|
4
|
+
export declare function isNormalCubical(term: CubicalTerm): boolean;
|
|
5
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../src/type-theory/cubical/normalize.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAoFhE;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,SAAO,GAAG,WAAW,CAQhF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAE1D"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Cubical — Reducción β + reglas computacionales del intervalo
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Reglas extendidas vs HoTT:
|
|
7
|
+
//
|
|
8
|
+
// (λi. t) @ r ↦ t[i := r] (β para path)
|
|
9
|
+
// ~0 ↦ 1 ~1 ↦ 0 ~(~i) ↦ i (involución)
|
|
10
|
+
// 0 ∧ i ↦ 0 1 ∧ i ↦ i (min)
|
|
11
|
+
// 0 ∨ i ↦ i 1 ∨ i ↦ 1 (max)
|
|
12
|
+
//
|
|
13
|
+
// Las β estándar (app sobre lam) se heredan literalmente del fragment
|
|
14
|
+
// MLTT embebido.
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.reduceStepCubical = reduceStepCubical;
|
|
17
|
+
exports.normalizeCubical = normalizeCubical;
|
|
18
|
+
exports.isNormalCubical = isNormalCubical;
|
|
19
|
+
const substitute_1 = require("./substitute");
|
|
20
|
+
const interval_1 = require("./interval");
|
|
21
|
+
function reduceStepCubical(term) {
|
|
22
|
+
switch (term.kind) {
|
|
23
|
+
case 'i0':
|
|
24
|
+
case 'i1':
|
|
25
|
+
case 'iVar':
|
|
26
|
+
case 'var':
|
|
27
|
+
case 'universe':
|
|
28
|
+
return term;
|
|
29
|
+
case 'iNeg':
|
|
30
|
+
case 'iMin':
|
|
31
|
+
case 'iMax': {
|
|
32
|
+
const reduced = (0, interval_1.normalizeInterval)(term);
|
|
33
|
+
// normalizeInterval ya es la forma normal: si difiere estructuralmente
|
|
34
|
+
// del original, devolvemos la nueva forma; si no, intentamos reducir
|
|
35
|
+
// sub-componentes en uno de los sub-términos.
|
|
36
|
+
if (!sameKind(reduced, term))
|
|
37
|
+
return reduced;
|
|
38
|
+
if (term.kind === 'iNeg') {
|
|
39
|
+
const a2 = reduceStepCubical(term.arg);
|
|
40
|
+
if (a2 !== term.arg)
|
|
41
|
+
return { kind: 'iNeg', arg: a2 };
|
|
42
|
+
return term;
|
|
43
|
+
}
|
|
44
|
+
const l2 = reduceStepCubical(term.left);
|
|
45
|
+
if (l2 !== term.left)
|
|
46
|
+
return { ...term, left: l2 };
|
|
47
|
+
const r2 = reduceStepCubical(term.right);
|
|
48
|
+
if (r2 !== term.right)
|
|
49
|
+
return { ...term, right: r2 };
|
|
50
|
+
return term;
|
|
51
|
+
}
|
|
52
|
+
case 'pathP': {
|
|
53
|
+
const f2 = reduceStepCubical(term.family);
|
|
54
|
+
if (f2 !== term.family)
|
|
55
|
+
return { ...term, family: f2 };
|
|
56
|
+
const l2 = reduceStepCubical(term.left);
|
|
57
|
+
if (l2 !== term.left)
|
|
58
|
+
return { ...term, left: l2 };
|
|
59
|
+
const r2 = reduceStepCubical(term.right);
|
|
60
|
+
if (r2 !== term.right)
|
|
61
|
+
return { ...term, right: r2 };
|
|
62
|
+
return term;
|
|
63
|
+
}
|
|
64
|
+
case 'pLam': {
|
|
65
|
+
const b2 = reduceStepCubical(term.body);
|
|
66
|
+
if (b2 !== term.body)
|
|
67
|
+
return { kind: 'pLam', bind: term.bind, body: b2 };
|
|
68
|
+
return term;
|
|
69
|
+
}
|
|
70
|
+
case 'pApp': {
|
|
71
|
+
// β del intervalo: (λi. t) @ r ↦ t[i := r]
|
|
72
|
+
if (term.path.kind === 'pLam') {
|
|
73
|
+
return (0, substitute_1.substituteCubical)(term.path.body, term.path.bind, term.arg);
|
|
74
|
+
}
|
|
75
|
+
const p2 = reduceStepCubical(term.path);
|
|
76
|
+
if (p2 !== term.path)
|
|
77
|
+
return { kind: 'pApp', path: p2, arg: term.arg };
|
|
78
|
+
const a2 = reduceStepCubical(term.arg);
|
|
79
|
+
if (a2 !== term.arg)
|
|
80
|
+
return { kind: 'pApp', path: term.path, arg: a2 };
|
|
81
|
+
return term;
|
|
82
|
+
}
|
|
83
|
+
case 'glue': {
|
|
84
|
+
const e2 = reduceStepCubical(term.equiv);
|
|
85
|
+
if (e2 !== term.equiv)
|
|
86
|
+
return { kind: 'glue', equiv: e2, partial: term.partial };
|
|
87
|
+
const p2 = reduceStepCubical(term.partial);
|
|
88
|
+
if (p2 !== term.partial)
|
|
89
|
+
return { kind: 'glue', equiv: term.equiv, partial: p2 };
|
|
90
|
+
return term;
|
|
91
|
+
}
|
|
92
|
+
case 'pi': {
|
|
93
|
+
const d2 = reduceStepCubical(term.domain);
|
|
94
|
+
if (d2 !== term.domain)
|
|
95
|
+
return { ...term, domain: d2 };
|
|
96
|
+
const c2 = reduceStepCubical(term.codomain);
|
|
97
|
+
if (c2 !== term.codomain)
|
|
98
|
+
return { ...term, codomain: c2 };
|
|
99
|
+
return term;
|
|
100
|
+
}
|
|
101
|
+
case 'lam': {
|
|
102
|
+
const d2 = reduceStepCubical(term.domain);
|
|
103
|
+
if (d2 !== term.domain)
|
|
104
|
+
return { ...term, domain: d2 };
|
|
105
|
+
const b2 = reduceStepCubical(term.body);
|
|
106
|
+
if (b2 !== term.body)
|
|
107
|
+
return { ...term, body: b2 };
|
|
108
|
+
return term;
|
|
109
|
+
}
|
|
110
|
+
case 'app': {
|
|
111
|
+
if (term.fn.kind === 'lam') {
|
|
112
|
+
return (0, substitute_1.substituteCubical)(term.fn.body, term.fn.bind, term.arg);
|
|
113
|
+
}
|
|
114
|
+
const fn2 = reduceStepCubical(term.fn);
|
|
115
|
+
if (fn2 !== term.fn)
|
|
116
|
+
return { kind: 'app', fn: fn2, arg: term.arg };
|
|
117
|
+
const arg2 = reduceStepCubical(term.arg);
|
|
118
|
+
if (arg2 !== term.arg)
|
|
119
|
+
return { kind: 'app', fn: term.fn, arg: arg2 };
|
|
120
|
+
return term;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function sameKind(a, b) {
|
|
125
|
+
return a.kind === b.kind;
|
|
126
|
+
}
|
|
127
|
+
function normalizeCubical(term, maxSteps = 1000) {
|
|
128
|
+
let current = term;
|
|
129
|
+
for (let i = 0; i < maxSteps; i++) {
|
|
130
|
+
const next = reduceStepCubical(current);
|
|
131
|
+
if (deepEqual(next, current))
|
|
132
|
+
return current;
|
|
133
|
+
current = next;
|
|
134
|
+
}
|
|
135
|
+
return current;
|
|
136
|
+
}
|
|
137
|
+
function isNormalCubical(term) {
|
|
138
|
+
return deepEqual(reduceStepCubical(term), term);
|
|
139
|
+
}
|
|
140
|
+
function deepEqual(a, b) {
|
|
141
|
+
if (a === b)
|
|
142
|
+
return true;
|
|
143
|
+
if (a.kind !== b.kind)
|
|
144
|
+
return false;
|
|
145
|
+
switch (a.kind) {
|
|
146
|
+
case 'i0':
|
|
147
|
+
case 'i1':
|
|
148
|
+
return true;
|
|
149
|
+
case 'universe':
|
|
150
|
+
return a.level === b.level;
|
|
151
|
+
case 'var':
|
|
152
|
+
case 'iVar':
|
|
153
|
+
return a.name === b.name;
|
|
154
|
+
case 'iNeg':
|
|
155
|
+
return deepEqual(a.arg, b.arg);
|
|
156
|
+
case 'iMin':
|
|
157
|
+
case 'iMax': {
|
|
158
|
+
const bb = b;
|
|
159
|
+
return deepEqual(a.left, bb.left) && deepEqual(a.right, bb.right);
|
|
160
|
+
}
|
|
161
|
+
case 'pathP': {
|
|
162
|
+
const bb = b;
|
|
163
|
+
return (deepEqual(a.family, bb.family) && deepEqual(a.left, bb.left) && deepEqual(a.right, bb.right));
|
|
164
|
+
}
|
|
165
|
+
case 'pLam': {
|
|
166
|
+
const bb = b;
|
|
167
|
+
return a.bind === bb.bind && deepEqual(a.body, bb.body);
|
|
168
|
+
}
|
|
169
|
+
case 'pApp': {
|
|
170
|
+
const bb = b;
|
|
171
|
+
return deepEqual(a.path, bb.path) && deepEqual(a.arg, bb.arg);
|
|
172
|
+
}
|
|
173
|
+
case 'glue': {
|
|
174
|
+
const bb = b;
|
|
175
|
+
return deepEqual(a.equiv, bb.equiv) && deepEqual(a.partial, bb.partial);
|
|
176
|
+
}
|
|
177
|
+
case 'pi': {
|
|
178
|
+
const bb = b;
|
|
179
|
+
return (a.bind === bb.bind && deepEqual(a.domain, bb.domain) && deepEqual(a.codomain, bb.codomain));
|
|
180
|
+
}
|
|
181
|
+
case 'lam': {
|
|
182
|
+
const bb = b;
|
|
183
|
+
return a.bind === bb.bind && deepEqual(a.domain, bb.domain) && deepEqual(a.body, bb.body);
|
|
184
|
+
}
|
|
185
|
+
case 'app': {
|
|
186
|
+
const bb = b;
|
|
187
|
+
return deepEqual(a.fn, bb.fn) && deepEqual(a.arg, bb.arg);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/type-theory/cubical/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CubicalTerm } from './types';
|
|
2
|
+
export declare function reflPath(x: CubicalTerm): CubicalTerm;
|
|
3
|
+
export declare function pathInverse(p: CubicalTerm): CubicalTerm;
|
|
4
|
+
export declare function pathCompose(p: CubicalTerm, q: CubicalTerm): CubicalTerm;
|
|
5
|
+
/**
|
|
6
|
+
* Glue: convierte una equivalencia A ≃ B (codificada como par Σ con
|
|
7
|
+
* dominio y codominio) en un Path en el universo. Es el precursor
|
|
8
|
+
* sintáctico de la computación de ua en CTT — aquí no implementamos
|
|
9
|
+
* la regla de cómputo full, sólo la introducción del término.
|
|
10
|
+
*/
|
|
11
|
+
export declare function glue(equiv: CubicalTerm, partial: CubicalTerm): CubicalTerm;
|
|
12
|
+
//# sourceMappingURL=path-algebra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-algebra.d.ts","sourceRoot":"","sources":["../../../src/type-theory/cubical/path-algebra.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAGpD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAOvD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW,CAkBvE;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,CAE1E"}
|