def h.sz_del_hit.br
bend-kit-collections@0.1.4.1 · PROOF.bend:3569
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
3569def h.sz_del_hit.br(
3570 ~K: Data, ~V: Data, ~eq: K -> K -> Bool, +p: Nat, +mask: U32, +lo: M.HMap<K, V>,
3571 +hi: M.HMap<K, V>, +hk: U32, +k: K, -w: V, b: Bool, eb: {b == U32.is_eq((hk .&. mask : U32), 0) : Bool},
3572 hit: {M.HMap.bool(Maybe<&2, V>, U32.is_eq((hk .&. mask : U32), 0),
3573 u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3574 u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == Some{w} : Maybe<&2, V>},
3575 il: {h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k) == Some{w} : Maybe<&2, V>}
3576 -> {1n+h.Sz(K, V, h.D(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k)) == h.Sz(K, V, lo) : Nat},
3577 ih: {h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k) == Some{w} : Maybe<&2, V>}
3578 -> {1n+h.Sz(K, V, h.D(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == h.Sz(K, V, hi) : Nat}
3579) -> {1n+h.Sz(K, V, h.db(~K, ~V, ~eq, b, p, mask, lo, hi, hk, k))
3580 == Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)) : Nat}:
3581 match b:
3582 case True{}:
3583 +dlo = h.D(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k)
3584 %h.size_join(K, V, dlo, hi) : {1n+_ == Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)) : Nat}
3585 Ord.cong_add(1n+h.Sz(K, V, dlo), h.Sz(K, V, lo), h.Sz(K, V, hi), h.Sz(K, V, hi),
3586 il(rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z,
3587 u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3588 u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == Some{w} : Maybe<&2, V>},
3589 True{}, U32.is_eq((hk .&. mask : U32), 0), eb, hit)),
3590 {==})
3591 case False{}:
3592 +dhi = h.D(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)
3593 %h.size_join(K, V, lo, dhi) : {1n+_ == Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)) : Nat}
3594 %MNat.add_succ(h.Sz(K, V, lo), h.Sz(K, V, dhi)) : {_ == Nat.add(h.Sz(K, V, lo), h.Sz(K, V, hi)) : Nat}
3595 Ord.cong_add(h.Sz(K, V, lo), h.Sz(K, V, lo), 1n+h.Sz(K, V, dhi), h.Sz(K, V, hi), {==},
3596 ih(rw(Bool, z => {M.HMap.bool(Maybe<&2, V>, z,
3597 u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hk, k),
3598 u => h.G(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hk, k)) == Some{w} : Maybe<&2, V>},
3599 False{}, U32.is_eq((hk .&. mask : U32), 0), eb, hit)))