def h.sz_put_new.br

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

import bend-kit-collections@0.1.4.1/PROOF.bend as PROOF
import Base
import bend-mathlib@0.7.4.0/nat.bend as MNat
import bend-kit-collections@0.1.4.1/hmap.bend as M
import bend-kit-collections@0.1.4.1/nat_order.bend as Ord

3419def h.sz_put_new.br(
3420  ~K: Data, ~V: Data, ~eq: K -> K -> Bool, +p: Nat, +mask: U32, +lo: M.HMap<K, V>,
3421  +hi: M.HMap<K, V>, +hk: U32, +k: K, +v: V, b: Bool, eb: {b == U32.is_eq((hk .&. mask : U32), 0) : Bool},
3422  miss: {M.HMap.bool(Maybe<&2, V>, U32.is_eq((hk .&. mask : U32), 0),
3423    u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3424    u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == None{} : Maybe<&2, V>},
3425  il: {h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k) == None{} : Maybe<&2, V>}
3426    -> {h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k, v)) == 1n+h.Sz(K, V, lo) : Nat},
3427  ih: {h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k) == None{} : Maybe<&2, V>}
3428    -> {h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k, v)) == 1n+h.Sz(K, V, hi) : Nat}
3429) -> {h.Sz(K, V, h.pb(~K, ~V, ~eq, b, p, mask, lo, hi, hk, k, v))
3430      == 1n+Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)) : Nat}:
3431  match b:
3432    case True{}:
3433      Ord.cong_add(h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k, v)), 1n+h.Sz(K, V, lo),
3434        h.Sz(K, V, hi), h.Sz(K, V, hi),
3435        il(rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z,
3436            u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3437            u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == None{} : Maybe<&2, V>},
3438          True{}, U32.is_eq((hk .&. mask : U32), 0), eb, miss)),
3439        {==})
3440    case False{}:
3441      Ord.tr(Nat.add(h.Sz(K, V, lo), h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k, v))),
3442        Nat.add(h.Sz(K, V, lo), 1n+h.Sz(K, V, hi)), 1n+Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)),
3443        Ord.cong_add(h.Sz(K, V, lo), h.Sz(K, V, lo),
3444          h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k, v)), 1n+h.Sz(K, V, hi), {==},
3445          ih(rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z,
3446              u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3447              u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == None{} : Maybe<&2, V>},
3448            False{}, U32.is_eq((hk .&. mask : U32), 0), eb, miss))),
3449        MNat.add_succ(h.Sz(K, V, lo), h.Sz(K, V, hi)))

Uses (18)

Used by (1)