def h.eg_put_other.c

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

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

2112def h.eg_put_other.c(
2113  ~K: Data, ~V: Data, ~eq: K -> K -> Bool,
2114  ~sound: @x: K -> @y: K -> {eq(x, y) == True{} : Bool} -> {x == y : K},
2115  +key: K, +val: V, +rest: List<&2, M.Entry<K, V>>, +k2: K, +k: K, +v: V,
2116  +ne: {eq(k, k2) == False{} : Bool}, b: Bool, eb: {b == eq(k2, key) : Bool},
2117  ih: {M.HMap.entries.get(~K, ~V, ~eq, M.HMap.entries.put(~K, ~V, ~eq, rest, k2, v), k)
2118       == M.HMap.entries.get(~K, ~V, ~eq, rest, k) : Maybe<&2, V>}
2119) -> {M.HMap.entries.get(~K, ~V, ~eq, h.epc(~K, ~V, ~eq, b, key, val, rest, k2, v), k)
2120      == h.egc(~K, ~V, ~eq, eq(k, key), val, rest, k) : Maybe<&2, V>}:
2121  match b:
2122    case True{}:
2123      +nk = h.nk(~K, ~eq, ~sound, k2, key, k, h.sb(True{}, eq(k2, key), eb), ne)
2124      %h.sb(eq(k, key), False{}, nk)
2125        : {h.egc(~K, ~V, ~eq, _, v, rest, k) == h.egc(~K, ~V, ~eq, eq(k, key), val, rest, k) : Maybe<&2, V>}
2126      %h.sb(eq(k, key), False{}, nk)
2127        : {M.HMap.entries.get(~K, ~V, ~eq, rest, k) == h.egc(~K, ~V, ~eq, _, val, rest, k) : Maybe<&2, V>}
2128      {==}
2129    case False{}:
2130      h.egc2(~K, ~V, ~eq, eq(k, key), val, M.HMap.entries.put(~K, ~V, ~eq, rest, k2, v), rest, k, ih)

Uses (11)

Used by (1)