I wonder how much this is a problem in practice, aside from the type-checker taking too long.
It incrementally covers normalization by evaluation, bidirectional typechecking, basic pattern unification, implicit insertion (which relies on unification), and then more sophisticated variants on pattern unification.