Basically, we type check E, using everything that was already in the static environment, because E can use any earlier bindings, and it gets to use the argument, so it knows x1 has type t1, x2 has type t2 and so on. 