Ltac unfold_tc_denote :=
unfold denote_tc_nonzero in *;
unfold isptr in *;
unfold denote_tc_igt in *;
unfold denote_tc_Zle in *;
unfold denote_tc_Zge in *;
unfold denote_tc_samebase in *;
unfold denote_tc_nodivover in *;
unfold denote_tc_initialized in *.

(* Specifications: *)
Lemma typecheck_lvalue_Evar:
forall {CS: compspecs} i t pt Delta rho m, typecheck_environ Delta rho ->
denote_tc_assert (typecheck_lvalue Delta (Evar i t)) rho m ->
is_pointer_type pt = true ->
tc_val pt (eval_lvalue (Evar i t) rho).
Lemma typecheck_expr_sound_Efield:
forall {CS: compspecs} Delta rho e i t m
(H: typecheck_environ Delta rho)
(IHe: (denote_tc_assert (typecheck_expr Delta e) rho m ->
tc_val (typeof e) (eval_expr e rho)) /\
(forall pt : type,
denote_tc_assert (typecheck_lvalue Delta e) rho m ->
is_pointer_type pt = true ->
tc_val pt (eval_lvalue e rho)))
(H0: denote_tc_assert (typecheck_expr Delta (Efield e i t)) rho m),
tc_val (typeof (Efield e i t)) (eval_expr (Efield e i t) rho).
Lemma typecheck_lvalue_sound_Efield:
forall {CS: compspecs} Delta rho m e i t pt
(H: typecheck_environ Delta rho)
(IHe: (denote_tc_assert (typecheck_expr Delta e) rho m ->
tc_val (typeof e) (eval_expr e rho)) /\
(forall pt0 : type, denote_tc_assert (typecheck_lvalue Delta e) rho m ->
is_pointer_type pt0 = true ->
tc_val pt0 (eval_lvalue e rho)))
(H0: denote_tc_assert (typecheck_lvalue Delta (Efield e i t)) rho m)
(H1: is_pointer_type pt = true),
tc_val pt (eval_lvalue (Efield e i t) rho).
Lemma typecheck_expr_sound_Evar:
forall {CS: compspecs} Delta rho m i t,
typecheck_environ Delta rho ->
denote_tc_assert (typecheck_expr Delta (Evar i t)) rho m ->
tc_val (typeof (Evar i t)) (eval_expr (Evar i t) rho).