Definition some_pt_type := Tpointer Tvoid noattr.

(* Specifications: *)
Lemma tc_force_Some : forall ov t, tc_val t (force_val ov)
-> exists v, ov = Some v.
Lemma typecheck_binop_sound2:
forall {CS: compspecs} (Delta : tycontext) (rho : environ) m (b : binary_operation)
(e1 e2 : expr) (t : type),
denote_tc_assert (typecheck_expr Delta e2) rho m ->
denote_tc_assert (isBinOpResultType b e1 e2 t) rho m ->
denote_tc_assert (typecheck_expr Delta e1) rho m ->
tc_val (typeof e2) (eval_expr e2 rho) ->
tc_val (typeof e1) (eval_expr e1 rho) ->
tc_val t
(eval_binop b (typeof e1) (typeof e2) (eval_expr e1 rho) (eval_expr e2 rho)).
Lemma eval_binop_relate_fail :
forall {CS: compspecs} (Delta : tycontext) (rho : environ) (b : binary_operation)
(e1 e2 : expr) (t : type) m,
typecheck_environ  Delta rho ->
forall (ge : genv) te ve,
rho = construct_rho (filter_genv ge) ve te ->
denote_tc_assert (typecheck_expr Delta e2) rho (m_phi m) ->
denote_tc_assert (isBinOpResultType b e1 e2 t) rho (m_phi m) ->
denote_tc_assert (typecheck_expr Delta e1) rho (m_phi m) ->
None =
sem_binary_operation' b  (typeof e1) (typeof e2) (eval_expr e1 rho) (eval_expr e2 rho) ->
Clight.eval_expr ge ve te (m_dry m) e2 (eval_expr e2 rho) ->
Clight.eval_expr ge ve te (m_dry m) e1 (eval_expr e1 rho) ->
Clight.eval_expr ge ve te (m_dry m) (Ebinop b e1 e2 t) Vundef.