fact: Fixpoint subst_te (Z : atom) (U : typ) (e : exp) {struct e} : exp := match e with | exp_bvar i => exp_bvar i | exp_fvar x => exp_fvar x | exp_abs V e1 => exp_abs (subst_tt Z U V) (subst_te Z U e1) | exp_app e1 e2 => exp_app (subst_te Z U e1) (subst_te Z U e2) | exp_tabs V e1 => exp_tabs (subst_tt Z U V) (subst_te Z U e1) | exp_tapp e1 V => exp_tapp (subst_te Z U e1) (subst_tt Z U V) | exp_let e1 e2 => exp_let (subst_te Z U e1) (subst_te Z U e2) | exp_inl e1 => exp_inl (subst_te Z U e1) | exp_inr e1 => exp_inr (subst_te Z U e1) | exp_case e1 e2 e3 => exp_case (subst_te Z U e1) (subst_te Z U e2) (subst_te Z U e3) end.
imports: Fsub.Fsub_LetSum_Definitions