Variable Espec : OracleKind.

(* Specifications: *)
Lemma semax_ext' (ext_link: Strings.String.string -> ident) id sig cc A P Q NEP NEQ (fs : funspecs) :
let f := mk_funspec sig cc A P Q NEP NEQ in
In (ext_link  id,f) fs ->
funspecs_norepeat fs ->
(forall n, semax_external (add_funspecs Espec ext_link fs) (fst (split (fst sig)))
(EF_external id (funsig2signature sig cc)) _ P Q n).
Lemma semax_ext (ext_link: Strings.String.string -> ident) id ids sig sig' cc A P Q NEP NEQ (fs : funspecs) :
let f := mk_funspec sig cc A P Q NEP NEQ in
In (ext_link id,f) fs ->
funspecs_norepeat fs ->
ids = fst (split (fst sig)) ->
sig' = funsig2signature sig cc ->
(forall n, semax_external (add_funspecs Espec ext_link fs) ids (EF_external id sig') _ P Q n).
(* Lemmas [semax_ext'_void] and [semax_ext_void] were needed before we used optyp_of_type of funsig2signature, we should be able to get rid of them now *)
Lemma semax_ext'_void (ext_link: Strings.String.string -> ident) id sig cc A P Q NEP NEQ (fs : funspecs) :
let f := mk_funspec (sig, tvoid) cc A P Q NEP NEQ in
In (ext_link  id,f) fs ->
funspecs_norepeat fs ->
(forall n, semax_external (add_funspecs Espec ext_link fs) (fst (split sig))
(EF_external id (mksignature (map typ_of_type (map snd sig)) None cc)) _ P Q n).
Lemma semax_ext_void (ext_link: Strings.String.string -> ident) id ids sig sig' cc A P Q NEP NEQ (fs : funspecs) :
let f := mk_funspec (sig, tvoid) cc A P Q NEP NEQ in
In (ext_link id,f) fs ->
funspecs_norepeat fs ->
ids = fst (split sig) ->
sig' = mksignature (map typ_of_type (map snd sig)) None cc ->
(forall n, semax_external (add_funspecs Espec ext_link fs) ids (EF_external id sig') _ P Q n).