Definition shared_of (mu: SM_Injection) : meminj :=
  join (foreign_of mu) (pub_of mu).

(* Specifications: *)
Lemma unknown_in_extern: forall mu, inject_incr (unknown_of mu) (extern_of mu).
Lemma foreign_in_extern: forall mu, inject_incr (foreign_of mu) (extern_of mu).
Lemma foreign_in_shared: forall mu, inject_incr (foreign_of mu) (shared_of mu).
Lemma pub_in_local: forall mu, inject_incr (pub_of mu) (local_of mu).
Lemma priv_in_local: forall mu, inject_incr (priv_of mu) (local_of mu).
Lemma disjoint_pub_priv: forall mu, disjoint (pub_of mu) (priv_of mu).
Lemma disjoint_frgn_unknown: forall mu, disjoint (foreign_of mu) (unknown_of mu).
Lemma unknown_in_extern: forall mu, inject_incr (unknown_of mu) (extern_of mu).
Lemma foreign_in_extern: forall mu, inject_incr (foreign_of mu) (extern_of mu).
Lemma foreign_in_shared: forall mu, inject_incr (foreign_of mu) (shared_of mu).
Lemma pub_in_local: forall mu, inject_incr (pub_of mu) (local_of mu).
Lemma priv_in_local: forall mu, inject_incr (priv_of mu) (local_of mu).
Lemma disjoint_pub_priv: forall mu, disjoint (pub_of mu) (priv_of mu).
Lemma disjoint_frgn_unknown: forall mu, disjoint (foreign_of mu) (unknown_of mu).