Definition in_dom (a:ad) (m:Map A) :=
    match MapGet A m a with
    | None => false
    | _ => true
    end.

(* Specifications: *)
Lemma in_dom_M0 : forall a:ad, in_dom a (M0 A) = false.
Lemma in_dom_M1 : forall (a a0:ad) (y:A), in_dom a0 (M1 A a y) = Neqb a a0.
Lemma in_dom_M1_1 : forall (a:ad) (y:A), in_dom a (M1 A a y) = true.
Lemma in_dom_M1_2 : forall (a a0:ad) (y:A), in_dom a0 (M1 A a y) = true -> a = a0.
Lemma in_dom_some : forall (m:Map A) (a:ad), in_dom a m = true -> {y : A | MapGet A m a = Some y}.
Lemma in_dom_none : forall (m:Map A) (a:ad), in_dom a m = false -> MapGet A m a = None.
Lemma in_dom_put : forall (m:Map A) (a0:ad) (y0:A) (a:ad), in_dom a (MapPut A m a0 y0) = orb (Neqb a a0) (in_dom a m).
Lemma in_dom_put_behind : forall (m:Map A) (a0:ad) (y0:A) (a:ad), in_dom a (MapPut_behind A m a0 y0) = orb (Neqb a a0) (in_dom a m).
Lemma in_dom_remove : forall (m:Map A) (a0 a:ad), in_dom a (MapRemove A m a0) = andb (negb (Neqb a a0)) (in_dom a m).
Lemma in_dom_merge : forall (m m':Map A) (a:ad), in_dom a (MapMerge A m m') = orb (in_dom a m) (in_dom a m').
Lemma in_dom_delta : forall (m m':Map A) (a:ad), in_dom a (MapDelta A m m') = xorb (in_dom a m) (in_dom a m').
Lemma in_dom_restrto : forall (m:Map A) (m':Map B) (a:ad), in_dom A a (MapDomRestrTo A B m m') = andb (in_dom A a m) (in_dom B a m').
Lemma in_dom_restrby : forall (m:Map A) (m':Map B) (a:ad), in_dom A a (MapDomRestrBy A B m m') = andb (in_dom A a m) (negb (in_dom B a m')).