Corollary eval_simple_rvalue_safe:
  forall C a v,
  eval_simple_rvalue e m a v ->
  context RV RV C -> safe (ExprState f (C a) k e m) ->
  safe (ExprState f (C (Eval v (typeof a))) k e m).Corollary eval_simple_lvalue_safe:
  forall C a b ofs,
  eval_simple_lvalue e m a b ofs ->
  context LV RV C -> safe (ExprState f (C a) k e m) ->
  safe (ExprState f (C (Eloc b ofs (typeof a))) k e m).

Lemma simple_can_eval: forall a from C, simple a = true -> context from RV C -> safe (ExprState f (C a) k e m) -> match from with | LV => exists b, exists ofs, eval_simple_lvalue e m a b ofs | RV => exists v, eval_simple_rvalue e m a v end.