def rot_hi.double.get2

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

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

775def rot_hi.double.get2(
776  ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~refl: Refl(~K, ~cmp), ~eq: Eq(~K, ~cmp),
777  ~flip: Flip(~K, ~cmp), ~trans: Trans(~K, ~cmp),
778  +x: K, +k: K, +v: V, +lk: K, +lv: V, +ll: O.OMap<K, V>, +mk: K, +mv: V,
779  +ml: O.OMap<K, V>, +mh: O.OMap<K, V>, +hi: O.OMap<K, V>,
780  +lkm: {cmp(lk, mk) == LT{} : Cmp}, +mkk: {cmp(mk, k) == LT{} : Cmp}
781) -> {g(~K, ~V, ~cmp, O.OMap.bin(K, V, mk, mv, O.OMap.bin(K, V, lk, lv, ll, ml),
782        O.OMap.bin(K, V, k, v, mh, hi)), x)
783      == g(~K, ~V, ~cmp, O.OBin{0, k, v, O.OBin{0, lk, lv, ll, O.OBin{0, mk, mv, ml, mh}}, hi}, x)
784      : Maybe<&2, V>}:
785  +a = {O.OBin{0, lk, lv, ll, ml} : O.OMap<K, V>}
786  +b = {O.OBin{0, k, v, mh, hi} : O.OMap<K, V>}
787  +l = {O.OBin{0, mk, mv, a, b} : O.OMap<K, V>}
788  +m = {O.OBin{0, mk, mv, ml, mh} : O.OMap<K, V>}
789  +ln = {O.OBin{0, lk, lv, ll, m} : O.OMap<K, V>}
790  split(c => {g(~K, ~V, ~cmp, l, x) == getc(~K, ~V, ~cmp, c, x, v, ln, hi) : Maybe<&2, V>},
791    cmp(x, k),
792    +e => split(c => {g(~K, ~V, ~cmp, l, x) == getc(~K, ~V, ~cmp, c, x, lv, ll, m) : Maybe<&2, V>},
793      cmp(x, lk),
794      +e2 => mtr(V, g(~K, ~V, ~cmp, l, x), g(~K, ~V, ~cmp, a, x), g(~K, ~V, ~cmp, ll, x),
795        get.lt(~K, ~V, ~cmp, x, mk, mv, a, b, trans(x, lk, mk, e2, lkm)),
796        get.lt(~K, ~V, ~cmp, x, lk, lv, ll, ml, e2)),
797      e2 => rw(K, y => {g(~K, ~V, ~cmp, l, y) == Some{lv} : Maybe<&2, V>}, x, lk, eq(x, lk, e2),
798        mtr(V, g(~K, ~V, ~cmp, l, lk), g(~K, ~V, ~cmp, a, lk), Some{lv},
799          get.lt(~K, ~V, ~cmp, lk, mk, mv, a, b, lkm),
800          get.here(~K, ~V, ~cmp, ~refl, lk, lv, ll, ml))),
801      +e2 => split(c => {getc(~K, ~V, ~cmp, c, x, mv, a, b)
802          == getc(~K, ~V, ~cmp, c, x, mv, ml, mh) : Maybe<&2, V>},
803        cmp(x, mk),
804        e3 => get.gt(~K, ~V, ~cmp, x, lk, lv, ll, ml, e2),
805        e3 => {==},
806        e3 => get.lt(~K, ~V, ~cmp, x, k, v, mh, hi, e))),
807    e => rw(K, y => {g(~K, ~V, ~cmp, l, y) == Some{v} : Maybe<&2, V>}, x, k, eq(x, k, e),
808      mtr(V, g(~K, ~V, ~cmp, l, k), g(~K, ~V, ~cmp, b, k), Some{v},
809        get.gt(~K, ~V, ~cmp, k, mk, mv, a, b, gt_of_lt(~K, ~cmp, ~flip, mk, k, mkk)),
810        get.here(~K, ~V, ~cmp, ~refl, k, v, mh, hi))),
811    +e => mtr(V, g(~K, ~V, ~cmp, l, x), g(~K, ~V, ~cmp, b, x), g(~K, ~V, ~cmp, hi, x),
812      get.gt(~K, ~V, ~cmp, x, mk, mv, a, b,
813        gt_of_lt(~K, ~cmp, ~flip, mk, x,
814          trans(mk, k, x, mkk, gt_flip(~K, ~cmp, ~flip, x, k, e)))),
815      get.gt(~K, ~V, ~cmp, x, k, v, mh, hi, e)))

Uses (18)

Used by (1)