Definition msubst_tc_lvalue (e: expr) :=
  msubst_denote_tc_assert (msubst_simpl_tc_assert T1 (typecheck_lvalue Delta e)).Definition msubst_tc_expr (e: expr) :=
  msubst_denote_tc_assert (msubst_simpl_tc_assert T1 (typecheck_expr Delta e)).Definition msubst_tc_LR (e: expr) (lr: LLRR) :=
  msubst_denote_tc_assert (msubst_simpl_tc_assert T1 (typecheck_LR Delta e lr)).Definition msubst_tc_efield (efs: list efield) := 
  msubst_denote_tc_assert (msubst_simpl_tc_assert T1 (typecheck_efield Delta efs)).Definition msubst_tc_exprlist (ts: list type) (es: list expr) :=
  msubst_denote_tc_assert (msubst_simpl_tc_assert T1 (typecheck_exprlist Delta ts es)).Definition msubst_tc_expropt (e: option expr) (t: type) :=
  msubst_denote_tc_assert (msubst_simpl_tc_assert T1
    (match e with
     | None => tc_bool (eqb_type t Tvoid) wrong_signature
     | Some e' => typecheck_expr Delta (Ecast e' t)
     end)).

(* Specifications: *)
Lemma legal_tc_init_tc_bool: forall Delta b err, legal_tc_init Delta (tc_bool b err).
Lemma legal_tc_init_tc_andp: forall Delta tc1 tc2, legal_tc_init Delta tc1 -> legal_tc_init Delta tc2 -> legal_tc_init Delta (tc_andp tc1 tc2).
Lemma legal_tc_init_tc_nonzero: forall {cs: compspecs} Delta e, legal_tc_init Delta (tc_nonzero e).
Lemma legal_tc_init_tc_iszero: forall {cs: compspecs} Delta e, legal_tc_init Delta (tc_iszero e).
Lemma legal_tc_init_tc_test_eq: forall {cs: compspecs} Delta e1 e2, legal_tc_init Delta (tc_test_eq e1 e2).
Lemma legal_tc_init_tc_test_order: forall {cs: compspecs} Delta e1 e2, legal_tc_init Delta (tc_test_order e1 e2).
Lemma legal_tc_init_tc_nodivover: forall {cs: compspecs} Delta e1 e2, legal_tc_init Delta (tc_nodivover e1 e2).
Lemma legal_tc_init_tc_ilt: forall {cs: compspecs} Delta e i, legal_tc_init Delta (tc_ilt e i).
Lemma legal_tc_init_tc_llt: forall {cs: compspecs} Delta e i, legal_tc_init Delta (tc_llt e i).
Lemma legal_tc_init_binarithType: forall Delta t1 t2 t err err', legal_tc_init Delta (binarithType t1 t2 t err err').
Lemma legal_tc_init_tc_nobinover: forall {cs: compspecs} Delta op e1 e2, legal_tc_init Delta (tc_nobinover op e1 e2).