Definition cast_pointer_to_bool t1 t2 :=
 match t1 with (Tpointer _ _ | Tarray _ _ _ | Tfunction _ _ _) => 
           match t2 with Tint IBool _ _ => true | _ => false end
 | _ => false
end.

Lemma eval_unop_relate: forall {CS: compspecs} Delta (ge: genv) te ve rho u e t m (Hcenv : genv_cenv ge = @cenv_cs CS) (H : rho = construct_rho (filter_genv ge) ve te) (H0 : typecheck_environ Delta rho) (H1 : (denote_tc_assert (typecheck_expr Delta e) rho) (m_phi m) -> Clight.eval_expr ge ve te (m_dry m) e (eval_expr e rho)) (H2 : (denote_tc_assert (typecheck_lvalue Delta e) rho) (m_phi m) -> exists (b : block) (ofs : ptrofs), Clight.eval_lvalue ge ve te (m_dry m) e b ofs /\ eval_lvalue e rho = Vptr b ofs) (H3 : (denote_tc_assert (typecheck_expr Delta (Eunop u e t)) rho) (m_phi m)), Clight.eval_expr ge ve te (m_dry m) (Eunop u e t) (eval_expr (Eunop u e t) rho).