def balance.if.bnd

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

import bend-kit-collections@0.1.4.1/PROOF.bend as PROOF
import Base
import bend-kit-collections@0.1.4.1/LAWS.bend as Laws
import bend-kit-collections@0.1.4.1/omap.bend as O

469def balance.if.bnd(
470  ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~trans: Trans(~K, ~cmp),
471  heavy_hi: Bool, heavy_lo: Bool, +lb: Maybe<&2, K>, +ub: Maybe<&2, K>, +k: K,
472  +v: V, +lo: O.OMap<K, V>, +hi: O.OMap<K, V>,
473  +ea: {Laws.above(~K, ~cmp, lb, k) == True{} : Bool},
474  +eb: {Laws.below(~K, ~cmp, ub, k) == True{} : Bool},
475  +el: {Laws.bounded(~K, ~V, ~cmp, lo, lb, Some{k}) == True{} : Bool},
476  +eh: {Laws.bounded(~K, ~V, ~cmp, hi, Some{k}, ub) == True{} : Bool}
477) -> {Laws.bounded(~K, ~V, ~cmp,
478       O.OMap.balance.if(K, V, heavy_hi, heavy_lo, k, v, lo, hi), lb, ub) == True{} : Bool}:
479  match heavy_hi heavy_lo:
480    case True{} _:
481      rot_lo.bnd(~K, ~V, ~cmp, ~trans, hi, lb, ub, k, v, lo, ea, eb, el, eh)
482    case False{} True{}:
483      rot_hi.bnd(~K, ~V, ~cmp, ~trans, lo, lb, ub, k, v, hi, ea, eb, el, eh)
484    case False{} False{}:
485      bn.i(~K, ~V, ~cmp, lb, ub, k, v, lo, hi, ea, eb, el, eh)

Uses (12)

Used by (1)