In fact, I am doing it for fun and experiment. The performance seems to be slightly better so I just leave it alone. I think it's hard to predict the effect of this check. If I move it into ```equals```, then I will have to traverse the entire term the first time I compare it with other term. I tend to believe that it would slow down the system. Besides, that is a lot of changes to make.

On the other hand, consider the situation here: if ```equals``` returns true I lose the time spent on ```hashCode```; if ```equals``` should return false, then I probably have skipped calling it and later calls to ```hashCode``` on any subterms can be done in constant time.

Anyway, I tend to keep the check here.