Definition map_sub (m : A -> option B) k := fun x => if eq_dec x k then None else m x.

(* Specifications: *)
Lemma map_upd_sub : forall m (k : A) (v : B), m k = Some v -> map_upd (map_sub m k) k v = m.
Lemma map_sub_upd : forall m (k : A) (v : B), m k = None -> map_sub (map_upd m k v) k = m.
Lemma disjoint_sub : forall (m1 m2 : A -> option B) k, disjoint m1 m2 -> disjoint (map_sub m1 k) m2.