(* The first two premises are not needed to prove this, but are used to limit its applicability *)

Lemma semax_ifthenelse_PQR' :
forall Espec {cs: compspecs} (v: val) Delta P Q R (b: expr) c d Post,
bool_type (typeof b) = true ->
ENTAIL Delta, PROPx P (LOCALx Q (SEPx R)) |--
(tc_expr Delta (Eunop Cop.Onotbool b tint))  ->
ENTAIL Delta, PROPx P (LOCALx Q (SEPx R)) |--
local (`(eq v) (eval_expr b)) ->
@semax cs Espec Delta (PROPx (typed_true (typeof b) v :: P) (LOCALx Q (SEPx R)))
c Post ->
@semax cs Espec Delta (PROPx (typed_false (typeof b) v :: P) (LOCALx Q (SEPx R)))
d Post ->
@semax cs Espec Delta (PROPx P (LOCALx Q (SEPx R)))
(Sifthenelse b c d) Post.