Definition GHOSTspec (A: Type) (x: A) : spec :=
  fun sh loc =>
   allp (jam (eq_dec loc) (fun loc' => 
    yesat (SomeP (ConstType (A -> Prop)) (fun _ y => y = x)) 
             (FUN (nil,Tvoid) cc_default) sh loc') noat).Definition ghostp {A: Type} (sh: share) (loc: address) (x: A) : mpred :=
  GHOSTspec A x sh loc.Definition make_GHOSTspec:
  forall A (sh : share) (rsh: readable_share sh) loc (x: A) (lev: nat),
   exists m: rmap, GHOSTspec A x sh loc m /\ level m =  lev.

Lemma make_ghostp: forall A (x: A) loc (lev: nat), exists m : rmap, ghostp Share.top loc x m /\ level m = lev.