Например, требуется упростить,
2*x*3*(y+1) - 6*x
до
6*x*y
В принципе запрограммировать данное упрощение можно, но при этом не совсем понятно какие структуры данных и алгоритмы лучше для этого использовать.

Может быть кто-нибудь читал какую-нибудь статью или книгу, где описывается подобный алгоритм и детально описываются применяемые структуры данных?