def rot_hi.double.bnd

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

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

407def rot_hi.double.bnd(
408  ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~trans: Trans(~K, ~cmp),
409  lh: O.OMap<K, V>, +lb: Maybe<&2, K>, +ub: Maybe<&2, K>, +k: K, +v: V,
410  +lk: K, +lv: V, +ll: O.OMap<K, V>, +hi: O.OMap<K, V>,
411  +eb: {Laws.below(~K, ~cmp, ub, k) == True{} : Bool},
412  +el: {Laws.bounded(~K, ~V, ~cmp, O.OBin{0, lk, lv, ll, lh}, lb, Some{k}) == True{} : Bool},
413  eh: {Laws.bounded(~K, ~V, ~cmp, hi, Some{k}, ub) == True{} : Bool}
414) -> {Laws.bounded(~K, ~V, ~cmp,
415       O.OMap.rot_hi.double(K, V, k, v, lk, lv, ll, lh, hi), lb, ub) == True{} : Bool}:
416  match lh:
417    case O.OTip{}:
418      rot_hi.single.bnd(~K, ~V, ~cmp, ~trans, lb, ub, k, v, lk, lv, ll, O.OTip{}, hi,
419        eb, el, eh)
420    case O.OBin{s, +mk, +mv, +ml, +mh}:
421      +lh = {O.OBin{0, mk, mv, ml, mh} : O.OMap<K, V>}
422      +l_a = bn.a(~K, ~V, ~cmp, lb, Some{k}, lk, lv, ll, lh, el)
423      +l_h = bn.h(~K, ~V, ~cmp, lb, Some{k}, lk, lv, ll, lh, el)
424      +m_a = bn.a(~K, ~V, ~cmp, Some{lk}, Some{k}, mk, mv, ml, mh, l_h)
425      +m_b = bn.b(~K, ~V, ~cmp, Some{lk}, Some{k}, mk, mv, ml, mh, l_h)
426      bn.i(~K, ~V, ~cmp, lb, ub, mk, mv, O.OMap.bin(K, V, lk, lv, ll, ml),
427        O.OMap.bin(K, V, k, v, mh, hi),
428        above_trans(~K, ~cmp, ~trans, lb, lk, mk, l_a, m_a),
429        below_trans(~K, ~cmp, ~trans, ub, mk, k, m_b, eb),
430        bn.i(~K, ~V, ~cmp, lb, Some{mk}, lk, lv, ll, ml, l_a, m_a,
431          bn.l(~K, ~V, ~cmp, lb, Some{k}, lk, lv, ll, lh, el),
432          bn.l(~K, ~V, ~cmp, Some{lk}, Some{k}, mk, mv, ml, mh, l_h)),
433        bn.i(~K, ~V, ~cmp, Some{mk}, ub, k, v, mh, hi, m_b, eb,
434          bn.h(~K, ~V, ~cmp, Some{lk}, Some{k}, mk, mv, ml, mh, l_h), eh))

Uses (17)

Used by (1)