End Extr.
Module ExtrFacts := GenExtrFacts (CSHL_Def) (Conseq) (Extr).
Module ExtrIFacts := GenIExtrFacts (CSHL_Def) (CConseq) (Extr).
Module DeepEmbeddedMinimumSeparationLogic <: MINIMUM_CLIGHT_SEPARATION_HOARE_LOGIC with Module CSHL_Def := DeepEmbeddedDef.
Module CSHL_Def := DeepEmbeddedDef.
Module CSHL_Defs := DeepEmbeddedDefs.
Definition semax_extract_exists := @semax_extract_exists.
Definition semax_func_nil := @AuxDefs.semax_func_nil (@Def.semax_external).
Definition semax_func_cons := @AuxDefs.semax_func_cons (@Def.semax_external).
Definition semax_func_cons_ext := @AuxDefs.semax_func_cons_ext (@Def.semax_external).

Theorem semax_ifthenelse :
forall {CS: compspecs} {Espec: OracleKind},
forall Delta P (b: expr) c d R,
bool_type (typeof b) = true ->
@semax CS Espec Delta (P && local (`(typed_true (typeof b)) (eval_expr b))) c R ->
@semax CS Espec Delta (P && local (`(typed_false (typeof b)) (eval_expr b))) d R ->
@semax CS Espec Delta (tc_expr Delta (Eunop Cop.Onotbool b (Tint I32 Signed noattr)) && P) (Sifthenelse b c d) R.