def glue.fin.bnd.go
bend-kit-collections@0.1.4.1 · PROOF.bend:1117
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
1117def glue.fin.bnd.go(
1118 ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~trans: Trans(~K, ~cmp),
1119 +mk: K, +mv: V, +t: O.OMap<K, V>, +lo: O.OMap<K, V>, +lb: Maybe<&2, K>,
1120 +ub: Maybe<&2, K>, +key: K,
1121 eka: {Laws.above(~K, ~cmp, lb, key) == True{} : Bool},
1122 el: {Laws.bounded(~K, ~V, ~cmp, lo, lb, Some{key}) == True{} : Bool},
1123 +pmr: {PM(~K, ~V, ~cmp, Some{key}, ub, {(mk, mv, t) : K & V & O.OMap<K, V>}) == True{} : Bool}
1124) -> {Laws.bounded(~K, ~V, ~cmp,
1125 O.OMap.glue.fin(K, V, lo, {(mk, mv, t) : K & V & O.OMap<K, V>}), lb, ub) == True{} : Bool}:
1126 +ab = Bool.and(Laws.above(~K, ~cmp, Some{key}, mk), Laws.below(~K, ~cmp, ub, mk))
1127 +c = Laws.bounded(~K, ~V, ~cmp, t, Some{mk}, ub)
1128 +eab = MBool.eq_true_of_and_left(ab, c, pmr)
1129 +km = MBool.eq_true_of_and_left(Laws.above(~K, ~cmp, Some{key}, mk), Laws.below(~K, ~cmp, ub, mk), eab)
1130 balance.bnd(~K, ~V, ~cmp, ~trans, lb, ub, mk, mv, lo, t,
1131 above_trans(~K, ~cmp, ~trans, lb, key, mk, eka, km),
1132 MBool.eq_true_of_and_right(Laws.above(~K, ~cmp, Some{key}, mk), Laws.below(~K, ~cmp, ub, mk), eab),
1133 weaken_hi(~K, ~V, ~cmp, ~trans, lo, lb, key, Some{mk}, el, km),
1134 MBool.eq_true_of_and_right(ab, c, pmr))