def rot_lo.single.get

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

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

613def rot_lo.single.get(
614  ~K: Data, ~V: Data, ~cmp: K -> K -> Cmp, ~refl: Refl(~K, ~cmp), ~eq: Eq(~K, ~cmp),
615  ~flip: Flip(~K, ~cmp), ~trans: Trans(~K, ~cmp),
616  +x: K, +k: K, +v: V, +lo: O.OMap<K, V>, +hk: K,
617  +hv: V, +hl: O.OMap<K, V>, +hh: O.OMap<K, V>, +khk: {cmp(k, hk) == LT{} : Cmp}
618) -> {O.OMap.get(~K, ~V, ~cmp,
619       O.OMap.bin(K, V, hk, hv, O.OMap.bin(K, V, k, v, lo, hl), hh), x)
620      == O.OMap.get(~K, ~V, ~cmp, O.OBin{0, k, v, lo, O.OBin{0, hk, hv, hl, hh}}, x)
621      : Maybe<&2, V>}:
622  +inner = {O.OBin{0, k, v, lo, hl} : O.OMap<K, V>}
623  +lhs = {O.OBin{0, hk, hv, inner, hh} : O.OMap<K, V>}
624  split(c => {O.OMap.get(~K, ~V, ~cmp, lhs, x)
625      == getc(~K, ~V, ~cmp, c, x, v, lo, O.OBin{0, hk, hv, hl, hh}) : Maybe<&2, V>},
626    cmp(x, k),
627    +e => Equal.trans(Maybe<&2, V>, O.OMap.get(~K, ~V, ~cmp, lhs, x),
628      O.OMap.get(~K, ~V, ~cmp, inner, x), O.OMap.get(~K, ~V, ~cmp, lo, x),
629      get.lt(~K, ~V, ~cmp, x, hk, hv, inner, hh, trans(x, k, hk, e, khk)),
630      get.lt(~K, ~V, ~cmp, x, k, v, lo, hl, e)),
631    e => rw(K, y => {O.OMap.get(~K, ~V, ~cmp, lhs, y) == Some{v} : Maybe<&2, V>},
632      x, k, eq(x, k, e),
633      Equal.trans(Maybe<&2, V>, O.OMap.get(~K, ~V, ~cmp, lhs, k),
634        O.OMap.get(~K, ~V, ~cmp, inner, k), Some{v},
635        get.lt(~K, ~V, ~cmp, k, hk, hv, inner, hh, khk),
636        get.here(~K, ~V, ~cmp, ~refl, k, v, lo, hl))),
637    e => split(c => {getc(~K, ~V, ~cmp, c, x, hv, inner, hh)
638        == getc(~K, ~V, ~cmp, c, x, hv, hl, hh) : Maybe<&2, V>},
639      cmp(x, hk),
640      e2 => get.gt(~K, ~V, ~cmp, x, k, v, lo, hl, e),
641      e2 => {==},
642      e2 => {==}))

Uses (16)

Used by (2)