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)))