Section MapDisjointExtra.
Variables A B : Type.

(* Specifications: *)
Lemma MapDisjoint_ext :
forall (m0 m1:Map A) (m2 m3:Map B),
eqmap A m0 m1 ->
eqmap B m2 m3 -> MapDisjoint A B m0 m2 -> MapDisjoint A B m1 m3.
Lemma MapMerge_disjoint :
forall m m':Map A,
MapDisjoint A A m m' ->
forall a:ad,
in_dom A a (MapMerge A m m') =
orb (andb (in_dom A a m) (negb (in_dom A a m')))
(andb (in_dom A a m') (negb (in_dom A a m))).
Lemma MapDisjoint_M2_l :
forall (m0 m1:Map A) (m2 m3:Map B),
MapDisjoint A B (M2 A m0 m1) (M2 B m2 m3) -> MapDisjoint A B m0 m2.
Lemma MapDisjoint_M2_r :
forall (m0 m1:Map A) (m2 m3:Map B),
MapDisjoint A B (M2 A m0 m1) (M2 B m2 m3) -> MapDisjoint A B m1 m3.
Lemma MapDisjoint_M2 :
forall (m0 m1:Map A) (m2 m3:Map B),
MapDisjoint A B m0 m2 ->
MapDisjoint A B m1 m3 -> MapDisjoint A B (M2 A m0 m1) (M2 B m2 m3).
Lemma MapDisjoint_M1_l :
forall (m:Map A) (a:ad) (y:B),
MapDisjoint B A (M1 B a y) m -> in_dom A a m = false.
Lemma MapDisjoint_M1_r :
forall (m:Map A) (a:ad) (y:B),
MapDisjoint A B m (M1 B a y) -> in_dom A a m = false.
Lemma MapDisjoint_M1_conv_l :
forall (m:Map A) (a:ad) (y:B),
in_dom A a m = false -> MapDisjoint B A (M1 B a y) m.
Lemma MapDisjoint_M1_conv_r :
forall (m:Map A) (a:ad) (y:B),
in_dom A a m = false -> MapDisjoint A B m (M1 B a y).
Lemma MapDisjoint_sym :
forall (m:Map A) (m':Map B), MapDisjoint A B m m' -> MapDisjoint B A m' m.
Lemma MapDisjoint_empty :
forall m:Map A, MapDisjoint A A m m -> eqmap A m (M0 A).
Lemma MapDelta_disjoint :
forall m m':Map A,
MapDisjoint A A m m' -> eqmap A (MapDelta A m m') (MapMerge A m m').