Definition Delta_types V G {C: compspecs} (tys : list type) : tycontext :=
make_tycontext
(params_of_types
1 ((Tfunction (type_of_params (params_of_types 2 tys)) Tvoid cc_default) :: tys))
nil nil Tvoid V G nil.

Lemma semax_prog_entry_point {CS: compspecs} V G prog b id_fun id_arg arg A
(P Q: forall ts : list Type, (dependent_type_functor_rec ts (AssertTT A)) mpred)
NEP NEQ h:
@semax_prog CS prog V G ->
Genv.find_symbol (globalenv prog) id_fun = Some b ->
find_id id_fun G =
Some (mk_funspec ((id_arg, Tpointer Tvoid noattr) :: nil, tptr Tvoid)
cc_default A P Q NEP NEQ) ->
is_pointer_or_null arg ->
let rho0 : environ :=
construct_rho
(filter_genv (globalenv prog)) empty_env
(PTree.set 1 (Vptr b Ptrofs.zero)
(PTree.set id_arg arg (PTree.empty val))) in
let rho1 : environ :=
construct_rho
(filter_genv (globalenv prog)) empty_env
((* PTree.set 1 (Vptr b Ptrofs.zero) *)
(PTree.set id_arg arg (PTree.empty val))) in
{ q : corestate |
(forall jm, Val.inject (Mem.flat_inj (nextblock (m_dry jm))) arg arg ->
exists jm', semantics.initial_core
(juicy_core_sem (cl_core_sem (globalenv prog))) h
jm q jm' (Vptr b Ptrofs.zero) (arg :: nil)) /\
forall (jm : juicy_mem) ts a,
app_pred (P ts a rho1) (m_phi jm) ->
app_pred (funassert (Delta_types V G (Tpointer Tvoid noattr::nil)) rho0) (m_phi jm) ->
forall z, app_pred (ext_compat z) (m_phi jm) -> jsafeN (@OK_spec Espec) (globalenv prog) (level jm) z q jm }.