def rld.wb

bend-kit-collections@0.1.4.1 · PROOF.bend:1277

import bend-kit-collections@0.1.4.1/PROOF.bend as PROOF
import Base
import bend-kit-collections@0.1.4.1/omap.bend as O
import bend-kit-collections@0.1.4.1/nat_order.bend as Ord

1277def rld.wb(
1278  -K: Data, -V: Data, hl: O.OMap<K, V>, +k: K, +v: V, +lo: O.OMap<K, V>, +hk: K, +hv: V,
1279  +hh: O.OMap<K, V>,
1280  wbl: {WB(K, V, lo) == True{} : Bool},
1281  +wbh: {WB(K, V, O.OBin{0, hk, hv, hl, hh}) == True{} : Bool},
1282  +heavy: Ord.LE(1n+Nat.mul(3n, W(K, V, lo)), Nat.add(W(K, V, hl), W(K, V, hh))),
1283  +alm: Ord.LE(Nat.add(W(K, V, hl), W(K, V, hh)), Nat.add(3n, Nat.mul(3n, W(K, V, lo)))),
1284  +hd: Ord.LE(Nat.mul(2n, W(K, V, hh)), W(K, V, hl))
1285) -> {WB(K, V, O.OMap.rot_lo.double(K, V, k, v, lo, hk, hv, hl, hh)) == True{} : Bool}:
1286  match hl:
1287    case O.OTip{}:
1288      Empty.absurd({WB(K, V, O.OMap.rot_lo.double(K, V, k, v, lo, hk, hv, O.OTip{}, hh)) == True{} : Bool}, Ord.dtip(W(K, V, hh), hd, w_pos(K, V, hh)))
1289    case O.OBin{s, +mk, +mv, +ml, +mh}:
1290      +hl = {O.OBin{0, mk, mv, ml, mh} : O.OMap<K, V>}
1291      +l = W(K, V, lo)
1292      +x = W(K, V, ml)
1293      +y = W(K, V, mh)
1294      +b = W(K, V, hh)
1295      +okh = wb.ok(K, V, hk, hv, hl, hh, wbh)
1296      +h1 = Ord.wok_r(Nat.add(x, y), b, okh)
1297      +h2 = Ord.wok_l(Nat.add(x, y), b, okh)
1298      +wbm = wb.l(K, V, hk, hv, hl, hh, wbh)
1299      +okm = wb.ok(K, V, mk, mv, ml, mh, wbm)
1300      +h5 = Ord.wok_r(x, y, okm)
1301      +h6 = Ord.wok_l(x, y, okm)
1302      +pl = w_pos(K, V, lo)
1303      +px = w_pos(K, V, ml)
1304      +py = w_pos(K, V, mh)
1305      +pb = w_pos(K, V, hh)
1306      wb.i(K, V, mk, mv, O.OMap.bin(K, V, k, v, lo, ml), O.OMap.bin(K, V, hk, hv, mh, hh),
1307        Ord.rld.w0(l, x, y, b, h1, h2, heavy, alm, hd, h5, h6, pl, px, py, pb),
1308        wb.i(K, V, k, v, lo, ml, Ord.rld.w1(l, x, y, b, h1, h2, heavy, alm, hd, h5, h6, pl, px, py, pb),
1309          wbl, wb.l(K, V, mk, mv, ml, mh, wbm)),
1310        wb.i(K, V, hk, hv, mh, hh, Ord.rld.w2(l, x, y, b, h1, h2, heavy, alm, hd, h5, h6, pl, px, py, pb),
1311          wb.h(K, V, mk, mv, ml, mh, wbm), wb.h(K, V, hk, hv, hl, hh, wbh)))

Uses (22)

Used by (1)