def h.gd_other
bend-kit-collections@0.1.4.1 · PROOF.bend:3338
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
3338def h.gd_other(
3339 ~K: Data, ~V: Data, ~eq: K -> K -> Bool,
3340 ~sound: @x: K -> @y: K -> {eq(x, y) == True{} : Bool} -> {x == y : K},
3341 n: Nat, +mask: U32, m: M.HMap<K, V>, +h2: U32, +k2: K, +hk: U32, +k: K,
3342 +nk: {eq(k, k2) == False{} : Bool}
3343) -> {h.G(~K, ~V, ~eq, n, mask, h.D(~K, ~V, ~eq, n, mask, m, h2, k2), hk, k)
3344 == h.G(~K, ~V, ~eq, n, mask, m, hk, k) : Maybe<&2, V>}:
3345 match n:
3346 case 0n:
3347 match m:
3348 case M.HNil{}:
3349 {==}
3350 case M.HLeaf{+o, +es}:
3351 %h.get_leaf(~K, ~V, ~eq, 0n, mask, o, M.HMap.entries.del(~K, ~V, ~eq, es, k2), hk, k)
3352 : {_ == h.EG(~K, ~V, ~eq, es, k) : Maybe<&2, V>}
3353 h.eg_del_other(~K, ~V, ~eq, ~sound, es, k2, k, nk)
3354 case M.HBranch{lo, hi}:
3355 {==}
3356 case 1n+(+p):
3357 match m:
3358 case M.HNil{}:
3359 {==}
3360 case M.HLeaf{+o, +es}:
3361 h.gd_other.lf(~K, ~V, ~eq, ~sound, p, mask, o, es, k2, hk, k, nk, U32.is_eq(o, h2))
3362 case M.HBranch{+lo, +hi}:
3363 h.gd_other.br(~K, ~V, ~eq, p, mask, lo, hi, h2, k2, hk, k, U32.is_eq((h2 .&. mask : U32), 0),
3364 h.gd_other(~K, ~V, ~eq, ~sound, p, (mask << 1n : U32), lo, h2, k2, hk, k, nk),
3365 h.gd_other(~K, ~V, ~eq, ~sound, p, (mask << 1n : U32), hi, h2, k2, hk, k, nk))