This generates the common variables that are included in the ```self``` (say ```Product(x**k, (k, 1, n))``` or for integration, it's non-dummy variables) and ```new```'s variable list. For the instance we can neglect the ```set``` keyword in ```...intersection(set(new.atoms(Symbol)))```. Because creation is anyway a set. No offense though