def bif.wb

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

import bend-kit-collections@0.1.4.1/PROOF.bend as PROOF
import Base
import bend-mathlib@0.7.4.0/bool.bend as MBool
import bend-kit-collections@0.1.4.1/LAWS.bend as Laws
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

1434def bif.wb(
1435  -K: Data, -V: Data, heavy_hi: Bool, heavy_lo: Bool, +k: K, +v: V,
1436  +lo: O.OMap<K, V>, +hi: O.OMap<K, V>,
1437  eh: {Laws.g_heavy_hi(K, V, lo, hi) == heavy_hi : Bool},
1438  el: {Laws.g_heavy_lo(K, V, lo, hi) == heavy_lo : Bool},
1439  wbl: {WB(K, V, lo) == True{} : Bool}, wbh: {WB(K, V, hi) == True{} : Bool},
1440  +alm: {Ord.alm(W(K, V, lo), W(K, V, hi)) == True{} : Bool}
1441) -> {WB(K, V, Laws.g_balance.if(K, V, heavy_hi, heavy_lo, k, v, lo, hi)) == True{} : Bool}:
1442  match heavy_hi heavy_lo:
1443    case True{} _:
1444      rl.wb(K, V, hi, k, v, lo, wbl, wbh,
1445        Ord.gt_le(W(K, V, hi), Nat.mul(3n, W(K, V, lo)), eh), MBool.eq_true_of_and_left(Nat.is_le(W(K, V, hi), Nat.add(3n, Nat.mul(3n, W(K, V, lo)))), Nat.is_le(W(K, V, lo), Nat.add(3n, Nat.mul(3n, W(K, V, hi)))), alm))
1446    case False{} True{}:
1447      rh.wb(K, V, lo, k, v, hi, wbl, wbh,
1448        Ord.gt_le(W(K, V, lo), Nat.mul(3n, W(K, V, hi)), el), MBool.eq_true_of_and_right(Nat.is_le(W(K, V, hi), Nat.add(3n, Nat.mul(3n, W(K, V, lo)))), Nat.is_le(W(K, V, lo), Nat.add(3n, Nat.mul(3n, W(K, V, hi)))), alm))
1449    case False{} False{}:
1450      wb.i(K, V, k, v, lo, hi,
1451        MBool.and_eq_true(Nat.is_le(W(K, V, hi), Nat.mul(3n, W(K, V, lo))), Nat.is_le(W(K, V, lo), Nat.mul(3n, W(K, V, hi))), Ord.ngt_le(W(K, V, hi), Nat.mul(3n, W(K, V, lo)), eh), Ord.ngt_le(W(K, V, lo), Nat.mul(3n, W(K, V, hi)), el)),
1452        wbl, wbh)

Uses (19)

Used by (1)