This is the lambda calculus with typing added in an extension.
Note the projection constraints proj_subst_same
and proj_eval_same
given by the host language.
These require substitution and evaluation to give the same results
across projections. These constraints make it possible for an
extension to add typing and prove type preservation, but it means
new constructs can be little more than syntactic sugar when it
comes to evaluation.