Definition lvalue_LR_of_type: forall Delta rho P p t e,
t = typeof e ->
tc_environ Delta rho ->
P |-- !! (p = eval_lvalue e rho) && tc_lvalue Delta e rho ->
P |-- !! (p = eval_LR e (LR_of_type t) rho) && tc_LR_strong Delta e (LR_of_type t) rho.

Lemma tc_lvalue_nested_efield: forall Delta t_root e efs gfs tts lr p,
field_compatible t_root gfs p ->
LR_of_type t_root = lr ->
legal_nested_efield t_root e gfs tts lr = true ->
type_is_by_value (nested_field_type t_root gfs) = true ->
local (`(eq p) (eval_LR e lr)) &&
tc_LR Delta e lr &&
local (tc_environ Delta) &&
tc_efield Delta efs &&
local (efield_denote efs gfs) |--
tc_lvalue Delta (nested_efield e efs tts).