def del.bnd

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

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

1165def del.bnd(
1166  ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~trans: Trans(~K, ~cmp),
1167  t: O.OMap<K, V>, +lb: Maybe<&2, K>, +ub: Maybe<&2, K>, +k: K,
1168  +bt: {Laws.bounded(~K, ~V, ~cmp, t, lb, ub) == True{} : Bool}
1169) -> {Laws.bounded(~K, ~V, ~cmp, O.OMap.del(~K, ~V, ~cmp, t, k), lb, ub) == True{} : Bool}:
1170  match t:
1171    case O.OTip{}:
1172      {==}
1173    case O.OBin{+s, +key, +val, +lo, +hi}:
1174      +b_a = bn.a(~K, ~V, ~cmp, lb, ub, key, val, lo, hi, bt)
1175      +b_b = bn.b(~K, ~V, ~cmp, lb, ub, key, val, lo, hi, bt)
1176      +b_l = bn.l(~K, ~V, ~cmp, lb, ub, key, val, lo, hi, bt)
1177      +b_h = bn.h(~K, ~V, ~cmp, lb, ub, key, val, lo, hi, bt)
1178      cmp.split(O.OMap<K, V>, Bool, y => Laws.bounded(~K, ~V, ~cmp, y, lb, ub), True{},
1179        cmp(k, key),
1180        u => O.OMap.balance(K, V, key, val, O.OMap.del(~K, ~V, ~cmp, lo, k), hi),
1181        u => O.OMap.glue(K, V, lo, hi),
1182        u => O.OMap.balance(K, V, key, val, lo, O.OMap.del(~K, ~V, ~cmp, hi, k)),
1183        e => balance.bnd(~K, ~V, ~cmp, ~trans, lb, ub, key, val,
1184          O.OMap.del(~K, ~V, ~cmp, lo, k), hi, b_a, b_b,
1185          del.bnd(~K, ~V, ~cmp, ~trans, lo, lb, Some{key}, k, b_l), b_h),
1186        e => glue.bnd(~K, ~V, ~cmp, ~trans, hi, lo, lb, ub, key, b_a, b_b, b_l, b_h),
1187        e => balance.bnd(~K, ~V, ~cmp, ~trans, lb, ub, key, val, lo,
1188          O.OMap.del(~K, ~V, ~cmp, hi, k), b_a, b_b, b_l,
1189          del.bnd(~K, ~V, ~cmp, ~trans, hi, Some{key}, ub, k, b_h)))

Uses (16)

Used by (1)