def h.get_join

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

import bend-kit-collections@0.1.4.1/PROOF.bend as PROOF
import Base
import bend-kit-collections@0.1.4.1/hmap.bend as M

2810def h.get_join(
2811  ~K: Data, ~V: Data, ~eq: K -> K -> Bool, +p: Nat, +mask: U32, lo: M.HMap<K, V>,
2812  hi: M.HMap<K, V>, +hk: U32, +k: K
2813) -> {h.G(~K, ~V, ~eq, 1n+p, mask, M.HBranch{lo, hi}, hk, k)
2814      == h.G(~K, ~V, ~eq, 1n+p, mask, M.HMap.join(K, V, lo, hi), hk, k) : Maybe<&2, V>}:
2815  match lo:
2816    case M.HNil{}:
2817      match hi:
2818        case M.HNil{}:
2819          Equal.sym(Maybe<&2, V>, None{},
2820            M.HMap.bool(Maybe<&2, V>, U32.is_eq((hk .&. mask : U32), 0),
2821              u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), M.HNil{}, hk, k),
2822              u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), M.HNil{}, hk, k)),
2823            h.bnn(V, U32.is_eq((hk .&. mask : U32), 0),
2824              h.G(~K, ~V, ~eq, p, (mask << 1n : U32), M.HNil{}, hk, k),
2825              h.gnil(~K, ~V, ~eq, p, (mask << 1n : U32), hk, k)))
2826        case M.HLeaf{a, b}:
2827          {==}
2828        case M.HBranch{a, b}:
2829          {==}
2830    case M.HLeaf{a, b}:
2831      {==}
2832    case M.HBranch{a, b}:
2833      {==}

Uses (14)

Used by (2)