Program Definition FS_extension: Extension.Sig (Z*fs) fs Z FSCoreSem _ _ csem :=
@Extension.Make _ _ _ _ _ _ FSCoreSem _ _ csem
get_core get_fs fst (fun (x: fs) (y: Z) => (y, x))
_ _ _ fs_ext_pf3.
Next Obligation.
unfold os_after_external in H0.
case_eq (after_external csem ret (get_core s)).
intros.
rewrite H1 in H0.
inv H0.
simpl; auto.
intros.
rewrite H1 in H0.
congruence.
Qed.
Next Obligation.
apply corestep_not_at_external in H.
inv H0; simpl; auto; rewrite H in H1; congruence.
Qed.
Variable csem_det:
forall ge c m c' m' c'' m'',
corestep csem ge c m c' m' ->
corestep csem ge c m c'' m'' ->
c'=c'' /\ m'=m''.

Lemma FS_core_compat:
forall ge, @core_compatible _ _ _ _ _ _  FSCoreSem  _ _ _ ge ge FS_extension.