simplify union and implement (f)