Ltac destruct_cjoin phi HH :=
match goal with
|   |- context [@proj1_sig rmap _ ?X] => destruct X as [phi HH]; simpl
|  H: context [@proj1_sig rmap _ ?X] |- _ => destruct X as [phi HH]; simpl in H
end.

(* Specifications: *)
Lemma split_top_neq: fst (Share.split Share.top) <> Share.top.
Lemma dec_pure: forall r, {exists k, exists pp, r = PURE k pp}+{core r = NO Share.bot bot_unreadable}.
Lemma store_init_data_list_lem:
forall F V (ge: Genv.t F V) m b lo d m',
Genv.store_init_data_list ge m b lo d = Some m' ->
forall w IOK IOK' P sh (wsh: writable_share sh),
((P * VALspec_range (init_data_list_size d) sh (b,lo))%pred
(m_phi (initial_mem m w IOK))) ->
((P * VALspec_range (init_data_list_size d) sh (b,lo))%pred
(m_phi (initial_mem m' w IOK'))).