Definition ghost_fp_update (a b : ghost) :=
forall n c, joins (ghost_fmap (approx n) (approx n) a) c ->
joins (ghost_fmap (approx n) (approx n) b) c.
Instance ghost_fp_update_preorder: RelationClasses.PreOrder ghost_fp_update.

(* Specifications: *)
Lemma ghost_fp_update_approx: forall a b n, ghost_fp_update a b ->
ghost_fp_update (ghost_fmap (approx n) (approx n) a) (ghost_fmap (approx n) (approx n) b).
Lemma Own_update: forall a b, ghost_fp_update a b ->
Own a |-- bupd (Own b).
Lemma Own_unit: emp |-- EX a : _, !!(identity a) && Own a.
Lemma Own_dealloc: forall a, Own a |-- bupd emp.
Definition singleton {A} k (x : A) : list (option A) := repeat None k ++ Some x :: nil.