separated constraint generation with intermediate unification from constraint generation without intermediate unification and parts that both methods need