congruence closure