def h.sz_put_hit
bend-kit-collections@0.1.4.1 · PROOF.bend:3528
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
3528def h.sz_put_hit(
3529 ~K: Data, ~V: Data, ~eq: K -> K -> Bool, n: Nat, +mask: U32, m: M.HMap<K, V>, +hk: U32, +k: K, +v: V, -w: V,
3530 hit: {h.G(~K, ~V, ~eq, n, mask, m, hk, k) == Some{w} : Maybe<&2, V>}
3531) -> {h.Sz(K, V, h.P(~K, ~V, ~eq, n, mask, m, hk, k, v)) == h.Sz(K, V, m) : Nat}:
3532 match n:
3533 case 0n:
3534 match m:
3535 case M.HNil{}:
3536 h.none_some({h.Sz(K, V, M.HLeaf{hk, [M.Entry{k, v}]}) == 0n : Nat}, V, w, hit)
3537 case M.HLeaf{o, es}:
3538 h.elen_put_hit(~K, ~V, ~eq, es, k, v, w, hit)
3539 case M.HBranch{lo, hi}:
3540 {==}
3541 case 1n+(+p):
3542 match m:
3543 case M.HNil{}:
3544 h.none_some({h.Sz(K, V, M.HLeaf{hk, [M.Entry{k, v}]}) == 0n : Nat}, V, w, hit)
3545 case M.HLeaf{+o, +es}:
3546 h.sz_put_hit.lf(~K, ~V, ~eq, p, mask, o, es, hk, k, v, w, U32.is_eq(o, hk), {==}, hit)
3547 case M.HBranch{+lo, +hi}:
3548 h.sz_put_hit.br(~K, ~V, ~eq, p, mask, lo, hi, hk, k, v, w, U32.is_eq((hk .&. mask : U32), 0), {==}, hit,
3549 e => h.sz_put_hit(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k, v, w, e),
3550 e => h.sz_put_hit(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k, v, w, e))