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)