def rhd.wb

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

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

1368def rhd.wb(
1369  -K: Data, -V: Data, lh: O.OMap<K, V>, +k: K, +v: V, +lk: K, +lv: V,
1370  +ll: O.OMap<K, V>, +hi: O.OMap<K, V>,
1371  +wbl: {WB(K, V, O.OBin{0, lk, lv, ll, lh}) == True{} : Bool},
1372  wbh: {WB(K, V, hi) == True{} : Bool},
1373  +heavy: Ord.LE(1n+Nat.mul(3n, W(K, V, hi)), Nat.add(W(K, V, ll), W(K, V, lh))),
1374  +alm: Ord.LE(Nat.add(W(K, V, ll), W(K, V, lh)), Nat.add(3n, Nat.mul(3n, W(K, V, hi)))),
1375  +hd: Ord.LE(Nat.mul(2n, W(K, V, ll)), W(K, V, lh))
1376) -> {WB(K, V, O.OMap.rot_hi.double(K, V, k, v, lk, lv, ll, lh, hi)) == True{} : Bool}:
1377  match lh:
1378    case O.OTip{}:
1379      Empty.absurd({WB(K, V, O.OMap.rot_hi.double(K, V, k, v, lk, lv, ll, O.OTip{}, hi)) == True{} : Bool}, Ord.dtip(W(K, V, ll), hd, w_pos(K, V, ll)))
1380    case O.OBin{s, +mk, +mv, +ml, +mh}:
1381      +lh = {O.OBin{0, mk, mv, ml, mh} : O.OMap<K, V>}
1382      +l = W(K, V, hi)
1383      +x = W(K, V, mh)
1384      +y = W(K, V, ml)
1385      +b = W(K, V, ll)
1386      +okl = wb.ok(K, V, lk, lv, ll, lh, wbl)
1387      +h1 = Ord.wok_l(b, Nat.add(y, x), okl)
1388      +h2 = Ord.wok_r(b, Nat.add(y, x), okl)
1389      +wbm = wb.h(K, V, lk, lv, ll, lh, wbl)
1390      +okm = wb.ok(K, V, mk, mv, ml, mh, wbm)
1391      +h5 = Ord.wok_l(y, x, okm)
1392      +h6 = Ord.wok_r(y, x, okm)
1393      +pl = w_pos(K, V, hi)
1394      +px = w_pos(K, V, mh)
1395      +py = w_pos(K, V, ml)
1396      +pb = w_pos(K, V, ll)
1397      wb.i(K, V, mk, mv, O.OMap.bin(K, V, lk, lv, ll, ml), O.OMap.bin(K, V, k, v, mh, hi),
1398        Ord.rhd.w0(l, x, y, b, h1, h2, heavy, alm, hd, h5, h6, pl, px, py, pb),
1399        wb.i(K, V, lk, lv, ll, ml, Ord.rhd.w1(l, x, y, b, h1, h2, heavy, alm, hd, h5, h6, pl, px, py, pb),
1400          wb.l(K, V, lk, lv, ll, lh, wbl), wb.l(K, V, mk, mv, ml, mh, wbm)),
1401        wb.i(K, V, k, v, mh, hi, Ord.rhd.w2(l, x, y, b, h1, h2, heavy, alm, hd, h5, h6, pl, px, py, pb),
1402          wb.h(K, V, mk, mv, ml, mh, wbm), wbh))

Uses (22)

Used by (1)