Definition compatible m1 m2 := forall k v1 v2, m1 k = Some v1 -> m2 k = Some v2 -> v1 = v2.Global Instance compatible_refl : Reflexive compatible.Global Instance compatible_comm : Symmetric compatible.

(* Specifications: *)
Lemma map_add_comm : forall m1 m2, compatible m1 m2 -> map_add m1 m2 = map_add m2 m1.
Lemma map_add_assoc : forall m1 m2 m3, map_add (map_add m1 m2) m3 = map_add m1 (map_add m2 m3).
Lemma compatible_add_assoc : forall m1 m2 m3, compatible m1 m2 -> compatible (map_add m1 m2) m3 -> compatible m1 (map_add m2 m3).
Lemma compatible_incl : forall m1 m2 m (Hcompat : compatible m2 m) (Hincl : map_incl m1 m2), compatible m1 m.
Lemma map_incl_add : forall m1 m2, map_incl m1 (map_add m1 m2).
Lemma map_incl_compatible : forall m1 m2 m3 (Hincl1 : map_incl m1 m3) (Hincl2 : map_incl m2 m3), compatible m1 m2.
Lemma map_add_incl : forall m1 m2 m3, map_incl m1 m3 -> map_incl m2 m3 -> map_incl (map_add m1 m2) m3.