End MapSubsetExtra.
Section MapDisjointDef.
Variables A B : Type.
Definition MapDisjoint (m:Map A) (m':Map B) :=
forall a:ad, in_dom A a m = true -> in_dom B a m' = true -> False.
Definition MapDisjoint_1 (m:Map A) (m':Map B) :=
match MapSweep A (fun (a:ad) (_:A) => in_dom B a m') m with
| None => true
| _ => false
end.
Definition MapDisjoint_2 (m:Map A) (m':Map B) :=
eqmap A (MapDomRestrTo A B m m') (M0 A).

(* Specifications: *)
Lemma MapDisjoint_imp_1 :
forall (m:Map A) (m':Map B), MapDisjoint m m' -> MapDisjoint_1 m m' = true.
Lemma MapDisjoint_1_imp :
forall (m:Map A) (m':Map B), MapDisjoint_1 m m' = true -> MapDisjoint m m'.
Lemma MapDisjoint_imp_2 :
forall (m:Map A) (m':Map B), MapDisjoint m m' -> MapDisjoint_2 m m'.
Lemma MapDisjoint_2_imp :
forall (m:Map A) (m':Map B), MapDisjoint_2 m m' -> MapDisjoint m m'.
Lemma Map_M0_disjoint : forall m:Map B, MapDisjoint (M0 A) m.
Lemma Map_disjoint_M0 : forall m:Map A, MapDisjoint m (M0 B).
End MapDisjointDef.