Global Program Instance map_PCM : Ghost := { valid a := True; Join_G := map_join }.Instance fmap_order : PCM_order map_incl.

(* Specifications: *)
Lemma map_upd_list_app : forall l1 l2 m, map_upd_list m (l1 ++ l2) = map_upd_list (map_upd_list m l1) l2.
Lemma map_upd_list_out : forall l m k, m k = None -> ~In k (map fst l) -> map_upd_list m l k = None.
Lemma compatible_k : forall m1 m2 (Hcompat : compatible m1 m2) k v, m2 k = Some v -> map_add m1 m2 k = Some v.
Lemma map_join_incl_compat : forall m1 m2 m' m'' (Hincl : map_incl m1 m2) (Hjoin : join m2 m' m''), exists m, join m1 m' m /\ map_incl m m''.
Lemma map_add_empty : forall m, map_add m empty_map = m.
Lemma map_upd_incl : forall m1 m2 k v, map_incl m1 m2 -> m2 k = Some v -> map_incl (map_upd m1 k v) m2.
Lemma map_add_single : forall m k v, map_add (singleton k v) m = map_upd m k v.
Lemma incl_compatible : forall m1 m2, map_incl m1 m2 -> compatible m1 m2.
Lemma map_add_redundant : forall m1 m2, map_incl m1 m2 -> map_add m1 m2 = m2.
Lemma empty_map_incl : forall m, map_incl empty_map m.
Lemma map_upd2_incl : forall m1 m2 k v, map_incl m1 m2 -> map_incl (map_upd m1 k v) (map_upd m2 k v).
Lemma compatible_upd : forall m1 m2 k v, compatible m1 m2 -> m2 k = None -> compatible (map_upd m1 k v) m2.
Lemma map_add_upd : forall m1 m2 k v, map_upd (map_add m1 m2) k v = map_add (map_upd m1 k v) m2.