def pm.fin.bnd.go
bend-kit-collections@0.1.4.1 · PROOF.bend:1071
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
1071def pm.fin.bnd.go(
1072 ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~trans: Trans(~K, ~cmp),
1073 +mk: K, +mv: V, +t: O.OMap<K, V>, +lb: Maybe<&2, K>, +ub: Maybe<&2, K>, +k: K,
1074 +v: V, +hi: O.OMap<K, V>,
1075 +ih: {PM(~K, ~V, ~cmp, lb, Some{k}, {(mk, mv, t) : K & V & O.OMap<K, V>}) == True{} : Bool},
1076 +eb: {Laws.below(~K, ~cmp, ub, k) == True{} : Bool},
1077 eh: {Laws.bounded(~K, ~V, ~cmp, hi, Some{k}, ub) == True{} : Bool}
1078) -> {PM(~K, ~V, ~cmp, lb, ub,
1079 O.OMap.pop_min.fin(K, V, k, v, hi, {(mk, mv, t) : K & V & O.OMap<K, V>})) == True{} : Bool}:
1080 +ab = Bool.and(Laws.above(~K, ~cmp, lb, mk), Laws.below(~K, ~cmp, Some{k}, mk))
1081 +c = Laws.bounded(~K, ~V, ~cmp, t, Some{mk}, Some{k})
1082 +eab = MBool.eq_true_of_and_left(ab, c, ih)
1083 +mkk = MBool.eq_true_of_and_right(Laws.above(~K, ~cmp, lb, mk), Laws.below(~K, ~cmp, Some{k}, mk), eab)
1084 MBool.and_eq_true(Bool.and(Laws.above(~K, ~cmp, lb, mk), Laws.below(~K, ~cmp, ub, mk)), Laws.bounded(~K, ~V, ~cmp, O.OMap.balance(K, V, k, v, t, hi), Some{mk}, ub), MBool.and_eq_true(Laws.above(~K, ~cmp, lb, mk), Laws.below(~K, ~cmp, ub, mk), MBool.eq_true_of_and_left(Laws.above(~K, ~cmp, lb, mk), Laws.below(~K, ~cmp, Some{k}, mk), eab), below_trans(~K, ~cmp, ~trans, ub, mk, k, mkk, eb)), balance.bnd(~K, ~V, ~cmp, ~trans, Some{mk}, ub, k, v, t, hi, mkk, eb,
1085 MBool.eq_true_of_and_right(ab, c, ih), eh))