(******************************************  Definitions of spacer and withspacer  Comment: spacer only has offset_zero property but does not have local_facts and isptr property.  ******************************************)
(* Arguments spacer sh be ed / _ . *)
Definition withspacer sh (be: Z) (ed: Z) P (p: val): mpred :=
if Z.eq_dec (ed - be) 0
then P p
else P p * spacer sh be ed p.

Lemma withspacer_add:
forall sh pos be ed P p,
withspacer sh (pos + be) (pos + ed) (fun p0 => P (offset_val pos p)) p =
withspacer sh be ed P (offset_val pos p).