def h.sz_put_new.lf
import bend-kit-collections@0.1.4.1/PROOF.bend as PROOFimport Base
import bend-kit-collections@0.1.4.1/LAWS.bend as Laws
import bend-kit-collections@0.1.4.1/hmap.bend as M
3402def h.sz_put_new.lf(
3403 ~K: Data, ~V: Data, ~hash: K -> U32, ~eq: K -> K -> Bool,
3404 ~sound: @x: K -> @y: K -> {eq(x, y) == True{} : Bool} -> {x == y : K},
3405 +p: Nat, +mask: U32, +o: U32, +es: List<&2, M.Entry<K, V>>, +k: K, +v: V,
3406 hs: {Laws.hmap_hashed(~K, ~V, ~hash, es, o) == True{} : Bool},
3407 b: Bool, eb: {b == U32.is_eq(o, hash(k)) : Bool},
3408 miss: {h.R(~K, ~V, ~hash, ~eq, o, es, k) == None{} : Maybe<&2, V>}
3409) -> {h.Sz(K, V, h.pl(~K, ~V, ~eq, b, p, mask, o, es, hash(k), k, v)) == 1n+h.len(K, V, es) : Nat}:
3410 match b:
3411 case True{}:
3412 h.elen_put_new(~K, ~V, ~eq, es, k, v,
3413 rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z, u => h.EG(~K, ~V, ~eq, es, k), u => None{}) == None{} : Maybe<&2, V>},
3414 True{}, U32.is_eq(o, hash(k)), eb, miss))
3415 case False{}:
3416 h.split_size(~K, ~V, ~eq, 1n+p, mask, o, es, hash(k), k, v,
3417 h.eg_none_hashed(~K, ~V, ~hash, ~eq, ~sound, es, o, k, h.sb(False{}, U32.is_eq(o, hash(k)), eb), hs))