Definition resource_fmap (f g:pred rmap -> pred rmap) (x:resource) : resource :=
match x with
| NO sh nsh => NO sh nsh
| YES sh rsh k p => YES sh rsh k (preds_fmap f g p)
| PURE k p => PURE k (preds_fmap f g p)
end.
Definition ghost_fmap (f g:pred rmap -> pred rmap)(x:ghost) : ghost :=
map (option_map (fun '(a, b) => (a, preds_fmap f g b))) x.

Lemma resource_fmap_id :
resource_fmap (id (pred rmap)) (id (pred rmap)) = id resource.