Proof with eauto.
intros.
assert (HpoolErase := init_erasure HinitSC HinitF).
assert (HmemErase : mem_erasure (@diluteMem FineDilMem m') (@diluteMem BareDilMem m')).
{ eapply mem_erasure_dilute_1.
econstructor; eauto.
intros.
assert (Hvalid: Mem.valid_block m' b)
by (unfold Mem.valid_block, diluteMem, erasePerm in *;
simpl in *; auto).
assert (Hperm:= erasePerm_V ofs k Hvalid).
unfold permission_at in Hperm; auto.
simpl.
intros.
eapply memval_erasure_refl.
}
split; first by (intros n; eapply fsafe_implies_scsafe; eauto).
intros.
eapply execution_sim with (trsc := [::]) in H; eauto.
destruct H as (? & ? & ? & ?& ?& ? & Htrace_erasure).
specialize (Htrace_erasure ltac:(by constructor)).
do 3 eexists; split...
Qed.

(* Specifications: *)
Corollary init_fsafe_implies_scsafe:
forall f arg tpsc tpf m m'
(HinitSC: bare_init initU m (initU, [::], tpsc) m' f arg)
(HinitF: tpf_init initU m (initU, [::], tpf) m' f arg)
(HsafeF: forall n, fsafe tpf (@diluteMem FineDilMem m') initU n),
forall n, sc_safe tpsc (@diluteMem BareDilMem m') initU n.