def h.sz_put_new

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

import bend-kit-collections@0.1.4.1/PROOF.bend as PROOF
import Base
import bend-mathlib@0.7.4.0/bool.bend as MBool
import bend-kit-collections@0.1.4.1/LAWS.bend as Laws
import bend-kit-collections@0.1.4.1/hmap.bend as M

3451def h.sz_put_new(
3452  ~K: Data, ~V: Data, ~hash: K -> U32, ~eq: K -> K -> Bool,
3453  ~sound: @x: K -> @y: K -> {eq(x, y) == True{} : Bool} -> {x == y : K},
3454  n: Nat, +mask: U32, m: M.HMap<K, V>, +k: K, +v: V,
3455  +wf: {h.WF(~K, ~V, ~hash, ~eq, n, m) == True{} : Bool},
3456  miss: {h.G(~K, ~V, ~eq, n, mask, m, hash(k), k) == None{} : Maybe<&2, V>}
3457) -> {h.Sz(K, V, h.P(~K, ~V, ~eq, n, mask, m, hash(k), k, v)) == 1n+h.Sz(K, V, m) : Nat}:
3458  match n:
3459    case 0n:
3460      match m:
3461        case M.HNil{}:
3462          {==}
3463        case M.HLeaf{o, es}:
3464          h.elen_put_new(~K, ~V, ~eq, es, k, v, miss)
3465        case M.HBranch{lo, hi}:
3466          Empty.absurd({h.Sz(K, V, M.HBranch{lo, hi}) == 1n+h.Sz(K, V, M.HBranch{lo, hi}) : Nat}, MBool.false_ne_true()(wf))
3467    case 1n+(+p):
3468      match m:
3469        case M.HNil{}:
3470          {==}
3471        case M.HLeaf{+o, +es}:
3472          h.sz_put_new.lf(~K, ~V, ~hash, ~eq, ~sound, p, mask, o, es, k, v,
3473            MBool.eq_true_of_and_left(Laws.hmap_hashed(~K, ~V, ~hash, es, o), Laws.hmap_distinct(~K, ~V, ~eq, es), wf),
3474            U32.is_eq(o, hash(k)), {==}, miss)
3475        case M.HBranch{+lo, +hi}:
3476          h.sz_put_new.br(~K, ~V, ~eq, p, mask, lo, hi, hash(k), k, v, U32.is_eq((hash(k) .&. mask : U32), 0), {==},
3477            miss,
3478            e => h.sz_put_new(~K, ~V, ~hash, ~eq, ~sound, p, (mask << 1n : U32), lo, k, v,
3479              MBool.eq_true_of_and_left(h.WF(~K, ~V, ~hash, ~eq, p, lo), h.WF(~K, ~V, ~hash, ~eq, p, hi), wf), e),
3480            e => h.sz_put_new(~K, ~V, ~hash, ~eq, ~sound, p, (mask << 1n : U32), hi, k, v,
3481              MBool.eq_true_of_and_right(h.WF(~K, ~V, ~hash, ~eq, p, lo), h.WF(~K, ~V, ~hash, ~eq, p, hi), wf), e))

Uses (21)

Used by (1)