Program Instance discrete_PCM (A : Type) : Ghost := { valid a := True;
  Join_G := Join_equiv A }.Definition ghost_var (sh : share) (v : A) g :=
  own(RA := @pos_PCM (discrete_PCM A)) g (Some (sh, v)) NoneP.

(* Specifications: *)
Lemma ghost_var_share_join : forall sh1 sh2 sh v p, sepalg.join sh1 sh2 sh -> sh1 <> Share.bot -> sh2 <> Share.bot -> ghost_var sh1 v p * ghost_var sh2 v p = ghost_var sh v p.