Ltac process_idstar :=
process_one_globvar;
lazymatch goal with |- semax _ (_ * ?A * _ * _) _ _ =>
let p := fresh "p" in set (p:=A);
simpl in p;
unfold id2pred_star, init_data2pred' in p;
simpl PTree.get in p; simpl zeq in p;
cbv beta iota zeta in p;
simpl init_data_size in p;
revert p; rewrite ?offset_offset_val; intro p; simpl Z.add in p;
subst p;
repeat first
[simple apply move_globfield_into_SEP
(*        | simple eapply move_globfield_into_SEP''; [ now repeat econstructor | ] *)
| simple apply move_globfield_into_SEP'; intros ?gvar0 (*;
lazymatch goal with
| |- semax _ ((PROPx _ (LOCALx (gvar ?A ?B :: _) _)) * _ * _ * _)  _ _ =>
let n := fresh "v" A in rename B into n
| |- _ => idtac
end*)
];
simple apply move_globfield_into_SEP0
| |- semax _ (_ * _ * _) _ _ => idtac
end.

(* Specifications: *)
Lemma eliminate_globvars2pred_nil:
forall {cs: compspecs}{Espec: OracleKind} Delta PQR gv SF c Post,
semax Delta (PQR * SF) c Post ->
semax Delta (PQR * globvars2pred gv nil * SF) c Post.