def h.sz_put_hit.br

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

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
import bend-kit-collections@0.1.4.1/nat_order.bend as Ord

3499def h.sz_put_hit.br(
3500  ~K: Data, ~V: Data, ~eq: K -> K -> Bool, +p: Nat, +mask: U32, +lo: M.HMap<K, V>,
3501  +hi: M.HMap<K, V>, +hk: U32, +k: K, +v: V, -w: V, b: Bool, eb: {b == U32.is_eq((hk .&. mask : U32), 0) : Bool},
3502  hit: {M.HMap.bool(Maybe<&2, V>, U32.is_eq((hk .&. mask : U32), 0),
3503    u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3504    u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == Some{w} : Maybe<&2, V>},
3505  il: {h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k) == Some{w} : Maybe<&2, V>}
3506    -> {h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k, v)) == h.Sz(K, V, lo) : Nat},
3507  ih: {h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k) == Some{w} : Maybe<&2, V>}
3508    -> {h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k, v)) == h.Sz(K, V, hi) : Nat}
3509) -> {h.Sz(K, V, h.pb(~K, ~V, ~eq, b, p, mask, lo, hi, hk, k, v))
3510      == Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)) : Nat}:
3511  match b:
3512    case True{}:
3513      Ord.cong_add(h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k, v)), h.Sz(K, V, lo),
3514        h.Sz(K, V, hi), h.Sz(K, V, hi),
3515        il(rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z,
3516            u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3517            u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == Some{w} : Maybe<&2, V>},
3518          True{}, U32.is_eq((hk .&. mask : U32), 0), eb, hit)),
3519        {==})
3520    case False{}:
3521      Ord.cong_add(h.Sz(K, V, lo), h.Sz(K, V, lo),
3522        h.Sz(K, V, h.P(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k, v)), h.Sz(K, V, hi), {==},
3523        ih(rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z,
3524            u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3525            u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == Some{w} : Maybe<&2, V>},
3526          False{}, U32.is_eq((hk .&. mask : U32), 0), eb, hit)))

Uses (16)

Used by (1)